Lines Matching refs:mscp

197 uha_reset_mscp(struct uha_softc *sc, struct uha_mscp *mscp)  in uha_reset_mscp()  argument
200 mscp->flags = 0; in uha_reset_mscp()
207 uha_free_mscp(struct uha_softc *sc, struct uha_mscp *mscp) in uha_free_mscp() argument
212 uha_reset_mscp(sc, mscp); in uha_free_mscp()
213 TAILQ_INSERT_HEAD(&sc->sc_free_mscp, mscp, chain); in uha_free_mscp()
218 uha_init_mscp(struct uha_softc *sc, struct uha_mscp *mscp) in uha_init_mscp() argument
228 &mscp->dmamap_xfer); in uha_init_mscp()
239 mscp->hashkey = sc->sc_dmamap_mscp->dm_segs[0].ds_addr + in uha_init_mscp()
240 UHA_MSCP_OFF(mscp); in uha_init_mscp()
241 hashnum = MSCP_HASH(mscp->hashkey); in uha_init_mscp()
242 mscp->nexthash = sc->sc_mscphash[hashnum]; in uha_init_mscp()
243 sc->sc_mscphash[hashnum] = mscp; in uha_init_mscp()
244 uha_reset_mscp(sc, mscp); in uha_init_mscp()
254 struct uha_mscp *mscp; in uha_create_mscps() local
259 mscp = &mscpstore[i]; in uha_create_mscps()
260 if ((error = uha_init_mscp(sc, mscp)) != 0) { in uha_create_mscps()
265 TAILQ_INSERT_TAIL(&sc->sc_free_mscp, mscp, chain); in uha_create_mscps()
280 struct uha_mscp *mscp; in uha_get_mscp() local
284 mscp = TAILQ_FIRST(&sc->sc_free_mscp); in uha_get_mscp()
285 if (mscp != NULL) { in uha_get_mscp()
286 TAILQ_REMOVE(&sc->sc_free_mscp, mscp, chain); in uha_get_mscp()
287 mscp->flags |= MSCP_ALLOC; in uha_get_mscp()
290 return (mscp); in uha_get_mscp()
300 struct uha_mscp *mscp = sc->sc_mscphash[hashnum]; in uha_mscp_phys_kv() local
302 while (mscp) { in uha_mscp_phys_kv()
303 if (mscp->hashkey == mscp_phys) in uha_mscp_phys_kv()
305 mscp = mscp->nexthash; in uha_mscp_phys_kv()
307 return (mscp); in uha_mscp_phys_kv()
315 uha_done(struct uha_softc *sc, struct uha_mscp *mscp) in uha_done() argument
319 struct scsipi_xfer *xs = mscp->xs; in uha_done()
324 UHA_MSCP_OFF(mscp), sizeof(struct uha_mscp), in uha_done()
332 bus_dmamap_sync(dmat, mscp->dmamap_xfer, 0, in uha_done()
333 mscp->dmamap_xfer->dm_mapsize, in uha_done()
336 bus_dmamap_unload(dmat, mscp->dmamap_xfer); in uha_done()
343 if ((mscp->flags & MSCP_ALLOC) == 0) { in uha_done()
349 if (mscp->host_stat != UHA_NO_ERR) { in uha_done()
350 switch (mscp->host_stat) { in uha_done()
356 mscp->host_stat); in uha_done()
359 } else if (mscp->target_stat != SCSI_OK) { in uha_done()
360 switch (mscp->target_stat) { in uha_done()
362 s1 = &mscp->mscp_sense; in uha_done()
372 "target_stat %x\n", mscp->target_stat); in uha_done()
378 uha_free_mscp(sc, mscp); in uha_done()
404 struct uha_mscp *mscp; in uha_scsipi_request() local
417 mscp = uha_get_mscp(sc); in uha_scsipi_request()
423 if (mscp == NULL) { in uha_scsipi_request()
430 mscp->xs = xs; in uha_scsipi_request()
431 mscp->timeout = xs->timeout; in uha_scsipi_request()
437 mscp->opcode = UHA_SDR; in uha_scsipi_request()
438 mscp->ca = 0x01; in uha_scsipi_request()
440 if (xs->cmdlen > sizeof(mscp->scsi_cmd)) { in uha_scsipi_request()
447 mscp->opcode = UHA_TSP; in uha_scsipi_request()
449 mscp->ca = 0x01; in uha_scsipi_request()
450 memcpy(&mscp->scsi_cmd, xs->cmd, mscp->scsi_cmd_length); in uha_scsipi_request()
452 mscp->xdir = UHA_SDET; in uha_scsipi_request()
453 mscp->dcn = 0x00; in uha_scsipi_request()
454 mscp->chan = 0x00; in uha_scsipi_request()
455 mscp->target = periph->periph_target; in uha_scsipi_request()
456 mscp->lun = periph->periph_lun; in uha_scsipi_request()
457 mscp->scsi_cmd_length = xs->cmdlen; in uha_scsipi_request()
458 mscp->sense_ptr = sc->sc_dmamap_mscp->dm_segs[0].ds_addr + in uha_scsipi_request()
459 UHA_MSCP_OFF(mscp) + offsetof(struct uha_mscp, mscp_sense); in uha_scsipi_request()
460 mscp->req_sense_length = sizeof(mscp->mscp_sense); in uha_scsipi_request()
461 mscp->host_stat = 0x00; in uha_scsipi_request()
462 mscp->target_stat = 0x00; in uha_scsipi_request()
469 mscp->dmamap_xfer, (struct uio *)xs->data, in uha_scsipi_request()
478 mscp->dmamap_xfer, xs->data, xs->datalen, in uha_scsipi_request()
500 uha_free_mscp(sc, mscp); in uha_scsipi_request()
505 bus_dmamap_sync(dmat, mscp->dmamap_xfer, 0, in uha_scsipi_request()
506 mscp->dmamap_xfer->dm_mapsize, in uha_scsipi_request()
515 seg < mscp->dmamap_xfer->dm_nsegs; seg++) { in uha_scsipi_request()
516 mscp->uha_dma[seg].seg_addr = in uha_scsipi_request()
517 mscp->dmamap_xfer->dm_segs[seg].ds_addr; in uha_scsipi_request()
518 mscp->uha_dma[seg].seg_len = in uha_scsipi_request()
519 mscp->dmamap_xfer->dm_segs[seg].ds_len; in uha_scsipi_request()
522 mscp->data_addr = in uha_scsipi_request()
524 UHA_MSCP_OFF(mscp) + offsetof(struct uha_mscp, in uha_scsipi_request()
526 mscp->data_length = xs->datalen; in uha_scsipi_request()
527 mscp->sgth = 0x01; in uha_scsipi_request()
528 mscp->sg_num = seg; in uha_scsipi_request()
530 mscp->data_addr = (physaddr)0; in uha_scsipi_request()
531 mscp->data_length = 0; in uha_scsipi_request()
532 mscp->sgth = 0x00; in uha_scsipi_request()
533 mscp->sg_num = 0; in uha_scsipi_request()
535 mscp->link_id = 0; in uha_scsipi_request()
536 mscp->link_addr = (physaddr)0; in uha_scsipi_request()
539 UHA_MSCP_OFF(mscp), sizeof(struct uha_mscp), in uha_scsipi_request()
543 (sc->start_mbox)(sc, mscp); in uha_scsipi_request()
552 if ((sc->poll)(sc, xs, mscp->timeout)) { in uha_scsipi_request()
553 uha_timeout(mscp); in uha_scsipi_request()
554 if ((sc->poll)(sc, xs, mscp->timeout)) in uha_scsipi_request()
555 uha_timeout(mscp); in uha_scsipi_request()
576 struct uha_mscp *mscp = arg; in uha_timeout() local
577 struct scsipi_xfer *xs = mscp->xs; in uha_timeout()
588 if (mscp->flags & MSCP_ABORT) { in uha_timeout()
595 mscp->xs->error = XS_TIMEOUT; in uha_timeout()
596 mscp->timeout = UHA_ABORT_TIMEOUT; in uha_timeout()
597 mscp->flags |= MSCP_ABORT; in uha_timeout()
598 (sc->start_mbox)(sc, mscp); in uha_timeout()