static irqreturn_t pl010_int(int irq, void *dev_id) { struct uart_port *port = dev_id; unsigned int status, pass_counter = AMBA_ISR_PASS_LIMIT; int handled = 0; spin_lock(&port->lock); status = readb(port->membase + UART010_IIR); if (status) { do { if (status & (UART010_IIR_RTIS | UART010_IIR_RIS)) pl010_rx_chars(port); if (status & UART010_IIR_MIS) pl010_modem_status(port); if (status & UART010_IIR_TIS) pl010_tx_chars(port); if (pass_counter-- == 0) break; status = readb(port->membase + UART010_IIR); } while (status & (UART010_IIR_RTIS | UART010_IIR_RIS | UART010_IIR_TIS)); handled = 1; } spin_unlock(&port->lock); return IRQ_RETVAL(handled); }
static irqreturn_t pl010_int(int irq, void *dev_id, struct pt_regs *regs) { struct uart_port *port = dev_id; unsigned int status, pass_counter = AMBA_ISR_PASS_LIMIT; int handled = 0; spin_lock(&port->lock); status = UART_GET_INT_STATUS(port); if (status) { do { if (status & (UART010_IIR_RTIS | UART010_IIR_RIS)) #ifdef SUPPORT_SYSRQ pl010_rx_chars(port, regs); #else pl010_rx_chars(port); #endif if (status & UART010_IIR_MIS) pl010_modem_status(port); if (status & UART010_IIR_TIS) pl010_tx_chars(port); if (pass_counter-- == 0) break; status = UART_GET_INT_STATUS(port); } while (status & (UART010_IIR_RTIS | UART010_IIR_RIS | UART010_IIR_TIS)); handled = 1; } spin_unlock(&port->lock); return IRQ_RETVAL(handled); }