Linux Audio

Check our new training course

Loading...
   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
  69enum 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 */
 716enum 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_MII		0x00
 728#define MPIC_PIS_GMII		0x02
 729#define MPIC_PIS_XGMII		0x04
 730#define MPIC_LSC_SHIFT		3
 731#define MPIC_LSC_100M		(1 << MPIC_LSC_SHIFT)
 732#define MPIC_LSC_1G		(2 << MPIC_LSC_SHIFT)
 733#define MPIC_LSC_2_5G		(3 << MPIC_LSC_SHIFT)
 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 */
 760enum 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 */
 838enum 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
 845enum TX_DS_TAGL_BIT {
 846	TX_DS	= 0x0fff, /* Data size */
 847	TX_TAGL	= 0xf000, /* Frame tag LSBs */
 848};
 849
 850enum 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
 896struct 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
 903struct rswitch_ts_desc {
 904	struct rswitch_desc desc;
 905	__le32 ts_nsec;
 906	__le32 ts_sec;
 907} __packed;
 908
 909struct rswitch_ext_desc {
 910	struct rswitch_desc desc;
 911	__le64 info1;
 912} __packed;
 913
 914struct rswitch_ext_ts_desc {
 915	struct rswitch_desc desc;
 916	__le64 info1;
 917	__le32 ts_nsec;
 918	__le32 ts_sec;
 919} __packed;
 920
 921struct 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 */
 942struct 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
 975struct rswitch_gwca_ts_info {
 976	struct sk_buff *skb;
 977	struct list_head list;
 978
 979	int port;
 980	u8 tag;
 981};
 982
 983#define RSWITCH_NUM_IRQ_REGS	(RSWITCH_MAX_NUM_QUEUES / BITS_PER_TYPE(u32))
 984struct rswitch_gwca {
 985	unsigned int index;
 986	struct rswitch_desc *linkfix_table;
 987	dma_addr_t linkfix_table_dma;
 988	u32 linkfix_table_size;
 989	struct rswitch_gwca_queue *queues;
 990	int num_queues;
 991	struct rswitch_gwca_queue ts_queue;
 992	struct list_head ts_info_list;
 993	DECLARE_BITMAP(used, RSWITCH_MAX_NUM_QUEUES);
 994	u32 tx_irq_bits[RSWITCH_NUM_IRQ_REGS];
 995	u32 rx_irq_bits[RSWITCH_NUM_IRQ_REGS];
 996	int speed;
 997};
 998
 999#define NUM_QUEUES_PER_NDEV	2
1000struct rswitch_device {
1001	struct rswitch_private *priv;
1002	struct net_device *ndev;
1003	struct napi_struct napi;
1004	void __iomem *addr;
1005	struct rswitch_gwca_queue *tx_queue;
1006	struct rswitch_gwca_queue *rx_queue;
1007	u8 ts_tag;
1008	bool disabled;
1009
1010	int port;
1011	struct rswitch_etha *etha;
1012	struct device_node *np_port;
1013	struct phy *serdes;
1014};
1015
1016struct rswitch_mfwd_mac_table_entry {
1017	int queue_index;
1018	unsigned char addr[MAX_ADDR_LEN];
1019};
1020
1021struct rswitch_mfwd {
1022	struct rswitch_mac_table_entry *mac_table_entries;
1023	int num_mac_table_entries;
1024};
1025
1026struct rswitch_private {
1027	struct platform_device *pdev;
1028	void __iomem *addr;
1029	struct rcar_gen4_ptp_private *ptp_priv;
1030
1031	struct rswitch_device *rdev[RSWITCH_NUM_PORTS];
1032	DECLARE_BITMAP(opened_ports, RSWITCH_NUM_PORTS);
1033
1034	struct rswitch_gwca gwca;
1035	struct rswitch_etha etha[RSWITCH_NUM_PORTS];
1036	struct rswitch_mfwd mfwd;
1037
1038	spinlock_t lock;	/* lock interrupt registers' control */
1039	struct clk *clk;
1040
1041	bool etha_no_runtime_change;
1042	bool gwca_halt;
1043};
1044
1045#endif	/* #ifndef __RSWITCH_H__ */