Lines Matching refs:scb

953 	scb_t			*scb;
1011 * Allocate memory for the base list of scb. Later allocate memory for
1013 * scb to the allocated components
1035 // Adjust the scb pointers and link in the free pool
1041 scb = adapter->kscb_list + i;
1068 scb->ccb = (caddr_t)ccb;
1069 scb->gp = 0;
1071 scb->sno = i; // command index
1073 scb->scp = NULL;
1074 scb->state = SCB_FREE;
1075 scb->dma_direction = DMA_NONE;
1076 scb->dma_type = MRAID_DMA_NONE;
1077 scb->dev_channel = -1;
1078 scb->dev_target = -1;
1080 // put scb in the free pool
1081 list_add_tail(&scb->list, &adapter->kscb_pool);
1266 * megaraid_alloc_scb - detach and return a scb from the free list
1270 * Return the scb from the head of the free list. %NULL if there are none
1277 scb_t *scb = NULL;
1280 // detach scb from free pool
1288 scb = list_entry(head->next, scb_t, list);
1289 list_del_init(&scb->list);
1293 scb->state = SCB_ACTIVE;
1294 scb->scp = scp;
1295 scb->dma_type = MRAID_DMA_NONE;
1297 return scb;
1302 * megaraid_dealloc_scb - return the scb to the free pool
1304 * @scb : scb to be freed
1306 * Return the scb back to the free list of scbs. The caller must 'flush' the
1308 * NOTE NOTE: Make sure the scb is not on any list before calling this
1312 megaraid_dealloc_scb(adapter_t *adapter, scb_t *scb)
1316 // put scb in the free pool
1317 scb->state = SCB_FREE;
1318 scb->scp = NULL;
1321 list_add(&scb->list, &adapter->kscb_pool);
1332 * @scb : scsi control block
1337 megaraid_mbox_mksgl(adapter_t *adapter, scb_t *scb)
1346 scp = scb->scp;
1347 ccb = (mbox_ccb_t *)scb->ccb;
1356 scb->dma_type = MRAID_DMA_WSG;
1371 * @scb : command to be issued
1376 mbox_post_cmd(adapter_t *adapter, scb_t *scb)
1386 ccb = (mbox_ccb_t *)scb->ccb;
1414 mbox->cmdid = scb->sno;
1441 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;
1600 if (!(scb = megaraid_alloc_scb(adapter, scp))) {
1606 ccb = (mbox_ccb_t *)scb->ccb;
1607 scb->dev_channel = 0xFF;
1608 scb->dev_target = target;
1622 scb->dma_direction = scp->sc_data_direction;
1627 scb);
1633 return scb;
1645 if (!(scb = megaraid_alloc_scb(adapter, scp))) {
1650 ccb = (mbox_ccb_t *)scb->ccb;
1651 scb->dev_channel = 0xFF;
1652 scb->dev_target = target;
1711 megaraid_dealloc_scb(adapter, scb);
1717 scb->dma_direction = scp->sc_data_direction;
1722 scb);
1726 return scb;
1741 if (!(scb = megaraid_alloc_scb(adapter, scp))) {
1747 ccb = (mbox_ccb_t *)scb->ccb;
1748 scb->dev_channel = 0xFF;
1749 scb->dev_target = target;
1755 scb->dma_direction = scp->sc_data_direction;
1757 return scb;
1809 if (!(scb = megaraid_alloc_scb(adapter, scp))) {
1815 ccb = (mbox_ccb_t *)scb->ccb;
1816 scb->dev_channel = channel;
1817 scb->dev_target = target;
1818 scb->dma_direction = scp->sc_data_direction;
1826 megaraid_mbox_prepare_epthru(adapter, scb, scp);
1835 megaraid_mbox_prepare_pthru(adapter, scb, scp);
1841 return scb;
1864 scb_t *scb;
1884 scb = list_entry(adapter->pend_list.next, scb_t, list);
1886 // remove the scb from the pending list and try to
1890 list_del_init(&scb->list);
1898 scb->state = SCB_ISSUED;
1900 if (mbox_post_cmd(adapter, scb) != 0) {
1904 scb->state = SCB_PENDQ;
1906 list_add(&scb->list, &adapter->pend_list);
1927 * @scb : scsi control block
1933 megaraid_mbox_prepare_pthru(adapter_t *adapter, scb_t *scb,
1941 ccb = (mbox_ccb_t *)scb->ccb;
1943 channel = scb->dev_channel;
1944 target = scb->dev_target;
1961 pthru->numsge = megaraid_mbox_mksgl(adapter, scb);
1975 * @scb : scsi control block
1982 megaraid_mbox_prepare_epthru(adapter_t *adapter, scb_t *scb,
1990 ccb = (mbox_ccb_t *)scb->ccb;
1992 channel = scb->dev_channel;
1993 target = scb->dev_target;
2010 epthru->numsge = megaraid_mbox_mksgl(adapter, scb);
2035 scb_t *scb;
2099 scb = adapter->uscb_list + (completed[i] -
2104 scb = adapter->kscb_list + completed[i];
2107 scb->status = mbox->status;
2108 list_add_tail(&scb->list, &clist);
2175 scb_t *scb;
2205 list_for_each_entry_safe(scb, tmp, &clist, list) {
2207 status = scb->status;
2208 scp = scb->scp;
2209 ccb = (mbox_ccb_t *)scb->ccb;
2215 if (scb->state != SCB_ISSUED) {
2218 scb->sno, scb->state, scp));
2224 if (scb->sno >= MBOX_MAX_SCSI_CMDS) {
2225 scb->state = SCB_FREE;
2226 scb->status = status;
2229 list_del_init(&scb->list);
2231 kioc = (uioc_t *)scb->gp;
2234 megaraid_mbox_mm_done(adapter, scb);
2240 if (scb->state & SCB_ABORT) {
2243 scb->sno));
2256 && IS_RAID_CH(raid_dev, scb->dev_channel)) {
2269 pdev_index = (scb->dev_channel * 16) +
2270 scb->dev_target;
2350 megaraid_mbox_display_scb(adapter, scb);
2356 list_del_init(&scb->list);
2359 megaraid_dealloc_scb(adapter, scb);
2381 scb_t *scb;
2407 scb = NULL;
2409 list_for_each_entry_safe(scb, tmp, &adapter->completed_list, list) {
2411 if (scb->scp == scp) { // Found command
2413 list_del_init(&scb->list); // from completed list
2417 scb->sno, scb->dev_channel, scb->dev_target));
2422 megaraid_dealloc_scb(adapter, scb);
2437 list_for_each_entry_safe(scb, tmp, &adapter->pend_list, list) {
2439 if (scb->scp == scp) { // Found command
2441 list_del_init(&scb->list); // from pending list
2443 ASSERT(!(scb->state & SCB_ISSUED));
2447 scb->dev_channel, scb->dev_target));
2452 megaraid_dealloc_scb(adapter, scb);
2464 // owned by the firmware. The only way to locate the FW scb is to
2470 scb = adapter->kscb_list + i;
2472 if (scb->scp == scp) {
2476 if (!(scb->state & SCB_ISSUED)) {
2479 scb->sno, scb->dev_channel, scb->dev_target));
2485 scb->sno, scb->dev_channel, scb->dev_target));
2518 scb_t *scb;
2544 list_for_each_entry_safe(scb, tmp, &adapter->pend_list, list) {
2545 list_del_init(&scb->list); // from pending list
2547 if (scb->sno >= MBOX_MAX_SCSI_CMDS) {
2550 scb->sno, scb->dev_channel, scb->dev_target));
2552 scb->status = -1;
2554 kioc = (uioc_t *)scb->gp;
2557 megaraid_mbox_mm_done(adapter, scb);
2559 if (scb->scp == scp) { // Found command
2562 scb->sno, scb->dev_channel, scb->dev_target));
2566 scb->sno, scb->dev_channel, scb->dev_target));
2569 scb->scp->result = (DID_RESET << 16);
2570 scsi_done(scb->scp);
2572 megaraid_dealloc_scb(adapter, scb);
2662 * Issue a scb in synchronous and non-interrupt mode for mailbox based
2791 * Issue a scb in synchronous and non-interrupt mode for mailbox based
3297 * @scb : SCB to be displayed
3303 megaraid_mbox_display_scb(adapter_t *adapter, scb_t *scb)
3312 ccb = (mbox_ccb_t *)scb->ccb;
3313 scp = scb->scp;
3319 "megaraid mailbox: status:%#x cmd:%#x id:%#x ", scb->status,
3320 mbox->cmd, scb->sno));
3397 scb_t *scb;
3402 // Allocate memory for the base list of scb for management module.
3427 scb = adapter->uscb_list + i;
3430 scb->ccb = (caddr_t)ccb;
3435 scb->gp = 0;
3439 scb->sno = i + MBOX_MAX_SCSI_CMDS;
3441 scb->scp = NULL;
3442 scb->state = SCB_FREE;
3443 scb->dma_direction = DMA_NONE;
3444 scb->dma_type = MRAID_DMA_NONE;
3445 scb->dev_channel = -1;
3446 scb->dev_target = -1;
3448 // put scb in the free pool
3449 list_add_tail(&scb->list, &adapter->uscb_pool);
3557 scb_t *scb;
3561 // detach one scb from free pool
3574 scb = list_entry(head->next, scb_t, list);
3575 list_del_init(&scb->list);
3579 scb->state = SCB_ACTIVE;
3580 scb->dma_type = MRAID_DMA_NONE;
3581 scb->dma_direction = DMA_NONE;
3583 ccb = (mbox_ccb_t *)scb->ccb;
3589 scb->gp = (unsigned long)kioc;
3603 scb->status = -1;
3605 megaraid_mbox_mm_done(adapter, scb);
3610 INIT_LIST_HEAD(&scb->list);
3612 scb->state = SCB_ISSUED;
3613 if (mbox_post_cmd(adapter, scb) != 0) {
3620 scb->status = -1;
3622 megaraid_mbox_mm_done(adapter, scb);
3631 megaraid_mbox_runpendq(adapter, scb);
3670 * @scb : completed command
3676 megaraid_mbox_mm_done(adapter_t *adapter, scb_t *scb)
3683 kioc = (uioc_t *)scb->gp;
3685 mbox64->mbox32.status = scb->status;
3689 // put scb in the free pool
3690 scb->state = SCB_FREE;
3691 scb->scp = NULL;
3695 list_add(&scb->list, &adapter->uscb_pool);