static vmm_irq_return_t imx_irq_handler(int irq, void *dev_id) { struct imx_port *port = dev_id; unsigned int sts; sts = vmm_readl((void *)port->base + USR1); if (sts & USR1_RRDY) { imx_rxint(port); } #if defined(UART_IMX_USE_TXINTR) if ((sts & USR1_TRDY) && (port->mask & UCR1_TXMPTYEN)) { imx_txint(port); } #endif if (sts & USR1_RTSD) { imx_rtsint(port); } sts &= USR1_PARITYERR | USR1_RTSD | USR1_ESCF | USR1_FRAMERR | USR1_TIMEOUT | USR1_AIRINT | USR1_AWAKE; if (sts) { vmm_writel(sts, (void *)port->base + USR1); } return VMM_IRQ_HANDLED; }
static irqreturn_t imx_int(int irq, void *dev_id) { struct imx_port *sport = dev_id; unsigned int sts; sts = readl(sport->port.membase + USR1); if (sts & USR1_RRDY) imx_rxint(irq, dev_id); if (sts & USR1_TRDY && readl(sport->port.membase + UCR1) & UCR1_TXMPTYEN) imx_txint(irq, dev_id); if (sts & USR1_RTSD) imx_rtsint(irq, dev_id); return IRQ_HANDLED; }