xref: /openbmc/linux/drivers/net/usb/aqc111.h (revision 0203146646be831de832e7fd2dc4ef1f32958f51)
1 /* SPDX-License-Identifier: GPL-2.0-or-later
2  * Aquantia Corp. Aquantia AQtion USB to 5GbE Controller
3  * Copyright (C) 2003-2005 David Hollis <dhollis@davehollis.com>
4  * Copyright (C) 2005 Phil Chang <pchang23@sbcglobal.net>
5  * Copyright (C) 2002-2003 TiVo Inc.
6  * Copyright (C) 2017-2018 ASIX
7  * Copyright (C) 2018 Aquantia Corp.
8  */
9 
10 #ifndef __LINUX_USBNET_AQC111_H
11 #define __LINUX_USBNET_AQC111_H
12 
13 #define URB_SIZE	(1024 * 62)
14 
15 #define AQ_ACCESS_MAC			0x01
16 #define AQ_FLASH_PARAMETERS		0x20
17 #define AQ_PHY_POWER			0x31
18 #define AQ_PHY_OPS			0x61
19 
20 #define AQ_USB_PHY_SET_TIMEOUT		10000
21 #define AQ_USB_SET_TIMEOUT		4000
22 
23 /* Feature. ********************************************/
24 #define AQ_SUPPORT_FEATURE	(NETIF_F_SG | NETIF_F_IP_CSUM |\
25 				 NETIF_F_IPV6_CSUM | NETIF_F_RXCSUM)
26 
27 #define AQ_SUPPORT_HW_FEATURE	(NETIF_F_SG | NETIF_F_IP_CSUM |\
28 				 NETIF_F_IPV6_CSUM | NETIF_F_RXCSUM)
29 
30 /* SFR Reg. ********************************************/
31 
32 #define SFR_GENERAL_STATUS		0x03
33 #define SFR_CHIP_STATUS			0x05
34 #define SFR_RX_CTL			0x0B
35 	#define SFR_RX_CTL_TXPADCRC		0x0400
36 	#define SFR_RX_CTL_IPE			0x0200
37 	#define SFR_RX_CTL_DROPCRCERR		0x0100
38 	#define SFR_RX_CTL_START		0x0080
39 	#define SFR_RX_CTL_RF_WAK		0x0040
40 	#define SFR_RX_CTL_AP			0x0020
41 	#define SFR_RX_CTL_AM			0x0010
42 	#define SFR_RX_CTL_AB			0x0008
43 	#define SFR_RX_CTL_AMALL		0x0002
44 	#define SFR_RX_CTL_PRO			0x0001
45 	#define SFR_RX_CTL_STOP			0x0000
46 #define SFR_INTER_PACKET_GAP_0		0x0D
47 #define SFR_NODE_ID			0x10
48 #define SFR_MULTI_FILTER_ARRY		0x16
49 #define SFR_MEDIUM_STATUS_MODE		0x22
50 	#define SFR_MEDIUM_XGMIIMODE		0x0001
51 	#define SFR_MEDIUM_FULL_DUPLEX		0x0002
52 	#define SFR_MEDIUM_RXFLOW_CTRLEN	0x0010
53 	#define SFR_MEDIUM_TXFLOW_CTRLEN	0x0020
54 	#define SFR_MEDIUM_JUMBO_EN		0x0040
55 	#define SFR_MEDIUM_RECEIVE_EN		0x0100
56 #define SFR_MONITOR_MODE		0x24
57 	#define SFR_MONITOR_MODE_EPHYRW		0x01
58 	#define SFR_MONITOR_MODE_RWLC		0x02
59 	#define SFR_MONITOR_MODE_RWMP		0x04
60 	#define SFR_MONITOR_MODE_RWWF		0x08
61 	#define SFR_MONITOR_MODE_RW_FLAG	0x10
62 	#define SFR_MONITOR_MODE_PMEPOL		0x20
63 	#define SFR_MONITOR_MODE_PMETYPE	0x40
64 #define SFR_PHYPWR_RSTCTL		0x26
65 	#define SFR_PHYPWR_RSTCTL_BZ		0x0010
66 	#define SFR_PHYPWR_RSTCTL_IPRL		0x0020
67 #define SFR_VLAN_ID_ADDRESS		0x2A
68 #define SFR_VLAN_ID_CONTROL		0x2B
69 	#define SFR_VLAN_CONTROL_WE		0x0001
70 	#define SFR_VLAN_CONTROL_RD		0x0002
71 	#define SFR_VLAN_CONTROL_VSO		0x0010
72 	#define SFR_VLAN_CONTROL_VFE		0x0020
73 #define SFR_VLAN_ID_DATA0		0x2C
74 #define SFR_VLAN_ID_DATA1		0x2D
75 #define SFR_RX_BULKIN_QCTRL		0x2E
76 	#define SFR_RX_BULKIN_QCTRL_TIME	0x01
77 	#define SFR_RX_BULKIN_QCTRL_IFG		0x02
78 	#define SFR_RX_BULKIN_QCTRL_SIZE	0x04
79 #define SFR_RX_BULKIN_QTIMR_LOW		0x2F
80 #define SFR_RX_BULKIN_QTIMR_HIGH	0x30
81 #define SFR_RX_BULKIN_QSIZE		0x31
82 #define SFR_RX_BULKIN_QIFG		0x32
83 #define SFR_RXCOE_CTL			0x34
84 	#define SFR_RXCOE_IP			0x01
85 	#define SFR_RXCOE_TCP			0x02
86 	#define SFR_RXCOE_UDP			0x04
87 	#define SFR_RXCOE_ICMP			0x08
88 	#define SFR_RXCOE_IGMP			0x10
89 	#define SFR_RXCOE_TCPV6			0x20
90 	#define SFR_RXCOE_UDPV6			0x40
91 	#define SFR_RXCOE_ICMV6			0x80
92 #define SFR_TXCOE_CTL			0x35
93 	#define SFR_TXCOE_IP			0x01
94 	#define SFR_TXCOE_TCP			0x02
95 	#define SFR_TXCOE_UDP			0x04
96 	#define SFR_TXCOE_ICMP			0x08
97 	#define SFR_TXCOE_IGMP			0x10
98 	#define SFR_TXCOE_TCPV6			0x20
99 	#define SFR_TXCOE_UDPV6			0x40
100 	#define SFR_TXCOE_ICMV6			0x80
101 #define SFR_BM_INT_MASK			0x41
102 #define SFR_BMRX_DMA_CONTROL		0x43
103 	#define SFR_BMRX_DMA_EN			0x80
104 #define SFR_BMTX_DMA_CONTROL		0x46
105 #define SFR_PAUSE_WATERLVL_LOW		0x54
106 #define SFR_PAUSE_WATERLVL_HIGH		0x55
107 #define SFR_ARC_CTRL			0x9E
108 #define SFR_SWP_CTRL			0xB1
109 #define SFR_TX_PAUSE_RESEND_T		0xB2
110 #define SFR_ETH_MAC_PATH		0xB7
111 	#define SFR_RX_PATH_READY		0x01
112 #define SFR_BULK_OUT_CTRL		0xB9
113 	#define SFR_BULK_OUT_FLUSH_EN		0x01
114 	#define SFR_BULK_OUT_EFF_EN		0x02
115 
116 #define AQ_FW_VER_MAJOR			0xDA
117 #define AQ_FW_VER_MINOR			0xDB
118 #define AQ_FW_VER_REV			0xDC
119 
120 /*PHY_OPS**********************************************************************/
121 
122 #define AQ_ADV_100M	BIT(0)
123 #define AQ_ADV_1G	BIT(1)
124 #define AQ_ADV_2G5	BIT(2)
125 #define AQ_ADV_5G	BIT(3)
126 #define AQ_ADV_MASK	0x0F
127 
128 #define AQ_PAUSE	BIT(16)
129 #define AQ_ASYM_PAUSE	BIT(17)
130 #define AQ_LOW_POWER	BIT(18)
131 #define AQ_PHY_POWER_EN	BIT(19)
132 #define AQ_WOL		BIT(20)
133 #define AQ_DOWNSHIFT	BIT(21)
134 
135 #define AQ_DSH_RETRIES_SHIFT	0x18
136 #define AQ_DSH_RETRIES_MASK	0xF000000
137 
138 /******************************************************************************/
139 
140 struct aqc111_data {
141 	u8 link_speed;
142 	u8 link;
143 	u8 autoneg;
144 	u32 advertised_speed;
145 	struct {
146 		u8 major;
147 		u8 minor;
148 		u8 rev;
149 	} fw_ver;
150 	u32 phy_cfg;
151 };
152 
153 #define AQ_LS_MASK		0x8000
154 #define AQ_SPEED_MASK		0x7F00
155 #define AQ_SPEED_SHIFT		0x0008
156 #define AQ_INT_SPEED_5G		0x000F
157 #define AQ_INT_SPEED_2_5G	0x0010
158 #define AQ_INT_SPEED_1G		0x0011
159 #define AQ_INT_SPEED_100M	0x0013
160 
161 /* TX Descriptor */
162 #define AQ_TX_DESC_LEN_MASK	0x1FFFFF
163 #define AQ_TX_DESC_DROP_PADD	BIT(28)
164 
165 #define AQ_RX_HW_PAD			0x02
166 
167 /* RX Packet Descriptor */
168 #define AQ_RX_PD_L4_ERR		BIT(0)
169 #define AQ_RX_PD_L3_ERR		BIT(1)
170 #define AQ_RX_PD_L4_TYPE_MASK	0x1C
171 #define AQ_RX_PD_L4_UDP		0x04
172 #define AQ_RX_PD_L4_TCP		0x10
173 #define AQ_RX_PD_L3_TYPE_MASK	0x60
174 #define AQ_RX_PD_L3_IP		0x20
175 #define AQ_RX_PD_L3_IP6		0x40
176 
177 #define AQ_RX_PD_RX_OK		BIT(11)
178 #define AQ_RX_PD_DROP		BIT(31)
179 #define AQ_RX_PD_LEN_MASK	0x7FFF0000
180 #define AQ_RX_PD_LEN_SHIFT	0x10
181 
182 /* RX Descriptor header */
183 #define AQ_RX_DH_PKT_CNT_MASK		0x1FFF
184 #define AQ_RX_DH_DESC_OFFSET_MASK	0xFFFFE000
185 #define AQ_RX_DH_DESC_OFFSET_SHIFT	0x0D
186 
187 static struct {
188 	unsigned char ctrl;
189 	unsigned char timer_l;
190 	unsigned char timer_h;
191 	unsigned char size;
192 	unsigned char ifg;
193 } AQC111_BULKIN_SIZE[] = {
194 	/* xHCI & EHCI & OHCI */
195 	{7, 0x00, 0x01, 0x1E, 0xFF},/* 10G, 5G, 2.5G, 1G */
196 	{7, 0xA0, 0x00, 0x14, 0x00},/* 100M */
197 	/* Jumbo packet */
198 	{7, 0x00, 0x01, 0x18, 0xFF},
199 };
200 
201 #endif /* __LINUX_USBNET_AQC111_H */
202