Lines Matching refs:pScb
197 iha_setup_sg_list(struct iha_softc *sc, struct iha_scb *pScb) in iha_setup_sg_list() argument
199 bus_dma_segment_t *segs = pScb->SCB_DataDma->dm_segs; in iha_setup_sg_list()
200 int i, error, nseg = pScb->SCB_DataDma->dm_nsegs; in iha_setup_sg_list()
203 error = bus_dmamap_load(sc->sc_dmat, pScb->SCB_SGDma, in iha_setup_sg_list()
204 pScb->SCB_SGList, sizeof(pScb->SCB_SGList), NULL, in iha_setup_sg_list()
205 (pScb->SCB_Flags & SCSI_NOSLEEP) ? in iha_setup_sg_list()
208 sc_print_addr(pScb->SCB_Xs->sc_link); in iha_setup_sg_list()
217 pScb->SCB_Flags |= FLAG_SG; in iha_setup_sg_list()
218 bzero(pScb->SCB_SGList, sizeof(pScb->SCB_SGList)); in iha_setup_sg_list()
220 pScb->SCB_SGIdx = 0; in iha_setup_sg_list()
221 pScb->SCB_SGCount = nseg; in iha_setup_sg_list()
224 pScb->SCB_SGList[i].SG_Len = segs[i].ds_len; in iha_setup_sg_list()
225 pScb->SCB_SGList[i].SG_Addr = segs[i].ds_addr; in iha_setup_sg_list()
228 bus_dmamap_sync(sc->sc_dmat, pScb->SCB_SGDma, in iha_setup_sg_list()
229 0, sizeof(pScb->SCB_SGList), BUS_DMASYNC_PREWRITE); in iha_setup_sg_list()
243 struct iha_scb *pScb; in iha_scsi_cmd() local
254 pScb = xs->io; in iha_scsi_cmd()
256 pScb->SCB_Target = sc_link->target; in iha_scsi_cmd()
257 pScb->SCB_Lun = sc_link->lun; in iha_scsi_cmd()
258 pScb->SCB_Tcs = &sc->HCS_Tcs[pScb->SCB_Target]; in iha_scsi_cmd()
259 pScb->SCB_Flags = xs->flags; in iha_scsi_cmd()
260 pScb->SCB_Ident = MSG_IDENTIFYFLAG | in iha_scsi_cmd()
261 (pScb->SCB_Lun & MSG_IDENTIFY_LUNMASK); in iha_scsi_cmd()
264 && ((pScb->SCB_Flags & SCSI_POLL) == 0)) in iha_scsi_cmd()
265 pScb->SCB_Ident |= MSG_IDENTIFY_DISCFLAG; in iha_scsi_cmd()
267 pScb->SCB_Xs = xs; in iha_scsi_cmd()
268 pScb->SCB_CDBLen = xs->cmdlen; in iha_scsi_cmd()
269 bcopy(&xs->cmd, &pScb->SCB_CDB, xs->cmdlen); in iha_scsi_cmd()
271 pScb->SCB_BufCharsLeft = pScb->SCB_BufChars = xs->datalen; in iha_scsi_cmd()
273 if ((pScb->SCB_Flags & (SCSI_DATA_IN | SCSI_DATA_OUT)) != 0) { in iha_scsi_cmd()
274 error = bus_dmamap_load(sc->sc_dmat, pScb->SCB_DataDma, in iha_scsi_cmd()
275 xs->data, pScb->SCB_BufChars, NULL, in iha_scsi_cmd()
276 (pScb->SCB_Flags & SCSI_NOSLEEP) ? in iha_scsi_cmd()
292 bus_dmamap_sync(sc->sc_dmat, pScb->SCB_DataDma, in iha_scsi_cmd()
293 0, pScb->SCB_BufChars, in iha_scsi_cmd()
294 (pScb->SCB_Flags & SCSI_DATA_IN) ? in iha_scsi_cmd()
297 error = iha_setup_sg_list(sc, pScb); in iha_scsi_cmd()
299 bus_dmamap_unload(sc->sc_dmat, pScb->SCB_DataDma); in iha_scsi_cmd()
312 timeout_set(&xs->stimeout, iha_timeout, pScb); in iha_scsi_cmd()
314 iha_exec_scb(sc, pScb); in iha_scsi_cmd()
324 struct iha_scb *pScb; in iha_init_tulip() local
355 for (i = 0, pScb = sc->HCS_Scb; i < IHA_MAX_SCB; i++, pScb++) { in iha_init_tulip()
356 pScb->SCB_TagId = i; in iha_init_tulip()
361 BUS_DMA_NOWAIT | BUS_DMA_ALLOCNOW, &pScb->SCB_DataDma); in iha_init_tulip()
370 sizeof(pScb->SCB_SGList), 1, in iha_init_tulip()
371 sizeof(pScb->SCB_SGList), 0, in iha_init_tulip()
373 &pScb->SCB_SGDma); in iha_init_tulip()
380 TAILQ_INSERT_TAIL(&sc->HCS_FreeScb, pScb, SCB_ScbList); in iha_init_tulip()
450 struct iha_scb *pScb; in iha_scb_alloc() local
453 pScb = TAILQ_FIRST(&sc->HCS_FreeScb); in iha_scb_alloc()
454 if (pScb != NULL) { in iha_scb_alloc()
455 pScb->SCB_Status = STATUS_RENT; in iha_scb_alloc()
456 TAILQ_REMOVE(&sc->HCS_FreeScb, pScb, SCB_ScbList); in iha_scb_alloc()
460 return (pScb); in iha_scb_alloc()
472 struct iha_scb *pScb = xscb; in iha_scb_free() local
476 if (pScb == sc->HCS_ActScb) in iha_scb_free()
480 pScb->SCB_Status = STATUS_QUEUED; in iha_scb_free()
481 pScb->SCB_HaStat = HOST_OK; in iha_scb_free()
482 pScb->SCB_TaStat = SCSI_OK; in iha_scb_free()
484 pScb->SCB_NxtStat = 0; in iha_scb_free()
485 pScb->SCB_Flags = 0; in iha_scb_free()
486 pScb->SCB_Target = 0; in iha_scb_free()
487 pScb->SCB_Lun = 0; in iha_scb_free()
488 pScb->SCB_CDBLen = 0; in iha_scb_free()
489 pScb->SCB_Ident = 0; in iha_scb_free()
490 pScb->SCB_TagMsg = 0; in iha_scb_free()
492 pScb->SCB_BufChars = 0; in iha_scb_free()
493 pScb->SCB_BufCharsLeft = 0; in iha_scb_free()
495 pScb->SCB_Xs = NULL; in iha_scb_free()
496 pScb->SCB_Tcs = NULL; in iha_scb_free()
498 bzero(pScb->SCB_CDB, sizeof(pScb->SCB_CDB)); in iha_scb_free()
505 TAILQ_INSERT_TAIL(&sc->HCS_FreeScb, pScb, SCB_ScbList); in iha_scb_free()
510 iha_append_pend_scb(struct iha_softc *sc, struct iha_scb *pScb) in iha_append_pend_scb() argument
514 if (pScb == sc->HCS_ActScb) in iha_append_pend_scb()
517 pScb->SCB_Status = STATUS_QUEUED; in iha_append_pend_scb()
519 TAILQ_INSERT_TAIL(&sc->HCS_PendScb, pScb, SCB_ScbList); in iha_append_pend_scb()
523 iha_push_pend_scb(struct iha_softc *sc, struct iha_scb *pScb) in iha_push_pend_scb() argument
529 if (pScb == sc->HCS_ActScb) in iha_push_pend_scb()
532 pScb->SCB_Status = STATUS_QUEUED; in iha_push_pend_scb()
534 TAILQ_INSERT_HEAD(&sc->HCS_PendScb, pScb, SCB_ScbList); in iha_push_pend_scb()
548 struct iha_scb *pScb; in iha_find_pend_scb() local
555 pScb = NULL; in iha_find_pend_scb()
558 TAILQ_FOREACH(pScb, &sc->HCS_PendScb, SCB_ScbList) { in iha_find_pend_scb()
559 if ((pScb->SCB_Flags & SCSI_RESET) != 0) in iha_find_pend_scb()
563 pTcs = pScb->SCB_Tcs; in iha_find_pend_scb()
565 if ((pScb->SCB_TagMsg) != 0) { in iha_find_pend_scb()
574 } else if (pScb->SCB_CDB[0] == REQUEST_SENSE) { in iha_find_pend_scb()
596 return (pScb); in iha_find_pend_scb()
600 iha_mark_busy_scb(struct iha_scb *pScb) in iha_mark_busy_scb() argument
606 pScb->SCB_Status = STATUS_BUSY; in iha_mark_busy_scb()
608 if (pScb->SCB_TagMsg == 0) in iha_mark_busy_scb()
609 pScb->SCB_Tcs->TCS_NonTagScb = pScb; in iha_mark_busy_scb()
611 pScb->SCB_Tcs->TCS_TagCnt++; in iha_mark_busy_scb()
617 iha_append_done_scb(struct iha_softc *sc, struct iha_scb *pScb, u_int8_t hastat) in iha_append_done_scb() argument
624 if (pScb->SCB_Xs != NULL) in iha_append_done_scb()
625 timeout_del(&pScb->SCB_Xs->stimeout); in iha_append_done_scb()
627 if (pScb == sc->HCS_ActScb) in iha_append_done_scb()
630 pTcs = pScb->SCB_Tcs; in iha_append_done_scb()
632 if (pScb->SCB_TagMsg != 0) { in iha_append_done_scb()
635 } else if (pTcs->TCS_NonTagScb == pScb) in iha_append_done_scb()
638 pScb->SCB_Status = STATUS_QUEUED; in iha_append_done_scb()
639 pScb->SCB_HaStat = hastat; in iha_append_done_scb()
641 TAILQ_INSERT_TAIL(&sc->HCS_DoneScb, pScb, SCB_ScbList); in iha_append_done_scb()
649 struct iha_scb *pScb; in iha_pop_done_scb() local
654 pScb = TAILQ_FIRST(&sc->HCS_DoneScb); in iha_pop_done_scb()
656 if (pScb != NULL) { in iha_pop_done_scb()
657 pScb->SCB_Status = STATUS_RENT; in iha_pop_done_scb()
658 TAILQ_REMOVE(&sc->HCS_DoneScb, pScb, SCB_ScbList); in iha_pop_done_scb()
663 return (pScb); in iha_pop_done_scb()
674 struct iha_scb *pScb, *next; in iha_abort_xs() local
681 for (pScb = TAILQ_FIRST(&sc->HCS_PendScb); pScb != NULL; pScb = next) { in iha_abort_xs()
682 next = TAILQ_NEXT(pScb, SCB_ScbList); in iha_abort_xs()
683 if (pScb->SCB_Xs == xs) { in iha_abort_xs()
684 TAILQ_REMOVE(&sc->HCS_PendScb, pScb, SCB_ScbList); in iha_abort_xs()
685 iha_append_done_scb(sc, pScb, hastat); in iha_abort_xs()
696 for (i = 0, pScb = sc->HCS_Scb; i < IHA_MAX_SCB; i++, pScb++) in iha_abort_xs()
697 switch (pScb->SCB_Status) { in iha_abort_xs()
700 if (pScb->SCB_Xs == xs) { in iha_abort_xs()
701 iha_append_done_scb(sc, pScb, hastat); in iha_abort_xs()
720 struct iha_scb *pScb = sc->HCS_ActScb; in iha_bad_seq() local
722 if (pScb != NULL) in iha_bad_seq()
723 iha_append_done_scb(sc, pScb, HOST_BAD_PHAS); in iha_bad_seq()
735 iha_push_sense_request(struct iha_softc *sc, struct iha_scb *pScb) in iha_push_sense_request() argument
741 if ((pScb->SCB_Flags & (SCSI_DATA_IN | SCSI_DATA_OUT)) != 0) { in iha_push_sense_request()
742 bus_dmamap_sync(sc->sc_dmat, pScb->SCB_DataDma, in iha_push_sense_request()
743 0, pScb->SCB_BufChars, in iha_push_sense_request()
744 ((pScb->SCB_Flags & SCSI_DATA_IN) ? in iha_push_sense_request()
746 bus_dmamap_unload(sc->sc_dmat, pScb->SCB_DataDma); in iha_push_sense_request()
748 pScb->SCB_Flags &= ~(SCSI_DATA_IN | SCSI_DATA_OUT); in iha_push_sense_request()
750 if ((pScb->SCB_Flags & FLAG_SG) != 0) { in iha_push_sense_request()
751 bus_dmamap_sync(sc->sc_dmat, pScb->SCB_SGDma, in iha_push_sense_request()
752 0, sizeof(pScb->SCB_SGList), in iha_push_sense_request()
754 bus_dmamap_unload(sc->sc_dmat, pScb->SCB_SGDma); in iha_push_sense_request()
756 pScb->SCB_Flags &= ~FLAG_SG; in iha_push_sense_request()
759 pScb->SCB_BufChars = sizeof(pScb->SCB_ScsiSenseData); in iha_push_sense_request()
760 pScb->SCB_BufCharsLeft = sizeof(pScb->SCB_ScsiSenseData); in iha_push_sense_request()
761 bzero(&pScb->SCB_ScsiSenseData, sizeof(pScb->SCB_ScsiSenseData)); in iha_push_sense_request()
763 error = bus_dmamap_load(sc->sc_dmat, pScb->SCB_DataDma, in iha_push_sense_request()
764 &pScb->SCB_ScsiSenseData, in iha_push_sense_request()
765 sizeof(pScb->SCB_ScsiSenseData), NULL, in iha_push_sense_request()
766 (pScb->SCB_Flags & SCSI_NOSLEEP) ? in iha_push_sense_request()
769 sc_print_addr(pScb->SCB_Xs->sc_link); in iha_push_sense_request()
774 bus_dmamap_sync(sc->sc_dmat, pScb->SCB_DataDma, in iha_push_sense_request()
775 0, pScb->SCB_BufChars, BUS_DMASYNC_PREREAD); in iha_push_sense_request()
778 pScb->SCB_Flags &= SCSI_POLL | SCSI_NOSLEEP; in iha_push_sense_request()
779 pScb->SCB_Flags |= FLAG_RSENS | SCSI_DATA_IN; in iha_push_sense_request()
781 error = iha_setup_sg_list(sc, pScb); in iha_push_sense_request()
785 pScb->SCB_Ident &= ~MSG_IDENTIFY_DISCFLAG; in iha_push_sense_request()
787 pScb->SCB_TagMsg = 0; in iha_push_sense_request()
788 pScb->SCB_TaStat = SCSI_OK; in iha_push_sense_request()
790 bzero(pScb->SCB_CDB, sizeof(pScb->SCB_CDB)); in iha_push_sense_request()
792 sensecmd = (struct scsi_sense *)pScb->SCB_CDB; in iha_push_sense_request()
793 pScb->SCB_CDBLen = sizeof(*sensecmd); in iha_push_sense_request()
795 sensecmd->byte2 = pScb->SCB_Xs->sc_link->lun << 5; in iha_push_sense_request()
796 sensecmd->length = sizeof(pScb->SCB_ScsiSenseData); in iha_push_sense_request()
798 if ((pScb->SCB_Flags & SCSI_POLL) == 0) in iha_push_sense_request()
799 timeout_add_msec(&pScb->SCB_Xs->stimeout, in iha_push_sense_request()
800 pScb->SCB_Xs->timeout); in iha_push_sense_request()
802 iha_push_pend_scb(sc, pScb); in iha_push_sense_request()
816 struct iha_scb *pScb; in iha_main() local
822 while ((pScb = iha_pop_done_scb(sc)) != NULL) { in iha_main()
824 switch (pScb->SCB_TaStat) { in iha_main()
828 pScb->SCB_Tcs->TCS_Flags &= in iha_main()
831 if ((pScb->SCB_Flags & FLAG_RSENS) != 0) in iha_main()
833 pScb->SCB_HaStat = HOST_BAD_PHAS; in iha_main()
834 else if (iha_push_sense_request(sc, pScb) != 0) in iha_main()
836 pScb->SCB_HaStat = HOST_BAD_PHAS; in iha_main()
843 if ((pScb->SCB_Flags & FLAG_RSENS) != 0) in iha_main()
849 pScb->SCB_TaStat = SCSI_CHECK; in iha_main()
853 iha_done_scb(sc, pScb); in iha_main()
875 struct iha_scb *pScb; in iha_scsi() local
918 if ((pScb = iha_find_pend_scb(sc)) == NULL) in iha_scsi()
921 pTcs = pScb->SCB_Tcs; in iha_scsi()
925 (sc->sc_id << 4) | pScb->SCB_Target); in iha_scsi()
927 if ((pScb->SCB_Flags & SCSI_RESET) == 0) { in iha_scsi()
933 iha_select(sc, iot, ioh, pScb, SELATNSTOP); in iha_scsi()
935 else if (pScb->SCB_TagMsg != 0) in iha_scsi()
936 iha_select(sc, iot, ioh, pScb, SEL_ATN3); in iha_scsi()
939 iha_select(sc, iot, ioh, pScb, SEL_ATN); in iha_scsi()
942 iha_select(sc, iot, ioh, pScb, SELATNSTOP); in iha_scsi()
943 pScb->SCB_NxtStat = 8; in iha_scsi()
946 if ((pScb->SCB_Flags & SCSI_POLL) != 0) { in iha_scsi()
947 for (i = pScb->SCB_Xs->timeout; i > 0; i--) { in iha_scsi()
963 iha_timeout(pScb); in iha_scsi()
965 else if ((pScb->SCB_CDB[0] == INQUIRY) in iha_scsi()
966 && (pScb->SCB_Lun == 0) in iha_scsi()
967 && (pScb->SCB_HaStat == HOST_OK) in iha_scsi()
968 && (pScb->SCB_TaStat == SCSI_OK)) in iha_scsi()
969 iha_print_info(sc, pScb->SCB_Target); in iha_scsi()
984 iha_data_over_run(struct iha_scb *pScb) in iha_data_over_run() argument
986 switch (pScb->SCB_CDB[0]) { in iha_data_over_run()
1112 struct iha_scb *pScb = sc->HCS_ActScb; in iha_state_1() local
1116 iha_mark_busy_scb(pScb); in iha_state_1()
1118 pTcs = pScb->SCB_Tcs; in iha_state_1()
1135 bus_space_write_1(iot, ioh, TUL_SFIFO, pScb->SCB_Ident); in iha_state_1()
1137 if (pScb->SCB_TagMsg != 0) { in iha_state_1()
1139 pScb->SCB_TagMsg); in iha_state_1()
1141 pScb->SCB_TagId); in iha_state_1()
1170 struct iha_scb *pScb = sc->HCS_ActScb; in iha_state_2() local
1172 iha_mark_busy_scb(pScb); in iha_state_2()
1174 bus_space_write_1(iot, ioh, TUL_SCONFIG0, pScb->SCB_Tcs->TCS_SConfig0); in iha_state_2()
1194 struct iha_scb *pScb = sc->HCS_ActScb; in iha_state_3() local
1201 pScb->SCB_CDB, pScb->SCB_CDBLen); in iha_state_3()
1211 pScb->SCB_NxtStat = 3; in iha_state_3()
1222 flags = pScb->SCB_Tcs->TCS_Flags; in iha_state_3()
1232 sc_print_addr(pScb->SCB_Xs->sc_link); in iha_state_3()
1250 struct iha_scb *pScb = sc->HCS_ActScb; in iha_state_4() local
1252 if ((pScb->SCB_Flags & FLAG_DIR) == FLAG_DIR) in iha_state_4()
1256 if (pScb->SCB_BufCharsLeft == 0) in iha_state_4()
1261 if ((pScb->SCB_Flags & FLAG_DIR) != 0) in iha_state_4()
1262 pScb->SCB_HaStat = iha_data_over_run(pScb); in iha_state_4()
1268 pScb->SCB_NxtStat = 4; in iha_state_4()
1275 pScb->SCB_BufCharsLeft = 0; in iha_state_4()
1276 pScb->SCB_HaStat = HOST_SPERR; in iha_state_4()
1289 return (iha_xfer_data(pScb, iot, ioh, SCSI_DATA_IN)); in iha_state_4()
1292 return (iha_xfer_data(pScb, iot, ioh, SCSI_DATA_OUT)); in iha_state_4()
1310 struct iha_scb *pScb = sc->HCS_ActScb; in iha_state_5() local
1326 pScb->SCB_HaStat = HOST_SPERR; in iha_state_5()
1338 period = pScb->SCB_Tcs->TCS_JS_Period; in iha_state_5()
1364 pScb->SCB_BufCharsLeft = 0; in iha_state_5()
1370 xcnt = pScb->SCB_BufCharsLeft - cnt; /* xcnt == bytes xferred */ in iha_state_5()
1371 pScb->SCB_BufCharsLeft = cnt; /* cnt == bytes left */ in iha_state_5()
1373 bus_dmamap_sync(sc->sc_dmat, pScb->SCB_SGDma, in iha_state_5()
1374 0, sizeof(pScb->SCB_SGList), BUS_DMASYNC_POSTWRITE); in iha_state_5()
1376 if ((pScb->SCB_Flags & FLAG_SG) != 0) { in iha_state_5()
1377 pSg = &pScb->SCB_SGList[pScb->SCB_SGIdx]; in iha_state_5()
1378 for (; pScb->SCB_SGIdx < pScb->SCB_SGCount; pSg++, pScb->SCB_SGIdx++) { in iha_state_5()
1386 bus_dmamap_sync(sc->sc_dmat, pScb->SCB_SGDma, in iha_state_5()
1387 0, sizeof(pScb->SCB_SGList), in iha_state_5()
1448 struct iha_scb *pScb; in iha_state_8() local
1455 pScb = sc->HCS_ActScb; in iha_state_8()
1458 iha_append_done_scb(sc, pScb, HOST_OK); in iha_state_8()
1460 iha_reset_tcs(pScb->SCB_Tcs, sc->HCS_SConf1); in iha_state_8()
1462 tar = pScb->SCB_Target; in iha_state_8()
1463 for (i = 0, pScb = sc->HCS_Scb; i < IHA_MAX_SCB; i++, pScb++) in iha_state_8()
1464 if (pScb->SCB_Target == tar) in iha_state_8()
1465 switch (pScb->SCB_Status) { in iha_state_8()
1468 pScb, HOST_DEV_RST); in iha_state_8()
1472 iha_push_pend_scb(sc, pScb); in iha_state_8()
1493 iha_xfer_data(struct iha_scb *pScb, bus_space_tag_t iot, bus_space_handle_t ioh, in iha_xfer_data() argument
1499 if ((pScb->SCB_Flags & FLAG_DIR) != direction) in iha_xfer_data()
1502 bus_space_write_4(iot, ioh, TUL_STCNT0, pScb->SCB_BufCharsLeft); in iha_xfer_data()
1504 if ((pScb->SCB_Flags & FLAG_SG) == 0) { in iha_xfer_data()
1505 xferaddr = pScb->SCB_DataDma->dm_segs[0].ds_addr in iha_xfer_data()
1506 + (pScb->SCB_BufChars - pScb->SCB_BufCharsLeft); in iha_xfer_data()
1507 xferlen = pScb->SCB_BufCharsLeft; in iha_xfer_data()
1511 xferaddr = pScb->SCB_SGDma->dm_segs[0].ds_addr in iha_xfer_data()
1512 + (pScb->SCB_SGIdx * sizeof(struct iha_sg_element)); in iha_xfer_data()
1513 xferlen = (pScb->SCB_SGCount - pScb->SCB_SGIdx) in iha_xfer_data()
1525 pScb->SCB_NxtStat = 5; in iha_xfer_data()
1533 struct iha_scb *pScb = sc->HCS_ActScb; in iha_xpad_in() local
1535 if ((pScb->SCB_Flags & FLAG_DIR) != 0) in iha_xpad_in()
1536 pScb->SCB_HaStat = HOST_DO_DU; in iha_xpad_in()
1539 if ((pScb->SCB_Tcs->TCS_JS_Period & PERIOD_WIDE_SCSI) != 0) in iha_xpad_in()
1562 struct iha_scb *pScb = sc->HCS_ActScb; in iha_xpad_out() local
1564 if ((pScb->SCB_Flags & FLAG_DIR) != 0) in iha_xpad_out()
1565 pScb->SCB_HaStat = HOST_DO_DU; in iha_xpad_out()
1568 if ((pScb->SCB_Tcs->TCS_JS_Period & PERIOD_WIDE_SCSI) != 0) in iha_xpad_out()
1595 struct iha_scb *pScb; in iha_status_msg() local
1602 pScb = sc->HCS_ActScb; in iha_status_msg()
1604 pScb->SCB_TaStat = bus_space_read_1(iot, ioh, TUL_SFIFO); in iha_status_msg()
1633 if ((pScb->SCB_TaStat in iha_status_msg()
1645 if ((pScb->SCB_TaStat in iha_status_msg()
1665 struct iha_scb *pScb; in iha_busfree() local
1671 pScb = sc->HCS_ActScb; in iha_busfree()
1673 if (pScb != NULL) { in iha_busfree()
1674 if (pScb->SCB_Status == STATUS_SELECT) in iha_busfree()
1676 iha_append_done_scb(sc, pScb, HOST_SEL_TOUT); in iha_busfree()
1679 iha_append_done_scb(sc, pScb, HOST_BAD_PHAS); in iha_busfree()
1687 struct iha_scb *pScb; in iha_reset_scsi_bus() local
1695 for (i = 0, pScb = sc->HCS_Scb; i < IHA_MAX_SCB; i++, pScb++) in iha_reset_scsi_bus()
1696 switch (pScb->SCB_Status) { in iha_reset_scsi_bus()
1698 iha_append_done_scb(sc, pScb, HOST_SCSI_RST); in iha_reset_scsi_bus()
1702 iha_push_pend_scb(sc, pScb); in iha_reset_scsi_bus()
1721 struct iha_scb *pScb; in iha_resel() local
1743 pScb = pTcs->TCS_NonTagScb; in iha_resel()
1783 pScb = &sc->HCS_Scb[tag]; in iha_resel()
1788 if ((pScb->SCB_Target != target) in iha_resel()
1789 || (pScb->SCB_Lun != lun) in iha_resel()
1790 || (pScb->SCB_Status != STATUS_BUSY)) { in iha_resel()
1796 sc->HCS_ActScb = pScb; in iha_resel()
2184 struct iha_scb *pScb, u_int8_t select_type) in iha_select() argument
2190 bus_space_write_1(iot, ioh, TUL_SFIFO, pScb->SCB_Ident); in iha_select()
2192 pScb->SCB_CDB, pScb->SCB_CDBLen); in iha_select()
2194 pScb->SCB_NxtStat = 2; in iha_select()
2198 pScb->SCB_NxtStat = 1; in iha_select()
2202 bus_space_write_1(iot, ioh, TUL_SFIFO, pScb->SCB_Ident); in iha_select()
2203 bus_space_write_1(iot, ioh, TUL_SFIFO, pScb->SCB_TagMsg); in iha_select()
2204 bus_space_write_1(iot, ioh, TUL_SFIFO, pScb->SCB_TagId); in iha_select()
2206 bus_space_write_multi_1(iot, ioh, TUL_SFIFO, pScb->SCB_CDB, in iha_select()
2207 pScb->SCB_CDBLen); in iha_select()
2209 pScb->SCB_NxtStat = 2; in iha_select()
2214 sc_print_addr(pScb->SCB_Xs->sc_link); in iha_select()
2222 TAILQ_REMOVE(&sc->HCS_PendScb, pScb, SCB_ScbList); in iha_select()
2225 pScb->SCB_Status = STATUS_SELECT; in iha_select()
2227 sc->HCS_ActScb = pScb; in iha_select()
2305 iha_done_scb(struct iha_softc *sc, struct iha_scb *pScb) in iha_done_scb() argument
2308 struct scsi_xfer *xs = pScb->SCB_Xs; in iha_done_scb()
2313 xs->status = pScb->SCB_TaStat; in iha_done_scb()
2315 if ((pScb->SCB_Flags & (SCSI_DATA_IN | SCSI_DATA_OUT)) != 0) { in iha_done_scb()
2316 bus_dmamap_sync(sc->sc_dmat, pScb->SCB_DataDma, in iha_done_scb()
2317 0, pScb->SCB_BufChars, in iha_done_scb()
2318 ((pScb->SCB_Flags & SCSI_DATA_IN) ? in iha_done_scb()
2320 bus_dmamap_unload(sc->sc_dmat, pScb->SCB_DataDma); in iha_done_scb()
2322 if ((pScb->SCB_Flags & FLAG_SG) != 0) { in iha_done_scb()
2323 bus_dmamap_sync(sc->sc_dmat, pScb->SCB_SGDma, in iha_done_scb()
2324 0, sizeof(pScb->SCB_SGList), in iha_done_scb()
2326 bus_dmamap_unload(sc->sc_dmat, pScb->SCB_SGDma); in iha_done_scb()
2329 switch (pScb->SCB_HaStat) { in iha_done_scb()
2331 switch (pScb->SCB_TaStat) { in iha_done_scb()
2336 xs->resid = pScb->SCB_BufCharsLeft; in iha_done_scb()
2349 s1 = &pScb->SCB_ScsiSenseData; in iha_done_scb()
2394 struct iha_scb *pScb = (struct iha_scb *)arg; in iha_timeout() local
2395 struct scsi_xfer *xs = pScb->SCB_Xs; in iha_timeout()
2405 iha_exec_scb(struct iha_softc *sc, struct iha_scb *pScb) in iha_exec_scb() argument
2407 struct scsi_xfer *xs = pScb->SCB_Xs; in iha_exec_scb()
2414 if ((pScb->SCB_Flags & SCSI_POLL) == 0) in iha_exec_scb()
2417 if (((pScb->SCB_Flags & SCSI_RESET) != 0) in iha_exec_scb()
2418 || (pScb->SCB_CDB[0] == REQUEST_SENSE)) in iha_exec_scb()
2419 iha_push_pend_scb(sc, pScb); /* Insert SCB at head of Pend */ in iha_exec_scb()
2421 iha_append_pend_scb(sc, pScb); /* Append SCB to tail of Pend */ in iha_exec_scb()