Lines Matching refs:acb

78 static __inline struct acb*	adwgetacb(struct adw_softc *adw);
80 struct acb *acb);
95 static void adwprocesserror(struct adw_softc *adw, struct acb *acb);
102 static __inline struct acb*
105 struct acb* acb;
109 if ((acb = SLIST_FIRST(&adw->free_acb_list)) != NULL) {
113 acb = SLIST_FIRST(&adw->free_acb_list);
114 if (acb == NULL)
121 return (acb);
125 adwfreeacb(struct adw_softc *adw, struct acb *acb)
130 if ((acb->state & ACB_ACTIVE) != 0)
131 LIST_REMOVE(&acb->ccb->ccb_h, sim_links.le);
132 if ((acb->state & ACB_RELEASE_SIMQ) != 0)
133 acb->ccb->ccb_h.status |= CAM_RELEASE_SIMQ;
135 && (acb->ccb->ccb_h.status & CAM_RELEASE_SIMQ) == 0) {
136 acb->ccb->ccb_h.status |= CAM_RELEASE_SIMQ;
139 acb->state = ACB_FREE;
140 SLIST_INSERT_HEAD(&adw->free_acb_list, acb, links);
184 struct acb *next_acb;
211 acbvtob(adw, next_acb) + offsetof(struct acb, sense_data);
228 struct acb *acb;
232 acb = (struct acb *)arg;
233 ccb = acb->ccb;
246 adwfreeacb(adw, acb);
254 acb->queue.data_addr = dm_segs[0].ds_addr;
255 acb->queue.data_cnt = ccb->csio.dxfer_len;
265 sg_busaddr = acb->sg_busaddr;
268 for (sg_block = acb->sg_blocks;; sg_block++) {
292 acb->queue.sg_real_addr = acb->sg_busaddr;
294 acb->queue.sg_real_addr = 0;
302 bus_dmamap_sync(adw->buffer_dmat, acb->dmamap, op);
305 acb->queue.data_addr = 0;
306 acb->queue.data_cnt = 0;
307 acb->queue.sg_real_addr = 0;
316 bus_dmamap_unload(adw->buffer_dmat, acb->dmamap);
317 adwfreeacb(adw, acb);
322 acb->state |= ACB_ACTIVE;
325 callout_reset_sbt(&acb->timer, SBT_1MS * ccb->ccb_h.timeout, 0,
326 adwtimeout, acb, 0);
328 adw_send_acb(adw, acb, acbvtob(adw, acb));
347 struct acb *acb;
359 if ((acb = adwgetacb(adw)) == NULL) {
367 /* Link acb and ccb so we can find one from the other */
368 acb->ccb = ccb;
369 ccb->ccb_h.ccb_acb_ptr = acb;
372 acb->queue.cntl = 0;
373 acb->queue.target_cmd = 0;
374 acb->queue.target_id = ccb->ccb_h.target_id;
375 acb->queue.target_lun = ccb->ccb_h.target_lun;
377 acb->queue.mflag = 0;
378 acb->queue.sense_len =
379 MIN(csio->sense_len, sizeof(acb->sense_data));
380 acb->queue.cdb_len = csio->cdb_len;
384 acb->queue.scsi_cntl = ADW_QSC_SIMPLE_Q_TAG;
387 acb->queue.scsi_cntl = ADW_QSC_HEAD_OF_Q_TAG;
390 acb->queue.scsi_cntl = ADW_QSC_ORDERED_Q_TAG;
393 acb->queue.scsi_cntl = ADW_QSC_NO_TAGMSG;
397 acb->queue.scsi_cntl = ADW_QSC_NO_TAGMSG;
400 acb->queue.scsi_cntl |= ADW_QSC_NO_DISC;
402 acb->queue.done_status = 0;
403 acb->queue.scsi_status = 0;
404 acb->queue.host_status = 0;
405 acb->queue.sg_wk_ix = 0;
409 acb->queue.cdb, csio->cdb_len);
413 adwfreeacb(adw, acb);
419 acb->queue.cdb, csio->cdb_len);
423 acb->dmamap,
426 acb, /*flags*/0);
433 acb->state |= CAM_RELEASE_SIMQ;
1039 /* DMA tag for our acb structures */
1048 /* maxsize */ adw->max_acbs * sizeof(struct acb),
1070 adw->max_acbs * sizeof(struct acb),
1074 bzero(adw->acbs, adw->max_acbs * sizeof(struct acb));
1250 struct acb *acb;
1264 acb = acbbotov(adw, adw->responseq->areq_ba);
1278 ccb = acb->ccb;
1279 callout_stop(&acb->timer);
1287 bus_dmamap_sync(adw->buffer_dmat, acb->dmamap, op);
1288 bus_dmamap_unload(adw->buffer_dmat, acb->dmamap);
1289 ccb->csio.resid = acb->queue.data_cnt;
1294 if (acb->queue.host_status == QHSTA_NO_ERROR
1295 && (acb->queue.done_status == QD_NO_ERROR
1296 || acb->queue.done_status == QD_WITH_ERROR)) {
1297 ccb->csio.scsi_status = acb->queue.scsi_status;
1305 bcopy(&acb->sense_data, &ccb->csio.sense_data,
1308 ccb->csio.sense_resid = acb->queue.sense_len;
1316 adwfreeacb(adw, acb);
1319 adwprocesserror(adw, acb);
1325 adwprocesserror(struct adw_softc *adw, struct acb *acb)
1329 ccb = acb->ccb;
1330 if (acb->queue.done_status == QD_ABORTED_BY_HOST) {
1334 switch (acb->queue.host_status) {
1394 ccb->csio.scsi_status = acb->queue.scsi_status;
1400 acb->queue.host_status);
1404 if ((acb->state & ACB_RECOVERY_ACB) != 0) {
1413 adwfreeacb(adw, acb);
1420 struct acb *acb;
1426 acb = (struct acb *)arg;
1427 ccb = acb->ccb;
1430 printf("ACB %p - timed out\n", (void *)acb);
1434 if ((acb->state & ACB_ACTIVE) == 0) {
1437 (void *)acb);
1441 acb->state |= ACB_RECOVERY_ACB;