]> Git Repo - J-linux.git/blob - drivers/net/ethernet/renesas/rswitch.h
Merge tag 'vfs-6.13-rc7.fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/vfs/vfs
[J-linux.git] / drivers / net / ethernet / renesas / rswitch.h
1 /* SPDX-License-Identifier: GPL-2.0 */
2 /* Renesas Ethernet Switch device driver
3  *
4  * Copyright (C) 2022 Renesas Electronics Corporation
5  */
6
7 #ifndef __RSWITCH_H__
8 #define __RSWITCH_H__
9
10 #include <linux/platform_device.h>
11 #include "rcar_gen4_ptp.h"
12
13 #define RSWITCH_MAX_NUM_QUEUES  128
14
15 #define RSWITCH_NUM_PORTS       3
16 #define rswitch_for_each_enabled_port(priv, i)          \
17         for (i = 0; i < RSWITCH_NUM_PORTS; i++)         \
18                 if (priv->rdev[i]->disabled)            \
19                         continue;                       \
20                 else
21
22 #define rswitch_for_each_enabled_port_continue_reverse(priv, i) \
23         for (; i-- > 0; )                                       \
24                 if (priv->rdev[i]->disabled)                    \
25                         continue;                               \
26                 else
27
28 #define TX_RING_SIZE            1024
29 #define RX_RING_SIZE            4096
30 #define TS_RING_SIZE            (TX_RING_SIZE * RSWITCH_NUM_PORTS)
31
32 #define RSWITCH_MAX_MTU         9600
33 #define RSWITCH_HEADROOM        (NET_SKB_PAD + NET_IP_ALIGN)
34 #define RSWITCH_DESC_BUF_SIZE   2048
35 #define RSWITCH_TAILROOM        SKB_DATA_ALIGN(sizeof(struct skb_shared_info))
36 #define RSWITCH_ALIGN           128
37 #define RSWITCH_BUF_SIZE        (RSWITCH_HEADROOM + RSWITCH_DESC_BUF_SIZE + \
38                                  RSWITCH_TAILROOM + RSWITCH_ALIGN)
39 #define RSWITCH_MAP_BUF_SIZE    (RSWITCH_BUF_SIZE - RSWITCH_HEADROOM)
40 #define RSWITCH_MAX_CTAG_PCP    7
41
42 #define RSWITCH_TIMEOUT_US      100000
43
44 #define RSWITCH_TOP_OFFSET      0x00008000
45 #define RSWITCH_COMA_OFFSET     0x00009000
46 #define RSWITCH_ETHA_OFFSET     0x0000a000      /* with RMAC */
47 #define RSWITCH_ETHA_SIZE       0x00002000      /* with RMAC */
48 #define RSWITCH_GWCA0_OFFSET    0x00010000
49 #define RSWITCH_GWCA1_OFFSET    0x00012000
50
51 /* TODO: hardcoded ETHA/GWCA settings for now */
52 #define GWCA_IRQ_RESOURCE_NAME  "gwca0_rxtx%d"
53 #define GWCA_IRQ_NAME           "rswitch: gwca0_rxtx%d"
54 #define GWCA_NUM_IRQS           8
55 #define GWCA_INDEX              0
56 #define AGENT_INDEX_GWCA        3
57 #define GWCA_IPV_NUM            0
58 #define GWRO                    RSWITCH_GWCA0_OFFSET
59
60 #define GWCA_TS_IRQ_RESOURCE_NAME       "gwca0_rxts0"
61 #define GWCA_TS_IRQ_NAME                "rswitch: gwca0_rxts0"
62 #define GWCA_TS_IRQ_BIT                 BIT(0)
63
64 #define FWRO    0
65 #define TPRO    RSWITCH_TOP_OFFSET
66 #define CARO    RSWITCH_COMA_OFFSET
67 #define TARO    0
68 #define RMRO    0x1000
69 enum rswitch_reg {
70         FWGC            = FWRO + 0x0000,
71         FWTTC0          = FWRO + 0x0010,
72         FWTTC1          = FWRO + 0x0014,
73         FWLBMC          = FWRO + 0x0018,
74         FWCEPTC         = FWRO + 0x0020,
75         FWCEPRC0        = FWRO + 0x0024,
76         FWCEPRC1        = FWRO + 0x0028,
77         FWCEPRC2        = FWRO + 0x002c,
78         FWCLPTC         = FWRO + 0x0030,
79         FWCLPRC         = FWRO + 0x0034,
80         FWCMPTC         = FWRO + 0x0040,
81         FWEMPTC         = FWRO + 0x0044,
82         FWSDMPTC        = FWRO + 0x0050,
83         FWSDMPVC        = FWRO + 0x0054,
84         FWLBWMC0        = FWRO + 0x0080,
85         FWPC00          = FWRO + 0x0100,
86         FWPC10          = FWRO + 0x0104,
87         FWPC20          = FWRO + 0x0108,
88         FWCTGC00        = FWRO + 0x0400,
89         FWCTGC10        = FWRO + 0x0404,
90         FWCTTC00        = FWRO + 0x0408,
91         FWCTTC10        = FWRO + 0x040c,
92         FWCTTC200       = FWRO + 0x0410,
93         FWCTSC00        = FWRO + 0x0420,
94         FWCTSC10        = FWRO + 0x0424,
95         FWCTSC20        = FWRO + 0x0428,
96         FWCTSC30        = FWRO + 0x042c,
97         FWCTSC40        = FWRO + 0x0430,
98         FWTWBFC0        = FWRO + 0x1000,
99         FWTWBFVC0       = FWRO + 0x1004,
100         FWTHBFC0        = FWRO + 0x1400,
101         FWTHBFV0C0      = FWRO + 0x1404,
102         FWTHBFV1C0      = FWRO + 0x1408,
103         FWFOBFC0        = FWRO + 0x1800,
104         FWFOBFV0C0      = FWRO + 0x1804,
105         FWFOBFV1C0      = FWRO + 0x1808,
106         FWRFC0          = FWRO + 0x1c00,
107         FWRFVC0         = FWRO + 0x1c04,
108         FWCFC0          = FWRO + 0x2000,
109         FWCFMC00        = FWRO + 0x2004,
110         FWIP4SC         = FWRO + 0x4008,
111         FWIP6SC         = FWRO + 0x4018,
112         FWIP6OC         = FWRO + 0x401c,
113         FWL2SC          = FWRO + 0x4020,
114         FWSFHEC         = FWRO + 0x4030,
115         FWSHCR0         = FWRO + 0x4040,
116         FWSHCR1         = FWRO + 0x4044,
117         FWSHCR2         = FWRO + 0x4048,
118         FWSHCR3         = FWRO + 0x404c,
119         FWSHCR4         = FWRO + 0x4050,
120         FWSHCR5         = FWRO + 0x4054,
121         FWSHCR6         = FWRO + 0x4058,
122         FWSHCR7         = FWRO + 0x405c,
123         FWSHCR8         = FWRO + 0x4060,
124         FWSHCR9         = FWRO + 0x4064,
125         FWSHCR10        = FWRO + 0x4068,
126         FWSHCR11        = FWRO + 0x406c,
127         FWSHCR12        = FWRO + 0x4070,
128         FWSHCR13        = FWRO + 0x4074,
129         FWSHCRR         = FWRO + 0x4078,
130         FWLTHHEC        = FWRO + 0x4090,
131         FWLTHHC         = FWRO + 0x4094,
132         FWLTHTL0        = FWRO + 0x40a0,
133         FWLTHTL1        = FWRO + 0x40a4,
134         FWLTHTL2        = FWRO + 0x40a8,
135         FWLTHTL3        = FWRO + 0x40ac,
136         FWLTHTL4        = FWRO + 0x40b0,
137         FWLTHTL5        = FWRO + 0x40b4,
138         FWLTHTL6        = FWRO + 0x40b8,
139         FWLTHTL7        = FWRO + 0x40bc,
140         FWLTHTL80       = FWRO + 0x40c0,
141         FWLTHTL9        = FWRO + 0x40d0,
142         FWLTHTLR        = FWRO + 0x40d4,
143         FWLTHTIM        = FWRO + 0x40e0,
144         FWLTHTEM        = FWRO + 0x40e4,
145         FWLTHTS0        = FWRO + 0x4100,
146         FWLTHTS1        = FWRO + 0x4104,
147         FWLTHTS2        = FWRO + 0x4108,
148         FWLTHTS3        = FWRO + 0x410c,
149         FWLTHTS4        = FWRO + 0x4110,
150         FWLTHTSR0       = FWRO + 0x4120,
151         FWLTHTSR1       = FWRO + 0x4124,
152         FWLTHTSR2       = FWRO + 0x4128,
153         FWLTHTSR3       = FWRO + 0x412c,
154         FWLTHTSR40      = FWRO + 0x4130,
155         FWLTHTSR5       = FWRO + 0x4140,
156         FWLTHTR         = FWRO + 0x4150,
157         FWLTHTRR0       = FWRO + 0x4154,
158         FWLTHTRR1       = FWRO + 0x4158,
159         FWLTHTRR2       = FWRO + 0x415c,
160         FWLTHTRR3       = FWRO + 0x4160,
161         FWLTHTRR4       = FWRO + 0x4164,
162         FWLTHTRR5       = FWRO + 0x4168,
163         FWLTHTRR6       = FWRO + 0x416c,
164         FWLTHTRR7       = FWRO + 0x4170,
165         FWLTHTRR8       = FWRO + 0x4174,
166         FWLTHTRR9       = FWRO + 0x4180,
167         FWLTHTRR10      = FWRO + 0x4190,
168         FWIPHEC         = FWRO + 0x4214,
169         FWIPHC          = FWRO + 0x4218,
170         FWIPTL0         = FWRO + 0x4220,
171         FWIPTL1         = FWRO + 0x4224,
172         FWIPTL2         = FWRO + 0x4228,
173         FWIPTL3         = FWRO + 0x422c,
174         FWIPTL4         = FWRO + 0x4230,
175         FWIPTL5         = FWRO + 0x4234,
176         FWIPTL6         = FWRO + 0x4238,
177         FWIPTL7         = FWRO + 0x4240,
178         FWIPTL8         = FWRO + 0x4250,
179         FWIPTLR         = FWRO + 0x4254,
180         FWIPTIM         = FWRO + 0x4260,
181         FWIPTEM         = FWRO + 0x4264,
182         FWIPTS0         = FWRO + 0x4270,
183         FWIPTS1         = FWRO + 0x4274,
184         FWIPTS2         = FWRO + 0x4278,
185         FWIPTS3         = FWRO + 0x427c,
186         FWIPTS4         = FWRO + 0x4280,
187         FWIPTSR0        = FWRO + 0x4284,
188         FWIPTSR1        = FWRO + 0x4288,
189         FWIPTSR2        = FWRO + 0x428c,
190         FWIPTSR3        = FWRO + 0x4290,
191         FWIPTSR4        = FWRO + 0x42a0,
192         FWIPTR          = FWRO + 0x42b0,
193         FWIPTRR0        = FWRO + 0x42b4,
194         FWIPTRR1        = FWRO + 0x42b8,
195         FWIPTRR2        = FWRO + 0x42bc,
196         FWIPTRR3        = FWRO + 0x42c0,
197         FWIPTRR4        = FWRO + 0x42c4,
198         FWIPTRR5        = FWRO + 0x42c8,
199         FWIPTRR6        = FWRO + 0x42cc,
200         FWIPTRR7        = FWRO + 0x42d0,
201         FWIPTRR8        = FWRO + 0x42e0,
202         FWIPTRR9        = FWRO + 0x42f0,
203         FWIPHLEC        = FWRO + 0x4300,
204         FWIPAGUSPC      = FWRO + 0x4500,
205         FWIPAGC         = FWRO + 0x4504,
206         FWIPAGM0        = FWRO + 0x4510,
207         FWIPAGM1        = FWRO + 0x4514,
208         FWIPAGM2        = FWRO + 0x4518,
209         FWIPAGM3        = FWRO + 0x451c,
210         FWIPAGM4        = FWRO + 0x4520,
211         FWMACHEC        = FWRO + 0x4620,
212         FWMACHC         = FWRO + 0x4624,
213         FWMACTL0        = FWRO + 0x4630,
214         FWMACTL1        = FWRO + 0x4634,
215         FWMACTL2        = FWRO + 0x4638,
216         FWMACTL3        = FWRO + 0x463c,
217         FWMACTL4        = FWRO + 0x4640,
218         FWMACTL5        = FWRO + 0x4650,
219         FWMACTLR        = FWRO + 0x4654,
220         FWMACTIM        = FWRO + 0x4660,
221         FWMACTEM        = FWRO + 0x4664,
222         FWMACTS0        = FWRO + 0x4670,
223         FWMACTS1        = FWRO + 0x4674,
224         FWMACTSR0       = FWRO + 0x4678,
225         FWMACTSR1       = FWRO + 0x467c,
226         FWMACTSR2       = FWRO + 0x4680,
227         FWMACTSR3       = FWRO + 0x4690,
228         FWMACTR         = FWRO + 0x46a0,
229         FWMACTRR0       = FWRO + 0x46a4,
230         FWMACTRR1       = FWRO + 0x46a8,
231         FWMACTRR2       = FWRO + 0x46ac,
232         FWMACTRR3       = FWRO + 0x46b0,
233         FWMACTRR4       = FWRO + 0x46b4,
234         FWMACTRR5       = FWRO + 0x46c0,
235         FWMACTRR6       = FWRO + 0x46d0,
236         FWMACHLEC       = FWRO + 0x4700,
237         FWMACAGUSPC     = FWRO + 0x4880,
238         FWMACAGC        = FWRO + 0x4884,
239         FWMACAGM0       = FWRO + 0x4888,
240         FWMACAGM1       = FWRO + 0x488c,
241         FWVLANTEC       = FWRO + 0x4900,
242         FWVLANTL0       = FWRO + 0x4910,
243         FWVLANTL1       = FWRO + 0x4914,
244         FWVLANTL2       = FWRO + 0x4918,
245         FWVLANTL3       = FWRO + 0x4920,
246         FWVLANTL4       = FWRO + 0x4930,
247         FWVLANTLR       = FWRO + 0x4934,
248         FWVLANTIM       = FWRO + 0x4940,
249         FWVLANTEM       = FWRO + 0x4944,
250         FWVLANTS        = FWRO + 0x4950,
251         FWVLANTSR0      = FWRO + 0x4954,
252         FWVLANTSR1      = FWRO + 0x4958,
253         FWVLANTSR2      = FWRO + 0x4960,
254         FWVLANTSR3      = FWRO + 0x4970,
255         FWPBFC0         = FWRO + 0x4a00,
256         FWPBFCSDC00     = FWRO + 0x4a04,
257         FWL23URL0       = FWRO + 0x4e00,
258         FWL23URL1       = FWRO + 0x4e04,
259         FWL23URL2       = FWRO + 0x4e08,
260         FWL23URL3       = FWRO + 0x4e0c,
261         FWL23URLR       = FWRO + 0x4e10,
262         FWL23UTIM       = FWRO + 0x4e20,
263         FWL23URR        = FWRO + 0x4e30,
264         FWL23URRR0      = FWRO + 0x4e34,
265         FWL23URRR1      = FWRO + 0x4e38,
266         FWL23URRR2      = FWRO + 0x4e3c,
267         FWL23URRR3      = FWRO + 0x4e40,
268         FWL23URMC0      = FWRO + 0x4f00,
269         FWPMFGC0        = FWRO + 0x5000,
270         FWPGFC0         = FWRO + 0x5100,
271         FWPGFIGSC0      = FWRO + 0x5104,
272         FWPGFENC0       = FWRO + 0x5108,
273         FWPGFENM0       = FWRO + 0x510c,
274         FWPGFCSTC00     = FWRO + 0x5110,
275         FWPGFCSTC10     = FWRO + 0x5114,
276         FWPGFCSTM00     = FWRO + 0x5118,
277         FWPGFCSTM10     = FWRO + 0x511c,
278         FWPGFCTC0       = FWRO + 0x5120,
279         FWPGFCTM0       = FWRO + 0x5124,
280         FWPGFHCC0       = FWRO + 0x5128,
281         FWPGFSM0        = FWRO + 0x512c,
282         FWPGFGC0        = FWRO + 0x5130,
283         FWPGFGL0        = FWRO + 0x5500,
284         FWPGFGL1        = FWRO + 0x5504,
285         FWPGFGLR        = FWRO + 0x5518,
286         FWPGFGR         = FWRO + 0x5510,
287         FWPGFGRR0       = FWRO + 0x5514,
288         FWPGFGRR1       = FWRO + 0x5518,
289         FWPGFRIM        = FWRO + 0x5520,
290         FWPMTRFC0       = FWRO + 0x5600,
291         FWPMTRCBSC0     = FWRO + 0x5604,
292         FWPMTRC0RC0     = FWRO + 0x5608,
293         FWPMTREBSC0     = FWRO + 0x560c,
294         FWPMTREIRC0     = FWRO + 0x5610,
295         FWPMTRFM0       = FWRO + 0x5614,
296         FWFTL0          = FWRO + 0x6000,
297         FWFTL1          = FWRO + 0x6004,
298         FWFTLR          = FWRO + 0x6008,
299         FWFTOC          = FWRO + 0x6010,
300         FWFTOPC         = FWRO + 0x6014,
301         FWFTIM          = FWRO + 0x6020,
302         FWFTR           = FWRO + 0x6030,
303         FWFTRR0         = FWRO + 0x6034,
304         FWFTRR1         = FWRO + 0x6038,
305         FWFTRR2         = FWRO + 0x603c,
306         FWSEQNGC0       = FWRO + 0x6100,
307         FWSEQNGM0       = FWRO + 0x6104,
308         FWSEQNRC        = FWRO + 0x6200,
309         FWCTFDCN0       = FWRO + 0x6300,
310         FWLTHFDCN0      = FWRO + 0x6304,
311         FWIPFDCN0       = FWRO + 0x6308,
312         FWLTWFDCN0      = FWRO + 0x630c,
313         FWPBFDCN0       = FWRO + 0x6310,
314         FWMHLCN0        = FWRO + 0x6314,
315         FWIHLCN0        = FWRO + 0x6318,
316         FWICRDCN0       = FWRO + 0x6500,
317         FWWMRDCN0       = FWRO + 0x6504,
318         FWCTRDCN0       = FWRO + 0x6508,
319         FWLTHRDCN0      = FWRO + 0x650c,
320         FWIPRDCN0       = FWRO + 0x6510,
321         FWLTWRDCN0      = FWRO + 0x6514,
322         FWPBRDCN0       = FWRO + 0x6518,
323         FWPMFDCN0       = FWRO + 0x6700,
324         FWPGFDCN0       = FWRO + 0x6780,
325         FWPMGDCN0       = FWRO + 0x6800,
326         FWPMYDCN0       = FWRO + 0x6804,
327         FWPMRDCN0       = FWRO + 0x6808,
328         FWFRPPCN0       = FWRO + 0x6a00,
329         FWFRDPCN0       = FWRO + 0x6a04,
330         FWEIS00         = FWRO + 0x7900,
331         FWEIE00         = FWRO + 0x7904,
332         FWEID00         = FWRO + 0x7908,
333         FWEIS1          = FWRO + 0x7a00,
334         FWEIE1          = FWRO + 0x7a04,
335         FWEID1          = FWRO + 0x7a08,
336         FWEIS2          = FWRO + 0x7a10,
337         FWEIE2          = FWRO + 0x7a14,
338         FWEID2          = FWRO + 0x7a18,
339         FWEIS3          = FWRO + 0x7a20,
340         FWEIE3          = FWRO + 0x7a24,
341         FWEID3          = FWRO + 0x7a28,
342         FWEIS4          = FWRO + 0x7a30,
343         FWEIE4          = FWRO + 0x7a34,
344         FWEID4          = FWRO + 0x7a38,
345         FWEIS5          = FWRO + 0x7a40,
346         FWEIE5          = FWRO + 0x7a44,
347         FWEID5          = FWRO + 0x7a48,
348         FWEIS60         = FWRO + 0x7a50,
349         FWEIE60         = FWRO + 0x7a54,
350         FWEID60         = FWRO + 0x7a58,
351         FWEIS61         = FWRO + 0x7a60,
352         FWEIE61         = FWRO + 0x7a64,
353         FWEID61         = FWRO + 0x7a68,
354         FWEIS62         = FWRO + 0x7a70,
355         FWEIE62         = FWRO + 0x7a74,
356         FWEID62         = FWRO + 0x7a78,
357         FWEIS63         = FWRO + 0x7a80,
358         FWEIE63         = FWRO + 0x7a84,
359         FWEID63         = FWRO + 0x7a88,
360         FWEIS70         = FWRO + 0x7a90,
361         FWEIE70         = FWRO + 0x7A94,
362         FWEID70         = FWRO + 0x7a98,
363         FWEIS71         = FWRO + 0x7aa0,
364         FWEIE71         = FWRO + 0x7aa4,
365         FWEID71         = FWRO + 0x7aa8,
366         FWEIS72         = FWRO + 0x7ab0,
367         FWEIE72         = FWRO + 0x7ab4,
368         FWEID72         = FWRO + 0x7ab8,
369         FWEIS73         = FWRO + 0x7ac0,
370         FWEIE73         = FWRO + 0x7ac4,
371         FWEID73         = FWRO + 0x7ac8,
372         FWEIS80         = FWRO + 0x7ad0,
373         FWEIE80         = FWRO + 0x7ad4,
374         FWEID80         = FWRO + 0x7ad8,
375         FWEIS81         = FWRO + 0x7ae0,
376         FWEIE81         = FWRO + 0x7ae4,
377         FWEID81         = FWRO + 0x7ae8,
378         FWEIS82         = FWRO + 0x7af0,
379         FWEIE82         = FWRO + 0x7af4,
380         FWEID82         = FWRO + 0x7af8,
381         FWEIS83         = FWRO + 0x7b00,
382         FWEIE83         = FWRO + 0x7b04,
383         FWEID83         = FWRO + 0x7b08,
384         FWMIS0          = FWRO + 0x7c00,
385         FWMIE0          = FWRO + 0x7c04,
386         FWMID0          = FWRO + 0x7c08,
387         FWSCR0          = FWRO + 0x7d00,
388         FWSCR1          = FWRO + 0x7d04,
389         FWSCR2          = FWRO + 0x7d08,
390         FWSCR3          = FWRO + 0x7d0c,
391         FWSCR4          = FWRO + 0x7d10,
392         FWSCR5          = FWRO + 0x7d14,
393         FWSCR6          = FWRO + 0x7d18,
394         FWSCR7          = FWRO + 0x7d1c,
395         FWSCR8          = FWRO + 0x7d20,
396         FWSCR9          = FWRO + 0x7d24,
397         FWSCR10         = FWRO + 0x7d28,
398         FWSCR11         = FWRO + 0x7d2c,
399         FWSCR12         = FWRO + 0x7d30,
400         FWSCR13         = FWRO + 0x7d34,
401         FWSCR14         = FWRO + 0x7d38,
402         FWSCR15         = FWRO + 0x7d3c,
403         FWSCR16         = FWRO + 0x7d40,
404         FWSCR17         = FWRO + 0x7d44,
405         FWSCR18         = FWRO + 0x7d48,
406         FWSCR19         = FWRO + 0x7d4c,
407         FWSCR20         = FWRO + 0x7d50,
408         FWSCR21         = FWRO + 0x7d54,
409         FWSCR22         = FWRO + 0x7d58,
410         FWSCR23         = FWRO + 0x7d5c,
411         FWSCR24         = FWRO + 0x7d60,
412         FWSCR25         = FWRO + 0x7d64,
413         FWSCR26         = FWRO + 0x7d68,
414         FWSCR27         = FWRO + 0x7d6c,
415         FWSCR28         = FWRO + 0x7d70,
416         FWSCR29         = FWRO + 0x7d74,
417         FWSCR30         = FWRO + 0x7d78,
418         FWSCR31         = FWRO + 0x7d7c,
419         FWSCR32         = FWRO + 0x7d80,
420         FWSCR33         = FWRO + 0x7d84,
421         FWSCR34         = FWRO + 0x7d88,
422         FWSCR35         = FWRO + 0x7d8c,
423         FWSCR36         = FWRO + 0x7d90,
424         FWSCR37         = FWRO + 0x7d94,
425         FWSCR38         = FWRO + 0x7d98,
426         FWSCR39         = FWRO + 0x7d9c,
427         FWSCR40         = FWRO + 0x7da0,
428         FWSCR41         = FWRO + 0x7da4,
429         FWSCR42         = FWRO + 0x7da8,
430         FWSCR43         = FWRO + 0x7dac,
431         FWSCR44         = FWRO + 0x7db0,
432         FWSCR45         = FWRO + 0x7db4,
433         FWSCR46         = FWRO + 0x7db8,
434
435         TPEMIMC0        = TPRO + 0x0000,
436         TPEMIMC1        = TPRO + 0x0004,
437         TPEMIMC2        = TPRO + 0x0008,
438         TPEMIMC3        = TPRO + 0x000c,
439         TPEMIMC4        = TPRO + 0x0010,
440         TPEMIMC5        = TPRO + 0x0014,
441         TPEMIMC60       = TPRO + 0x0080,
442         TPEMIMC70       = TPRO + 0x0100,
443         TSIM            = TPRO + 0x0700,
444         TFIM            = TPRO + 0x0704,
445         TCIM            = TPRO + 0x0708,
446         TGIM0           = TPRO + 0x0710,
447         TGIM1           = TPRO + 0x0714,
448         TEIM0           = TPRO + 0x0720,
449         TEIM1           = TPRO + 0x0724,
450         TEIM2           = TPRO + 0x0728,
451
452         RIPV            = CARO + 0x0000,
453         RRC             = CARO + 0x0004,
454         RCEC            = CARO + 0x0008,
455         RCDC            = CARO + 0x000c,
456         RSSIS           = CARO + 0x0010,
457         RSSIE           = CARO + 0x0014,
458         RSSID           = CARO + 0x0018,
459         CABPIBWMC       = CARO + 0x0020,
460         CABPWMLC        = CARO + 0x0040,
461         CABPPFLC0       = CARO + 0x0050,
462         CABPPWMLC0      = CARO + 0x0060,
463         CABPPPFLC00     = CARO + 0x00a0,
464         CABPULC         = CARO + 0x0100,
465         CABPIRM         = CARO + 0x0140,
466         CABPPCM         = CARO + 0x0144,
467         CABPLCM         = CARO + 0x0148,
468         CABPCPM         = CARO + 0x0180,
469         CABPMCPM        = CARO + 0x0200,
470         CARDNM          = CARO + 0x0280,
471         CARDMNM         = CARO + 0x0284,
472         CARDCN          = CARO + 0x0290,
473         CAEIS0          = CARO + 0x0300,
474         CAEIE0          = CARO + 0x0304,
475         CAEID0          = CARO + 0x0308,
476         CAEIS1          = CARO + 0x0310,
477         CAEIE1          = CARO + 0x0314,
478         CAEID1          = CARO + 0x0318,
479         CAMIS0          = CARO + 0x0340,
480         CAMIE0          = CARO + 0x0344,
481         CAMID0          = CARO + 0x0348,
482         CAMIS1          = CARO + 0x0350,
483         CAMIE1          = CARO + 0x0354,
484         CAMID1          = CARO + 0x0358,
485         CASCR           = CARO + 0x0380,
486
487         EAMC            = TARO + 0x0000,
488         EAMS            = TARO + 0x0004,
489         EAIRC           = TARO + 0x0010,
490         EATDQSC         = TARO + 0x0014,
491         EATDQC          = TARO + 0x0018,
492         EATDQAC         = TARO + 0x001c,
493         EATPEC          = TARO + 0x0020,
494         EATMFSC0        = TARO + 0x0040,
495         EATDQDC0        = TARO + 0x0060,
496         EATDQM0         = TARO + 0x0080,
497         EATDQMLM0       = TARO + 0x00a0,
498         EACTQC          = TARO + 0x0100,
499         EACTDQDC        = TARO + 0x0104,
500         EACTDQM         = TARO + 0x0108,
501         EACTDQMLM       = TARO + 0x010c,
502         EAVCC           = TARO + 0x0130,
503         EAVTC           = TARO + 0x0134,
504         EATTFC          = TARO + 0x0138,
505         EACAEC          = TARO + 0x0200,
506         EACC            = TARO + 0x0204,
507         EACAIVC0        = TARO + 0x0220,
508         EACAULC0        = TARO + 0x0240,
509         EACOEM          = TARO + 0x0260,
510         EACOIVM0        = TARO + 0x0280,
511         EACOULM0        = TARO + 0x02a0,
512         EACGSM          = TARO + 0x02c0,
513         EATASC          = TARO + 0x0300,
514         EATASENC0       = TARO + 0x0320,
515         EATASCTENC      = TARO + 0x0340,
516         EATASENM0       = TARO + 0x0360,
517         EATASCTENM      = TARO + 0x0380,
518         EATASCSTC0      = TARO + 0x03a0,
519         EATASCSTC1      = TARO + 0x03a4,
520         EATASCSTM0      = TARO + 0x03a8,
521         EATASCSTM1      = TARO + 0x03ac,
522         EATASCTC        = TARO + 0x03b0,
523         EATASCTM        = TARO + 0x03b4,
524         EATASGL0        = TARO + 0x03c0,
525         EATASGL1        = TARO + 0x03c4,
526         EATASGLR        = TARO + 0x03c8,
527         EATASGR         = TARO + 0x03d0,
528         EATASGRR        = TARO + 0x03d4,
529         EATASHCC        = TARO + 0x03e0,
530         EATASRIRM       = TARO + 0x03e4,
531         EATASSM         = TARO + 0x03e8,
532         EAUSMFSECN      = TARO + 0x0400,
533         EATFECN         = TARO + 0x0404,
534         EAFSECN         = TARO + 0x0408,
535         EADQOECN        = TARO + 0x040c,
536         EADQSECN        = TARO + 0x0410,
537         EACKSECN        = TARO + 0x0414,
538         EAEIS0          = TARO + 0x0500,
539         EAEIE0          = TARO + 0x0504,
540         EAEID0          = TARO + 0x0508,
541         EAEIS1          = TARO + 0x0510,
542         EAEIE1          = TARO + 0x0514,
543         EAEID1          = TARO + 0x0518,
544         EAEIS2          = TARO + 0x0520,
545         EAEIE2          = TARO + 0x0524,
546         EAEID2          = TARO + 0x0528,
547         EASCR           = TARO + 0x0580,
548
549         MPSM            = RMRO + 0x0000,
550         MPIC            = RMRO + 0x0004,
551         MPIM            = RMRO + 0x0008,
552         MIOC            = RMRO + 0x0010,
553         MIOM            = RMRO + 0x0014,
554         MXMS            = RMRO + 0x0018,
555         MTFFC           = RMRO + 0x0020,
556         MTPFC           = RMRO + 0x0024,
557         MTPFC2          = RMRO + 0x0028,
558         MTPFC30         = RMRO + 0x0030,
559         MTATC0          = RMRO + 0x0050,
560         MTIM            = RMRO + 0x0060,
561         MRGC            = RMRO + 0x0080,
562         MRMAC0          = RMRO + 0x0084,
563         MRMAC1          = RMRO + 0x0088,
564         MRAFC           = RMRO + 0x008c,
565         MRSCE           = RMRO + 0x0090,
566         MRSCP           = RMRO + 0x0094,
567         MRSCC           = RMRO + 0x0098,
568         MRFSCE          = RMRO + 0x009c,
569         MRFSCP          = RMRO + 0x00a0,
570         MTRC            = RMRO + 0x00a4,
571         MRIM            = RMRO + 0x00a8,
572         MRPFM           = RMRO + 0x00ac,
573         MPFC0           = RMRO + 0x0100,
574         MLVC            = RMRO + 0x0180,
575         MEEEC           = RMRO + 0x0184,
576         MLBC            = RMRO + 0x0188,
577         MXGMIIC         = RMRO + 0x0190,
578         MPCH            = RMRO + 0x0194,
579         MANC            = RMRO + 0x0198,
580         MANM            = RMRO + 0x019c,
581         MPLCA1          = RMRO + 0x01a0,
582         MPLCA2          = RMRO + 0x01a4,
583         MPLCA3          = RMRO + 0x01a8,
584         MPLCA4          = RMRO + 0x01ac,
585         MPLCAM          = RMRO + 0x01b0,
586         MHDC1           = RMRO + 0x01c0,
587         MHDC2           = RMRO + 0x01c4,
588         MEIS            = RMRO + 0x0200,
589         MEIE            = RMRO + 0x0204,
590         MEID            = RMRO + 0x0208,
591         MMIS0           = RMRO + 0x0210,
592         MMIE0           = RMRO + 0x0214,
593         MMID0           = RMRO + 0x0218,
594         MMIS1           = RMRO + 0x0220,
595         MMIE1           = RMRO + 0x0224,
596         MMID1           = RMRO + 0x0228,
597         MMIS2           = RMRO + 0x0230,
598         MMIE2           = RMRO + 0x0234,
599         MMID2           = RMRO + 0x0238,
600         MMPFTCT         = RMRO + 0x0300,
601         MAPFTCT         = RMRO + 0x0304,
602         MPFRCT          = RMRO + 0x0308,
603         MFCICT          = RMRO + 0x030c,
604         MEEECT          = RMRO + 0x0310,
605         MMPCFTCT0       = RMRO + 0x0320,
606         MAPCFTCT0       = RMRO + 0x0330,
607         MPCFRCT0        = RMRO + 0x0340,
608         MHDCC           = RMRO + 0x0350,
609         MROVFC          = RMRO + 0x0354,
610         MRHCRCEC        = RMRO + 0x0358,
611         MRXBCE          = RMRO + 0x0400,
612         MRXBCP          = RMRO + 0x0404,
613         MRGFCE          = RMRO + 0x0408,
614         MRGFCP          = RMRO + 0x040c,
615         MRBFC           = RMRO + 0x0410,
616         MRMFC           = RMRO + 0x0414,
617         MRUFC           = RMRO + 0x0418,
618         MRPEFC          = RMRO + 0x041c,
619         MRNEFC          = RMRO + 0x0420,
620         MRFMEFC         = RMRO + 0x0424,
621         MRFFMEFC        = RMRO + 0x0428,
622         MRCFCEFC        = RMRO + 0x042c,
623         MRFCEFC         = RMRO + 0x0430,
624         MRRCFEFC        = RMRO + 0x0434,
625         MRUEFC          = RMRO + 0x043c,
626         MROEFC          = RMRO + 0x0440,
627         MRBOEC          = RMRO + 0x0444,
628         MTXBCE          = RMRO + 0x0500,
629         MTXBCP          = RMRO + 0x0504,
630         MTGFCE          = RMRO + 0x0508,
631         MTGFCP          = RMRO + 0x050c,
632         MTBFC           = RMRO + 0x0510,
633         MTMFC           = RMRO + 0x0514,
634         MTUFC           = RMRO + 0x0518,
635         MTEFC           = RMRO + 0x051c,
636
637         GWMC            = GWRO + 0x0000,
638         GWMS            = GWRO + 0x0004,
639         GWIRC           = GWRO + 0x0010,
640         GWRDQSC         = GWRO + 0x0014,
641         GWRDQC          = GWRO + 0x0018,
642         GWRDQAC         = GWRO + 0x001c,
643         GWRGC           = GWRO + 0x0020,
644         GWRMFSC0        = GWRO + 0x0040,
645         GWRDQDC0        = GWRO + 0x0060,
646         GWRDQM0         = GWRO + 0x0080,
647         GWRDQMLM0       = GWRO + 0x00a0,
648         GWMTIRM         = GWRO + 0x0100,
649         GWMSTLS         = GWRO + 0x0104,
650         GWMSTLR         = GWRO + 0x0108,
651         GWMSTSS         = GWRO + 0x010c,
652         GWMSTSR         = GWRO + 0x0110,
653         GWMAC0          = GWRO + 0x0120,
654         GWMAC1          = GWRO + 0x0124,
655         GWVCC           = GWRO + 0x0130,
656         GWVTC           = GWRO + 0x0134,
657         GWTTFC          = GWRO + 0x0138,
658         GWTDCAC00       = GWRO + 0x0140,
659         GWTDCAC10       = GWRO + 0x0144,
660         GWTSDCC0        = GWRO + 0x0160,
661         GWTNM           = GWRO + 0x0180,
662         GWTMNM          = GWRO + 0x0184,
663         GWAC            = GWRO + 0x0190,
664         GWDCBAC0        = GWRO + 0x0194,
665         GWDCBAC1        = GWRO + 0x0198,
666         GWIICBSC        = GWRO + 0x019c,
667         GWMDNC          = GWRO + 0x01a0,
668         GWTRC0          = GWRO + 0x0200,
669         GWTPC0          = GWRO + 0x0300,
670         GWARIRM         = GWRO + 0x0380,
671         GWDCC0          = GWRO + 0x0400,
672         GWAARSS         = GWRO + 0x0800,
673         GWAARSR0        = GWRO + 0x0804,
674         GWAARSR1        = GWRO + 0x0808,
675         GWIDAUAS0       = GWRO + 0x0840,
676         GWIDASM0        = GWRO + 0x0880,
677         GWIDASAM00      = GWRO + 0x0900,
678         GWIDASAM10      = GWRO + 0x0904,
679         GWIDACAM00      = GWRO + 0x0980,
680         GWIDACAM10      = GWRO + 0x0984,
681         GWGRLC          = GWRO + 0x0a00,
682         GWGRLULC        = GWRO + 0x0a04,
683         GWRLIVC0        = GWRO + 0x0a80,
684         GWRLULC0        = GWRO + 0x0a84,
685         GWIDPC          = GWRO + 0x0b00,
686         GWIDC0          = GWRO + 0x0c00,
687         GWDIS0          = GWRO + 0x1100,
688         GWDIE0          = GWRO + 0x1104,
689         GWDID0          = GWRO + 0x1108,
690         GWTSDIS         = GWRO + 0x1180,
691         GWTSDIE         = GWRO + 0x1184,
692         GWTSDID         = GWRO + 0x1188,
693         GWEIS0          = GWRO + 0x1190,
694         GWEIE0          = GWRO + 0x1194,
695         GWEID0          = GWRO + 0x1198,
696         GWEIS1          = GWRO + 0x11a0,
697         GWEIE1          = GWRO + 0x11a4,
698         GWEID1          = GWRO + 0x11a8,
699         GWEIS20         = GWRO + 0x1200,
700         GWEIE20         = GWRO + 0x1204,
701         GWEID20         = GWRO + 0x1208,
702         GWEIS3          = GWRO + 0x1280,
703         GWEIE3          = GWRO + 0x1284,
704         GWEID3          = GWRO + 0x1288,
705         GWEIS4          = GWRO + 0x1290,
706         GWEIE4          = GWRO + 0x1294,
707         GWEID4          = GWRO + 0x1298,
708         GWEIS5          = GWRO + 0x12a0,
709         GWEIE5          = GWRO + 0x12a4,
710         GWEID5          = GWRO + 0x12a8,
711         GWSCR0          = GWRO + 0x1800,
712         GWSCR1          = GWRO + 0x1900,
713 };
714
715 /* ETHA/RMAC */
716 enum rswitch_etha_mode {
717         EAMC_OPC_RESET,
718         EAMC_OPC_DISABLE,
719         EAMC_OPC_CONFIG,
720         EAMC_OPC_OPERATION,
721 };
722
723 #define EAMS_OPS_MASK           EAMC_OPC_OPERATION
724
725 #define EAVCC_VEM_SC_TAG        (0x3 << 16)
726
727 #define MPIC_PIS                GENMASK(2, 0)
728 #define MPIC_PIS_GMII           2
729 #define MPIC_PIS_XGMII          4
730 #define MPIC_LSC                GENMASK(5, 3)
731 #define MPIC_LSC_100M           1
732 #define MPIC_LSC_1G             2
733 #define MPIC_LSC_2_5G           3
734
735 #define MDIO_READ_C45           0x03
736 #define MDIO_WRITE_C45          0x01
737
738 #define MPSM_PSME               BIT(0)
739 #define MPSM_MFF_C45            BIT(2)
740 #define MPSM_PRD_SHIFT          16
741 #define MPSM_PRD_MASK           GENMASK(31, MPSM_PRD_SHIFT)
742
743 /* Completion flags */
744 #define MMIS1_PAACS             BIT(2) /* Address */
745 #define MMIS1_PWACS             BIT(1) /* Write */
746 #define MMIS1_PRACS             BIT(0) /* Read */
747 #define MMIS1_CLEAR_FLAGS       0xf
748
749 #define MPIC_PSMCS_SHIFT        16
750 #define MPIC_PSMCS_MASK         GENMASK(22, MPIC_PSMCS_SHIFT)
751 #define MPIC_PSMCS(val)         ((val) << MPIC_PSMCS_SHIFT)
752
753 #define MPIC_PSMHT_SHIFT        24
754 #define MPIC_PSMHT_MASK         GENMASK(26, MPIC_PSMHT_SHIFT)
755 #define MPIC_PSMHT(val)         ((val) << MPIC_PSMHT_SHIFT)
756
757 #define MLVC_PLV                BIT(16)
758
759 /* GWCA */
760 enum rswitch_gwca_mode {
761         GWMC_OPC_RESET,
762         GWMC_OPC_DISABLE,
763         GWMC_OPC_CONFIG,
764         GWMC_OPC_OPERATION,
765 };
766
767 #define GWMS_OPS_MASK           GWMC_OPC_OPERATION
768
769 #define GWMTIRM_MTIOG           BIT(0)
770 #define GWMTIRM_MTR             BIT(1)
771
772 #define GWVCC_VEM_SC_TAG        (0x3 << 16)
773
774 #define GWARIRM_ARIOG           BIT(0)
775 #define GWARIRM_ARR             BIT(1)
776
777 #define GWMDNC_TSDMN(num)       (((num) << 16) & GENMASK(17, 16))
778 #define GWMDNC_TXDMN(num)       (((num) << 8) & GENMASK(12, 8))
779 #define GWMDNC_RXDMN(num)       ((num) & GENMASK(4, 0))
780
781 #define GWDCC_BALR              BIT(24)
782 #define GWDCC_DCP_MASK          GENMASK(18, 16)
783 #define GWDCC_DCP(prio)         FIELD_PREP(GWDCC_DCP_MASK, (prio))
784 #define GWDCC_DQT               BIT(11)
785 #define GWDCC_ETS               BIT(9)
786 #define GWDCC_EDE               BIT(8)
787
788 #define GWTRC(queue)            (GWTRC0 + (queue) / 32 * 4)
789 #define GWTPC_PPPL(ipv)         BIT(ipv)
790 #define GWDCC_OFFS(queue)       (GWDCC0 + (queue) * 4)
791
792 #define GWDIS(i)                (GWDIS0 + (i) * 0x10)
793 #define GWDIE(i)                (GWDIE0 + (i) * 0x10)
794 #define GWDID(i)                (GWDID0 + (i) * 0x10)
795
796 /* COMA */
797 #define RRC_RR                  BIT(0)
798 #define RRC_RR_CLR              0
799 #define RCEC_ACE_DEFAULT        (BIT(0) | BIT(AGENT_INDEX_GWCA))
800 #define RCEC_RCE                BIT(16)
801 #define RCDC_RCD                BIT(16)
802
803 #define CABPIRM_BPIOG           BIT(0)
804 #define CABPIRM_BPR             BIT(1)
805
806 #define CABPPFLC_INIT_VALUE     0x00800080
807
808 /* MFWD */
809 #define FWPC0_LTHTA             BIT(0)
810 #define FWPC0_IP4UE             BIT(3)
811 #define FWPC0_IP4TE             BIT(4)
812 #define FWPC0_IP4OE             BIT(5)
813 #define FWPC0_L2SE              BIT(9)
814 #define FWPC0_IP4EA             BIT(10)
815 #define FWPC0_IPDSA             BIT(12)
816 #define FWPC0_IPHLA             BIT(18)
817 #define FWPC0_MACSDA            BIT(20)
818 #define FWPC0_MACHLA            BIT(26)
819 #define FWPC0_MACHMA            BIT(27)
820 #define FWPC0_VLANSA            BIT(28)
821
822 #define FWPC0(i)                (FWPC00 + (i) * 0x10)
823 #define FWPC0_DEFAULT           (FWPC0_LTHTA | FWPC0_IP4UE | FWPC0_IP4TE | \
824                                  FWPC0_IP4OE | FWPC0_L2SE | FWPC0_IP4EA | \
825                                  FWPC0_IPDSA | FWPC0_IPHLA | FWPC0_MACSDA | \
826                                  FWPC0_MACHLA | FWPC0_MACHMA | FWPC0_VLANSA)
827 #define FWPC1(i)                (FWPC10 + (i) * 0x10)
828 #define FWPC1_DDE               BIT(0)
829
830 #define FWPBFC(i)               (FWPBFC0 + (i) * 0x10)
831
832 #define FWPBFCSDC(j, i)         (FWPBFCSDC00 + (i) * 0x10 + (j) * 0x04)
833
834 /* TOP */
835 #define TPEMIMC7(queue)         (TPEMIMC70 + (queue) * 4)
836
837 /* Descriptors */
838 enum RX_DS_CC_BIT {
839         RX_DS   = 0x0fff, /* Data size */
840         RX_TR   = 0x1000, /* Truncation indication */
841         RX_EI   = 0x2000, /* Error indication */
842         RX_PS   = 0xc000, /* Padding selection */
843 };
844
845 enum TX_DS_TAGL_BIT {
846         TX_DS   = 0x0fff, /* Data size */
847         TX_TAGL = 0xf000, /* Frame tag LSBs */
848 };
849
850 enum DIE_DT {
851         /* Frame data */
852         DT_FSINGLE      = 0x80,
853         DT_FSTART       = 0x90,
854         DT_FMID         = 0xa0,
855         DT_FEND         = 0xb0,
856
857         /* Chain control */
858         DT_LEMPTY       = 0xc0,
859         DT_EEMPTY       = 0xd0,
860         DT_LINKFIX      = 0x00,
861         DT_LINK         = 0xe0,
862         DT_EOS          = 0xf0,
863         /* HW/SW arbitration */
864         DT_FEMPTY       = 0x40,
865         DT_FEMPTY_IS    = 0x10,
866         DT_FEMPTY_IC    = 0x20,
867         DT_FEMPTY_ND    = 0x30,
868         DT_FEMPTY_START = 0x50,
869         DT_FEMPTY_MID   = 0x60,
870         DT_FEMPTY_END   = 0x70,
871
872         DT_MASK         = 0xf0,
873         DIE             = 0x08, /* Descriptor Interrupt Enable */
874 };
875
876 /* Both transmission and reception */
877 #define INFO1_FMT               BIT(2)
878 #define INFO1_TXC               BIT(3)
879
880 /* For transmission */
881 #define INFO1_TSUN(val)         ((u64)(val) << 8ULL)
882 #define INFO1_IPV(prio)         ((u64)(prio) << 28ULL)
883 #define INFO1_CSD0(index)       ((u64)(index) << 32ULL)
884 #define INFO1_CSD1(index)       ((u64)(index) << 40ULL)
885 #define INFO1_DV(port_vector)   ((u64)(port_vector) << 48ULL)
886
887 /* For reception */
888 #define INFO1_SPN(port)         ((u64)(port) << 36ULL)
889
890 /* For timestamp descriptor in dptrl (Byte 4 to 7) */
891 #define TS_DESC_TSUN(dptrl)     ((dptrl) & GENMASK(7, 0))
892 #define TS_DESC_SPN(dptrl)      (((dptrl) & GENMASK(10, 8)) >> 8)
893 #define TS_DESC_DPN(dptrl)      (((dptrl) & GENMASK(17, 16)) >> 16)
894 #define TS_DESC_TN(dptrl)       ((dptrl) & BIT(24))
895
896 struct rswitch_desc {
897         __le16 info_ds; /* Descriptor size */
898         u8 die_dt;      /* Descriptor interrupt enable and type */
899         __u8  dptrh;    /* Descriptor pointer MSB */
900         __le32 dptrl;   /* Descriptor pointer LSW */
901 } __packed;
902
903 struct rswitch_ts_desc {
904         struct rswitch_desc desc;
905         __le32 ts_nsec;
906         __le32 ts_sec;
907 } __packed;
908
909 struct rswitch_ext_desc {
910         struct rswitch_desc desc;
911         __le64 info1;
912 } __packed;
913
914 struct rswitch_ext_ts_desc {
915         struct rswitch_desc desc;
916         __le64 info1;
917         __le32 ts_nsec;
918         __le32 ts_sec;
919 } __packed;
920
921 struct rswitch_etha {
922         unsigned int index;
923         void __iomem *addr;
924         void __iomem *coma_addr;
925         bool external_phy;
926         struct mii_bus *mii;
927         phy_interface_t phy_interface;
928         u32 psmcs;
929         u8 mac_addr[MAX_ADDR_LEN];
930         int link;
931         int speed;
932
933         /* This hardware could not be initialized twice so that marked
934          * this flag to avoid multiple initialization.
935          */
936         bool operated;
937 };
938
939 /* The datasheet said descriptor "chain" and/or "queue". For consistency of
940  * name, this driver calls "queue".
941  */
942 struct rswitch_gwca_queue {
943         union {
944                 struct rswitch_ext_desc *tx_ring;
945                 struct rswitch_ext_ts_desc *rx_ring;
946                 struct rswitch_ts_desc *ts_ring;
947         };
948
949         /* Common */
950         dma_addr_t ring_dma;
951         unsigned int ring_size;
952         unsigned int cur;
953         unsigned int dirty;
954
955         /* For [rt]x_ring */
956         unsigned int index;
957         bool dir_tx;
958         struct net_device *ndev;        /* queue to ndev for irq */
959
960         union {
961                 /* For TX */
962                 struct {
963                         struct sk_buff **skbs;
964                         dma_addr_t *unmap_addrs;
965                 };
966                 /* For RX */
967                 struct {
968                         void **rx_bufs;
969                         struct sk_buff *skb_fstart;
970                         u16 pkt_len;
971                 };
972         };
973 };
974
975 #define RSWITCH_NUM_IRQ_REGS    (RSWITCH_MAX_NUM_QUEUES / BITS_PER_TYPE(u32))
976 struct rswitch_gwca {
977         unsigned int index;
978         struct rswitch_desc *linkfix_table;
979         dma_addr_t linkfix_table_dma;
980         u32 linkfix_table_size;
981         struct rswitch_gwca_queue *queues;
982         int num_queues;
983         struct rswitch_gwca_queue ts_queue;
984         DECLARE_BITMAP(used, RSWITCH_MAX_NUM_QUEUES);
985         u32 tx_irq_bits[RSWITCH_NUM_IRQ_REGS];
986         u32 rx_irq_bits[RSWITCH_NUM_IRQ_REGS];
987         int speed;
988 };
989
990 #define NUM_QUEUES_PER_NDEV     2
991 #define TS_TAGS_PER_PORT        256
992 struct rswitch_device {
993         struct rswitch_private *priv;
994         struct net_device *ndev;
995         struct napi_struct napi;
996         void __iomem *addr;
997         struct rswitch_gwca_queue *tx_queue;
998         struct rswitch_gwca_queue *rx_queue;
999         struct sk_buff *ts_skb[TS_TAGS_PER_PORT];
1000         DECLARE_BITMAP(ts_skb_used, TS_TAGS_PER_PORT);
1001         bool disabled;
1002
1003         int port;
1004         struct rswitch_etha *etha;
1005         struct device_node *np_port;
1006         struct phy *serdes;
1007 };
1008
1009 struct rswitch_mfwd_mac_table_entry {
1010         int queue_index;
1011         unsigned char addr[MAX_ADDR_LEN];
1012 };
1013
1014 struct rswitch_mfwd {
1015         struct rswitch_mac_table_entry *mac_table_entries;
1016         int num_mac_table_entries;
1017 };
1018
1019 struct rswitch_private {
1020         struct platform_device *pdev;
1021         void __iomem *addr;
1022         struct rcar_gen4_ptp_private *ptp_priv;
1023
1024         struct rswitch_device *rdev[RSWITCH_NUM_PORTS];
1025         DECLARE_BITMAP(opened_ports, RSWITCH_NUM_PORTS);
1026
1027         struct rswitch_gwca gwca;
1028         struct rswitch_etha etha[RSWITCH_NUM_PORTS];
1029         struct rswitch_mfwd mfwd;
1030
1031         spinlock_t lock;        /* lock interrupt registers' control */
1032         struct clk *clk;
1033
1034         bool etha_no_runtime_change;
1035         bool gwca_halt;
1036 };
1037
1038 #endif  /* #ifndef __RSWITCH_H__ */
This page took 0.121495 seconds and 4 git commands to generate.