📄 sunhme.h
字号:
/* sunhme.h: Definitions for Sparc HME/BigMac 10/100baseT ethernet driver. * Also known as the "Happy Meal". * * Copyright (C) 1996 David S. Miller (davem@caipfs.rutgers.edu) */#ifndef _SUNHME_H#define _SUNHME_H#include <linux/config.h>/* Happy Meal global registers. */struct hmeal_gregs { volatile unsigned int sw_reset; /* Software Reset */ volatile unsigned int cfg; /* Config Register */ volatile unsigned int _padding[62]; /* Unused */ volatile unsigned int stat; /* Status */ volatile unsigned int imask; /* Interrupt Mask */};/* Global reset register. */#define GREG_RESET_ETX 0x01#define GREG_RESET_ERX 0x02#define GREG_RESET_ALL 0x03/* Global config register. */#define GREG_CFG_BURSTMSK 0x03#define GREG_CFG_BURST16 0x00#define GREG_CFG_BURST32 0x01#define GREG_CFG_BURST64 0x02#define GREG_CFG_64BIT 0x04#define GREG_CFG_PARITY 0x08#define GREG_CFG_RESV 0x10/* Global status register. */#define GREG_STAT_GOTFRAME 0x00000001 /* Received a frame */#define GREG_STAT_RCNTEXP 0x00000002 /* Receive frame counter expired */#define GREG_STAT_ACNTEXP 0x00000004 /* Align-error counter expired */#define GREG_STAT_CCNTEXP 0x00000008 /* CRC-error counter expired */#define GREG_STAT_LCNTEXP 0x00000010 /* Length-error counter expired */#define GREG_STAT_RFIFOVF 0x00000020 /* Receive FIFO overflow */#define GREG_STAT_CVCNTEXP 0x00000040 /* Code-violation counter expired */#define GREG_STAT_STSTERR 0x00000080 /* Test error in XIF for SQE */#define GREG_STAT_SENTFRAME 0x00000100 /* Transmitted a frame */#define GREG_STAT_TFIFO_UND 0x00000200 /* Transmit FIFO underrun */#define GREG_STAT_MAXPKTERR 0x00000400 /* Max-packet size error */#define GREG_STAT_NCNTEXP 0x00000800 /* Normal-collision counter expired */#define GREG_STAT_ECNTEXP 0x00001000 /* Excess-collision counter expired */#define GREG_STAT_LCCNTEXP 0x00002000 /* Late-collision counter expired */#define GREG_STAT_FCNTEXP 0x00004000 /* First-collision counter expired */#define GREG_STAT_DTIMEXP 0x00008000 /* Defer-timer expired */#define GREG_STAT_RXTOHOST 0x00010000 /* Moved from receive-FIFO to host memory */#define GREG_STAT_NORXD 0x00020000 /* No more receive descriptors */#define GREG_STAT_RXERR 0x00040000 /* Error during receive dma */#define GREG_STAT_RXLATERR 0x00080000 /* Late error during receive dma */#define GREG_STAT_RXPERR 0x00100000 /* Parity error during receive dma */#define GREG_STAT_RXTERR 0x00200000 /* Tag error during receive dma */#define GREG_STAT_EOPERR 0x00400000 /* Transmit descriptor did not have EOP set */#define GREG_STAT_MIFIRQ 0x00800000 /* MIF is signaling an interrupt condition */#define GREG_STAT_HOSTTOTX 0x01000000 /* Moved from host memory to transmit-FIFO */#define GREG_STAT_TXALL 0x02000000 /* Transmitted all packets in the tx-fifo */#define GREG_STAT_TXEACK 0x04000000 /* Error during transmit dma */#define GREG_STAT_TXLERR 0x08000000 /* Late error during transmit dma */#define GREG_STAT_TXPERR 0x10000000 /* Parity error during transmit dma */#define GREG_STAT_TXTERR 0x20000000 /* Tag error during transmit dma */#define GREG_STAT_SLVERR 0x40000000 /* PIO access got an error */#define GREG_STAT_SLVPERR 0x80000000 /* PIO access got a parity error *//* All interesting error conditions. */#define GREG_STAT_ERRORS 0xfc7efefc/* Global interrupt mask register. */#define GREG_IMASK_GOTFRAME 0x00000001 /* Received a frame */#define GREG_IMASK_RCNTEXP 0x00000002 /* Receive frame counter expired */#define GREG_IMASK_ACNTEXP 0x00000004 /* Align-error counter expired */#define GREG_IMASK_CCNTEXP 0x00000008 /* CRC-error counter expired */#define GREG_IMASK_LCNTEXP 0x00000010 /* Length-error counter expired */#define GREG_IMASK_RFIFOVF 0x00000020 /* Receive FIFO overflow */#define GREG_IMASK_CVCNTEXP 0x00000040 /* Code-violation counter expired */#define GREG_IMASK_STSTERR 0x00000080 /* Test error in XIF for SQE */#define GREG_IMASK_SENTFRAME 0x00000100 /* Transmitted a frame */#define GREG_IMASK_TFIFO_UND 0x00000200 /* Transmit FIFO underrun */#define GREG_IMASK_MAXPKTERR 0x00000400 /* Max-packet size error */#define GREG_IMASK_NCNTEXP 0x00000800 /* Normal-collision counter expired */#define GREG_IMASK_ECNTEXP 0x00001000 /* Excess-collision counter expired */#define GREG_IMASK_LCCNTEXP 0x00002000 /* Late-collision counter expired */#define GREG_IMASK_FCNTEXP 0x00004000 /* First-collision counter expired */#define GREG_IMASK_DTIMEXP 0x00008000 /* Defer-timer expired */#define GREG_IMASK_RXTOHOST 0x00010000 /* Moved from receive-FIFO to host memory */#define GREG_IMASK_NORXD 0x00020000 /* No more receive descriptors */#define GREG_IMASK_RXERR 0x00040000 /* Error during receive dma */#define GREG_IMASK_RXLATERR 0x00080000 /* Late error during receive dma */#define GREG_IMASK_RXPERR 0x00100000 /* Parity error during receive dma */#define GREG_IMASK_RXTERR 0x00200000 /* Tag error during receive dma */#define GREG_IMASK_EOPERR 0x00400000 /* Transmit descriptor did not have EOP set */#define GREG_IMASK_MIFIRQ 0x00800000 /* MIF is signaling an interrupt condition */#define GREG_IMASK_HOSTTOTX 0x01000000 /* Moved from host memory to transmit-FIFO */#define GREG_IMASK_TXALL 0x02000000 /* Transmitted all packets in the tx-fifo */#define GREG_IMASK_TXEACK 0x04000000 /* Error during transmit dma */#define GREG_IMASK_TXLERR 0x08000000 /* Late error during transmit dma */#define GREG_IMASK_TXPERR 0x10000000 /* Parity error during transmit dma */#define GREG_IMASK_TXTERR 0x20000000 /* Tag error during transmit dma */#define GREG_IMASK_SLVERR 0x40000000 /* PIO access got an error */#define GREG_IMASK_SLVPERR 0x80000000 /* PIO access got a parity error *//* Happy Meal external transmitter registers. */struct hmeal_etxregs { volatile unsigned int tx_pnding; /* Transmit pending/wakeup register */ volatile unsigned int cfg; /* Transmit config register */ volatile unsigned int tx_ring; /* Transmit ring pointer */ volatile unsigned int tx_bbase; /* Transmit buffer base */ volatile unsigned int tx_bdisp; /* Transmit buffer displacement */ volatile unsigned int tx_fifo_wptr; /* FIFO write ptr */ volatile unsigned int tx_fifo_swptr; /* FIFO write ptr (shadow register) */ volatile unsigned int tx_fifo_rptr; /* FIFO read ptr */ volatile unsigned int tx_fifo_srptr; /* FIFO read ptr (shadow register) */ volatile unsigned int tx_fifo_pcnt; /* FIFO packet counter */ volatile unsigned int smachine; /* Transmitter state machine */ volatile unsigned int tx_rsize; /* Ring descriptor size */ volatile unsigned int tx_bptr; /* Transmit data buffer ptr */};/* ETX transmit pending register. */#define ETX_TP_DMAWAKEUP 0x00000001 /* Restart transmit dma *//* ETX config register. */#define ETX_CFG_DMAENABLE 0x00000001 /* Enable transmit dma */#define ETX_CFG_FIFOTHRESH 0x000003fe /* Transmit FIFO threshold */#define ETX_CFG_IRQDAFTER 0x00000400 /* Interrupt after TX-FIFO drained */#define ETX_CFG_IRQDBEFORE 0x00000000 /* Interrupt before TX-FIFO drained */#define ETX_RSIZE_SHIFT 4/* Happy Meal external receiver registers. */struct hmeal_erxregs { volatile unsigned int cfg; /* Receiver config register */ volatile unsigned int rx_ring; /* Receiver ring ptr */ volatile unsigned int rx_bptr; /* Receiver buffer ptr */ volatile unsigned int rx_fifo_wptr; /* FIFO write ptr */ volatile unsigned int rx_fifo_swptr; /* FIFO write ptr (shadow register) */ volatile unsigned int rx_fifo_rptr; /* FIFO read ptr */ volatile unsigned int rx_fifo_srptr; /* FIFO read ptr (shadow register) */ volatile unsigned int smachine; /* Receiver state machine */};/* ERX config register. */#define ERX_CFG_DMAENABLE 0x00000001 /* Enable receive DMA */#define ERX_CFG_RESV1 0x00000006 /* Unused... */#define ERX_CFG_BYTEOFFSET 0x00000038 /* Receive first byte offset */#define ERX_CFG_RESV2 0x000001c0 /* Unused... */#define ERX_CFG_SIZE32 0x00000000 /* Receive ring size == 32 */#define ERX_CFG_SIZE64 0x00000200 /* Receive ring size == 64 */#define ERX_CFG_SIZE128 0x00000400 /* Receive ring size == 128 */#define ERX_CFG_SIZE256 0x00000600 /* Receive ring size == 256 */#define ERX_CFG_RESV3 0x0000f800 /* Unused... */#define ERX_CFG_CSUMSTART 0x007f0000 /* Offset of checksum start *//* I'd like a Big Mac, small fries, small coke, and SparcLinux please. */struct hmeal_bigmacregs { volatile unsigned int xif_cfg; /* XIF config register */ volatile unsigned int _unused[129]; /* Reserved... */ volatile unsigned int tx_swreset; /* Transmitter software reset */ volatile unsigned int tx_cfg; /* Transmitter config register */ volatile unsigned int ipkt_gap1; /* Inter-packet gap 1 */ volatile unsigned int ipkt_gap2; /* Inter-packet gap 2 */ volatile unsigned int attempt_limit; /* Transmit attempt limit */ volatile unsigned int stime; /* Transmit slot time */ volatile unsigned int preamble_len; /* Size of transmit preamble */ volatile unsigned int preamble_pattern; /* Pattern for transmit preamble */ volatile unsigned int tx_sframe_delim; /* Transmit delimiter */ volatile unsigned int jsize; /* Jam size */ volatile unsigned int tx_pkt_max; /* Transmit max pkt size */ volatile unsigned int tx_pkt_min; /* Transmit min pkt size */ volatile unsigned int peak_attempt; /* Count of transmit peak attempts */ volatile unsigned int dt_ctr; /* Transmit defer timer */ volatile unsigned int nc_ctr; /* Transmit normal-collision counter */ volatile unsigned int fc_ctr; /* Transmit first-collision counter */ volatile unsigned int ex_ctr; /* Transmit excess-collision counter */ volatile unsigned int lt_ctr; /* Transmit late-collision counter */ volatile unsigned int rand_seed; /* Transmit random number seed */ volatile unsigned int tx_smachine; /* Transmit state machine */ volatile unsigned int _unused2[44]; /* Reserved */ volatile unsigned int rx_swreset; /* Receiver software reset */ volatile unsigned int rx_cfg; /* Receiver config register */ volatile unsigned int rx_pkt_max; /* Receive max pkt size */ volatile unsigned int rx_pkt_min; /* Receive min pkt size */ volatile unsigned int mac_addr2; /* Ether address register 2 */ volatile unsigned int mac_addr1; /* Ether address register 1 */ volatile unsigned int mac_addr0; /* Ether address register 0 */ volatile unsigned int fr_ctr; /* Receive frame receive counter */ volatile unsigned int gle_ctr; /* Receive giant-length error counter */ volatile unsigned int unale_ctr; /* Receive unaligned error counter */ volatile unsigned int rcrce_ctr; /* Receive CRC error counter */ volatile unsigned int rx_smachine; /* Receiver state machine */ volatile unsigned int rx_cvalid; /* Receiver code violation */ volatile unsigned int _unused3; /* Reserved... */ volatile unsigned int htable3; /* Hash table 3 */ volatile unsigned int htable2; /* Hash table 2 */ volatile unsigned int htable1; /* Hash table 1 */ volatile unsigned int htable0; /* Hash table 0 */ volatile unsigned int afilter2; /* Address filter 2 */ volatile unsigned int afilter1; /* Address filter 1 */ volatile unsigned int afilter0; /* Address filter 0 */ volatile unsigned int afilter_mask; /* Address filter mask */};/* BigMac XIF config register. */#define BIGMAC_XCFG_ODENABLE 0x00000001 /* Output driver enable */#define BIGMAC_XCFG_XLBACK 0x00000002 /* Loopback-mode XIF enable */#define BIGMAC_XCFG_MLBACK 0x00000004 /* Loopback-mode MII enable */#define BIGMAC_XCFG_MIIDISAB 0x00000008 /* MII receive buffer disable */#define BIGMAC_XCFG_SQENABLE 0x00000010 /* SQE test enable */#define BIGMAC_XCFG_SQETWIN 0x000003e0 /* SQE time window */#define BIGMAC_XCFG_LANCE 0x00000010 /* Lance mode enable */#define BIGMAC_XCFG_LIPG0 0x000003e0 /* Lance mode IPG0 *//* BigMac transmit config register. */#define BIGMAC_TXCFG_ENABLE 0x00000001 /* Enable the transmitter */#define BIGMAC_TXCFG_SMODE 0x00000020 /* Enable slow transmit mode */#define BIGMAC_TXCFG_CIGN 0x00000040 /* Ignore transmit collisions */#define BIGMAC_TXCFG_FCSOFF 0x00000080 /* Do not emit FCS */#define BIGMAC_TXCFG_DBACKOFF 0x00000100 /* Disable backoff */#define BIGMAC_TXCFG_FULLDPLX 0x00000200 /* Enable full-duplex */#define BIGMAC_TXCFG_DGIVEUP 0x00000400 /* Don't give up on transmits *//* BigMac receive config register. */#define BIGMAC_RXCFG_ENABLE 0x00000001 /* Enable the receiver */#define BIGMAC_RXCFG_PSTRIP 0x00000020 /* Pad byte strip enable */#define BIGMAC_RXCFG_PMISC 0x00000040 /* Enable promiscous mode */#define BIGMAC_RXCFG_DERR 0x00000080 /* Disable error checking */#define BIGMAC_RXCFG_DCRCS 0x00000100 /* Disable CRC stripping */#define BIGMAC_RXCFG_ME 0x00000200 /* Receive packets addressed to me */#define BIGMAC_RXCFG_PGRP 0x00000400 /* Enable promisc group mode */#define BIGMAC_RXCFG_HENABLE 0x00000800 /* Enable the hash filter */#define BIGMAC_RXCFG_AENABLE 0x00001000 /* Enable the address filter *//* These are the "Management Interface" (ie. MIF) registers of the transceiver. */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -