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

📄 tigon3.c

📁 U-boot源码 ARM7启动代码
💻 C
📖 第 1 页 / 共 5 页
字号:
	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 |		    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;		}

⌨️ 快捷键说明

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