| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074 |
- /* SPDX-License-Identifier: GPL-2.0 */
- /* Renesas Ethernet Switch device driver
- *
- * Copyright (C) 2022-2025 Renesas Electronics Corporation
- */
- #ifndef __RSWITCH_H__
- #define __RSWITCH_H__
- #include <linux/platform_device.h>
- #include <linux/phy.h>
- #include "rcar_gen4_ptp.h"
- #define RSWITCH_MAX_NUM_QUEUES 128
- #define RSWITCH_NUM_AGENTS 5
- #define RSWITCH_NUM_PORTS 3
- #define rswitch_for_all_ports(_priv, _rdev) \
- list_for_each_entry(_rdev, &_priv->port_list, list)
- #define rswitch_for_each_enabled_port(priv, i) \
- for (i = 0; i < RSWITCH_NUM_PORTS; i++) \
- if (priv->rdev[i]->disabled) \
- continue; \
- else
- #define rswitch_for_each_enabled_port_continue_reverse(priv, i) \
- for (; i-- > 0; ) \
- if (priv->rdev[i]->disabled) \
- continue; \
- else
- #define TX_RING_SIZE 1024
- #define RX_RING_SIZE 4096
- #define TS_RING_SIZE (TX_RING_SIZE * RSWITCH_NUM_PORTS)
- #define RSWITCH_MAX_MTU 9600
- #define RSWITCH_HEADROOM (NET_SKB_PAD + NET_IP_ALIGN)
- #define RSWITCH_DESC_BUF_SIZE 2048
- #define RSWITCH_TAILROOM SKB_DATA_ALIGN(sizeof(struct skb_shared_info))
- #define RSWITCH_ALIGN 128
- #define RSWITCH_BUF_SIZE (RSWITCH_HEADROOM + RSWITCH_DESC_BUF_SIZE + \
- RSWITCH_TAILROOM + RSWITCH_ALIGN)
- #define RSWITCH_MAP_BUF_SIZE (RSWITCH_BUF_SIZE - RSWITCH_HEADROOM)
- #define RSWITCH_MAX_CTAG_PCP 7
- #define RSWITCH_TIMEOUT_US 100000
- #define RSWITCH_TOP_OFFSET 0x00008000
- #define RSWITCH_COMA_OFFSET 0x00009000
- #define RSWITCH_ETHA_OFFSET 0x0000a000 /* with RMAC */
- #define RSWITCH_ETHA_SIZE 0x00002000 /* with RMAC */
- #define RSWITCH_GWCA0_OFFSET 0x00010000
- #define RSWITCH_GWCA1_OFFSET 0x00012000
- /* TODO: hardcoded ETHA/GWCA settings for now */
- #define GWCA_IRQ_RESOURCE_NAME "gwca0_rxtx%d"
- #define GWCA_IRQ_NAME "rswitch: gwca0_rxtx%d"
- #define GWCA_NUM_IRQS 8
- #define GWCA_INDEX 0
- #define AGENT_INDEX_GWCA 3
- #define GWCA_IPV_NUM 0
- #define GWRO RSWITCH_GWCA0_OFFSET
- #define GWCA_TS_IRQ_RESOURCE_NAME "gwca0_rxts0"
- #define GWCA_TS_IRQ_NAME "rswitch: gwca0_rxts0"
- #define GWCA_TS_IRQ_BIT BIT(0)
- #define FWRO 0
- #define TPRO RSWITCH_TOP_OFFSET
- #define CARO RSWITCH_COMA_OFFSET
- #define TARO 0
- #define RMRO 0x1000
- enum rswitch_reg {
- FWGC = FWRO + 0x0000,
- FWTTC0 = FWRO + 0x0010,
- FWTTC1 = FWRO + 0x0014,
- FWLBMC = FWRO + 0x0018,
- FWCEPTC = FWRO + 0x0020,
- FWCEPRC0 = FWRO + 0x0024,
- FWCEPRC1 = FWRO + 0x0028,
- FWCEPRC2 = FWRO + 0x002c,
- FWCLPTC = FWRO + 0x0030,
- FWCLPRC = FWRO + 0x0034,
- FWCMPTC = FWRO + 0x0040,
- FWEMPTC = FWRO + 0x0044,
- FWSDMPTC = FWRO + 0x0050,
- FWSDMPVC = FWRO + 0x0054,
- FWLBWMC0 = FWRO + 0x0080,
- FWPC00 = FWRO + 0x0100,
- FWPC10 = FWRO + 0x0104,
- FWPC20 = FWRO + 0x0108,
- FWCTGC00 = FWRO + 0x0400,
- FWCTGC10 = FWRO + 0x0404,
- FWCTTC00 = FWRO + 0x0408,
- FWCTTC10 = FWRO + 0x040c,
- FWCTTC200 = FWRO + 0x0410,
- FWCTSC00 = FWRO + 0x0420,
- FWCTSC10 = FWRO + 0x0424,
- FWCTSC20 = FWRO + 0x0428,
- FWCTSC30 = FWRO + 0x042c,
- FWCTSC40 = FWRO + 0x0430,
- FWTWBFC0 = FWRO + 0x1000,
- FWTWBFVC0 = FWRO + 0x1004,
- FWTHBFC0 = FWRO + 0x1400,
- FWTHBFV0C0 = FWRO + 0x1404,
- FWTHBFV1C0 = FWRO + 0x1408,
- FWFOBFC0 = FWRO + 0x1800,
- FWFOBFV0C0 = FWRO + 0x1804,
- FWFOBFV1C0 = FWRO + 0x1808,
- FWRFC0 = FWRO + 0x1c00,
- FWRFVC0 = FWRO + 0x1c04,
- FWCFC0 = FWRO + 0x2000,
- FWCFMC00 = FWRO + 0x2004,
- FWIP4SC = FWRO + 0x4008,
- FWIP6SC = FWRO + 0x4018,
- FWIP6OC = FWRO + 0x401c,
- FWL2SC = FWRO + 0x4020,
- FWSFHEC = FWRO + 0x4030,
- FWSHCR0 = FWRO + 0x4040,
- FWSHCR1 = FWRO + 0x4044,
- FWSHCR2 = FWRO + 0x4048,
- FWSHCR3 = FWRO + 0x404c,
- FWSHCR4 = FWRO + 0x4050,
- FWSHCR5 = FWRO + 0x4054,
- FWSHCR6 = FWRO + 0x4058,
- FWSHCR7 = FWRO + 0x405c,
- FWSHCR8 = FWRO + 0x4060,
- FWSHCR9 = FWRO + 0x4064,
- FWSHCR10 = FWRO + 0x4068,
- FWSHCR11 = FWRO + 0x406c,
- FWSHCR12 = FWRO + 0x4070,
- FWSHCR13 = FWRO + 0x4074,
- FWSHCRR = FWRO + 0x4078,
- FWLTHHEC = FWRO + 0x4090,
- FWLTHHC = FWRO + 0x4094,
- FWLTHTL0 = FWRO + 0x40a0,
- FWLTHTL1 = FWRO + 0x40a4,
- FWLTHTL2 = FWRO + 0x40a8,
- FWLTHTL3 = FWRO + 0x40ac,
- FWLTHTL4 = FWRO + 0x40b0,
- FWLTHTL5 = FWRO + 0x40b4,
- FWLTHTL6 = FWRO + 0x40b8,
- FWLTHTL7 = FWRO + 0x40bc,
- FWLTHTL80 = FWRO + 0x40c0,
- FWLTHTL9 = FWRO + 0x40d0,
- FWLTHTLR = FWRO + 0x40d4,
- FWLTHTIM = FWRO + 0x40e0,
- FWLTHTEM = FWRO + 0x40e4,
- FWLTHTS0 = FWRO + 0x4100,
- FWLTHTS1 = FWRO + 0x4104,
- FWLTHTS2 = FWRO + 0x4108,
- FWLTHTS3 = FWRO + 0x410c,
- FWLTHTS4 = FWRO + 0x4110,
- FWLTHTSR0 = FWRO + 0x4120,
- FWLTHTSR1 = FWRO + 0x4124,
- FWLTHTSR2 = FWRO + 0x4128,
- FWLTHTSR3 = FWRO + 0x412c,
- FWLTHTSR40 = FWRO + 0x4130,
- FWLTHTSR5 = FWRO + 0x4140,
- FWLTHTR = FWRO + 0x4150,
- FWLTHTRR0 = FWRO + 0x4154,
- FWLTHTRR1 = FWRO + 0x4158,
- FWLTHTRR2 = FWRO + 0x415c,
- FWLTHTRR3 = FWRO + 0x4160,
- FWLTHTRR4 = FWRO + 0x4164,
- FWLTHTRR5 = FWRO + 0x4168,
- FWLTHTRR6 = FWRO + 0x416c,
- FWLTHTRR7 = FWRO + 0x4170,
- FWLTHTRR8 = FWRO + 0x4174,
- FWLTHTRR9 = FWRO + 0x4180,
- FWLTHTRR10 = FWRO + 0x4190,
- FWIPHEC = FWRO + 0x4214,
- FWIPHC = FWRO + 0x4218,
- FWIPTL0 = FWRO + 0x4220,
- FWIPTL1 = FWRO + 0x4224,
- FWIPTL2 = FWRO + 0x4228,
- FWIPTL3 = FWRO + 0x422c,
- FWIPTL4 = FWRO + 0x4230,
- FWIPTL5 = FWRO + 0x4234,
- FWIPTL6 = FWRO + 0x4238,
- FWIPTL7 = FWRO + 0x4240,
- FWIPTL8 = FWRO + 0x4250,
- FWIPTLR = FWRO + 0x4254,
- FWIPTIM = FWRO + 0x4260,
- FWIPTEM = FWRO + 0x4264,
- FWIPTS0 = FWRO + 0x4270,
- FWIPTS1 = FWRO + 0x4274,
- FWIPTS2 = FWRO + 0x4278,
- FWIPTS3 = FWRO + 0x427c,
- FWIPTS4 = FWRO + 0x4280,
- FWIPTSR0 = FWRO + 0x4284,
- FWIPTSR1 = FWRO + 0x4288,
- FWIPTSR2 = FWRO + 0x428c,
- FWIPTSR3 = FWRO + 0x4290,
- FWIPTSR4 = FWRO + 0x42a0,
- FWIPTR = FWRO + 0x42b0,
- FWIPTRR0 = FWRO + 0x42b4,
- FWIPTRR1 = FWRO + 0x42b8,
- FWIPTRR2 = FWRO + 0x42bc,
- FWIPTRR3 = FWRO + 0x42c0,
- FWIPTRR4 = FWRO + 0x42c4,
- FWIPTRR5 = FWRO + 0x42c8,
- FWIPTRR6 = FWRO + 0x42cc,
- FWIPTRR7 = FWRO + 0x42d0,
- FWIPTRR8 = FWRO + 0x42e0,
- FWIPTRR9 = FWRO + 0x42f0,
- FWIPHLEC = FWRO + 0x4300,
- FWIPAGUSPC = FWRO + 0x4500,
- FWIPAGC = FWRO + 0x4504,
- FWIPAGM0 = FWRO + 0x4510,
- FWIPAGM1 = FWRO + 0x4514,
- FWIPAGM2 = FWRO + 0x4518,
- FWIPAGM3 = FWRO + 0x451c,
- FWIPAGM4 = FWRO + 0x4520,
- FWMACHEC = FWRO + 0x4620,
- FWMACHC = FWRO + 0x4624,
- FWMACTL0 = FWRO + 0x4630,
- FWMACTL1 = FWRO + 0x4634,
- FWMACTL2 = FWRO + 0x4638,
- FWMACTL3 = FWRO + 0x463c,
- FWMACTL4 = FWRO + 0x4640,
- FWMACTL5 = FWRO + 0x4650,
- FWMACTLR = FWRO + 0x4654,
- FWMACTIM = FWRO + 0x4660,
- FWMACTEM = FWRO + 0x4664,
- FWMACTS0 = FWRO + 0x4670,
- FWMACTS1 = FWRO + 0x4674,
- FWMACTSR0 = FWRO + 0x4678,
- FWMACTSR1 = FWRO + 0x467c,
- FWMACTSR2 = FWRO + 0x4680,
- FWMACTSR3 = FWRO + 0x4690,
- FWMACTR = FWRO + 0x46a0,
- FWMACTRR0 = FWRO + 0x46a4,
- FWMACTRR1 = FWRO + 0x46a8,
- FWMACTRR2 = FWRO + 0x46ac,
- FWMACTRR3 = FWRO + 0x46b0,
- FWMACTRR4 = FWRO + 0x46b4,
- FWMACTRR5 = FWRO + 0x46c0,
- FWMACTRR6 = FWRO + 0x46d0,
- FWMACHLEC = FWRO + 0x4700,
- FWMACAGUSPC = FWRO + 0x4880,
- FWMACAGC = FWRO + 0x4884,
- FWMACAGM0 = FWRO + 0x4888,
- FWMACAGM1 = FWRO + 0x488c,
- FWVLANTEC = FWRO + 0x4900,
- FWVLANTL0 = FWRO + 0x4910,
- FWVLANTL1 = FWRO + 0x4914,
- FWVLANTL2 = FWRO + 0x4918,
- FWVLANTL3 = FWRO + 0x4920,
- FWVLANTL4 = FWRO + 0x4930,
- FWVLANTLR = FWRO + 0x4934,
- FWVLANTIM = FWRO + 0x4940,
- FWVLANTEM = FWRO + 0x4944,
- FWVLANTS = FWRO + 0x4950,
- FWVLANTSR0 = FWRO + 0x4954,
- FWVLANTSR1 = FWRO + 0x4958,
- FWVLANTSR2 = FWRO + 0x4960,
- FWVLANTSR3 = FWRO + 0x4970,
- FWPBFC0 = FWRO + 0x4a00,
- FWPBFCSDC00 = FWRO + 0x4a04,
- FWL23URL0 = FWRO + 0x4e00,
- FWL23URL1 = FWRO + 0x4e04,
- FWL23URL2 = FWRO + 0x4e08,
- FWL23URL3 = FWRO + 0x4e0c,
- FWL23URLR = FWRO + 0x4e10,
- FWL23UTIM = FWRO + 0x4e20,
- FWL23URR = FWRO + 0x4e30,
- FWL23URRR0 = FWRO + 0x4e34,
- FWL23URRR1 = FWRO + 0x4e38,
- FWL23URRR2 = FWRO + 0x4e3c,
- FWL23URRR3 = FWRO + 0x4e40,
- FWL23URMC0 = FWRO + 0x4f00,
- FWPMFGC0 = FWRO + 0x5000,
- FWPGFC0 = FWRO + 0x5100,
- FWPGFIGSC0 = FWRO + 0x5104,
- FWPGFENC0 = FWRO + 0x5108,
- FWPGFENM0 = FWRO + 0x510c,
- FWPGFCSTC00 = FWRO + 0x5110,
- FWPGFCSTC10 = FWRO + 0x5114,
- FWPGFCSTM00 = FWRO + 0x5118,
- FWPGFCSTM10 = FWRO + 0x511c,
- FWPGFCTC0 = FWRO + 0x5120,
- FWPGFCTM0 = FWRO + 0x5124,
- FWPGFHCC0 = FWRO + 0x5128,
- FWPGFSM0 = FWRO + 0x512c,
- FWPGFGC0 = FWRO + 0x5130,
- FWPGFGL0 = FWRO + 0x5500,
- FWPGFGL1 = FWRO + 0x5504,
- FWPGFGLR = FWRO + 0x5518,
- FWPGFGR = FWRO + 0x5510,
- FWPGFGRR0 = FWRO + 0x5514,
- FWPGFGRR1 = FWRO + 0x5518,
- FWPGFRIM = FWRO + 0x5520,
- FWPMTRFC0 = FWRO + 0x5600,
- FWPMTRCBSC0 = FWRO + 0x5604,
- FWPMTRC0RC0 = FWRO + 0x5608,
- FWPMTREBSC0 = FWRO + 0x560c,
- FWPMTREIRC0 = FWRO + 0x5610,
- FWPMTRFM0 = FWRO + 0x5614,
- FWFTL0 = FWRO + 0x6000,
- FWFTL1 = FWRO + 0x6004,
- FWFTLR = FWRO + 0x6008,
- FWFTOC = FWRO + 0x6010,
- FWFTOPC = FWRO + 0x6014,
- FWFTIM = FWRO + 0x6020,
- FWFTR = FWRO + 0x6030,
- FWFTRR0 = FWRO + 0x6034,
- FWFTRR1 = FWRO + 0x6038,
- FWFTRR2 = FWRO + 0x603c,
- FWSEQNGC0 = FWRO + 0x6100,
- FWSEQNGM0 = FWRO + 0x6104,
- FWSEQNRC = FWRO + 0x6200,
- FWCTFDCN0 = FWRO + 0x6300,
- FWLTHFDCN0 = FWRO + 0x6304,
- FWIPFDCN0 = FWRO + 0x6308,
- FWLTWFDCN0 = FWRO + 0x630c,
- FWPBFDCN0 = FWRO + 0x6310,
- FWMHLCN0 = FWRO + 0x6314,
- FWIHLCN0 = FWRO + 0x6318,
- FWICRDCN0 = FWRO + 0x6500,
- FWWMRDCN0 = FWRO + 0x6504,
- FWCTRDCN0 = FWRO + 0x6508,
- FWLTHRDCN0 = FWRO + 0x650c,
- FWIPRDCN0 = FWRO + 0x6510,
- FWLTWRDCN0 = FWRO + 0x6514,
- FWPBRDCN0 = FWRO + 0x6518,
- FWPMFDCN0 = FWRO + 0x6700,
- FWPGFDCN0 = FWRO + 0x6780,
- FWPMGDCN0 = FWRO + 0x6800,
- FWPMYDCN0 = FWRO + 0x6804,
- FWPMRDCN0 = FWRO + 0x6808,
- FWFRPPCN0 = FWRO + 0x6a00,
- FWFRDPCN0 = FWRO + 0x6a04,
- FWEIS00 = FWRO + 0x7900,
- FWEIE00 = FWRO + 0x7904,
- FWEID00 = FWRO + 0x7908,
- FWEIS1 = FWRO + 0x7a00,
- FWEIE1 = FWRO + 0x7a04,
- FWEID1 = FWRO + 0x7a08,
- FWEIS2 = FWRO + 0x7a10,
- FWEIE2 = FWRO + 0x7a14,
- FWEID2 = FWRO + 0x7a18,
- FWEIS3 = FWRO + 0x7a20,
- FWEIE3 = FWRO + 0x7a24,
- FWEID3 = FWRO + 0x7a28,
- FWEIS4 = FWRO + 0x7a30,
- FWEIE4 = FWRO + 0x7a34,
- FWEID4 = FWRO + 0x7a38,
- FWEIS5 = FWRO + 0x7a40,
- FWEIE5 = FWRO + 0x7a44,
- FWEID5 = FWRO + 0x7a48,
- FWEIS60 = FWRO + 0x7a50,
- FWEIE60 = FWRO + 0x7a54,
- FWEID60 = FWRO + 0x7a58,
- FWEIS61 = FWRO + 0x7a60,
- FWEIE61 = FWRO + 0x7a64,
- FWEID61 = FWRO + 0x7a68,
- FWEIS62 = FWRO + 0x7a70,
- FWEIE62 = FWRO + 0x7a74,
- FWEID62 = FWRO + 0x7a78,
- FWEIS63 = FWRO + 0x7a80,
- FWEIE63 = FWRO + 0x7a84,
- FWEID63 = FWRO + 0x7a88,
- FWEIS70 = FWRO + 0x7a90,
- FWEIE70 = FWRO + 0x7A94,
- FWEID70 = FWRO + 0x7a98,
- FWEIS71 = FWRO + 0x7aa0,
- FWEIE71 = FWRO + 0x7aa4,
- FWEID71 = FWRO + 0x7aa8,
- FWEIS72 = FWRO + 0x7ab0,
- FWEIE72 = FWRO + 0x7ab4,
- FWEID72 = FWRO + 0x7ab8,
- FWEIS73 = FWRO + 0x7ac0,
- FWEIE73 = FWRO + 0x7ac4,
- FWEID73 = FWRO + 0x7ac8,
- FWEIS80 = FWRO + 0x7ad0,
- FWEIE80 = FWRO + 0x7ad4,
- FWEID80 = FWRO + 0x7ad8,
- FWEIS81 = FWRO + 0x7ae0,
- FWEIE81 = FWRO + 0x7ae4,
- FWEID81 = FWRO + 0x7ae8,
- FWEIS82 = FWRO + 0x7af0,
- FWEIE82 = FWRO + 0x7af4,
- FWEID82 = FWRO + 0x7af8,
- FWEIS83 = FWRO + 0x7b00,
- FWEIE83 = FWRO + 0x7b04,
- FWEID83 = FWRO + 0x7b08,
- FWMIS0 = FWRO + 0x7c00,
- FWMIE0 = FWRO + 0x7c04,
- FWMID0 = FWRO + 0x7c08,
- FWSCR0 = FWRO + 0x7d00,
- FWSCR1 = FWRO + 0x7d04,
- FWSCR2 = FWRO + 0x7d08,
- FWSCR3 = FWRO + 0x7d0c,
- FWSCR4 = FWRO + 0x7d10,
- FWSCR5 = FWRO + 0x7d14,
- FWSCR6 = FWRO + 0x7d18,
- FWSCR7 = FWRO + 0x7d1c,
- FWSCR8 = FWRO + 0x7d20,
- FWSCR9 = FWRO + 0x7d24,
- FWSCR10 = FWRO + 0x7d28,
- FWSCR11 = FWRO + 0x7d2c,
- FWSCR12 = FWRO + 0x7d30,
- FWSCR13 = FWRO + 0x7d34,
- FWSCR14 = FWRO + 0x7d38,
- FWSCR15 = FWRO + 0x7d3c,
- FWSCR16 = FWRO + 0x7d40,
- FWSCR17 = FWRO + 0x7d44,
- FWSCR18 = FWRO + 0x7d48,
- FWSCR19 = FWRO + 0x7d4c,
- FWSCR20 = FWRO + 0x7d50,
- FWSCR21 = FWRO + 0x7d54,
- FWSCR22 = FWRO + 0x7d58,
- FWSCR23 = FWRO + 0x7d5c,
- FWSCR24 = FWRO + 0x7d60,
- FWSCR25 = FWRO + 0x7d64,
- FWSCR26 = FWRO + 0x7d68,
- FWSCR27 = FWRO + 0x7d6c,
- FWSCR28 = FWRO + 0x7d70,
- FWSCR29 = FWRO + 0x7d74,
- FWSCR30 = FWRO + 0x7d78,
- FWSCR31 = FWRO + 0x7d7c,
- FWSCR32 = FWRO + 0x7d80,
- FWSCR33 = FWRO + 0x7d84,
- FWSCR34 = FWRO + 0x7d88,
- FWSCR35 = FWRO + 0x7d8c,
- FWSCR36 = FWRO + 0x7d90,
- FWSCR37 = FWRO + 0x7d94,
- FWSCR38 = FWRO + 0x7d98,
- FWSCR39 = FWRO + 0x7d9c,
- FWSCR40 = FWRO + 0x7da0,
- FWSCR41 = FWRO + 0x7da4,
- FWSCR42 = FWRO + 0x7da8,
- FWSCR43 = FWRO + 0x7dac,
- FWSCR44 = FWRO + 0x7db0,
- FWSCR45 = FWRO + 0x7db4,
- FWSCR46 = FWRO + 0x7db8,
- TPEMIMC0 = TPRO + 0x0000,
- TPEMIMC1 = TPRO + 0x0004,
- TPEMIMC2 = TPRO + 0x0008,
- TPEMIMC3 = TPRO + 0x000c,
- TPEMIMC4 = TPRO + 0x0010,
- TPEMIMC5 = TPRO + 0x0014,
- TPEMIMC60 = TPRO + 0x0080,
- TPEMIMC70 = TPRO + 0x0100,
- TSIM = TPRO + 0x0700,
- TFIM = TPRO + 0x0704,
- TCIM = TPRO + 0x0708,
- TGIM0 = TPRO + 0x0710,
- TGIM1 = TPRO + 0x0714,
- TEIM0 = TPRO + 0x0720,
- TEIM1 = TPRO + 0x0724,
- TEIM2 = TPRO + 0x0728,
- RIPV = CARO + 0x0000,
- RRC = CARO + 0x0004,
- RCEC = CARO + 0x0008,
- RCDC = CARO + 0x000c,
- RSSIS = CARO + 0x0010,
- RSSIE = CARO + 0x0014,
- RSSID = CARO + 0x0018,
- CABPIBWMC = CARO + 0x0020,
- CABPWMLC = CARO + 0x0040,
- CABPPFLC0 = CARO + 0x0050,
- CABPPWMLC0 = CARO + 0x0060,
- CABPPPFLC00 = CARO + 0x00a0,
- CABPULC = CARO + 0x0100,
- CABPIRM = CARO + 0x0140,
- CABPPCM = CARO + 0x0144,
- CABPLCM = CARO + 0x0148,
- CABPCPM = CARO + 0x0180,
- CABPMCPM = CARO + 0x0200,
- CARDNM = CARO + 0x0280,
- CARDMNM = CARO + 0x0284,
- CARDCN = CARO + 0x0290,
- CAEIS0 = CARO + 0x0300,
- CAEIE0 = CARO + 0x0304,
- CAEID0 = CARO + 0x0308,
- CAEIS1 = CARO + 0x0310,
- CAEIE1 = CARO + 0x0314,
- CAEID1 = CARO + 0x0318,
- CAMIS0 = CARO + 0x0340,
- CAMIE0 = CARO + 0x0344,
- CAMID0 = CARO + 0x0348,
- CAMIS1 = CARO + 0x0350,
- CAMIE1 = CARO + 0x0354,
- CAMID1 = CARO + 0x0358,
- CASCR = CARO + 0x0380,
- EAMC = TARO + 0x0000,
- EAMS = TARO + 0x0004,
- EAIRC = TARO + 0x0010,
- EATDQSC = TARO + 0x0014,
- EATDQC = TARO + 0x0018,
- EATDQAC = TARO + 0x001c,
- EATPEC = TARO + 0x0020,
- EATMFSC0 = TARO + 0x0040,
- EATDQDC0 = TARO + 0x0060,
- EATDQM0 = TARO + 0x0080,
- EATDQMLM0 = TARO + 0x00a0,
- EACTQC = TARO + 0x0100,
- EACTDQDC = TARO + 0x0104,
- EACTDQM = TARO + 0x0108,
- EACTDQMLM = TARO + 0x010c,
- EAVCC = TARO + 0x0130,
- EAVTC = TARO + 0x0134,
- EATTFC = TARO + 0x0138,
- EACAEC = TARO + 0x0200,
- EACC = TARO + 0x0204,
- EACAIVC0 = TARO + 0x0220,
- EACAULC0 = TARO + 0x0240,
- EACOEM = TARO + 0x0260,
- EACOIVM0 = TARO + 0x0280,
- EACOULM0 = TARO + 0x02a0,
- EACGSM = TARO + 0x02c0,
- EATASC = TARO + 0x0300,
- EATASENC0 = TARO + 0x0320,
- EATASCTENC = TARO + 0x0340,
- EATASENM0 = TARO + 0x0360,
- EATASCTENM = TARO + 0x0380,
- EATASCSTC0 = TARO + 0x03a0,
- EATASCSTC1 = TARO + 0x03a4,
- EATASCSTM0 = TARO + 0x03a8,
- EATASCSTM1 = TARO + 0x03ac,
- EATASCTC = TARO + 0x03b0,
- EATASCTM = TARO + 0x03b4,
- EATASGL0 = TARO + 0x03c0,
- EATASGL1 = TARO + 0x03c4,
- EATASGLR = TARO + 0x03c8,
- EATASGR = TARO + 0x03d0,
- EATASGRR = TARO + 0x03d4,
- EATASHCC = TARO + 0x03e0,
- EATASRIRM = TARO + 0x03e4,
- EATASSM = TARO + 0x03e8,
- EAUSMFSECN = TARO + 0x0400,
- EATFECN = TARO + 0x0404,
- EAFSECN = TARO + 0x0408,
- EADQOECN = TARO + 0x040c,
- EADQSECN = TARO + 0x0410,
- EACKSECN = TARO + 0x0414,
- EAEIS0 = TARO + 0x0500,
- EAEIE0 = TARO + 0x0504,
- EAEID0 = TARO + 0x0508,
- EAEIS1 = TARO + 0x0510,
- EAEIE1 = TARO + 0x0514,
- EAEID1 = TARO + 0x0518,
- EAEIS2 = TARO + 0x0520,
- EAEIE2 = TARO + 0x0524,
- EAEID2 = TARO + 0x0528,
- EASCR = TARO + 0x0580,
- MPSM = RMRO + 0x0000,
- MPIC = RMRO + 0x0004,
- MPIM = RMRO + 0x0008,
- MIOC = RMRO + 0x0010,
- MIOM = RMRO + 0x0014,
- MXMS = RMRO + 0x0018,
- MTFFC = RMRO + 0x0020,
- MTPFC = RMRO + 0x0024,
- MTPFC2 = RMRO + 0x0028,
- MTPFC30 = RMRO + 0x0030,
- MTATC0 = RMRO + 0x0050,
- MTIM = RMRO + 0x0060,
- MRGC = RMRO + 0x0080,
- MRMAC0 = RMRO + 0x0084,
- MRMAC1 = RMRO + 0x0088,
- MRAFC = RMRO + 0x008c,
- MRSCE = RMRO + 0x0090,
- MRSCP = RMRO + 0x0094,
- MRSCC = RMRO + 0x0098,
- MRFSCE = RMRO + 0x009c,
- MRFSCP = RMRO + 0x00a0,
- MTRC = RMRO + 0x00a4,
- MRIM = RMRO + 0x00a8,
- MRPFM = RMRO + 0x00ac,
- MPFC0 = RMRO + 0x0100,
- MLVC = RMRO + 0x0180,
- MEEEC = RMRO + 0x0184,
- MLBC = RMRO + 0x0188,
- MXGMIIC = RMRO + 0x0190,
- MPCH = RMRO + 0x0194,
- MANC = RMRO + 0x0198,
- MANM = RMRO + 0x019c,
- MPLCA1 = RMRO + 0x01a0,
- MPLCA2 = RMRO + 0x01a4,
- MPLCA3 = RMRO + 0x01a8,
- MPLCA4 = RMRO + 0x01ac,
- MPLCAM = RMRO + 0x01b0,
- MHDC1 = RMRO + 0x01c0,
- MHDC2 = RMRO + 0x01c4,
- MEIS = RMRO + 0x0200,
- MEIE = RMRO + 0x0204,
- MEID = RMRO + 0x0208,
- MMIS0 = RMRO + 0x0210,
- MMIE0 = RMRO + 0x0214,
- MMID0 = RMRO + 0x0218,
- MMIS1 = RMRO + 0x0220,
- MMIE1 = RMRO + 0x0224,
- MMID1 = RMRO + 0x0228,
- MMIS2 = RMRO + 0x0230,
- MMIE2 = RMRO + 0x0234,
- MMID2 = RMRO + 0x0238,
- MMPFTCT = RMRO + 0x0300,
- MAPFTCT = RMRO + 0x0304,
- MPFRCT = RMRO + 0x0308,
- MFCICT = RMRO + 0x030c,
- MEEECT = RMRO + 0x0310,
- MMPCFTCT0 = RMRO + 0x0320,
- MAPCFTCT0 = RMRO + 0x0330,
- MPCFRCT0 = RMRO + 0x0340,
- MHDCC = RMRO + 0x0350,
- MROVFC = RMRO + 0x0354,
- MRHCRCEC = RMRO + 0x0358,
- MRXBCE = RMRO + 0x0400,
- MRXBCP = RMRO + 0x0404,
- MRGFCE = RMRO + 0x0408,
- MRGFCP = RMRO + 0x040c,
- MRBFC = RMRO + 0x0410,
- MRMFC = RMRO + 0x0414,
- MRUFC = RMRO + 0x0418,
- MRPEFC = RMRO + 0x041c,
- MRNEFC = RMRO + 0x0420,
- MRFMEFC = RMRO + 0x0424,
- MRFFMEFC = RMRO + 0x0428,
- MRCFCEFC = RMRO + 0x042c,
- MRFCEFC = RMRO + 0x0430,
- MRRCFEFC = RMRO + 0x0434,
- MRUEFC = RMRO + 0x043c,
- MROEFC = RMRO + 0x0440,
- MRBOEC = RMRO + 0x0444,
- MTXBCE = RMRO + 0x0500,
- MTXBCP = RMRO + 0x0504,
- MTGFCE = RMRO + 0x0508,
- MTGFCP = RMRO + 0x050c,
- MTBFC = RMRO + 0x0510,
- MTMFC = RMRO + 0x0514,
- MTUFC = RMRO + 0x0518,
- MTEFC = RMRO + 0x051c,
- GWMC = GWRO + 0x0000,
- GWMS = GWRO + 0x0004,
- GWIRC = GWRO + 0x0010,
- GWRDQSC = GWRO + 0x0014,
- GWRDQC = GWRO + 0x0018,
- GWRDQAC = GWRO + 0x001c,
- GWRGC = GWRO + 0x0020,
- GWRMFSC0 = GWRO + 0x0040,
- GWRDQDC0 = GWRO + 0x0060,
- GWRDQM0 = GWRO + 0x0080,
- GWRDQMLM0 = GWRO + 0x00a0,
- GWMTIRM = GWRO + 0x0100,
- GWMSTLS = GWRO + 0x0104,
- GWMSTLR = GWRO + 0x0108,
- GWMSTSS = GWRO + 0x010c,
- GWMSTSR = GWRO + 0x0110,
- GWMAC0 = GWRO + 0x0120,
- GWMAC1 = GWRO + 0x0124,
- GWVCC = GWRO + 0x0130,
- GWVTC = GWRO + 0x0134,
- GWTTFC = GWRO + 0x0138,
- GWTDCAC00 = GWRO + 0x0140,
- GWTDCAC10 = GWRO + 0x0144,
- GWTSDCC0 = GWRO + 0x0160,
- GWTNM = GWRO + 0x0180,
- GWTMNM = GWRO + 0x0184,
- GWAC = GWRO + 0x0190,
- GWDCBAC0 = GWRO + 0x0194,
- GWDCBAC1 = GWRO + 0x0198,
- GWIICBSC = GWRO + 0x019c,
- GWMDNC = GWRO + 0x01a0,
- GWTRC0 = GWRO + 0x0200,
- GWTPC0 = GWRO + 0x0300,
- GWARIRM = GWRO + 0x0380,
- GWDCC0 = GWRO + 0x0400,
- GWAARSS = GWRO + 0x0800,
- GWAARSR0 = GWRO + 0x0804,
- GWAARSR1 = GWRO + 0x0808,
- GWIDAUAS0 = GWRO + 0x0840,
- GWIDASM0 = GWRO + 0x0880,
- GWIDASAM00 = GWRO + 0x0900,
- GWIDASAM10 = GWRO + 0x0904,
- GWIDACAM00 = GWRO + 0x0980,
- GWIDACAM10 = GWRO + 0x0984,
- GWGRLC = GWRO + 0x0a00,
- GWGRLULC = GWRO + 0x0a04,
- GWRLIVC0 = GWRO + 0x0a80,
- GWRLULC0 = GWRO + 0x0a84,
- GWIDPC = GWRO + 0x0b00,
- GWIDC0 = GWRO + 0x0c00,
- GWDIS0 = GWRO + 0x1100,
- GWDIE0 = GWRO + 0x1104,
- GWDID0 = GWRO + 0x1108,
- GWTSDIS = GWRO + 0x1180,
- GWTSDIE = GWRO + 0x1184,
- GWTSDID = GWRO + 0x1188,
- GWEIS0 = GWRO + 0x1190,
- GWEIE0 = GWRO + 0x1194,
- GWEID0 = GWRO + 0x1198,
- GWEIS1 = GWRO + 0x11a0,
- GWEIE1 = GWRO + 0x11a4,
- GWEID1 = GWRO + 0x11a8,
- GWEIS20 = GWRO + 0x1200,
- GWEIE20 = GWRO + 0x1204,
- GWEID20 = GWRO + 0x1208,
- GWEIS3 = GWRO + 0x1280,
- GWEIE3 = GWRO + 0x1284,
- GWEID3 = GWRO + 0x1288,
- GWEIS4 = GWRO + 0x1290,
- GWEIE4 = GWRO + 0x1294,
- GWEID4 = GWRO + 0x1298,
- GWEIS5 = GWRO + 0x12a0,
- GWEIE5 = GWRO + 0x12a4,
- GWEID5 = GWRO + 0x12a8,
- GWSCR0 = GWRO + 0x1800,
- GWSCR1 = GWRO + 0x1900,
- };
- /* ETHA/RMAC */
- enum rswitch_etha_mode {
- EAMC_OPC_RESET,
- EAMC_OPC_DISABLE,
- EAMC_OPC_CONFIG,
- EAMC_OPC_OPERATION,
- };
- #define EAMS_OPS_MASK EAMC_OPC_OPERATION
- #define EAVCC_VEM_SC_TAG (0x3 << 16)
- #define MPIC_PIS GENMASK(2, 0)
- #define MPIC_PIS_GMII 2
- #define MPIC_PIS_XGMII 4
- #define MPIC_LSC GENMASK(5, 3)
- #define MPIC_LSC_100M 1
- #define MPIC_LSC_1G 2
- #define MPIC_LSC_2_5G 3
- #define MPIC_PSMCS GENMASK(22, 16)
- #define MPIC_PSMHT GENMASK(26, 24)
- #define MPSM_PSME BIT(0)
- #define MPSM_MFF BIT(2)
- #define MPSM_MMF_C22 0
- #define MPSM_MMF_C45 1
- #define MPSM_PDA GENMASK(7, 3)
- #define MPSM_PRA GENMASK(12, 8)
- #define MPSM_POP GENMASK(14, 13)
- #define MPSM_POP_ADDRESS 0
- #define MPSM_POP_WRITE 1
- #define MPSM_POP_READ_C22 2
- #define MPSM_POP_READ_C45 3
- #define MPSM_PRD GENMASK(31, 16)
- #define MLVC_PLV BIT(16)
- /* GWCA */
- enum rswitch_gwca_mode {
- GWMC_OPC_RESET,
- GWMC_OPC_DISABLE,
- GWMC_OPC_CONFIG,
- GWMC_OPC_OPERATION,
- };
- #define GWMS_OPS_MASK GWMC_OPC_OPERATION
- #define GWMTIRM_MTIOG BIT(0)
- #define GWMTIRM_MTR BIT(1)
- #define GWVCC_VEM_SC_TAG (0x3 << 16)
- #define GWARIRM_ARIOG BIT(0)
- #define GWARIRM_ARR BIT(1)
- #define GWMDNC_TSDMN(num) (((num) << 16) & GENMASK(17, 16))
- #define GWMDNC_TXDMN(num) (((num) << 8) & GENMASK(12, 8))
- #define GWMDNC_RXDMN(num) ((num) & GENMASK(4, 0))
- #define GWDCC_BALR BIT(24)
- #define GWDCC_DCP_MASK GENMASK(18, 16)
- #define GWDCC_DCP(prio) FIELD_PREP(GWDCC_DCP_MASK, (prio))
- #define GWDCC_DQT BIT(11)
- #define GWDCC_ETS BIT(9)
- #define GWDCC_EDE BIT(8)
- #define GWTRC(queue) (GWTRC0 + (queue) / 32 * 4)
- #define GWTPC_PPPL(ipv) BIT(ipv)
- #define GWDCC_OFFS(queue) (GWDCC0 + (queue) * 4)
- #define GWDIS(i) (GWDIS0 + (i) * 0x10)
- #define GWDIE(i) (GWDIE0 + (i) * 0x10)
- #define GWDID(i) (GWDID0 + (i) * 0x10)
- /* COMA */
- #define RRC_RR BIT(0)
- #define RRC_RR_CLR 0
- #define RCEC_ACE_DEFAULT (BIT(0) | BIT(AGENT_INDEX_GWCA))
- #define RCEC_RCE BIT(16)
- #define RCDC_RCD BIT(16)
- #define CABPIRM_BPIOG BIT(0)
- #define CABPIRM_BPR BIT(1)
- #define CABPPFLC_INIT_VALUE 0x00800080
- /* MFWD */
- #define FWPC0(i) (FWPC00 + (i) * 0x10)
- #define FWPC0_LTHTA BIT(0)
- #define FWPC0_IP4UE BIT(3)
- #define FWPC0_IP4TE BIT(4)
- #define FWPC0_IP4OE BIT(5)
- #define FWPC0_L2SE BIT(9)
- #define FWPC0_IP4EA BIT(10)
- #define FWPC0_IPDSA BIT(12)
- #define FWPC0_IPHLA BIT(18)
- #define FWPC0_MACDSA BIT(20)
- #define FWPC0_MACSSA BIT(23)
- #define FWPC0_MACHLA BIT(26)
- #define FWPC0_MACHMA BIT(27)
- #define FWPC0_VLANSA BIT(28)
- #define FWPC1(i) (FWPC10 + (i) * 0x10)
- #define FWCP1_LTHFW GENMASK(16 + (RSWITCH_NUM_AGENTS - 1), 16)
- #define FWPC1_DDE BIT(0)
- #define FWPC2(i) (FWPC20 + (i) * 0x10)
- #define FWCP2_LTWFW GENMASK(16 + (RSWITCH_NUM_AGENTS - 1), 16)
- #define FWCP2_LTWFW_MASK GENMASK(16 + (RSWITCH_NUM_AGENTS - 1), 16)
- #define FWPBFC(i) (FWPBFC0 + (i) * 0x10)
- #define FWPBFC_PBDV GENMASK(RSWITCH_NUM_AGENTS - 1, 0)
- #define FWPBFCSDC(j, i) (FWPBFCSDC00 + (i) * 0x10 + (j) * 0x04)
- #define FWMACHEC_MACHMUE_MASK GENMASK(26, 16)
- #define FWMACTIM_MACTIOG BIT(0)
- #define FWMACTIM_MACTR BIT(1)
- #define FWMACAGUSPC_MACAGUSP GENMASK(9, 0)
- #define FWMACAGC_MACAGT GENMASK(15, 0)
- #define FWMACAGC_MACAGE BIT(16)
- #define FWMACAGC_MACAGSL BIT(17)
- #define FWMACAGC_MACAGPM BIT(18)
- #define FWMACAGC_MACDES BIT(24)
- #define FWMACAGC_MACAGOG BIT(28)
- #define FWMACAGC_MACDESOG BIT(29)
- #define RSW_AGEING_CLK_PER_US 0x140
- #define RSW_AGEING_TIME 300
- /* TOP */
- #define TPEMIMC7(queue) (TPEMIMC70 + (queue) * 4)
- /* Descriptors */
- enum RX_DS_CC_BIT {
- RX_DS = 0x0fff, /* Data size */
- RX_TR = 0x1000, /* Truncation indication */
- RX_EI = 0x2000, /* Error indication */
- RX_PS = 0xc000, /* Padding selection */
- };
- enum TX_DS_TAGL_BIT {
- TX_DS = 0x0fff, /* Data size */
- TX_TAGL = 0xf000, /* Frame tag LSBs */
- };
- enum DIE_DT {
- /* Frame data */
- DT_FSINGLE = 0x80,
- DT_FSTART = 0x90,
- DT_FMID = 0xa0,
- DT_FEND = 0xb0,
- /* Chain control */
- DT_LEMPTY = 0xc0,
- DT_EEMPTY = 0xd0,
- DT_LINKFIX = 0x00,
- DT_LINK = 0xe0,
- DT_EOS = 0xf0,
- /* HW/SW arbitration */
- DT_FEMPTY = 0x40,
- DT_FEMPTY_IS = 0x10,
- DT_FEMPTY_IC = 0x20,
- DT_FEMPTY_ND = 0x30,
- DT_FEMPTY_START = 0x50,
- DT_FEMPTY_MID = 0x60,
- DT_FEMPTY_END = 0x70,
- DT_MASK = 0xf0,
- DIE = 0x08, /* Descriptor Interrupt Enable */
- };
- /* Both transmission and reception */
- #define INFO1_FMT BIT(2)
- #define INFO1_TXC BIT(3)
- /* For transmission */
- #define INFO1_TSUN(val) ((u64)(val) << 8ULL)
- #define INFO1_IPV(prio) ((u64)(prio) << 28ULL)
- #define INFO1_CSD0(index) ((u64)(index) << 32ULL)
- #define INFO1_CSD1(index) ((u64)(index) << 40ULL)
- #define INFO1_DV(port_vector) ((u64)(port_vector) << 48ULL)
- /* For reception */
- #define INFO1_SPN(port) ((u64)(port) << 36ULL)
- /* For timestamp descriptor in dptrl (Byte 4 to 7) */
- #define TS_DESC_TSUN(dptrl) ((dptrl) & GENMASK(7, 0))
- #define TS_DESC_SPN(dptrl) (((dptrl) & GENMASK(10, 8)) >> 8)
- #define TS_DESC_DPN(dptrl) (((dptrl) & GENMASK(17, 16)) >> 16)
- #define TS_DESC_TN(dptrl) ((dptrl) & BIT(24))
- struct rswitch_desc {
- __le16 info_ds; /* Descriptor size */
- u8 die_dt; /* Descriptor interrupt enable and type */
- __u8 dptrh; /* Descriptor pointer MSB */
- __le32 dptrl; /* Descriptor pointer LSW */
- } __packed;
- struct rswitch_ts_desc {
- struct rswitch_desc desc;
- __le32 ts_nsec;
- __le32 ts_sec;
- } __packed;
- struct rswitch_ext_desc {
- struct rswitch_desc desc;
- __le64 info1;
- } __packed;
- struct rswitch_ext_ts_desc {
- struct rswitch_desc desc;
- __le64 info1;
- __le32 ts_nsec;
- __le32 ts_sec;
- } __packed;
- struct rswitch_etha {
- unsigned int index;
- void __iomem *addr;
- void __iomem *coma_addr;
- bool external_phy;
- struct mii_bus *mii;
- phy_interface_t phy_interface;
- u32 psmcs;
- u8 mac_addr[MAX_ADDR_LEN];
- int link;
- int speed;
- /* This hardware could not be initialized twice so that marked
- * this flag to avoid multiple initialization.
- */
- bool operated;
- };
- /* The datasheet said descriptor "chain" and/or "queue". For consistency of
- * name, this driver calls "queue".
- */
- struct rswitch_gwca_queue {
- union {
- struct rswitch_ext_desc *tx_ring;
- struct rswitch_ext_ts_desc *rx_ring;
- struct rswitch_ts_desc *ts_ring;
- };
- /* Common */
- dma_addr_t ring_dma;
- unsigned int ring_size;
- unsigned int cur;
- unsigned int dirty;
- /* For [rt]x_ring */
- unsigned int index;
- bool dir_tx;
- struct net_device *ndev; /* queue to ndev for irq */
- union {
- /* For TX */
- struct {
- struct sk_buff **skbs;
- dma_addr_t *unmap_addrs;
- };
- /* For RX */
- struct {
- void **rx_bufs;
- struct sk_buff *skb_fstart;
- u16 pkt_len;
- };
- };
- };
- #define RSWITCH_NUM_IRQ_REGS (RSWITCH_MAX_NUM_QUEUES / BITS_PER_TYPE(u32))
- struct rswitch_gwca {
- unsigned int index;
- struct rswitch_desc *linkfix_table;
- dma_addr_t linkfix_table_dma;
- u32 linkfix_table_size;
- struct rswitch_gwca_queue *queues;
- int num_queues;
- struct rswitch_gwca_queue ts_queue;
- DECLARE_BITMAP(used, RSWITCH_MAX_NUM_QUEUES);
- u32 tx_irq_bits[RSWITCH_NUM_IRQ_REGS];
- u32 rx_irq_bits[RSWITCH_NUM_IRQ_REGS];
- };
- #define NUM_QUEUES_PER_NDEV 2
- #define TS_TAGS_PER_PORT 256
- struct rswitch_device {
- struct rswitch_private *priv;
- struct net_device *ndev;
- struct napi_struct napi;
- void __iomem *addr;
- struct rswitch_gwca_queue *tx_queue;
- struct rswitch_gwca_queue *rx_queue;
- struct sk_buff *ts_skb[TS_TAGS_PER_PORT];
- DECLARE_BITMAP(ts_skb_used, TS_TAGS_PER_PORT);
- bool disabled;
- struct list_head list;
- int port;
- struct rswitch_etha *etha;
- struct device_node *np_port;
- struct phy *serdes;
- struct net_device *brdev; /* master bridge device */
- unsigned int learning_requested : 1;
- unsigned int learning_offloaded : 1;
- unsigned int forwarding_requested : 1;
- unsigned int forwarding_offloaded : 1;
- };
- struct rswitch_mfwd_mac_table_entry {
- int queue_index;
- unsigned char addr[MAX_ADDR_LEN];
- };
- struct rswitch_mfwd {
- struct rswitch_mac_table_entry *mac_table_entries;
- int num_mac_table_entries;
- };
- struct rswitch_private {
- struct platform_device *pdev;
- void __iomem *addr;
- struct rcar_gen4_ptp_private *ptp_priv;
- struct rswitch_device *rdev[RSWITCH_NUM_PORTS];
- DECLARE_BITMAP(opened_ports, RSWITCH_NUM_PORTS);
- struct rswitch_gwca gwca;
- struct rswitch_etha etha[RSWITCH_NUM_PORTS];
- struct rswitch_mfwd mfwd;
- struct list_head port_list;
- spinlock_t lock; /* lock interrupt registers' control */
- struct clk *clk;
- bool etha_no_runtime_change;
- bool gwca_halt;
- struct net_device *offload_brdev;
- enum hwtstamp_tx_types tstamp_tx_ctrl;
- enum hwtstamp_rx_filters tstamp_rx_ctrl;
- };
- bool is_rdev(const struct net_device *ndev);
- void rswitch_modify(void __iomem *addr, enum rswitch_reg reg, u32 clear, u32 set);
- #endif /* #ifndef __RSWITCH_H__ */
|