Home | History | Annotate | Line # | Download | only in usb
      1  1.15       mrg /*	$NetBSD: if_axenreg.h,v 1.15 2019/07/31 09:13:16 mrg Exp $	*/
      2   1.1    nonaka /*	$OpenBSD: if_axenreg.h,v 1.1 2013/10/07 05:37:41 yuo Exp $	*/
      3   1.1    nonaka 
      4   1.1    nonaka /*
      5   1.1    nonaka  * Copyright (c) 2013 Yojiro UO <yuo (at) openbsd.org>. All right reserved.
      6   1.1    nonaka  *
      7   1.1    nonaka  */
      8   1.1    nonaka 
      9   1.2  riastrad #include <sys/rndsource.h>
     10   1.2  riastrad 
     11   1.1    nonaka /*
     12   1.1    nonaka  * Definitions for the ASIX Electronics AX88179 to ethernet controller.
     13   1.1    nonaka  */
     14   1.1    nonaka 
     15   1.1    nonaka #define AXEN_PHY_ID		0x0003
     16   1.1    nonaka #define AXEN_MCAST_FILTER_SIZE	8
     17   1.1    nonaka /* unit: KB */
     18   1.1    nonaka #define AXEN_BUFSZ_LS		8
     19   1.1    nonaka #define AXEN_BUFSZ_HS		16
     20   1.1    nonaka #define AXEN_BUFSZ_SS		24
     21   1.1    nonaka 
     22   1.1    nonaka #define AXEN_REV_UA1		0
     23   1.1    nonaka #define AXEN_REV_UA2		1
     24   1.1    nonaka 
     25   1.1    nonaka 
     26  1.13   msaitoh /* receive header */
     27   1.3     skrll /*
     28   1.1    nonaka  *                     +-multicast/broadcast
     29   1.1    nonaka  *                     |    +-rx_ok
     30   1.1    nonaka  *                     |    |     ++-----L3_type (1:ipv4, 0/2:ipv6)
     31   1.1    nonaka  *        pkt_len(13)  |    |     ||+ ++-L4_type(0: icmp, 1: UDP, 4: TCP)
     32   1.1    nonaka  * |765|43210 76543210|7654 3210 7654 3210|
     33   1.6       rin  *  | +-crc_err               |+-L4_err |+-L4_CSUM_ERR
     34   1.6       rin  *  +--drop_err                +--L3_err +--L3_CSUM_ERR
     35   1.1    nonaka  *
     36   1.1    nonaka  * ex) pkt_hdr 0x00680820
     37   1.1    nonaka  *      drop_err, crc_err: none
     38   1.1    nonaka  *      pkt_length = 104 byte
     39   1.1    nonaka  *      0x0820 = 0000 1000 0010 0000  => ipv4 icmp
     40   1.1    nonaka  *
     41   1.1    nonaka  * ex) pkt_hdr 0x004c8800
     42   1.1    nonaka  *      drop_err, crc_err: none
     43   1.1    nonaka  *      pkt_length = 76 byte
     44   1.1    nonaka  *      0x8800 = 1000 1000 0000 0000 => ipv6 mcast icmp
     45   1.1    nonaka  *
     46   1.1    nonaka  *  [memo]
     47   1.1    nonaka  *  0x0820: ipv4 icmp			0000 1000 0010 0000
     48   1.1    nonaka  *  0x8820: ipv4 icmp (broadcast)	1000 1000 0010 0000
     49   1.1    nonaka  *  0x0824: ipv4 udp (nping)		0000 1000 0010 0100
     50   1.1    nonaka  *  0x0830: ipv4 tcp (ssh)		0000 1000 0011 0000
     51   1.1    nonaka  *
     52   1.1    nonaka  *  0x0800: ipv6 icmp			0000 1000 0000 0000
     53   1.1    nonaka  *  0x8800: ipv6 icmp (multicast)	1000 1000 0000 0000
     54   1.1    nonaka  *  0x8844: ipv6 UDP/MDNS mcast		1000 1000 0100 0100
     55   1.1    nonaka  *  0x0850: ipv6 tcp (ssh)		0000 1000 0101 0000
     56   1.1    nonaka  */
     57   1.1    nonaka 
     58   1.6       rin #define	AXEN_RXHDR_DROP_ERR	(1 << 31)
     59   1.6       rin #define	AXEN_RXHDR_CRC_ERR	(1 << 29)
     60   1.1    nonaka #define AXEN_RXHDR_MCAST	(1 << 15)
     61   1.1    nonaka #define AXEN_RXHDR_RX_OK	(1 << 11)
     62   1.1    nonaka #define	AXEN_RXHDR_L3_ERR	(1 << 9)
     63   1.1    nonaka #define	AXEN_RXHDR_L4_ERR	(1 << 8)
     64   1.1    nonaka #define AXEN_RXHDR_L3CSUM_ERR 	(1 << 1)
     65   1.1    nonaka #define AXEN_RXHDR_L4CSUM_ERR	(1 << 0)
     66   1.1    nonaka 
     67   1.1    nonaka /* L4 packet type (3bit) */
     68   1.1    nonaka #define AXEN_RXHDR_L4_TYPE_MASK	0x0000001c
     69   1.1    nonaka #define AXEN_RXHDR_L4_TYPE_OFFSET	2
     70   1.1    nonaka #define   AXEN_RXHDR_L4_TYPE_ICMP	0x0
     71   1.1    nonaka #define   AXEN_RXHDR_L4_TYPE_UDP	0x1
     72   1.1    nonaka #define   AXEN_RXHDR_L4_TYPE_TCP	0x4
     73   1.1    nonaka 
     74   1.1    nonaka /* L3 packet type (2bit) */
     75   1.4       rin #define AXEN_RXHDR_L3_TYPE_MASK	0x00000060
     76   1.1    nonaka #define AXEN_RXHDR_L3_TYPE_OFFSET	5
     77   1.1    nonaka #define   AXEN_RXHDR_L3_TYPE_UNDEF	0x0
     78   1.1    nonaka #define   AXEN_RXHDR_L3_TYPE_IPV4	0x1
     79   1.1    nonaka #define   AXEN_RXHDR_L3_TYPE_IPV6	0x2
     80   1.1    nonaka 
     81   1.1    nonaka /*
     82   1.1    nonaka  * commands
     83   1.1    nonaka  */
     84   1.1    nonaka #define AXEN_CMD_LEN(x)	(((x) & 0xF000) >> 12)
     85   1.1    nonaka #define AXEN_CMD_DIR(x)	(((x) & 0x0F00) >> 8)
     86   1.1    nonaka #define AXEN_CMD_CMD(x)	 ((x) & 0x00FF)
     87   1.1    nonaka 
     88   1.1    nonaka /* ---MAC--- */
     89   1.3     skrll /*   1byte cmd   */
     90   1.1    nonaka #define AXEN_CMD_MAC_READ			0x1001
     91   1.1    nonaka #define AXEN_CMD_MAC_WRITE			0x1101
     92   1.1    nonaka 
     93   1.1    nonaka #define   AXEN_USB_UPLINK			0x02
     94   1.1    nonaka #define     AXEN_USB_FS				  0x01
     95   1.1    nonaka #define     AXEN_USB_HS				  0x02
     96   1.1    nonaka #define     AXEN_USB_SS				  0x04
     97   1.1    nonaka #define   AXEN_GENERAL_STATUS			0x03
     98   1.1    nonaka #define     AXEN_GENERAL_STATUS_MASK		  0x4
     99   1.1    nonaka #define     AXEN_REV0				  0x0
    100   1.1    nonaka #define     AXEN_REV1				  0x4
    101   1.1    nonaka #define   AXEN_UNK_05				0x05
    102   1.1    nonaka #define   AXEN_MAC_EEPROM_ADDR			0x07
    103   1.1    nonaka #define   AXEN_MAC_EEPROM_READ			0x08
    104   1.1    nonaka #define   AXEN_MAC_EEPROM_CMD			0x0a
    105   1.1    nonaka #define     AXEN_EEPROM_READ			  0x04
    106   1.1    nonaka #define     AXEN_EEPROM_WRITE			  0x08
    107   1.1    nonaka #define     AXEN_EEPROM_BUSY			  0x10
    108   1.1    nonaka #define   AXEN_MONITOR_MODE			0x24
    109   1.1    nonaka #define     AXEN_MONITOR_NONE			  0x00
    110   1.1    nonaka #define     AXEN_MONITOR_RWLC			  0x02
    111   1.1    nonaka #define     AXEN_MONITOR_RWMP			  0x04
    112   1.1    nonaka #define     AXEN_MONITOR_RWWF			  0x08
    113   1.1    nonaka #define     AXEN_MONITOR_RW_FLAG		  0x10
    114   1.1    nonaka #define     AXEN_MONITOR_PMEPOL			  0x20
    115   1.1    nonaka #define     AXEN_MONITOR_PMETYPE		  0x40
    116   1.1    nonaka #define   AXEN_UNK_28				0x28
    117   1.1    nonaka #define   AXEN_PHYCLK				0x33
    118   1.1    nonaka #define     AXEN_PHYCLK_BCS			  0x01
    119   1.1    nonaka #define     AXEN_PHYCLK_ACS			  0x02
    120   1.1    nonaka #define     AXEN_PHYCLK_ULR			  0x08
    121   1.1    nonaka #define     AXEN_PHYCLK_ACSREQ			  0x10
    122   1.1    nonaka #define   AXEN_RX_COE				0x34
    123   1.1    nonaka #define	    AXEN_RXCOE_OFF			  0x00
    124   1.1    nonaka #define	    AXEN_RXCOE_IPv4			  0x01
    125   1.1    nonaka #define	    AXEN_RXCOE_TCPv4			  0x02
    126   1.1    nonaka #define	    AXEN_RXCOE_UDPv4			  0x04
    127   1.1    nonaka #define	    AXEN_RXCOE_ICMP			  0x08
    128   1.1    nonaka #define	    AXEN_RXCOE_IGMP			  0x10
    129   1.1    nonaka #define	    AXEN_RXCOE_TCPv6			  0x20
    130   1.1    nonaka #define	    AXEN_RXCOE_UDPv6			  0x40
    131   1.1    nonaka #define	    AXEN_RXCOE_ICMPv6			  0x80
    132   1.1    nonaka #define   AXEN_TX_COE				0x35
    133   1.1    nonaka #define	    AXEN_TXCOE_OFF			  0x00
    134   1.1    nonaka #define	    AXEN_TXCOE_IPv4			  0x01
    135   1.1    nonaka #define	    AXEN_TXCOE_TCPv4			  0x02
    136   1.1    nonaka #define	    AXEN_TXCOE_UDPv4			  0x04
    137   1.1    nonaka #define	    AXEN_TXCOE_ICMP			  0x08
    138   1.1    nonaka #define	    AXEN_TXCOE_IGMP			  0x10
    139   1.1    nonaka #define	    AXEN_TXCOE_TCPv6			  0x20
    140   1.1    nonaka #define	    AXEN_TXCOE_UDPv6			  0x40
    141   1.1    nonaka #define	    AXEN_TXCOE_ICMPv6			  0x80
    142   1.1    nonaka #define   AXEN_PAUSE_HIGH_WATERMARK		0x54
    143   1.1    nonaka #define   AXEN_PAUSE_LOW_WATERMARK		0x55
    144   1.1    nonaka 
    145   1.1    nonaka 
    146   1.3     skrll /*   2byte cmd   */
    147   1.1    nonaka #define AXEN_CMD_MAC_READ2			0x2001
    148   1.1    nonaka #define AXEN_CMD_MAC_WRITE2			0x2101
    149   1.1    nonaka 
    150   1.1    nonaka #define   AXEN_MAC_RXCTL			0x0b
    151   1.1    nonaka #define     AXEN_RXCTL_STOP			  0x0000
    152   1.1    nonaka #define     AXEN_RXCTL_PROMISC			  0x0001
    153   1.1    nonaka #define     AXEN_RXCTL_ACPT_ALL_MCAST		  0x0002
    154   1.3     skrll #define     AXEN_RXCTL_HA8B			  0x0004
    155   1.1    nonaka #define     AXEN_RXCTL_AUTOB			  0x0008
    156   1.5       rin #define     AXEN_RXCTL_ACPT_MCAST		  0x0010
    157   1.1    nonaka #define     AXEN_RXCTL_ACPT_PHY_MCAST		  0x0020
    158   1.1    nonaka #define     AXEN_RXCTL_START			  0x0080
    159   1.1    nonaka #define     AXEN_RXCTL_DROPCRCERR		  0x0100
    160   1.1    nonaka #define     AXEN_RXCTL_IPE			  0x0200
    161   1.1    nonaka #define     AXEN_RXCTL_TXPADCRC			  0x0400
    162   1.1    nonaka #define   AXEN_MEDIUM_STATUS			0x22
    163   1.1    nonaka #define	    AXEN_MEDIUM_NONE			  0x0000
    164   1.1    nonaka #define	    AXEN_MEDIUM_GIGA			  0x0001
    165   1.1    nonaka #define	    AXEN_MEDIUM_FDX			  0x0002
    166   1.1    nonaka #define	    AXEN_MEDIUM_ALWAYS_ONE		  0x0004
    167   1.1    nonaka #define	    AXEN_MEDIUM_EN_125MHZ		  0x0008
    168   1.1    nonaka #define	    AXEN_MEDIUM_RXFLOW_CTRL_EN		  0x0010
    169   1.1    nonaka #define	    AXEN_MEDIUM_TXFLOW_CTRL_EN		  0x0020
    170   1.1    nonaka #define	    AXEN_MEDIUM_RECV_EN			  0x0100
    171   1.1    nonaka #define	    AXEN_MEDIUM_PS			  0x0200
    172   1.1    nonaka #define	    AXEN_MEDIUM_JUMBO_EN		  0x8040
    173   1.1    nonaka #define   AXEN_PHYPWR_RSTCTL			0x26
    174   1.1    nonaka #define     AXEN_PHYPWR_RSTCTL_BZ		  0x0010
    175   1.1    nonaka #define     AXEN_PHYPWR_RSTCTL_IPRL		  0x0020
    176   1.1    nonaka #define     AXEN_PHYPWR_RSTCTL_AUTODETACH	  0x1000
    177   1.1    nonaka 
    178   1.1    nonaka #define AXEN_CMD_EEPROM_READ			0x2004
    179   1.1    nonaka #define	    AXEN_EEPROM_STAT			  0x43
    180   1.1    nonaka 
    181   1.3     skrll /*   5byte cmd   */
    182   1.1    nonaka #define AXEN_CMD_MAC_SET_RXSR			0x5101
    183   1.1    nonaka #define   AXEN_RX_BULKIN_QCTRL			  0x2e
    184   1.1    nonaka 
    185   1.3     skrll /*   6byte cmd   */
    186   1.1    nonaka #define AXEN_CMD_MAC_READ_ETHER			0x6001
    187   1.1    nonaka #define   AXEN_CMD_MAC_NODE_ID			  0x10
    188   1.1    nonaka 
    189   1.3     skrll /*   8byte cmd   */
    190   1.1    nonaka #define AXEN_CMD_MAC_READ_FILTER		0x8001
    191   1.1    nonaka #define AXEN_CMD_MAC_WRITE_FILTER		0x8101
    192   1.1    nonaka #define   AXEN_FILTER_MULTI		 	  0x16
    193   1.1    nonaka 
    194   1.1    nonaka /* ---PHY--- */
    195   1.3     skrll /*   2byte cmd   */
    196   1.1    nonaka #define AXEN_CMD_MII_READ_REG			0x2002
    197   1.1    nonaka #define AXEN_CMD_MII_WRITE_REG			0x2102
    198   1.1    nonaka 
    199   1.1    nonaka 
    200   1.1    nonaka 
    201   1.1    nonaka /* ========= */
    202   1.1    nonaka #define AXEN_GPIO0_EN		0x01
    203   1.1    nonaka #define AXEN_GPIO0		0x02
    204   1.1    nonaka #define AXEN_GPIO1_EN		0x04
    205   1.1    nonaka #define AXEN_GPIO1		0x08
    206   1.1    nonaka #define AXEN_GPIO2_EN		0x10
    207   1.1    nonaka #define AXEN_GPIO2		0x20
    208   1.1    nonaka #define AXEN_GPIO_RELOAD_EEPROM	0x80
    209   1.1    nonaka 
    210   1.1    nonaka 
    211   1.1    nonaka #define AXEN_TIMEOUT		1000
    212   1.1    nonaka 
    213   1.9       rin #ifndef AXEN_RX_LIST_CNT
    214   1.9       rin #define AXEN_RX_LIST_CNT	4	/* 22 for SS mode in Linux driver */
    215   1.9       rin #endif
    216   1.9       rin #ifndef AXEN_TX_LIST_CNT
    217   1.9       rin #define AXEN_TX_LIST_CNT	4	/* 60 */
    218   1.9       rin #endif
    219   1.1    nonaka 
    220   1.1    nonaka 
    221   1.1    nonaka #define AXEN_CONFIG_NO		1
    222   1.1    nonaka #define AXEN_IFACE_IDX		0
    223   1.1    nonaka 
    224   1.1    nonaka struct axen_qctrl {
    225   1.1    nonaka 	uint8_t			ctrl;
    226   1.1    nonaka 	uint8_t			timer_low;
    227   1.1    nonaka 	uint8_t			timer_high;
    228   1.1    nonaka 	uint8_t			bufsize;
    229   1.1    nonaka 	uint8_t			ifg;
    230   1.1    nonaka } __packed;
    231   1.1    nonaka 
    232   1.1    nonaka struct axen_sframe_hdr {
    233   1.1    nonaka 	uint32_t		plen; /* packet length */
    234   1.1    nonaka 	uint32_t		gso;
    235   1.1    nonaka } __packed;
    236