root/drivers/staging/fsl-dpaa2/ethsw/dpsw-cmd.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


   1 /* SPDX-License-Identifier: GPL-2.0 */
   2 /*
   3  * Copyright 2014-2016 Freescale Semiconductor Inc.
   4  * Copyright 2017-2018 NXP
   5  *
   6  */
   7 
   8 #ifndef __FSL_DPSW_CMD_H
   9 #define __FSL_DPSW_CMD_H
  10 
  11 /* DPSW Version */
  12 #define DPSW_VER_MAJOR          8
  13 #define DPSW_VER_MINOR          1
  14 
  15 #define DPSW_CMD_BASE_VERSION   1
  16 #define DPSW_CMD_ID_OFFSET      4
  17 
  18 #define DPSW_CMD_ID(id) (((id) << DPSW_CMD_ID_OFFSET) | DPSW_CMD_BASE_VERSION)
  19 
  20 /* Command IDs */
  21 #define DPSW_CMDID_CLOSE                    DPSW_CMD_ID(0x800)
  22 #define DPSW_CMDID_OPEN                     DPSW_CMD_ID(0x802)
  23 
  24 #define DPSW_CMDID_GET_API_VERSION          DPSW_CMD_ID(0xa02)
  25 
  26 #define DPSW_CMDID_ENABLE                   DPSW_CMD_ID(0x002)
  27 #define DPSW_CMDID_DISABLE                  DPSW_CMD_ID(0x003)
  28 #define DPSW_CMDID_GET_ATTR                 DPSW_CMD_ID(0x004)
  29 #define DPSW_CMDID_RESET                    DPSW_CMD_ID(0x005)
  30 
  31 #define DPSW_CMDID_SET_IRQ_ENABLE           DPSW_CMD_ID(0x012)
  32 
  33 #define DPSW_CMDID_SET_IRQ_MASK             DPSW_CMD_ID(0x014)
  34 
  35 #define DPSW_CMDID_GET_IRQ_STATUS           DPSW_CMD_ID(0x016)
  36 #define DPSW_CMDID_CLEAR_IRQ_STATUS         DPSW_CMD_ID(0x017)
  37 
  38 #define DPSW_CMDID_IF_SET_TCI               DPSW_CMD_ID(0x030)
  39 #define DPSW_CMDID_IF_SET_STP               DPSW_CMD_ID(0x031)
  40 
  41 #define DPSW_CMDID_IF_GET_COUNTER           DPSW_CMD_ID(0x034)
  42 
  43 #define DPSW_CMDID_IF_ENABLE                DPSW_CMD_ID(0x03D)
  44 #define DPSW_CMDID_IF_DISABLE               DPSW_CMD_ID(0x03E)
  45 
  46 #define DPSW_CMDID_IF_SET_MAX_FRAME_LENGTH  DPSW_CMD_ID(0x044)
  47 
  48 #define DPSW_CMDID_IF_GET_LINK_STATE        DPSW_CMD_ID(0x046)
  49 #define DPSW_CMDID_IF_SET_FLOODING          DPSW_CMD_ID(0x047)
  50 #define DPSW_CMDID_IF_SET_BROADCAST         DPSW_CMD_ID(0x048)
  51 
  52 #define DPSW_CMDID_IF_GET_TCI               DPSW_CMD_ID(0x04A)
  53 
  54 #define DPSW_CMDID_IF_SET_LINK_CFG          DPSW_CMD_ID(0x04C)
  55 
  56 #define DPSW_CMDID_VLAN_ADD                 DPSW_CMD_ID(0x060)
  57 #define DPSW_CMDID_VLAN_ADD_IF              DPSW_CMD_ID(0x061)
  58 #define DPSW_CMDID_VLAN_ADD_IF_UNTAGGED     DPSW_CMD_ID(0x062)
  59 
  60 #define DPSW_CMDID_VLAN_REMOVE_IF           DPSW_CMD_ID(0x064)
  61 #define DPSW_CMDID_VLAN_REMOVE_IF_UNTAGGED  DPSW_CMD_ID(0x065)
  62 #define DPSW_CMDID_VLAN_REMOVE_IF_FLOODING  DPSW_CMD_ID(0x066)
  63 #define DPSW_CMDID_VLAN_REMOVE              DPSW_CMD_ID(0x067)
  64 
  65 #define DPSW_CMDID_FDB_ADD_UNICAST          DPSW_CMD_ID(0x084)
  66 #define DPSW_CMDID_FDB_REMOVE_UNICAST       DPSW_CMD_ID(0x085)
  67 #define DPSW_CMDID_FDB_ADD_MULTICAST        DPSW_CMD_ID(0x086)
  68 #define DPSW_CMDID_FDB_REMOVE_MULTICAST     DPSW_CMD_ID(0x087)
  69 #define DPSW_CMDID_FDB_SET_LEARNING_MODE    DPSW_CMD_ID(0x088)
  70 #define DPSW_CMDID_FDB_DUMP                 DPSW_CMD_ID(0x08A)
  71 
  72 /* Macros for accessing command fields smaller than 1byte */
  73 #define DPSW_MASK(field)        \
  74         GENMASK(DPSW_##field##_SHIFT + DPSW_##field##_SIZE - 1, \
  75                 DPSW_##field##_SHIFT)
  76 #define dpsw_set_field(var, field, val) \
  77         ((var) |= (((val) << DPSW_##field##_SHIFT) & DPSW_MASK(field)))
  78 #define dpsw_get_field(var, field)      \
  79         (((var) & DPSW_MASK(field)) >> DPSW_##field##_SHIFT)
  80 #define dpsw_get_bit(var, bit) \
  81         (((var)  >> (bit)) & GENMASK(0, 0))
  82 
  83 struct dpsw_cmd_open {
  84         __le32 dpsw_id;
  85 };
  86 
  87 #define DPSW_COMPONENT_TYPE_SHIFT       0
  88 #define DPSW_COMPONENT_TYPE_SIZE        4
  89 
  90 struct dpsw_cmd_create {
  91         /* cmd word 0 */
  92         __le16 num_ifs;
  93         u8 max_fdbs;
  94         u8 max_meters_per_if;
  95         /* from LSB: only the first 4 bits */
  96         u8 component_type;
  97         u8 pad[3];
  98         /* cmd word 1 */
  99         __le16 max_vlans;
 100         __le16 max_fdb_entries;
 101         __le16 fdb_aging_time;
 102         __le16 max_fdb_mc_groups;
 103         /* cmd word 2 */
 104         __le64 options;
 105 };
 106 
 107 struct dpsw_cmd_destroy {
 108         __le32 dpsw_id;
 109 };
 110 
 111 #define DPSW_ENABLE_SHIFT 0
 112 #define DPSW_ENABLE_SIZE  1
 113 
 114 struct dpsw_rsp_is_enabled {
 115         /* from LSB: enable:1 */
 116         u8 enabled;
 117 };
 118 
 119 struct dpsw_cmd_set_irq_enable {
 120         u8 enable_state;
 121         u8 pad[3];
 122         u8 irq_index;
 123 };
 124 
 125 struct dpsw_cmd_get_irq_enable {
 126         __le32 pad;
 127         u8 irq_index;
 128 };
 129 
 130 struct dpsw_rsp_get_irq_enable {
 131         u8 enable_state;
 132 };
 133 
 134 struct dpsw_cmd_set_irq_mask {
 135         __le32 mask;
 136         u8 irq_index;
 137 };
 138 
 139 struct dpsw_cmd_get_irq_mask {
 140         __le32 pad;
 141         u8 irq_index;
 142 };
 143 
 144 struct dpsw_rsp_get_irq_mask {
 145         __le32 mask;
 146 };
 147 
 148 struct dpsw_cmd_get_irq_status {
 149         __le32 status;
 150         u8 irq_index;
 151 };
 152 
 153 struct dpsw_rsp_get_irq_status {
 154         __le32 status;
 155 };
 156 
 157 struct dpsw_cmd_clear_irq_status {
 158         __le32 status;
 159         u8 irq_index;
 160 };
 161 
 162 #define DPSW_COMPONENT_TYPE_SHIFT       0
 163 #define DPSW_COMPONENT_TYPE_SIZE        4
 164 
 165 struct dpsw_rsp_get_attr {
 166         /* cmd word 0 */
 167         __le16 num_ifs;
 168         u8 max_fdbs;
 169         u8 num_fdbs;
 170         __le16 max_vlans;
 171         __le16 num_vlans;
 172         /* cmd word 1 */
 173         __le16 max_fdb_entries;
 174         __le16 fdb_aging_time;
 175         __le32 dpsw_id;
 176         /* cmd word 2 */
 177         __le16 mem_size;
 178         __le16 max_fdb_mc_groups;
 179         u8 max_meters_per_if;
 180         /* from LSB only the first 4 bits */
 181         u8 component_type;
 182         __le16 pad;
 183         /* cmd word 3 */
 184         __le64 options;
 185 };
 186 
 187 struct dpsw_cmd_if_set_flooding {
 188         __le16 if_id;
 189         /* from LSB: enable:1 */
 190         u8 enable;
 191 };
 192 
 193 struct dpsw_cmd_if_set_broadcast {
 194         __le16 if_id;
 195         /* from LSB: enable:1 */
 196         u8 enable;
 197 };
 198 
 199 #define DPSW_VLAN_ID_SHIFT      0
 200 #define DPSW_VLAN_ID_SIZE       12
 201 #define DPSW_DEI_SHIFT          12
 202 #define DPSW_DEI_SIZE           1
 203 #define DPSW_PCP_SHIFT          13
 204 #define DPSW_PCP_SIZE           3
 205 
 206 struct dpsw_cmd_if_set_tci {
 207         __le16 if_id;
 208         /* from LSB: VLAN_ID:12 DEI:1 PCP:3 */
 209         __le16 conf;
 210 };
 211 
 212 struct dpsw_cmd_if_get_tci {
 213         __le16 if_id;
 214 };
 215 
 216 struct dpsw_rsp_if_get_tci {
 217         __le16 pad;
 218         __le16 vlan_id;
 219         u8 dei;
 220         u8 pcp;
 221 };
 222 
 223 #define DPSW_STATE_SHIFT        0
 224 #define DPSW_STATE_SIZE         4
 225 
 226 struct dpsw_cmd_if_set_stp {
 227         __le16 if_id;
 228         __le16 vlan_id;
 229         /* only the first LSB 4 bits */
 230         u8 state;
 231 };
 232 
 233 #define DPSW_COUNTER_TYPE_SHIFT         0
 234 #define DPSW_COUNTER_TYPE_SIZE          5
 235 
 236 struct dpsw_cmd_if_get_counter {
 237         __le16 if_id;
 238         /* from LSB: type:5 */
 239         u8 type;
 240 };
 241 
 242 struct dpsw_rsp_if_get_counter {
 243         __le64 pad;
 244         __le64 counter;
 245 };
 246 
 247 struct dpsw_cmd_if {
 248         __le16 if_id;
 249 };
 250 
 251 struct dpsw_cmd_if_set_max_frame_length {
 252         __le16 if_id;
 253         __le16 frame_length;
 254 };
 255 
 256 struct dpsw_cmd_if_set_link_cfg {
 257         /* cmd word 0 */
 258         __le16 if_id;
 259         u8 pad[6];
 260         /* cmd word 1 */
 261         __le32 rate;
 262         __le32 pad1;
 263         /* cmd word 2 */
 264         __le64 options;
 265 };
 266 
 267 struct dpsw_cmd_if_get_link_state {
 268         __le16 if_id;
 269 };
 270 
 271 #define DPSW_UP_SHIFT   0
 272 #define DPSW_UP_SIZE    1
 273 
 274 struct dpsw_rsp_if_get_link_state {
 275         /* cmd word 0 */
 276         __le32 pad0;
 277         u8 up;
 278         u8 pad1[3];
 279         /* cmd word 1 */
 280         __le32 rate;
 281         __le32 pad2;
 282         /* cmd word 2 */
 283         __le64 options;
 284 };
 285 
 286 struct dpsw_vlan_add {
 287         __le16 fdb_id;
 288         __le16 vlan_id;
 289 };
 290 
 291 struct dpsw_cmd_vlan_manage_if {
 292         /* cmd word 0 */
 293         __le16 pad0;
 294         __le16 vlan_id;
 295         __le32 pad1;
 296         /* cmd word 1-4 */
 297         __le64 if_id[4];
 298 };
 299 
 300 struct dpsw_cmd_vlan_remove {
 301         __le16 pad;
 302         __le16 vlan_id;
 303 };
 304 
 305 struct dpsw_cmd_fdb_add {
 306         __le32 pad;
 307         __le16 fdb_aging_time;
 308         __le16 num_fdb_entries;
 309 };
 310 
 311 struct dpsw_rsp_fdb_add {
 312         __le16 fdb_id;
 313 };
 314 
 315 struct dpsw_cmd_fdb_remove {
 316         __le16 fdb_id;
 317 };
 318 
 319 #define DPSW_ENTRY_TYPE_SHIFT   0
 320 #define DPSW_ENTRY_TYPE_SIZE    4
 321 
 322 struct dpsw_cmd_fdb_unicast_op {
 323         /* cmd word 0 */
 324         __le16 fdb_id;
 325         u8 mac_addr[6];
 326         /* cmd word 1 */
 327         __le16 if_egress;
 328         /* only the first 4 bits from LSB */
 329         u8 type;
 330 };
 331 
 332 struct dpsw_cmd_fdb_multicast_op {
 333         /* cmd word 0 */
 334         __le16 fdb_id;
 335         __le16 num_ifs;
 336         /* only the first 4 bits from LSB */
 337         u8 type;
 338         u8 pad[3];
 339         /* cmd word 1 */
 340         u8 mac_addr[6];
 341         __le16 pad2;
 342         /* cmd word 2-5 */
 343         __le64 if_id[4];
 344 };
 345 
 346 #define DPSW_LEARNING_MODE_SHIFT        0
 347 #define DPSW_LEARNING_MODE_SIZE         4
 348 
 349 struct dpsw_cmd_fdb_set_learning_mode {
 350         __le16 fdb_id;
 351         /* only the first 4 bits from LSB */
 352         u8 mode;
 353 };
 354 
 355 struct dpsw_cmd_fdb_dump {
 356         __le16 fdb_id;
 357         __le16 pad0;
 358         __le32 pad1;
 359         __le64 iova_addr;
 360         __le32 iova_size;
 361 };
 362 
 363 struct dpsw_rsp_fdb_dump {
 364         __le16 num_entries;
 365 };
 366 
 367 struct dpsw_rsp_get_api_version {
 368         __le16 version_major;
 369         __le16 version_minor;
 370 };
 371 
 372 #endif /* __FSL_DPSW_CMD_H */

/* [<][>][^][v][top][bottom][index][help] */