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;
643 if(!(scb = mega_allocate_scb(adapter, cmd))) {
648 scb->raw_mbox[0] = MEGA_CLUSTER_CMD;
649 scb->raw_mbox[2] = MEGA_RESERVATION_STATUS;
650 scb->raw_mbox[3] = ldrv_num;
652 scb->dma_direction = PCI_DMA_NONE;
654 return scb;
691 if(!(scb = mega_allocate_scb(adapter, cmd))) {
695 pthru = scb->pthru;
697 mbox = (mbox_t *)scb->raw_mbox;
698 memset(mbox, 0, sizeof(scb->raw_mbox));
716 scb->dma_direction = PCI_DMA_FROMDEVICE;
718 pthru->numsgelements = mega_build_sglist(adapter, scb,
721 mbox->m_out.xferaddr = scb->pthru_dma_addr;
723 return scb;
733 if(!(scb = mega_allocate_scb(adapter, cmd))) {
737 mbox = (mbox_t *)scb->raw_mbox;
739 memset(mbox, 0, sizeof(scb->raw_mbox));
846 scb->dma_direction = PCI_DMA_FROMDEVICE;
849 scb->dma_direction = PCI_DMA_TODEVICE;
853 mbox->m_out.numsgelements = mega_build_sglist(adapter, scb,
856 return scb;
873 if(!(scb = mega_allocate_scb(adapter, cmd))) {
878 scb->raw_mbox[0] = MEGA_CLUSTER_CMD;
879 scb->raw_mbox[2] = ( *cmd->cmnd == RESERVE ) ?
882 scb->raw_mbox[3] = ldrv_num;
884 scb->dma_direction = PCI_DMA_NONE;
886 return scb;
901 if(!(scb = mega_allocate_scb(adapter, cmd))) {
906 mbox = (mbox_t *)scb->raw_mbox;
907 memset(mbox, 0, sizeof(scb->raw_mbox));
911 epthru = mega_prepare_extpassthru(adapter, scb, cmd,
916 mbox->m_out.xferaddr = scb->epthru_dma_addr;
921 pthru = mega_prepare_passthru(adapter, scb, cmd,
932 mbox->m_out.xferaddr = scb->pthru_dma_addr;
935 return scb;
944 * @scb - our scsi control block
952 mega_prepare_passthru(adapter_t *adapter, scb_t *scb, Scsi_Cmnd *cmd,
957 pthru = scb->pthru;
978 scb->dma_direction = PCI_DMA_BIDIRECTIONAL;
996 pthru->numsgelements = mega_build_sglist(adapter, scb,
1007 * @scb - our scsi control block
1016 mega_prepare_extpassthru(adapter_t *adapter, scb_t *scb, Scsi_Cmnd *cmd,
1021 epthru = scb->epthru;
1041 scb->dma_direction = PCI_DMA_BIDIRECTIONAL;
1058 epthru->numsgelements = mega_build_sglist(adapter, scb,
1069 scb_t *scb;
1075 scb = list_entry(pos, scb_t, list);
1077 if( !(scb->state & SCB_ISSUED) ) {
1079 if( issue_scb(adapter, scb) != 0 )
1091 * @scb - scsi control block
1094 * busy. We also take the scb from the pending list if the mailbox is
1098 issue_scb(adapter_t *adapter, scb_t *scb)
1114 memcpy((char *)&mbox->m_out, (char *)scb->raw_mbox,
1117 mbox->m_out.cmdid = scb->idx; /* Set cmdid */
1143 scb->state |= SCB_ISSUED;
1174 * Issue a scb in synchronous and non-interrupt mode
1422 scb_t *scb;
1429 * and free the scb.
1443 scb = &adapter->int_scb;
1445 list_del_init(&scb->list);
1446 scb->state = SCB_FREE;
1451 scb = &adapter->scb_list[cmdid];
1456 if( !(scb->state & SCB_ISSUED) || scb->cmd == NULL ) {
1458 "Id %d, scb->state:%x, scsi cmd:%p\n",
1459 cmdid, scb->state, scb->cmd);
1467 if( scb->state & SCB_ABORT ) {
1471 scb->idx);
1473 scb->cmd->result = (DID_ABORT << 16);
1475 list_add_tail(SCSI_LIST(scb->cmd),
1478 mega_free_scb(adapter, scb);
1486 if( scb->state & SCB_RESET ) {
1490 scb->idx);
1492 scb->cmd->result = (DID_RESET << 16);
1494 list_add_tail(SCSI_LIST(scb->cmd),
1497 mega_free_scb (adapter, scb);
1502 cmd = scb->cmd;
1503 pthru = scb->pthru;
1504 epthru = scb->epthru;
1505 mbox = (mbox_t *)scb->raw_mbox;
1637 mega_free_scb(adapter, scb);
1670 * Note: We assume the scsi commands associated with this scb is not free yet.
1673 mega_free_scb(adapter_t *adapter, scb_t *scb)
1675 switch( scb->dma_type ) {
1681 scsi_dma_unmap(scb->cmd);
1690 list_del_init(&scb->list);
1692 /* Link the scb back into free list */
1693 scb->state = SCB_FREE;
1694 scb->cmd = NULL;
1696 list_add(&scb->list, &adapter->free_list);
1720 mega_build_sglist(adapter_t *adapter, scb_t *scb, u32 *buf, u32 *len)
1727 cmd = scb->cmd;
1736 scb->dma_type = MEGA_SGLIST;
1744 scb->dma_h_bulkdata = sg_dma_address(sg);
1745 *buf = (u32)scb->dma_h_bulkdata;
1752 scb->sgl64[idx].address = sg_dma_address(sg);
1753 *len += scb->sgl64[idx].length = sg_dma_len(sg);
1755 scb->sgl[idx].address = sg_dma_address(sg);
1756 *len += scb->sgl[idx].length = sg_dma_len(sg);
1761 *buf = scb->sgl_dma_addr;
1811 scb_t *scb;
1816 scb = &adapter->scb_list[i];
1818 if( scb->sgl64 ) {
1821 scb->sgl64,
1822 scb->sgl_dma_addr);
1824 scb->sgl64 = NULL;
1827 if( scb->pthru ) {
1829 scb->pthru, scb->pthru_dma_addr);
1831 scb->pthru = NULL;
1834 if( scb->epthru ) {
1837 scb->epthru, scb->epthru_dma_addr);
1839 scb->epthru = NULL;
1937 scb_t *scb;
1949 scb = list_entry(pos, scb_t, list);
1951 if (scb->cmd == cmd) { /* Found command */
1953 scb->state |= aor;
1961 if( scb->state & SCB_ISSUED ) {
1966 scb->idx);
1979 scb->idx);
1981 mega_free_scb(adapter, scb);
2903 * Allocate memory for the various pointers in the scb structures:
2910 scb_t *scb;
2915 scb = &adapter->scb_list[i];
2917 scb->sgl64 = NULL;
2918 scb->sgl = NULL;
2919 scb->pthru = NULL;
2920 scb->epthru = NULL;
2925 scb = &adapter->scb_list[i];
2927 scb->idx = i;
2929 scb->sgl64 = pci_alloc_consistent(adapter->dev,
2931 &scb->sgl_dma_addr);
2933 scb->sgl = (mega_sglist *)scb->sgl64;
2935 if( !scb->sgl ) {
2941 scb->pthru = pci_alloc_consistent(adapter->dev,
2943 &scb->pthru_dma_addr);
2945 if( !scb->pthru ) {
2951 scb->epthru = pci_alloc_consistent(adapter->dev,
2953 &scb->epthru_dma_addr);
2955 if( !scb->epthru ) {
2963 scb->dma_type = MEGA_DMA_TYPE_NONE;
2970 scb->state = SCB_FREE;
2971 scb->cmd = NULL;
2972 list_add(&scb->list, &adapter->free_list);
3833 scb_t *scb;
3861 scb = list_entry(pos, scb_t, list);
3862 if (scb->pthru->logdrv < 0x80 )
3863 scb->pthru->logdrv += 0x80;
4117 scb_t *scb;
4127 scb = &adapter->int_scb;
4128 memset(scb, 0, sizeof(scb_t));
4130 scb->idx = CMDID_INT_CMDS;
4131 scb->state |= SCB_ACTIVE | SCB_PENDQ;
4133 memcpy(scb->raw_mbox, mc, sizeof(megacmd_t));
4139 scb->pthru = pthru;
4142 list_add_tail(&scb->list, &adapter->pending_list);