static void max3110_console_receive(struct uart_max3110 *max) { int loop = 1, num, total = 0; u8 recv_buf[512], *pbuf; pbuf = recv_buf; do { num = max3110_read_multi(max, 8, pbuf); if (num) { loop = 10; pbuf += num; total += num; if (total >= 500) { receive_chars(max, recv_buf, total); pbuf = recv_buf; total = 0; } } } while (--loop); if (total) receive_chars(max, recv_buf, total); }
/* * This routine will be used in read_thread or RX IRQ handling, * it will first do one round buffer read(8 words), if there is some * valid RX data, will try to read 5 more rounds till all data * is read out. * * Use stack space as data buffer to save some system load, and chose * 504 Btyes as a threadhold to do a bulk push to upper tty layer when * receiving bulk data, a much bigger buffer may cause stack overflow */ static void max3110_con_receive(struct uart_max3110 *max) { int loop = 1, num; do { num = max3110_read_multi(max); if (num) { loop = 5; } } while (--loop); }