Lines Matching defs:scb

68 static void aic_done(struct aic_softc *aic, struct aic_scb *scb);
80 struct aic_scb *scb;
84 if ((scb = SLIST_FIRST(&aic->free_scbs)) != NULL)
86 return (scb);
90 aic_free_scb(struct aic_softc *aic, struct aic_scb *scb)
96 (scb->ccb->ccb_h.status & CAM_RELEASE_SIMQ) == 0) {
97 scb->ccb->ccb_h.status |= CAM_RELEASE_SIMQ;
100 scb->flags = 0;
101 SLIST_INSERT_HEAD(&aic->free_scbs, scb, link);
118 struct aic_scb *scb;
120 if ((scb = aic_get_scb(aic)) == NULL) {
128 scb->ccb = ccb;
129 ccb->ccb_h.ccb_scb_ptr = scb;
132 scb->target = ccb->ccb_h.target_id;
133 scb->lun = ccb->ccb_h.target_lun;
136 scb->cmd_len = ccb->csio.cdb_len;
140 aic_free_scb(aic, scb);
144 scb->cmd_ptr = ccb->csio.cdb_io.cdb_ptr;
146 scb->cmd_ptr = ccb->csio.cdb_io.cdb_bytes;
152 aic_free_scb(aic, scb);
156 scb->data_ptr = ccb->csio.data_ptr;
157 scb->data_len = ccb->csio.dxfer_len;
159 scb->data_ptr = NULL;
160 scb->data_len = 0;
162 aic_execute_scb(scb, NULL, 0, 0);
164 scb->flags |= SCB_DEVICE_RESET;
165 aic_execute_scb(scb, NULL, 0, 0);
306 struct aic_scb *scb = (struct aic_scb *)arg;
307 union ccb *ccb = scb->ccb;
313 aic_free_scb(aic, scb);
318 scb->flags |= SCB_ACTIVE;
322 callout_reset(&scb->timer, (ccb->ccb_h.timeout * hz) / 1000,
323 aic_timeout, scb);
363 struct aic_scb *scb = aic->nexus;
365 CAM_DEBUG(scb->ccb->ccb_h.path, CAM_DEBUG_TRACE,
366 ("aic_select - ccb %p\n", scb->ccb));
371 aic_outb(aic, SCSIID, aic->initiator << OID_S | scb->target);
387 struct aic_scb *scb = aic->nexus;
388 union ccb *ccb = scb->ccb;
389 struct aic_tinfo *ti = &aic->tinfo[scb->target];
396 if (scb->flags & SCB_DEVICE_RESET) {
406 ti->lubusy |= 1 << scb->lun;
492 struct aic_scb *scb;
498 scb = NULL;
500 scb = (struct aic_scb *)ccb_h->ccb_scb_ptr;
501 if (scb->target == aic->target && scb->lun == aic->lun &&
502 (tag == -1 || scb->tag == tag))
518 aic->nexus = scb;
519 scb->flags &= ~SCB_DISCONNECTED;
602 struct aic_scb *scb;
633 scb = aic->nexus;
634 ccb_h = &scb->ccb->ccb_h;
635 csio = &scb->ccb->csio;
636 if ((scb->flags & SCB_SENSE) != 0) {
638 scb->flags &= ~SCB_SENSE;
639 csio->sense_resid = scb->data_len;
640 if (scb->status == SCSI_STATUS_OK) {
647 ccb_h, scb->status);
650 csio->scsi_status = scb->status;
651 csio->resid = scb->data_len;
652 if (scb->status == SCSI_STATUS_OK) {
659 scb->flags |= SCB_SENSE;
665 aic_done(aic, scb);
672 scb = aic->nexus;
673 ti = &aic->tinfo[scb->target];
701 ccb_h = &scb->ccb->ccb_h;
712 scb = aic->nexus;
713 ccb_h = &scb->ccb->ccb_h;
715 scb->flags |= SCB_DISCONNECTED;
723 scb = aic->nexus;
724 ti = &aic->tinfo[scb->target];
726 ti->lubusy |= 1 << scb->lun;
729 scb = aic->nexus;
730 ti = &aic->tinfo[scb->target];
745 ccb_h = &scb->ccb->ccb_h;
771 struct aic_scb *scb;
804 scb = aic->nexus;
805 ccb = scb->ccb;
806 ti = &aic->tinfo[scb->target];
807 aic->msg_buf[0] = MSG_IDENTIFY(scb->lun,
813 scb = aic->nexus;
814 ccb = scb->ccb;
816 aic->msg_buf[1] = scb->tag;
820 scb = aic->nexus;
821 ti = &aic->tinfo[scb->target];
859 struct aic_scb *scb = aic->nexus;
873 while (scb->data_len > 0) {
891 n = imin(scb->data_len, n);
894 aic_insl(aic, DMADATALONG, scb->data_ptr, n>>2);
895 scb->data_ptr += n & ~3;
896 scb->data_len -= n & ~3;
901 aic_insw(aic, DMADATA, scb->data_ptr, n >> 1);
902 scb->data_ptr += n & ~1;
903 scb->data_len -= n & ~1;
909 aic_insb(aic, DMADATA, scb->data_ptr, n);
910 scb->data_ptr += n;
911 scb->data_len -= n;
929 struct aic_scb *scb = aic->nexus;
943 while (scb->data_len > 0) {
952 n = imin(scb->data_len, FIFOSIZE);
955 aic_outsl(aic, DMADATALONG, scb->data_ptr,n>>2);
956 scb->data_ptr += n & ~3;
957 scb->data_len -= n & ~3;
962 aic_outsw(aic, DMADATA, scb->data_ptr, n >> 1);
963 scb->data_ptr += n & ~1;
964 scb->data_len -= n & ~1;
970 aic_outsb(aic, DMADATA, scb->data_ptr, n);
971 scb->data_ptr += n;
972 scb->data_len -= n;
986 scb->data_ptr -= n;
987 scb->data_len += n;
1005 struct aic_scb *scb = aic->nexus;
1010 if (scb->flags & SCB_SENSE) {
1013 sense_cmd.byte2 = scb->lun << 5;
1014 sense_cmd.length = scb->ccb->csio.sense_len;
1018 scb->cmd_ptr = (u_int8_t *)&sense_cmd;
1019 scb->cmd_len = sizeof(sense_cmd);
1020 scb->data_ptr = (u_int8_t *)&scb->ccb->csio.sense_data;
1021 scb->data_len = scb->ccb->csio.sense_len;
1027 aic_outsw(aic, DMADATA, (u_int16_t *)scb->cmd_ptr, scb->cmd_len >> 1);
1040 aic_done(struct aic_softc *aic, struct aic_scb *scb)
1042 union ccb *ccb = scb->ccb;
1048 callout_stop(&scb->timer);
1050 if ((scb->flags & SCB_DEVICE_RESET) != 0 &&
1058 scb->target,
1071 if (ccb_h->target_id == scb->target) {
1090 if (ccb_h->target_id == scb->target) {
1105 if (aic->nexus == scb || scb->flags & SCB_DISCONNECTED)
1106 aic->tinfo[scb->target].lubusy &= ~(1 << scb->lun);
1108 if (aic->nexus == scb) {
1111 aic_free_scb(aic, scb);
1124 struct aic_scb *scb = (struct aic_scb *)arg;
1125 union ccb *ccb = scb->ccb;
1131 if (aic->nexus && aic->nexus != scb)
1135 if ((scb->flags & SCB_ACTIVE) == 0) {
1141 if ((scb->flags & SCB_DEVICE_RESET) == 0 && aic->nexus == scb) {
1142 struct ccb_hdr *ccb_h = &scb->ccb->ccb_h;
1160 scb->flags |= SCB_DEVICE_RESET;
1161 callout_reset(&scb->timer, 5 * hz, aic_timeout, scb);
1164 if (aic->nexus == scb) {
1166 aic_done(aic, scb);
1187 struct aic_scb *scb;
1231 scb = aic->nexus;
1232 ccb = scb->ccb;
1234 aic_done(aic, scb);
1245 if ((scb = aic->nexus)) {
1247 ccb = scb->ccb;
1249 aic_done(aic, scb);
1250 } else if (scb->flags & SCB_DEVICE_RESET) {
1251 ccb = scb->ccb;
1258 aic_done(aic, scb);
1259 } else if (scb->flags & SCB_SENSE) {
1262 aic->tinfo[scb->target].lubusy &=
1263 ~(1 << scb->lun);
1289 scb = aic->nexus;
1290 ccb = scb->ccb;
1293 scb->status = aic_inb(aic, SCSIDAT);
1425 struct aic_scb *scb;
1482 scb = &aic->scbs[i];
1483 scb->tag = i;
1484 callout_init_mtx(&scb->timer, &aic->lock, 0);
1485 aic_free_scb(aic, scb);
1584 struct aic_scb *scb;
1594 scb = &aic->scbs[i];
1595 callout_drain(&scb->timer);