Lines Matching refs:scb
951 scb_t *scb;
1009 * Allocate memory for the base list of scb. Later allocate memory for
1011 * scb to the allocated components
1033 // Adjust the scb pointers and link in the free pool
1039 scb = adapter->kscb_list + i;
1066 scb->ccb = (caddr_t)ccb;
1067 scb->gp = 0;
1069 scb->sno = i; // command index
1071 scb->scp = NULL;
1072 scb->state = SCB_FREE;
1073 scb->dma_direction = DMA_NONE;
1074 scb->dma_type = MRAID_DMA_NONE;
1075 scb->dev_channel = -1;
1076 scb->dev_target = -1;
1078 // put scb in the free pool
1079 list_add_tail(&scb->list, &adapter->kscb_pool);
1264 * megaraid_alloc_scb - detach and return a scb from the free list
1268 * Return the scb from the head of the free list. %NULL if there are none
1275 scb_t *scb = NULL;
1278 // detach scb from free pool
1286 scb = list_entry(head->next, scb_t, list);
1287 list_del_init(&scb->list);
1291 scb->state = SCB_ACTIVE;
1292 scb->scp = scp;
1293 scb->dma_type = MRAID_DMA_NONE;
1295 return scb;
1300 * megaraid_dealloc_scb - return the scb to the free pool
1302 * @scb : scb to be freed
1304 * Return the scb back to the free list of scbs. The caller must 'flush' the
1306 * NOTE NOTE: Make sure the scb is not on any list before calling this
1310 megaraid_dealloc_scb(adapter_t *adapter, scb_t *scb)
1314 // put scb in the free pool
1315 scb->state = SCB_FREE;
1316 scb->scp = NULL;
1319 list_add(&scb->list, &adapter->kscb_pool);
1330 * @scb : scsi control block
1335 megaraid_mbox_mksgl(adapter_t *adapter, scb_t *scb)
1344 scp = scb->scp;
1345 ccb = (mbox_ccb_t *)scb->ccb;
1354 scb->dma_type = MRAID_DMA_WSG;
1369 * @scb : command to be issued
1374 mbox_post_cmd(adapter_t *adapter, scb_t *scb)
1384 ccb = (mbox_ccb_t *)scb->ccb;
1412 mbox->cmdid = scb->sno;
1440 scb_t *scb;
1450 * not allocate scb. We will return non-zero status in that case.
1451 * NOTE: scb can be null even though certain commands completed
1456 scb = megaraid_mbox_build_cmd(adapter, scp, &if_busy);
1457 if (!scb) { // command already completed
1462 megaraid_mbox_runpendq(adapter, scb);
1490 scb_t *scb;
1517 if (!(scb = megaraid_alloc_scb(adapter, scp))) {
1523 scb->dma_direction = scp->sc_data_direction;
1524 scb->dev_channel = 0xFF;
1525 scb->dev_target = target;
1526 ccb = (mbox_ccb_t *)scb->ccb;
1536 return scb;
1602 if (!(scb = megaraid_alloc_scb(adapter, scp))) {
1608 ccb = (mbox_ccb_t *)scb->ccb;
1609 scb->dev_channel = 0xFF;
1610 scb->dev_target = target;
1624 scb->dma_direction = scp->sc_data_direction;
1629 scb);
1635 return scb;
1647 if (!(scb = megaraid_alloc_scb(adapter, scp))) {
1652 ccb = (mbox_ccb_t *)scb->ccb;
1653 scb->dev_channel = 0xFF;
1654 scb->dev_target = target;
1713 megaraid_dealloc_scb(adapter, scb);
1719 scb->dma_direction = scp->sc_data_direction;
1724 scb);
1728 return scb;
1743 if (!(scb = megaraid_alloc_scb(adapter, scp))) {
1749 ccb = (mbox_ccb_t *)scb->ccb;
1750 scb->dev_channel = 0xFF;
1751 scb->dev_target = target;
1757 scb->dma_direction = scp->sc_data_direction;
1759 return scb;
1811 if (!(scb = megaraid_alloc_scb(adapter, scp))) {
1817 ccb = (mbox_ccb_t *)scb->ccb;
1818 scb->dev_channel = channel;
1819 scb->dev_target = target;
1820 scb->dma_direction = scp->sc_data_direction;
1828 megaraid_mbox_prepare_epthru(adapter, scb, scp);
1837 megaraid_mbox_prepare_pthru(adapter, scb, scp);
1843 return scb;
1866 scb_t *scb;
1886 scb = list_entry(adapter->pend_list.next, scb_t, list);
1888 // remove the scb from the pending list and try to
1892 list_del_init(&scb->list);
1900 scb->state = SCB_ISSUED;
1902 if (mbox_post_cmd(adapter, scb) != 0) {
1906 scb->state = SCB_PENDQ;
1908 list_add(&scb->list, &adapter->pend_list);
1929 * @scb : scsi control block
1935 megaraid_mbox_prepare_pthru(adapter_t *adapter, scb_t *scb,
1943 ccb = (mbox_ccb_t *)scb->ccb;
1945 channel = scb->dev_channel;
1946 target = scb->dev_target;
1963 pthru->numsge = megaraid_mbox_mksgl(adapter, scb);
1977 * @scb : scsi control block
1984 megaraid_mbox_prepare_epthru(adapter_t *adapter, scb_t *scb,
1992 ccb = (mbox_ccb_t *)scb->ccb;
1994 channel = scb->dev_channel;
1995 target = scb->dev_target;
2012 epthru->numsge = megaraid_mbox_mksgl(adapter, scb);
2037 scb_t *scb;
2101 scb = adapter->uscb_list + (completed[i] -
2106 scb = adapter->kscb_list + completed[i];
2109 scb->status = mbox->status;
2110 list_add_tail(&scb->list, &clist);
2177 scb_t *scb;
2207 list_for_each_entry_safe(scb, tmp, &clist, list) {
2209 status = scb->status;
2210 scp = scb->scp;
2211 ccb = (mbox_ccb_t *)scb->ccb;
2217 if (scb->state != SCB_ISSUED) {
2220 scb->sno, scb->state, scp));
2226 if (scb->sno >= MBOX_MAX_SCSI_CMDS) {
2227 scb->state = SCB_FREE;
2228 scb->status = status;
2231 list_del_init(&scb->list);
2233 kioc = (uioc_t *)scb->gp;
2236 megaraid_mbox_mm_done(adapter, scb);
2242 if (scb->state & SCB_ABORT) {
2245 scb->sno));
2258 && IS_RAID_CH(raid_dev, scb->dev_channel)) {
2271 pdev_index = (scb->dev_channel * 16) +
2272 scb->dev_target;
2357 megaraid_mbox_display_scb(adapter, scb);
2363 list_del_init(&scb->list);
2366 megaraid_dealloc_scb(adapter, scb);
2388 scb_t *scb;
2414 scb = NULL;
2416 list_for_each_entry_safe(scb, tmp, &adapter->completed_list, list) {
2418 if (scb->scp == scp) { // Found command
2420 list_del_init(&scb->list); // from completed list
2424 scb->sno, scb->dev_channel, scb->dev_target));
2429 megaraid_dealloc_scb(adapter, scb);
2444 list_for_each_entry_safe(scb, tmp, &adapter->pend_list, list) {
2446 if (scb->scp == scp) { // Found command
2448 list_del_init(&scb->list); // from pending list
2450 ASSERT(!(scb->state & SCB_ISSUED));
2454 scb->dev_channel, scb->dev_target));
2459 megaraid_dealloc_scb(adapter, scb);
2471 // owned by the firmware. The only way to locate the FW scb is to
2477 scb = adapter->kscb_list + i;
2479 if (scb->scp == scp) {
2483 if (!(scb->state & SCB_ISSUED)) {
2486 scb->sno, scb->dev_channel, scb->dev_target));
2492 scb->sno, scb->dev_channel, scb->dev_target));
2525 scb_t *scb;
2551 list_for_each_entry_safe(scb, tmp, &adapter->pend_list, list) {
2552 list_del_init(&scb->list); // from pending list
2554 if (scb->sno >= MBOX_MAX_SCSI_CMDS) {
2557 scb->sno, scb->dev_channel, scb->dev_target));
2559 scb->status = -1;
2561 kioc = (uioc_t *)scb->gp;
2564 megaraid_mbox_mm_done(adapter, scb);
2566 if (scb->scp == scp) { // Found command
2569 scb->sno, scb->dev_channel, scb->dev_target));
2573 scb->sno, scb->dev_channel, scb->dev_target));
2576 scb->scp->result = (DID_RESET << 16);
2577 scb->scp->scsi_done(scb->scp);
2579 megaraid_dealloc_scb(adapter, scb);
2669 * Issue a scb in synchronous and non-interrupt mode for mailbox based
2798 * Issue a scb in synchronous and non-interrupt mode for mailbox based
3306 * @scb : SCB to be displayed
3312 megaraid_mbox_display_scb(adapter_t *adapter, scb_t *scb)
3321 ccb = (mbox_ccb_t *)scb->ccb;
3322 scp = scb->scp;
3328 "megaraid mailbox: status:%#x cmd:%#x id:%#x ", scb->status,
3329 mbox->cmd, scb->sno));
3406 scb_t *scb;
3411 // Allocate memory for the base list of scb for management module.
3436 scb = adapter->uscb_list + i;
3439 scb->ccb = (caddr_t)ccb;
3444 scb->gp = 0;
3448 scb->sno = i + MBOX_MAX_SCSI_CMDS;
3450 scb->scp = NULL;
3451 scb->state = SCB_FREE;
3452 scb->dma_direction = DMA_NONE;
3453 scb->dma_type = MRAID_DMA_NONE;
3454 scb->dev_channel = -1;
3455 scb->dev_target = -1;
3457 // put scb in the free pool
3458 list_add_tail(&scb->list, &adapter->uscb_pool);
3566 scb_t *scb;
3570 // detach one scb from free pool
3583 scb = list_entry(head->next, scb_t, list);
3584 list_del_init(&scb->list);
3588 scb->state = SCB_ACTIVE;
3589 scb->dma_type = MRAID_DMA_NONE;
3590 scb->dma_direction = DMA_NONE;
3592 ccb = (mbox_ccb_t *)scb->ccb;
3598 scb->gp = (unsigned long)kioc;
3612 scb->status = -1;
3614 megaraid_mbox_mm_done(adapter, scb);
3619 INIT_LIST_HEAD(&scb->list);
3621 scb->state = SCB_ISSUED;
3622 if (mbox_post_cmd(adapter, scb) != 0) {
3629 scb->status = -1;
3631 megaraid_mbox_mm_done(adapter, scb);
3640 megaraid_mbox_runpendq(adapter, scb);
3679 * @scb : completed command
3685 megaraid_mbox_mm_done(adapter_t *adapter, scb_t *scb)
3692 kioc = (uioc_t *)scb->gp;
3694 mbox64->mbox32.status = scb->status;
3698 // put scb in the free pool
3699 scb->state = SCB_FREE;
3700 scb->scp = NULL;
3704 list_add(&scb->list, &adapter->uscb_pool);