📄 gianfar.h
字号:
/* * 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 + -