static void ida_v2_int_enable(struct ida_softc *ida, int enable) { if (enable) ida->flags |= IDA_INTERRUPTS; else ida->flags &= ~IDA_INTERRUPTS; ida_outl(ida, R_INT_MASK, enable ? INT_ENABLE : INT_DISABLE); }
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_v1_submit(struct ida_softc *ida, struct ida_qcb *qcb) { u_int16_t size; /* * On these cards, this location is actually for control flags. * Set them to zero and pass in structure size via an I/O port. */ size = qcb->hwqcb->hdr.size << 2; qcb->hwqcb->hdr.size = 0; ida_outb(ida, R_EISA_SYSTEM_DOORBELL, EISA_CHANNEL_CLEAR); ida_outl(ida, R_EISA_LIST_ADDR, qcb->hwqcb_busaddr); ida_outw(ida, R_EISA_LIST_LEN, size); ida_outb(ida, R_EISA_LOCAL_DOORBELL, EISA_CHANNEL_BUSY); }
static void ida_v2_submit(struct ida_softc *ida, struct ida_qcb *qcb) { ida_outl(ida, R_CMD_FIFO, qcb->hwqcb_busaddr); }
static void ida_v4_submit(struct ida_softc *ida, struct ida_qcb *qcb) { ida_outl(ida, R_42XX_REQUEST, qcb->hwqcb_busaddr); }