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

📄 fec_8xx.h

📁 linux-2.6.15.6
💻 H
字号:
#ifndef FEC_8XX_H#define FEC_8XX_H#include <linux/mii.h>#include <linux/netdevice.h>#include <linux/types.h>/* HW info *//* CRC polynomium used by the FEC for the multicast group filtering */#define FEC_CRC_POLY   0x04C11DB7#define MII_ADVERTISE_HALF	(ADVERTISE_100HALF | \				 ADVERTISE_10HALF | ADVERTISE_CSMA)#define MII_ADVERTISE_ALL	(ADVERTISE_100FULL | \				 ADVERTISE_10FULL | MII_ADVERTISE_HALF)/* Interrupt events/masks.*/#define FEC_ENET_HBERR	0x80000000U	/* Heartbeat error          */#define FEC_ENET_BABR	0x40000000U	/* Babbling receiver        */#define FEC_ENET_BABT	0x20000000U	/* Babbling transmitter     */#define FEC_ENET_GRA	0x10000000U	/* Graceful stop complete   */#define FEC_ENET_TXF	0x08000000U	/* Full frame transmitted   */#define FEC_ENET_TXB	0x04000000U	/* A buffer was transmitted */#define FEC_ENET_RXF	0x02000000U	/* Full frame received      */#define FEC_ENET_RXB	0x01000000U	/* A buffer was received    */#define FEC_ENET_MII	0x00800000U	/* MII interrupt            */#define FEC_ENET_EBERR	0x00400000U	/* SDMA bus error           */#define FEC_ECNTRL_PINMUX	0x00000004#define FEC_ECNTRL_ETHER_EN	0x00000002#define FEC_ECNTRL_RESET	0x00000001#define FEC_RCNTRL_BC_REJ	0x00000010#define FEC_RCNTRL_PROM		0x00000008#define FEC_RCNTRL_MII_MODE	0x00000004#define FEC_RCNTRL_DRT		0x00000002#define FEC_RCNTRL_LOOP		0x00000001#define FEC_TCNTRL_FDEN		0x00000004#define FEC_TCNTRL_HBC		0x00000002#define FEC_TCNTRL_GTS		0x00000001/* values for MII phy_status */#define PHY_CONF_ANE	0x0001	/* 1 auto-negotiation enabled     */#define PHY_CONF_LOOP	0x0002	/* 1 loopback mode enabled        */#define PHY_CONF_SPMASK	0x00f0	/* mask for speed                 */#define PHY_CONF_10HDX	0x0010	/* 10 Mbit half duplex supported  */#define PHY_CONF_10FDX	0x0020	/* 10 Mbit full duplex supported  */#define PHY_CONF_100HDX	0x0040	/* 100 Mbit half duplex supported */#define PHY_CONF_100FDX	0x0080	/* 100 Mbit full duplex supported */#define PHY_STAT_LINK	0x0100	/* 1 up - 0 down                  */#define PHY_STAT_FAULT	0x0200	/* 1 remote fault                 */#define PHY_STAT_ANC	0x0400	/* 1 auto-negotiation complete    */#define PHY_STAT_SPMASK	0xf000	/* mask for speed                 */#define PHY_STAT_10HDX	0x1000	/* 10 Mbit half duplex selected   */#define PHY_STAT_10FDX	0x2000	/* 10 Mbit full duplex selected   */#define PHY_STAT_100HDX	0x4000	/* 100 Mbit half duplex selected  */#define PHY_STAT_100FDX	0x8000	/* 100 Mbit full duplex selected  */typedef struct phy_info {	unsigned int id;	const char *name;	void (*startup) (struct net_device * dev);	void (*shutdown) (struct net_device * dev);	void (*ack_int) (struct net_device * dev);} phy_info_t;/* The FEC stores dest/src/type, data, and checksum for receive packets. */#define MAX_MTU 1508		/* Allow fullsized pppoe packets over VLAN */#define MIN_MTU 46		/* this is data size */#define CRC_LEN 4#define PKT_MAXBUF_SIZE		(MAX_MTU+ETH_HLEN+CRC_LEN)#define PKT_MINBUF_SIZE		(MIN_MTU+ETH_HLEN+CRC_LEN)/* Must be a multiple of 4 */#define PKT_MAXBLR_SIZE		((PKT_MAXBUF_SIZE+3) & ~3)/* This is needed so that invalidate_xxx wont invalidate too much */#define ENET_RX_FRSIZE		L1_CACHE_ALIGN(PKT_MAXBUF_SIZE)/* platform interface */struct fec_platform_info {	int fec_no;		/* FEC index                  */	int use_mdio;		/* use external MII           */	int phy_addr;		/* the phy address            */	int fec_irq, phy_irq;	/* the irq for the controller */	int rx_ring, tx_ring;	/* number of buffers on rx    */	int sys_clk;		/* system clock               */	__u8 macaddr[6];	/* mac address                */	int rx_copybreak;	/* limit we copy small frames */	int use_napi;		/* use NAPI                   */	int napi_weight;	/* NAPI weight                */};/* forward declaration */struct fec;struct fec_enet_private {	spinlock_t lock;	/* during all ops except TX pckt processing */	spinlock_t tx_lock;	/* during fec_start_xmit and fec_tx         */	int fecno;	struct fec *fecp;	const struct fec_platform_info *fpi;	int rx_ring, tx_ring;	dma_addr_t ring_mem_addr;	void *ring_base;	struct sk_buff **rx_skbuff;	struct sk_buff **tx_skbuff;	cbd_t *rx_bd_base;	/* Address of Rx and Tx buffers.    */	cbd_t *tx_bd_base;	cbd_t *dirty_tx;	/* ring entries to be free()ed.     */	cbd_t *cur_rx;	cbd_t *cur_tx;	int tx_free;	struct net_device_stats stats;	struct timer_list phy_timer_list;	const struct phy_info *phy;	unsigned int fec_phy_speed;	__u32 msg_enable;	struct mii_if_info mii_if;};/***************************************************************************/void fec_restart(struct net_device *dev, int duplex, int speed);void fec_stop(struct net_device *dev);/***************************************************************************/int fec_mii_read(struct net_device *dev, int phy_id, int location);void fec_mii_write(struct net_device *dev, int phy_id, int location, int value);int fec_mii_phy_id_detect(struct net_device *dev);void fec_mii_startup(struct net_device *dev);void fec_mii_shutdown(struct net_device *dev);void fec_mii_ack_int(struct net_device *dev);void fec_mii_link_status_change_check(struct net_device *dev, int init_media);/***************************************************************************/#define FEC1_NO	0x00#define FEC2_NO	0x01#define FEC3_NO	0x02int fec_8xx_init_one(const struct fec_platform_info *fpi,		     struct net_device **devp);int fec_8xx_cleanup_one(struct net_device *dev);/***************************************************************************/#define DRV_MODULE_NAME		"fec_8xx"#define PFX DRV_MODULE_NAME	": "#define DRV_MODULE_VERSION	"0.1"#define DRV_MODULE_RELDATE	"May 6, 2004"/***************************************************************************/int fec_8xx_platform_init(void);void fec_8xx_platform_cleanup(void);/***************************************************************************//* FEC access macros */#if defined(CONFIG_8xx)/* for a 8xx __raw_xxx's are sufficient */#define __fec_out32(addr, x)	__raw_writel(x, addr)#define __fec_out16(addr, x)	__raw_writew(x, addr)#define __fec_in32(addr)	__raw_readl(addr)#define __fec_in16(addr)	__raw_readw(addr)#else/* for others play it safe */#define __fec_out32(addr, x)	out_be32(addr, x)#define __fec_out16(addr, x)	out_be16(addr, x)#define __fec_in32(addr)	in_be32(addr)#define __fec_in16(addr)	in_be16(addr)#endif/* write */#define FW(_fecp, _reg, _v) __fec_out32(&(_fecp)->fec_ ## _reg, (_v))/* read */#define FR(_fecp, _reg)	__fec_in32(&(_fecp)->fec_ ## _reg)/* set bits */#define FS(_fecp, _reg, _v) FW(_fecp, _reg, FR(_fecp, _reg) | (_v))/* clear bits */#define FC(_fecp, _reg, _v) FW(_fecp, _reg, FR(_fecp, _reg) & ~(_v))/* buffer descriptor access macros *//* write */#define CBDW_SC(_cbd, _sc) 		__fec_out16(&(_cbd)->cbd_sc, (_sc))#define CBDW_DATLEN(_cbd, _datlen)	__fec_out16(&(_cbd)->cbd_datlen, (_datlen))#define CBDW_BUFADDR(_cbd, _bufaddr)	__fec_out32(&(_cbd)->cbd_bufaddr, (_bufaddr))/* read */#define CBDR_SC(_cbd) 			__fec_in16(&(_cbd)->cbd_sc)#define CBDR_DATLEN(_cbd)		__fec_in16(&(_cbd)->cbd_datlen)#define CBDR_BUFADDR(_cbd)		__fec_in32(&(_cbd)->cbd_bufaddr)/* set bits */#define CBDS_SC(_cbd, _sc) 		CBDW_SC(_cbd, CBDR_SC(_cbd) | (_sc))/* clear bits */#define CBDC_SC(_cbd, _sc) 		CBDW_SC(_cbd, CBDR_SC(_cbd) & ~(_sc))/***************************************************************************/#endif

⌨️ 快捷键说明

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