| 1233 | |
| 1234 | |
| 1235 | static void _serial_rx_flush(struct rt_serial_device *serial) |
| 1236 | { |
| 1237 | rt_base_t level; |
| 1238 | struct rt_serial_rx_fifo *rx_fifo; |
| 1239 | RT_ASSERT(serial != RT_NULL); |
| 1240 | |
| 1241 | if (serial->config.rx_bufsz == 0) |
| 1242 | { |
| 1243 | rt_uint32_t rx_flush_limit = 0xFFFFFFF; |
| 1244 | while (serial->ops->getc(serial) != -1 && rx_flush_limit > 0) |
| 1245 | { |
| 1246 | rx_flush_limit--; |
| 1247 | } |
| 1248 | } |
| 1249 | else |
| 1250 | { |
| 1251 | rx_fifo = (struct rt_serial_rx_fifo *)serial->serial_rx; |
| 1252 | RT_ASSERT(rx_fifo != RT_NULL); |
| 1253 | |
| 1254 | level = rt_spin_lock_irqsave(&serial->spinlock); |
| 1255 | rt_completion_wait(&rx_fifo->rx_cpt, 0); |
| 1256 | rt_ringbuffer_reset(&rx_fifo->rb); |
| 1257 | rx_fifo->rx_cpt_index = 0; |
| 1258 | #ifdef RT_SERIAL_USING_DMA |
| 1259 | rt_serial_update_read_index(&rx_fifo->dma_ping_rb, rt_ringbuffer_get_size(&rx_fifo->dma_ping_rb)); |
| 1260 | #endif |
| 1261 | rt_spin_unlock_irqrestore(&serial->spinlock, level); |
| 1262 | } |
| 1263 | } |
| 1264 | |
| 1265 | static void _serial_tx_flush(struct rt_serial_device *serial) |
| 1266 | { |
no test coverage detected