Lines Matching refs:ccb
838 struct ips_ccb *ccb = xs->io; in ips_scsi_cmd() local
891 ccb = xs->io; in ips_scsi_cmd()
893 cmd = ccb->c_cmdbva; in ips_scsi_cmd()
899 if (ips_load_xs(sc, ccb, xs)) { in ips_scsi_cmd()
910 ccb->c_done = ips_done_xs; in ips_scsi_cmd()
911 ips_start_xs(sc, ccb, xs); in ips_scsi_cmd()
939 cmd = ccb->c_cmdbva; in ips_scsi_cmd()
942 ccb->c_done = ips_done_xs; in ips_scsi_cmd()
943 ips_start_xs(sc, ccb, xs); in ips_scsi_cmd()
965 struct ips_ccb *ccb = xs->io; in ips_scsi_pt_cmd() local
993 cmdb = ccb->c_cmdbva; in ips_scsi_pt_cmd()
1026 if (ips_load_xs(sc, ccb, xs)) { in ips_scsi_pt_cmd()
1037 cmd->sgaddr = htole32(ccb->c_cmdbpa + offsetof(struct ips_cmdb, dcdb)); in ips_scsi_pt_cmd()
1040 ccb->c_done = ips_done_pt; in ips_scsi_pt_cmd()
1041 ips_start_xs(sc, ccb, xs); in ips_scsi_pt_cmd()
1322 ips_load_xs(struct ips_softc *sc, struct ips_ccb *ccb, struct scsi_xfer *xs) in ips_load_xs() argument
1324 struct ips_cmdb *cmdb = ccb->c_cmdbva; in ips_load_xs()
1333 if (bus_dmamap_load(sc->sc_dmat, ccb->c_dmam, xs->data, xs->datalen, in ips_load_xs()
1336 bus_dmamap_sync(sc->sc_dmat, ccb->c_dmam, 0,ccb->c_dmam->dm_mapsize, in ips_load_xs()
1340 if ((nsegs = ccb->c_dmam->dm_nsegs) > IPS_MAXSGS) in ips_load_xs()
1345 cmd->sgaddr = htole32(ccb->c_cmdbpa + offsetof(struct ips_cmdb, in ips_load_xs()
1350 sg[i].addr = htole32(ccb->c_dmam->dm_segs[i].ds_addr); in ips_load_xs()
1351 sg[i].size = htole32(ccb->c_dmam->dm_segs[i].ds_len); in ips_load_xs()
1355 cmd->sgaddr = htole32(ccb->c_dmam->dm_segs[0].ds_addr); in ips_load_xs()
1362 ips_start_xs(struct ips_softc *sc, struct ips_ccb *ccb, struct scsi_xfer *xs) in ips_start_xs() argument
1364 ccb->c_flags = xs->flags; in ips_start_xs()
1365 ccb->c_xfer = xs; in ips_start_xs()
1369 timeout_set(&xs->stimeout, ips_timeout, ccb); in ips_start_xs()
1378 ips_cmd(sc, ccb); in ips_start_xs()
1382 ips_cmd(struct ips_softc *sc, struct ips_ccb *ccb) in ips_cmd() argument
1384 struct ips_cmd *cmd = ccb->c_cmdbva; in ips_cmd()
1389 "seccnt %d\n", sc->sc_dev.dv_xname, ccb->c_id, ccb->c_flags, in ips_cmd()
1390 ccb->c_xfer, cmd->code, cmd->drive, cmd->sgcnt, letoh32(cmd->lba), in ips_cmd()
1393 cmd->id = ccb->c_id; in ips_cmd()
1397 ips_exec(sc, ccb); in ips_cmd()
1398 ccb->c_state = IPS_CCB_QUEUED; in ips_cmd()
1399 if (ccb->c_flags & SCSI_POLL) in ips_cmd()
1400 error = ips_poll(sc, ccb); in ips_cmd()
1407 ips_poll(struct ips_softc *sc, struct ips_ccb *ccb) in ips_poll() argument
1413 if (ccb->c_flags & SCSI_NOSLEEP) { in ips_poll()
1421 if (ccb->c_state == IPS_CCB_DONE) in ips_poll()
1426 msecs = ccb->c_xfer ? ccb->c_xfer->timeout : IPS_TIMEOUT; in ips_poll()
1430 tsleep_nsec(ccb, PRIBIO + 1, "ipscmd", MSEC_TO_NSEC(msecs)); in ips_poll()
1433 ccb->c_state)); in ips_poll()
1435 if (ccb->c_state != IPS_CCB_DONE) in ips_poll()
1440 ccb->c_stat = IPS_STAT_TIMO; in ips_poll()
1442 ips_done(sc, ccb); in ips_poll()
1443 error = ccb->c_error; in ips_poll()
1449 ips_done(struct ips_softc *sc, struct ips_ccb *ccb) in ips_done() argument
1454 sc->sc_dev.dv_xname, ccb->c_id, ccb->c_flags, ccb->c_xfer)); in ips_done()
1456 ccb->c_error = ips_error(sc, ccb); in ips_done()
1457 ccb->c_done(sc, ccb); in ips_done()
1461 ips_done_xs(struct ips_softc *sc, struct ips_ccb *ccb) in ips_done_xs() argument
1463 struct scsi_xfer *xs = ccb->c_xfer; in ips_done_xs()
1469 bus_dmamap_sync(sc->sc_dmat, ccb->c_dmam, 0, in ips_done_xs()
1470 ccb->c_dmam->dm_mapsize, xs->flags & SCSI_DATA_IN ? in ips_done_xs()
1472 bus_dmamap_unload(sc->sc_dmat, ccb->c_dmam); in ips_done_xs()
1476 xs->error = ips_error_xs(sc, ccb); in ips_done_xs()
1481 ips_done_pt(struct ips_softc *sc, struct ips_ccb *ccb) in ips_done_pt() argument
1483 struct scsi_xfer *xs = ccb->c_xfer; in ips_done_pt()
1484 struct ips_cmdb *cmdb = ccb->c_cmdbva; in ips_done_pt()
1492 bus_dmamap_sync(sc->sc_dmat, ccb->c_dmam, 0, in ips_done_pt()
1493 ccb->c_dmam->dm_mapsize, xs->flags & SCSI_DATA_IN ? in ips_done_pt()
1495 bus_dmamap_unload(sc->sc_dmat, ccb->c_dmam); in ips_done_pt()
1502 xs->error = ips_error_xs(sc, ccb); in ips_done_pt()
1522 ips_done_mgmt(struct ips_softc *sc, struct ips_ccb *ccb) in ips_done_mgmt() argument
1524 if (ccb->c_flags & (SCSI_DATA_IN | SCSI_DATA_OUT)) in ips_done_mgmt()
1527 ccb->c_flags & SCSI_DATA_IN ? BUS_DMASYNC_POSTREAD : in ips_done_mgmt()
1529 scsi_io_put(&sc->sc_iopool, ccb); in ips_done_mgmt()
1533 ips_error(struct ips_softc *sc, struct ips_ccb *ccb) in ips_error() argument
1535 struct ips_cmdb *cmdb = ccb->c_cmdbva; in ips_error()
1538 struct scsi_xfer *xs = ccb->c_xfer; in ips_error()
1539 u_int8_t gsc = IPS_STAT_GSC(ccb->c_stat); in ips_error()
1546 sc->sc_dev.dv_xname, ccb->c_stat, ccb->c_estat, cmd->code, in ips_error()
1559 if (ccb->c_estat == IPS_ESTAT_CKCOND) { in ips_error()
1579 switch (ccb->c_estat) { in ips_error()
1597 ips_error_xs(struct ips_softc *sc, struct ips_ccb *ccb) in ips_error_xs() argument
1599 struct ips_cmdb *cmdb = ccb->c_cmdbva; in ips_error_xs()
1601 struct scsi_xfer *xs = ccb->c_xfer; in ips_error_xs()
1602 u_int8_t gsc = IPS_STAT_GSC(ccb->c_stat); in ips_error_xs()
1614 switch (ccb->c_estat) { in ips_error_xs()
1640 struct ips_ccb *ccb; in ips_intr() local
1663 ccb = &sc->sc_ccb[id]; in ips_intr()
1664 if (ccb->c_state != IPS_CCB_QUEUED) { in ips_intr()
1667 sc->sc_dev.dv_xname, ccb->c_id, ccb->c_state, in ips_intr()
1672 ccb->c_state = IPS_CCB_DONE; in ips_intr()
1673 ccb->c_stat = IPS_STAT_BASIC(status); in ips_intr()
1674 ccb->c_estat = IPS_STAT_EXT(status); in ips_intr()
1676 if (ccb->c_flags & SCSI_POLL) { in ips_intr()
1677 wakeup(ccb); in ips_intr()
1679 ips_done(sc, ccb); in ips_intr()
1689 struct ips_ccb *ccb = arg; in ips_timeout() local
1690 struct ips_softc *sc = ccb->c_sc; in ips_timeout()
1691 struct scsi_xfer *xs = ccb->c_xfer; in ips_timeout()
1706 ccb->c_stat = IPS_STAT_TIMO; in ips_timeout()
1707 ips_done(sc, ccb); in ips_timeout()
1714 struct ips_ccb *ccb; in ips_getadapterinfo() local
1717 ccb = scsi_io_get(&sc->sc_iopool, 0); in ips_getadapterinfo()
1718 if (ccb == NULL) in ips_getadapterinfo()
1721 ccb->c_flags = SCSI_DATA_IN | SCSI_POLL | flags; in ips_getadapterinfo()
1722 ccb->c_done = ips_done_mgmt; in ips_getadapterinfo()
1724 cmd = ccb->c_cmdbva; in ips_getadapterinfo()
1729 return (ips_cmd(sc, ccb)); in ips_getadapterinfo()
1735 struct ips_ccb *ccb; in ips_getdriveinfo() local
1738 ccb = scsi_io_get(&sc->sc_iopool, 0); in ips_getdriveinfo()
1739 if (ccb == NULL) in ips_getdriveinfo()
1742 ccb->c_flags = SCSI_DATA_IN | SCSI_POLL | flags; in ips_getdriveinfo()
1743 ccb->c_done = ips_done_mgmt; in ips_getdriveinfo()
1745 cmd = ccb->c_cmdbva; in ips_getdriveinfo()
1750 return (ips_cmd(sc, ccb)); in ips_getdriveinfo()
1756 struct ips_ccb *ccb; in ips_getconf() local
1759 ccb = scsi_io_get(&sc->sc_iopool, 0); in ips_getconf()
1760 if (ccb == NULL) in ips_getconf()
1763 ccb->c_flags = SCSI_DATA_IN | SCSI_POLL | flags; in ips_getconf()
1764 ccb->c_done = ips_done_mgmt; in ips_getconf()
1766 cmd = ccb->c_cmdbva; in ips_getconf()
1771 return (ips_cmd(sc, ccb)); in ips_getconf()
1777 struct ips_ccb *ccb; in ips_getpg5() local
1780 ccb = scsi_io_get(&sc->sc_iopool, 0); in ips_getpg5()
1781 if (ccb == NULL) in ips_getpg5()
1784 ccb->c_flags = SCSI_DATA_IN | SCSI_POLL | flags; in ips_getpg5()
1785 ccb->c_done = ips_done_mgmt; in ips_getpg5()
1787 cmd = ccb->c_cmdbva; in ips_getpg5()
1793 return (ips_cmd(sc, ccb)); in ips_getpg5()
1800 struct ips_ccb *ccb; in ips_getrblstat() local
1803 ccb = scsi_io_get(&sc->sc_iopool, 0); in ips_getrblstat()
1804 if (ccb == NULL) in ips_getrblstat()
1807 ccb->c_flags = SCSI_DATA_IN | SCSI_POLL | flags; in ips_getrblstat()
1808 ccb->c_done = ips_done_mgmt; in ips_getrblstat()
1810 cmd = ccb->c_cmdbva; in ips_getrblstat()
1815 return (ips_cmd(sc, ccb)); in ips_getrblstat()
1821 struct ips_ccb *ccb; in ips_setstate() local
1824 ccb = scsi_io_get(&sc->sc_iopool, 0); in ips_setstate()
1825 if (ccb == NULL) in ips_setstate()
1828 ccb->c_flags = SCSI_POLL | flags; in ips_setstate()
1829 ccb->c_done = ips_done_mgmt; in ips_setstate()
1831 cmd = ccb->c_cmdbva; in ips_setstate()
1837 return (ips_cmd(sc, ccb)); in ips_setstate()
1844 struct ips_ccb *ccb; in ips_rebuild() local
1847 ccb = scsi_io_get(&sc->sc_iopool, 0); in ips_rebuild()
1848 if (ccb == NULL) in ips_rebuild()
1851 ccb->c_flags = SCSI_POLL | flags; in ips_rebuild()
1852 ccb->c_done = ips_done_mgmt; in ips_rebuild()
1854 cmd = ccb->c_cmdbva; in ips_rebuild()
1860 return (ips_cmd(sc, ccb)); in ips_rebuild()
1865 ips_copperhead_exec(struct ips_softc *sc, struct ips_ccb *ccb) in ips_copperhead_exec() argument
1880 bus_space_write_4(sc->sc_iot, sc->sc_ioh, IPS_REG_CCSA, ccb->c_cmdbpa); in ips_copperhead_exec()
1929 ips_morpheus_exec(struct ips_softc *sc, struct ips_ccb *ccb) in ips_morpheus_exec() argument
1931 bus_space_write_4(sc->sc_iot, sc->sc_ioh, IPS_REG_IQP, ccb->c_cmdbpa); in ips_morpheus_exec()
1965 struct ips_ccb *ccb; in ips_ccb_alloc() local
1968 if ((ccb = mallocarray(n, sizeof(*ccb), M_DEVBUF, in ips_ccb_alloc()
1973 ccb[i].c_sc = sc; in ips_ccb_alloc()
1974 ccb[i].c_id = i; in ips_ccb_alloc()
1975 ccb[i].c_cmdbva = (char *)sc->sc_cmdbm.dm_vaddr + in ips_ccb_alloc()
1977 ccb[i].c_cmdbpa = sc->sc_cmdbm.dm_paddr + in ips_ccb_alloc()
1981 &ccb[i].c_dmam)) in ips_ccb_alloc()
1985 return (ccb); in ips_ccb_alloc()
1988 bus_dmamap_destroy(sc->sc_dmat, ccb[i - 1].c_dmam); in ips_ccb_alloc()
1989 free(ccb, M_DEVBUF, n * sizeof(*ccb)); in ips_ccb_alloc()
1994 ips_ccb_free(struct ips_softc *sc, struct ips_ccb *ccb, int n) in ips_ccb_free() argument
1999 bus_dmamap_destroy(sc->sc_dmat, ccb[i - 1].c_dmam); in ips_ccb_free()
2000 free(ccb, M_DEVBUF, n * sizeof(*ccb)); in ips_ccb_free()
2007 struct ips_ccb *ccb; in ips_ccb_get() local
2010 if ((ccb = SLIST_FIRST(&sc->sc_ccbq_free)) != NULL) { in ips_ccb_get()
2012 ccb->c_flags = 0; in ips_ccb_get()
2013 ccb->c_xfer = NULL; in ips_ccb_get()
2014 bzero(ccb->c_cmdbva, sizeof(struct ips_cmdb)); in ips_ccb_get()
2018 return (ccb); in ips_ccb_get()
2025 struct ips_ccb *ccb = xccb; in ips_ccb_put() local
2027 ccb->c_state = IPS_CCB_FREE; in ips_ccb_put()
2029 SLIST_INSERT_HEAD(&sc->sc_ccbq_free, ccb, c_link); in ips_ccb_put()