diff options
Diffstat (limited to 'drivers/net/ethernet/cadence/macb.h')
| -rw-r--r-- | drivers/net/ethernet/cadence/macb.h | 67 | 
1 files changed, 60 insertions, 7 deletions
| diff --git a/drivers/net/ethernet/cadence/macb.h b/drivers/net/ethernet/cadence/macb.h index 335e288f5314..570908b93578 100644 --- a/drivers/net/ethernet/cadence/macb.h +++ b/drivers/net/ethernet/cadence/macb.h @@ -10,10 +10,15 @@  #ifndef _MACB_H  #define _MACB_H +#define MACB_GREGS_NBR 16 +#define MACB_GREGS_VERSION 1 +  /* MACB register offsets */  #define MACB_NCR				0x0000  #define MACB_NCFGR				0x0004  #define MACB_NSR				0x0008 +#define MACB_TAR				0x000c /* AT91RM9200 only */ +#define MACB_TCR				0x0010 /* AT91RM9200 only */  #define MACB_TSR				0x0014  #define MACB_RBQP				0x0018  #define MACB_TBQP				0x001c @@ -69,6 +74,12 @@  #define GEM_HRT					0x0084  #define GEM_SA1B				0x0088  #define GEM_SA1T				0x008C +#define GEM_SA2B				0x0090 +#define GEM_SA2T				0x0094 +#define GEM_SA3B				0x0098 +#define GEM_SA3T				0x009C +#define GEM_SA4B				0x00A0 +#define GEM_SA4T				0x00A4  #define GEM_OTX					0x0100  #define GEM_DCFG1				0x0280  #define GEM_DCFG2				0x0284 @@ -133,6 +144,8 @@  #define MACB_RTY_SIZE				1  #define MACB_PAE_OFFSET				13  #define MACB_PAE_SIZE				1 +#define MACB_RM9200_RMII_OFFSET			13 /* AT91RM9200 only */ +#define MACB_RM9200_RMII_SIZE			1  /* AT91RM9200 only */  #define MACB_RBOF_OFFSET			14  #define MACB_RBOF_SIZE				2  #define MACB_RLCE_OFFSET			16 @@ -145,6 +158,8 @@  #define MACB_IRXFCS_SIZE			1  /* GEM specific NCFGR bitfields. */ +#define GEM_GBE_OFFSET				10 +#define GEM_GBE_SIZE				1  #define GEM_CLK_OFFSET				18  #define GEM_CLK_SIZE				3  #define GEM_DBW_OFFSET				21 @@ -156,8 +171,19 @@  #define GEM_DBW128				2  /* Bitfields in DMACFG. */ +#define GEM_FBLDO_OFFSET			0 +#define GEM_FBLDO_SIZE				5 +#define GEM_RXBMS_OFFSET			8 +#define GEM_RXBMS_SIZE				2 +#define GEM_TXPBMS_OFFSET			10 +#define GEM_TXPBMS_SIZE				1 +#define GEM_TXCOEN_OFFSET			11 +#define GEM_TXCOEN_SIZE				1  #define GEM_RXBS_OFFSET				16  #define GEM_RXBS_SIZE				8 +#define GEM_DDRP_OFFSET				24 +#define GEM_DDRP_SIZE				1 +  /* Bitfields in NSR */  #define MACB_NSR_LINK_OFFSET			0 @@ -178,6 +204,8 @@  #define MACB_TGO_SIZE				1  #define MACB_BEX_OFFSET				4  #define MACB_BEX_SIZE				1 +#define MACB_RM9200_BNQ_OFFSET			4 /* AT91RM9200 only */ +#define MACB_RM9200_BNQ_SIZE			1 /* AT91RM9200 only */  #define MACB_COMP_OFFSET			5  #define MACB_COMP_SIZE				1  #define MACB_UND_OFFSET				6 @@ -246,6 +274,8 @@  /* Bitfields in USRIO (AT91) */  #define MACB_RMII_OFFSET			0  #define MACB_RMII_SIZE				1 +#define GEM_RGMII_OFFSET			0	/* GEM gigabit mode */ +#define GEM_RGMII_SIZE				1  #define MACB_CLKEN_OFFSET			1  #define MACB_CLKEN_SIZE				1 @@ -352,7 +382,12 @@  		__v; \  	}) -struct dma_desc { +/** + * struct macb_dma_desc - Hardware DMA descriptor + * @addr: DMA address of data buffer + * @ctrl: Control and status bits + */ +struct macb_dma_desc {  	u32	addr;  	u32	ctrl;  }; @@ -417,7 +452,12 @@ struct dma_desc {  #define MACB_TX_USED_OFFSET			31  #define MACB_TX_USED_SIZE			1 -struct ring_info { +/** + * struct macb_tx_skb - data about an skb which is being transmitted + * @skb: skb currently being transmitted + * @mapping: DMA address of the skb's data buffer + */ +struct macb_tx_skb {  	struct sk_buff		*skb;  	dma_addr_t		mapping;  }; @@ -502,12 +542,12 @@ struct macb {  	void __iomem		*regs;  	unsigned int		rx_tail; -	struct dma_desc		*rx_ring; +	struct macb_dma_desc	*rx_ring;  	void			*rx_buffers;  	unsigned int		tx_head, tx_tail; -	struct dma_desc		*tx_ring; -	struct ring_info	*tx_skb; +	struct macb_dma_desc	*tx_ring; +	struct macb_tx_skb	*tx_skb;  	spinlock_t		lock;  	struct platform_device	*pdev; @@ -515,6 +555,7 @@ struct macb {  	struct clk		*hclk;  	struct net_device	*dev;  	struct napi_struct	napi; +	struct work_struct	tx_error_task;  	struct net_device_stats	stats;  	union {  		struct macb_stats	macb; @@ -525,8 +566,6 @@ struct macb {  	dma_addr_t		tx_ring_dma;  	dma_addr_t		rx_buffers_dma; -	unsigned int		rx_pending, tx_pending; -  	struct mii_bus		*mii_bus;  	struct phy_device	*phy_dev;  	unsigned int 		link; @@ -534,8 +573,22 @@ struct macb {  	unsigned int 		duplex;  	phy_interface_t		phy_interface; + +	/* AT91RM9200 transmit */ +	struct sk_buff *skb;			/* holds skb until xmit interrupt completes */ +	dma_addr_t skb_physaddr;		/* phys addr from pci_map_single */ +	int skb_length;				/* saved skb length for pci_unmap_single */  }; +extern const struct ethtool_ops macb_ethtool_ops; + +int macb_mii_init(struct macb *bp); +int macb_ioctl(struct net_device *dev, struct ifreq *rq, int cmd); +struct net_device_stats *macb_get_stats(struct net_device *dev); +void macb_set_rx_mode(struct net_device *dev); +void macb_set_hwaddr(struct macb *bp); +void macb_get_hwaddr(struct macb *bp); +  static inline bool macb_is_gem(struct macb *bp)  {  	return MACB_BFEXT(IDNUM, macb_readl(bp, MID)) == 0x2; |