Lines Matching defs:scb

65 static void aic_done(struct aic_softc *aic, struct aic_scb *scb);
79 struct aic_scb *scb;
81 if ((scb = free_scbs) != NULL)
84 return (scb);
88 aic_free_scb(struct aic_softc *aic, struct aic_scb *scb)
92 (scb->ccb->ccb_h.status & CAM_RELEASE_SIMQ) == 0) {
93 scb->ccb->ccb_h.status |= CAM_RELEASE_SIMQ;
96 scb->flags = 0;
97 scb->ccb = (union ccb *)free_scbs;
98 free_scbs = scb;
116 struct aic_scb *scb;
118 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);
311 struct aic_scb *scb = (struct aic_scb *)arg;
312 union ccb *ccb = scb->ccb;
320 aic_free_scb(aic, scb);
325 scb->flags |= SCB_ACTIVE;
329 ccb->ccb_h.timeout_ch = timeout(aic_timeout, (caddr_t)scb,
371 struct aic_scb *scb = aic->nexus;
373 CAM_DEBUG(scb->ccb->ccb_h.path, CAM_DEBUG_TRACE,
374 ("aic_select - ccb %p\n", scb->ccb));
379 aic_outb(aic, SCSIID, aic->initiator << OID_S | scb->target);
395 struct aic_scb *scb = aic->nexus;
396 union ccb *ccb = scb->ccb;
397 struct aic_tinfo *ti = &aic->tinfo[scb->target];
404 if (scb->flags & SCB_DEVICE_RESET) {
414 ti->lubusy |= 1 << scb->lun;
500 struct aic_scb *scb;
506 scb = NULL;
508 scb = (struct aic_scb *)ccb_h->ccb_scb_ptr;
509 if (scb->target == aic->target && scb->lun == aic->lun &&
510 (tag == -1 || scb->tag == tag))
526 aic->nexus = scb;
527 scb->flags &= ~SCB_DISCONNECTED;
610 struct aic_scb *scb;
641 scb = aic->nexus;
642 ccb_h = &scb->ccb->ccb_h;
643 csio = &scb->ccb->csio;
644 if ((scb->flags & SCB_SENSE) != 0) {
646 scb->flags &= ~SCB_SENSE;
647 csio->sense_resid = scb->data_len;
648 if (scb->status == SCSI_STATUS_OK) {
655 ccb_h, scb->status);
658 csio->scsi_status = scb->status;
659 csio->resid = scb->data_len;
660 if (scb->status == SCSI_STATUS_OK) {
667 scb->flags |= SCB_SENSE;
673 aic_done(aic, scb);
680 scb = aic->nexus;
681 ti = &aic->tinfo[scb->target];
709 ccb_h = &scb->ccb->ccb_h;
720 scb = aic->nexus;
721 ccb_h = &scb->ccb->ccb_h;
723 scb->flags |= SCB_DISCONNECTED;
731 scb = aic->nexus;
732 ti = &aic->tinfo[scb->target];
734 ti->lubusy |= 1 << scb->lun;
737 scb = aic->nexus;
738 ti = &aic->tinfo[scb->target];
753 ccb_h = &scb->ccb->ccb_h;
779 struct aic_scb *scb;
812 scb = aic->nexus;
813 ccb = scb->ccb;
814 ti = &aic->tinfo[scb->target];
815 aic->msg_buf[0] = MSG_IDENTIFY(scb->lun,
821 scb = aic->nexus;
822 ccb = scb->ccb;
824 aic->msg_buf[1] = scb->tag;
828 scb = aic->nexus;
829 ti = &aic->tinfo[scb->target];
867 struct aic_scb *scb = aic->nexus;
881 while (scb->data_len > 0) {
899 n = imin(scb->data_len, n);
902 aic_insl(aic, DMADATALONG, scb->data_ptr, n>>2);
903 scb->data_ptr += n & ~3;
904 scb->data_len -= n & ~3;
909 aic_insw(aic, DMADATA, scb->data_ptr, n >> 1);
910 scb->data_ptr += n & ~1;
911 scb->data_len -= n & ~1;
917 aic_insb(aic, DMADATA, scb->data_ptr, n);
918 scb->data_ptr += n;
919 scb->data_len -= n;
937 struct aic_scb *scb = aic->nexus;
951 while (scb->data_len > 0) {
960 n = imin(scb->data_len, FIFOSIZE);
963 aic_outsl(aic, DMADATALONG, scb->data_ptr,n>>2);
964 scb->data_ptr += n & ~3;
965 scb->data_len -= n & ~3;
970 aic_outsw(aic, DMADATA, scb->data_ptr, n >> 1);
971 scb->data_ptr += n & ~1;
972 scb->data_len -= n & ~1;
978 aic_outsb(aic, DMADATA, scb->data_ptr, n);
979 scb->data_ptr += n;
980 scb->data_len -= n;
994 scb->data_ptr -= n;
995 scb->data_len += n;
1013 struct aic_scb *scb = aic->nexus;
1018 if (scb->flags & SCB_SENSE) {
1021 sense_cmd.byte2 = scb->lun << 5;
1022 sense_cmd.length = scb->ccb->csio.sense_len;
1026 scb->cmd_ptr = (u_int8_t *)&sense_cmd;
1027 scb->cmd_len = sizeof(sense_cmd);
1028 scb->data_ptr = (u_int8_t *)&scb->ccb->csio.sense_data;
1029 scb->data_len = scb->ccb->csio.sense_len;
1035 aic_outsw(aic, DMADATA, (u_int16_t *)scb->cmd_ptr, scb->cmd_len >> 1);
1048 aic_done(struct aic_softc *aic, struct aic_scb *scb)
1050 union ccb *ccb = scb->ccb;
1056 untimeout(aic_timeout, (caddr_t)scb, ccb->ccb_h.timeout_ch);
1058 if ((scb->flags & SCB_DEVICE_RESET) != 0 &&
1066 scb->target,
1079 if (ccb_h->target_id == scb->target) {
1098 if (ccb_h->target_id == scb->target) {
1113 if (aic->nexus == scb || scb->flags & SCB_DISCONNECTED)
1114 aic->tinfo[scb->target].lubusy &= ~(1 << scb->lun);
1116 if (aic->nexus == scb) {
1119 aic_free_scb(aic, scb);
1132 struct aic_scb *scb = (struct aic_scb *)arg;
1133 union ccb *ccb = scb->ccb;
1139 if (aic->nexus && aic->nexus != scb)
1145 if ((scb->flags & SCB_ACTIVE) == 0) {
1152 if ((scb->flags & SCB_DEVICE_RESET) == 0 && aic->nexus == scb) {
1153 struct ccb_hdr *ccb_h = &scb->ccb->ccb_h;
1170 scb->flags |= SCB_DEVICE_RESET;
1172 timeout(aic_timeout, (caddr_t)scb, 5 * hz);
1175 if (aic->nexus == scb) {
1177 aic_done(aic, scb);
1191 struct aic_scb *scb;
1235 scb = aic->nexus;
1236 ccb = scb->ccb;
1238 aic_done(aic, scb);
1249 if ((scb = aic->nexus)) {
1251 ccb = scb->ccb;
1253 aic_done(aic, scb);
1254 } else if (scb->flags & SCB_DEVICE_RESET) {
1255 ccb = scb->ccb;
1262 aic_done(aic, scb);
1263 } else if (scb->flags & SCB_SENSE) {
1266 aic->tinfo[scb->target].lubusy &=
1267 ~(1 << scb->lun);
1293 scb = aic->nexus;
1294 ccb = scb->ccb;
1297 scb->status = aic_inb(aic, SCSIDAT);
1429 struct aic_scb *scb;
1486 scb = &aic->scbs[i];
1487 scb->tag = i;
1488 aic_free_scb(aic, scb);