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

📄 tigon3.c

📁 F:worksip2440a board可启动u-boot-like.tar.gz F:worksip2440a board可启动u-boot-like.tar.gz
💻 C
📖 第 1 页 / 共 5 页
字号:
	    __raw_writel(0xffffffff, &(pDevice->pMemView->uIntMem.MemBlock32K[0x301]));	    if (__raw_readl(&(pDevice->pMemView->uIntMem.MemBlock32K[0x300])))	    {		pDevice->EnablePciXFix = TRUE;	    }	}    }#endif#if 1    /*    *  This code was at the beginning of else block below, but that's    *  a bug if node address in shared memory.    */    MM_Wait(50);    LM_NvramInit(pDevice);#endif    /* Get the node address.  First try to get in from the shared memory. */    /* If the signature is not present, then get it from the NVRAM. */    Value32 = MEM_RD_OFFSET(pDevice, T3_MAC_ADDR_HIGH_MAILBOX);    if((Value32 >> 16) == 0x484b)    {	pDevice->NodeAddress[0] = (LM_UINT8) (Value32 >> 8);	pDevice->NodeAddress[1] = (LM_UINT8) Value32;	Value32 = MEM_RD_OFFSET(pDevice, T3_MAC_ADDR_LOW_MAILBOX);	pDevice->NodeAddress[2] = (LM_UINT8) (Value32 >> 24);	pDevice->NodeAddress[3] = (LM_UINT8) (Value32 >> 16);	pDevice->NodeAddress[4] = (LM_UINT8) (Value32 >> 8);	pDevice->NodeAddress[5] = (LM_UINT8) Value32;	Status = LM_STATUS_SUCCESS;    }    else    {	Status = LM_NvramRead(pDevice, 0x7c, &Value32);	if(Status == LM_STATUS_SUCCESS)	{	    pDevice->NodeAddress[0] = (LM_UINT8) (Value32 >> 16);	    pDevice->NodeAddress[1] = (LM_UINT8) (Value32 >> 24);	    Status = LM_NvramRead(pDevice, 0x80, &Value32);	    pDevice->NodeAddress[2] = (LM_UINT8) Value32;	    pDevice->NodeAddress[3] = (LM_UINT8) (Value32 >> 8);	    pDevice->NodeAddress[4] = (LM_UINT8) (Value32 >> 16);	    pDevice->NodeAddress[5] = (LM_UINT8) (Value32 >> 24);	}    }    /* Assign a default address. */    if(Status != LM_STATUS_SUCCESS)    {#ifndef EMBEDDED	printk(KERN_ERR "Cannot get MAC addr from NVRAM. Using default.\n");#endif	pDevice->NodeAddress[0] = 0x00; pDevice->NodeAddress[1] = 0x10;	pDevice->NodeAddress[2] = 0x18; pDevice->NodeAddress[3] = 0x68;	pDevice->NodeAddress[4] = 0x61; pDevice->NodeAddress[5] = 0x76;    }    pDevice->PermanentNodeAddress[0] = pDevice->NodeAddress[0];    pDevice->PermanentNodeAddress[1] = pDevice->NodeAddress[1];    pDevice->PermanentNodeAddress[2] = pDevice->NodeAddress[2];    pDevice->PermanentNodeAddress[3] = pDevice->NodeAddress[3];    pDevice->PermanentNodeAddress[4] = pDevice->NodeAddress[4];    pDevice->PermanentNodeAddress[5] = pDevice->NodeAddress[5];    /* Initialize the default values. */    pDevice->NoTxPseudoHdrChksum = FALSE;    pDevice->NoRxPseudoHdrChksum = FALSE;    pDevice->NicSendBd = FALSE;    pDevice->TxPacketDescCnt = DEFAULT_TX_PACKET_DESC_COUNT;    pDevice->RxStdDescCnt = DEFAULT_STD_RCV_DESC_COUNT;    pDevice->RxCoalescingTicks = DEFAULT_RX_COALESCING_TICKS;    pDevice->TxCoalescingTicks = DEFAULT_TX_COALESCING_TICKS;    pDevice->RxMaxCoalescedFrames = DEFAULT_RX_MAX_COALESCED_FRAMES;    pDevice->TxMaxCoalescedFrames = DEFAULT_TX_MAX_COALESCED_FRAMES;    pDevice->RxCoalescingTicksDuringInt = BAD_DEFAULT_VALUE;    pDevice->TxCoalescingTicksDuringInt = BAD_DEFAULT_VALUE;    pDevice->RxMaxCoalescedFramesDuringInt = BAD_DEFAULT_VALUE;    pDevice->TxMaxCoalescedFramesDuringInt = BAD_DEFAULT_VALUE;    pDevice->StatsCoalescingTicks = DEFAULT_STATS_COALESCING_TICKS;    pDevice->EnableMWI = FALSE;    pDevice->TxMtu = MAX_ETHERNET_PACKET_SIZE_NO_CRC;    pDevice->RxMtu = MAX_ETHERNET_PACKET_SIZE_NO_CRC;    pDevice->DisableAutoNeg = FALSE;    pDevice->PhyIntMode = T3_PHY_INT_MODE_AUTO;    pDevice->LinkChngMode = T3_LINK_CHNG_MODE_AUTO;    pDevice->LedMode = LED_MODE_AUTO;    pDevice->ResetPhyOnInit = TRUE;    pDevice->DelayPciGrant = TRUE;    pDevice->UseTaggedStatus = FALSE;    pDevice->OneDmaAtOnce = BAD_DEFAULT_VALUE;    pDevice->DmaMbufLowMark = T3_DEF_DMA_MBUF_LOW_WMARK_JUMBO;    pDevice->RxMacMbufLowMark = T3_DEF_RX_MAC_MBUF_LOW_WMARK_JUMBO;    pDevice->MbufHighMark = T3_DEF_MBUF_HIGH_WMARK_JUMBO;    pDevice->RequestedMediaType = LM_REQUESTED_MEDIA_TYPE_AUTO;    pDevice->TaskOffloadCap = LM_TASK_OFFLOAD_NONE;    pDevice->FlowControlCap = LM_FLOW_CONTROL_AUTO_PAUSE;    pDevice->EnableTbi = FALSE;#if INCLUDE_TBI_SUPPORT    pDevice->PollTbiLink = BAD_DEFAULT_VALUE;#endif    switch (T3_ASIC_REV(pDevice->ChipRevId))    {    case T3_ASIC_REV_5704:	pDevice->MbufBase = T3_NIC_MBUF_POOL_ADDR;	pDevice->MbufSize = T3_NIC_MBUF_POOL_SIZE64;	break;    default:	pDevice->MbufBase = T3_NIC_MBUF_POOL_ADDR;	pDevice->MbufSize = T3_NIC_MBUF_POOL_SIZE96;	break;    }    pDevice->LinkStatus = LM_STATUS_LINK_DOWN;    pDevice->QueueRxPackets = TRUE;    pDevice->EnableWireSpeed = TRUE;#if T3_JUMBO_RCV_RCB_ENTRY_COUNT    pDevice->RxJumboDescCnt = DEFAULT_JUMBO_RCV_DESC_COUNT;#endif /* T3_JUMBO_RCV_RCB_ENTRY_COUNT */    /* Make this is a known adapter. */    pAdapterInfo = LM_GetAdapterInfoBySsid(pDevice->SubsystemVendorId,	pDevice->SubsystemId);    pDevice->BondId = REG_RD(pDevice, Grc.MiscCfg) & GRC_MISC_BD_ID_MASK;    if (pDevice->BondId != GRC_MISC_BD_ID_5700 &&	pDevice->BondId != GRC_MISC_BD_ID_5701 &&	pDevice->BondId != GRC_MISC_BD_ID_5702FE &&	pDevice->BondId != GRC_MISC_BD_ID_5703 &&	pDevice->BondId != GRC_MISC_BD_ID_5703S &&	pDevice->BondId != GRC_MISC_BD_ID_5704 &&	pDevice->BondId != GRC_MISC_BD_ID_5704CIOBE)    {	return LM_STATUS_UNKNOWN_ADAPTER;    }    pDevice->SplitModeEnable = SPLIT_MODE_DISABLE;    if ((pDevice->ChipRevId == T3_CHIP_ID_5704_A0) &&	(pDevice->BondId == GRC_MISC_BD_ID_5704CIOBE))    {	pDevice->SplitModeEnable = SPLIT_MODE_ENABLE;	pDevice->SplitModeMaxReq = SPLIT_MODE_5704_MAX_REQ;    }    /* Get Eeprom info. */    Value32 = MEM_RD_OFFSET(pDevice, T3_NIC_DATA_SIG_ADDR);    if (Value32 == T3_NIC_DATA_SIG)    {	EeSigFound = TRUE;	Value32 = MEM_RD_OFFSET(pDevice, T3_NIC_DATA_NIC_CFG_ADDR);	/* Determine PHY type. */	switch (Value32 & T3_NIC_CFG_PHY_TYPE_MASK)	{	    case T3_NIC_CFG_PHY_TYPE_COPPER:		EePhyTypeSerdes = FALSE;		break;	    case T3_NIC_CFG_PHY_TYPE_FIBER:		EePhyTypeSerdes = TRUE;		break;	    default:		EePhyTypeSerdes = FALSE;		break;	}	/* Determine PHY led mode. */	if(T3_ASIC_REV(pDevice->ChipRevId) == T3_ASIC_REV_5700 ||	    T3_ASIC_REV(pDevice->ChipRevId) == T3_ASIC_REV_5701)	{	    switch(Value32 & T3_NIC_CFG_LED_MODE_MASK)	    {		case T3_NIC_CFG_LED_MODE_TRIPLE_SPEED:		    EePhyLedMode = LED_MODE_THREE_LINK;		    break;		case T3_NIC_CFG_LED_MODE_LINK_SPEED:		    EePhyLedMode = LED_MODE_LINK10;		    break;		default:		    EePhyLedMode = LED_MODE_AUTO;		    break;	    }	}	else	{	    switch(Value32 & T3_NIC_CFG_LED_MODE_MASK)	    {		case T3_NIC_CFG_LED_MODE_OPEN_DRAIN:		    EePhyLedMode = LED_MODE_OPEN_DRAIN;		    break;		case T3_NIC_CFG_LED_MODE_OUTPUT:		    EePhyLedMode = LED_MODE_OUTPUT;		    break;		default:		    EePhyLedMode = LED_MODE_AUTO;		    break;	    }	}	if(pDevice->ChipRevId == T3_CHIP_ID_5703_A1 ||	    pDevice->ChipRevId == T3_CHIP_ID_5703_A2)	{	    /* Enable EEPROM write protection. */	    if(Value32 & T3_NIC_EEPROM_WP)	    {		pDevice->EepromWp = TRUE;	    }	}	/* Get the PHY Id. */	Value32 = MEM_RD_OFFSET(pDevice, T3_NIC_DATA_PHY_ID_ADDR);	if (Value32)	{	    EePhyId = (((Value32 & T3_NIC_PHY_ID1_MASK) >> 16) &		PHY_ID1_OUI_MASK) << 10;	    Value32 = Value32 & T3_NIC_PHY_ID2_MASK;	    EePhyId |= ((Value32 & PHY_ID2_OUI_MASK) << 16) |	      (Value32 & PHY_ID2_MODEL_MASK) | (Value32 & PHY_ID2_REV_MASK);	}	else	{	    EePhyId = 0;	}    }    else    {	EeSigFound = FALSE;    }    /* Set the PHY address. */    pDevice->PhyAddr = PHY_DEVICE_ID;    /* Disable auto polling. */    pDevice->MiMode = 0xc0000;    REG_WR(pDevice, MacCtrl.MiMode, pDevice->MiMode);    MM_Wait(40);    /* Get the PHY id. */    LM_ReadPhy(pDevice, PHY_ID1_REG, &Value32);    pDevice->PhyId = (Value32 & PHY_ID1_OUI_MASK) << 10;    LM_ReadPhy(pDevice, PHY_ID2_REG, &Value32);    pDevice->PhyId |= ((Value32 & PHY_ID2_OUI_MASK) << 16) |      (Value32 & PHY_ID2_MODEL_MASK) | (Value32 & PHY_ID2_REV_MASK);    /* Set the EnableTbi flag to false if we have a copper PHY. */    switch(pDevice->PhyId & PHY_ID_MASK)    {	case PHY_BCM5400_PHY_ID:	    pDevice->EnableTbi = FALSE;	    break;	case PHY_BCM5401_PHY_ID:	    pDevice->EnableTbi = FALSE;	    break;	case PHY_BCM5411_PHY_ID:	    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 |

⌨️ 快捷键说明

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