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

📄 ucc_geth.c

📁 linux 内核源代码
💻 C
📖 第 1 页 / 共 5 页
字号:
			   (u32) & ugeth->p_tx_glbl_pram->temoder,			   in_be16(&ugeth->p_tx_glbl_pram->temoder));		ugeth_info("sqptr        : addr - 0x%08x, val - 0x%08x",			   (u32) & ugeth->p_tx_glbl_pram->sqptr,			   in_be32(&ugeth->p_tx_glbl_pram->sqptr));		ugeth_info("schedulerbasepointer: addr - 0x%08x, val - 0x%08x",			   (u32) & ugeth->p_tx_glbl_pram->schedulerbasepointer,			   in_be32(&ugeth->p_tx_glbl_pram->				   schedulerbasepointer));		ugeth_info("txrmonbaseptr: addr - 0x%08x, val - 0x%08x",			   (u32) & ugeth->p_tx_glbl_pram->txrmonbaseptr,			   in_be32(&ugeth->p_tx_glbl_pram->txrmonbaseptr));		ugeth_info("tstate       : addr - 0x%08x, val - 0x%08x",			   (u32) & ugeth->p_tx_glbl_pram->tstate,			   in_be32(&ugeth->p_tx_glbl_pram->tstate));		ugeth_info("iphoffset[0] : addr - 0x%08x, val - 0x%02x",			   (u32) & ugeth->p_tx_glbl_pram->iphoffset[0],			   ugeth->p_tx_glbl_pram->iphoffset[0]);		ugeth_info("iphoffset[1] : addr - 0x%08x, val - 0x%02x",			   (u32) & ugeth->p_tx_glbl_pram->iphoffset[1],			   ugeth->p_tx_glbl_pram->iphoffset[1]);		ugeth_info("iphoffset[2] : addr - 0x%08x, val - 0x%02x",			   (u32) & ugeth->p_tx_glbl_pram->iphoffset[2],			   ugeth->p_tx_glbl_pram->iphoffset[2]);		ugeth_info("iphoffset[3] : addr - 0x%08x, val - 0x%02x",			   (u32) & ugeth->p_tx_glbl_pram->iphoffset[3],			   ugeth->p_tx_glbl_pram->iphoffset[3]);		ugeth_info("iphoffset[4] : addr - 0x%08x, val - 0x%02x",			   (u32) & ugeth->p_tx_glbl_pram->iphoffset[4],			   ugeth->p_tx_glbl_pram->iphoffset[4]);		ugeth_info("iphoffset[5] : addr - 0x%08x, val - 0x%02x",			   (u32) & ugeth->p_tx_glbl_pram->iphoffset[5],			   ugeth->p_tx_glbl_pram->iphoffset[5]);		ugeth_info("iphoffset[6] : addr - 0x%08x, val - 0x%02x",			   (u32) & ugeth->p_tx_glbl_pram->iphoffset[6],			   ugeth->p_tx_glbl_pram->iphoffset[6]);		ugeth_info("iphoffset[7] : addr - 0x%08x, val - 0x%02x",			   (u32) & ugeth->p_tx_glbl_pram->iphoffset[7],			   ugeth->p_tx_glbl_pram->iphoffset[7]);		ugeth_info("vtagtable[0] : addr - 0x%08x, val - 0x%08x",			   (u32) & ugeth->p_tx_glbl_pram->vtagtable[0],			   in_be32(&ugeth->p_tx_glbl_pram->vtagtable[0]));		ugeth_info("vtagtable[1] : addr - 0x%08x, val - 0x%08x",			   (u32) & ugeth->p_tx_glbl_pram->vtagtable[1],			   in_be32(&ugeth->p_tx_glbl_pram->vtagtable[1]));		ugeth_info("vtagtable[2] : addr - 0x%08x, val - 0x%08x",			   (u32) & ugeth->p_tx_glbl_pram->vtagtable[2],			   in_be32(&ugeth->p_tx_glbl_pram->vtagtable[2]));		ugeth_info("vtagtable[3] : addr - 0x%08x, val - 0x%08x",			   (u32) & ugeth->p_tx_glbl_pram->vtagtable[3],			   in_be32(&ugeth->p_tx_glbl_pram->vtagtable[3]));		ugeth_info("vtagtable[4] : addr - 0x%08x, val - 0x%08x",			   (u32) & ugeth->p_tx_glbl_pram->vtagtable[4],			   in_be32(&ugeth->p_tx_glbl_pram->vtagtable[4]));		ugeth_info("vtagtable[5] : addr - 0x%08x, val - 0x%08x",			   (u32) & ugeth->p_tx_glbl_pram->vtagtable[5],			   in_be32(&ugeth->p_tx_glbl_pram->vtagtable[5]));		ugeth_info("vtagtable[6] : addr - 0x%08x, val - 0x%08x",			   (u32) & ugeth->p_tx_glbl_pram->vtagtable[6],			   in_be32(&ugeth->p_tx_glbl_pram->vtagtable[6]));		ugeth_info("vtagtable[7] : addr - 0x%08x, val - 0x%08x",			   (u32) & ugeth->p_tx_glbl_pram->vtagtable[7],			   in_be32(&ugeth->p_tx_glbl_pram->vtagtable[7]));		ugeth_info("tqptr        : addr - 0x%08x, val - 0x%08x",			   (u32) & ugeth->p_tx_glbl_pram->tqptr,			   in_be32(&ugeth->p_tx_glbl_pram->tqptr));	}	if (ugeth->p_rx_glbl_pram) {		ugeth_info("RX global param:");		ugeth_info("Base address: 0x%08x", (u32) ugeth->p_rx_glbl_pram);		ugeth_info("remoder         : addr - 0x%08x, val - 0x%08x",			   (u32) & ugeth->p_rx_glbl_pram->remoder,			   in_be32(&ugeth->p_rx_glbl_pram->remoder));		ugeth_info("rqptr           : addr - 0x%08x, val - 0x%08x",			   (u32) & ugeth->p_rx_glbl_pram->rqptr,			   in_be32(&ugeth->p_rx_glbl_pram->rqptr));		ugeth_info("typeorlen       : addr - 0x%08x, val - 0x%04x",			   (u32) & ugeth->p_rx_glbl_pram->typeorlen,			   in_be16(&ugeth->p_rx_glbl_pram->typeorlen));		ugeth_info("rxgstpack       : addr - 0x%08x, val - 0x%02x",			   (u32) & ugeth->p_rx_glbl_pram->rxgstpack,			   ugeth->p_rx_glbl_pram->rxgstpack);		ugeth_info("rxrmonbaseptr   : addr - 0x%08x, val - 0x%08x",			   (u32) & ugeth->p_rx_glbl_pram->rxrmonbaseptr,			   in_be32(&ugeth->p_rx_glbl_pram->rxrmonbaseptr));		ugeth_info("intcoalescingptr: addr - 0x%08x, val - 0x%08x",			   (u32) & ugeth->p_rx_glbl_pram->intcoalescingptr,			   in_be32(&ugeth->p_rx_glbl_pram->intcoalescingptr));		ugeth_info("rstate          : addr - 0x%08x, val - 0x%02x",			   (u32) & ugeth->p_rx_glbl_pram->rstate,			   ugeth->p_rx_glbl_pram->rstate);		ugeth_info("mrblr           : addr - 0x%08x, val - 0x%04x",			   (u32) & ugeth->p_rx_glbl_pram->mrblr,			   in_be16(&ugeth->p_rx_glbl_pram->mrblr));		ugeth_info("rbdqptr         : addr - 0x%08x, val - 0x%08x",			   (u32) & ugeth->p_rx_glbl_pram->rbdqptr,			   in_be32(&ugeth->p_rx_glbl_pram->rbdqptr));		ugeth_info("mflr            : addr - 0x%08x, val - 0x%04x",			   (u32) & ugeth->p_rx_glbl_pram->mflr,			   in_be16(&ugeth->p_rx_glbl_pram->mflr));		ugeth_info("minflr          : addr - 0x%08x, val - 0x%04x",			   (u32) & ugeth->p_rx_glbl_pram->minflr,			   in_be16(&ugeth->p_rx_glbl_pram->minflr));		ugeth_info("maxd1           : addr - 0x%08x, val - 0x%04x",			   (u32) & ugeth->p_rx_glbl_pram->maxd1,			   in_be16(&ugeth->p_rx_glbl_pram->maxd1));		ugeth_info("maxd2           : addr - 0x%08x, val - 0x%04x",			   (u32) & ugeth->p_rx_glbl_pram->maxd2,			   in_be16(&ugeth->p_rx_glbl_pram->maxd2));		ugeth_info("ecamptr         : addr - 0x%08x, val - 0x%08x",			   (u32) & ugeth->p_rx_glbl_pram->ecamptr,			   in_be32(&ugeth->p_rx_glbl_pram->ecamptr));		ugeth_info("l2qt            : addr - 0x%08x, val - 0x%08x",			   (u32) & ugeth->p_rx_glbl_pram->l2qt,			   in_be32(&ugeth->p_rx_glbl_pram->l2qt));		ugeth_info("l3qt[0]         : addr - 0x%08x, val - 0x%08x",			   (u32) & ugeth->p_rx_glbl_pram->l3qt[0],			   in_be32(&ugeth->p_rx_glbl_pram->l3qt[0]));		ugeth_info("l3qt[1]         : addr - 0x%08x, val - 0x%08x",			   (u32) & ugeth->p_rx_glbl_pram->l3qt[1],			   in_be32(&ugeth->p_rx_glbl_pram->l3qt[1]));		ugeth_info("l3qt[2]         : addr - 0x%08x, val - 0x%08x",			   (u32) & ugeth->p_rx_glbl_pram->l3qt[2],			   in_be32(&ugeth->p_rx_glbl_pram->l3qt[2]));		ugeth_info("l3qt[3]         : addr - 0x%08x, val - 0x%08x",			   (u32) & ugeth->p_rx_glbl_pram->l3qt[3],			   in_be32(&ugeth->p_rx_glbl_pram->l3qt[3]));		ugeth_info("l3qt[4]         : addr - 0x%08x, val - 0x%08x",			   (u32) & ugeth->p_rx_glbl_pram->l3qt[4],			   in_be32(&ugeth->p_rx_glbl_pram->l3qt[4]));		ugeth_info("l3qt[5]         : addr - 0x%08x, val - 0x%08x",			   (u32) & ugeth->p_rx_glbl_pram->l3qt[5],			   in_be32(&ugeth->p_rx_glbl_pram->l3qt[5]));		ugeth_info("l3qt[6]         : addr - 0x%08x, val - 0x%08x",			   (u32) & ugeth->p_rx_glbl_pram->l3qt[6],			   in_be32(&ugeth->p_rx_glbl_pram->l3qt[6]));		ugeth_info("l3qt[7]         : addr - 0x%08x, val - 0x%08x",			   (u32) & ugeth->p_rx_glbl_pram->l3qt[7],			   in_be32(&ugeth->p_rx_glbl_pram->l3qt[7]));		ugeth_info("vlantype        : addr - 0x%08x, val - 0x%04x",			   (u32) & ugeth->p_rx_glbl_pram->vlantype,			   in_be16(&ugeth->p_rx_glbl_pram->vlantype));		ugeth_info("vlantci         : addr - 0x%08x, val - 0x%04x",			   (u32) & ugeth->p_rx_glbl_pram->vlantci,			   in_be16(&ugeth->p_rx_glbl_pram->vlantci));		for (i = 0; i < 64; i++)			ugeth_info		    ("addressfiltering[%d]: addr - 0x%08x, val - 0x%02x",			     i,			     (u32) & ugeth->p_rx_glbl_pram->addressfiltering[i],			     ugeth->p_rx_glbl_pram->addressfiltering[i]);		ugeth_info("exfGlobalParam  : addr - 0x%08x, val - 0x%08x",			   (u32) & ugeth->p_rx_glbl_pram->exfGlobalParam,			   in_be32(&ugeth->p_rx_glbl_pram->exfGlobalParam));	}	if (ugeth->p_send_q_mem_reg) {		ugeth_info("Send Q memory registers:");		ugeth_info("Base address: 0x%08x",			   (u32) ugeth->p_send_q_mem_reg);		for (i = 0; i < ugeth->ug_info->numQueuesTx; i++) {			ugeth_info("SQQD[%d]:", i);			ugeth_info("Base address: 0x%08x",				   (u32) & ugeth->p_send_q_mem_reg->sqqd[i]);			mem_disp((u8 *) & ugeth->p_send_q_mem_reg->sqqd[i],				 sizeof(struct ucc_geth_send_queue_qd));		}	}	if (ugeth->p_scheduler) {		ugeth_info("Scheduler:");		ugeth_info("Base address: 0x%08x", (u32) ugeth->p_scheduler);		mem_disp((u8 *) ugeth->p_scheduler,			 sizeof(*ugeth->p_scheduler));	}	if (ugeth->p_tx_fw_statistics_pram) {		ugeth_info("TX FW statistics pram:");		ugeth_info("Base address: 0x%08x",			   (u32) ugeth->p_tx_fw_statistics_pram);		mem_disp((u8 *) ugeth->p_tx_fw_statistics_pram,			 sizeof(*ugeth->p_tx_fw_statistics_pram));	}	if (ugeth->p_rx_fw_statistics_pram) {		ugeth_info("RX FW statistics pram:");		ugeth_info("Base address: 0x%08x",			   (u32) ugeth->p_rx_fw_statistics_pram);		mem_disp((u8 *) ugeth->p_rx_fw_statistics_pram,			 sizeof(*ugeth->p_rx_fw_statistics_pram));	}	if (ugeth->p_rx_irq_coalescing_tbl) {		ugeth_info("RX IRQ coalescing tables:");		ugeth_info("Base address: 0x%08x",			   (u32) ugeth->p_rx_irq_coalescing_tbl);		for (i = 0; i < ugeth->ug_info->numQueuesRx; i++) {			ugeth_info("RX IRQ coalescing table entry[%d]:", i);			ugeth_info("Base address: 0x%08x",				   (u32) & ugeth->p_rx_irq_coalescing_tbl->				   coalescingentry[i]);			ugeth_info		("interruptcoalescingmaxvalue: addr - 0x%08x, val - 0x%08x",			     (u32) & ugeth->p_rx_irq_coalescing_tbl->			     coalescingentry[i].interruptcoalescingmaxvalue,			     in_be32(&ugeth->p_rx_irq_coalescing_tbl->				     coalescingentry[i].				     interruptcoalescingmaxvalue));			ugeth_info		("interruptcoalescingcounter : addr - 0x%08x, val - 0x%08x",			     (u32) & ugeth->p_rx_irq_coalescing_tbl->			     coalescingentry[i].interruptcoalescingcounter,			     in_be32(&ugeth->p_rx_irq_coalescing_tbl->				     coalescingentry[i].				     interruptcoalescingcounter));		}	}	if (ugeth->p_rx_bd_qs_tbl) {		ugeth_info("RX BD QS tables:");		ugeth_info("Base address: 0x%08x", (u32) ugeth->p_rx_bd_qs_tbl);		for (i = 0; i < ugeth->ug_info->numQueuesRx; i++) {			ugeth_info("RX BD QS table[%d]:", i);			ugeth_info("Base address: 0x%08x",				   (u32) & ugeth->p_rx_bd_qs_tbl[i]);			ugeth_info			    ("bdbaseptr        : addr - 0x%08x, val - 0x%08x",			     (u32) & ugeth->p_rx_bd_qs_tbl[i].bdbaseptr,			     in_be32(&ugeth->p_rx_bd_qs_tbl[i].bdbaseptr));			ugeth_info			    ("bdptr            : addr - 0x%08x, val - 0x%08x",			     (u32) & ugeth->p_rx_bd_qs_tbl[i].bdptr,			     in_be32(&ugeth->p_rx_bd_qs_tbl[i].bdptr));			ugeth_info			    ("externalbdbaseptr: addr - 0x%08x, val - 0x%08x",			     (u32) & ugeth->p_rx_bd_qs_tbl[i].externalbdbaseptr,			     in_be32(&ugeth->p_rx_bd_qs_tbl[i].				     externalbdbaseptr));			ugeth_info			    ("externalbdptr    : addr - 0x%08x, val - 0x%08x",			     (u32) & ugeth->p_rx_bd_qs_tbl[i].externalbdptr,			     in_be32(&ugeth->p_rx_bd_qs_tbl[i].externalbdptr));			ugeth_info("ucode RX Prefetched BDs:");			ugeth_info("Base address: 0x%08x",				   (u32)				   qe_muram_addr(in_be32						 (&ugeth->p_rx_bd_qs_tbl[i].						  bdbaseptr)));			mem_disp((u8 *)				 qe_muram_addr(in_be32					       (&ugeth->p_rx_bd_qs_tbl[i].						bdbaseptr)),				 sizeof(struct ucc_geth_rx_prefetched_bds));		}	}	if (ugeth->p_init_enet_param_shadow) {		int size;		ugeth_info("Init enet param shadow:");		ugeth_info("Base address: 0x%08x",			   (u32) ugeth->p_init_enet_param_shadow);		mem_disp((u8 *) ugeth->p_init_enet_param_shadow,			 sizeof(*ugeth->p_init_enet_param_shadow));		size = sizeof(struct ucc_geth_thread_rx_pram);		if (ugeth->ug_info->rxExtendedFiltering) {			size +=			    THREAD_RX_PRAM_ADDITIONAL_FOR_EXTENDED_FILTERING;			if (ugeth->ug_info->largestexternallookupkeysize ==			    QE_FLTR_TABLE_LOOKUP_KEY_SIZE_8_BYTES)				size +=			THREAD_RX_PRAM_ADDITIONAL_FOR_EXTENDED_FILTERING_8;			if (ugeth->ug_info->largestexternallookupkeysize ==			    QE_FLTR_TABLE_LOOKUP_KEY_SIZE_16_BYTES)				size +=			THREAD_RX_PRAM_ADDITIONAL_FOR_EXTENDED_FILTERING_16;		}		dump_init_enet_entries(ugeth,				       &(ugeth->p_init_enet_param_shadow->					 txthread[0]),				       ENET_INIT_PARAM_MAX_ENTRIES_TX,				       sizeof(struct ucc_geth_thread_tx_pram),				       ugeth->ug_info->riscTx, 0);		dump_init_enet_entries(ugeth,				       &(ugeth->p_init_enet_param_shadow->					 rxthread[0]),				       ENET_INIT_PARAM_MAX_ENTRIES_RX, size,				       ugeth->ug_info->riscRx, 1);	}}#endif /* DEBUG */static void init_default_reg_vals(volatile u32 *upsmr_register,				  volatile u32 *maccfg1_register,				  volatile u32 *maccfg2_register){	out_be32(upsmr_register, UCC_GETH_UPSMR_INIT);	out_be32(maccfg1_register, UCC_GETH_MACCFG1_INIT);	out_be32(maccfg2_register, UCC_GETH_MACCFG2_INIT);}static int init_half_duplex_params(int alt_beb,				   int back_pressure_no_backoff,				   int no_backoff,				   int excess_defer,				   u8 alt_beb_truncation,				   u8 max_retransmissions,				   u8 collision_window,				   volatile u32 *hafdup_register){	u32 value = 0;	if ((alt_beb_truncation > HALFDUP_ALT_BEB_TRUNCATION_MAX) ||	    (max_retransmissions > HALFDUP_MAX_RETRANSMISSION_MAX) ||	    (collision_window > HALFDUP_COLLISION_WINDOW_MAX))		return -EINVAL;	value = (u32) (alt_beb_truncation << HALFDUP_ALT_BEB_TRUNCATION_SHIFT);	if (alt_beb)		value |= HALFDUP_ALT_BEB;	if (back_pressure_no_backoff)		value |= HALFDUP_BACK_PRESSURE_NO_BACKOFF;	if (no_backoff)		value |= HALFDUP_NO_BACKOFF;	if (excess_defer)		value |= HALFDUP_EXCESSIVE_DEFER;	value |= (max_retransmissions << HALFDUP_MAX_RETRANSMISSION_SHIFT);	value |= collision_window;	out_be32(hafdup_register, value);	return 0;}static int init_inter_frame_gap_params(u8 non_btb_cs_ipg,				       u8 non_btb_ipg,				       u8 min_ifg,				       u8 btb_ipg,				       volatile u32 *ipgifg_register){	u32 value = 0;	/* Non-Back-to-back IPG part 1 should be <= Non-Back-to-back	IPG part 2 */	if (non_btb_cs_ipg > non_btb_ipg)		return -EINVAL;	if ((non_btb_cs_ipg > IPGIFG_NON_BACK_TO_BACK_IFG_PART1_MAX) ||	    (non_btb_ipg > IPGIFG_NON_BACK_TO_BACK_IFG_PART2_MAX) ||	    /*(min_ifg        > IPGIFG_MINIMUM_IFG_ENFORCEMENT_MAX) || */	    (btb_ipg > IPGIFG_BACK_TO_BACK_IFG_MAX))		return -EINVAL;	value |=	    ((non_btb_cs_ipg << IPGIFG_NON_BACK_TO_BACK_IFG_PART1_SHIFT) &	     IPGIFG_NBTB_CS_IPG_MASK);	value |=	    ((non_btb_ipg << IPGIFG_NON_BACK_TO_BACK_IFG_PART2_SHIFT) &	     IPGIFG_NBTB_IPG_MASK);	value |=	    ((min_ifg << IPGIFG_MINIMUM_IFG_ENFORCEMENT_SHIFT) &	     IPGIFG_MIN_IFG_MASK);	value |= (btb_ipg & IPGIFG_BTB_IPG_MASK);	out_be32(ipgifg_register, value);	return 0;}int init_flow_control_params(u32 automatic_flow_control_mode,				    int rx_flow_control_enable,				    int tx_flow_control_enable,				    u16 pause_period,				    u16 extension_field,				    volatile u32 *upsmr_register,				    volatile u32 *uempr_register,				    volatile u32 *maccfg1_register){	u32 value = 0;	/* Set UEMPR register */	value = (u32) pause_period << UEMPR_PAUSE_TIME_VALUE_SHIFT;	value |= (u32) extension_field << UEMPR_EXTENDED_PAUSE_TIME_VALUE_SHIFT;	out_be32(uempr_register, value);	/* Set UPSMR register */	value = in_be32(upsmr_register);	value |= automatic_flow_control_mode;	out_be32(upsmr_register, value);	value = in_be32(maccfg1_register);	if (rx_flow_control_enable)		value |= MACCFG1_FLOW_RX;	if (tx_flow_control_enable)		value |= MACCFG1_FLOW_TX;	out_be32(maccfg1_register, value);	return 0;}static int init_hw_statistics_gathering_mode(int enable_hardware_statistics,					     int auto_zero_hardware_statistics,					     volatile u32 *upsmr_register,					     volatile u16 *uescr_register){	u32 upsmr_value = 0;	u16 uescr_value = 0;	/* Enable hardware statistics gathering if requested */	if (enable_hardware_statistics) {		upsmr_value = in_be32(upsmr_register);		upsmr_value |= UPSMR_HSE;		out_be32(upsmr_register, upsmr_value);	}	/* Clear hardware statistics counters */	uescr_value = in_be16(uescr_register);	uescr_value |= UESCR_CLRCNT;	/* Automatically zero hardware statistics counters on read,	if requested */	if (auto_zero_hardware_statistics)		uescr_value |= UESCR_AUTOZ;	out_be16(uescr_register, uescr_value);	return 0;}static int init_firmware_statistics_gathering_mode(int		enable_tx_firmware_statistics,		int enable_rx_firmware_statistics,

⌨️ 快捷键说明

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