static bus_addr_t ida_v3_done(struct ida_softc *ida) { bus_addr_t completed; completed = ida_inl(ida, R_DONE_FIFO); if (completed == -1) { return (0); /* fifo is empty */ } return (completed); }
static bus_addr_t ida_v4_done(struct ida_softc *ida) { bus_addr_t completed; completed = ida_inl(ida, R_42XX_REPLY); if (completed == -1) return (0); /* fifo is empty */ ida_outl(ida, R_42XX_REPLY, 0); /* confirm read */ return (completed); }
static void ida_timeout(void *arg) { struct ida_softc *ida; ida = (struct ida_softc *)arg; device_printf(ida->dev, "%s() qactive %d\n", __func__, ida->qactive); if (ida->flags & IDA_INTERRUPTS) device_printf(ida->dev, "IDA_INTERRUPTS\n"); device_printf(ida->dev, "\t R_CMD_FIFO: %08x\n" "\t R_DONE_FIFO: %08x\n" "\t R_INT_MASK: %08x\n" "\t R_STATUS: %08x\n" "\tR_INT_PENDING: %08x\n", ida_inl(ida, R_CMD_FIFO), ida_inl(ida, R_DONE_FIFO), ida_inl(ida, R_INT_MASK), ida_inl(ida, R_STATUS), ida_inl(ida, R_INT_PENDING)); return; }
static bus_addr_t ida_v1_done(struct ida_softc *ida) { struct ida_hardware_qcb *hwqcb; bus_addr_t completed; u_int8_t status; if ((ida_inb(ida, R_EISA_SYSTEM_DOORBELL) & EISA_CHANNEL_BUSY) == 0) return (0); ida_outb(ida, R_EISA_SYSTEM_DOORBELL, EISA_CHANNEL_BUSY); completed = ida_inl(ida, R_EISA_COMPLETE_ADDR); status = ida_inb(ida, R_EISA_LIST_STATUS); ida_outb(ida, R_EISA_LOCAL_DOORBELL, EISA_CHANNEL_CLEAR); if (completed != 0) { hwqcb = (struct ida_hardware_qcb *) ((bus_addr_t)ida->hwqcbs + ((completed & ~3) - ida->hwqcb_busaddr)); hwqcb->req.error = status; } return (completed); }
static int ida_v2_int_pending(struct ida_softc *ida) { return (ida_inl(ida, R_INT_PENDING)); }
static bus_addr_t ida_v2_done(struct ida_softc *ida) { return (ida_inl(ida, R_DONE_FIFO)); }
static int ida_v2_fifo_full(struct ida_softc *ida) { return (ida_inl(ida, R_CMD_FIFO) == 0); }
static int ida_v4_fifo_full(struct ida_softc *ida) { return (ida_inl(ida, R_42XX_REQUEST) != 0); }
static int ida_v4_int_pending(struct ida_softc *ida) { return (ida_inl(ida, R_42XX_STATUS) & STATUS_42XX_INT_PENDING); }