summaryrefslogtreecommitdiff
path: root/sys/dev/ic/dwqereg.h
blob: d35a811571a16d98ca672d17ec188111d4d92132 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
/*	$OpenBSD: dwqereg.h,v 1.2 2023/02/16 14:43:53 kettenis Exp $	*/
/*
 * Copyright (c) 2008, 2019 Mark Kettenis <kettenis@openbsd.org>
 * Copyright (c) 2017, 2022 Patrick Wildt <patrick@blueri.se>
 *
 * Permission to use, copy, modify, and distribute this software for any
 * purpose with or without fee is hereby granted, provided that the above
 * copyright notice and this permission notice appear in all copies.
 *
 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 */

#define GMAC_MAC_CONF		0x0000
#define  GMAC_MAC_CONF_CST		(1 << 21)
#define  GMAC_MAC_CONF_ACS		(1 << 20)
#define  GMAC_MAC_CONF_BE		(1 << 18)
#define  GMAC_MAC_CONF_JD		(1 << 17)
#define  GMAC_MAC_CONF_JE		(1 << 16)
#define  GMAC_MAC_CONF_PS		(1 << 15)
#define  GMAC_MAC_CONF_FES		(1 << 14)
#define  GMAC_MAC_CONF_DM		(1 << 13)
#define  GMAC_MAC_CONF_DCRS		(1 << 9)
#define  GMAC_MAC_CONF_TE		(1 << 1)
#define  GMAC_MAC_CONF_RE		(1 << 0)
#define GMAC_MAC_PACKET_FILTER	0x0008
#define  GMAC_MAC_PACKET_FILTER_HPF	(1 << 10)
#define  GMAC_MAC_PACKET_FILTER_PCF_MASK (3 << 6)
#define  GMAC_MAC_PACKET_FILTER_PCF_ALL	(2 << 6)
#define  GMAC_MAC_PACKET_FILTER_DBF	(1 << 5)
#define  GMAC_MAC_PACKET_FILTER_PM	(1 << 4)
#define  GMAC_MAC_PACKET_FILTER_HMC	(1 << 2)
#define  GMAC_MAC_PACKET_FILTER_HUC	(1 << 1)
#define  GMAC_MAC_PACKET_FILTER_PR	(1 << 0)
#define GMAC_MAC_HASH_TAB_REG0	0x0010
#define GMAC_MAC_HASH_TAB_REG1	0x0014
#define GMAC_VERSION		0x0020
#define  GMAC_VERSION_SNPS_MASK		0xff
#define GMAC_INT_MASK		0x003c
#define  GMAC_INT_MASK_LPIIM		(1 << 10)
#define  GMAC_INT_MASK_PIM		(1 << 3)
#define  GMAC_INT_MASK_RIM		(1 << 0)
#define GMAC_QX_TX_FLOW_CTRL(x)	(0x0070 + (x) * 4)
#define  GMAC_QX_TX_FLOW_CTRL_PT_SHIFT	16
#define  GMAC_QX_TX_FLOW_CTRL_TFE	(1 << 0)
#define GMAC_RX_FLOW_CTRL	0x0090
#define  GMAC_RX_FLOW_CTRL_RFE		(1 << 0)
#define GMAC_RXQ_CTRL0		0x00a0
#define  GMAC_RXQ_CTRL0_QUEUE_CLR(x)	(0x3 << ((x) * 2)
#define  GMAC_RXQ_CTRL0_AVB_QUEUE_EN(x)	(1 << ((x) * 2))
#define  GMAC_RXQ_CTRL0_DCB_QUEUE_EN(x)	(2 << ((x) * 2))
#define GMAC_RXQ_CTRL1		0x00a4
#define GMAC_RXQ_CTRL2		0x00a8
#define GMAC_RXQ_CTRL3		0x00ac
#define GMAC_INT_STATUS		0x00b0
#define GMAC_INT_EN		0x00b4
#define GMAC_MAC_1US_TIC_CTR	0x00dc
#define GMAC_MAC_HW_FEATURE(x)	(0x011c + (x) * 0x4)
#define  GMAC_MAC_HW_FEATURE1_TXFIFOSIZE(x) (((x) >> 6) & 0x1f)
#define  GMAC_MAC_HW_FEATURE1_RXFIFOSIZE(x) (((x) >> 0) & 0x3f)
#define GMAC_MAC_MDIO_ADDR	0x0200
#define  GMAC_MAC_MDIO_ADDR_PA_SHIFT	21
#define  GMAC_MAC_MDIO_ADDR_RDA_SHIFT	16
#define  GMAC_MAC_MDIO_ADDR_CR_SHIFT	8
#define  GMAC_MAC_MDIO_ADDR_CR_60_100	0
#define  GMAC_MAC_MDIO_ADDR_CR_100_150	1
#define  GMAC_MAC_MDIO_ADDR_CR_20_35	2
#define  GMAC_MAC_MDIO_ADDR_CR_35_60	3
#define  GMAC_MAC_MDIO_ADDR_CR_150_250	4
#define  GMAC_MAC_MDIO_ADDR_CR_250_300	5
#define  GMAC_MAC_MDIO_ADDR_CR_300_500	6
#define  GMAC_MAC_MDIO_ADDR_CR_500_800	7
#define  GMAC_MAC_MDIO_ADDR_SKAP	(1 << 4)
#define  GMAC_MAC_MDIO_ADDR_GOC_READ	(3 << 2)
#define  GMAC_MAC_MDIO_ADDR_GOC_WRITE	(1 << 2)
#define  GMAC_MAC_MDIO_ADDR_C45E	(1 << 1)
#define  GMAC_MAC_MDIO_ADDR_GB		(1 << 0)
#define GMAC_MAC_MDIO_DATA	0x0204
#define GMAC_MAC_ADDR0_HI	0x0300
#define GMAC_MAC_ADDR0_LO	0x0304

