Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/C/Linux/drivers/net/ethernet/renesas/   (Open Source Betriebssystem Version 6.17.9©)  Datei vom 24.10.2025 mit Größe 26 kB image not shown  

Quelle  rswitch.h   Sprache: C

 
/* SPDX-License-Identifier: GPL-2.0 */
/* Renesas Ethernet Switch device driver
 *
 * Copyright (C) 2022 Renesas Electronics Corporation
 */


#ifndef __RSWITCH_H__
#define __RSWITCH_H__

#include <linux/platform_device.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_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_MACSDA  BIT(20)
#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 FWPBFC(i)  (FWPBFC0 + (i) * 0x10)
#define FWPBFC_PBDV  GENMASK(RSWITCH_NUM_AGENTS - 1, 0)

#define FWPBFCSDC(j, i)         (FWPBFCSDC00 + (i) * 0x10 + (j) * 0x04)

/* 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;

 int port;
 struct rswitch_etha *etha;
 struct device_node *np_port;
 struct phy *serdes;
};

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;

 spinlock_t lock; /* lock interrupt registers' control */
 struct clk *clk;

 bool etha_no_runtime_change;
 bool gwca_halt;
};

#endif /* #ifndef __RSWITCH_H__ */

Messung V0.5
C=96 H=91 G=93

¤ Dauer der Verarbeitung: 0.8 Sekunden  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.