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

📄 pasemi_mac.h

📁 linux 内核源代码
💻 H
📖 第 1 页 / 共 2 页
字号:
/* * Copyright (C) 2006 PA Semi, Inc * * Driver for the PA6T-1682M onchip 1G/10G Ethernet MACs, soft state and * hardware register layouts. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as * published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA */#ifndef PASEMI_MAC_H#define PASEMI_MAC_H#include <linux/ethtool.h>#include <linux/netdevice.h>#include <linux/spinlock.h>#include <linux/phy.h>struct pasemi_mac_txring {	spinlock_t	 lock;	u64		*ring;	dma_addr_t	 dma;	unsigned int	 size;	unsigned int	 next_to_fill;	unsigned int	 next_to_clean;	struct pasemi_mac_buffer *ring_info;	char		 irq_name[10];  /* "eth%d tx" */};struct pasemi_mac_rxring {	spinlock_t	 lock;	u64		*ring;	/* RX channel descriptor ring */	dma_addr_t	 dma;	u64		*buffers;	/* RX interface buffer ring */	dma_addr_t	 buf_dma;	unsigned int	 size;	unsigned int	 next_to_fill;	unsigned int	 next_to_clean;	struct pasemi_mac_buffer *ring_info;	char		 irq_name[10];  /* "eth%d rx" */};struct pasemi_mac {	struct net_device *netdev;	void __iomem *regs;	void __iomem *dma_regs;	void __iomem *iob_regs;	struct pci_dev *pdev;	struct pci_dev *dma_pdev;	struct pci_dev *iob_pdev;	struct phy_device *phydev;	struct napi_struct napi;	/* Pointer to the cacheable per-channel status registers */	u64	*rx_status;	u64	*tx_status;	u8		type;#define MAC_TYPE_GMAC	1#define MAC_TYPE_XAUI	2	u32	dma_txch;	u32	dma_if;	u32	dma_rxch;	u8		mac_addr[6];	struct timer_list	rxtimer;	struct pasemi_mac_txring *tx;	struct pasemi_mac_rxring *rx;	unsigned long	tx_irq;	unsigned long	rx_irq;	int	link;	int	speed;	int	duplex;	unsigned int	msg_enable;	char	phy_id[BUS_ID_SIZE];};/* Software status descriptor (ring_info) */struct pasemi_mac_buffer {	struct sk_buff *skb;	dma_addr_t	dma;};/* status register layout in IOB region, at 0xfb800000 */struct pasdma_status {	u64 rx_sta[64];	u64 tx_sta[20];};/* MAC CFG register offsets */enum {	PAS_MAC_CFG_PCFG = 0x80,	PAS_MAC_CFG_TXP = 0x98,	PAS_MAC_IPC_CHNL = 0x208,};/* MAC CFG register fields */#define PAS_MAC_CFG_PCFG_PE		0x80000000#define PAS_MAC_CFG_PCFG_CE		0x40000000#define PAS_MAC_CFG_PCFG_BU		0x20000000#define PAS_MAC_CFG_PCFG_TT		0x10000000#define PAS_MAC_CFG_PCFG_TSR_M		0x0c000000#define PAS_MAC_CFG_PCFG_TSR_10M	0x00000000#define PAS_MAC_CFG_PCFG_TSR_100M	0x04000000#define PAS_MAC_CFG_PCFG_TSR_1G		0x08000000#define PAS_MAC_CFG_PCFG_TSR_10G	0x0c000000#define PAS_MAC_CFG_PCFG_T24		0x02000000#define PAS_MAC_CFG_PCFG_PR		0x01000000#define PAS_MAC_CFG_PCFG_CRO_M		0x00ff0000#define PAS_MAC_CFG_PCFG_CRO_S	16#define PAS_MAC_CFG_PCFG_IPO_M		0x0000ff00#define PAS_MAC_CFG_PCFG_IPO_S	8#define PAS_MAC_CFG_PCFG_S1		0x00000080#define PAS_MAC_CFG_PCFG_IO_M		0x00000060#define PAS_MAC_CFG_PCFG_IO_MAC		0x00000000#define PAS_MAC_CFG_PCFG_IO_OFF		0x00000020#define PAS_MAC_CFG_PCFG_IO_IND_ETH	0x00000040#define PAS_MAC_CFG_PCFG_IO_IND_IP	0x00000060#define PAS_MAC_CFG_PCFG_LP		0x00000010#define PAS_MAC_CFG_PCFG_TS		0x00000008#define PAS_MAC_CFG_PCFG_HD		0x00000004#define PAS_MAC_CFG_PCFG_SPD_M		0x00000003#define PAS_MAC_CFG_PCFG_SPD_10M	0x00000000#define PAS_MAC_CFG_PCFG_SPD_100M	0x00000001#define PAS_MAC_CFG_PCFG_SPD_1G		0x00000002#define PAS_MAC_CFG_PCFG_SPD_10G	0x00000003#define PAS_MAC_CFG_TXP_FCF		0x01000000#define PAS_MAC_CFG_TXP_FCE		0x00800000#define PAS_MAC_CFG_TXP_FC		0x00400000#define PAS_MAC_CFG_TXP_FPC_M		0x00300000#define PAS_MAC_CFG_TXP_FPC_S		20#define PAS_MAC_CFG_TXP_FPC(x)		(((x) << PAS_MAC_CFG_TXP_FPC_S) & \					 PAS_MAC_CFG_TXP_FPC_M)#define PAS_MAC_CFG_TXP_RT		0x00080000#define PAS_MAC_CFG_TXP_BL		0x00040000#define PAS_MAC_CFG_TXP_SL_M		0x00030000#define PAS_MAC_CFG_TXP_SL_S		16#define PAS_MAC_CFG_TXP_SL(x)		(((x) << PAS_MAC_CFG_TXP_SL_S) & \					 PAS_MAC_CFG_TXP_SL_M)#define PAS_MAC_CFG_TXP_COB_M		0x0000f000#define PAS_MAC_CFG_TXP_COB_S		12#define PAS_MAC_CFG_TXP_COB(x)		(((x) << PAS_MAC_CFG_TXP_COB_S) & \					 PAS_MAC_CFG_TXP_COB_M)#define PAS_MAC_CFG_TXP_TIFT_M		0x00000f00#define PAS_MAC_CFG_TXP_TIFT_S		8#define PAS_MAC_CFG_TXP_TIFT(x)		(((x) << PAS_MAC_CFG_TXP_TIFT_S) & \					 PAS_MAC_CFG_TXP_TIFT_M)#define PAS_MAC_CFG_TXP_TIFG_M		0x000000ff#define PAS_MAC_CFG_TXP_TIFG_S		0#define PAS_MAC_CFG_TXP_TIFG(x)		(((x) << PAS_MAC_CFG_TXP_TIFG_S) & \					 PAS_MAC_CFG_TXP_TIFG_M)#define PAS_MAC_IPC_CHNL_DCHNO_M	0x003f0000#define PAS_MAC_IPC_CHNL_DCHNO_S	16#define PAS_MAC_IPC_CHNL_DCHNO(x)	(((x) << PAS_MAC_IPC_CHNL_DCHNO_S) & \					 PAS_MAC_IPC_CHNL_DCHNO_M)#define PAS_MAC_IPC_CHNL_BCH_M		0x0000003f#define PAS_MAC_IPC_CHNL_BCH_S		0#define PAS_MAC_IPC_CHNL_BCH(x)		(((x) << PAS_MAC_IPC_CHNL_BCH_S) & \					 PAS_MAC_IPC_CHNL_BCH_M)/* All these registers live in the PCI configuration space for the DMA PCI * device. Use the normal PCI config access functions for them. */enum {	PAS_DMA_COM_TXCMD = 0x100,	/* Transmit Command Register  */	PAS_DMA_COM_TXSTA = 0x104,	/* Transmit Status Register   */	PAS_DMA_COM_RXCMD = 0x108,	/* Receive Command Register   */	PAS_DMA_COM_RXSTA = 0x10c,	/* Receive Status Register    */};#define PAS_DMA_COM_TXCMD_EN	0x00000001 /* enable */#define PAS_DMA_COM_TXSTA_ACT	0x00000001 /* active */#define PAS_DMA_COM_RXCMD_EN	0x00000001 /* enable */#define PAS_DMA_COM_RXSTA_ACT	0x00000001 /* active *//* Per-interface and per-channel registers */#define _PAS_DMA_RXINT_STRIDE		0x20#define PAS_DMA_RXINT_RCMDSTA(i)	(0x200+(i)*_PAS_DMA_RXINT_STRIDE)#define    PAS_DMA_RXINT_RCMDSTA_EN	0x00000001#define    PAS_DMA_RXINT_RCMDSTA_ST	0x00000002#define    PAS_DMA_RXINT_RCMDSTA_MBT	0x00000008#define    PAS_DMA_RXINT_RCMDSTA_MDR	0x00000010#define    PAS_DMA_RXINT_RCMDSTA_MOO	0x00000020#define    PAS_DMA_RXINT_RCMDSTA_MBP	0x00000040#define    PAS_DMA_RXINT_RCMDSTA_BT	0x00000800#define    PAS_DMA_RXINT_RCMDSTA_DR	0x00001000#define    PAS_DMA_RXINT_RCMDSTA_OO	0x00002000#define    PAS_DMA_RXINT_RCMDSTA_BP	0x00004000#define    PAS_DMA_RXINT_RCMDSTA_TB	0x00008000#define    PAS_DMA_RXINT_RCMDSTA_ACT	0x00010000#define    PAS_DMA_RXINT_RCMDSTA_DROPS_M	0xfffe0000#define    PAS_DMA_RXINT_RCMDSTA_DROPS_S	17#define PAS_DMA_RXINT_CFG(i)		(0x204+(i)*_PAS_DMA_RXINT_STRIDE)#define    PAS_DMA_RXINT_CFG_RBP	0x80000000#define    PAS_DMA_RXINT_CFG_ITRR	0x40000000#define    PAS_DMA_RXINT_CFG_DHL_M	0x07000000#define    PAS_DMA_RXINT_CFG_DHL_S	24#define    PAS_DMA_RXINT_CFG_DHL(x)	(((x) << PAS_DMA_RXINT_CFG_DHL_S) & \					 PAS_DMA_RXINT_CFG_DHL_M)#define    PAS_DMA_RXINT_CFG_ITR	0x00400000#define    PAS_DMA_RXINT_CFG_LW		0x00200000#define    PAS_DMA_RXINT_CFG_L2		0x00100000#define    PAS_DMA_RXINT_CFG_HEN	0x00080000#define    PAS_DMA_RXINT_CFG_WIF	0x00000002#define    PAS_DMA_RXINT_CFG_WIL	0x00000001#define PAS_DMA_RXINT_INCR(i)		(0x210+(i)*_PAS_DMA_RXINT_STRIDE)#define    PAS_DMA_RXINT_INCR_INCR_M	0x0000ffff#define    PAS_DMA_RXINT_INCR_INCR_S	0#define    PAS_DMA_RXINT_INCR_INCR(x)	((x) & 0x0000ffff)#define PAS_DMA_RXINT_BASEL(i)		(0x218+(i)*_PAS_DMA_RXINT_STRIDE)#define    PAS_DMA_RXINT_BASEL_BRBL(x)	((x) & ~0x3f)#define PAS_DMA_RXINT_BASEU(i)		(0x21c+(i)*_PAS_DMA_RXINT_STRIDE)#define    PAS_DMA_RXINT_BASEU_BRBH(x)	((x) & 0xfff)#define    PAS_DMA_RXINT_BASEU_SIZ_M	0x3fff0000	/* # of cache lines worth of buffer ring */#define    PAS_DMA_RXINT_BASEU_SIZ_S	16		/* 0 = 16K */#define    PAS_DMA_RXINT_BASEU_SIZ(x)	(((x) << PAS_DMA_RXINT_BASEU_SIZ_S) & \					 PAS_DMA_RXINT_BASEU_SIZ_M)#define _PAS_DMA_TXCHAN_STRIDE	0x20    /* Size per channel		*/#define _PAS_DMA_TXCHAN_TCMDSTA	0x300	/* Command / Status		*/#define _PAS_DMA_TXCHAN_CFG	0x304	/* Configuration		*/#define _PAS_DMA_TXCHAN_DSCRBU	0x308	/* Descriptor BU Allocation	*/#define _PAS_DMA_TXCHAN_INCR	0x310	/* Descriptor increment		*/#define _PAS_DMA_TXCHAN_CNT	0x314	/* Descriptor count/offset	*/#define _PAS_DMA_TXCHAN_BASEL	0x318	/* Descriptor ring base (low)	*/#define _PAS_DMA_TXCHAN_BASEU	0x31c	/*			(high)	*/#define PAS_DMA_TXCHAN_TCMDSTA(c) (0x300+(c)*_PAS_DMA_TXCHAN_STRIDE)#define    PAS_DMA_TXCHAN_TCMDSTA_EN	0x00000001	/* Enabled */#define    PAS_DMA_TXCHAN_TCMDSTA_ST	0x00000002	/* Stop interface */#define    PAS_DMA_TXCHAN_TCMDSTA_ACT	0x00010000	/* Active */#define    PAS_DMA_TXCHAN_TCMDSTA_SZ	0x00000800#define    PAS_DMA_TXCHAN_TCMDSTA_DB	0x00000400#define    PAS_DMA_TXCHAN_TCMDSTA_DE	0x00000200#define    PAS_DMA_TXCHAN_TCMDSTA_DA	0x00000100#define PAS_DMA_TXCHAN_CFG(c)     (0x304+(c)*_PAS_DMA_TXCHAN_STRIDE)#define    PAS_DMA_TXCHAN_CFG_TY_IFACE	0x00000000	/* Type = interface */

⌨️ 快捷键说明

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