예제 #1
0
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);
}
예제 #2
0
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);
}
예제 #3
0
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);
}
예제 #4
0
static void
ida_v2_submit(struct ida_softc *ida, struct ida_qcb *qcb)
{
    ida_outl(ida, R_CMD_FIFO, qcb->hwqcb_busaddr);
}
예제 #5
0
static void
ida_v4_submit(struct ida_softc *ida, struct ida_qcb *qcb)
{
	ida_outl(ida, R_42XX_REQUEST, qcb->hwqcb_busaddr);
}