⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tigon3.c

📁 PPC Linux Driver, use makefile to compare the routen in Linux.
💻 C
📖 第 1 页 / 共 5 页
字号:
            pDevice->EnableTbi = FALSE;            break;        case PHY_BCM5701_PHY_ID:            pDevice->EnableTbi = FALSE;            break;        case PHY_BCM5703_PHY_ID:            pDevice->EnableTbi = FALSE;            break;        case PHY_BCM5704_PHY_ID:            pDevice->EnableTbi = FALSE;            break;        case PHY_BCM8002_PHY_ID:            pDevice->EnableTbi = TRUE;            break;        default:            if (pAdapterInfo)            {                pDevice->PhyId = pAdapterInfo->PhyId;                pDevice->EnableTbi = pAdapterInfo->Serdes;            }            else if (EeSigFound)            {                pDevice->PhyId = EePhyId;                pDevice->EnableTbi = EePhyTypeSerdes;            }            break;    }    /* Bail out if we don't know the copper PHY id. */    if(UNKNOWN_PHY_ID(pDevice->PhyId) && !pDevice->EnableTbi)    {        return LM_STATUS_FAILURE;    }    if(T3_ASIC_REV(pDevice->ChipRevId) == T3_ASIC_REV_5703)    {        if((pDevice->SavedCacheLineReg & 0xff00) < 0x4000)        {            pDevice->SavedCacheLineReg &= 0xffff00ff;            pDevice->SavedCacheLineReg |= 0x4000;        }    }    /* Change driver parameters. */    Status = MM_GetConfig(pDevice);    if(Status != LM_STATUS_SUCCESS)    {        return Status;    }#if INCLUDE_5701_AX_FIX    if (pDevice->ChipRevId == T3_CHIP_ID_5701_A0 ||        pDevice->ChipRevId == T3_CHIP_ID_5701_B0)    {        pDevice->ResetPhyOnInit = TRUE;    }#endif    /* Save the current phy link status. */    if(!pDevice->EnableTbi)    {        LM_ReadPhy(pDevice, PHY_STATUS_REG, &Value32);        LM_ReadPhy(pDevice, PHY_STATUS_REG, &Value32);        /* If we don't have link reset the PHY. */        if(!(Value32 & PHY_STATUS_LINK_PASS) || pDevice->ResetPhyOnInit)        {            LM_WritePhy(pDevice, PHY_CTRL_REG, PHY_CTRL_PHY_RESET);            for(j = 0; j < 100; j++)            {                MM_Wait(10);                LM_ReadPhy(pDevice, PHY_CTRL_REG, &Value32);                if(Value32 && !(Value32 & PHY_CTRL_PHY_RESET))                {                    MM_Wait(40);                    break;                }            }#if INCLUDE_5701_AX_FIX            /* 5701_AX_BX bug:  only advertises 10mb speed. */            if(pDevice->ChipRevId == T3_CHIP_ID_5701_A0 ||                pDevice->ChipRevId == T3_CHIP_ID_5701_B0)            {                Value32 = PHY_AN_AD_PROTOCOL_802_3_CSMA_CD |                    PHY_AN_AD_10BASET_HALF | PHY_AN_AD_10BASET_FULL |                    PHY_AN_AD_100BASETX_FULL | PHY_AN_AD_100BASETX_HALF;                Value32 |= GetPhyAdFlowCntrlSettings(pDevice);                LM_WritePhy(pDevice, PHY_AN_AD_REG, Value32);                pDevice->advertising = Value32;                Value32 = BCM540X_AN_AD_1000BASET_HALF |                     BCM540X_AN_AD_1000BASET_FULL | BCM540X_CONFIG_AS_MASTER |                    BCM540X_ENABLE_CONFIG_AS_MASTER;                LM_WritePhy(pDevice, BCM540X_1000BASET_CTRL_REG, Value32);                pDevice->advertising1000 = Value32;                LM_WritePhy(pDevice, PHY_CTRL_REG, PHY_CTRL_AUTO_NEG_ENABLE |                    PHY_CTRL_RESTART_AUTO_NEG);            }#endif            if(T3_ASIC_REV(pDevice->ChipRevId) == T3_ASIC_REV_5703)            {                LM_WritePhy(pDevice, 0x18, 0x0c00);                LM_WritePhy(pDevice, 0x17, 0x201f);                LM_WritePhy(pDevice, 0x15, 0x2aaa);            }            if(pDevice->ChipRevId == T3_CHIP_ID_5704_A0)            {                LM_WritePhy(pDevice, 0x1c, 0x8d68);                LM_WritePhy(pDevice, 0x1c, 0x8d68);            }            /* Enable Ethernet@WireSpeed. */            if(pDevice->EnableWireSpeed)            {                LM_WritePhy(pDevice, 0x18, 0x7007);                LM_ReadPhy(pDevice, 0x18, &Value32);                LM_WritePhy(pDevice, 0x18, Value32 | BIT_15 | BIT_4);            }        }    }    /* Turn off tap power management. */    if((pDevice->PhyId & PHY_ID_MASK) == PHY_BCM5401_PHY_ID)    {        LM_WritePhy(pDevice, BCM5401_AUX_CTRL, 0x0c20);        LM_WritePhy(pDevice, BCM540X_DSP_ADDRESS_REG, 0x0012);        LM_WritePhy(pDevice, BCM540X_DSP_RW_PORT, 0x1804);        LM_WritePhy(pDevice, BCM540X_DSP_ADDRESS_REG, 0x0013);        LM_WritePhy(pDevice, BCM540X_DSP_RW_PORT, 0x1204);        LM_WritePhy(pDevice, BCM540X_DSP_ADDRESS_REG, 0x8006);        LM_WritePhy(pDevice, BCM540X_DSP_RW_PORT, 0x0132);        LM_WritePhy(pDevice, BCM540X_DSP_ADDRESS_REG, 0x8006);        LM_WritePhy(pDevice, BCM540X_DSP_RW_PORT, 0x0232);        LM_WritePhy(pDevice, BCM540X_DSP_ADDRESS_REG, 0x201f);        LM_WritePhy(pDevice, BCM540X_DSP_RW_PORT, 0x0a20);        MM_Wait(40);    }#if INCLUDE_TBI_SUPPORT    pDevice->IgnoreTbiLinkChange = FALSE;    if(pDevice->EnableTbi)    {        pDevice->WakeUpModeCap = LM_WAKE_UP_MODE_NONE;        pDevice->PhyIntMode = T3_PHY_INT_MODE_LINK_READY;        if ((pDevice->PollTbiLink == BAD_DEFAULT_VALUE) ||            pDevice->DisableAutoNeg)        {            pDevice->PollTbiLink = FALSE;        }    }    else    {        pDevice->PollTbiLink = FALSE;    }#endif /* INCLUDE_TBI_SUPPORT */    /* UseTaggedStatus is only valid for 5701 and later. */    if (T3_ASIC_REV(pDevice->ChipRevId) == T3_ASIC_REV_5700)    {        pDevice->UseTaggedStatus = FALSE;        pDevice->CoalesceMode = 0;    }    else    {        pDevice->CoalesceMode = HOST_COALESCE_CLEAR_TICKS_ON_RX_BD_EVENT |            HOST_COALESCE_CLEAR_TICKS_ON_TX_BD_EVENT;    }    /* Set the status block size. */    if(T3_CHIP_REV(pDevice->ChipRevId) != T3_CHIP_REV_5700_AX &&        T3_CHIP_REV(pDevice->ChipRevId) != T3_CHIP_REV_5700_BX)    {        pDevice->CoalesceMode |= HOST_COALESCE_32_BYTE_STATUS_MODE;    }    /* Check the DURING_INT coalescing ticks parameters. */    if(pDevice->UseTaggedStatus)    {        if(pDevice->RxCoalescingTicksDuringInt == BAD_DEFAULT_VALUE)        {            pDevice->RxCoalescingTicksDuringInt =                DEFAULT_RX_COALESCING_TICKS_DURING_INT;        }        if(pDevice->TxCoalescingTicksDuringInt == BAD_DEFAULT_VALUE)        {            pDevice->TxCoalescingTicksDuringInt =                DEFAULT_TX_COALESCING_TICKS_DURING_INT;        }        if(pDevice->RxMaxCoalescedFramesDuringInt == BAD_DEFAULT_VALUE)        {            pDevice->RxMaxCoalescedFramesDuringInt =                DEFAULT_RX_MAX_COALESCED_FRAMES_DURING_INT;        }        if(pDevice->TxMaxCoalescedFramesDuringInt == BAD_DEFAULT_VALUE)        {            pDevice->TxMaxCoalescedFramesDuringInt =                DEFAULT_TX_MAX_COALESCED_FRAMES_DURING_INT;        }    }    else    {        if(pDevice->RxCoalescingTicksDuringInt == BAD_DEFAULT_VALUE)        {            pDevice->RxCoalescingTicksDuringInt = 0;        }        if(pDevice->TxCoalescingTicksDuringInt == BAD_DEFAULT_VALUE)        {            pDevice->TxCoalescingTicksDuringInt = 0;        }        if(pDevice->RxMaxCoalescedFramesDuringInt == BAD_DEFAULT_VALUE)        {            pDevice->RxMaxCoalescedFramesDuringInt = 0;        }        if(pDevice->TxMaxCoalescedFramesDuringInt == BAD_DEFAULT_VALUE)        {            pDevice->TxMaxCoalescedFramesDuringInt = 0;        }    }#if T3_JUMBO_RCV_RCB_ENTRY_COUNT    if(pDevice->RxMtu <= (MAX_STD_RCV_BUFFER_SIZE - 8 /* CRC */))    {        pDevice->RxJumboDescCnt = 0;        if(pDevice->RxMtu <= MAX_ETHERNET_PACKET_SIZE_NO_CRC)        {            pDevice->RxMtu = MAX_ETHERNET_PACKET_SIZE_NO_CRC;        }    }    else    {        pDevice->RxJumboBufferSize = (pDevice->RxMtu + 8 /* CRC + VLAN */ +            COMMON_CACHE_LINE_SIZE-1) & ~COMMON_CACHE_LINE_MASK;        if(pDevice->RxJumboBufferSize > MAX_JUMBO_RCV_BUFFER_SIZE)        {            pDevice->RxJumboBufferSize = DEFAULT_JUMBO_RCV_BUFFER_SIZE;            pDevice->RxMtu = pDevice->RxJumboBufferSize - 8 /* CRC + VLAN */;        }        pDevice->TxMtu = pDevice->RxMtu;    }#else    pDevice->RxMtu = MAX_ETHERNET_PACKET_SIZE_NO_CRC;#endif /* T3_JUMBO_RCV_RCB_ENTRY_COUNT */    pDevice->RxPacketDescCnt = #if T3_JUMBO_RCV_RCB_ENTRY_COUNT        pDevice->RxJumboDescCnt +#endif /* T3_JUMBO_RCV_RCB_ENTRY_COUNT */        pDevice->RxStdDescCnt;    if(pDevice->TxMtu < MAX_ETHERNET_PACKET_SIZE_NO_CRC)    {        pDevice->TxMtu = MAX_ETHERNET_PACKET_SIZE_NO_CRC;    }    if(pDevice->TxMtu > MAX_JUMBO_TX_BUFFER_SIZE)    {        pDevice->TxMtu = MAX_JUMBO_TX_BUFFER_SIZE;    }    /* Configure the proper ways to get link change interrupt. */    if(pDevice->PhyIntMode == T3_PHY_INT_MODE_AUTO)    {        if(T3_ASIC_REV(pDevice->ChipRevId) == T3_ASIC_REV_5700)        {            pDevice->PhyIntMode = T3_PHY_INT_MODE_MI_INTERRUPT;        }        else        {            pDevice->PhyIntMode = T3_PHY_INT_MODE_LINK_READY;        }    }    else if(pDevice->PhyIntMode == T3_PHY_INT_MODE_AUTO_POLLING)    {        /* Auto-polling does not work on 5700_AX and 5700_BX. */        if(T3_ASIC_REV(pDevice->ChipRevId) == T3_ASIC_REV_5700)        {            pDevice->PhyIntMode = T3_PHY_INT_MODE_MI_INTERRUPT;        }    }    /* Determine the method to get link change status. */    if(pDevice->LinkChngMode == T3_LINK_CHNG_MODE_AUTO)    {        /* The link status bit in the status block does not work on 5700_AX */        /* and 5700_BX chips. */        if(T3_ASIC_REV(pDevice->ChipRevId) == T3_ASIC_REV_5700)        {            pDevice->LinkChngMode = T3_LINK_CHNG_MODE_USE_STATUS_REG;        }        else        {            pDevice->LinkChngMode = T3_LINK_CHNG_MODE_USE_STATUS_BLOCK;        }    }    if(pDevice->PhyIntMode == T3_PHY_INT_MODE_MI_INTERRUPT ||        T3_ASIC_REV(pDevice->ChipRevId) == T3_ASIC_REV_5700)    {        pDevice->LinkChngMode = T3_LINK_CHNG_MODE_USE_STATUS_REG;    }    /* Configure PHY led mode. */    if(pDevice->LedMode == LED_MODE_AUTO)    {        if(T3_ASIC_REV(pDevice->ChipRevId) == T3_ASIC_REV_5700 ||            T3_ASIC_REV(pDevice->ChipRevId) == T3_ASIC_REV_5701)        {            if(pDevice->SubsystemVendorId == T3_SVID_DELL)            {                pDevice->LedMode = LED_MODE_LINK10;            }            else            {                pDevice->LedMode = LED_MODE_THREE_LINK;                if(EeSigFound && EePhyLedMode != LED_MODE_AUTO)                {                    pDevice->LedMode = EePhyLedMode;                }            }            /* bug? 5701 in LINK10 mode does not seem to work when */            /* PhyIntMode is LINK_READY. */            if(T3_ASIC_REV(pDevice->ChipRevId) != T3_ASIC_REV_5700 &&#if INCLUDE_TBI_SUPPORT                pDevice->EnableTbi == FALSE &&#endif                pDevice->LedMode == LED_MODE_LINK10)            {                pDevice->PhyIntMode = T3_PHY_INT_MODE_MI_INTERRUPT;                pDevice->LinkChngMode = T3_LINK_CHNG_MODE_USE_STATUS_REG;            }            if(pDevice->EnableTbi)            {                pDevice->LedMode = LED_MODE_THREE_LINK;            }        }        else        {            if(EeSigFound && EePhyLedMode != LED_MODE_AUTO)            {                pDevice->LedMode = EePhyLedMode;            }            else            {                pDevice->LedMode = LED_MODE_OPEN_DRAIN;            }        }    }    /* Enable OneDmaAtOnce. */    if(pDevice->OneDmaAtOnce == BAD_DEFAULT_VALUE)    {        pDevice->OneDmaAtOnce = FALSE;    }    if (T3_ASIC_REV(pDevice->ChipRevId) == T3_ASIC_REV_5700 ||        pDevice->ChipRevId == T3_CHIP_ID_5701_A0 ||        pDevice->ChipRevId == T3_CHIP_ID_5701_B0 ||        pDevice->ChipRevId == T3_CHIP_ID_5701_B2)    {        pDevice->WolSpeed = WOL_SPEED_10MB;    }    else    {        pDevice->WolSpeed = WOL_SPEED_100MB;    }    /* Offloadings. */    pDevice->TaskToOffload = LM_TASK_OFFLOAD_NONE;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -