linux/drivers/net/ethernet/freescale/dpaa2/dpsw-cmd.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0 */
   2/*
   3 * Copyright 2014-2016 Freescale Semiconductor Inc.
   4 * Copyright 2017-2021 NXP
   5 *
   6 */
   7
   8#ifndef __FSL_DPSW_CMD_H
   9#define __FSL_DPSW_CMD_H
  10
  11#include "dpsw.h"
  12
  13/* DPSW Version */
  14#define DPSW_VER_MAJOR          8
  15#define DPSW_VER_MINOR          9
  16
  17#define DPSW_CMD_BASE_VERSION   1
  18#define DPSW_CMD_VERSION_2      2
  19#define DPSW_CMD_ID_OFFSET      4
  20
  21#define DPSW_CMD_ID(id) (((id) << DPSW_CMD_ID_OFFSET) | DPSW_CMD_BASE_VERSION)
  22#define DPSW_CMD_V2(id) (((id) << DPSW_CMD_ID_OFFSET) | DPSW_CMD_VERSION_2)
  23
  24/* Command IDs */
  25#define DPSW_CMDID_CLOSE                    DPSW_CMD_ID(0x800)
  26#define DPSW_CMDID_OPEN                     DPSW_CMD_ID(0x802)
  27
  28#define DPSW_CMDID_GET_API_VERSION          DPSW_CMD_ID(0xa02)
  29
  30#define DPSW_CMDID_ENABLE                   DPSW_CMD_ID(0x002)
  31#define DPSW_CMDID_DISABLE                  DPSW_CMD_ID(0x003)
  32#define DPSW_CMDID_GET_ATTR                 DPSW_CMD_V2(0x004)
  33#define DPSW_CMDID_RESET                    DPSW_CMD_ID(0x005)
  34
  35#define DPSW_CMDID_SET_IRQ_ENABLE           DPSW_CMD_ID(0x012)
  36
  37#define DPSW_CMDID_SET_IRQ_MASK             DPSW_CMD_ID(0x014)
  38
  39#define DPSW_CMDID_GET_IRQ_STATUS           DPSW_CMD_ID(0x016)
  40#define DPSW_CMDID_CLEAR_IRQ_STATUS         DPSW_CMD_ID(0x017)
  41
  42#define DPSW_CMDID_IF_SET_TCI               DPSW_CMD_ID(0x030)
  43#define DPSW_CMDID_IF_SET_STP               DPSW_CMD_ID(0x031)
  44
  45#define DPSW_CMDID_IF_GET_COUNTER           DPSW_CMD_V2(0x034)
  46
  47#define DPSW_CMDID_IF_ENABLE                DPSW_CMD_ID(0x03D)
  48#define DPSW_CMDID_IF_DISABLE               DPSW_CMD_ID(0x03E)
  49
  50#define DPSW_CMDID_IF_GET_ATTR              DPSW_CMD_ID(0x042)
  51
  52#define DPSW_CMDID_IF_SET_MAX_FRAME_LENGTH  DPSW_CMD_ID(0x044)
  53
  54#define DPSW_CMDID_IF_GET_LINK_STATE        DPSW_CMD_ID(0x046)
  55
  56#define DPSW_CMDID_IF_GET_TCI               DPSW_CMD_ID(0x04A)
  57
  58#define DPSW_CMDID_IF_SET_LINK_CFG          DPSW_CMD_ID(0x04C)
  59
  60#define DPSW_CMDID_VLAN_ADD                 DPSW_CMD_ID(0x060)
  61#define DPSW_CMDID_VLAN_ADD_IF              DPSW_CMD_V2(0x061)
  62#define DPSW_CMDID_VLAN_ADD_IF_UNTAGGED     DPSW_CMD_ID(0x062)
  63
  64#define DPSW_CMDID_VLAN_REMOVE_IF           DPSW_CMD_ID(0x064)
  65#define DPSW_CMDID_VLAN_REMOVE_IF_UNTAGGED  DPSW_CMD_ID(0x065)
  66#define DPSW_CMDID_VLAN_REMOVE_IF_FLOODING  DPSW_CMD_ID(0x066)
  67#define DPSW_CMDID_VLAN_REMOVE              DPSW_CMD_ID(0x067)
  68
  69#define DPSW_CMDID_FDB_ADD                  DPSW_CMD_ID(0x082)
  70#define DPSW_CMDID_FDB_REMOVE               DPSW_CMD_ID(0x083)
  71#define DPSW_CMDID_FDB_ADD_UNICAST          DPSW_CMD_ID(0x084)
  72#define DPSW_CMDID_FDB_REMOVE_UNICAST       DPSW_CMD_ID(0x085)
  73#define DPSW_CMDID_FDB_ADD_MULTICAST        DPSW_CMD_ID(0x086)
  74#define DPSW_CMDID_FDB_REMOVE_MULTICAST     DPSW_CMD_ID(0x087)
  75#define DPSW_CMDID_FDB_DUMP                 DPSW_CMD_ID(0x08A)
  76
  77#define DPSW_CMDID_ACL_ADD                  DPSW_CMD_ID(0x090)
  78#define DPSW_CMDID_ACL_REMOVE               DPSW_CMD_ID(0x091)
  79#define DPSW_CMDID_ACL_ADD_ENTRY            DPSW_CMD_ID(0x092)
  80#define DPSW_CMDID_ACL_REMOVE_ENTRY         DPSW_CMD_ID(0x093)
  81#define DPSW_CMDID_ACL_ADD_IF               DPSW_CMD_ID(0x094)
  82#define DPSW_CMDID_ACL_REMOVE_IF            DPSW_CMD_ID(0x095)
  83
  84#define DPSW_CMDID_IF_GET_PORT_MAC_ADDR     DPSW_CMD_ID(0x0A7)
  85
  86#define DPSW_CMDID_CTRL_IF_GET_ATTR         DPSW_CMD_ID(0x0A0)
  87#define DPSW_CMDID_CTRL_IF_SET_POOLS        DPSW_CMD_ID(0x0A1)
  88#define DPSW_CMDID_CTRL_IF_ENABLE           DPSW_CMD_ID(0x0A2)
  89#define DPSW_CMDID_CTRL_IF_DISABLE          DPSW_CMD_ID(0x0A3)
  90#define DPSW_CMDID_CTRL_IF_SET_QUEUE        DPSW_CMD_ID(0x0A6)
  91
  92#define DPSW_CMDID_SET_EGRESS_FLOOD         DPSW_CMD_ID(0x0AC)
  93#define DPSW_CMDID_IF_SET_LEARNING_MODE     DPSW_CMD_ID(0x0AD)
  94
  95/* Macros for accessing command fields smaller than 1byte */
  96#define DPSW_MASK(field)        \
  97        GENMASK(DPSW_##field##_SHIFT + DPSW_##field##_SIZE - 1, \
  98                DPSW_##field##_SHIFT)
  99#define dpsw_set_field(var, field, val) \
 100        ((var) |= (((val) << DPSW_##field##_SHIFT) & DPSW_MASK(field)))
 101#define dpsw_get_field(var, field)      \
 102        (((var) & DPSW_MASK(field)) >> DPSW_##field##_SHIFT)
 103#define dpsw_get_bit(var, bit) \
 104        (((var)  >> (bit)) & GENMASK(0, 0))
 105
 106#pragma pack(push, 1)
 107struct dpsw_cmd_open {
 108        __le32 dpsw_id;
 109};
 110
 111#define DPSW_COMPONENT_TYPE_SHIFT       0
 112#define DPSW_COMPONENT_TYPE_SIZE        4
 113
 114struct dpsw_cmd_create {
 115        /* cmd word 0 */
 116        __le16 num_ifs;
 117        u8 max_fdbs;
 118        u8 max_meters_per_if;
 119        /* from LSB: only the first 4 bits */
 120        u8 component_type;
 121        u8 pad[3];
 122        /* cmd word 1 */
 123        __le16 max_vlans;
 124        __le16 max_fdb_entries;
 125        __le16 fdb_aging_time;
 126        __le16 max_fdb_mc_groups;
 127        /* cmd word 2 */
 128        __le64 options;
 129};
 130
 131struct dpsw_cmd_destroy {
 132        __le32 dpsw_id;
 133};
 134
 135#define DPSW_ENABLE_SHIFT 0
 136#define DPSW_ENABLE_SIZE  1
 137
 138struct dpsw_rsp_is_enabled {
 139        /* from LSB: enable:1 */
 140        u8 enabled;
 141};
 142
 143struct dpsw_cmd_set_irq_enable {
 144        u8 enable_state;
 145        u8 pad[3];
 146        u8 irq_index;
 147};
 148
 149struct dpsw_cmd_get_irq_enable {
 150        __le32 pad;
 151        u8 irq_index;
 152};
 153
 154struct dpsw_rsp_get_irq_enable {
 155        u8 enable_state;
 156};
 157
 158struct dpsw_cmd_set_irq_mask {
 159        __le32 mask;
 160        u8 irq_index;
 161};
 162
 163struct dpsw_cmd_get_irq_mask {
 164        __le32 pad;
 165        u8 irq_index;
 166};
 167
 168struct dpsw_rsp_get_irq_mask {
 169        __le32 mask;
 170};
 171
 172struct dpsw_cmd_get_irq_status {
 173        __le32 status;
 174        u8 irq_index;
 175};
 176
 177struct dpsw_rsp_get_irq_status {
 178        __le32 status;
 179};
 180
 181struct dpsw_cmd_clear_irq_status {
 182        __le32 status;
 183        u8 irq_index;
 184};
 185
 186#define DPSW_COMPONENT_TYPE_SHIFT       0
 187#define DPSW_COMPONENT_TYPE_SIZE        4
 188
 189#define DPSW_FLOODING_CFG_SHIFT         0
 190#define DPSW_FLOODING_CFG_SIZE          4
 191
 192#define DPSW_BROADCAST_CFG_SHIFT        4
 193#define DPSW_BROADCAST_CFG_SIZE         4
 194
 195struct dpsw_rsp_get_attr {
 196        /* cmd word 0 */
 197        __le16 num_ifs;
 198        u8 max_fdbs;
 199        u8 num_fdbs;
 200        __le16 max_vlans;
 201        __le16 num_vlans;
 202        /* cmd word 1 */
 203        __le16 max_fdb_entries;
 204        __le16 fdb_aging_time;
 205        __le32 dpsw_id;
 206        /* cmd word 2 */
 207        __le16 mem_size;
 208        __le16 max_fdb_mc_groups;
 209        u8 max_meters_per_if;
 210        /* from LSB only the first 4 bits */
 211        u8 component_type;
 212        /* [0:3] - flooding configuration
 213         * [4:7] - broadcast configuration
 214         */
 215        u8 repl_cfg;
 216        u8 pad;
 217        /* cmd word 3 */
 218        __le64 options;
 219};
 220
 221#define DPSW_VLAN_ID_SHIFT      0
 222#define DPSW_VLAN_ID_SIZE       12
 223#define DPSW_DEI_SHIFT          12
 224#define DPSW_DEI_SIZE           1
 225#define DPSW_PCP_SHIFT          13
 226#define DPSW_PCP_SIZE           3
 227
 228struct dpsw_cmd_if_set_tci {
 229        __le16 if_id;
 230        /* from LSB: VLAN_ID:12 DEI:1 PCP:3 */
 231        __le16 conf;
 232};
 233
 234struct dpsw_cmd_if_get_tci {
 235        __le16 if_id;
 236};
 237
 238struct dpsw_rsp_if_get_tci {
 239        __le16 pad;
 240        __le16 vlan_id;
 241        u8 dei;
 242        u8 pcp;
 243};
 244
 245#define DPSW_STATE_SHIFT        0
 246#define DPSW_STATE_SIZE         4
 247
 248struct dpsw_cmd_if_set_stp {
 249        __le16 if_id;
 250        __le16 vlan_id;
 251        /* only the first LSB 4 bits */
 252        u8 state;
 253};
 254
 255#define DPSW_COUNTER_TYPE_SHIFT         0
 256#define DPSW_COUNTER_TYPE_SIZE          5
 257
 258struct dpsw_cmd_if_get_counter {
 259        __le16 if_id;
 260        /* from LSB: type:5 */
 261        u8 type;
 262};
 263
 264struct dpsw_rsp_if_get_counter {
 265        __le64 pad;
 266        __le64 counter;
 267};
 268
 269struct dpsw_cmd_if {
 270        __le16 if_id;
 271};
 272
 273#define DPSW_ADMIT_UNTAGGED_SHIFT       0
 274#define DPSW_ADMIT_UNTAGGED_SIZE        4
 275#define DPSW_ENABLED_SHIFT              5
 276#define DPSW_ENABLED_SIZE               1
 277#define DPSW_ACCEPT_ALL_VLAN_SHIFT      6
 278#define DPSW_ACCEPT_ALL_VLAN_SIZE       1
 279
 280struct dpsw_rsp_if_get_attr {
 281        /* cmd word 0 */
 282        /* from LSB: admit_untagged:4 enabled:1 accept_all_vlan:1 */
 283        u8 conf;
 284        u8 pad1;
 285        u8 num_tcs;
 286        u8 pad2;
 287        __le16 qdid;
 288        /* cmd word 1 */
 289        __le32 options;
 290        __le32 pad3;
 291        /* cmd word 2 */
 292        __le32 rate;
 293};
 294
 295struct dpsw_cmd_if_set_max_frame_length {
 296        __le16 if_id;
 297        __le16 frame_length;
 298};
 299
 300struct dpsw_cmd_if_set_link_cfg {
 301        /* cmd word 0 */
 302        __le16 if_id;
 303        u8 pad[6];
 304        /* cmd word 1 */
 305        __le32 rate;
 306        __le32 pad1;
 307        /* cmd word 2 */
 308        __le64 options;
 309};
 310
 311struct dpsw_cmd_if_get_link_state {
 312        __le16 if_id;
 313};
 314
 315#define DPSW_UP_SHIFT   0
 316#define DPSW_UP_SIZE    1
 317
 318struct dpsw_rsp_if_get_link_state {
 319        /* cmd word 0 */
 320        __le32 pad0;
 321        u8 up;
 322        u8 pad1[3];
 323        /* cmd word 1 */
 324        __le32 rate;
 325        __le32 pad2;
 326        /* cmd word 2 */
 327        __le64 options;
 328};
 329
 330struct dpsw_vlan_add {
 331        __le16 fdb_id;
 332        __le16 vlan_id;
 333};
 334
 335struct dpsw_cmd_vlan_add_if {
 336        /* cmd word 0 */
 337        __le16 options;
 338        __le16 vlan_id;
 339        __le16 fdb_id;
 340        __le16 pad0;
 341        /* cmd word 1-4 */
 342        __le64 if_id;
 343};
 344
 345struct dpsw_cmd_vlan_manage_if {
 346        /* cmd word 0 */
 347        __le16 pad0;
 348        __le16 vlan_id;
 349        __le32 pad1;
 350        /* cmd word 1-4 */
 351        __le64 if_id;
 352};
 353
 354struct dpsw_cmd_vlan_remove {
 355        __le16 pad;
 356        __le16 vlan_id;
 357};
 358
 359struct dpsw_cmd_fdb_add {
 360        __le32 pad;
 361        __le16 fdb_ageing_time;
 362        __le16 num_fdb_entries;
 363};
 364
 365struct dpsw_rsp_fdb_add {
 366        __le16 fdb_id;
 367};
 368
 369struct dpsw_cmd_fdb_remove {
 370        __le16 fdb_id;
 371};
 372
 373#define DPSW_ENTRY_TYPE_SHIFT   0
 374#define DPSW_ENTRY_TYPE_SIZE    4
 375
 376struct dpsw_cmd_fdb_unicast_op {
 377        /* cmd word 0 */
 378        __le16 fdb_id;
 379        u8 mac_addr[6];
 380        /* cmd word 1 */
 381        __le16 if_egress;
 382        /* only the first 4 bits from LSB */
 383        u8 type;
 384};
 385
 386struct dpsw_cmd_fdb_multicast_op {
 387        /* cmd word 0 */
 388        __le16 fdb_id;
 389        __le16 num_ifs;
 390        /* only the first 4 bits from LSB */
 391        u8 type;
 392        u8 pad[3];
 393        /* cmd word 1 */
 394        u8 mac_addr[6];
 395        __le16 pad2;
 396        /* cmd word 2-5 */
 397        __le64 if_id;
 398};
 399
 400struct dpsw_cmd_fdb_dump {
 401        __le16 fdb_id;
 402        __le16 pad0;
 403        __le32 pad1;
 404        __le64 iova_addr;
 405        __le32 iova_size;
 406};
 407
 408struct dpsw_rsp_fdb_dump {
 409        __le16 num_entries;
 410};
 411
 412struct dpsw_rsp_ctrl_if_get_attr {
 413        __le64 pad;
 414        __le32 rx_fqid;
 415        __le32 rx_err_fqid;
 416        __le32 tx_err_conf_fqid;
 417};
 418
 419#define DPSW_BACKUP_POOL(val, order)    (((val) & 0x1) << (order))
 420struct dpsw_cmd_ctrl_if_set_pools {
 421        u8 num_dpbp;
 422        u8 backup_pool_mask;
 423        __le16 pad;
 424        __le32 dpbp_id[DPSW_MAX_DPBP];
 425        __le16 buffer_size[DPSW_MAX_DPBP];
 426};
 427
 428#define DPSW_DEST_TYPE_SHIFT    0
 429#define DPSW_DEST_TYPE_SIZE     4
 430
 431struct dpsw_cmd_ctrl_if_set_queue {
 432        __le32 dest_id;
 433        u8 dest_priority;
 434        u8 pad;
 435        /* from LSB: dest_type:4 */
 436        u8 dest_type;
 437        u8 qtype;
 438        __le64 user_ctx;
 439        __le32 options;
 440};
 441
 442struct dpsw_rsp_get_api_version {
 443        __le16 version_major;
 444        __le16 version_minor;
 445};
 446
 447struct dpsw_rsp_if_get_mac_addr {
 448        __le16 pad;
 449        u8 mac_addr[6];
 450};
 451
 452struct dpsw_cmd_set_egress_flood {
 453        __le16 fdb_id;
 454        u8 flood_type;
 455        u8 pad[5];
 456        __le64 if_id;
 457};
 458
 459#define DPSW_LEARNING_MODE_SHIFT        0
 460#define DPSW_LEARNING_MODE_SIZE         4
 461
 462struct dpsw_cmd_if_set_learning_mode {
 463        __le16 if_id;
 464        /* only the first 4 bits from LSB */
 465        u8 mode;
 466};
 467
 468struct dpsw_cmd_acl_add {
 469        __le16 pad;
 470        __le16 max_entries;
 471};
 472
 473struct dpsw_rsp_acl_add {
 474        __le16 acl_id;
 475};
 476
 477struct dpsw_cmd_acl_remove {
 478        __le16 acl_id;
 479};
 480
 481struct dpsw_cmd_acl_if {
 482        __le16 acl_id;
 483        __le16 num_ifs;
 484        __le32 pad;
 485        __le64 if_id;
 486};
 487
 488struct dpsw_prep_acl_entry {
 489        u8 match_l2_dest_mac[6];
 490        __le16 match_l2_tpid;
 491
 492        u8 match_l2_source_mac[6];
 493        __le16 match_l2_vlan_id;
 494
 495        __le32 match_l3_dest_ip;
 496        __le32 match_l3_source_ip;
 497
 498        __le16 match_l4_dest_port;
 499        __le16 match_l4_source_port;
 500        __le16 match_l2_ether_type;
 501        u8 match_l2_pcp_dei;
 502        u8 match_l3_dscp;
 503
 504        u8 mask_l2_dest_mac[6];
 505        __le16 mask_l2_tpid;
 506
 507        u8 mask_l2_source_mac[6];
 508        __le16 mask_l2_vlan_id;
 509
 510        __le32 mask_l3_dest_ip;
 511        __le32 mask_l3_source_ip;
 512
 513        __le16 mask_l4_dest_port;
 514        __le16 mask_l4_source_port;
 515        __le16 mask_l2_ether_type;
 516        u8 mask_l2_pcp_dei;
 517        u8 mask_l3_dscp;
 518
 519        u8 match_l3_protocol;
 520        u8 mask_l3_protocol;
 521};
 522
 523#define DPSW_RESULT_ACTION_SHIFT        0
 524#define DPSW_RESULT_ACTION_SIZE         4
 525
 526struct dpsw_cmd_acl_entry {
 527        __le16 acl_id;
 528        __le16 result_if_id;
 529        __le32 precedence;
 530        /* from LSB only the first 4 bits */
 531        u8 result_action;
 532        u8 pad[7];
 533        __le64 pad2[4];
 534        __le64 key_iova;
 535};
 536#pragma pack(pop)
 537#endif /* __FSL_DPSW_CMD_H */
 538