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

📄 gmac.h

📁 linux和2410结合开发 用他可以生成2410所需的zImage文件
💻 H
📖 第 1 页 / 共 3 页
字号:
#define GM_PCS_DATAPATH_INTERNAL	0x01	/* Internal serial link */#define GM_PCS_DATAPATH_SERDES		0x02	/* 10-bit Serdes interface */#define GM_PCS_DATAPATH_MII		0x04	/* Select mii/gmii mode */#define GM_PCS_DATAPATH_GMII_OUT	0x08	/* serial mode only, copy data to gmii *//* -- 0x9054	RW	PCS serdes control */#define GM_PCS_SERDES_CTRL		(0x9054 | REG_SZ_8)/* -- 0x9058	RW	PCS serdes output select */#define GM_PCS_SERDES_SELECT		(0x9058 | REG_SZ_8)/* -- 0x905c	RW	PCS serdes state */#define GM_PCS_SERDES_STATE		(0x905c | REG_SZ_8)	/*	 * PHY registers	 *//* * Standard PHY registers (from de4x5.h) */#define MII_CR       0x00          /* MII Management Control Register */#define MII_SR       0x01          /* MII Management Status Register */#define MII_ID0      0x02          /* PHY Identifier Register 0 */#define MII_ID1      0x03          /* PHY Identifier Register 1 */#define MII_ANA      0x04          /* Auto Negotiation Advertisement */#define MII_ANLPA    0x05          /* Auto Negotiation Link Partner Ability */#define MII_ANE      0x06          /* Auto Negotiation Expansion */#define MII_ANP      0x07          /* Auto Negotiation Next Page TX *//*** MII Management Control Register*/#define MII_CR_RST	 0x8000         /* RESET the PHY chip */#define MII_CR_LPBK	 0x4000         /* Loopback enable */#define MII_CR_SPD 	 0x2000         /* 0: 10Mb/s; 1: 100Mb/s */#define MII_CR_10  	 0x0000         /* Set 10Mb/s */#define MII_CR_100 	 0x2000         /* Set 100Mb/s */#define MII_CR_ASSE	 0x1000         /* Auto Speed Select Enable */#define MII_CR_PD  	 0x0800         /* Power Down */#define MII_CR_ISOL	 0x0400         /* Isolate Mode */#define MII_CR_RAN 	 0x0200         /* Restart Auto Negotiation */#define MII_CR_FDM 	 0x0100         /* Full Duplex Mode */#define MII_CR_CTE 	 0x0080         /* Collision Test Enable */#define MII_CR_SPEEDSEL2 0x0040		/* Speed selection 2 on BCM *//*** MII Management Status Register*/#define MII_SR_T4C  0x8000         /* 100BASE-T4 capable */#define MII_SR_TXFD 0x4000         /* 100BASE-TX Full Duplex capable */#define MII_SR_TXHD 0x2000         /* 100BASE-TX Half Duplex capable */#define MII_SR_TFD  0x1000         /* 10BASE-T Full Duplex capable */#define MII_SR_THD  0x0800         /* 10BASE-T Half Duplex capable */#define MII_SR_ASSC 0x0020         /* Auto Speed Selection Complete*/#define MII_SR_RFD  0x0010         /* Remote Fault Detected */#define MII_SR_ANC  0x0008         /* Auto Negotiation capable */#define MII_SR_LKS  0x0004         /* Link Status */#define MII_SR_JABD 0x0002         /* Jabber Detect */#define MII_SR_XC   0x0001         /* Extended Capabilities *//*** MII Management Auto Negotiation Advertisement Register*/#define MII_ANA_TAF  0x03e0        /* Technology Ability Field */#define MII_ANA_T4AM 0x0200        /* T4 Technology Ability Mask */#define MII_ANA_TXAM 0x0180        /* TX Technology Ability Mask */#define MII_ANA_FDAM 0x0140        /* Full Duplex Technology Ability Mask */#define MII_ANA_HDAM 0x02a0        /* Half Duplex Technology Ability Mask */#define MII_ANA_100M 0x0380        /* 100Mb Technology Ability Mask */#define MII_ANA_10M  0x0060        /* 10Mb Technology Ability Mask */#define MII_ANA_CSMA 0x0001        /* CSMA-CD Capable *//*** MII Management Auto Negotiation Remote End Register*/#define MII_ANLPA_NP   0x8000      /* Next Page (Enable) */#define MII_ANLPA_ACK  0x4000      /* Remote Acknowledge */#define MII_ANLPA_RF   0x2000      /* Remote Fault */#define MII_ANLPA_TAF  0x03e0      /* Technology Ability Field */#define MII_ANLPA_T4AM 0x0200      /* T4 Technology Ability Mask */#define MII_ANLPA_TXAM 0x0180      /* TX Technology Ability Mask */#define MII_ANLPA_FDAM 0x0140      /* Full Duplex Technology Ability Mask */#define MII_ANLPA_HDAM 0x02a0      /* Half Duplex Technology Ability Mask */#define MII_ANLPA_100M 0x0380      /* 100Mb Technology Ability Mask */#define MII_ANLPA_10M  0x0060      /* 10Mb Technology Ability Mask */#define MII_ANLPA_CSMA 0x0001      /* CSMA-CD Capable */#define MII_ANLPA_PAUS 0x0400 /* Generic PHYs *  * These GENERIC values assumes that the PHY devices follow 802.3u and * allow parallel detection to set the link partner ability register. * Detection of 100Base-TX [H/F Duplex] and 100Base-T4 is supported. *//* * Model-specific PHY registers * * Note: Only the BCM5201 is described here for now. I'll add the 5400 once *       I see a machine using it in real world. *//* Supported PHYs (phy_type field ) */#define PHY_B5400	0x5400#define PHY_B5401	0x5401#define PHY_B5411	0x5411#define PHY_B5201	0x5201#define PHY_B5221	0x5221#define PHY_LXT971	0x0971#define PHY_UNKNOWN	0/* Identification (for multi-PHY) */#define MII_BCM5201_OUI                         0x001018#define MII_BCM5201_MODEL                       0x21#define MII_BCM5201_REV                         0x01#define MII_BCM5201_ID                          ((MII_BCM5201_OUI << 10) | (MII_BCM5201_MODEL << 4))#define MII_BCM5201_MASK                        0xfffffff0#define MII_BCM5221_OUI                         0x001018#define MII_BCM5221_MODEL                       0x1e#define MII_BCM5221_REV                         0x00#define MII_BCM5221_ID                          ((MII_BCM5221_OUI << 10) | (MII_BCM5221_MODEL << 4))#define MII_BCM5221_MASK                        0xfffffff0#define MII_BCM5400_OUI                         0x000818#define MII_BCM5400_MODEL                       0x04#define MII_BCM5400_REV                         0x01#define MII_BCM5400_ID                          ((MII_BCM5400_OUI << 10) | (MII_BCM5400_MODEL << 4))#define MII_BCM5400_MASK                        0xfffffff0#define MII_BCM5401_OUI                         0x000818#define MII_BCM5401_MODEL                       0x05#define MII_BCM5401_REV                         0x01#define MII_BCM5401_ID                          ((MII_BCM5401_OUI << 10) | (MII_BCM5401_MODEL << 4))#define MII_BCM5401_MASK                        0xfffffff0#define MII_BCM5411_OUI                         0x000818#define MII_BCM5411_MODEL                       0x07#define MII_BCM5411_REV                         0x01#define MII_BCM5411_ID                          ((MII_BCM5411_OUI << 10) | (MII_BCM5411_MODEL << 4))#define MII_BCM5411_MASK                        0xfffffff0#define MII_LXT971_OUI                          0x0004de#define MII_LXT971_MODEL                        0x0e#define MII_LXT971_REV                          0x00#define MII_LXT971_ID                           ((MII_LXT971_OUI << 10) | (MII_LXT971_MODEL << 4))#define MII_LXT971_MASK                         0xfffffff0/* BCM5201 AUX STATUS register */#define MII_BCM5201_AUXCTLSTATUS		0x18#define MII_BCM5201_AUXCTLSTATUS_DUPLEX		0x0001#define MII_BCM5201_AUXCTLSTATUS_SPEED		0x0002/* MII BCM5201 MULTIPHY interrupt register */#define MII_BCM5201_INTERRUPT			0x1A#define MII_BCM5201_INTERRUPT_INTENABLE		0x4000#define MII_BCM5201_AUXMODE2			0x1B#define MII_BCM5201_AUXMODE2_LOWPOWER		0x0008#define MII_BCM5201_MULTIPHY                    0x1E/* MII BCM5201 MULTIPHY register bits */#define MII_BCM5201_MULTIPHY_SERIALMODE         0x0002#define MII_BCM5201_MULTIPHY_SUPERISOLATE       0x0008/* MII BCM5400 1000-BASET Control register */#define MII_BCM5400_GB_CONTROL			0x09#define MII_BCM5400_GB_CONTROL_FULLDUPLEXCAP	0x0200/* MII BCM5400 AUXCONTROL register */#define MII_BCM5400_AUXCONTROL                  0x18#define MII_BCM5400_AUXCONTROL_PWR10BASET       0x0004/* MII BCM5400 AUXSTATUS register */#define MII_BCM5400_AUXSTATUS                   0x19#define MII_BCM5400_AUXSTATUS_LINKMODE_MASK     0x0700#define MII_BCM5400_AUXSTATUS_LINKMODE_SHIFT    8  /* MII LXT971 STATUS2 register */#define MII_LXT971_STATUS2			0x11#define MII_LXT971_STATUS2_SPEED		0x4000#define MII_LXT971_STATUS2_LINK			0x0400#define MII_LXT971_STATUS2_FULLDUPLEX		0x0200#define MII_LXT971_STATUS2_AUTONEG_COMPLETE	0x0080	/*	 * DMA descriptors	 *//*  * Descriptor counts and buffer sizes */#define NTX			64		/* must be power of 2 */#define NTX_CONF		GM_TX_RING_SZ_64#define NRX			64		/* must be power of 2 */#define NRX_CONF		GM_RX_RING_SZ_64#define RX_COPY_THRESHOLD	256#define GMAC_BUFFER_ALIGN	32		/* Align on a cache line */#define RX_BUF_ALLOC_SIZE	(ETH_FRAME_LEN + GMAC_BUFFER_ALIGN + 2)#define RX_OFFSET		2/* * Definitions of Rx and Tx descriptors */struct gmac_dma_desc {	unsigned int	size;		/* data size and OWN bit */	unsigned int	flags;		/* flags */	unsigned int	lo_addr;	/* phys addr, low 32 bits */	unsigned int	hi_addr;};/* * Rx bits */ /* Bits in size */#define RX_SZ_OWN		0x80000000	/* 1 = owned by chip */#define RX_SZ_MASK		0x7FFF0000#define RX_SZ_SHIFT		16#define RX_SZ_CKSUM_MASK	0x0000FFFF/* Bits in flags */#define RX_FL_CRC_ERROR		0x40000000#define RX_FL_ALT_ADDR		0x20000000	/* Packet rcv. from alt MAC address *//*  * Tx bits *//* Bits in size */#define TX_SZ_MASK		0x00007FFF#define TX_SZ_CRC_MASK		0x00FF8000#define TX_SZ_CRC_STUFF		0x1F000000#define TX_SZ_CRC_ENABLE	0x20000000#define TX_SZ_EOP		0x40000000#define TX_SZ_SOP		0x80000000/* Bits in flags */#define TX_FL_INTERRUPT		0x00000001#define TX_FL_NO_CRC		0x00000002	/*	 * Other stuffs	 */	 struct gmac {	volatile unsigned int		*regs;	/* hardware registers, virtual addr */	struct net_device		*dev;	struct device_node		*of_node;	unsigned long			tx_desc_page;	/* page for DMA descriptors */	unsigned long			rx_desc_page;	/* page for DMA descriptors */	volatile struct			gmac_dma_desc *rxring;	struct sk_buff			*rx_buff[NRX];	int				next_rx;	volatile struct	gmac_dma_desc	*txring;	struct sk_buff			*tx_buff[NTX];	int				next_tx;	int				tx_gone;	int				phy_addr;	unsigned int			phy_id;	int				phy_type;	int				phy_status;	/* Cached PHY status */	int				full_duplex;	/* Current set to full duplex */	int				gigabit;	/* Current set to 1000BT */	struct net_device_stats		stats;	u8				pci_bus;	u8				pci_devfn;	spinlock_t			lock;	int				opened;	int				sleeping;	struct net_device		*next_gmac;};/* Register access macros. We hope the preprocessor will be smart enough * to optimize them into one single access instruction */#define GM_OUT(reg, v)		(((reg) & REG_SZ_32) ? out_le32(gm->regs + \					(((reg) & REG_MASK)>>2), (v))  \				: (((reg) & REG_SZ_16) ? out_le16((volatile u16 *) \					(gm->regs + (((reg) & REG_MASK)>>2)), (v))  \				: out_8((volatile u8 *)(gm->regs + \					(((reg) & REG_MASK)>>2)), (v))))#define GM_IN(reg)		(((reg) & REG_SZ_32) ? in_le32(gm->regs + \					(((reg) & REG_MASK)>>2))  \				: (((reg) & REG_SZ_16) ? in_le16((volatile u16 *) \					(gm->regs + (((reg) & REG_MASK)>>2)))  \				: in_8((volatile u8 *)(gm->regs + \					(((reg) & REG_MASK)>>2)))))#define GM_BIS(r, v)		GM_OUT((r), GM_IN(r) | (v))#define GM_BIC(r, v)		GM_OUT((r), GM_IN(r) & ~(v))/* Wrapper to alloc_skb to test various alignements */#define GMAC_ALIGNED_RX_SKB_ADDR(addr) \        ((((unsigned long)(addr) + GMAC_BUFFER_ALIGN - 1) & \        ~(GMAC_BUFFER_ALIGN - 1)) - (unsigned long)(addr))        static inline struct sk_buff *gmac_alloc_skb(unsigned int length, int gfp_flags){	struct sk_buff *skb;	skb = alloc_skb(length + GMAC_BUFFER_ALIGN, gfp_flags);	if(skb) {		int offset = GMAC_ALIGNED_RX_SKB_ADDR(skb->data);		if(offset)			skb_reserve(skb, offset);	}	return skb;}

⌨️ 快捷键说明

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