Lines Matching defs:ida

46 #include <dev/ida/idavar.h>
47 #include <dev/ida/idareg.h>
62 ida_v1_fifo_full(struct ida_softc *ida)
66 status = ida_inb(ida, R_EISA_SYSTEM_DOORBELL);
71 ida_v1_submit(struct ida_softc *ida, struct ida_qcb *qcb)
82 ida_outb(ida, R_EISA_SYSTEM_DOORBELL, EISA_CHANNEL_CLEAR);
83 ida_outl(ida, R_EISA_LIST_ADDR, qcb->hwqcb_busaddr);
84 ida_outw(ida, R_EISA_LIST_LEN, size);
85 ida_outb(ida, R_EISA_LOCAL_DOORBELL, EISA_CHANNEL_BUSY);
89 ida_v1_done(struct ida_softc *ida)
95 if ((ida_inb(ida, R_EISA_SYSTEM_DOORBELL) & EISA_CHANNEL_BUSY) == 0)
98 ida_outb(ida, R_EISA_SYSTEM_DOORBELL, EISA_CHANNEL_BUSY);
99 completed = ida_inl(ida, R_EISA_COMPLETE_ADDR);
100 status = ida_inb(ida, R_EISA_LIST_STATUS);
101 ida_outb(ida, R_EISA_LOCAL_DOORBELL, EISA_CHANNEL_CLEAR);
105 ((bus_addr_t)ida->hwqcbs +
106 ((completed & ~3) - ida->hwqcb_busaddr));
114 ida_v1_int_pending(struct ida_softc *ida)
116 return (ida_inb(ida, R_EISA_SYSTEM_DOORBELL) & EISA_CHANNEL_BUSY);
120 ida_v1_int_enable(struct ida_softc *ida, int enable)
123 ida_outb(ida, R_EISA_SYSTEM_DOORBELL, ~EISA_CHANNEL_CLEAR);
124 ida_outb(ida, R_EISA_LOCAL_DOORBELL, EISA_CHANNEL_BUSY);
125 ida_outb(ida, R_EISA_INT_MASK, INT_ENABLE);
126 ida_outb(ida, R_EISA_SYSTEM_MASK, INT_ENABLE);
127 ida->flags |= IDA_INTERRUPTS;
129 ida_outb(ida, R_EISA_SYSTEM_MASK, INT_DISABLE);
130 ida->flags &= ~IDA_INTERRUPTS;
135 ida_v2_fifo_full(struct ida_softc *ida)
137 return (ida_inl(ida, R_CMD_FIFO) == 0);
141 ida_v2_submit(struct ida_softc *ida, struct ida_qcb *qcb)
143 ida_outl(ida, R_CMD_FIFO, qcb->hwqcb_busaddr);
147 ida_v2_done(struct ida_softc *ida)
149 return (ida_inl(ida, R_DONE_FIFO));
153 ida_v2_int_pending(struct ida_softc *ida)
155 return (ida_inl(ida, R_INT_PENDING));
159 ida_v2_int_enable(struct ida_softc *ida, int enable)
162 ida->flags |= IDA_INTERRUPTS;
164 ida->flags &= ~IDA_INTERRUPTS;
165 ida_outl(ida, R_INT_MASK, enable ? INT_ENABLE : INT_DISABLE);
212 "ida",
274 struct ida_softc *ida;
279 ida = device_get_softc(dev);
280 ida->dev = dev;
283 ida->cmd = *board->accessor;
284 ida->flags = board->flags;
285 mtx_init(&ida->lock, "ida", NULL, MTX_DEF);
286 callout_init_mtx(&ida->ch, &ida->lock, 0);
288 ida->regs_res_type = SYS_RES_IOPORT;
289 ida->regs_res_id = 0;
290 ida->regs = bus_alloc_resource_any(dev, ida->regs_res_type,
291 &ida->regs_res_id, RF_ACTIVE);
292 if (ida->regs == NULL) {
311 &ida->parent_dmat);
315 ida_free(ida);
320 ida->irq_res_type = SYS_RES_IRQ;
321 ida->irq = bus_alloc_resource_any(dev, ida->irq_res_type, &rid,
323 if (ida->irq == NULL) {
324 ida_free(ida);
328 error = bus_setup_intr(dev, ida->irq, INTR_TYPE_BIO | INTR_ENTROPY | INTR_MPSAFE,
329 NULL, ida_intr, ida, &ida->ih);
332 ida_free(ida);
336 error = ida_init(ida);
338 ida_free(ida);
345 DRIVER_MODULE(ida, eisa, ida_eisa_driver, ida_devclass, 0, 0);