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

📄 mcffec.c

📁 U-boot源码 ARM7启动代码
💻 C
📖 第 1 页 / 共 2 页
字号:
	       fecp->rmon_t_jab);	printf("rmon_t_col         %x - %x\n", (int)&fecp->rmon_t_col,	       fecp->rmon_t_col);	printf("rmon_t_p64         %x - %x\n", (int)&fecp->rmon_t_p64,	       fecp->rmon_t_p64);	printf("rmon_t_p65to127    %x - %x\n", (int)&fecp->rmon_t_p65to127,	       fecp->rmon_t_p65to127);	printf("rmon_t_p128to255   %x - %x\n", (int)&fecp->rmon_t_p128to255,	       fecp->rmon_t_p128to255);	printf("rmon_t_p256to511   %x - %x\n", (int)&fecp->rmon_t_p256to511,	       fecp->rmon_t_p256to511);	printf("rmon_t_p512to1023  %x - %x\n", (int)&fecp->rmon_t_p512to1023,	       fecp->rmon_t_p512to1023);	printf("rmon_t_p1024to2047 %x - %x\n", (int)&fecp->rmon_t_p1024to2047,	       fecp->rmon_t_p1024to2047);	printf("rmon_t_p_gte2048   %x - %x\n", (int)&fecp->rmon_t_p_gte2048,	       fecp->rmon_t_p_gte2048);	printf("rmon_t_octets      %x - %x\n", (int)&fecp->rmon_t_octets,	       fecp->rmon_t_octets);	printf("\n");	printf("ieee_t_drop      %x - %x\n", (int)&fecp->ieee_t_drop,	       fecp->ieee_t_drop);	printf("ieee_t_frame_ok  %x - %x\n", (int)&fecp->ieee_t_frame_ok,	       fecp->ieee_t_frame_ok);	printf("ieee_t_1col      %x - %x\n", (int)&fecp->ieee_t_1col,	       fecp->ieee_t_1col);	printf("ieee_t_mcol      %x - %x\n", (int)&fecp->ieee_t_mcol,	       fecp->ieee_t_mcol);	printf("ieee_t_def       %x - %x\n", (int)&fecp->ieee_t_def,	       fecp->ieee_t_def);	printf("ieee_t_lcol      %x - %x\n", (int)&fecp->ieee_t_lcol,	       fecp->ieee_t_lcol);	printf("ieee_t_excol     %x - %x\n", (int)&fecp->ieee_t_excol,	       fecp->ieee_t_excol);	printf("ieee_t_macerr    %x - %x\n", (int)&fecp->ieee_t_macerr,	       fecp->ieee_t_macerr);	printf("ieee_t_cserr     %x - %x\n", (int)&fecp->ieee_t_cserr,	       fecp->ieee_t_cserr);	printf("ieee_t_sqe       %x - %x\n", (int)&fecp->ieee_t_sqe,	       fecp->ieee_t_sqe);	printf("ieee_t_fdxfc     %x - %x\n", (int)&fecp->ieee_t_fdxfc,	       fecp->ieee_t_fdxfc);	printf("ieee_t_octets_ok %x - %x\n", (int)&fecp->ieee_t_octets_ok,	       fecp->ieee_t_octets_ok);	printf("\n");	printf("rmon_r_drop        %x - %x\n", (int)&fecp->rmon_r_drop,	       fecp->rmon_r_drop);	printf("rmon_r_packets     %x - %x\n", (int)&fecp->rmon_r_packets,	       fecp->rmon_r_packets);	printf("rmon_r_bc_pkt      %x - %x\n", (int)&fecp->rmon_r_bc_pkt,	       fecp->rmon_r_bc_pkt);	printf("rmon_r_mc_pkt      %x - %x\n", (int)&fecp->rmon_r_mc_pkt,	       fecp->rmon_r_mc_pkt);	printf("rmon_r_crc_align   %x - %x\n", (int)&fecp->rmon_r_crc_align,	       fecp->rmon_r_crc_align);	printf("rmon_r_undersize   %x - %x\n", (int)&fecp->rmon_r_undersize,	       fecp->rmon_r_undersize);	printf("rmon_r_oversize    %x - %x\n", (int)&fecp->rmon_r_oversize,	       fecp->rmon_r_oversize);	printf("rmon_r_frag        %x - %x\n", (int)&fecp->rmon_r_frag,	       fecp->rmon_r_frag);	printf("rmon_r_jab         %x - %x\n", (int)&fecp->rmon_r_jab,	       fecp->rmon_r_jab);	printf("rmon_r_p64         %x - %x\n", (int)&fecp->rmon_r_p64,	       fecp->rmon_r_p64);	printf("rmon_r_p65to127    %x - %x\n", (int)&fecp->rmon_r_p65to127,	       fecp->rmon_r_p65to127);	printf("rmon_r_p128to255   %x - %x\n", (int)&fecp->rmon_r_p128to255,	       fecp->rmon_r_p128to255);	printf("rmon_r_p256to511   %x - %x\n", (int)&fecp->rmon_r_p256to511,	       fecp->rmon_r_p256to511);	printf("rmon_r_p512to1023  %x - %x\n", (int)&fecp->rmon_r_p512to1023,	       fecp->rmon_r_p512to1023);	printf("rmon_r_p1024to2047 %x - %x\n", (int)&fecp->rmon_r_p1024to2047,	       fecp->rmon_r_p1024to2047);	printf("rmon_r_p_gte2048   %x - %x\n", (int)&fecp->rmon_r_p_gte2048,	       fecp->rmon_r_p_gte2048);	printf("rmon_r_octets      %x - %x\n", (int)&fecp->rmon_r_octets,	       fecp->rmon_r_octets);	printf("\n");	printf("ieee_r_drop      %x - %x\n", (int)&fecp->ieee_r_drop,	       fecp->ieee_r_drop);	printf("ieee_r_frame_ok  %x - %x\n", (int)&fecp->ieee_r_frame_ok,	       fecp->ieee_r_frame_ok);	printf("ieee_r_crc       %x - %x\n", (int)&fecp->ieee_r_crc,	       fecp->ieee_r_crc);	printf("ieee_r_align     %x - %x\n", (int)&fecp->ieee_r_align,	       fecp->ieee_r_align);	printf("ieee_r_macerr    %x - %x\n", (int)&fecp->ieee_r_macerr,	       fecp->ieee_r_macerr);	printf("ieee_r_fdxfc     %x - %x\n", (int)&fecp->ieee_r_fdxfc,	       fecp->ieee_r_fdxfc);	printf("ieee_r_octets_ok %x - %x\n", (int)&fecp->ieee_r_octets_ok,	       fecp->ieee_r_octets_ok);	printf("\n\n\n");}#endifint fec_init(struct eth_device *dev, bd_t * bd){	struct fec_info_s *info = dev->priv;	volatile fec_t *fecp = (fec_t *) (info->iobase);	int i;	u8 *ea = NULL;	fecpin_setclear(dev, 1);	fec_reset(dev);#if defined(CONFIG_CMD_MII) || defined (CONFIG_MII) || \	defined (CFG_DISCOVER_PHY)	mii_init();	setFecDuplexSpeed(fecp, bd, info->dup_spd);#else#ifndef CFG_DISCOVER_PHY	setFecDuplexSpeed(fecp, bd, (FECDUPLEX << 16) | FECSPEED);#endif				/* ifndef CFG_DISCOVER_PHY */#endif				/* CONFIG_CMD_MII || CONFIG_MII */	/* We use strictly polling mode only */	fecp->eimr = 0;	/* Clear any pending interrupt */	fecp->eir = 0xffffffff;	/* Set station address   */	if ((u32) fecp == CFG_FEC0_IOBASE) {#ifdef CFG_FEC1_IOBASE		volatile fec_t *fecp1 = (fec_t *) (CFG_FEC1_IOBASE);		ea = &bd->bi_enet1addr[0];		fecp1->palr =		    (ea[0] << 24) | (ea[1] << 16) | (ea[2] << 8) | (ea[3]);		fecp1->paur = (ea[4] << 24) | (ea[5] << 16);#endif		ea = &bd->bi_enetaddr[0];		fecp->palr =		    (ea[0] << 24) | (ea[1] << 16) | (ea[2] << 8) | (ea[3]);		fecp->paur = (ea[4] << 24) | (ea[5] << 16);	} else {#ifdef CFG_FEC0_IOBASE		volatile fec_t *fecp0 = (fec_t *) (CFG_FEC0_IOBASE);		ea = &bd->bi_enetaddr[0];		fecp0->palr =		    (ea[0] << 24) | (ea[1] << 16) | (ea[2] << 8) | (ea[3]);		fecp0->paur = (ea[4] << 24) | (ea[5] << 16);#endif#ifdef CFG_FEC1_IOBASE		ea = &bd->bi_enet1addr[0];		fecp->palr =		    (ea[0] << 24) | (ea[1] << 16) | (ea[2] << 8) | (ea[3]);		fecp->paur = (ea[4] << 24) | (ea[5] << 16);#endif	}	/* Clear unicast address hash table */	fecp->iaur = 0;	fecp->ialr = 0;	/* Clear multicast address hash table */	fecp->gaur = 0;	fecp->galr = 0;	/* Set maximum receive buffer size. */	fecp->emrbr = PKT_MAXBLR_SIZE;	/*	 * Setup Buffers and Buffer Desriptors	 */	info->rxIdx = 0;	info->txIdx = 0;	/*	 * Setup Receiver Buffer Descriptors (13.14.24.18)	 * Settings:	 *     Empty, Wrap	 */	for (i = 0; i < PKTBUFSRX; i++) {		info->rxbd[i].cbd_sc = BD_ENET_RX_EMPTY;		info->rxbd[i].cbd_datlen = 0;	/* Reset */		info->rxbd[i].cbd_bufaddr = (uint) NetRxPackets[i];	}	info->rxbd[PKTBUFSRX - 1].cbd_sc |= BD_ENET_RX_WRAP;	/*	 * Setup Ethernet Transmitter Buffer Descriptors (13.14.24.19)	 * Settings:	 *    Last, Tx CRC	 */	for (i = 0; i < TX_BUF_CNT; i++) {		info->txbd[i].cbd_sc = BD_ENET_TX_LAST | BD_ENET_TX_TC;		info->txbd[i].cbd_datlen = 0;	/* Reset */		info->txbd[i].cbd_bufaddr = (uint) (&info->txbuf[0]);	}	info->txbd[TX_BUF_CNT - 1].cbd_sc |= BD_ENET_TX_WRAP;	/* Set receive and transmit descriptor base */	fecp->erdsr = (unsigned int)(&info->rxbd[0]);	fecp->etdsr = (unsigned int)(&info->txbd[0]);	/* Now enable the transmit and receive processing */	fecp->ecr |= FEC_ECR_ETHER_EN;	/* And last, try to fill Rx Buffer Descriptors */	fecp->rdar = 0x01000000;	/* Descriptor polling active    */	return 1;}void fec_reset(struct eth_device *dev){	struct fec_info_s *info = dev->priv;	volatile fec_t *fecp = (fec_t *) (info->iobase);	int i;	fecp->ecr = FEC_ECR_RESET;	for (i = 0; (fecp->ecr & FEC_ECR_RESET) && (i < FEC_RESET_DELAY); ++i) {		udelay(1);	}	if (i == FEC_RESET_DELAY) {		printf("FEC_RESET_DELAY timeout\n");	}}void fec_halt(struct eth_device *dev){	struct fec_info_s *info = dev->priv;	fec_reset(dev);	fecpin_setclear(dev, 0);	info->rxIdx = info->txIdx = 0;	memset(info->rxbd, 0, PKTBUFSRX * sizeof(cbd_t));	memset(info->txbd, 0, TX_BUF_CNT * sizeof(cbd_t));	memset(info->txbuf, 0, DBUF_LENGTH);}int mcffec_initialize(bd_t * bis){	struct eth_device *dev;	int i;	for (i = 0; i < sizeof(fec_info) / sizeof(fec_info[0]); i++) {		dev =		    (struct eth_device *)memalign(CFG_CACHELINE_SIZE,						  sizeof *dev);		if (dev == NULL)			hang();		memset(dev, 0, sizeof(*dev));		sprintf(dev->name, "FEC%d", fec_info[i].index);		dev->priv = &fec_info[i];		dev->init = fec_init;		dev->halt = fec_halt;		dev->send = fec_send;		dev->recv = fec_recv;		/* setup Receive and Transmit buffer descriptor */		fec_info[i].rxbd =		    (cbd_t *) memalign(CFG_CACHELINE_SIZE,				       (PKTBUFSRX * sizeof(cbd_t)));		fec_info[i].txbd =		    (cbd_t *) memalign(CFG_CACHELINE_SIZE,				       (TX_BUF_CNT * sizeof(cbd_t)));		fec_info[i].txbuf =		    (char *)memalign(CFG_CACHELINE_SIZE, DBUF_LENGTH);#ifdef ET_DEBUG		printf("rxbd %x txbd %x\n",		       (int)fec_info[i].rxbd, (int)fec_info[i].txbd);#endif		fec_info[i].phy_name = (char *)memalign(CFG_CACHELINE_SIZE, 32);		eth_register(dev);#if defined(CONFIG_MII) || defined(CONFIG_CMD_MII)		miiphy_register(dev->name,				mcffec_miiphy_read, mcffec_miiphy_write);#endif	}	/* default speed */	bis->bi_ethspeed = 10;	return 1;}#endif				/* CONFIG_CMD_NET, FEC_ENET & NET_MULTI */#endif				/* CONFIG_MCFFEC */

⌨️ 快捷键说明

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