#define GMAC_MTL_OPERATION_MODE	0x0c00
#define  GMAC_MTL_FRPE			(1 << 15)
#define  GMAC_MTL_OPERATION_SCHALG_MASK	(0x3 << 5)
#define  GMAC_MTL_OPERATION_SCHALG_WRR	(0x0 << 5)
#define  GMAC_MTL_OPERATION_SCHALG_WFQ	(0x1 << 5)
#define  GMAC_MTL_OPERATION_SCHALG_DWRR	(0x2 << 5)
#define  GMAC_MTL_OPERATION_SCHALG_SP	(0x3 << 5)
#define  GMAC_MTL_OPERATION_RAA_MASK	(0x1 << 2)
#define  GMAC_MTL_OPERATION_RAA_SP	(0x0 << 2)
#define  GMAC_MTL_OPERATION_RAA_WSP	(0x1 << 2)

#define GMAC_MTL_CHAN_BASE_ADDR(x)	(0x0d00 + (x) * 0x40)
#define GMAC_MTL_CHAN_TX_OP_MODE(x)	(GMAC_MTL_CHAN_BASE_ADDR(x) + 0x0)
#define  GMAC_MTL_CHAN_TX_OP_MODE_TQS_MASK	(0x1ffU << 16)
#define  GMAC_MTL_CHAN_TX_OP_MODE_TQS_SHIFT	16
#define  GMAC_MTL_CHAN_TX_OP_MODE_TTC_MASK	(0x7 << 4)
#define  GMAC_MTL_CHAN_TX_OP_MODE_TTC_SHIFT	4
#define  GMAC_MTL_CHAN_TX_OP_MODE_TTC_32	0
#define  GMAC_MTL_CHAN_TX_OP_MODE_TTC_64	(1 << 4)
#define  GMAC_MTL_CHAN_TX_OP_MODE_TTC_96	(2 << 4)
#define  GMAC_MTL_CHAN_TX_OP_MODE_TTC_128	(3 << 4)
#define  GMAC_MTL_CHAN_TX_OP_MODE_TTC_192	(4 << 4)
#define  GMAC_MTL_CHAN_TX_OP_MODE_TTC_256	(5 << 4)
#define  GMAC_MTL_CHAN_TX_OP_MODE_TTC_384	(6 << 4)
#define  GMAC_MTL_CHAN_TX_OP_MODE_TTC_512	(7 << 4)
#define  GMAC_MTL_CHAN_TX_OP_MODE_TXQEN_MASK	(0x3 << 2)
#define  GMAC_MTL_CHAN_TX_OP_MODE_TXQEN_AV	(1 << 2)
#define  GMAC_MTL_CHAN_TX_OP_MODE_TXQEN		(2 << 2)
#define  GMAC_MTL_CHAN_TX_OP_MODE_TSF		(1 << 1)
#define  GMAC_MTL_CHAN_TX_OP_MODE_FTQ		(1 << 0)
#define GMAC_MTL_CHAN_TX_DEBUG(x)	(GMAC_MTL_CHAN_BASE_ADDR(x) + 0x8)
#define GMAC_MTL_CHAN_INT_CTRL(x)	(GMAC_MTL_CHAN_BASE_ADDR(x) + 0x2c)
#define GMAC_MTL_CHAN_RX_OP_MODE(x)	(GMAC_MTL_CHAN_BASE_ADDR(x) + 0x30)
#define  GMAC_MTL_CHAN_RX_OP_MODE_RQS_MASK	(0x3ffU << 20)
#define  GMAC_MTL_CHAN_RX_OP_MODE_RQS_SHIFT	20
#define  GMAC_MTL_CHAN_RX_OP_MODE_RFD_MASK	(0x3fU << 14)
#define  GMAC_MTL_CHAN_RX_OP_MODE_RFD_SHIFT	14
#define  GMAC_MTL_CHAN_RX_OP_MODE_RFA_MASK	(0x3fU << 8)
#define  GMAC_MTL_CHAN_RX_OP_MODE_RFA_SHIFT	8
#define  GMAC_MTL_CHAN_RX_OP_MODE_EHFC		(1 << 7)
#define  GMAC_MTL_CHAN_RX_OP_MODE_RSF		(1 << 5)
#define  GMAC_MTL_CHAN_RX_OP_MODE_RTC_MASK	(0x3 << 3)
#define  GMAC_MTL_CHAN_RX_OP_MODE_RTC_SHIFT	3
#define  GMAC_MTL_CHAN_RX_OP_MODE_RTC_32	(1 << 3)
#define  GMAC_MTL_CHAN_RX_OP_MODE_RTC_64	(0 << 3)
#define  GMAC_MTL_CHAN_RX_OP_MODE_RTC_96	(2 << 3)
#define  GMAC_MTL_CHAN_RX_OP_MODE_RTC_128	(3 << 3)
#define GMAC_MTL_CHAN_RX_DEBUG(x)	(GMAC_MTL_CHAN_BASE_ADDR(x) + 0x38)

