Lines Matching +full:db0 +full:- +full:db7
3 FlashPoint.c -- FlashPoint SCCB Manager for Linux
11 Copyright 1995-1996 by Mylex Corporation. All Rights Reserved
14 and a BSD-style copyright; see LICENSE.FlashPoint for details.
229 unsigned char niSysConf; /* Adapter Configuration byte -
231 unsigned char niScsiConf; /* SCSI Configuration byte -
233 unsigned char niScamConf; /* SCAM Configuration byte -
235 unsigned char niAdapId; /* Host Adapter ID -
276 #define TYPE_CODE0 0x63 /*Level2 Mstr (bits 7-6), */
278 #define SLV_TYPE_CODE0 0xA3 /*Priority Bit set (bits 7-6), */
437 #define XFER_HOST_DMA 0x00 /* 0 0 0 Transfer Host -> DMA */
438 #define XFER_DMA_HOST 0x01 /* 0 0 1 Transfer DMA -> Host */
733 #define NTCMD 0x02 /*Non- Tagged Command start */
920 ' ', 'B', 'T', '-', '9', '3', '0',
930 /*---------------------------------------------------------------------
936 *---------------------------------------------------------------------*/
947 ioport = pCardInfo->si_baseaddr; in FlashPoint_ProbeHostAdapter()
964 the bits(0-3) must be all ZERO for compatible with in FlashPoint_ProbeHostAdapter()
988 pCurrNvRam->niBaseAddr = ioport; in FlashPoint_ProbeHostAdapter()
1000 pCardInfo->si_id = pCurrNvRam->niAdapId; in FlashPoint_ProbeHostAdapter()
1002 pCardInfo->si_id = in FlashPoint_ProbeHostAdapter()
1008 pCardInfo->si_lun = 0x00; in FlashPoint_ProbeHostAdapter()
1009 pCardInfo->si_fw_revision = ORION_FW_REV; in FlashPoint_ProbeHostAdapter()
1019 temp = (unsigned short)pCurrNvRam->niSyncTbl[id]; in FlashPoint_ProbeHostAdapter()
1036 case AUTO_RATE_20: /* Synchronous, 20 mega-transfers/second */ in FlashPoint_ProbeHostAdapter()
1039 case AUTO_RATE_10: /* Synchronous, 10 mega-transfers/second */ in FlashPoint_ProbeHostAdapter()
1042 case AUTO_RATE_05: /* Synchronous, 5 mega-transfers/second */ in FlashPoint_ProbeHostAdapter()
1058 pCardInfo->si_per_targ_init_sync = temp2; in FlashPoint_ProbeHostAdapter()
1059 pCardInfo->si_per_targ_no_disc = temp3; in FlashPoint_ProbeHostAdapter()
1060 pCardInfo->si_per_targ_wide_nego = temp4; in FlashPoint_ProbeHostAdapter()
1061 pCardInfo->si_per_targ_fast_nego = temp5; in FlashPoint_ProbeHostAdapter()
1062 pCardInfo->si_per_targ_ultra_nego = temp6; in FlashPoint_ProbeHostAdapter()
1065 i = pCurrNvRam->niSysConf; in FlashPoint_ProbeHostAdapter()
1071 ScamFlg = pCurrNvRam->niScamConf; in FlashPoint_ProbeHostAdapter()
1076 pCardInfo->si_mflags = 0x0000; in FlashPoint_ProbeHostAdapter()
1079 pCardInfo->si_mflags |= SCSI_PARITY_ENA; in FlashPoint_ProbeHostAdapter()
1082 pCardInfo->si_mflags |= SOFT_RESET; in FlashPoint_ProbeHostAdapter()
1085 pCardInfo->si_mflags |= EXTENDED_TRANSLATION; in FlashPoint_ProbeHostAdapter()
1088 pCardInfo->si_mflags |= FLAG_SCAM_ENABLED; in FlashPoint_ProbeHostAdapter()
1091 pCardInfo->si_mflags |= FLAG_SCAM_LEVEL2; in FlashPoint_ProbeHostAdapter()
1107 pCardInfo->si_mflags |= SUPPORT_16TAR_32LUN; in FlashPoint_ProbeHostAdapter()
1109 pCardInfo->si_card_family = HARPOON_FAMILY; in FlashPoint_ProbeHostAdapter()
1110 pCardInfo->si_bustype = BUSTYPE_PCI; in FlashPoint_ProbeHostAdapter()
1113 pCardInfo->si_card_model[0] = '9'; in FlashPoint_ProbeHostAdapter()
1114 switch (pCurrNvRam->niModel & 0x0f) { in FlashPoint_ProbeHostAdapter()
1116 pCardInfo->si_card_model[1] = '3'; in FlashPoint_ProbeHostAdapter()
1117 pCardInfo->si_card_model[2] = '0'; in FlashPoint_ProbeHostAdapter()
1120 pCardInfo->si_card_model[1] = '5'; in FlashPoint_ProbeHostAdapter()
1121 pCardInfo->si_card_model[2] = '0'; in FlashPoint_ProbeHostAdapter()
1124 pCardInfo->si_card_model[1] = '3'; in FlashPoint_ProbeHostAdapter()
1125 pCardInfo->si_card_model[2] = '2'; in FlashPoint_ProbeHostAdapter()
1128 pCardInfo->si_card_model[1] = '5'; in FlashPoint_ProbeHostAdapter()
1129 pCardInfo->si_card_model[2] = '2'; in FlashPoint_ProbeHostAdapter()
1134 pCardInfo->si_card_model[0] = (unsigned char)(temp >> 8); in FlashPoint_ProbeHostAdapter()
1137 pCardInfo->si_card_model[1] = (unsigned char)(temp & 0x00FF); in FlashPoint_ProbeHostAdapter()
1138 pCardInfo->si_card_model[2] = (unsigned char)(temp >> 8); in FlashPoint_ProbeHostAdapter()
1141 if (pCardInfo->si_card_model[1] == '3') { in FlashPoint_ProbeHostAdapter()
1143 pCardInfo->si_mflags |= LOW_BYTE_TERM; in FlashPoint_ProbeHostAdapter()
1144 } else if (pCardInfo->si_card_model[2] == '0') { in FlashPoint_ProbeHostAdapter()
1148 pCardInfo->si_mflags |= LOW_BYTE_TERM; in FlashPoint_ProbeHostAdapter()
1151 pCardInfo->si_mflags |= HIGH_BYTE_TERM; in FlashPoint_ProbeHostAdapter()
1169 pCardInfo->si_mflags |= LOW_BYTE_TERM; in FlashPoint_ProbeHostAdapter()
1171 pCardInfo->si_mflags |= HIGH_BYTE_TERM; in FlashPoint_ProbeHostAdapter()
1178 pCardInfo->si_XlatInfo[i] = in FlashPoint_ProbeHostAdapter()
1182 /* return with -1 if no sort, else return with in FlashPoint_ProbeHostAdapter()
1183 logical card number sorted by BIOS (zero-based) */ in FlashPoint_ProbeHostAdapter()
1185 pCardInfo->si_relative_cardnum = in FlashPoint_ProbeHostAdapter()
1187 char)(RD_HARPOON(ioport + hp_aramBase + BIOS_RELATIVE_CARD) - 1); in FlashPoint_ProbeHostAdapter()
1200 pCardInfo->si_present = 0x01; in FlashPoint_ProbeHostAdapter()
1205 /*---------------------------------------------------------------------
1211 *---------------------------------------------------------------------*/
1222 ioport = pCardInfo->si_baseaddr; in FlashPoint_HardwareResetHostAdapter()
1243 if (CurrCard->ioPort == in FlashPoint_HardwareResetHostAdapter()
1245 CurrCard->pNvRamInfo = in FlashPoint_HardwareResetHostAdapter()
1249 CurrCard->cardIndex = thisCard; in FlashPoint_HardwareResetHostAdapter()
1250 CurrCard->cardInfo = pCardInfo; in FlashPoint_HardwareResetHostAdapter()
1256 pCurrNvRam = CurrCard->pNvRamInfo; in FlashPoint_HardwareResetHostAdapter()
1259 ScamFlg = pCurrNvRam->niScamConf; in FlashPoint_HardwareResetHostAdapter()
1270 for (i = 0, id = 0x01; i != pCardInfo->si_id; i++, id <<= 1) { in FlashPoint_HardwareResetHostAdapter()
1275 WR_HARPOON(ioport + hp_arb_id, pCardInfo->si_id); in FlashPoint_HardwareResetHostAdapter()
1276 CurrCard->ourId = pCardInfo->si_id; in FlashPoint_HardwareResetHostAdapter()
1278 i = (unsigned char)pCardInfo->si_mflags; in FlashPoint_HardwareResetHostAdapter()
1292 if (!(pCardInfo->si_mflags & SOFT_RESET)) { in FlashPoint_HardwareResetHostAdapter()
1296 FPT_scini(thisCard, pCardInfo->si_id, 0); in FlashPoint_HardwareResetHostAdapter()
1299 if (pCardInfo->si_mflags & POST_ALL_UNDERRRUNS) in FlashPoint_HardwareResetHostAdapter()
1300 CurrCard->globalFlags |= F_NO_FILTER; in FlashPoint_HardwareResetHostAdapter()
1303 if (pCurrNvRam->niSysConf & 0x10) in FlashPoint_HardwareResetHostAdapter()
1304 CurrCard->globalFlags |= F_GREEN_PC; in FlashPoint_HardwareResetHostAdapter()
1307 CurrCard->globalFlags |= F_GREEN_PC; in FlashPoint_HardwareResetHostAdapter()
1310 /* Set global flag to indicate Re-Negotiation to be done on all in FlashPoint_HardwareResetHostAdapter()
1313 if (pCurrNvRam->niScsiConf & 0x04) in FlashPoint_HardwareResetHostAdapter()
1314 CurrCard->globalFlags |= F_DO_RENEGO; in FlashPoint_HardwareResetHostAdapter()
1317 CurrCard->globalFlags |= F_DO_RENEGO; in FlashPoint_HardwareResetHostAdapter()
1321 if (pCurrNvRam->niScsiConf & 0x08) in FlashPoint_HardwareResetHostAdapter()
1322 CurrCard->globalFlags |= F_CONLUN_IO; in FlashPoint_HardwareResetHostAdapter()
1325 CurrCard->globalFlags |= F_CONLUN_IO; in FlashPoint_HardwareResetHostAdapter()
1328 temp = pCardInfo->si_per_targ_no_disc; in FlashPoint_HardwareResetHostAdapter()
1341 temp = (unsigned short)pCurrNvRam->niSyncTbl[id]; in FlashPoint_HardwareResetHostAdapter()
1352 if (pCardInfo->si_per_targ_init_sync & sync_bit_map) { in FlashPoint_HardwareResetHostAdapter()
1368 /* if ((pCardInfo->si_per_targ_wide_nego & sync_bit_map) || in FlashPoint_HardwareResetHostAdapter()
1371 if (pCardInfo->si_per_targ_wide_nego & sync_bit_map) { in FlashPoint_HardwareResetHostAdapter()
1406 pCurrNvRam = ((struct sccb_card *)pCurrCard)->pNvRamInfo; in FlashPoint_ReleaseHostAdapter()
1409 FPT_WrStack(pCurrNvRam->niBaseAddr, 0, pCurrNvRam->niModel); in FlashPoint_ReleaseHostAdapter()
1410 FPT_WrStack(pCurrNvRam->niBaseAddr, 1, pCurrNvRam->niSysConf); in FlashPoint_ReleaseHostAdapter()
1411 FPT_WrStack(pCurrNvRam->niBaseAddr, 2, pCurrNvRam->niScsiConf); in FlashPoint_ReleaseHostAdapter()
1412 FPT_WrStack(pCurrNvRam->niBaseAddr, 3, pCurrNvRam->niScamConf); in FlashPoint_ReleaseHostAdapter()
1413 FPT_WrStack(pCurrNvRam->niBaseAddr, 4, pCurrNvRam->niAdapId); in FlashPoint_ReleaseHostAdapter()
1416 FPT_WrStack(pCurrNvRam->niBaseAddr, in FlashPoint_ReleaseHostAdapter()
1418 pCurrNvRam->niSyncTbl[i]); in FlashPoint_ReleaseHostAdapter()
1420 portBase = pCurrNvRam->niBaseAddr; in FlashPoint_ReleaseHostAdapter()
1424 pScamTbl = (u32 *)&pCurrNvRam->niScamTbl[i]; in FlashPoint_ReleaseHostAdapter()
1430 FPT_WrStack(((struct sccb_card *)pCurrCard)->ioPort, 0, 0); in FlashPoint_ReleaseHostAdapter()
1442 pNvRamInfo->niModel = FPT_RdStack(pNvRamInfo->niBaseAddr, 0); in FPT_RNVRamData()
1443 pNvRamInfo->niSysConf = FPT_RdStack(pNvRamInfo->niBaseAddr, 1); in FPT_RNVRamData()
1444 pNvRamInfo->niScsiConf = FPT_RdStack(pNvRamInfo->niBaseAddr, 2); in FPT_RNVRamData()
1445 pNvRamInfo->niScamConf = FPT_RdStack(pNvRamInfo->niBaseAddr, 3); in FPT_RNVRamData()
1446 pNvRamInfo->niAdapId = FPT_RdStack(pNvRamInfo->niBaseAddr, 4); in FPT_RNVRamData()
1449 pNvRamInfo->niSyncTbl[i] = in FPT_RNVRamData()
1450 FPT_RdStack(pNvRamInfo->niBaseAddr, (unsigned char)(i + 5)); in FPT_RNVRamData()
1452 portBase = pNvRamInfo->niBaseAddr; in FPT_RNVRamData()
1457 pScamTbl = (u32 *)&pNvRamInfo->niScamTbl[i]; in FPT_RNVRamData()
1489 /*---------------------------------------------------------------------
1497 *---------------------------------------------------------------------*/
1506 thisCard = pCurrCard->cardIndex; in FlashPoint_StartCCB()
1507 ioport = pCurrCard->ioPort; in FlashPoint_StartCCB()
1509 if ((p_Sccb->TargID >= MAX_SCSI_TAR) || (p_Sccb->Lun >= MAX_LUN)) { in FlashPoint_StartCCB()
1511 p_Sccb->HostStatus = SCCB_COMPLETE; in FlashPoint_StartCCB()
1512 p_Sccb->SccbStatus = SCCB_ERROR; in FlashPoint_StartCCB()
1513 callback = (CALL_BK_FN) p_Sccb->SccbCallback; in FlashPoint_StartCCB()
1522 if (!pCurrCard->cmdCounter) { in FlashPoint_StartCCB()
1527 if (pCurrCard->globalFlags & F_GREEN_PC) { in FlashPoint_StartCCB()
1533 pCurrCard->cmdCounter++; in FlashPoint_StartCCB()
1540 if (p_Sccb->OperationCode == RESET_COMMAND) { in FlashPoint_StartCCB()
1542 pCurrCard->currentSCCB; in FlashPoint_StartCCB()
1543 pCurrCard->currentSCCB = p_Sccb; in FlashPoint_StartCCB()
1545 pCurrCard->currentSCCB = in FlashPoint_StartCCB()
1554 if (p_Sccb->OperationCode == RESET_COMMAND) { in FlashPoint_StartCCB()
1556 pCurrCard->currentSCCB; in FlashPoint_StartCCB()
1557 pCurrCard->currentSCCB = p_Sccb; in FlashPoint_StartCCB()
1559 pCurrCard->currentSCCB = in FlashPoint_StartCCB()
1570 if ((pCurrCard->globalFlags & F_CONLUN_IO) && in FlashPoint_StartCCB()
1571 ((FPT_sccbMgrTbl[thisCard][p_Sccb->TargID]. in FlashPoint_StartCCB()
1573 lun = p_Sccb->Lun; in FlashPoint_StartCCB()
1576 if ((pCurrCard->currentSCCB == NULL) && in FlashPoint_StartCCB()
1577 (FPT_sccbMgrTbl[thisCard][p_Sccb->TargID].TarSelQ_Cnt == 0) in FlashPoint_StartCCB()
1578 && (FPT_sccbMgrTbl[thisCard][p_Sccb->TargID].TarLUNBusy[lun] in FlashPoint_StartCCB()
1581 pCurrCard->currentSCCB = p_Sccb; in FlashPoint_StartCCB()
1582 FPT_ssel(p_Sccb->SccbIOPort, thisCard); in FlashPoint_StartCCB()
1587 if (p_Sccb->OperationCode == RESET_COMMAND) { in FlashPoint_StartCCB()
1588 pSaveSccb = pCurrCard->currentSCCB; in FlashPoint_StartCCB()
1589 pCurrCard->currentSCCB = p_Sccb; in FlashPoint_StartCCB()
1592 pCurrCard->currentSCCB = pSaveSccb; in FlashPoint_StartCCB()
1603 /*---------------------------------------------------------------------
1611 *---------------------------------------------------------------------*/
1622 ioport = ((struct sccb_card *)pCurrCard)->ioPort; in FlashPoint_AbortCCB()
1624 thisCard = ((struct sccb_card *)pCurrCard)->cardIndex; in FlashPoint_AbortCCB()
1630 ((struct sccb_card *)pCurrCard)->cmdCounter--; in FlashPoint_AbortCCB()
1632 if (!((struct sccb_card *)pCurrCard)->cmdCounter) in FlashPoint_AbortCCB()
1639 p_Sccb->SccbStatus = SCCB_ABORT; in FlashPoint_AbortCCB()
1640 callback = p_Sccb->SccbCallback; in FlashPoint_AbortCCB()
1647 if (((struct sccb_card *)pCurrCard)->currentSCCB == in FlashPoint_AbortCCB()
1649 p_Sccb->SccbStatus = SCCB_ABORT; in FlashPoint_AbortCCB()
1656 TID = p_Sccb->TargID; in FlashPoint_AbortCCB()
1658 if (p_Sccb->Sccb_tag) { in FlashPoint_AbortCCB()
1660 if (((struct sccb_card *)pCurrCard)-> in FlashPoint_AbortCCB()
1661 discQ_Tbl[p_Sccb->Sccb_tag] == in FlashPoint_AbortCCB()
1663 p_Sccb->SccbStatus = SCCB_ABORT; in FlashPoint_AbortCCB()
1664 p_Sccb->Sccb_scsistat = in FlashPoint_AbortCCB()
1666 p_Sccb->Sccb_scsimsg = in FlashPoint_AbortCCB()
1670 pCurrCard)->currentSCCB == in FlashPoint_AbortCCB()
1673 pCurrCard)-> in FlashPoint_AbortCCB()
1680 *)pCurrCard)-> in FlashPoint_AbortCCB()
1683 pCurrCard)-> in FlashPoint_AbortCCB()
1687 pCurrCard)-> in FlashPoint_AbortCCB()
1695 &FPT_sccbMgrTbl[thisCard][p_Sccb-> in FlashPoint_AbortCCB()
1699 discQ_Tbl[currTar_Info-> in FlashPoint_AbortCCB()
1700 LunDiscQ_Idx[p_Sccb->Lun]] in FlashPoint_AbortCCB()
1702 p_Sccb->SccbStatus = SCCB_ABORT; in FlashPoint_AbortCCB()
1709 return -1; in FlashPoint_AbortCCB()
1712 /*---------------------------------------------------------------------
1719 *---------------------------------------------------------------------*/
1724 ioport = ((struct sccb_card *)pCurrCard)->ioPort; in FlashPoint_InterruptPending()
1735 /*---------------------------------------------------------------------
1743 *---------------------------------------------------------------------*/
1753 thisCard = pCurrCard->cardIndex; in FlashPoint_HandleInterrupt()
1754 ioport = pCurrCard->ioPort; in FlashPoint_HandleInterrupt()
1769 currSCCB = pCurrCard->currentSCCB; in FlashPoint_HandleInterrupt()
1799 if (pCurrCard->globalFlags & F_HOST_XFER_ACT) in FlashPoint_HandleInterrupt()
1815 if (pCurrCard->globalFlags & F_HOST_XFER_ACT) in FlashPoint_HandleInterrupt()
1822 currSCCB->Sccb_XferState |= F_NO_DATA_YET; in FlashPoint_HandleInterrupt()
1824 currSCCB->Sccb_savedATC = currSCCB->Sccb_ATC; in FlashPoint_HandleInterrupt()
1827 currSCCB->Sccb_scsistat = DISCONNECT_ST; in FlashPoint_HandleInterrupt()
1858 pCurrCard->globalFlags |= F_NEW_SCCB_CMD; in FlashPoint_HandleInterrupt()
1868 if (pCurrCard->globalFlags & F_HOST_XFER_ACT) in FlashPoint_HandleInterrupt()
1874 currSCCB->Sccb_XferState |= in FlashPoint_HandleInterrupt()
1876 currSCCB->Sccb_savedATC = in FlashPoint_HandleInterrupt()
1877 currSCCB->Sccb_ATC; in FlashPoint_HandleInterrupt()
1882 currSCCB->Sccb_scsistat = DISCONNECT_ST; in FlashPoint_HandleInterrupt()
1943 if (pCurrCard->globalFlags & F_HOST_XFER_ACT) { in FlashPoint_HandleInterrupt()
1955 pCurrCard->globalFlags |= F_NEW_SCCB_CMD; in FlashPoint_HandleInterrupt()
1958 if (((struct sccb_card *)pCurrCard)-> in FlashPoint_HandleInterrupt()
1961 pCurrCard->globalFlags &= ~F_NEW_SCCB_CMD; in FlashPoint_HandleInterrupt()
1963 if (pCurrCard->currentSCCB == NULL) in FlashPoint_HandleInterrupt()
1966 if (pCurrCard->currentSCCB != NULL) { in FlashPoint_HandleInterrupt()
1967 pCurrCard->globalFlags &= ~F_NEW_SCCB_CMD; in FlashPoint_HandleInterrupt()
1982 /*---------------------------------------------------------------------
1991 *---------------------------------------------------------------------*/
2003 if (pCurrCard->globalFlags & F_HOST_XFER_ACT) { in FPT_SccbMgr_bad_isr()
2006 pCurrCard->currentSCCB); in FPT_SccbMgr_bad_isr()
2019 if (pCurrCard->currentSCCB != NULL) { in FPT_SccbMgr_bad_isr()
2021 if (!pCurrCard->currentSCCB->HostStatus) in FPT_SccbMgr_bad_isr()
2022 pCurrCard->currentSCCB->HostStatus = in FPT_SccbMgr_bad_isr()
2045 if (pCurrCard->currentSCCB != NULL) { in FPT_SccbMgr_bad_isr()
2047 if (pCurrCard->globalFlags & F_HOST_XFER_ACT) in FPT_SccbMgr_bad_isr()
2050 pCurrCard->currentSCCB); in FPT_SccbMgr_bad_isr()
2060 pCurrNvRam = pCurrCard->pNvRamInfo; in FPT_SccbMgr_bad_isr()
2062 ScamFlg = pCurrNvRam->niScamConf; in FPT_SccbMgr_bad_isr()
2071 FPT_scini(p_card, pCurrCard->ourId, 0); in FPT_SccbMgr_bad_isr()
2080 if (pCurrCard->currentSCCB != NULL) in FPT_SccbMgr_bad_isr()
2092 pCurrCard->currentSCCB->HostStatus = SCCB_SELECTION_TIMEOUT; in FPT_SccbMgr_bad_isr()
2095 &FPT_sccbMgrTbl[p_card][pCurrCard->currentSCCB->TargID]; in FPT_SccbMgr_bad_isr()
2096 if ((pCurrCard->globalFlags & F_CONLUN_IO) in FPT_SccbMgr_bad_isr()
2097 && ((currTar_Info->TarStatus & TAR_TAG_Q_MASK) != in FPT_SccbMgr_bad_isr()
2099 currTar_Info->TarLUNBusy[pCurrCard->currentSCCB->Lun] = in FPT_SccbMgr_bad_isr()
2102 currTar_Info->TarLUNBusy[0] = 0; in FPT_SccbMgr_bad_isr()
2104 if (currTar_Info->TarEEValue & EE_SYNC_MASK) { in FPT_SccbMgr_bad_isr()
2105 currTar_Info->TarSyncCtrl = 0; in FPT_SccbMgr_bad_isr()
2106 currTar_Info->TarStatus &= ~TAR_SYNC_MASK; in FPT_SccbMgr_bad_isr()
2109 if (currTar_Info->TarEEValue & EE_WIDE_SCSI) { in FPT_SccbMgr_bad_isr()
2110 currTar_Info->TarStatus &= ~TAR_WIDE_MASK; in FPT_SccbMgr_bad_isr()
2113 FPT_sssyncv(p_port, pCurrCard->currentSCCB->TargID, NARROW_SCSI, in FPT_SccbMgr_bad_isr()
2116 FPT_queueCmdComplete(pCurrCard, pCurrCard->currentSCCB, p_card); in FPT_SccbMgr_bad_isr()
2134 /*---------------------------------------------------------------------
2140 *---------------------------------------------------------------------*/
2157 /*---------------------------------------------------------------------
2163 *---------------------------------------------------------------------*/
2180 pCurrCard->scanIndex = 0x00; in FPT_SccbMgrTableInitCard()
2181 pCurrCard->currentSCCB = NULL; in FPT_SccbMgrTableInitCard()
2182 pCurrCard->globalFlags = 0x00; in FPT_SccbMgrTableInitCard()
2183 pCurrCard->cmdCounter = 0x00; in FPT_SccbMgrTableInitCard()
2184 pCurrCard->tagQ_Lst = 0x01; in FPT_SccbMgrTableInitCard()
2185 pCurrCard->discQCount = 0; in FPT_SccbMgrTableInitCard()
2189 /*---------------------------------------------------------------------
2195 *---------------------------------------------------------------------*/
2206 currTar_Info->TarSelQ_Cnt = 0; in FPT_SccbMgrTableInitTarget()
2207 currTar_Info->TarSyncCtrl = 0; in FPT_SccbMgrTableInitTarget()
2209 currTar_Info->TarSelQ_Head = NULL; in FPT_SccbMgrTableInitTarget()
2210 currTar_Info->TarSelQ_Tail = NULL; in FPT_SccbMgrTableInitTarget()
2211 currTar_Info->TarTagQ_Cnt = 0; in FPT_SccbMgrTableInitTarget()
2212 currTar_Info->TarLUN_CA = 0; in FPT_SccbMgrTableInitTarget()
2215 currTar_Info->TarLUNBusy[lun] = 0; in FPT_SccbMgrTableInitTarget()
2216 currTar_Info->LunDiscQ_Idx[lun] = 0; in FPT_SccbMgrTableInitTarget()
2221 if (FPT_BL_Card[p_card].discQ_Tbl[qtag]->TargID == in FPT_SccbMgrTableInitTarget()
2224 FPT_BL_Card[p_card].discQCount--; in FPT_SccbMgrTableInitTarget()
2230 /*---------------------------------------------------------------------
2237 *---------------------------------------------------------------------*/
2265 pCurrSCCB->Sccb_scsimsg = SMPARITY; in FPT_sfm()
2299 /*---------------------------------------------------------------------
2305 *---------------------------------------------------------------------*/
2319 currSCCB = CurrCard->currentSCCB; in FPT_ssel()
2320 target = currSCCB->TargID; in FPT_ssel()
2322 lastTag = CurrCard->tagQ_Lst; in FPT_ssel()
2326 if ((currTar_Info->TarStatus & TAR_TAG_Q_MASK) == TAG_Q_REJECT) in FPT_ssel()
2327 currSCCB->ControlByte &= ~F_USE_CMD_Q; in FPT_ssel()
2329 if (((CurrCard->globalFlags & F_CONLUN_IO) && in FPT_ssel()
2330 ((currTar_Info->TarStatus & TAR_TAG_Q_MASK) != TAG_Q_TRYING))) in FPT_ssel()
2332 lun = currSCCB->Lun; in FPT_ssel()
2336 if (CurrCard->globalFlags & F_TAG_STARTED) { in FPT_ssel()
2337 if (!(currSCCB->ControlByte & F_USE_CMD_Q)) { in FPT_ssel()
2338 if ((currTar_Info->TarLUN_CA == 0) in FPT_ssel()
2339 && ((currTar_Info->TarStatus & TAR_TAG_Q_MASK) in FPT_ssel()
2342 if (currTar_Info->TarTagQ_Cnt != 0) { in FPT_ssel()
2343 currTar_Info->TarLUNBusy[lun] = 1; in FPT_ssel()
2350 currTar_Info->TarLUNBusy[lun] = 1; in FPT_ssel()
2354 /*End non-tagged */ in FPT_ssel()
2356 currTar_Info->TarLUNBusy[lun] = 1; in FPT_ssel()
2362 if (currTar_Info->TarLUN_CA == 1) { in FPT_ssel()
2368 currTar_Info->TarLUNBusy[lun] = 1; in FPT_ssel()
2375 currTar_Info->TarLUNBusy[lun] = 1; in FPT_ssel()
2378 if ((((CurrCard->globalFlags & F_CONLUN_IO) && in FPT_ssel()
2379 ((currTar_Info->TarStatus & TAR_TAG_Q_MASK) != TAG_Q_TRYING)) in FPT_ssel()
2380 || (!(currSCCB->ControlByte & F_USE_CMD_Q)))) { in FPT_ssel()
2381 if (CurrCard->discQCount >= QUEUE_DEPTH) { in FPT_ssel()
2382 currTar_Info->TarLUNBusy[lun] = 1; in FPT_ssel()
2390 if (CurrCard->discQ_Tbl[lastTag] == NULL) { in FPT_ssel()
2391 CurrCard->tagQ_Lst = lastTag; in FPT_ssel()
2392 currTar_Info->LunDiscQ_Idx[lun] = lastTag; in FPT_ssel()
2393 CurrCard->discQ_Tbl[lastTag] = currSCCB; in FPT_ssel()
2394 CurrCard->discQCount++; in FPT_ssel()
2399 currTar_Info->TarLUNBusy[lun] = 1; in FPT_ssel()
2411 if (currSCCB->OperationCode == RESET_COMMAND) { in FPT_ssel()
2413 (currSCCB-> in FPT_ssel()
2418 currSCCB->Sccb_scsimsg = SMDEV_RESET; in FPT_ssel()
2422 currSCCB->Sccb_scsistat = SELECT_BDR_ST; in FPT_ssel()
2424 if (currTar_Info->TarEEValue & EE_SYNC_MASK) { in FPT_ssel()
2425 currTar_Info->TarSyncCtrl = 0; in FPT_ssel()
2426 currTar_Info->TarStatus &= ~TAR_SYNC_MASK; in FPT_ssel()
2429 if (currTar_Info->TarEEValue & EE_WIDE_SCSI) { in FPT_ssel()
2430 currTar_Info->TarStatus &= ~TAR_WIDE_MASK; in FPT_ssel()
2438 else if (currSCCB->Sccb_scsistat == ABORT_ST) { in FPT_ssel()
2440 (currSCCB-> in FPT_ssel()
2447 char)(currSCCB-> in FPT_ssel()
2453 (MPM_OP + AMSG_OUT + currSCCB->Sccb_tag)); in FPT_ssel()
2461 else if (!(currTar_Info->TarStatus & WIDE_NEGOCIATED)) { in FPT_ssel()
2463 currSCCB->Sccb_scsistat = SELECT_WN_ST; in FPT_ssel()
2466 else if (!((currTar_Info->TarStatus & TAR_SYNC_MASK) in FPT_ssel()
2469 currSCCB->Sccb_scsistat = SELECT_SN_ST; in FPT_ssel()
2474 if (currSCCB->ControlByte & F_USE_CMD_Q) { in FPT_ssel()
2476 CurrCard->globalFlags |= F_TAG_STARTED; in FPT_ssel()
2478 if ((currTar_Info->TarStatus & TAR_TAG_Q_MASK) in FPT_ssel()
2480 currSCCB->ControlByte &= ~F_USE_CMD_Q; in FPT_ssel()
2483 Non-Tag-CMD handling */ in FPT_ssel()
2489 currSCCB->Sccb_idmsg)); in FPT_ssel()
2496 currSCCB->Sccb_scsistat = SELECT_ST; in FPT_ssel()
2498 currTar_Info->TarLUNBusy[lun] = 1; in FPT_ssel()
2504 currSCCB->Sccb_idmsg)); in FPT_ssel()
2508 (((unsigned char)(currSCCB-> in FPT_ssel()
2516 if (CurrCard->discQ_Tbl[lastTag] == in FPT_ssel()
2522 CurrCard->tagQ_Lst = lastTag; in FPT_ssel()
2523 currSCCB->Sccb_tag = lastTag; in FPT_ssel()
2524 CurrCard->discQ_Tbl[lastTag] = in FPT_ssel()
2526 CurrCard->discQCount++; in FPT_ssel()
2532 currTar_Info->TarLUNBusy[lun] = 1; in FPT_ssel()
2538 currSCCB->Sccb_scsistat = SELECT_Q_ST; in FPT_ssel()
2551 (MPM_OP + AMSG_OUT + currSCCB->Sccb_idmsg)); in FPT_ssel()
2553 currSCCB->Sccb_scsistat = SELECT_ST; in FPT_ssel()
2559 theCCB = (unsigned char *)&currSCCB->Cdb[0]; in FPT_ssel()
2563 for (i = 0; i < currSCCB->CdbLength; i++) { in FPT_ssel()
2569 if (currSCCB->CdbLength != TWELVE_BYTE_CMD) in FPT_ssel()
2581 if (!(currSCCB->Sccb_MGRFlags & F_DEV_SELECTED)) { in FPT_ssel()
2598 /*---------------------------------------------------------------------
2604 *---------------------------------------------------------------------*/
2615 if (pCurrCard->currentSCCB != NULL) { in FPT_sres()
2617 &FPT_sccbMgrTbl[p_card][pCurrCard->currentSCCB->TargID]; in FPT_sres()
2622 currSCCB = pCurrCard->currentSCCB; in FPT_sres()
2623 if (currSCCB->Sccb_scsistat == SELECT_WN_ST) { in FPT_sres()
2624 currTar_Info->TarStatus &= ~TAR_WIDE_MASK; in FPT_sres()
2625 currSCCB->Sccb_scsistat = BUS_FREE_ST; in FPT_sres()
2627 if (currSCCB->Sccb_scsistat == SELECT_SN_ST) { in FPT_sres()
2628 currTar_Info->TarStatus &= ~TAR_SYNC_MASK; in FPT_sres()
2629 currSCCB->Sccb_scsistat = BUS_FREE_ST; in FPT_sres()
2631 if (((pCurrCard->globalFlags & F_CONLUN_IO) && in FPT_sres()
2632 ((currTar_Info->TarStatus & TAR_TAG_Q_MASK) != in FPT_sres()
2634 currTar_Info->TarLUNBusy[currSCCB->Lun] = 0; in FPT_sres()
2635 if (currSCCB->Sccb_scsistat != ABORT_ST) { in FPT_sres()
2636 pCurrCard->discQCount--; in FPT_sres()
2637 pCurrCard->discQ_Tbl[currTar_Info-> in FPT_sres()
2638 LunDiscQ_Idx[currSCCB-> in FPT_sres()
2643 currTar_Info->TarLUNBusy[0] = 0; in FPT_sres()
2644 if (currSCCB->Sccb_tag) { in FPT_sres()
2645 if (currSCCB->Sccb_scsistat != ABORT_ST) { in FPT_sres()
2646 pCurrCard->discQCount--; in FPT_sres()
2647 pCurrCard->discQ_Tbl[currSCCB-> in FPT_sres()
2651 if (currSCCB->Sccb_scsistat != ABORT_ST) { in FPT_sres()
2652 pCurrCard->discQCount--; in FPT_sres()
2653 pCurrCard->discQ_Tbl[currTar_Info-> in FPT_sres()
2685 message = FPT_sfm(port, pCurrCard->currentSCCB); in FPT_sres()
2691 if ((currTar_Info-> in FPT_sres()
2694 if (currTar_Info->TarTagQ_Cnt != in FPT_sres()
2698 (currTar_Info-> in FPT_sres()
2705 pCurrCard-> in FPT_sres()
2721 pCurrCard-> in FPT_sres()
2795 if (((pCurrCard->globalFlags & F_CONLUN_IO) && in FPT_sres()
2796 ((currTar_Info->TarStatus & TAR_TAG_Q_MASK) != TAG_Q_TRYING))) { in FPT_sres()
2797 currTar_Info->TarLUNBusy[lun] = 1; in FPT_sres()
2798 pCurrCard->currentSCCB = in FPT_sres()
2799 pCurrCard->discQ_Tbl[currTar_Info->LunDiscQ_Idx[lun]]; in FPT_sres()
2800 if (pCurrCard->currentSCCB != NULL) { in FPT_sres()
2806 currTar_Info->TarLUNBusy[0] = 1; in FPT_sres()
2809 if (pCurrCard->discQ_Tbl[tag] != NULL) { in FPT_sres()
2810 pCurrCard->currentSCCB = in FPT_sres()
2811 pCurrCard->discQ_Tbl[tag]; in FPT_sres()
2812 currTar_Info->TarTagQ_Cnt--; in FPT_sres()
2818 pCurrCard->currentSCCB = in FPT_sres()
2819 pCurrCard->discQ_Tbl[currTar_Info->LunDiscQ_Idx[0]]; in FPT_sres()
2820 if (pCurrCard->currentSCCB != NULL) { in FPT_sres()
2828 if (pCurrCard->currentSCCB != NULL) { in FPT_sres()
2829 if (pCurrCard->currentSCCB->Sccb_scsistat == ABORT_ST) { in FPT_sres()
2830 /* During Abort Tag command, the target could have got re-selected in FPT_sres()
2833 FPT_queueFindSccb(pCurrCard->currentSCCB, p_card); in FPT_sres()
2881 /*---------------------------------------------------------------------
2888 *---------------------------------------------------------------------*/
2896 currSCCB = CurrCard->currentSCCB; in FPT_sdecm()
2898 currTar_Info = &FPT_sccbMgrTbl[p_card][currSCCB->TargID]; in FPT_sdecm()
2901 if (!(currSCCB->Sccb_XferState & F_NO_DATA_YET)) { in FPT_sdecm()
2902 currSCCB->Sccb_ATC = currSCCB->Sccb_savedATC; in FPT_sdecm()
2914 if (currSCCB->Sccb_scsistat == SELECT_Q_ST) { in FPT_sdecm()
2915 currTar_Info->TarStatus &= in FPT_sdecm()
2917 currTar_Info->TarStatus |= (unsigned char)TAG_Q_REJECT; in FPT_sdecm()
2934 if ((currSCCB->Sccb_scsistat == SELECT_SN_ST) || in FPT_sdecm()
2935 (currSCCB->Sccb_scsistat == SELECT_WN_ST) || in FPT_sdecm()
2936 ((currTar_Info->TarStatus & TAR_SYNC_MASK) == SYNC_TRYING) in FPT_sdecm()
2937 || ((currTar_Info->TarStatus & TAR_TAG_Q_MASK) == in FPT_sdecm()
2949 if (currSCCB->Lun == 0x00) { in FPT_sdecm()
2950 if (currSCCB->Sccb_scsistat == SELECT_SN_ST) { in FPT_sdecm()
2952 currTar_Info->TarStatus |= in FPT_sdecm()
2955 currTar_Info->TarEEValue &= in FPT_sdecm()
2959 else if (currSCCB->Sccb_scsistat == in FPT_sdecm()
2962 currTar_Info->TarStatus = in FPT_sdecm()
2963 (currTar_Info-> in FPT_sdecm()
2967 currTar_Info->TarEEValue &= in FPT_sdecm()
2972 else if ((currTar_Info-> in FPT_sdecm()
2975 currTar_Info->TarStatus = in FPT_sdecm()
2976 (currTar_Info-> in FPT_sdecm()
2980 currSCCB->ControlByte &= ~F_USE_CMD_Q; in FPT_sdecm()
2981 CurrCard->discQCount--; in FPT_sdecm()
2982 CurrCard->discQ_Tbl[currSCCB-> in FPT_sdecm()
2984 currSCCB->Sccb_tag = 0x00; in FPT_sdecm()
2991 if (currSCCB->Lun == 0x00) { in FPT_sdecm()
2994 CurrCard->globalFlags |= F_NEW_SCCB_CMD; in FPT_sdecm()
3000 if ((CurrCard->globalFlags & F_CONLUN_IO) && in FPT_sdecm()
3001 ((currTar_Info-> in FPT_sdecm()
3004 currTar_Info->TarLUNBusy[currSCCB-> in FPT_sdecm()
3007 currTar_Info->TarLUNBusy[0] = 1; in FPT_sdecm()
3009 currSCCB->ControlByte &= in FPT_sdecm()
3045 if (currSCCB->Sccb_scsimsg != SMPARITY) in FPT_sdecm()
3053 currSCCB->HostStatus = SCCB_PHASE_SEQUENCE_FAIL; in FPT_sdecm()
3054 currSCCB->Sccb_scsimsg = SMREJECT; in FPT_sdecm()
3062 /*---------------------------------------------------------------------
3068 *---------------------------------------------------------------------*/
3088 pCurrSCCB->Sccb_scsimsg = SMREJECT; in FPT_shandem()
3099 pCurrSCCB->Sccb_scsimsg = SMREJECT; in FPT_shandem()
3108 pCurrSCCB->Sccb_scsimsg = SMREJECT; in FPT_shandem()
3115 if (pCurrSCCB->Sccb_scsimsg != SMPARITY) in FPT_shandem()
3121 if (pCurrSCCB->Sccb_scsimsg == SMPARITY) in FPT_shandem()
3127 /*---------------------------------------------------------------------
3134 *---------------------------------------------------------------------*/
3143 currTar_Info = &FPT_sccbMgrTbl[p_card][currSCCB->TargID]; in FPT_sisyncn()
3145 if (!((currTar_Info->TarStatus & TAR_SYNC_MASK) == SYNC_TRYING)) { in FPT_sisyncn()
3149 (currSCCB-> in FPT_sisyncn()
3160 if ((currTar_Info->TarEEValue & EE_SYNC_MASK) == EE_SYNC_20MB) in FPT_sisyncn()
3165 else if ((currTar_Info->TarEEValue & EE_SYNC_MASK) == in FPT_sisyncn()
3171 else if ((currTar_Info->TarEEValue & EE_SYNC_MASK) == in FPT_sisyncn()
3189 currTar_Info->TarStatus = in FPT_sisyncn()
3190 ((currTar_Info-> in FPT_sisyncn()
3203 currTar_Info->TarStatus |= (unsigned char)SYNC_SUPPORTED; in FPT_sisyncn()
3204 currTar_Info->TarEEValue &= ~EE_SYNC_MASK; in FPT_sisyncn()
3209 /*---------------------------------------------------------------------
3216 *---------------------------------------------------------------------*/
3224 currTar_Info = &FPT_sccbMgrTbl[p_card][currSCCB->TargID]; in FPT_stsyncn()
3228 if ((sync_msg == 0x00) && (currSCCB->Sccb_scsimsg == SMPARITY)) { in FPT_stsyncn()
3238 if ((offset == 0x00) && (currSCCB->Sccb_scsimsg == SMPARITY)) { in FPT_stsyncn()
3244 if ((currTar_Info->TarEEValue & EE_SYNC_MASK) == EE_SYNC_20MB) in FPT_stsyncn()
3248 else if ((currTar_Info->TarEEValue & EE_SYNC_MASK) == EE_SYNC_10MB) in FPT_stsyncn()
3252 else if ((currTar_Info->TarEEValue & EE_SYNC_MASK) == EE_SYNC_5MB) in FPT_stsyncn()
3305 if (currTar_Info->TarStatus & WIDE_ENABLED) in FPT_stsyncn()
3313 FPT_sssyncv(port, currSCCB->TargID, sync_reg, currTar_Info); in FPT_stsyncn()
3315 if (currSCCB->Sccb_scsistat == SELECT_SN_ST) { in FPT_stsyncn()
3319 currTar_Info->TarStatus = ((currTar_Info->TarStatus & in FPT_stsyncn()
3333 currTar_Info->TarStatus = ((currTar_Info->TarStatus & in FPT_stsyncn()
3339 /*---------------------------------------------------------------------
3345 *---------------------------------------------------------------------*/
3368 /*---------------------------------------------------------------------
3375 *---------------------------------------------------------------------*/
3383 currTar_Info = &FPT_sccbMgrTbl[p_card][currSCCB->TargID]; in FPT_siwidn()
3385 if (!((currTar_Info->TarStatus & TAR_WIDE_MASK) == WIDE_NEGOCIATED)) { in FPT_siwidn()
3389 (currSCCB-> in FPT_siwidn()
3406 currTar_Info->TarStatus = ((currTar_Info->TarStatus & in FPT_siwidn()
3415 currTar_Info->TarStatus = ((currTar_Info->TarStatus & in FPT_siwidn()
3419 currTar_Info->TarEEValue &= ~EE_WIDE_SCSI; in FPT_siwidn()
3424 /*---------------------------------------------------------------------
3431 *---------------------------------------------------------------------*/
3439 currTar_Info = &FPT_sccbMgrTbl[p_card][currSCCB->TargID]; in FPT_stwidn()
3443 if ((width == 0x00) && (currSCCB->Sccb_scsimsg == SMPARITY)) { in FPT_stwidn()
3449 if (!(currTar_Info->TarEEValue & EE_WIDE_SCSI)) in FPT_stwidn()
3453 currTar_Info->TarStatus |= WIDE_ENABLED; in FPT_stwidn()
3457 currTar_Info->TarStatus &= ~WIDE_ENABLED; in FPT_stwidn()
3460 FPT_sssyncv(port, currSCCB->TargID, width, currTar_Info); in FPT_stwidn()
3462 if (currSCCB->Sccb_scsistat == SELECT_WN_ST) { in FPT_stwidn()
3464 currTar_Info->TarStatus |= WIDE_NEGOCIATED; in FPT_stwidn()
3467 ((currTar_Info->TarStatus & TAR_SYNC_MASK) == in FPT_stwidn()
3472 currSCCB->Sccb_scsistat = SELECT_SN_ST; in FPT_stwidn()
3485 if (currTar_Info->TarEEValue & EE_WIDE_SCSI) in FPT_stwidn()
3492 currTar_Info->TarStatus |= (WIDE_NEGOCIATED | WIDE_ENABLED); in FPT_stwidn()
3496 /*---------------------------------------------------------------------
3502 *---------------------------------------------------------------------*/
3523 /*---------------------------------------------------------------------
3530 *---------------------------------------------------------------------*/
3593 currTar_Info->TarSyncCtrl = p_sync_value; in FPT_sssyncv()
3596 /*---------------------------------------------------------------------
3602 *---------------------------------------------------------------------*/
3637 if (currTar_Info->TarEEValue & EE_SYNC_MASK) { in FPT_sresb()
3638 currTar_Info->TarSyncCtrl = 0; in FPT_sresb()
3639 currTar_Info->TarStatus &= ~TAR_SYNC_MASK; in FPT_sresb()
3642 if (currTar_Info->TarEEValue & EE_WIDE_SCSI) { in FPT_sresb()
3643 currTar_Info->TarStatus &= ~TAR_WIDE_MASK; in FPT_sresb()
3667 /*---------------------------------------------------------------------
3673 *---------------------------------------------------------------------*/
3679 currSCCB = pCurrCard->currentSCCB; in FPT_ssenss()
3681 currSCCB->Save_CdbLen = currSCCB->CdbLength; in FPT_ssenss()
3685 currSCCB->Save_Cdb[i] = currSCCB->Cdb[i]; in FPT_ssenss()
3688 currSCCB->CdbLength = SIX_BYTE_CMD; in FPT_ssenss()
3689 currSCCB->Cdb[0] = SCSI_REQUEST_SENSE; in FPT_ssenss()
3690 currSCCB->Cdb[1] = currSCCB->Cdb[1] & (unsigned char)0xE0; /*Keep LUN. */ in FPT_ssenss()
3691 currSCCB->Cdb[2] = 0x00; in FPT_ssenss()
3692 currSCCB->Cdb[3] = 0x00; in FPT_ssenss()
3693 currSCCB->Cdb[4] = currSCCB->RequestSenseLength; in FPT_ssenss()
3694 currSCCB->Cdb[5] = 0x00; in FPT_ssenss()
3696 currSCCB->Sccb_XferCnt = (u32)currSCCB->RequestSenseLength; in FPT_ssenss()
3698 currSCCB->Sccb_ATC = 0x00; in FPT_ssenss()
3700 currSCCB->Sccb_XferState |= F_AUTO_SENSE; in FPT_ssenss()
3702 currSCCB->Sccb_XferState &= ~F_SG_XFER; in FPT_ssenss()
3704 currSCCB->Sccb_idmsg = currSCCB->Sccb_idmsg & ~(unsigned char)DISC_PRIV; in FPT_ssenss()
3706 currSCCB->ControlByte = 0x00; in FPT_ssenss()
3708 currSCCB->Sccb_MGRFlags &= F_STATUSLOADED; in FPT_ssenss()
3711 /*---------------------------------------------------------------------
3718 *---------------------------------------------------------------------*/
3793 /*---------------------------------------------------------------------
3800 *---------------------------------------------------------------------*/
3811 if ((currSCCB->Sccb_scsistat != DATA_OUT_ST) && in FPT_schkdd()
3812 (currSCCB->Sccb_scsistat != DATA_IN_ST)) { in FPT_schkdd()
3816 if (currSCCB->Sccb_XferState & F_ODD_BALL_CNT) { in FPT_schkdd()
3818 currSCCB->Sccb_ATC += (currSCCB->Sccb_XferCnt - 1); in FPT_schkdd()
3820 currSCCB->Sccb_XferCnt = 1; in FPT_schkdd()
3822 currSCCB->Sccb_XferState &= ~F_ODD_BALL_CNT; in FPT_schkdd()
3829 currSCCB->Sccb_ATC += currSCCB->Sccb_XferCnt; in FPT_schkdd()
3831 currSCCB->Sccb_XferCnt = 0; in FPT_schkdd()
3835 (currSCCB->HostStatus == SCCB_COMPLETE)) { in FPT_schkdd()
3837 currSCCB->HostStatus = SCCB_PARITY_ERR; in FPT_schkdd()
3871 if (!(currSCCB->Sccb_XferState & F_ALL_XFERRED)) { in FPT_schkdd()
3872 if (currSCCB->Sccb_XferState & F_HOST_XFER_DIR) { in FPT_schkdd()
3895 /*---------------------------------------------------------------------
3901 *---------------------------------------------------------------------*/
3907 if ((p_sccb->TargID >= MAX_SCSI_TAR) || (p_sccb->Lun >= MAX_LUN)) { in FPT_sinits()
3910 currTar_Info = &FPT_sccbMgrTbl[p_card][p_sccb->TargID]; in FPT_sinits()
3912 p_sccb->Sccb_XferState = 0x00; in FPT_sinits()
3913 p_sccb->Sccb_XferCnt = p_sccb->DataLength; in FPT_sinits()
3915 if ((p_sccb->OperationCode == SCATTER_GATHER_COMMAND) || in FPT_sinits()
3916 (p_sccb->OperationCode == RESIDUAL_SG_COMMAND)) { in FPT_sinits()
3918 p_sccb->Sccb_SGoffset = 0; in FPT_sinits()
3919 p_sccb->Sccb_XferState = F_SG_XFER; in FPT_sinits()
3920 p_sccb->Sccb_XferCnt = 0x00; in FPT_sinits()
3923 if (p_sccb->DataLength == 0x00) in FPT_sinits()
3925 p_sccb->Sccb_XferState |= F_ALL_XFERRED; in FPT_sinits()
3927 if (p_sccb->ControlByte & F_USE_CMD_Q) { in FPT_sinits()
3928 if ((currTar_Info->TarStatus & TAR_TAG_Q_MASK) == TAG_Q_REJECT) in FPT_sinits()
3929 p_sccb->ControlByte &= ~F_USE_CMD_Q; in FPT_sinits()
3932 currTar_Info->TarStatus |= TAG_Q_TRYING; in FPT_sinits()
3941 (currTar_Info->TarStatus & TAR_ALLOW_DISC)) || in FPT_sinits()
3942 (currTar_Info->TarStatus & TAG_Q_TRYING)) { in FPT_sinits()
3944 if ((currTar_Info->TarStatus & TAR_ALLOW_DISC) || in FPT_sinits()
3945 (currTar_Info->TarStatus & TAG_Q_TRYING)) { in FPT_sinits()
3946 p_sccb->Sccb_idmsg = in FPT_sinits()
3947 (unsigned char)(SMIDENT | DISC_PRIV) | p_sccb->Lun; in FPT_sinits()
3952 p_sccb->Sccb_idmsg = (unsigned char)SMIDENT | p_sccb->Lun; in FPT_sinits()
3955 p_sccb->HostStatus = 0x00; in FPT_sinits()
3956 p_sccb->TargetStatus = 0x00; in FPT_sinits()
3957 p_sccb->Sccb_tag = 0x00; in FPT_sinits()
3958 p_sccb->Sccb_MGRFlags = 0x00; in FPT_sinits()
3959 p_sccb->Sccb_sgseg = 0x00; in FPT_sinits()
3960 p_sccb->Sccb_ATC = 0x00; in FPT_sinits()
3961 p_sccb->Sccb_savedATC = 0x00; in FPT_sinits()
3963 p_sccb->SccbVirtDataPtr = 0x00; in FPT_sinits()
3964 p_sccb->Sccb_forwardlink = NULL; in FPT_sinits()
3965 p_sccb->Sccb_backlink = NULL; in FPT_sinits()
3967 p_sccb->Sccb_scsistat = BUS_FREE_ST; in FPT_sinits()
3968 p_sccb->SccbStatus = SCCB_IN_PROCESS; in FPT_sinits()
3969 p_sccb->Sccb_scsimsg = SMNO_OP; in FPT_sinits()
3973 /*---------------------------------------------------------------------
3979 *---------------------------------------------------------------------*/
3996 /*---------------------------------------------------------------------
4002 *---------------------------------------------------------------------*/
4014 currSCCB->Sccb_scsistat = DATA_OUT_ST; in FPT_phaseDataOut()
4015 currSCCB->Sccb_XferState &= ~(F_HOST_XFER_DIR | F_NO_DATA_YET); in FPT_phaseDataOut()
4025 if (currSCCB->Sccb_XferCnt == 0) { in FPT_phaseDataOut()
4027 if ((currSCCB->ControlByte & SCCB_DATA_XFER_OUT) && in FPT_phaseDataOut()
4028 (currSCCB->HostStatus == SCCB_COMPLETE)) in FPT_phaseDataOut()
4029 currSCCB->HostStatus = SCCB_DATA_OVER_RUN; in FPT_phaseDataOut()
4037 /*---------------------------------------------------------------------
4043 *---------------------------------------------------------------------*/
4056 currSCCB->Sccb_scsistat = DATA_IN_ST; in FPT_phaseDataIn()
4057 currSCCB->Sccb_XferState |= F_HOST_XFER_DIR; in FPT_phaseDataIn()
4058 currSCCB->Sccb_XferState &= ~F_NO_DATA_YET; in FPT_phaseDataIn()
4068 if (currSCCB->Sccb_XferCnt == 0) { in FPT_phaseDataIn()
4070 if ((currSCCB->ControlByte & SCCB_DATA_XFER_IN) && in FPT_phaseDataIn()
4071 (currSCCB->HostStatus == SCCB_COMPLETE)) in FPT_phaseDataIn()
4072 currSCCB->HostStatus = SCCB_DATA_OVER_RUN; in FPT_phaseDataIn()
4081 /*---------------------------------------------------------------------
4087 *---------------------------------------------------------------------*/
4097 if (currSCCB->OperationCode == RESET_COMMAND) { in FPT_phaseCommand()
4099 currSCCB->HostStatus = SCCB_PHASE_SEQUENCE_FAIL; in FPT_phaseCommand()
4100 currSCCB->CdbLength = SIX_BYTE_CMD; in FPT_phaseCommand()
4109 for (i = 0; i < currSCCB->CdbLength; i++) { in FPT_phaseCommand()
4111 if (currSCCB->OperationCode == RESET_COMMAND) in FPT_phaseCommand()
4117 (MPM_OP + ACOMMAND + currSCCB->Cdb[i])); in FPT_phaseCommand()
4121 if (currSCCB->CdbLength != TWELVE_BYTE_CMD) in FPT_phaseCommand()
4126 currSCCB->Sccb_scsistat = COMMAND_ST; in FPT_phaseCommand()
4132 /*---------------------------------------------------------------------
4138 *---------------------------------------------------------------------*/
4142 /* Start-up the automation to finish off this command and let the in FPT_phaseStatus()
4152 /*---------------------------------------------------------------------
4159 *---------------------------------------------------------------------*/
4171 message = currSCCB->Sccb_scsimsg; in FPT_phaseMsgOut()
4172 scsiID = currSCCB->TargID; in FPT_phaseMsgOut()
4177 currTar_Info->TarSyncCtrl = 0; in FPT_phaseMsgOut()
4197 } else if (currSCCB->Sccb_scsistat == ABORT_ST) { in FPT_phaseMsgOut()
4198 currSCCB->HostStatus = SCCB_COMPLETE; in FPT_phaseMsgOut()
4199 if (FPT_BL_Card[p_card].discQ_Tbl[currSCCB->Sccb_tag] != in FPT_phaseMsgOut()
4201 FPT_BL_Card[p_card].discQ_Tbl[currSCCB-> in FPT_phaseMsgOut()
4203 FPT_sccbMgrTbl[p_card][scsiID].TarTagQ_Cnt--; in FPT_phaseMsgOut()
4208 else if (currSCCB->Sccb_scsistat < COMMAND_ST) { in FPT_phaseMsgOut()
4211 currSCCB->Sccb_MGRFlags |= F_DEV_SELECTED; in FPT_phaseMsgOut()
4253 ((FPT_sccbMgrTbl[p_card][currSCCB->TargID]. in FPT_phaseMsgOut()
4256 FPT_sccbMgrTbl[p_card][currSCCB-> in FPT_phaseMsgOut()
4258 TarLUNBusy[currSCCB->Lun] = 0; in FPT_phaseMsgOut()
4260 FPT_sccbMgrTbl[p_card][currSCCB-> in FPT_phaseMsgOut()
4283 currSCCB->Sccb_scsimsg = SMNO_OP; in FPT_phaseMsgOut()
4292 /*---------------------------------------------------------------------
4298 *---------------------------------------------------------------------*/
4328 if (currSCCB->Sccb_scsimsg != SMPARITY) in FPT_phaseMsgIn()
4337 /*---------------------------------------------------------------------
4345 *---------------------------------------------------------------------*/
4356 currSCCB->HostStatus = SCCB_PHASE_SEQUENCE_FAIL; in FPT_phaseIllegal()
4357 currSCCB->Sccb_scsistat = ABORT_ST; in FPT_phaseIllegal()
4358 currSCCB->Sccb_scsimsg = SMABORT; in FPT_phaseIllegal()
4364 /*---------------------------------------------------------------------
4371 *---------------------------------------------------------------------*/
4380 if (currSCCB->Sccb_scsistat == DATA_IN_ST) { in FPT_phaseChkFifo()
4387 currSCCB->Sccb_ATC += currSCCB->Sccb_XferCnt; in FPT_phaseChkFifo()
4389 currSCCB->Sccb_XferCnt = 0; in FPT_phaseChkFifo()
4392 (currSCCB->HostStatus == SCCB_COMPLETE)) { in FPT_phaseChkFifo()
4393 currSCCB->HostStatus = SCCB_PARITY_ERR; in FPT_phaseChkFifo()
4416 currSCCB->Sccb_ATC += (currSCCB->Sccb_XferCnt - xfercnt); in FPT_phaseChkFifo()
4418 currSCCB->Sccb_XferCnt = xfercnt; in FPT_phaseChkFifo()
4421 (currSCCB->HostStatus == SCCB_COMPLETE)) { in FPT_phaseChkFifo()
4423 currSCCB->HostStatus = SCCB_PARITY_ERR; in FPT_phaseChkFifo()
4436 /*---------------------------------------------------------------------
4443 *---------------------------------------------------------------------*/
4454 if (currSCCB->OperationCode == RESET_COMMAND) { in FPT_phaseBusFree()
4457 ((FPT_sccbMgrTbl[p_card][currSCCB->TargID]. in FPT_phaseBusFree()
4459 FPT_sccbMgrTbl[p_card][currSCCB->TargID]. in FPT_phaseBusFree()
4460 TarLUNBusy[currSCCB->Lun] = 0; in FPT_phaseBusFree()
4462 FPT_sccbMgrTbl[p_card][currSCCB->TargID]. in FPT_phaseBusFree()
4472 else if (currSCCB->Sccb_scsistat == SELECT_SN_ST) { in FPT_phaseBusFree()
4473 FPT_sccbMgrTbl[p_card][currSCCB->TargID].TarStatus |= in FPT_phaseBusFree()
4475 FPT_sccbMgrTbl[p_card][currSCCB->TargID].TarEEValue &= in FPT_phaseBusFree()
4479 else if (currSCCB->Sccb_scsistat == SELECT_WN_ST) { in FPT_phaseBusFree()
4480 FPT_sccbMgrTbl[p_card][currSCCB->TargID].TarStatus = in FPT_phaseBusFree()
4481 (FPT_sccbMgrTbl[p_card][currSCCB->TargID]. in FPT_phaseBusFree()
4484 FPT_sccbMgrTbl[p_card][currSCCB->TargID].TarEEValue &= in FPT_phaseBusFree()
4488 else if (currSCCB->Sccb_scsistat == SELECT_Q_ST) { in FPT_phaseBusFree()
4495 FPT_sccbMgrTbl[p_card][currSCCB->TargID]. in FPT_phaseBusFree()
4497 FPT_sccbMgrTbl[p_card][currSCCB->TargID]. in FPT_phaseBusFree()
4508 currSCCB->Sccb_scsistat = BUS_FREE_ST; in FPT_phaseBusFree()
4510 if (!currSCCB->HostStatus) { in FPT_phaseBusFree()
4511 currSCCB->HostStatus = SCCB_PHASE_SEQUENCE_FAIL; in FPT_phaseBusFree()
4515 ((FPT_sccbMgrTbl[p_card][currSCCB->TargID]. in FPT_phaseBusFree()
4517 FPT_sccbMgrTbl[p_card][currSCCB->TargID]. in FPT_phaseBusFree()
4518 TarLUNBusy[currSCCB->Lun] = 0; in FPT_phaseBusFree()
4520 FPT_sccbMgrTbl[p_card][currSCCB->TargID]. in FPT_phaseBusFree()
4533 /*---------------------------------------------------------------------
4539 *---------------------------------------------------------------------*/
4637 /*---------------------------------------------------------------------
4644 *---------------------------------------------------------------------*/
4655 FPT_sccbMgrTbl[p_card][currSCCB->TargID].TarLUN_CA = 0; in FPT_autoCmdCmplt()
4662 ((FPT_sccbMgrTbl[p_card][currSCCB->TargID]. in FPT_autoCmdCmplt()
4664 FPT_sccbMgrTbl[p_card][currSCCB->TargID]. in FPT_autoCmdCmplt()
4665 TarLUNBusy[currSCCB->Lun] = 1; in FPT_autoCmdCmplt()
4667 FPT_BL_Card[p_card].discQCount--; in FPT_autoCmdCmplt()
4670 [currSCCB->TargID]. in FPT_autoCmdCmplt()
4671 LunDiscQ_Idx[currSCCB->Lun]] = in FPT_autoCmdCmplt()
4674 FPT_sccbMgrTbl[p_card][currSCCB->TargID]. in FPT_autoCmdCmplt()
4676 if (currSCCB->Sccb_tag) { in FPT_autoCmdCmplt()
4679 discQCount--; in FPT_autoCmdCmplt()
4680 FPT_BL_Card[p_card].discQ_Tbl[currSCCB-> in FPT_autoCmdCmplt()
4686 discQCount--; in FPT_autoCmdCmplt()
4689 [currSCCB->TargID]. in FPT_autoCmdCmplt()
4694 currSCCB->Sccb_MGRFlags |= F_STATUSLOADED; in FPT_autoCmdCmplt()
4701 if (currSCCB->Sccb_scsistat == SELECT_SN_ST) { in FPT_autoCmdCmplt()
4702 FPT_sccbMgrTbl[p_card][currSCCB->TargID].TarStatus |= in FPT_autoCmdCmplt()
4705 FPT_sccbMgrTbl[p_card][currSCCB->TargID].TarEEValue &= in FPT_autoCmdCmplt()
4710 ((FPT_sccbMgrTbl[p_card][currSCCB->TargID]. in FPT_autoCmdCmplt()
4712 FPT_sccbMgrTbl[p_card][currSCCB->TargID]. in FPT_autoCmdCmplt()
4713 TarLUNBusy[currSCCB->Lun] = 1; in FPT_autoCmdCmplt()
4715 FPT_BL_Card[p_card].discQCount--; in FPT_autoCmdCmplt()
4718 [currSCCB->TargID]. in FPT_autoCmdCmplt()
4719 LunDiscQ_Idx[currSCCB->Lun]] = in FPT_autoCmdCmplt()
4722 FPT_sccbMgrTbl[p_card][currSCCB->TargID]. in FPT_autoCmdCmplt()
4724 if (currSCCB->Sccb_tag) { in FPT_autoCmdCmplt()
4727 discQCount--; in FPT_autoCmdCmplt()
4728 FPT_BL_Card[p_card].discQ_Tbl[currSCCB-> in FPT_autoCmdCmplt()
4734 discQCount--; in FPT_autoCmdCmplt()
4737 [currSCCB->TargID]. in FPT_autoCmdCmplt()
4745 if (currSCCB->Sccb_scsistat == SELECT_WN_ST) { in FPT_autoCmdCmplt()
4747 FPT_sccbMgrTbl[p_card][currSCCB->TargID].TarStatus = in FPT_autoCmdCmplt()
4748 (FPT_sccbMgrTbl[p_card][currSCCB->TargID]. in FPT_autoCmdCmplt()
4751 FPT_sccbMgrTbl[p_card][currSCCB->TargID].TarEEValue &= in FPT_autoCmdCmplt()
4756 ((FPT_sccbMgrTbl[p_card][currSCCB->TargID]. in FPT_autoCmdCmplt()
4758 FPT_sccbMgrTbl[p_card][currSCCB->TargID]. in FPT_autoCmdCmplt()
4759 TarLUNBusy[currSCCB->Lun] = 1; in FPT_autoCmdCmplt()
4761 FPT_BL_Card[p_card].discQCount--; in FPT_autoCmdCmplt()
4764 [currSCCB->TargID]. in FPT_autoCmdCmplt()
4765 LunDiscQ_Idx[currSCCB->Lun]] = in FPT_autoCmdCmplt()
4768 FPT_sccbMgrTbl[p_card][currSCCB->TargID]. in FPT_autoCmdCmplt()
4770 if (currSCCB->Sccb_tag) { in FPT_autoCmdCmplt()
4773 discQCount--; in FPT_autoCmdCmplt()
4774 FPT_BL_Card[p_card].discQ_Tbl[currSCCB-> in FPT_autoCmdCmplt()
4780 discQCount--; in FPT_autoCmdCmplt()
4783 [currSCCB->TargID]. in FPT_autoCmdCmplt()
4793 if (FPT_sccbMgrTbl[p_card][currSCCB->TargID]. in FPT_autoCmdCmplt()
4795 FPT_sccbMgrTbl[p_card][currSCCB-> in FPT_autoCmdCmplt()
4799 if (FPT_sccbMgrTbl[p_card][currSCCB->TargID]. in FPT_autoCmdCmplt()
4801 FPT_sccbMgrTbl[p_card][currSCCB-> in FPT_autoCmdCmplt()
4808 if (!(currSCCB->Sccb_XferState & F_AUTO_SENSE)) { in FPT_autoCmdCmplt()
4810 currSCCB->SccbStatus = SCCB_ERROR; in FPT_autoCmdCmplt()
4811 currSCCB->TargetStatus = status_byte; in FPT_autoCmdCmplt()
4815 FPT_sccbMgrTbl[p_card][currSCCB->TargID]. in FPT_autoCmdCmplt()
4818 if (currSCCB->RequestSenseLength != in FPT_autoCmdCmplt()
4821 if (currSCCB->RequestSenseLength == 0) in FPT_autoCmdCmplt()
4822 currSCCB->RequestSenseLength = in FPT_autoCmdCmplt()
4833 [currSCCB->TargID]. in FPT_autoCmdCmplt()
4837 [currSCCB->TargID]. in FPT_autoCmdCmplt()
4838 TarLUNBusy[currSCCB->Lun] = in FPT_autoCmdCmplt()
4843 discQCount--; in FPT_autoCmdCmplt()
4847 [currSCCB-> in FPT_autoCmdCmplt()
4850 [currSCCB->Lun]] = in FPT_autoCmdCmplt()
4854 [currSCCB->TargID]. in FPT_autoCmdCmplt()
4856 if (currSCCB->Sccb_tag) { in FPT_autoCmdCmplt()
4861 discQCount--; in FPT_autoCmdCmplt()
4863 discQ_Tbl[currSCCB-> in FPT_autoCmdCmplt()
4871 discQCount--; in FPT_autoCmdCmplt()
4875 [p_card][currSCCB-> in FPT_autoCmdCmplt()
4888 ((FPT_sccbMgrTbl[p_card][currSCCB->TargID]. in FPT_autoCmdCmplt()
4890 FPT_sccbMgrTbl[p_card][currSCCB->TargID].TarLUNBusy[currSCCB-> in FPT_autoCmdCmplt()
4893 FPT_sccbMgrTbl[p_card][currSCCB->TargID].TarLUNBusy[0] = 0; in FPT_autoCmdCmplt()
4901 /*---------------------------------------------------------------------
4917 *---------------------------------------------------------------------*/
4923 currSCCB = pCurrCard->currentSCCB; in FPT_dataXferProcessor()
4925 if (currSCCB->Sccb_XferState & F_SG_XFER) { in FPT_dataXferProcessor()
4926 if (pCurrCard->globalFlags & F_HOST_XFER_ACT) in FPT_dataXferProcessor()
4928 currSCCB->Sccb_sgseg += (unsigned char)SG_BUF_CNT; in FPT_dataXferProcessor()
4929 currSCCB->Sccb_SGoffset = 0x00; in FPT_dataXferProcessor()
4931 pCurrCard->globalFlags |= F_HOST_XFER_ACT; in FPT_dataXferProcessor()
4937 if (!(pCurrCard->globalFlags & F_HOST_XFER_ACT)) { in FPT_dataXferProcessor()
4938 pCurrCard->globalFlags |= F_HOST_XFER_ACT; in FPT_dataXferProcessor()
4945 /*---------------------------------------------------------------------
4951 *---------------------------------------------------------------------*/
4960 if (pcurrSCCB->Sccb_XferState & F_HOST_XFER_DIR) in FPT_busMstrSGDataXferStart()
4967 sg_index = pcurrSCCB->Sccb_sgseg; in FPT_busMstrSGDataXferStart()
4977 pcurrSCCB->DataLength)) { in FPT_busMstrSGDataXferStart()
4979 segp = (struct blogic_sg_seg *)(pcurrSCCB->DataPointer) + in FPT_busMstrSGDataXferStart()
4981 tmpSGCnt += segp->segbytes; in FPT_busMstrSGDataXferStart()
4982 count |= segp->segbytes; in FPT_busMstrSGDataXferStart()
4983 addr = segp->segdata; in FPT_busMstrSGDataXferStart()
4985 if ((!sg_count) && (pcurrSCCB->Sccb_SGoffset)) { in FPT_busMstrSGDataXferStart()
4987 ((count & 0x00FFFFFFL) - pcurrSCCB->Sccb_SGoffset); in FPT_busMstrSGDataXferStart()
4989 (count & 0xFF000000L) | pcurrSCCB->Sccb_SGoffset; in FPT_busMstrSGDataXferStart()
5005 pcurrSCCB->Sccb_XferCnt = tmpSGCnt; in FPT_busMstrSGDataXferStart()
5009 if (pcurrSCCB->Sccb_XferState & F_HOST_XFER_DIR) { in FPT_busMstrSGDataXferStart()
5023 pcurrSCCB->Sccb_XferState |= F_ODD_BALL_CNT; in FPT_busMstrSGDataXferStart()
5024 tmpSGCnt--; in FPT_busMstrSGDataXferStart()
5038 /*---------------------------------------------------------------------
5044 *---------------------------------------------------------------------*/
5049 if (!(pcurrSCCB->Sccb_XferState & F_AUTO_SENSE)) { in FPT_busMstrDataXferStart()
5051 count = pcurrSCCB->Sccb_XferCnt; in FPT_busMstrDataXferStart()
5053 addr = (u32)(unsigned long)pcurrSCCB->DataPointer + pcurrSCCB->Sccb_ATC; in FPT_busMstrDataXferStart()
5057 addr = pcurrSCCB->SensePointer; in FPT_busMstrDataXferStart()
5058 count = pcurrSCCB->RequestSenseLength; in FPT_busMstrDataXferStart()
5064 if (pcurrSCCB->Sccb_XferState & F_HOST_XFER_DIR) { in FPT_busMstrDataXferStart()
5086 /*---------------------------------------------------------------------
5097 *---------------------------------------------------------------------*/
5107 && timeout--) { in FPT_busMstrTimeOut()
5115 && timeout--) { in FPT_busMstrTimeOut()
5130 /*---------------------------------------------------------------------
5136 *---------------------------------------------------------------------*/
5148 if (pCurrSCCB->Sccb_XferState & F_AUTO_SENSE) { in FPT_hostDataXferAbort()
5158 && timeout--) { in FPT_hostDataXferAbort()
5169 if (pCurrSCCB->HostStatus == 0x00) in FPT_hostDataXferAbort()
5171 pCurrSCCB->HostStatus = in FPT_hostDataXferAbort()
5182 if (pCurrSCCB->HostStatus == in FPT_hostDataXferAbort()
5185 pCurrSCCB->HostStatus = in FPT_hostDataXferAbort()
5192 else if (pCurrSCCB->Sccb_XferCnt) { in FPT_hostDataXferAbort()
5194 if (pCurrSCCB->Sccb_XferState & F_SG_XFER) { in FPT_hostDataXferAbort()
5202 sg_ptr = pCurrSCCB->Sccb_sgseg + SG_BUF_CNT; in FPT_hostDataXferAbort()
5205 (unsigned int)(pCurrSCCB->DataLength / in FPT_hostDataXferAbort()
5208 sg_ptr = (u32)(pCurrSCCB->DataLength / in FPT_hostDataXferAbort()
5212 remain_cnt = pCurrSCCB->Sccb_XferCnt; in FPT_hostDataXferAbort()
5216 sg_ptr--; in FPT_hostDataXferAbort()
5217 segp = (struct blogic_sg_seg *)(pCurrSCCB-> in FPT_hostDataXferAbort()
5219 if (remain_cnt > (unsigned long)segp->segbytes) in FPT_hostDataXferAbort()
5220 remain_cnt -= in FPT_hostDataXferAbort()
5221 (unsigned long)segp->segbytes; in FPT_hostDataXferAbort()
5228 pCurrSCCB->Sccb_SGoffset = remain_cnt; in FPT_hostDataXferAbort()
5230 pCurrSCCB->Sccb_sgseg = (unsigned short)sg_ptr; in FPT_hostDataXferAbort()
5233 pCurrSCCB->DataLength && (remain_cnt == 0)) in FPT_hostDataXferAbort()
5235 pCurrSCCB->Sccb_XferState |= in FPT_hostDataXferAbort()
5241 if (pCurrSCCB->HostStatus == 0x00) { in FPT_hostDataXferAbort()
5243 pCurrSCCB->HostStatus = in FPT_hostDataXferAbort()
5249 if (!(pCurrSCCB->Sccb_XferState & F_HOST_XFER_DIR)) { in FPT_hostDataXferAbort()
5264 if (pCurrSCCB->HostStatus == in FPT_hostDataXferAbort()
5267 pCurrSCCB->HostStatus = in FPT_hostDataXferAbort()
5285 BM_THRESHOLD) && timeout--) { in FPT_hostDataXferAbort()
5298 BM_CMD_BUSY) && timeout--) { in FPT_hostDataXferAbort()
5308 if (pCurrSCCB->HostStatus == 0x00) { in FPT_hostDataXferAbort()
5310 pCurrSCCB->HostStatus = in FPT_hostDataXferAbort()
5323 if (pCurrSCCB->HostStatus == 0x00) { in FPT_hostDataXferAbort()
5325 pCurrSCCB->HostStatus = in FPT_hostDataXferAbort()
5341 && timeout--) { in FPT_hostDataXferAbort()
5346 if (pCurrSCCB->HostStatus == 0x00) { in FPT_hostDataXferAbort()
5348 pCurrSCCB->HostStatus = SCCB_BM_ERR; in FPT_hostDataXferAbort()
5359 if (pCurrSCCB->HostStatus == 0x00) { in FPT_hostDataXferAbort()
5361 pCurrSCCB->HostStatus = SCCB_BM_ERR; in FPT_hostDataXferAbort()
5367 if (pCurrSCCB->Sccb_XferState & F_SG_XFER) { in FPT_hostDataXferAbort()
5375 pCurrSCCB->Sccb_sgseg += SG_BUF_CNT; in FPT_hostDataXferAbort()
5377 pCurrSCCB->Sccb_SGoffset = 0x00; in FPT_hostDataXferAbort()
5379 if ((u32)(pCurrSCCB->Sccb_sgseg * SG_ELEMENT_SIZE) >= in FPT_hostDataXferAbort()
5380 pCurrSCCB->DataLength) { in FPT_hostDataXferAbort()
5382 pCurrSCCB->Sccb_XferState |= F_ALL_XFERRED; in FPT_hostDataXferAbort()
5383 pCurrSCCB->Sccb_sgseg = in FPT_hostDataXferAbort()
5384 (unsigned short)(pCurrSCCB->DataLength / in FPT_hostDataXferAbort()
5390 if (!(pCurrSCCB->Sccb_XferState & F_AUTO_SENSE)) in FPT_hostDataXferAbort()
5391 pCurrSCCB->Sccb_XferState |= F_ALL_XFERRED; in FPT_hostDataXferAbort()
5398 /*---------------------------------------------------------------------
5405 *---------------------------------------------------------------------*/
5412 if (currSCCB->Sccb_XferState & F_SG_XFER) { in FPT_hostDataXferRestart()
5414 currSCCB->Sccb_XferCnt = 0; in FPT_hostDataXferRestart()
5420 while (data_count < currSCCB->Sccb_ATC) { in FPT_hostDataXferRestart()
5423 segp = (struct blogic_sg_seg *)(currSCCB->DataPointer) + in FPT_hostDataXferRestart()
5425 data_count += segp->segbytes; in FPT_hostDataXferRestart()
5428 if (data_count == currSCCB->Sccb_ATC) { in FPT_hostDataXferRestart()
5430 currSCCB->Sccb_SGoffset = 0; in FPT_hostDataXferRestart()
5435 currSCCB->Sccb_SGoffset = in FPT_hostDataXferRestart()
5436 data_count - currSCCB->Sccb_ATC; in FPT_hostDataXferRestart()
5439 currSCCB->Sccb_sgseg = (unsigned short)sg_index; in FPT_hostDataXferRestart()
5443 currSCCB->Sccb_XferCnt = in FPT_hostDataXferRestart()
5444 currSCCB->DataLength - currSCCB->Sccb_ATC; in FPT_hostDataXferRestart()
5448 /*---------------------------------------------------------------------
5454 *---------------------------------------------------------------------*/
5468 p_port = currCard->ioPort; in FPT_scini()
5469 pCurrNvRam = currCard->pNvRamInfo; in FPT_scini()
5472 ScamFlg = pCurrNvRam->niScamConf; in FPT_scini()
5473 i = pCurrNvRam->niSysConf; in FPT_scini()
5558 currCard-> in FPT_scini()
5597 currCard->ourId = in FPT_scini()
5609 FPT_scamInfo[currCard-> in FPT_scini()
5612 FPT_scamInfo[currCard-> in FPT_scini()
5637 if (currCard->globalFlags & F_UPDATE_EEPROM) { in FPT_scini()
5639 currCard->globalFlags &= ~F_UPDATE_EEPROM; in FPT_scini()
5652 currCard->globalFlags |= F_SINGLE_DEVICE; in FPT_scini()
5654 currCard->globalFlags &= ~F_SINGLE_DEVICE; in FPT_scini()
5658 /*---------------------------------------------------------------------
5664 *---------------------------------------------------------------------*/
5720 /*---------------------------------------------------------------------
5726 *---------------------------------------------------------------------*/
5752 /*---------------------------------------------------------------------
5758 *---------------------------------------------------------------------*/
5811 scam_id += 0x08; /*Count number of zeros in DB0-3. */ in FPT_scasid()
5829 /*---------------------------------------------------------------------
5835 *---------------------------------------------------------------------*/
5863 /*---------------------------------------------------------------------
5867 * Description: Handshake the p_data (DB4-0) across the bus.
5869 *---------------------------------------------------------------------*/
5875 curr_data = p_data | BIT(7) | BIT(5); /*Start with DB7 & DB5 asserted. */ in FPT_scxferc()
5883 FPT_scwirod(p_port, BIT(7)); /*Wait for DB7 to be released. */ in FPT_scxferc()
5912 /*---------------------------------------------------------------------
5919 *---------------------------------------------------------------------*/
5964 /*---------------------------------------------------------------------
5970 *---------------------------------------------------------------------*/
6021 /*---------------------------------------------------------------------
6028 *---------------------------------------------------------------------*/
6048 /*---------------------------------------------------------------------
6055 *---------------------------------------------------------------------*/
6075 /*---------------------------------------------------------------------
6081 *---------------------------------------------------------------------*/
6089 p_quintet -= 0x80; in FPT_scvalq()
6099 /*---------------------------------------------------------------------
6107 *---------------------------------------------------------------------*/
6183 /*---------------------------------------------------------------------
6189 *---------------------------------------------------------------------*/
6197 /*---------------------------------------------------------------------
6203 *---------------------------------------------------------------------*/
6224 pCurrNvRam->niScamTbl[i][k]; in FPT_inisci()
6266 /*---------------------------------------------------------------------
6273 *---------------------------------------------------------------------*/
6309 i--; in FPT_scmachid()
6326 match--; in FPT_scmachid()
6332 match = MAX_SCSI_TAR - 1; in FPT_scmachid()
6353 i--; in FPT_scmachid()
6370 match--; in FPT_scmachid()
6376 match = MAX_SCSI_TAR - 1; in FPT_scmachid()
6383 /*---------------------------------------------------------------------
6389 *---------------------------------------------------------------------*/
6428 /*---------------------------------------------------------------------
6434 *---------------------------------------------------------------------*/
6477 /*---------------------------------------------------------------------
6483 *---------------------------------------------------------------------*/
6503 /*---------------------------------------------------------------------
6510 *---------------------------------------------------------------------*/
6621 temp += 0x5442; /* BT- 930 */ in FPT_DiagEEPROM()
6659 /*---------------------------------------------------------------------
6665 *---------------------------------------------------------------------*/
6674 scan_ptr = pCurrCard->scanIndex; in FPT_queueSearchSelect()
6677 if ((pCurrCard->globalFlags & F_CONLUN_IO) && in FPT_queueSearchSelect()
6678 ((currTar_Info->TarStatus & TAR_TAG_Q_MASK) != in FPT_queueSearchSelect()
6680 if (currTar_Info->TarSelQ_Cnt != 0) { in FPT_queueSearchSelect()
6687 if (currTar_Info->TarLUNBusy[lun] == 0) { in FPT_queueSearchSelect()
6689 pCurrCard->currentSCCB = in FPT_queueSearchSelect()
6690 currTar_Info->TarSelQ_Head; in FPT_queueSearchSelect()
6693 while ((pCurrCard-> in FPT_queueSearchSelect()
6696 pCurrCard-> in FPT_queueSearchSelect()
6697 currentSCCB->Lun)) { in FPT_queueSearchSelect()
6699 pCurrCard-> in FPT_queueSearchSelect()
6701 pCurrCard->currentSCCB = in FPT_queueSearchSelect()
6703 *)(pCurrCard-> in FPT_queueSearchSelect()
6704 currentSCCB)-> in FPT_queueSearchSelect()
6707 if (pCurrCard->currentSCCB == in FPT_queueSearchSelect()
6711 pOldSccb-> in FPT_queueSearchSelect()
6714 *)(pCurrCard-> in FPT_queueSearchSelect()
6715 currentSCCB)-> in FPT_queueSearchSelect()
6717 pOldSccb-> in FPT_queueSearchSelect()
6720 *)(pCurrCard-> in FPT_queueSearchSelect()
6721 currentSCCB)-> in FPT_queueSearchSelect()
6723 currTar_Info-> in FPT_queueSearchSelect()
6724 TarSelQ_Cnt--; in FPT_queueSearchSelect()
6726 currTar_Info-> in FPT_queueSearchSelect()
6729 *)(pCurrCard-> in FPT_queueSearchSelect()
6730 currentSCCB)-> in FPT_queueSearchSelect()
6733 if (currTar_Info-> in FPT_queueSearchSelect()
6736 currTar_Info-> in FPT_queueSearchSelect()
6739 currTar_Info-> in FPT_queueSearchSelect()
6743 currTar_Info-> in FPT_queueSearchSelect()
6744 TarSelQ_Cnt--; in FPT_queueSearchSelect()
6745 currTar_Info-> in FPT_queueSearchSelect()
6746 TarSelQ_Head-> in FPT_queueSearchSelect()
6753 pCurrCard->scanIndex = scan_ptr; in FPT_queueSearchSelect()
6755 pCurrCard->globalFlags |= in FPT_queueSearchSelect()
6771 if ((currTar_Info->TarSelQ_Cnt != 0) && in FPT_queueSearchSelect()
6772 (currTar_Info->TarLUNBusy[0] == 0)) { in FPT_queueSearchSelect()
6774 pCurrCard->currentSCCB = in FPT_queueSearchSelect()
6775 currTar_Info->TarSelQ_Head; in FPT_queueSearchSelect()
6777 currTar_Info->TarSelQ_Head = in FPT_queueSearchSelect()
6778 (struct sccb *)(pCurrCard->currentSCCB)-> in FPT_queueSearchSelect()
6781 if (currTar_Info->TarSelQ_Head == NULL) { in FPT_queueSearchSelect()
6782 currTar_Info->TarSelQ_Tail = NULL; in FPT_queueSearchSelect()
6783 currTar_Info->TarSelQ_Cnt = 0; in FPT_queueSearchSelect()
6785 currTar_Info->TarSelQ_Cnt--; in FPT_queueSearchSelect()
6786 currTar_Info->TarSelQ_Head-> in FPT_queueSearchSelect()
6794 pCurrCard->scanIndex = scan_ptr; in FPT_queueSearchSelect()
6796 pCurrCard->globalFlags |= F_NEW_SCCB_CMD; in FPT_queueSearchSelect()
6808 } while (scan_ptr != pCurrCard->scanIndex); in FPT_queueSearchSelect()
6811 /*---------------------------------------------------------------------
6817 *---------------------------------------------------------------------*/
6825 if (pCurrCard->currentSCCB != NULL) { in FPT_queueSelectFail()
6827 (unsigned char)(((struct sccb *)(pCurrCard->currentSCCB))-> in FPT_queueSelectFail()
6831 pCurrCard->currentSCCB->Sccb_backlink = (struct sccb *)NULL; in FPT_queueSelectFail()
6833 pCurrCard->currentSCCB->Sccb_forwardlink = in FPT_queueSelectFail()
6834 currTar_Info->TarSelQ_Head; in FPT_queueSelectFail()
6836 if (currTar_Info->TarSelQ_Cnt == 0) { in FPT_queueSelectFail()
6837 currTar_Info->TarSelQ_Tail = pCurrCard->currentSCCB; in FPT_queueSelectFail()
6841 currTar_Info->TarSelQ_Head->Sccb_backlink = in FPT_queueSelectFail()
6842 pCurrCard->currentSCCB; in FPT_queueSelectFail()
6845 currTar_Info->TarSelQ_Head = pCurrCard->currentSCCB; in FPT_queueSelectFail()
6847 pCurrCard->currentSCCB = NULL; in FPT_queueSelectFail()
6848 currTar_Info->TarSelQ_Cnt++; in FPT_queueSelectFail()
6852 /*---------------------------------------------------------------------
6858 *---------------------------------------------------------------------*/
6868 SCSIcmd = p_sccb->Cdb[0]; in FPT_queueCmdComplete()
6870 if (!(p_sccb->Sccb_XferState & F_ALL_XFERRED)) { in FPT_queueCmdComplete()
6872 if ((p_sccb-> in FPT_queueCmdComplete()
6874 && (p_sccb->HostStatus == SCCB_COMPLETE) in FPT_queueCmdComplete()
6875 && (p_sccb->TargetStatus != SSCHECK)) in FPT_queueCmdComplete()
6883 (pCurrCard->globalFlags & F_NO_FILTER) in FPT_queueCmdComplete()
6885 p_sccb->HostStatus = SCCB_DATA_UNDER_RUN; in FPT_queueCmdComplete()
6888 if (p_sccb->SccbStatus == SCCB_IN_PROCESS) { in FPT_queueCmdComplete()
6889 if (p_sccb->HostStatus || p_sccb->TargetStatus) in FPT_queueCmdComplete()
6890 p_sccb->SccbStatus = SCCB_ERROR; in FPT_queueCmdComplete()
6892 p_sccb->SccbStatus = SCCB_SUCCESS; in FPT_queueCmdComplete()
6895 if (p_sccb->Sccb_XferState & F_AUTO_SENSE) { in FPT_queueCmdComplete()
6897 p_sccb->CdbLength = p_sccb->Save_CdbLen; in FPT_queueCmdComplete()
6899 p_sccb->Cdb[i] = p_sccb->Save_Cdb[i]; in FPT_queueCmdComplete()
6903 if ((p_sccb->OperationCode == RESIDUAL_SG_COMMAND) || in FPT_queueCmdComplete()
6904 (p_sccb->OperationCode == RESIDUAL_COMMAND)) { in FPT_queueCmdComplete()
6909 pCurrCard->cmdCounter--; in FPT_queueCmdComplete()
6910 if (!pCurrCard->cmdCounter) { in FPT_queueCmdComplete()
6912 if (pCurrCard->globalFlags & F_GREEN_PC) { in FPT_queueCmdComplete()
6913 WR_HARPOON(pCurrCard->ioPort + hp_clkctrl_0, in FPT_queueCmdComplete()
6915 WR_HARPOON(pCurrCard->ioPort + hp_sys_ctrl, STOP_CLK); in FPT_queueCmdComplete()
6918 WR_HARPOON(pCurrCard->ioPort + hp_semaphore, in FPT_queueCmdComplete()
6919 (RD_HARPOON(pCurrCard->ioPort + hp_semaphore) & in FPT_queueCmdComplete()
6924 if (pCurrCard->discQCount != 0) { in FPT_queueCmdComplete()
6925 currTar_Info = &FPT_sccbMgrTbl[p_card][p_sccb->TargID]; in FPT_queueCmdComplete()
6926 if (((pCurrCard->globalFlags & F_CONLUN_IO) && in FPT_queueCmdComplete()
6927 ((currTar_Info->TarStatus & TAR_TAG_Q_MASK) != in FPT_queueCmdComplete()
6929 pCurrCard->discQCount--; in FPT_queueCmdComplete()
6930 pCurrCard->discQ_Tbl[currTar_Info-> in FPT_queueCmdComplete()
6931 LunDiscQ_Idx[p_sccb->Lun]] = NULL; in FPT_queueCmdComplete()
6933 if (p_sccb->Sccb_tag) { in FPT_queueCmdComplete()
6934 pCurrCard->discQCount--; in FPT_queueCmdComplete()
6935 pCurrCard->discQ_Tbl[p_sccb->Sccb_tag] = NULL; in FPT_queueCmdComplete()
6937 pCurrCard->discQCount--; in FPT_queueCmdComplete()
6938 pCurrCard->discQ_Tbl[currTar_Info-> in FPT_queueCmdComplete()
6945 callback = (CALL_BK_FN) p_sccb->SccbCallback; in FPT_queueCmdComplete()
6947 pCurrCard->globalFlags |= F_NEW_SCCB_CMD; in FPT_queueCmdComplete()
6948 pCurrCard->currentSCCB = NULL; in FPT_queueCmdComplete()
6951 /*---------------------------------------------------------------------
6957 *---------------------------------------------------------------------*/
6962 currTar_Info = &FPT_sccbMgrTbl[p_card][p_sccb->TargID]; in FPT_queueDisconnect()
6965 ((currTar_Info->TarStatus & TAR_TAG_Q_MASK) != TAG_Q_TRYING))) { in FPT_queueDisconnect()
6966 FPT_BL_Card[p_card].discQ_Tbl[currTar_Info-> in FPT_queueDisconnect()
6967 LunDiscQ_Idx[p_sccb->Lun]] = in FPT_queueDisconnect()
6970 if (p_sccb->Sccb_tag) { in FPT_queueDisconnect()
6971 FPT_BL_Card[p_card].discQ_Tbl[p_sccb->Sccb_tag] = in FPT_queueDisconnect()
6973 FPT_sccbMgrTbl[p_card][p_sccb->TargID].TarLUNBusy[0] = in FPT_queueDisconnect()
6975 FPT_sccbMgrTbl[p_card][p_sccb->TargID].TarTagQ_Cnt++; in FPT_queueDisconnect()
6977 FPT_BL_Card[p_card].discQ_Tbl[currTar_Info-> in FPT_queueDisconnect()
6984 /*---------------------------------------------------------------------
6990 *---------------------------------------------------------------------*/
7000 thisTarg = (unsigned char)currSCCB->TargID; in FPT_queueFlushSccb()
7006 (FPT_BL_Card[p_card].discQ_Tbl[qtag]->TargID == in FPT_queueFlushSccb()
7009 FPT_BL_Card[p_card].discQ_Tbl[qtag]-> in FPT_queueFlushSccb()
7017 currTar_Info->TarTagQ_Cnt--; in FPT_queueFlushSccb()
7025 /*---------------------------------------------------------------------
7031 *---------------------------------------------------------------------*/
7044 (FPT_BL_Card[p_card].discQ_Tbl[qtag]->TargID == thisTarg)) { in FPT_queueFlushTargSccb()
7046 FPT_BL_Card[p_card].discQ_Tbl[qtag]->HostStatus = in FPT_queueFlushTargSccb()
7054 currTar_Info->TarTagQ_Cnt--; in FPT_queueFlushTargSccb()
7064 currTar_Info = &FPT_sccbMgrTbl[p_card][p_SCCB->TargID]; in FPT_queueAddSccb()
7066 p_SCCB->Sccb_forwardlink = NULL; in FPT_queueAddSccb()
7068 p_SCCB->Sccb_backlink = currTar_Info->TarSelQ_Tail; in FPT_queueAddSccb()
7070 if (currTar_Info->TarSelQ_Cnt == 0) { in FPT_queueAddSccb()
7072 currTar_Info->TarSelQ_Head = p_SCCB; in FPT_queueAddSccb()
7077 currTar_Info->TarSelQ_Tail->Sccb_forwardlink = p_SCCB; in FPT_queueAddSccb()
7080 currTar_Info->TarSelQ_Tail = p_SCCB; in FPT_queueAddSccb()
7081 currTar_Info->TarSelQ_Cnt++; in FPT_queueAddSccb()
7084 /*---------------------------------------------------------------------
7091 *---------------------------------------------------------------------*/
7099 currTar_Info = &FPT_sccbMgrTbl[p_card][p_SCCB->TargID]; in FPT_queueFindSccb()
7101 q_ptr = currTar_Info->TarSelQ_Head; in FPT_queueFindSccb()
7107 if (currTar_Info->TarSelQ_Head == q_ptr) { in FPT_queueFindSccb()
7109 currTar_Info->TarSelQ_Head = in FPT_queueFindSccb()
7110 q_ptr->Sccb_forwardlink; in FPT_queueFindSccb()
7113 if (currTar_Info->TarSelQ_Tail == q_ptr) { in FPT_queueFindSccb()
7115 currTar_Info->TarSelQ_Tail = in FPT_queueFindSccb()
7116 q_ptr->Sccb_backlink; in FPT_queueFindSccb()
7119 if (q_ptr->Sccb_forwardlink != NULL) { in FPT_queueFindSccb()
7120 q_ptr->Sccb_forwardlink->Sccb_backlink = in FPT_queueFindSccb()
7121 q_ptr->Sccb_backlink; in FPT_queueFindSccb()
7124 if (q_ptr->Sccb_backlink != NULL) { in FPT_queueFindSccb()
7125 q_ptr->Sccb_backlink->Sccb_forwardlink = in FPT_queueFindSccb()
7126 q_ptr->Sccb_forwardlink; in FPT_queueFindSccb()
7129 currTar_Info->TarSelQ_Cnt--; in FPT_queueFindSccb()
7135 q_ptr = q_ptr->Sccb_forwardlink; in FPT_queueFindSccb()
7143 /*---------------------------------------------------------------------
7149 * If Non-SG transfer then report Total Cnt - Actual Transfer
7154 *---------------------------------------------------------------------*/
7162 if (p_SCCB->Sccb_XferState & F_ALL_XFERRED) { in FPT_utilUpdateResidual()
7164 p_SCCB->DataLength = 0x0000; in FPT_utilUpdateResidual()
7167 else if (p_SCCB->Sccb_XferState & F_SG_XFER) { in FPT_utilUpdateResidual()
7171 sg_index = p_SCCB->Sccb_sgseg; in FPT_utilUpdateResidual()
7174 if (p_SCCB->Sccb_SGoffset) { in FPT_utilUpdateResidual()
7176 partial_cnt = p_SCCB->Sccb_SGoffset; in FPT_utilUpdateResidual()
7181 (unsigned long)SG_ELEMENT_SIZE) < p_SCCB->DataLength) { in FPT_utilUpdateResidual()
7182 segp = (struct blogic_sg_seg *)(p_SCCB->DataPointer) + in FPT_utilUpdateResidual()
7184 partial_cnt += segp->segbytes; in FPT_utilUpdateResidual()
7188 p_SCCB->DataLength = partial_cnt; in FPT_utilUpdateResidual()
7193 p_SCCB->DataLength -= p_SCCB->Sccb_ATC; in FPT_utilUpdateResidual()
7197 /*---------------------------------------------------------------------
7203 *---------------------------------------------------------------------*/
7221 /*---------------------------------------------------------------------
7227 *---------------------------------------------------------------------*/
7266 /*---------------------------------------------------------------------
7273 *---------------------------------------------------------------------*/
7295 /*---------------------------------------------------------------------
7302 *---------------------------------------------------------------------*/
7346 /*---------------------------------------------------------------------
7353 *---------------------------------------------------------------------*/
7376 /*---------------------------------------------------------------------
7383 *---------------------------------------------------------------------*/
7423 /*---------------------------------------------------------------------
7430 *---------------------------------------------------------------------*/