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); }
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); }
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); }
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); }
static void cac_pci_l0_intr_enable(struct cac_softc *sc, int state) { cac_outl(sc, CAC_42REG_INTR_MASK, (state ? 0 : 8)); /* XXX */ }