Lines Matching defs:scb

377 	scb_t	*scb;
389 * allocate scb. We will return non-zero status in that case.
390 * NOTE: scb can be null even though certain commands completed
396 scb = mega_build_cmd(adapter, scmd, &busy);
397 if (!scb)
400 scb->state |= SCB_PENDQ;
401 list_add_tail(&scb->list, &adapter->pending_list);
431 scb_t *scb;
436 scb = list_entry(head->next, scb_t, list);
440 scb->state = SCB_ACTIVE;
441 scb->cmd = cmd;
442 scb->dma_type = MEGA_DMA_TYPE_NONE;
444 return scb;
526 scb_t *scb;
644 if(!(scb = mega_allocate_scb(adapter, cmd))) {
649 scb->raw_mbox[0] = MEGA_CLUSTER_CMD;
650 scb->raw_mbox[2] = MEGA_RESERVATION_STATUS;
651 scb->raw_mbox[3] = ldrv_num;
653 scb->dma_direction = DMA_NONE;
655 return scb;
692 if(!(scb = mega_allocate_scb(adapter, cmd))) {
696 pthru = scb->pthru;
698 mbox = (mbox_t *)scb->raw_mbox;
699 memset(mbox, 0, sizeof(scb->raw_mbox));
717 scb->dma_direction = DMA_FROM_DEVICE;
719 pthru->numsgelements = mega_build_sglist(adapter, scb,
722 mbox->m_out.xferaddr = scb->pthru_dma_addr;
724 return scb;
734 if(!(scb = mega_allocate_scb(adapter, cmd))) {
738 mbox = (mbox_t *)scb->raw_mbox;
740 memset(mbox, 0, sizeof(scb->raw_mbox));
847 scb->dma_direction = DMA_FROM_DEVICE;
850 scb->dma_direction = DMA_TO_DEVICE;
854 mbox->m_out.numsgelements = mega_build_sglist(adapter, scb,
857 return scb;
874 if(!(scb = mega_allocate_scb(adapter, cmd))) {
879 scb->raw_mbox[0] = MEGA_CLUSTER_CMD;
880 scb->raw_mbox[2] = ( *cmd->cmnd == RESERVE ) ?
883 scb->raw_mbox[3] = ldrv_num;
885 scb->dma_direction = DMA_NONE;
887 return scb;
902 if(!(scb = mega_allocate_scb(adapter, cmd))) {
907 mbox = (mbox_t *)scb->raw_mbox;
908 memset(mbox, 0, sizeof(scb->raw_mbox));
912 mega_prepare_extpassthru(adapter, scb, cmd,
917 mbox->m_out.xferaddr = scb->epthru_dma_addr;
922 pthru = mega_prepare_passthru(adapter, scb, cmd,
933 mbox->m_out.xferaddr = scb->pthru_dma_addr;
936 return scb;
945 * @scb: our scsi control block
953 mega_prepare_passthru(adapter_t *adapter, scb_t *scb, struct scsi_cmnd *cmd,
958 pthru = scb->pthru;
979 scb->dma_direction = DMA_BIDIRECTIONAL;
997 pthru->numsgelements = mega_build_sglist(adapter, scb,
1008 * @scb: our scsi control block
1017 mega_prepare_extpassthru(adapter_t *adapter, scb_t *scb,
1023 epthru = scb->epthru;
1043 scb->dma_direction = DMA_BIDIRECTIONAL;
1060 epthru->numsgelements = mega_build_sglist(adapter, scb,
1071 scb_t *scb;
1077 scb = list_entry(pos, scb_t, list);
1079 if( !(scb->state & SCB_ISSUED) ) {
1081 if( issue_scb(adapter, scb) != 0 )
1093 * @scb: scsi control block
1096 * busy. We also take the scb from the pending list if the mailbox is
1100 issue_scb(adapter_t *adapter, scb_t *scb)
1116 memcpy((char *)&mbox->m_out, (char *)scb->raw_mbox,
1119 mbox->m_out.cmdid = scb->idx; /* Set cmdid */
1145 scb->state |= SCB_ISSUED;
1176 * Issue a scb in synchronous and non-interrupt mode
1424 scb_t *scb;
1431 * and free the scb.
1445 scb = &adapter->int_scb;
1447 list_del_init(&scb->list);
1448 scb->state = SCB_FREE;
1453 scb = &adapter->scb_list[cmdid];
1458 if( !(scb->state & SCB_ISSUED) || scb->cmd == NULL ) {
1460 "Id %d, scb->state:%x, scsi cmd:%p\n",
1461 cmdid, scb->state, scb->cmd);
1469 if( scb->state & SCB_ABORT ) {
1473 scb->idx);
1475 scb->cmd->result = (DID_ABORT << 16);
1477 list_add_tail(SCSI_LIST(scb->cmd),
1480 mega_free_scb(adapter, scb);
1488 if( scb->state & SCB_RESET ) {
1492 scb->idx);
1494 scb->cmd->result = (DID_RESET << 16);
1496 list_add_tail(SCSI_LIST(scb->cmd),
1499 mega_free_scb (adapter, scb);
1504 cmd = scb->cmd;
1505 pthru = scb->pthru;
1506 epthru = scb->epthru;
1507 mbox = (mbox_t *)scb->raw_mbox;
1639 mega_free_scb(adapter, scb);
1672 * Note: We assume the scsi commands associated with this scb is not free yet.
1675 mega_free_scb(adapter_t *adapter, scb_t *scb)
1677 switch( scb->dma_type ) {
1683 scsi_dma_unmap(scb->cmd);
1692 list_del_init(&scb->list);
1694 /* Link the scb back into free list */
1695 scb->state = SCB_FREE;
1696 scb->cmd = NULL;
1698 list_add(&scb->list, &adapter->free_list);
1722 mega_build_sglist(adapter_t *adapter, scb_t *scb, u32 *buf, u32 *len)
1729 cmd = scb->cmd;
1738 scb->dma_type = MEGA_SGLIST;
1746 scb->dma_h_bulkdata = sg_dma_address(sg);
1747 *buf = (u32)scb->dma_h_bulkdata;
1754 scb->sgl64[idx].address = sg_dma_address(sg);
1755 *len += scb->sgl64[idx].length = sg_dma_len(sg);
1757 scb->sgl[idx].address = sg_dma_address(sg);
1758 *len += scb->sgl[idx].length = sg_dma_len(sg);
1763 *buf = scb->sgl_dma_addr;
1813 scb_t *scb;
1818 scb = &adapter->scb_list[i];
1820 if( scb->sgl64 ) {
1823 scb->sgl64, scb->sgl_dma_addr);
1825 scb->sgl64 = NULL;
1828 if( scb->pthru ) {
1830 sizeof(mega_passthru), scb->pthru,
1831 scb->pthru_dma_addr);
1833 scb->pthru = NULL;
1836 if( scb->epthru ) {
1839 scb->epthru, scb->epthru_dma_addr);
1841 scb->epthru = NULL;
1939 scb_t *scb;
1951 scb = list_entry(pos, scb_t, list);
1953 if (scb->cmd == cmd) { /* Found command */
1955 scb->state |= aor;
1963 if( scb->state & SCB_ISSUED ) {
1968 scb->idx);
1981 scb->idx);
1983 mega_free_scb(adapter, scb);
2866 * Allocate memory for the various pointers in the scb structures:
2873 scb_t *scb;
2878 scb = &adapter->scb_list[i];
2880 scb->sgl64 = NULL;
2881 scb->sgl = NULL;
2882 scb->pthru = NULL;
2883 scb->epthru = NULL;
2888 scb = &adapter->scb_list[i];
2890 scb->idx = i;
2892 scb->sgl64 = dma_alloc_coherent(&adapter->dev->dev,
2894 &scb->sgl_dma_addr, GFP_KERNEL);
2896 scb->sgl = (mega_sglist *)scb->sgl64;
2898 if( !scb->sgl ) {
2904 scb->pthru = dma_alloc_coherent(&adapter->dev->dev,
2906 &scb->pthru_dma_addr, GFP_KERNEL);
2908 if( !scb->pthru ) {
2914 scb->epthru = dma_alloc_coherent(&adapter->dev->dev,
2916 &scb->epthru_dma_addr, GFP_KERNEL);
2918 if( !scb->epthru ) {
2926 scb->dma_type = MEGA_DMA_TYPE_NONE;
2933 scb->state = SCB_FREE;
2934 scb->cmd = NULL;
2935 list_add(&scb->list, &adapter->free_list);
3794 scb_t *scb;
3822 scb = list_entry(pos, scb_t, list);
3823 if (scb->pthru->logdrv < 0x80 )
3824 scb->pthru->logdrv += 0x80;
4079 scb_t *scb;
4089 scb = &adapter->int_scb;
4090 memset(scb, 0, sizeof(scb_t));
4092 scb->idx = CMDID_INT_CMDS;
4093 scb->state |= SCB_ACTIVE | SCB_PENDQ;
4095 memcpy(scb->raw_mbox, mc, sizeof(megacmd_t));
4101 scb->pthru = pthru;
4104 list_add_tail(&scb->list, &adapter->pending_list);