#define GMAC_BUS_MODE		0x1000
#define  GMAC_BUS_MODE_DCHE		(1 << 19)
#define  GMAC_BUS_MODE_SWR		(1 << 0)
#define GMAC_SYS_BUS_MODE	0x1004
#define  GMAC_SYS_BUS_MODE_EN_LPI		(1U << 31)
#define  GMAC_SYS_BUS_MODE_LPI_XIT_FRM		(1 << 30)
#define  GMAC_SYS_BUS_MODE_WR_OSR_LMT_MASK	(0xf << 24)
#define  GMAC_SYS_BUS_MODE_WR_OSR_LMT_SHIFT	24
#define  GMAC_SYS_BUS_MODE_RD_OSR_LMT_MASK	(0xf << 16)
#define  GMAC_SYS_BUS_MODE_RD_OSR_LMT_SHIFT	16
#define  GMAC_SYS_BUS_MODE_MB			(1 << 14)
#define  GMAC_SYS_BUS_MODE_AAL			(1 << 12)
#define  GMAC_SYS_BUS_MODE_EAME			(1 << 11)
#define  GMAC_SYS_BUS_MODE_BLEN_256		(1 << 7)
#define  GMAC_SYS_BUS_MODE_BLEN_128		(1 << 6)
#define  GMAC_SYS_BUS_MODE_BLEN_64		(1 << 5)
#define  GMAC_SYS_BUS_MODE_BLEN_32		(1 << 4)
#define  GMAC_SYS_BUS_MODE_BLEN_16		(1 << 3)
#define  GMAC_SYS_BUS_MODE_BLEN_8		(1 << 2)
#define  GMAC_SYS_BUS_MODE_BLEN_4		(1 << 1)
#define  GMAC_SYS_BUS_MODE_FB			(1 << 0)

