static void enable_fifo() { /* check if there is a fifo and how deep it is */ uint8_t info = read_iir(); if ((info & IIR_FIFO_ENABLED) == IIR_FIFO_ENABLED) { fifo_depth = 16; write_fcr(FCR_TRIGGER_16_1 | FCR_ENABLE); } else { fifo_depth = 1; } }
static bool clear_iir(void) { uint8_t iir; while (! ((iir = read_iir()) & IIR_PENDING)) { switch(iir & IIR_REASON) { case IIR_RDA: case IIR_TIME: while (read_lsr() & LSR_DATA_READY) { bool result = handle_char(); if (result) { return result; } } default: break; } } return false; }
static void clear_iir() { uint8_t iir; while (! ((iir = read_iir()) & IIR_PENDING)) { switch(iir & IIR_REASON) { case IIR_MSR: read_msr(); break; case IIR_THR: break; case IIR_RDA: case IIR_TIME: while (read_lsr() & LSR_DATA_READY) { handle_char(read_rbr()); } break; case IIR_LSR: read_lsr(); break; } } }