Lines Matching defs:scb
375 scb_t *scb;
387 * allocate scb. We will return non-zero status in that case.
388 * NOTE: scb can be null even though certain commands completed
394 scb = mega_build_cmd(adapter, scmd, &busy);
395 if (!scb)
398 scb->state |= SCB_PENDQ;
399 list_add_tail(&scb->list, &adapter->pending_list);
429 scb_t *scb;
434 scb = list_entry(head->next, scb_t, list);
438 scb->state = SCB_ACTIVE;
439 scb->cmd = cmd;
440 scb->dma_type = MEGA_DMA_TYPE_NONE;
442 return scb;
525 scb_t *scb;
650 if(!(scb = mega_allocate_scb(adapter, cmd))) {
655 scb->raw_mbox[0] = MEGA_CLUSTER_CMD;
656 scb->raw_mbox[2] = MEGA_RESERVATION_STATUS;
657 scb->raw_mbox[3] = ldrv_num;
659 scb->dma_direction = PCI_DMA_NONE;
661 return scb;
698 if(!(scb = mega_allocate_scb(adapter, cmd))) {
702 pthru = scb->pthru;
704 mbox = (mbox_t *)scb->raw_mbox;
705 memset(mbox, 0, sizeof(scb->raw_mbox));
723 scb->dma_direction = PCI_DMA_FROMDEVICE;
725 pthru->numsgelements = mega_build_sglist(adapter, scb,
728 mbox->m_out.xferaddr = scb->pthru_dma_addr;
730 return scb;
740 if(!(scb = mega_allocate_scb(adapter, cmd))) {
744 mbox = (mbox_t *)scb->raw_mbox;
746 memset(mbox, 0, sizeof(scb->raw_mbox));
853 scb->dma_direction = PCI_DMA_FROMDEVICE;
856 scb->dma_direction = PCI_DMA_TODEVICE;
860 mbox->m_out.numsgelements = mega_build_sglist(adapter, scb,
863 return scb;
880 if(!(scb = mega_allocate_scb(adapter, cmd))) {
885 scb->raw_mbox[0] = MEGA_CLUSTER_CMD;
886 scb->raw_mbox[2] = ( *cmd->cmnd == RESERVE ) ?
889 scb->raw_mbox[3] = ldrv_num;
891 scb->dma_direction = PCI_DMA_NONE;
893 return scb;
908 if(!(scb = mega_allocate_scb(adapter, cmd))) {
913 mbox = (mbox_t *)scb->raw_mbox;
914 memset(mbox, 0, sizeof(scb->raw_mbox));
918 epthru = mega_prepare_extpassthru(adapter, scb, cmd,
923 mbox->m_out.xferaddr = scb->epthru_dma_addr;
928 pthru = mega_prepare_passthru(adapter, scb, cmd,
939 mbox->m_out.xferaddr = scb->pthru_dma_addr;
942 return scb;
951 * @scb - our scsi control block
959 mega_prepare_passthru(adapter_t *adapter, scb_t *scb, Scsi_Cmnd *cmd,
964 pthru = scb->pthru;
985 scb->dma_direction = PCI_DMA_BIDIRECTIONAL;
1003 pthru->numsgelements = mega_build_sglist(adapter, scb,
1014 * @scb - our scsi control block
1023 mega_prepare_extpassthru(adapter_t *adapter, scb_t *scb, Scsi_Cmnd *cmd,
1028 epthru = scb->epthru;
1048 scb->dma_direction = PCI_DMA_BIDIRECTIONAL;
1065 epthru->numsgelements = mega_build_sglist(adapter, scb,
1076 scb_t *scb;
1082 scb = list_entry(pos, scb_t, list);
1084 if( !(scb->state & SCB_ISSUED) ) {
1086 if( issue_scb(adapter, scb) != 0 )
1098 * @scb - scsi control block
1101 * busy. We also take the scb from the pending list if the mailbox is
1105 issue_scb(adapter_t *adapter, scb_t *scb)
1121 memcpy((char *)&mbox->m_out, (char *)scb->raw_mbox,
1124 mbox->m_out.cmdid = scb->idx; /* Set cmdid */
1150 scb->state |= SCB_ISSUED;
1181 * Issue a scb in synchronous and non-interrupt mode
1429 scb_t *scb;
1436 * and free the scb.
1443 scb = &adapter->int_scb;
1444 cmd = scb->cmd;
1445 mbox = (mbox_t *)scb->raw_mbox;
1451 pthru = scb->pthru;
1455 scb = &adapter->scb_list[cmdid];
1460 if( !(scb->state & SCB_ISSUED) || scb->cmd == NULL ) {
1463 printk("Id %d, scb->state:%x, scsi cmd:%p\n",
1464 cmdid, scb->state, scb->cmd);
1472 if( scb->state & SCB_ABORT ) {
1476 scb->idx);
1478 scb->cmd->result = (DID_ABORT << 16);
1480 list_add_tail(SCSI_LIST(scb->cmd),
1483 mega_free_scb(adapter, scb);
1491 if( scb->state & SCB_RESET ) {
1495 scb->idx);
1497 scb->cmd->result = (DID_RESET << 16);
1499 list_add_tail(SCSI_LIST(scb->cmd),
1502 mega_free_scb (adapter, scb);
1507 cmd = scb->cmd;
1508 pthru = scb->pthru;
1509 epthru = scb->epthru;
1510 mbox = (mbox_t *)scb->raw_mbox;
1656 list_del_init(&scb->list);
1657 scb->state = SCB_FREE;
1660 mega_free_scb(adapter, scb);
1694 * Note: We assume the scsi commands associated with this scb is not free yet.
1697 mega_free_scb(adapter_t *adapter, scb_t *scb)
1699 switch( scb->dma_type ) {
1705 scsi_dma_unmap(scb->cmd);
1714 list_del_init(&scb->list);
1716 /* Link the scb back into free list */
1717 scb->state = SCB_FREE;
1718 scb->cmd = NULL;
1720 list_add(&scb->list, &adapter->free_list);
1744 mega_build_sglist(adapter_t *adapter, scb_t *scb, u32 *buf, u32 *len)
1751 cmd = scb->cmd;
1760 scb->dma_type = MEGA_SGLIST;
1768 scb->dma_h_bulkdata = sg_dma_address(sg);
1769 *buf = (u32)scb->dma_h_bulkdata;
1776 scb->sgl64[idx].address = sg_dma_address(sg);
1777 *len += scb->sgl64[idx].length = sg_dma_len(sg);
1779 scb->sgl[idx].address = sg_dma_address(sg);
1780 *len += scb->sgl[idx].length = sg_dma_len(sg);
1785 *buf = scb->sgl_dma_addr;
1835 scb_t *scb;
1840 scb = &adapter->scb_list[i];
1842 if( scb->sgl64 ) {
1845 scb->sgl64,
1846 scb->sgl_dma_addr);
1848 scb->sgl64 = NULL;
1851 if( scb->pthru ) {
1853 scb->pthru, scb->pthru_dma_addr);
1855 scb->pthru = NULL;
1858 if( scb->epthru ) {
1861 scb->epthru, scb->epthru_dma_addr);
1863 scb->epthru = NULL;
1962 scb_t *scb;
1974 scb = list_entry(pos, scb_t, list);
1976 if (scb->cmd == cmd) { /* Found command */
1978 scb->state |= aor;
1986 if( scb->state & SCB_ISSUED ) {
1991 scb->idx);
2004 scb->idx);
2006 mega_free_scb(adapter, scb);
3205 * Allocate memory for the various pointers in the scb structures:
3212 scb_t *scb;
3217 scb = &adapter->scb_list[i];
3219 scb->sgl64 = NULL;
3220 scb->sgl = NULL;
3221 scb->pthru = NULL;
3222 scb->epthru = NULL;
3227 scb = &adapter->scb_list[i];
3229 scb->idx = i;
3231 scb->sgl64 = pci_alloc_consistent(adapter->dev,
3233 &scb->sgl_dma_addr);
3235 scb->sgl = (mega_sglist *)scb->sgl64;
3237 if( !scb->sgl ) {
3243 scb->pthru = pci_alloc_consistent(adapter->dev,
3245 &scb->pthru_dma_addr);
3247 if( !scb->pthru ) {
3253 scb->epthru = pci_alloc_consistent(adapter->dev,
3255 &scb->epthru_dma_addr);
3257 if( !scb->epthru ) {
3265 scb->dma_type = MEGA_DMA_TYPE_NONE;
3272 scb->state = SCB_FREE;
3273 scb->cmd = NULL;
3274 list_add(&scb->list, &adapter->free_list);
4135 scb_t *scb;
4163 scb = list_entry(pos, scb_t, list);
4164 if (scb->pthru->logdrv < 0x80 )
4165 scb->pthru->logdrv += 0x80;
4423 scb_t *scb;
4437 scb = &adapter->int_scb;
4438 memset(scb, 0, sizeof(scb_t));
4446 scmd->host_scribble = (void *)scb;
4449 scb->state |= SCB_ACTIVE;
4450 scb->cmd = scmd;
4452 memcpy(scb->raw_mbox, mc, sizeof(megacmd_t));
4459 scb->pthru = pthru;
4462 scb->idx = CMDID_INT_CMDS;