#define GMAC_CHAN_BASE_ADDR(x)		(0x1100 + (x) * 0x80)
#define GMAC_CHAN_CONTROL(x)		(GMAC_CHAN_BASE_ADDR(x) + 0x0)
#define  GMAC_CHAN_CONTROL_8XPBL		(1 << 16)
#define GMAC_CHAN_TX_CONTROL(x)		(GMAC_CHAN_BASE_ADDR(x) + 0x4)
#define  GMAC_CHAN_TX_CONTROL_PBL_MASK		(0x3f << 8)
#define  GMAC_CHAN_TX_CONTROL_PBL_SHIFT		8
#define  GMAC_CHAN_TX_CONTROL_OSP		(1 << 4)
#define  GMAC_CHAN_TX_CONTROL_ST		(1 << 0)
#define GMAC_CHAN_RX_CONTROL(x)		(GMAC_CHAN_BASE_ADDR(x) + 0x8)
#define  GMAC_CHAN_RX_CONTROL_RPBL_MASK		(0x3f << 17)
#define  GMAC_CHAN_RX_CONTROL_RPBL_SHIFT	17
#define  GMAC_CHAN_RX_CONTROL_SR		(1 << 0)
#define GMAC_CHAN_TX_BASE_ADDR_HI(x)	(GMAC_CHAN_BASE_ADDR(x) + 0x10)
#define GMAC_CHAN_TX_BASE_ADDR(x)	(GMAC_CHAN_BASE_ADDR(x) + 0x14)
#define GMAC_CHAN_RX_BASE_ADDR_HI(x)	(GMAC_CHAN_BASE_ADDR(x) + 0x18)
#define GMAC_CHAN_RX_BASE_ADDR(x)	(GMAC_CHAN_BASE_ADDR(x) + 0x1c)
#define GMAC_CHAN_TX_END_ADDR(x)	(GMAC_CHAN_BASE_ADDR(x) + 0x20)
#define GMAC_CHAN_RX_END_ADDR(x)	(GMAC_CHAN_BASE_ADDR(x) + 0x28)
#define GMAC_CHAN_TX_RING_LEN(x)	(GMAC_CHAN_BASE_ADDR(x) + 0x2c)
#define GMAC_CHAN_RX_RING_LEN(x)	(GMAC_CHAN_BASE_ADDR(x) + 0x30)
#define GMAC_CHAN_INTR_ENA(x)		(GMAC_CHAN_BASE_ADDR(x) + 0x34)
#define  GMAC_CHAN_INTR_ENA_NIE			(1 << 15)
#define  GMAC_CHAN_INTR_ENA_AIE			(1 << 14)
#define  GMAC_CHAN_INTR_ENA_CDE			(1 << 13)
#define  GMAC_CHAN_INTR_ENA_FBE			(1 << 12)
#define  GMAC_CHAN_INTR_ENA_ERE			(1 << 11)
#define  GMAC_CHAN_INTR_ENA_ETE			(1 << 10)
#define  GMAC_CHAN_INTR_ENA_RWE			(1 << 9)
#define  GMAC_CHAN_INTR_ENA_RSE			(1 << 8)
#define  GMAC_CHAN_INTR_ENA_RBUE		(1 << 7)
#define  GMAC_CHAN_INTR_ENA_RIE			(1 << 6)
#define  GMAC_CHAN_INTR_ENA_TBUE		(1 << 2)
#define  GMAC_CHAN_INTR_ENA_TSE			(1 << 1)
#define  GMAC_CHAN_INTR_ENA_TIE			(1 << 0)
#define GMAC_CHAN_RX_WATCHDOG(x)	(GMAC_CHAN_CONTROL(x) + 0x38)
#define GMAC_CHAN_SLOT_CTRL_STATUS(x)	(GMAC_CHAN_CONTROL(x) + 0x3c)
#define GMAC_CHAN_CUR_TX_DESC(x)	(GMAC_CHAN_CONTROL(x) + 0x44)
#define GMAC_CHAN_CUR_RX_DESC(x)	(GMAC_CHAN_CONTROL(x) + 0x4c)
#define GMAC_CHAN_CUR_TX_BUF_ADDR(x)	(GMAC_CHAN_CONTROL(x) + 0x54)
#define GMAC_CHAN_CUR_RX_BUF_ADDR(x)	(GMAC_CHAN_CONTROL(x) + 0x5c)
#define GMAC_CHAN_STATUS(x)		(GMAC_CHAN_CONTROL(x) + 0x60)
#define  GMAC_CHAN_STATUS_REB_MASK		0x7
#define  GMAC_CHAN_STATUS_REB_SHIFT		19
#define  GMAC_CHAN_STATUS_TEB_MASK		0x7
#define  GMAC_CHAN_STATUS_TEB_SHIFT		16
#define  GMAC_CHAN_STATUS_NIS			(1 << 15)
#define  GMAC_CHAN_STATUS_AIS			(1 << 14)
#define  GMAC_CHAN_STATUS_CDE			(1 << 13)
#define  GMAC_CHAN_STATUS_FBE			(1 << 12)
#define  GMAC_CHAN_STATUS_ERI			(1 << 11)
#define  GMAC_CHAN_STATUS_ETI			(1 << 10)
#define  GMAC_CHAN_STATUS_RWT			(1 << 9)
#define  GMAC_CHAN_STATUS_RPS			(1 << 8)
#define  GMAC_CHAN_STATUS_RBU			(1 << 7)
#define  GMAC_CHAN_STATUS_RI			(1 << 6)
#define  GMAC_CHAN_STATUS_TBU			(1 << 2)
#define  GMAC_CHAN_STATUS_TPS			(1 << 1)
#define  GMAC_CHAN_STATUS_TI			(1 << 0)

/*
 * DWQE descriptors.
 */

struct dwqe_desc {
	uint32_t sd_tdes0;
	uint32_t sd_tdes1;
	uint32_t sd_tdes2;
	uint32_t sd_tdes3;
};

/* Tx bits */
#define TDES2_IC		(1U << 31)
#define TDES3_ES		(1 << 15)
#define TDES3_DE		(1 << 23)
#define TDES3_LS		(1 << 28)
#define TDES3_FS		(1 << 29)
#define TDES3_OWN		(1U << 31)

/* Rx bits */
#define RDES3_ES		(1 << 15)
#define RDES3_DE		(1 << 19)
#define RDES3_RE		(1 << 20)
#define RDES3_OE		(1 << 21)
#define RDES3_RWT		(1 << 22)
#define RDES3_CE		(1 << 24)
#define RDES3_BUF1V		(1 << 24)
#define RDES3_IC		(1 << 30)
#define RDES3_OWN		(1U << 31)
#define RDES3_LENGTH		(0x7fff << 0)