Beispiel #1
0
static struct cac_ccb *
cac_pci_l0_completed(struct cac_softc *sc)
{
    struct cac_ccb *ccb;
    u_int32_t off;

    if ((off = cac_inl(sc, CAC_42REG_DONE_FIFO)) == 0xffffffffU)
        return (NULL);

    cac_outl(sc, CAC_42REG_DONE_FIFO, 0);

    if ((off & 3) != 0)
        printf("%s: failed command list returned: %lx\n",
               device_xname(sc->sc_dev), (long)off);

    off = (off & ~3) - sc->sc_ccbs_paddr;
    ccb = (struct cac_ccb *)((char *)sc->sc_ccbs + off);

    bus_dmamap_sync(sc->sc_dmat, sc->sc_dmamap, off, sizeof(struct cac_ccb),
                    BUS_DMASYNC_PREWRITE | BUS_DMASYNC_PREREAD);

    if ((off & 3) != 0 && ccb->ccb_req.error == 0)
        ccb->ccb_req.error = CAC_RET_CMD_REJECTED;

    return (ccb);
}
Beispiel #2
0
static void
cac_l0_intr_enable(struct cac_softc *sc, int state)
{

	KASSERT(mutex_owned(&sc->sc_mutex));

	cac_outl(sc, CAC_REG_INTR_MASK,
	    state ? CAC_INTR_ENABLE : CAC_INTR_DISABLE);
}
Beispiel #3
0
static void
cac_pci_l0_submit(struct cac_softc *sc, struct cac_ccb *ccb)
{

    bus_dmamap_sync(sc->sc_dmat, sc->sc_dmamap,
                    (char *)ccb - (char *)sc->sc_ccbs,
                    sizeof(struct cac_ccb), BUS_DMASYNC_PREWRITE | BUS_DMASYNC_PREREAD);
    cac_outl(sc, CAC_42REG_CMD_FIFO, ccb->ccb_paddr);
}
Beispiel #4
0
static void
cac_l0_submit(struct cac_softc *sc, struct cac_ccb *ccb)
{

	KASSERT(mutex_owned(&sc->sc_mutex));

	bus_dmamap_sync(sc->sc_dmat, sc->sc_dmamap,
	    (char *)ccb - (char *)sc->sc_ccbs,
	    sizeof(struct cac_ccb), BUS_DMASYNC_PREWRITE | BUS_DMASYNC_PREREAD);
	cac_outl(sc, CAC_REG_CMD_FIFO, ccb->ccb_paddr);
}
Beispiel #5
0
static void
cac_pci_l0_intr_enable(struct cac_softc *sc, int state)
{

    cac_outl(sc, CAC_42REG_INTR_MASK, (state ? 0 : 8));	/* XXX */
}