/*
* @(#)adm8511reg.h 1.1 09/06/20
* Register dehinitsions of ADMtek ADM8511 Fast Ethernet to USB controller.
* Codeded by Masayuki Murayama(KHF04453@nifty.ne.jp)
* This file is public domain.
*/
#ifndef __ADM8511_H__
#define __ADM8511_H__
#define EC0 0x00 /* B */
#define EC1 0x01 /* B */
#define EC2 0x02 /* B */
#define MA 0x08 /* 8byte array */
#define EID 0x10 /* B */
#define PAUSETIMER 0x18 /* B pause timer */
#define RPNBFC 0x1a /* B */
#define ORFBFC 0x1b /* B */
#define EP1C 0x1c /* B */
#define RXFC 0x1d /* B */
#define BIST 0x1e /* B */
#define EEOFFSET 0x20 /* B */
#define EEDATA 0x21 /* W */
#define EECTRL 0x23 /* B */
#define PHYA 0x25 /* B */
#define PHYD 0x26 /* W */
#define PHYAC 0x28 /* B */
#define USBSTAT 0x2a /* B */
#define ETHTXSTAT 0x2b /* W */
#define ETHRXSTAT 0x2d /* B */
#define LOSTCNT 0x2e /* W */
#define WF0MASK 0x30 /* 16byte array */
#define WF0OFFSET 0x40 /* W */
#define WF0CRC 0x41 /* W */
#define WF1MASK 0x48 /* 16byte array */
#define WF1OFFSET 0x58 /* W */
#define WF1CRC 0x59 /* W */
#define WF2MASK 0x60 /* 16byte array */
#define WF2OFFSET 0x70 /* W */
#define WF2CRC 0x71 /* W */
#define WCTRL 0x78 /* B */
#define WSTAT 0x7a /* B */
#define IPHYC 0x7b /* B */
#define GPIO54 0x7c /* B */
#define GPIO10 0x7e /* B */
#define GPIO32 0x7f /* B */
#define TEST 0x80 /* B */
#define TM 0x81 /* B */
#define RPN 0x82 /* B */
/* Ethernet control register 0: offset 0 */
#define EC0_TXE 0x80U
#define EC0_RXE 0x40U
#define EC0_RXFCE 0x20U
#define EC0_WOE 0x10U
#define EC0_RXSA 0x08U
#define EC0_SBO 0x04U
#define EC0_RXMA 0x02U
#define EC0_RXCS 0x01U
#define EC0_BITS \
"\020" \
"\010TXE" \
"\007RXE" \
"\006RXFCE" \
"\005WOE" \
"\004RXSA" \
"\003SBO" \
"\002RXMA" \
"\001RXCS"
/* Ethernet control register 1: offset 1 */
#define EC1_FD 0x20U
#define EC1_100M 0x10U /* 0:10Mbps 1:100Mbps */
#define EC1_RM 0x08U /* reset mac */
#define EC1_BITS \
"\020" \
"\006FD" \
"\005100M" \
"\004RM"
/* Ethernet control register 2: offset 2 */
#define EC2_MEPL 0x80U /* 8515: MTU 0:1528, 1:1638 */
#define EC2_RPNC 0x40U
#define EC2_LEEPRS 0x20U
#define EC2_EEPRW 0x10U
#define EC2_LB 0x08U
#define EC2_PROM 0x04U
#define EC2_RXBP 0x02U
#define EC2_EP3RC 0x01U
#define EC2_BITS \
"\020" \
"\010MEPS" \
"\007RPNC" \
"\006LEEPRS" \
"\005EEPRW" \
"\004LB" \
"\003PROM" \
"\002RXBP" \
"\001EP3RC"
/* Recieve Packet number based Flow Control register: offset 0x1a */
#define RPNBFC_PN 0x7eU /* */
#define RPNBFC_PN_SHIFT 1
#define RPNBFC_FCP 0x01U /* enable rx flow control */
/* Occupied Recieve FIFO based Flow Control register: offset 0x1b */
#define ORFBFC_RXS 0x7eU /* */
#define ORFBFC_RXS_SHIFT 1
#define ORFBFC_RXS_UNIT 1024U
#define ORFBFC_FCRXS 0x01U /* enable rx flow control */
/* EP1 control register: offset 0x1c */
#define EP1C_EP1S0E 0x80U /* send 0 enable */
#define EP1C_ITMA 0x60U /* internal test mode A */
#define EP1C_ITMB 0x1fU /* internal test mode B */
#define EP1C_BITS \
"\020" \
"\010EP1S0E"
/* Rx FIFO Control register: offset 0x1d */
#define RXFC_EXT_SRAM 0x02 /* enable external 32k sram */
#define RXFC_RX32PKT 0x01 /* max 32 packet */
/* EEPROM offset register: offset 0x20 */
#define EEOFFSET_MASK 0x3f /* eeprom offset address in word */
/* EEPROM access control register: offset 0x23 */
#define EECTRL_DONE 0x04
#define EECTRL_RD 0x02
#define EECTRL_WR 0x01
#define EECTRL_BITS \
"\020" \
"\003DONE" \
"\002RD" \
"\001WR"
/* PHY control register: offset 28 */
#define PHYAC_DO 0x80U /* Done */
#define PHYAC_RDPHY 0x40U /* read phy */
#define PHYAC_WRPHY 0x20U /* write phy */
#define PHYAC_PHYRA 0x1fU /* PHY register address */
#define PHYCTRL_BITS \
"\020" \
"\010DO" \
"\007RDPHY" \
"\006WRPHY"
/* Internal PHY control register: offset 7b */
#define IPHYC_EPHY 0x02
#define IPHYC_PHYR 0x01
#define IPHYC_BITS \
"\020" \
"\002EPHY" \
"\001PHYR"
/* GPIO45 register: offset 7c */
#define GPIO54_5OE 0x20
#define GPIO54_5O 0x10
#define GPIO54_5I 0x08
#define GPIO54_4OE 0x04
#define GPIO54_4O 0x02
#define GPIO54_4I 0x01
/* GPIO01 register: offset 7e */
#define GPIO10_1OE 0x20
#define GPIO10_1O 0x10
#define GPIO10_1I 0x08
#define GPIO10_0OE 0x04
#define GPIO10_0O 0x02
#define GPIO10_0I 0x01
/* GPIO23 register: offset 7f */
#define GPIO32_3OE 0x20
#define GPIO32_3O 0x10
#define GPIO32_3I 0x08
#define GPIO32_2OE 0x04
#define GPIO32_2O 0x02
#define GPIO32_2I 0x01
/* rx status at the end of received packets */
/* byte 0 and 1 is packet length in little endian */
/* byte 2 is receive status */
#define RSR_DRIBBLE 0x10
#define RSR_CRC 0x08
#define RSR_RUNT 0x04
#define RSR_LONG 0x02
#define RSR_MULTI 0x01
#define RSR_ERRORS \
(RSR_DRIBBLE | RSR_CRC | RSR_RUNT | RSR_LONG | RSR_MULTI)
#define RSR_BITS \
"\020" \
"\005DRIBBLE" \
"\004CRC" \
"\003RUNT" \
"\002LONG" \
"\001MULTI"
/* byte 3 is reserved */
/* TEST register: offset 80 */
#endif /* __ADM8511_H__ */