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