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

📄 gianfar.h

📁 Powerpc网络处理器MPC85xx增强型三速以太控制器驱动程序
💻 H
📖 第 1 页 / 共 2 页
字号:
/* * drivers/net/gianfar.h * * Gianfar Ethernet Driver * Driver for FEC on MPC8540 and TSEC on MPC8540/MPC8560 * Based on 8260_io/fcc_enet.c * * Author: Andy Fleming * Maintainer: Kumar Gala * * Copyright (c) 2002-2004 Freescale Semiconductor, Inc. * * This program is free software; you can redistribute  it and/or modify it * under  the terms of  the GNU General  Public License as published by the * Free Software Foundation;  either version 2 of the  License, or (at your * option) any later version. * *  Still left to do: *      -Add support for module parameters *	-Add patch for ethtool phys id */#ifndef __GIANFAR_H#define __GIANFAR_H#include <linux/kernel.h>#include <linux/sched.h>#include <linux/string.h>#include <linux/errno.h>#include <linux/slab.h>#include <linux/interrupt.h>#include <linux/init.h>#include <linux/delay.h>#include <linux/netdevice.h>#include <linux/etherdevice.h>#include <linux/skbuff.h>#include <linux/spinlock.h>#include <linux/mm.h>#include <linux/mii.h>#include <linux/phy.h>#include <asm/io.h>#include <asm/irq.h>#include <asm/uaccess.h>#include <linux/module.h>#include <linux/crc32.h>#include <linux/workqueue.h>#include <linux/ethtool.h>#include <linux/netdevice.h>#include <linux/fsl_devices.h>#include "gianfar_mii.h"/* The maximum number of packets to be handled in one call of gfar_poll */#define GFAR_DEV_WEIGHT 16/* Length for FCB */#define GMAC_FCB_LEN 8/* Default padding amount */#define DEFAULT_PADDING 2/* Number of bytes to align the rx bufs to */#define RXBUF_ALIGNMENT 64/* The number of bytes which composes a unit for the purpose of * allocating data buffers.  ie-for any given MTU, the data buffer * will be the next highest multiple of 512 bytes. */#define INCREMENTAL_BUFFER_SIZE 512#define MAC_ADDR_LEN 6#define PHY_INIT_TIMEOUT 100000#define GFAR_PHY_CHANGE_TIME 2#define DEVICE_NAME "%s: Gianfar Ethernet Controller Version 1.3-skbr, "#define DRV_NAME "gfar-enet"extern const char gfar_driver_name[];extern const char gfar_driver_version[];/* These need to be powers of 2 for this driver */#ifdef CONFIG_GFAR_NAPI#define DEFAULT_TX_RING_SIZE	64#define DEFAULT_RX_RING_SIZE	64#else#define DEFAULT_TX_RING_SIZE    64#define DEFAULT_RX_RING_SIZE    64#endif#define GFAR_RX_MAX_RING_SIZE   256#define GFAR_TX_MAX_RING_SIZE   256#define GFAR_MAX_FIFO_THRESHOLD 511#define GFAR_MAX_FIFO_STARVE	511#define GFAR_MAX_FIFO_STARVE_OFF 511#define DEFAULT_RX_BUFFER_SIZE  1536#define TX_RING_MOD_MASK(size) (size-1)#define RX_RING_MOD_MASK(size) (size-1)#define JUMBO_BUFFER_SIZE 9728#define JUMBO_FRAME_SIZE 9600#define DEFAULT_FIFO_TX_THR 0x80#define DEFAULT_FIFO_TX_STARVE 0x40#define DEFAULT_FIFO_TX_STARVE_OFF 0x80#define DEFAULT_BD_STASH 1#define DEFAULT_STASH_LENGTH	96#define DEFAULT_STASH_INDEX	0/* The number of Exact Match registers */#define GFAR_EM_NUM	15/* Latency of interface clock in nanoseconds *//* Interface clock latency , in this case, means the * time described by a value of 1 in the interrupt * coalescing registers' time fields.  Since those fields * refer to the time it takes for 64 clocks to pass, the * latencies are as such: * GBIT = 125MHz => 8ns/clock => 8*64 ns / tick * 100 = 25 MHz => 40ns/clock => 40*64 ns / tick * 10 = 2.5 MHz => 400ns/clock => 400*64 ns / tick */#define GFAR_GBIT_TIME  512#define GFAR_100_TIME   2560#define GFAR_10_TIME    25600#ifndef CONFIG_GFAR_NAPI/* Non NAPI Case */#define DEFAULT_TX_COALESCE 1#define DEFAULT_TXCOUNT	16#define DEFAULT_TXTIME	21#define DEFAULT_RX_COALESCE 1#define DEFAULT_RXCOUNT	16#define DEFAULT_RXTIME	21#else /* CONFIG_GFAR_NAPI */#define DEFAULT_TX_COALESCE 1#define DEFAULT_TXCOUNT	22#define DEFAULT_TXTIME	64#define DEFAULT_RX_COALESCE 0#define DEFAULT_RXCOUNT	2#define DEFAULT_RXTIME	64#endif /* CONFIG_GFAR_NAPI */#ifdef CONFIG_SGMII_RISING_CARD#define TBIPA_VALUE		0x10#else#define TBIPA_VALUE		0x1f#endif#define MIIMCFG_INIT_VALUE	0x00000007#define MIIMCFG_RESET           0x80000000#define MIIMIND_BUSY            0x00000001/* TBI register addresses */#define MII_TBICON		0x11/* TBICON register bit fields */#define TBICON_CLK_SELECT	0x0020/* MAC register bits */#define MACCFG1_SOFT_RESET	0x80000000#define MACCFG1_RESET_RX_MC	0x00080000#define MACCFG1_RESET_TX_MC	0x00040000#define MACCFG1_RESET_RX_FUN	0x00020000#define	MACCFG1_RESET_TX_FUN	0x00010000#define MACCFG1_LOOPBACK	0x00000100#define MACCFG1_RX_FLOW		0x00000020#define MACCFG1_TX_FLOW		0x00000010#define MACCFG1_SYNCD_RX_EN	0x00000008#define MACCFG1_RX_EN		0x00000004#define MACCFG1_SYNCD_TX_EN	0x00000002#define MACCFG1_TX_EN		0x00000001#define MACCFG2_INIT_SETTINGS	0x00007205#define MACCFG2_FULL_DUPLEX	0x00000001#define MACCFG2_IF              0x00000300#define MACCFG2_MII             0x00000100#define MACCFG2_GMII            0x00000200#define MACCFG2_HUGEFRAME	0x00000020#define MACCFG2_LENGTHCHECK	0x00000010#define MACCFG2_MPEN		0x00000008#define ECNTRL_INIT_SETTINGS	0x00001000#define ECNTRL_TBI_MODE         0x00000020#define ECNTRL_REDUCED_MODE	0x00000010#define ECNTRL_R100		0x00000008#define ECNTRL_REDUCED_MII_MODE	0x00000004#define ECNTRL_SGMII_MODE	0x00000002#define MRBLR_INIT_SETTINGS	DEFAULT_RX_BUFFER_SIZE#define MINFLR_INIT_SETTINGS	0x00000040/* Init to do tx snooping for buffers and descriptors */#define DMACTRL_INIT_SETTINGS   0x000000c3#define DMACTRL_GRS             0x00000010#define DMACTRL_GTS             0x00000008#define TSTAT_CLEAR_THALT       0x80000000/* Interrupt coalescing macros */#define IC_ICEN			0x80000000#define IC_ICFT_MASK		0x1fe00000#define IC_ICFT_SHIFT		21#define mk_ic_icft(x)		\	(((unsigned int)x << IC_ICFT_SHIFT)&IC_ICFT_MASK)#define IC_ICTT_MASK		0x0000ffff#define mk_ic_ictt(x)		(x&IC_ICTT_MASK)#define mk_ic_value(count, time) (IC_ICEN | \				mk_ic_icft(count) | \				mk_ic_ictt(time))#define RCTRL_PAL_MASK		0x001f0000#define RCTRL_VLEX		0x00002000#define RCTRL_FILREN		0x00001000#define RCTRL_GHTX		0x00000400#define RCTRL_IPCSEN		0x00000200#define RCTRL_TUCSEN		0x00000100#define RCTRL_PRSDEP_MASK	0x000000c0#define RCTRL_PRSDEP_INIT	0x000000c0#define RCTRL_PROM		0x00000008#define RCTRL_EMEN		0x00000002#define RCTRL_CHECKSUMMING	(RCTRL_IPCSEN \		| RCTRL_TUCSEN | RCTRL_PRSDEP_INIT)#define RCTRL_EXTHASH		(RCTRL_GHTX)#define RCTRL_VLAN		(RCTRL_PRSDEP_INIT)#define RCTRL_PADDING(x)	((x << 16) & RCTRL_PAL_MASK)#define RSTAT_CLEAR_RHALT       0x00800000#define TCTRL_IPCSEN		0x00004000#define TCTRL_TUCSEN		0x00002000#define TCTRL_VLINS		0x00001000#define TCTRL_INIT_CSUM		(TCTRL_TUCSEN | TCTRL_IPCSEN)#define IEVENT_INIT_CLEAR	0xffffffff#define IEVENT_BABR		0x80000000#define IEVENT_RXC		0x40000000#define IEVENT_BSY		0x20000000#define IEVENT_EBERR		0x10000000#define IEVENT_MSRO		0x04000000#define IEVENT_GTSC		0x02000000#define IEVENT_BABT		0x01000000#define IEVENT_TXC		0x00800000#define IEVENT_TXE		0x00400000#define IEVENT_TXB		0x00200000#define IEVENT_TXF		0x00100000#define IEVENT_LC		0x00040000#define IEVENT_CRL		0x00020000#define IEVENT_XFUN		0x00010000#define IEVENT_RXB0		0x00008000#define IEVENT_MAG		0x00000800#define IEVENT_GRSC		0x00000100#define IEVENT_RXF0		0x00000080#define IEVENT_FIR		0x00000008#define IEVENT_FIQ		0x00000004#define IEVENT_DPE		0x00000002#define IEVENT_PERR		0x00000001#define IEVENT_RX_MASK          (IEVENT_RXB0 | IEVENT_RXF0)#define IEVENT_TX_MASK          (IEVENT_TXB | IEVENT_TXF)#define IEVENT_RTX_MASK         (IEVENT_RX_MASK | IEVENT_TX_MASK | IEVENT_BSY)#define IEVENT_ERR_MASK         \(IEVENT_RXC | IEVENT_BSY | IEVENT_EBERR | IEVENT_MSRO | \ IEVENT_BABT | IEVENT_TXC | IEVENT_TXE | IEVENT_LC \ | IEVENT_CRL | IEVENT_XFUN | IEVENT_DPE | IEVENT_PERR \ | IEVENT_MAG)#define IMASK_INIT_CLEAR	0x00000000#define IMASK_BABR              0x80000000#define IMASK_RXC               0x40000000#define IMASK_BSY               0x20000000#define IMASK_EBERR             0x10000000#define IMASK_MSRO		0x04000000#define IMASK_GRSC              0x02000000#define IMASK_BABT		0x01000000#define IMASK_TXC               0x00800000#define IMASK_TXEEN		0x00400000#define IMASK_TXBEN		0x00200000#define IMASK_TXFEN             0x00100000#define IMASK_LC		0x00040000#define IMASK_CRL		0x00020000#define IMASK_XFUN		0x00010000#define IMASK_RXB0              0x00008000#define IMASK_MAG		0x00000800#define IMASK_GTSC              0x00000100#define IMASK_RXFEN0		0x00000080#define IMASK_FIR		0x00000008#define IMASK_FIQ		0x00000004#define IMASK_DPE		0x00000002#define IMASK_PERR		0x00000001#define IMASK_DEFAULT  (IMASK_TXEEN | IMASK_TXFEN | IMASK_TXBEN | \		IMASK_RXFEN0 | IMASK_BSY | IMASK_EBERR | IMASK_BABR | \		IMASK_XFUN | IMASK_RXC | IMASK_BABT | IMASK_DPE \		| IMASK_PERR)#define IMASK_RTX_DISABLED ((~(IMASK_RXFEN0 | IMASK_TXFEN | IMASK_BSY)) \			   & IMASK_DEFAULT)/* Fifo management */#define FIFO_TX_THR_MASK	0x01ff#define FIFO_TX_STARVE_MASK	0x01ff#define FIFO_TX_STARVE_OFF_MASK	0x01ff/* Attribute fields *//* This enables rx snooping for buffers and descriptors */#define ATTR_BDSTASH		0x00000800#define ATTR_BUFSTASH		0x00004000#define ATTR_SNOOPING		0x000000c0#define ATTR_INIT_SETTINGS      ATTR_SNOOPING#define ATTRELI_INIT_SETTINGS   0x0#define ATTRELI_EL_MASK		0x3fff0000#define ATTRELI_EL(x) (x << 16)#define ATTRELI_EI_MASK		0x00003fff#define ATTRELI_EI(x) (x)/* TxBD status field bits */#define TXBD_READY		0x8000#define TXBD_PADCRC		0x4000#define TXBD_WRAP		0x2000#define TXBD_INTERRUPT		0x1000#define TXBD_LAST		0x0800#define TXBD_CRC		0x0400#define TXBD_DEF		0x0200#define TXBD_HUGEFRAME		0x0080#define TXBD_LATECOLLISION	0x0080#define TXBD_RETRYLIMIT		0x0040#define	TXBD_RETRYCOUNTMASK	0x003c#define TXBD_UNDERRUN		0x0002#define TXBD_TOE		0x0002/* Tx FCB param bits */#define TXFCB_VLN		0x80#define TXFCB_IP		0x40#define TXFCB_IP6		0x20#define TXFCB_TUP		0x10#define TXFCB_UDP		0x08#define TXFCB_CIP		0x04#define TXFCB_CTU		0x02#define TXFCB_NPH		0x01#define TXFCB_DEFAULT 		(TXFCB_IP|TXFCB_TUP|TXFCB_CTU|TXFCB_NPH)/* RxBD status field bits */#define RXBD_EMPTY		0x8000#define RXBD_RO1		0x4000#define RXBD_WRAP		0x2000#define RXBD_INTERRUPT		0x1000#define RXBD_LAST		0x0800#define RXBD_FIRST		0x0400#define RXBD_MISS		0x0100#define RXBD_BROADCAST		0x0080#define RXBD_MULTICAST		0x0040#define RXBD_LARGE		0x0020#define RXBD_NONOCTET		0x0010#define RXBD_SHORT		0x0008#define RXBD_CRCERR		0x0004#define RXBD_OVERRUN		0x0002#define RXBD_TRUNCATED		0x0001#define RXBD_STATS		0x01ff/* Rx FCB status field bits */#define RXFCB_VLN		0x8000#define RXFCB_IP		0x4000#define RXFCB_IP6		0x2000#define RXFCB_TUP		0x1000#define RXFCB_CIP		0x0800#define RXFCB_CTU		0x0400#define RXFCB_EIP		0x0200#define RXFCB_ETU		0x0100#define RXFCB_CSUM_MASK		0x0f00#define RXFCB_PERR_MASK		0x000c#define RXFCB_PERR_BADL3	0x0008/* SGMII phy address offset comparing with RGMII */#ifdef CONFIG_SGMII_RISING_CARD#define PHY_SGMII_ADDR_OFFSET	0x1c#endifstruct txbd8{	u16	status;	/* Status Fields */	u16	length;	/* Buffer length */	u32	bufPtr;	/* Buffer Pointer */};struct txfcb {	u8	flags;	u8	reserved;	u8	l4os;	/* Level 4 Header Offset */	u8	l3os; 	/* Level 3 Header Offset */	u16	phcs;	/* Pseudo-header Checksum */	u16	vlctl;	/* VLAN control word */};struct rxbd8{	u16	status;	/* Status Fields */	u16	length;	/* Buffer Length */	u32	bufPtr;	/* Buffer Pointer */};struct rxfcb {	u16	flags;	u8	rq;	/* Receive Queue index */	u8	pro;	/* Layer 4 Protocol */	u16	reserved;	u16	vlctl;	/* VLAN control word */};struct rmon_mib{	u32	tr64;	/* 0x.680 - Transmit and Receive 64-byte Frame Counter */	u32	tr127;	/* 0x.684 - Transmit and Receive 65-127 byte Frame Counter */	u32	tr255;	/* 0x.688 - Transmit and Receive 128-255 byte Frame Counter */

⌨️ 快捷键说明

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