/* * ------------------------------------------------------------ * dz_interrupt () * * this is the main interrupt routine for the DZ chip. * It deals with the multiple ports. * ------------------------------------------------------------ */ static irqreturn_t dz_interrupt(int irq, void *dev) { struct dz_port *dport = (struct dz_port *)dev; unsigned short status; /* get the reason why we just got an irq */ status = dz_in(dport, DZ_CSR); if ((status & (DZ_RDONE | DZ_RIE)) == (DZ_RDONE | DZ_RIE)) dz_receive_chars(dport, regs); if ((status & (DZ_TRDY | DZ_TIE)) == (DZ_TRDY | DZ_TIE)) dz_transmit_chars(dport); return IRQ_HANDLED; }
/* * ------------------------------------------------------------ * dz_interrupt () * * this is the main interrupt routine for the DZ chip. * It deals with the multiple ports. * ------------------------------------------------------------ */ static irqreturn_t dz_interrupt(int irq, void *dev, struct pt_regs *regs) { struct dz_port *dport; unsigned short status; /* get the reason why we just got an irq */ status = dz_in((struct dz_port *)dev, DZ_CSR); dport = &dz_ports[LINE(status)]; if (status & DZ_RDONE) dz_receive_chars(dport); if (status & DZ_TRDY) dz_transmit_chars(dport); /* FIXME: what about check modem status??? --rmk */ return IRQ_HANDLED; }