xref: /netbsd-src/sys/dev/usb/if_muereg.h (revision d1509fdd739d1c43ac725fe6d5fd28912be43ff6)
1 /*	$NetBSD: if_muereg.h,v 1.6 2019/08/15 08:02:32 mrg Exp $	*/
2 /*	$OpenBSD: if_muereg.h,v 1.1 2018/08/03 01:50:15 kevlo Exp $	*/
3 
4 /*
5  * Copyright (c) 2018 Kevin Lo <kevlo@openbsd.org>
6  *
7  * Permission to use, copy, modify, and distribute this software for any
8  * purpose with or without fee is hereby granted, provided that the above
9  * copyright notice and this permission notice appear in all copies.
10  *
11  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
12  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
13  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
14  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
15  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
16  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
17  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
18  */
19 
20 #ifndef _IF_MUEREG_H_
21 #define _IF_MUEREG_H_
22 
23 /* XXX for ETHER_HDR_LEN and ETHER_VLAN_ENCAP_LEN */
24 #include <net/if_ether.h>
25 
26 /* XXX for IP_MAXPACKET */
27 #include <netinet/in.h>
28 #include <netinet/ip.h>
29 /* XXX for struct ip6_hdr */
30 #include <netinet/ip6.h>
31 /* XXX for struct mue_txbuf_hdr */
32 #include <dev/usb/if_muevar.h>
33 
34 /* USB vendor requests */
35 #define MUE_UR_WRITEREG         0xa0
36 #define MUE_UR_READREG		0xa1
37 
38 /* registers */
39 #define MUE_ID_REV			0x000
40 #define MUE_INT_STATUS			0x00c
41 #define MUE_HW_CFG			0x010
42 #define MUE_PMT_CTL			0x014
43 #define MUE_LED_CFG			0x018
44 #define MUE_DP_SEL			0x024
45 #define MUE_DP_CMD			0x028
46 #define MUE_DP_ADDR			0x02c
47 #define MUE_DP_DATA			0x030
48 #define MUE_7500_BURST_CAP		0x034
49 #define MUE_7500_INT_EP_CTL		0x038
50 #define MUE_7500_BULKIN_DELAY		0x03c
51 #define MUE_E2P_CMD			0x040
52 #define MUE_E2P_DATA			0x044
53 #define MUE_E2P_IND			0x0a5
54 #define MUE_7500_RFE_CTL		0x060
55 #define MUE_USB_CFG0			0x080
56 #define MUE_USB_CFG1			0x084
57 #define MUE_7500_FCT_RX_CTL		0x090
58 #define MUE_7800_BURST_CAP		0x090
59 #define MUE_7500_FCT_TX_CTL		0x094
60 #define MUE_7800_BULKIN_DELAY		0x094
61 #define MUE_7500_FCT_RX_FIFO_END	0x098
62 #define MUE_7800_INT_EP_CTL		0x098
63 #define MUE_7500_FCT_TX_FIFO_END	0x09c
64 #define MUE_7500_FCT_FLOW		0x0a0
65 #define MUE_7800_RFE_CTL		0x0b0
66 #define MUE_7800_FCT_RX_CTL		0x0c0
67 #define MUE_7800_FCT_TX_CTL		0x0c4
68 #define MUE_7800_FCT_RX_FIFO_END	0x0c8
69 #define MUE_7800_FCT_TX_FIFO_END	0x0cc
70 #define MUE_7800_FCT_FLOW		0x0d0
71 #define MUE_LTM_INDEX(idx)		(0x0e0 + (idx) * 4)
72 #define MUE_NUM_LTM_INDEX		6
73 #define MUE_MAC_CR			0x100
74 #define MUE_MAC_RX			0x104
75 #define MUE_MAC_TX			0x108
76 #define MUE_FLOW			0x10c
77 #define MUE_RX_ADDRH			0x118
78 #define MUE_RX_ADDRL			0x11c
79 #define MUE_MII_ACCESS			0x120
80 #define MUE_MII_DATA			0x124
81 #define MUE_7500_ADDR_FILTX_BASE	0x300
82 #define MUE_7500_ADDR_FILTX(i)		(MUE_7500_ADDR_FILTX_BASE + 8 * (i))
83 #define MUE_7800_ADDR_FILTX_BASE	0x400
84 #define MUE_7800_ADDR_FILTX(i)		(MUE_7800_ADDR_FILTX_BASE + 8 * (i))
85 #define MUE_NUM_ADDR_FILTX		33
86 
87 /* device ID and revision register */
88 #define MUE_ID_REV_ID		__BITS(16,31)
89 #define MUE_ID_REV_REV		__BITS(0,15)
90 
91 /* hardware configuration register */
92 #define MUE_HW_CFG_SRST		0x00000001
93 #define MUE_HW_CFG_LRST		0x00000002
94 #define MUE_HW_CFG_BCE		0x00000004
95 #define MUE_HW_CFG_MEF		0x00000010
96 #define MUE_HW_CFG_BIR		0x00000080
97 #define MUE_HW_CFG_LED0_EN	0x00100000
98 #define MUE_HW_CFG_LED1_EN	0x00200000
99 
100 /* power management control register */
101 #define MUE_PMT_CTL_PHY_RST	0x00000010
102 #define MUE_PMT_CTL_READY	0x00000080
103 
104 /* LED configuration register */
105 #define MUE_LED_CFG_LEDGPIO_EN		0x0000f000
106 #define MUE_LED_CFG_LED10_FUN_SEL	0x40000000
107 #define MUE_LED_CFG_LED2_FUN_SEL	0x80000000
108 
109 /* data port select register */
110 #define MUE_DP_SEL_RSEL_MASK	0x0000000f
111 #define MUE_DP_SEL_VHF		0x00000001
112 #define MUE_DP_SEL_DPRDY	0x80000000
113 #define MUE_DP_SEL_VHF_HASH_LEN	16
114 #define MUE_DP_SEL_VHF_VLAN_LEN	128
115 
116 /* data port command register */
117 #define MUE_DP_CMD_WRITE	0x00000001
118 
119 /* burst cap register and etc */
120 #define MUE_SS_USB_PKT_SIZE		1024
121 #define MUE_HS_USB_PKT_SIZE		512
122 #define MUE_FS_USB_PKT_SIZE		64
123 #define MUE_7500_HS_RX_BUFSIZE		\
124 	(16 * 1024 + 5 * MUE_HS_USB_PKT_SIZE)
125 #define MUE_7500_FS_RX_BUFSIZE		\
126 	(6 * 1024 + 33 * MUE_FS_USB_PKT_SIZE)
127 #define MUE_7500_MAX_RX_FIFO_SIZE	(20 * 1024)
128 #define MUE_7500_MAX_TX_FIFO_SIZE	(12 * 1024)
129 #define MUE_7800_RX_BUFSIZE		(12 * 1024)
130 #define MUE_7800_MAX_RX_FIFO_SIZE	MUE_7800_RX_BUFSIZE
131 #define MUE_7800_MAX_TX_FIFO_SIZE	MUE_7800_RX_BUFSIZE
132 #define MUE_FRAME_LEN(mtu)		\
133 	(mtu + ETHER_HDR_LEN + ETHER_CRC_LEN + ETHER_VLAN_ENCAP_LEN)
134 #define MUE_TSO_FRAME_LEN		MUE_FRAME_LEN(IP_MAXPACKET)
135 #define MUE_TX_BUFSIZE			\
136 	(sizeof(struct mue_txbuf_hdr) + MUE_TSO_FRAME_LEN)
137 
138 /* interrupt endpoint control register */
139 #define MUE_INT_EP_CTL_PHY_INT		0x20000
140 
141 /* bulk-in delay register */
142 #define MUE_7500_DEFAULT_BULKIN_DELAY	0x00002000
143 #define MUE_7800_DEFAULT_BULKIN_DELAY	0x00000800
144 
145 /* EEPROM command register */
146 #define MUE_E2P_CMD_ADDR_MASK	0x000001ff
147 #define MUE_E2P_CMD_READ	0x00000000
148 #define MUE_E2P_CMD_LOADED	0x00000200
149 #define MUE_E2P_CMD_TIMEOUT	0x00000400
150 #define MUE_E2P_CMD_BUSY	0x80000000
151 #define MUE_E2P_IND_OFFSET	0x000
152 #define	MUE_E2P_MAC_OFFSET	0x001
153 #define	MUE_E2P_LTM_OFFSET	0x03f
154 
155 /* Receive Filtering Engine control register */
156 #define MUE_RFE_CTL_PERFECT		0x00000002
157 #define MUE_RFE_CTL_MULTICAST_HASH	0x00000008
158 #define MUE_RFE_CTL_VLAN_FILTER		0x00000020
159 #define MUE_RFE_CTL_UNICAST		0x00000100
160 #define MUE_RFE_CTL_MULTICAST		0x00000200
161 #define MUE_RFE_CTL_BROADCAST		0x00000400
162 #define MUE_RFE_CTL_IP_COE		0x00000800
163 #define MUE_RFE_CTL_TCPUDP_COE		0x00001000
164 #define MUE_RFE_CTL_ICMP_COE		0x00002000
165 #define MUE_RFE_CTL_IGMP_COE		0x00004000
166 
167 /* USB configuration register 0 */
168 #define MUE_USB_CFG0_BCE	0x00000020
169 #define MUE_USB_CFG0_BIR	0x00000040
170 
171 /* USB configuration register 1 */
172 #define MUE_USB_CFG1_LTM_ENABLE		0x00000100
173 #define MUE_USB_CFG1_DEV_U1_INIT_EN	0x00000400
174 #define MUE_USB_CFG1_DEV_U2_INIT_EN	0x00001000
175 
176 /* RX FIFO control register */
177 #define MUE_FCT_RX_CTL_EN	0x80000000
178 
179 /* TX FIFO control register */
180 #define MUE_FCT_TX_CTL_EN	0x80000000
181 
182 /* MAC control register */
183 #define MUE_MAC_CR_RST		0x00000001
184 #define MUE_MAC_CR_FULL_DUPLEX	0x00000008
185 #define MUE_MAC_CR_AUTO_SPEED	0x00000800
186 #define MUE_MAC_CR_AUTO_DUPLEX	0x00001000
187 #define MUE_MAC_CR_GMII_EN	0x00080000
188 
189 /* MAC receive register */
190 #define MUE_MAC_RX_RXEN			0x00000001
191 #define MUE_MAC_RX_MAX_SIZE_MASK	0x3fff0000
192 #define MUE_MAC_RX_MAX_SIZE_SHIFT	16
193 #define MUE_MAC_RX_MAX_LEN(x)	\
194 	(((x) << MUE_MAC_RX_MAX_SIZE_SHIFT) & MUE_MAC_RX_MAX_SIZE_MASK)
195 
196 /* MAC transmit register */
197 #define MUE_MAC_TX_TXEN		0x00000001
198 
199 /* flow control register */
200 #define MUE_FLOW_PAUSE_TIME	0x0000ffff
201 #define MUE_FLOW_RX_FCEN	0x20000000
202 #define MUE_FLOW_TX_FCEN	0x40000000
203 
204 /* MII access register */
205 #define MUE_MII_ACCESS_READ		0x00000000
206 #define MUE_MII_ACCESS_BUSY		0x00000001
207 #define MUE_MII_ACCESS_WRITE		0x00000002
208 #define MUE_MII_ACCESS_REGADDR_MASK	0x000007c0
209 #define MUE_MII_ACCESS_REGADDR_SHIFT	6
210 #define MUE_MII_ACCESS_PHYADDR_MASK	0x0000f800
211 #define MUE_MII_ACCESS_PHYADDR_SHIFT	11
212 #define MUE_MII_ACCESS_REGADDR(x)	\
213 	(((x) << MUE_MII_ACCESS_REGADDR_SHIFT) & MUE_MII_ACCESS_REGADDR_MASK)
214 #define MUE_MII_ACCESS_PHYADDR(x)	\
215 	(((x) << MUE_MII_ACCESS_PHYADDR_SHIFT) & MUE_MII_ACCESS_PHYADDR_MASK)
216 
217 /* MAC address perfect filter register */
218 #define MUE_ADDR_FILTX_VALID	0x80000000
219 
220 /* undocumented OTP registers from Linux via FreeBSD */
221 #define MUE_OTP_BASE_ADDR		0x01000
222 #define MUE_OTP_ADDR(off)		(MUE_OTP_BASE_ADDR + 4 * (off))
223 #define MUE_OTP_PWR_DN			MUE_OTP_ADDR(0x00)
224 #define MUE_OTP_PWR_DN_PWRDN_N		0x01
225 #define MUE_OTP_ADDR1			MUE_OTP_ADDR(0x01)
226 #define MUE_OTP_ADDR1_MASK		0x1f
227 #define MUE_OTP_ADDR2			MUE_OTP_ADDR(0x02)
228 #define MUE_OTP_ADDR2_MASK		0xff
229 #define MUE_OTP_ADDR3			MUE_OTP_ADDR(0x03)
230 #define MUE_OTP_ADDR3_MASK		0x03
231 #define MUE_OTP_RD_DATA			MUE_OTP_ADDR(0x06)
232 #define MUE_OTP_FUNC_CMD		MUE_OTP_ADDR(0x08)
233 #define MUE_OTP_FUNC_CMD_RESET		0x04
234 #define MUE_OTP_FUNC_CMD_PROGRAM	0x02
235 #define MUE_OTP_FUNC_CMD_READ		0x01
236 #define MUE_OTP_MAC_OFFSET		0x01
237 #define MUE_OTP_IND_OFFSET		0x00
238 #define MUE_OTP_IND_1			0xf3
239 #define MUE_OTP_IND_2			0xf7
240 #define MUE_OTP_CMD_GO			MUE_OTP_ADDR(0x0a)
241 #define MUE_OTP_CMD_GO_GO		0x01
242 #define MUE_OTP_STATUS			MUE_OTP_ADDR(0x0a)
243 #define MUE_OTP_STATUS_OTP_LOCK		0x10
244 #define MUE_OTP_STATUS_BUSY		0x01
245 
246 #endif /* _IF_MUEREG_H_ */
247