mscp
struct mscp uda_rsp; /* response packets */
struct mscp uda_cmd; /* command packets */
struct mscp uda_rsp; /* response packets */
struct mscp uda_cmd; /* command packets */
struct mscp *mp = mxi->mxi_mp;
u24_start_mbox(struct uha_softc *sc, struct uha_mscp *mscp)
sc->sc_dmamap_mscp->dm_segs[0].ds_addr + UHA_MSCP_OFF(mscp));
if (mscp->flags & MSCP_ABORT)
if ((mscp->xs->xs_control & XS_CTL_POLL) == 0)
callout_reset(&mscp->xs->xs_callout,
mstohz(mscp->timeout), uha_timeout, mscp);
struct uha_mscp *mscp;
mscp = uha_mscp_phys_kv(sc, mboxval);
if (!mscp) {
callout_stop(&mscp->xs->xs_callout);
uha_done(sc, mscp);
uha_reset_mscp(struct uha_softc *sc, struct uha_mscp *mscp)
mscp->flags = 0;
uha_free_mscp(struct uha_softc *sc, struct uha_mscp *mscp)
uha_reset_mscp(sc, mscp);
TAILQ_INSERT_HEAD(&sc->sc_free_mscp, mscp, chain);
uha_init_mscp(struct uha_softc *sc, struct uha_mscp *mscp)
&mscp->dmamap_xfer);
mscp->hashkey = sc->sc_dmamap_mscp->dm_segs[0].ds_addr +
UHA_MSCP_OFF(mscp);
hashnum = MSCP_HASH(mscp->hashkey);
mscp->nexthash = sc->sc_mscphash[hashnum];
sc->sc_mscphash[hashnum] = mscp;
uha_reset_mscp(sc, mscp);
struct uha_mscp *mscp;
mscp = &mscpstore[i];
if ((error = uha_init_mscp(sc, mscp)) != 0) {
TAILQ_INSERT_TAIL(&sc->sc_free_mscp, mscp, chain);
struct uha_mscp *mscp;
mscp = TAILQ_FIRST(&sc->sc_free_mscp);
if (mscp != NULL) {
TAILQ_REMOVE(&sc->sc_free_mscp, mscp, chain);
mscp->flags |= MSCP_ALLOC;
return (mscp);
struct uha_mscp *mscp = sc->sc_mscphash[hashnum];
while (mscp) {
if (mscp->hashkey == mscp_phys)
mscp = mscp->nexthash;
return (mscp);
uha_done(struct uha_softc *sc, struct uha_mscp *mscp)
struct scsipi_xfer *xs = mscp->xs;
UHA_MSCP_OFF(mscp), sizeof(struct uha_mscp),
bus_dmamap_sync(dmat, mscp->dmamap_xfer, 0,
mscp->dmamap_xfer->dm_mapsize,
bus_dmamap_unload(dmat, mscp->dmamap_xfer);
if ((mscp->flags & MSCP_ALLOC) == 0) {
if (mscp->host_stat != UHA_NO_ERR) {
switch (mscp->host_stat) {
mscp->host_stat);
} else if (mscp->target_stat != SCSI_OK) {
switch (mscp->target_stat) {
s1 = &mscp->mscp_sense;
"target_stat %x\n", mscp->target_stat);
uha_free_mscp(sc, mscp);
struct uha_mscp *mscp;
mscp = uha_get_mscp(sc);
if (mscp == NULL) {
mscp->xs = xs;
mscp->timeout = xs->timeout;
mscp->opcode = UHA_SDR;
mscp->ca = 0x01;
if (xs->cmdlen > sizeof(mscp->scsi_cmd)) {
mscp->opcode = UHA_TSP;
mscp->ca = 0x01;
memcpy(&mscp->scsi_cmd, xs->cmd, mscp->scsi_cmd_length);
mscp->xdir = UHA_SDET;
mscp->dcn = 0x00;
mscp->chan = 0x00;
mscp->target = periph->periph_target;
mscp->lun = periph->periph_lun;
mscp->scsi_cmd_length = xs->cmdlen;
mscp->sense_ptr = sc->sc_dmamap_mscp->dm_segs[0].ds_addr +
UHA_MSCP_OFF(mscp) + offsetof(struct uha_mscp, mscp_sense);
mscp->req_sense_length = sizeof(mscp->mscp_sense);
mscp->host_stat = 0x00;
mscp->target_stat = 0x00;
mscp->dmamap_xfer, (struct uio *)xs->data,
mscp->dmamap_xfer, xs->data, xs->datalen,
uha_free_mscp(sc, mscp);
bus_dmamap_sync(dmat, mscp->dmamap_xfer, 0,
mscp->dmamap_xfer->dm_mapsize,
seg < mscp->dmamap_xfer->dm_nsegs; seg++) {
mscp->uha_dma[seg].seg_addr =
mscp->dmamap_xfer->dm_segs[seg].ds_addr;
mscp->uha_dma[seg].seg_len =
mscp->dmamap_xfer->dm_segs[seg].ds_len;
mscp->data_addr =
UHA_MSCP_OFF(mscp) + offsetof(struct uha_mscp,
mscp->data_length = xs->datalen;
mscp->sgth = 0x01;
mscp->sg_num = seg;
mscp->data_addr = (physaddr)0;
mscp->data_length = 0;
mscp->sgth = 0x00;
mscp->sg_num = 0;
mscp->link_id = 0;
mscp->link_addr = (physaddr)0;
UHA_MSCP_OFF(mscp), sizeof(struct uha_mscp),
(sc->start_mbox)(sc, mscp);
if ((sc->poll)(sc, xs, mscp->timeout)) {
uha_timeout(mscp);
if ((sc->poll)(sc, xs, mscp->timeout))
uha_timeout(mscp);
struct uha_mscp *mscp = arg;
struct scsipi_xfer *xs = mscp->xs;
if (mscp->flags & MSCP_ABORT) {
mscp->xs->error = XS_TIMEOUT;
mscp->timeout = UHA_ABORT_TIMEOUT;
mscp->flags |= MSCP_ABORT;
(sc->start_mbox)(sc, mscp);
u14_start_mbox(struct uha_softc *sc, struct uha_mscp *mscp)
sc->sc_dmamap_mscp->dm_segs[0].ds_addr + UHA_MSCP_OFF(mscp));
if (mscp->flags & MSCP_ABORT)
if ((mscp->xs->xs_control & XS_CTL_POLL) == 0)
callout_reset(&mscp->xs->xs_callout,
mstohz(mscp->timeout), uha_timeout, mscp);
struct uha_mscp *mscp;
mscp = uha_mscp_phys_kv(sc, mboxval);
if (!mscp) {
callout_stop(&mscp->xs->xs_callout);
uha_done(sc, mscp);
struct mscp *
struct mscp *mp;
struct mscp *mp;
extern struct mscp mscp_cold_reply;
memcpy(&mscp_cold_reply, mp, sizeof(struct mscp));
#define MSCP_MSGLEN (sizeof (struct mscp) - 4)
struct mscp *mp = &ra_work->ra_mw.mw_mp;
rrgotstatus(device_t usc, struct mscp *mp)
rrreplace(device_t usc, struct mscp *mp)
rrioerror(device_t usc, struct mscp *mp, struct buf *bp)
rrfillin(struct buf *bp, struct mscp *mp)
rrbb(device_t usc, struct mscp *mp, struct buf *bp)
struct mscp *mp = da->da_mp;
struct mscp *mp = da->da_mp;
struct mscp *mp = da->da_mp;
struct mscp *mp = da->da_mp;
struct mscp *mp;
void rrdgram(device_t, struct mscp *, struct mscp_softc *);
int rronline(device_t, struct mscp *);
int rrgotstatus(device_t, struct mscp *);
void rrreplace(device_t, struct mscp *);
int rrioerror(device_t, struct mscp *, struct buf *);
void rrfillin(struct buf *, struct mscp *);
void rrbb(device_t, struct mscp *, struct buf *);
rrdgram(device_t usc, struct mscp *mp, struct mscp_softc *mi)
rronline(device_t usc, struct mscp *mp)
struct mscp mscp_cold_reply;
struct mscp *mp2;
volatile struct mscp *mp;
struct mscp *mp;
struct mscp *mp;
struct mscp *mp = da->da_mp;
struct mscp *mp;
struct mscp *mp;
mscp_hexdump(struct mscp *mp)
mscp_printevent(struct mscp *mp)
mscp_decodeerror(const char *name, struct mscp *mp, struct mscp_softc *mi)
struct mscp *mp = da->da_mp;
struct mscp *mp = da->da_mp;
struct mscp *mp;
mtfillin(struct buf *bp, struct mscp *mp)
mtdgram(device_t usc, struct mscp *mp, struct mscp_softc *mi)
mtonline(device_t usc, struct mscp *mp)
mtgotstatus(device_t usc, struct mscp *mp)
mtioerror(device_t usc, struct mscp *mp, struct buf *bp)
struct mscp *mp;
mtcmddone(device_t usc, struct mscp *mp)
void mtdgram(device_t, struct mscp *, struct mscp_softc *);
int mtonline(device_t, struct mscp *);
int mtgotstatus(device_t, struct mscp *);
int mtioerror(device_t, struct mscp *, struct buf *);
void mtfillin(struct buf *, struct mscp *);
void mtcmddone(device_t, struct mscp *);
struct mscp mp_rsp[NRSP]; /* response packets */
struct mscp mp_cmd[NCMD]; /* command packets */
struct mscp *mri_ring; /* base address of packets */
struct mscp * mxi_mp; /* Packet used in this command */
(device_t, struct mscp *, struct mscp_softc *);
(device_t, struct mscp *);
(device_t, struct mscp *);
(device_t, struct mscp *);
(device_t, struct mscp *, struct buf *);
(device_t, struct mscp *, struct buf *);
(struct buf *,struct mscp *);
(device_t, struct mscp *);
struct mscp *da_mp; /* this devices response struct */
struct mscp mw_mp;
struct mscp *mscp_getcp(struct mscp_softc *, int);
void mscp_printevent(struct mscp *);
void mscp_go(struct mscp_softc *, struct mscp *, int);
int mscp_decodeerror(const char *, struct mscp *, struct mscp_softc *);
void mscp_hexdump(struct mscp *);