📄 sunhme.h
字号:
struct hmeal_tcvregs { volatile unsigned int bb_clock; /* Bit bang clock register */ volatile unsigned int bb_data; /* Bit bang data register */ volatile unsigned int bb_oenab; /* Bit bang output enable */ volatile unsigned int frame; /* Frame control/data register */ volatile unsigned int cfg; /* MIF config register */ volatile unsigned int int_mask; /* MIF interrupt mask */ volatile unsigned int status; /* MIF status */ volatile unsigned int smachine; /* MIF state machine */};/* Frame commands. */#define FRAME_WRITE 0x50020000#define FRAME_READ 0x60020000/* Transceiver config register */#define TCV_CFG_PSELECT 0x00000001 /* Select PHY */#define TCV_CFG_PENABLE 0x00000002 /* Enable MIF polling */#define TCV_CFG_BENABLE 0x00000004 /* Enable the "bit banger" oh baby */#define TCV_CFG_PREGADDR 0x000000f8 /* Address of poll register */#define TCV_CFG_MDIO0 0x00000100 /* MDIO zero, data/attached */#define TCV_CFG_MDIO1 0x00000200 /* MDIO one, data/attached */#define TCV_CFG_PDADDR 0x00007c00 /* Device PHY address polling *//* Here are some PHY addresses. */#define TCV_PADDR_ETX 0 /* Internal transceiver */#define TCV_PADDR_ITX 1 /* External transceiver *//* Transceiver status register */#define TCV_STAT_BASIC 0xffff0000 /* The "basic" part */#define TCV_STAT_NORMAL 0x0000ffff /* The "non-basic" part *//* Inside the Happy Meal transceiver is the physical layer, they use an * implementations for National Semiconductor, part number DP83840VCE. * You can retrieve the data sheets and programming docs for this beast * from http://www.national.com/ * * The DP83840 is capable of both 10 and 100Mbps ethernet, in both * half and full duplex mode. It also supports auto negotiation. * * But.... THIS THING IS A PAIN IN THE ASS TO PROGRAM! * Debugging eeprom burnt code is more fun than programming this chip! *//* First, the DP83840 register numbers. */#define DP83840_BMCR 0x00 /* Basic mode control register */#define DP83840_BMSR 0x01 /* Basic mode status register */#define DP83840_PHYSID1 0x02 /* PHYS ID 1 */#define DP83840_PHYSID2 0x03 /* PHYS ID 2 */#define DP83840_ADVERTISE 0x04 /* Advertisement control reg */#define DP83840_LPA 0x05 /* Link partner ability reg */#define DP83840_EXPANSION 0x06 /* Expansion register */#define DP83840_DCOUNTER 0x12 /* Disconnect counter */#define DP83840_FCSCOUNTER 0x13 /* False carrier counter */#define DP83840_NWAYTEST 0x14 /* N-way auto-neg test reg */#define DP83840_RERRCOUNTER 0x15 /* Receive error counter */#define DP83840_SREVISION 0x16 /* Silicon revision */#define DP83840_CSCONFIG 0x17 /* CS configuration */#define DP83840_LBRERROR 0x18 /* Lpback, rx, bypass error */#define DP83840_PHYADDR 0x19 /* PHY address */#define DP83840_RESERVED 0x1a /* Unused... */#define DP83840_TPISTATUS 0x1b /* TPI status for 10mbps */#define DP83840_NCONFIG 0x1c /* Network interface config *//* Basic mode control register. */#define BMCR_RESV 0x007f /* Unused... */#define BMCR_CTST 0x0080 /* Collision test */#define BMCR_FULLDPLX 0x0100 /* Full duplex */#define BMCR_ANRESTART 0x0200 /* Auto negotiation restart */#define BMCR_ISOLATE 0x0400 /* Disconnect DP83840 from MII */#define BMCR_PDOWN 0x0800 /* Powerdown the DP83840 */#define BMCR_ANENABLE 0x1000 /* Enable auto negotiation */#define BMCR_SPEED100 0x2000 /* Select 100Mbps */#define BMCR_LOOPBACK 0x4000 /* TXD loopback bits */#define BMCR_RESET 0x8000 /* Reset the DP83840 *//* Basic mode status register. */#define BMSR_ERCAP 0x0001 /* Ext-reg capability */#define BMSR_JCD 0x0002 /* Jabber detected */#define BMSR_LSTATUS 0x0004 /* Link status */#define BMSR_ANEGCAPABLE 0x0008 /* Able to do auto-negotiation */#define BMSR_RFAULT 0x0010 /* Remote fault detected */#define BMSR_ANEGCOMPLETE 0x0020 /* Auto-negotiation complete */#define BMSR_RESV 0x07c0 /* Unused... */#define BMSR_10HALF 0x0800 /* Can do 10mbps, half-duplex */#define BMSR_10FULL 0x1000 /* Can do 10mbps, full-duplex */#define BMSR_100HALF 0x2000 /* Can do 100mbps, half-duplex */#define BMSR_100FULL 0x4000 /* Can do 100mbps, full-duplex */#define BMSR_100BASE4 0x8000 /* Can do 100mbps, 4k packets *//* Advertisement control register. */#define ADVERTISE_SLCT 0x001f /* Selector bits */#define ADVERTISE_CSMA 0x0001 /* Only selector supported */#define ADVERTISE_10HALF 0x0020 /* Try for 10mbps half-duplex */#define ADVERTISE_10FULL 0x0040 /* Try for 10mbps full-duplex */#define ADVERTISE_100HALF 0x0080 /* Try for 100mbps half-duplex */#define ADVERTISE_100FULL 0x0100 /* Try for 100mbps full-duplex */#define ADVERTISE_100BASE4 0x0200 /* Try for 100mbps 4k packets */#define ADVERTISE_RESV 0x1c00 /* Unused... */#define ADVERTISE_RFAULT 0x2000 /* Say we can detect faults */#define ADVERTISE_LPACK 0x4000 /* Ack link partners response */#define ADVERTISE_NPAGE 0x8000 /* Next page bit */#define ADVERTISE_ALL (ADVERTISE_10HALF | ADVERTISE_10FULL | \ ADVERTISE_100HALF | ADVERTISE_100FULL)/* Link partner ability register. */#define LPA_SLCT 0x001f /* Same as advertise selector */#define LPA_10HALF 0x0020 /* Can do 10mbps half-duplex */#define LPA_10FULL 0x0040 /* Can do 10mbps full-duplex */#define LPA_100HALF 0x0080 /* Can do 100mbps half-duplex */#define LPA_100FULL 0x0100 /* Can do 100mbps full-duplex */#define LPA_100BASE4 0x0200 /* Can do 100mbps 4k packets */#define LPA_RESV 0x1c00 /* Unused... */#define LPA_RFAULT 0x2000 /* Link partner faulted */#define LPA_LPACK 0x4000 /* Link partner acked us */#define LPA_NPAGE 0x8000 /* Next page bit *//* Expansion register for auto-negotiation. */#define EXPANSION_NWAY 0x0001 /* Can do N-way auto-nego */#define EXPANSION_LCWP 0x0002 /* Got new RX page code word */#define EXPANSION_ENABLENPAGE 0x0004 /* This enables npage words */#define EXPANSION_NPCAPABLE 0x0008 /* Link partner supports npage */#define EXPANSION_MFAULTS 0x0010 /* Multiple faults detected */#define EXPANSION_RESV 0xffe0 /* Unused... *//* N-way test register. */#define NWAYTEST_RESV1 0x00ff /* Unused... */#define NWAYTEST_LOOPBACK 0x0100 /* Enable loopback for N-way */#define NWAYTEST_RESV2 0xfe00 /* Unused... *//* The Carrier Sense config register. */#define CSCONFIG_RESV1 0x0001 /* Unused... */#define CSCONFIG_LED4 0x0002 /* Pin for full-dplx LED4 */#define CSCONFIG_LED1 0x0004 /* Pin for conn-status LED1 */#define CSCONFIG_RESV2 0x0008 /* Unused... */#define CSCONFIG_TCVDISAB 0x0010 /* Turns off the transceiver */#define CSCONFIG_DFBYPASS 0x0020 /* Bypass disconnect function */#define CSCONFIG_GLFORCE 0x0040 /* Good link force for 100mbps */#define CSCONFIG_CLKTRISTATE 0x0080 /* Tristate 25m clock */#define CSCONFIG_RESV3 0x0700 /* Unused... */#define CSCONFIG_ENCODE 0x0800 /* 1=MLT-3, 0=binary */#define CSCONFIG_RENABLE 0x1000 /* Repeater mode enable */#define CSCONFIG_TCDISABLE 0x2000 /* Disable timeout counter */#define CSCONFIG_RESV4 0x4000 /* Unused... */#define CSCONFIG_NDISABLE 0x8000 /* Disable NRZI *//* Loopback, receive, bypass error register. */#define LBRERROR_EBUFFER 0x0001 /* Show elasticity buf errors */#define LBRERROR_PACKET 0x0002 /* Show packet errors */#define LBRERROR_LINK 0x0004 /* Show link errors */#define LBRERROR_END 0x0008 /* Show premature end errors */#define LBRERROR_CODE 0x0010 /* Show code errors */#define LBRERROR_RESV1 0x00e0 /* Unused... */#define LBRERROR_LBACK 0x0300 /* Remote and twister loopback */#define LBRERROR_10TX 0x0400 /* Transceiver loopback 10mbps */#define LBRERROR_ENDEC 0x0800 /* ENDEC loopback 10mbps */#define LBRERROR_ALIGN 0x1000 /* Bypass symbol alignment */#define LBRERROR_SCRAMBLER 0x2000 /* Bypass (de)scrambler */#define LBRERROR_ENCODER 0x4000 /* Bypass 4B5B/5B4B encoders */#define LBRERROR_BEBUF 0x8000 /* Bypass elasticity buffers *//* Physical address register. */#define PHYADDR_ADDRESS 0x001f /* The address itself */#define PHYADDR_DISCONNECT 0x0020 /* Disconnect status */#define PHYADDR_10MBPS 0x0040 /* 1=10mbps, 0=100mbps */#define PHYADDR_RESV 0xff80 /* Unused... *//* TPI status register for 10mbps. */#define TPISTATUS_RESV1 0x01ff /* Unused... */#define TPISTATUS_SERIAL 0x0200 /* Enable 10mbps serial mode */#define TPISTATUS_RESV2 0xfc00 /* Unused... *//* Network interface config register. */#define NCONFIG_JENABLE 0x0001 /* Jabber enable */#define NCONFIG_RESV1 0x0002 /* Unused... */#define NCONFIG_SQUELCH 0x0004 /* Use low squelch */#define NCONFIG_UTP 0x0008 /* 1=UTP, 0=STP */#define NCONFIG_HBEAT 0x0010 /* Heart-beat enable */#define NCONFIG_LDISABLE 0x0020 /* Disable the link */#define NCONFIG_RESV2 0xffc0 /* Unused... *//* Happy Meal descriptor rings and such. * All descriptor rings must be aligned on a 2K boundry. * All receive buffers must be 64 byte aligned. */struct happy_meal_rxd { unsigned int rx_flags; unsigned int rx_addr;};#define RXFLAG_OWN 0x80000000 /* 1 = hardware, 0 = software */#define RXFLAG_OVERFLOW 0x40000000 /* 1 = buffer overflow */#define RXFLAG_SIZE 0x3fff0000 /* Size of the buffer */#define RXFLAG_CSUM 0x0000ffff /* HW computed checksum */struct happy_meal_txd { unsigned int tx_flags; unsigned int tx_addr;};#define TXFLAG_OWN 0x80000000 /* 1 = hardware, 0 = software */#define TXFLAG_SOP 0x40000000 /* 1 = start of packet */#define TXFLAG_EOP 0x20000000 /* 1 = end of packet */#define TXFLAG_CSENABLE 0x10000000 /* 1 = enable hw-checksums */#define TXFLAG_CSLOCATION 0x0ff00000 /* Where to stick the csum */#define TXFLAG_CSBUFBEGIN 0x000fc000 /* Where to begin checksum */#define TXFLAG_SIZE 0x00003fff /* Size of the packet */#define TX_RING_SIZE 32 /* Must be >16 and <255, multiple of 16 */#define RX_RING_SIZE 32 /* see ERX_CFG_SIZE* for possible values */#define TX_RING_MAXSIZE 256#define RX_RING_MAXSIZE 256/* 34 byte offset for checksum computation. This works because ip_input() will clear out * the skb->csum and skb->ip_summed fields and recompute the csum if IP options are * present in the header. 34 == (ethernet header len) + sizeof(struct iphdr) */#define ERX_CFG_DEFAULT(off) (ERX_CFG_DMAENABLE|((off)<<3)|ERX_CFG_SIZE32|(0x22<<16))#define NEXT_RX(num) (((num) + 1) & (RX_RING_SIZE - 1))#define NEXT_TX(num) (((num) + 1) & (TX_RING_SIZE - 1))#define PREV_RX(num) (((num) - 1) & (RX_RING_SIZE - 1))#define PREV_TX(num) (((num) - 1) & (TX_RING_SIZE - 1))#define TX_BUFFS_AVAIL(hp) \ (((hp)->tx_old <= (hp)->tx_new) ? \ (hp)->tx_old + (TX_RING_SIZE - 1) - (hp)->tx_new : \ (hp)->tx_old - (hp)->tx_new - 1)#define RX_OFFSET 2#define RX_BUF_ALLOC_SIZE (1546 + RX_OFFSET + 64)#define RX_COPY_THRESHOLD 256struct hmeal_init_block { struct happy_meal_rxd happy_meal_rxd[RX_RING_MAXSIZE];
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -