dpdk/drivers/net/dpaa2/mc/fsl_dpni_cmd.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: (BSD-3-Clause OR GPL-2.0)
   2 *
   3 * Copyright 2013-2016 Freescale Semiconductor Inc.
   4 * Copyright 2016-2022 NXP
   5 *
   6 */
   7#ifndef _FSL_DPNI_CMD_H
   8#define _FSL_DPNI_CMD_H
   9
  10/* DPNI Version */
  11#define DPNI_VER_MAJOR                          8
  12#define DPNI_VER_MINOR                          2
  13
  14#define DPNI_CMD_BASE_VERSION                   1
  15#define DPNI_CMD_VERSION_2                      2
  16#define DPNI_CMD_VERSION_3                      3
  17#define DPNI_CMD_VERSION_4                      4
  18#define DPNI_CMD_VERSION_5                      5
  19#define DPNI_CMD_VERSION_6                      6
  20#define DPNI_CMD_VERSION_7                      7
  21#define DPNI_CMD_ID_OFFSET                      4
  22
  23#define DPNI_CMD(id)    (((id) << DPNI_CMD_ID_OFFSET) | DPNI_CMD_BASE_VERSION)
  24#define DPNI_CMD_V2(id) (((id) << DPNI_CMD_ID_OFFSET) | DPNI_CMD_VERSION_2)
  25#define DPNI_CMD_V3(id) (((id) << DPNI_CMD_ID_OFFSET) | DPNI_CMD_VERSION_3)
  26#define DPNI_CMD_V4(id) (((id) << DPNI_CMD_ID_OFFSET) | DPNI_CMD_VERSION_4)
  27#define DPNI_CMD_V5(id) (((id) << DPNI_CMD_ID_OFFSET) | DPNI_CMD_VERSION_5)
  28#define DPNI_CMD_V6(id) (((id) << DPNI_CMD_ID_OFFSET) | DPNI_CMD_VERSION_6)
  29#define DPNI_CMD_V7(id) (((id) << DPNI_CMD_ID_OFFSET) | DPNI_CMD_VERSION_7)
  30
  31/* Command IDs */
  32#define DPNI_CMDID_OPEN                         DPNI_CMD(0x801)
  33#define DPNI_CMDID_CLOSE                        DPNI_CMD(0x800)
  34#define DPNI_CMDID_CREATE                       DPNI_CMD_V7(0x901)
  35#define DPNI_CMDID_DESTROY                      DPNI_CMD(0x981)
  36#define DPNI_CMDID_GET_API_VERSION              DPNI_CMD(0xa01)
  37
  38#define DPNI_CMDID_ENABLE                       DPNI_CMD(0x002)
  39#define DPNI_CMDID_DISABLE                      DPNI_CMD(0x003)
  40#define DPNI_CMDID_GET_ATTR                     DPNI_CMD_V6(0x004)
  41#define DPNI_CMDID_RESET                        DPNI_CMD(0x005)
  42#define DPNI_CMDID_IS_ENABLED                   DPNI_CMD(0x006)
  43
  44#define DPNI_CMDID_SET_IRQ_ENABLE               DPNI_CMD(0x012)
  45#define DPNI_CMDID_GET_IRQ_ENABLE               DPNI_CMD(0x013)
  46#define DPNI_CMDID_SET_IRQ_MASK                 DPNI_CMD(0x014)
  47#define DPNI_CMDID_GET_IRQ_MASK                 DPNI_CMD(0x015)
  48#define DPNI_CMDID_GET_IRQ_STATUS               DPNI_CMD(0x016)
  49#define DPNI_CMDID_CLEAR_IRQ_STATUS             DPNI_CMD(0x017)
  50
  51#define DPNI_CMDID_SET_POOLS                    DPNI_CMD_V3(0x200)
  52#define DPNI_CMDID_SET_ERRORS_BEHAVIOR          DPNI_CMD(0x20B)
  53
  54#define DPNI_CMDID_GET_QDID                     DPNI_CMD(0x210)
  55#define DPNI_CMDID_GET_SP_INFO                  DPNI_CMD(0x211)
  56#define DPNI_CMDID_GET_TX_DATA_OFFSET           DPNI_CMD(0x212)
  57#define DPNI_CMDID_GET_LINK_STATE               DPNI_CMD_V2(0x215)
  58#define DPNI_CMDID_SET_MAX_FRAME_LENGTH         DPNI_CMD(0x216)
  59#define DPNI_CMDID_GET_MAX_FRAME_LENGTH         DPNI_CMD(0x217)
  60#define DPNI_CMDID_SET_LINK_CFG                 DPNI_CMD_V2(0x21A)
  61#define DPNI_CMDID_SET_TX_SHAPING               DPNI_CMD_V3(0x21B)
  62
  63#define DPNI_CMDID_SET_MCAST_PROMISC            DPNI_CMD(0x220)
  64#define DPNI_CMDID_GET_MCAST_PROMISC            DPNI_CMD(0x221)
  65#define DPNI_CMDID_SET_UNICAST_PROMISC          DPNI_CMD(0x222)
  66#define DPNI_CMDID_GET_UNICAST_PROMISC          DPNI_CMD(0x223)
  67#define DPNI_CMDID_SET_PRIM_MAC                 DPNI_CMD(0x224)
  68#define DPNI_CMDID_GET_PRIM_MAC                 DPNI_CMD(0x225)
  69#define DPNI_CMDID_ADD_MAC_ADDR                 DPNI_CMD_V2(0x226)
  70#define DPNI_CMDID_REMOVE_MAC_ADDR              DPNI_CMD(0x227)
  71#define DPNI_CMDID_CLR_MAC_FILTERS              DPNI_CMD(0x228)
  72
  73#define DPNI_CMDID_ENABLE_VLAN_FILTER           DPNI_CMD(0x230)
  74#define DPNI_CMDID_ADD_VLAN_ID                  DPNI_CMD_V2(0x231)
  75#define DPNI_CMDID_REMOVE_VLAN_ID               DPNI_CMD(0x232)
  76#define DPNI_CMDID_CLR_VLAN_FILTERS             DPNI_CMD(0x233)
  77
  78#define DPNI_CMDID_SET_RX_TC_DIST               DPNI_CMD_V4(0x235)
  79
  80#define DPNI_CMDID_SET_RX_TC_POLICING           DPNI_CMD(0x23E)
  81
  82#define DPNI_CMDID_SET_QOS_TBL                  DPNI_CMD_V2(0x240)
  83#define DPNI_CMDID_ADD_QOS_ENT                  DPNI_CMD_V2(0x241)
  84#define DPNI_CMDID_REMOVE_QOS_ENT               DPNI_CMD(0x242)
  85#define DPNI_CMDID_CLR_QOS_TBL                  DPNI_CMD(0x243)
  86#define DPNI_CMDID_ADD_FS_ENT                   DPNI_CMD_V2(0x244)
  87#define DPNI_CMDID_REMOVE_FS_ENT                DPNI_CMD(0x245)
  88#define DPNI_CMDID_CLR_FS_ENT                   DPNI_CMD(0x246)
  89
  90#define DPNI_CMDID_SET_TX_PRIORITIES            DPNI_CMD_V3(0x250)
  91#define DPNI_CMDID_GET_RX_TC_POLICING           DPNI_CMD(0x251)
  92
  93#define DPNI_CMDID_GET_STATISTICS               DPNI_CMD_V4(0x25D)
  94#define DPNI_CMDID_RESET_STATISTICS             DPNI_CMD(0x25E)
  95#define DPNI_CMDID_GET_QUEUE                    DPNI_CMD_V3(0x25F)
  96#define DPNI_CMDID_SET_QUEUE                    DPNI_CMD_V3(0x260)
  97#define DPNI_CMDID_GET_TAILDROP                 DPNI_CMD_V2(0x261)
  98#define DPNI_CMDID_SET_TAILDROP                 DPNI_CMD_V3(0x262)
  99
 100#define DPNI_CMDID_GET_PORT_MAC_ADDR            DPNI_CMD(0x263)
 101
 102#define DPNI_CMDID_GET_BUFFER_LAYOUT            DPNI_CMD_V2(0x264)
 103#define DPNI_CMDID_SET_BUFFER_LAYOUT            DPNI_CMD_V2(0x265)
 104
 105#define DPNI_CMDID_SET_CONGESTION_NOTIFICATION  DPNI_CMD_V3(0x267)
 106#define DPNI_CMDID_GET_CONGESTION_NOTIFICATION  DPNI_CMD_V3(0x268)
 107#define DPNI_CMDID_SET_EARLY_DROP               DPNI_CMD_V3(0x269)
 108#define DPNI_CMDID_GET_EARLY_DROP               DPNI_CMD_V3(0x26A)
 109#define DPNI_CMDID_GET_OFFLOAD                  DPNI_CMD_V2(0x26B)
 110#define DPNI_CMDID_SET_OFFLOAD                  DPNI_CMD_V2(0x26C)
 111#define DPNI_CMDID_SET_TX_CONFIRMATION_MODE     DPNI_CMD(0x266)
 112#define DPNI_CMDID_GET_TX_CONFIRMATION_MODE     DPNI_CMD(0x26D)
 113#define DPNI_CMDID_SET_OPR                      DPNI_CMD_V2(0x26e)
 114#define DPNI_CMDID_GET_OPR                      DPNI_CMD_V2(0x26f)
 115#define DPNI_CMDID_LOAD_SW_SEQUENCE             DPNI_CMD(0x270)
 116#define DPNI_CMDID_ENABLE_SW_SEQUENCE           DPNI_CMD(0x271)
 117#define DPNI_CMDID_GET_SW_SEQUENCE_LAYOUT       DPNI_CMD(0x272)
 118#define DPNI_CMDID_SET_RX_FS_DIST               DPNI_CMD_V2(0x273)
 119#define DPNI_CMDID_SET_RX_HASH_DIST             DPNI_CMD_V2(0x274)
 120#define DPNI_CMDID_ADD_CUSTOM_TPID              DPNI_CMD(0x275)
 121#define DPNI_CMDID_REMOVE_CUSTOM_TPID           DPNI_CMD(0x276)
 122#define DPNI_CMDID_GET_CUSTOM_TPID              DPNI_CMD(0x277)
 123#define DPNI_CMDID_GET_LINK_CFG                 DPNI_CMD(0x278)
 124#define DPNI_CMDID_SET_PORT_CFG                 DPNI_CMD(0x27B)
 125
 126/* Macros for accessing command fields smaller than 1byte */
 127#define DPNI_MASK(field)        \
 128        GENMASK(DPNI_##field##_SHIFT + DPNI_##field##_SIZE - 1, \
 129                DPNI_##field##_SHIFT)
 130#define dpni_set_field(var, field, val) \
 131        ((var) |= (((val) << DPNI_##field##_SHIFT) & DPNI_MASK(field)))
 132#define dpni_get_field(var, field)      \
 133        (((var) & DPNI_MASK(field)) >> DPNI_##field##_SHIFT)
 134
 135#pragma pack(push, 1)
 136struct dpni_cmd_open {
 137        uint32_t dpni_id;
 138};
 139
 140struct dpni_cmd_create {
 141        uint32_t options;
 142        uint8_t num_queues;
 143        uint8_t num_tcs;
 144        uint8_t mac_filter_entries;
 145        uint8_t num_channels;
 146        uint8_t vlan_filter_entries;
 147        uint8_t pad2;
 148        uint8_t qos_entries;
 149        uint8_t pad3;
 150        uint16_t fs_entries;
 151        uint8_t num_rx_tcs;
 152        uint8_t pad4;
 153        uint8_t  num_cgs;
 154        uint16_t num_opr;
 155        uint8_t dist_key_size;
 156};
 157
 158struct dpni_cmd_destroy {
 159        uint32_t dpsw_id;
 160};
 161
 162#define DPNI_BACKUP_POOL(val, order)    (((val) & 0x1) << (order))
 163
 164struct dpni_cmd_pool {
 165        uint16_t dpbp_id;
 166        uint8_t priority_mask;
 167        uint8_t pad;
 168};
 169
 170struct dpni_cmd_set_pools {
 171        uint8_t num_dpbp;
 172        uint8_t backup_pool_mask;
 173        uint8_t pad;
 174        uint8_t pool_options;
 175        struct dpni_cmd_pool pool[8];
 176        uint16_t buffer_size[8];
 177};
 178
 179/* The enable indication is always the least significant bit */
 180#define DPNI_ENABLE_SHIFT               0
 181#define DPNI_ENABLE_SIZE                1
 182
 183struct dpni_rsp_is_enabled {
 184        uint8_t enabled;
 185};
 186
 187struct dpni_cmd_set_irq_enable {
 188        uint8_t enable;
 189        uint8_t pad[3];
 190        uint8_t irq_index;
 191};
 192
 193struct dpni_cmd_get_irq_enable {
 194        uint32_t pad;
 195        uint8_t irq_index;
 196};
 197
 198struct dpni_rsp_get_irq_enable {
 199        uint8_t enabled;
 200};
 201
 202struct dpni_cmd_set_irq_mask {
 203        uint32_t mask;
 204        uint8_t irq_index;
 205};
 206
 207struct dpni_cmd_get_irq_mask {
 208        uint32_t pad;
 209        uint8_t irq_index;
 210};
 211
 212struct dpni_rsp_get_irq_mask {
 213        uint32_t mask;
 214};
 215
 216struct dpni_cmd_get_irq_status {
 217        uint32_t status;
 218        uint8_t irq_index;
 219};
 220
 221struct dpni_rsp_get_irq_status {
 222        uint32_t status;
 223};
 224
 225struct dpni_cmd_clear_irq_status {
 226        uint32_t status;
 227        uint8_t irq_index;
 228};
 229
 230struct dpni_rsp_get_attr {
 231        /* response word 0 */
 232        uint32_t options;
 233        uint8_t num_queues;
 234        uint8_t num_rx_tcs;
 235        uint8_t mac_filter_entries;
 236        uint8_t num_tx_tcs;
 237        /* response word 1 */
 238        uint8_t vlan_filter_entries;
 239        uint8_t num_channels;
 240        uint8_t qos_entries;
 241        uint8_t pad2;
 242        uint16_t fs_entries;
 243        uint16_t num_opr;
 244        /* response word 2 */
 245        uint8_t qos_key_size;
 246        uint8_t fs_key_size;
 247        uint16_t wriop_version;
 248        uint8_t num_cgs;
 249};
 250
 251#define DPNI_ERROR_ACTION_SHIFT         0
 252#define DPNI_ERROR_ACTION_SIZE          4
 253#define DPNI_FRAME_ANN_SHIFT            4
 254#define DPNI_FRAME_ANN_SIZE             1
 255
 256struct dpni_cmd_set_errors_behavior {
 257        uint32_t errors;
 258        /* from least significant bit: error_action:4, set_frame_annotation:1 */
 259        uint8_t flags;
 260};
 261
 262/* There are 3 separate commands for configuring Rx, Tx and Tx confirmation
 263 * buffer layouts, but they all share the same parameters.
 264 * If one of the functions changes, below structure needs to be split.
 265 */
 266
 267#define DPNI_PASS_TS_SHIFT              0
 268#define DPNI_PASS_TS_SIZE               1
 269#define DPNI_PASS_PR_SHIFT              1
 270#define DPNI_PASS_PR_SIZE               1
 271#define DPNI_PASS_FS_SHIFT              2
 272#define DPNI_PASS_FS_SIZE               1
 273#define DPNI_PASS_SWO_SHIFT             3
 274#define DPNI_PASS_SWO_SIZE              1
 275
 276struct dpni_cmd_get_buffer_layout {
 277        uint8_t qtype;
 278};
 279
 280struct dpni_rsp_get_buffer_layout {
 281        /* response word 0 */
 282        uint8_t pad0[6];
 283        /* from LSB: pass_timestamp:1, parser_result:1, frame_status:1 */
 284        uint8_t flags;
 285        uint8_t pad1;
 286        /* response word 1 */
 287        uint16_t private_data_size;
 288        uint16_t data_align;
 289        uint16_t head_room;
 290        uint16_t tail_room;
 291};
 292
 293struct dpni_cmd_set_buffer_layout {
 294        /* cmd word 0 */
 295        uint8_t qtype;
 296        uint8_t pad0[3];
 297        uint16_t options;
 298        /* from LSB: pass_timestamp:1, parser_result:1, frame_status:1 */
 299        uint8_t flags;
 300        uint8_t pad1;
 301        /* cmd word 1 */
 302        uint16_t private_data_size;
 303        uint16_t data_align;
 304        uint16_t head_room;
 305        uint16_t tail_room;
 306};
 307
 308struct dpni_cmd_set_offload {
 309        uint8_t pad[3];
 310        uint8_t dpni_offload;
 311        uint32_t config;
 312};
 313
 314struct dpni_cmd_get_offload {
 315        uint8_t pad[3];
 316        uint8_t dpni_offload;
 317};
 318
 319struct dpni_rsp_get_offload {
 320        uint32_t pad;
 321        uint32_t config;
 322};
 323
 324struct dpni_cmd_get_qdid {
 325        uint8_t qtype;
 326};
 327
 328struct dpni_rsp_get_qdid {
 329        uint16_t qdid;
 330};
 331
 332struct dpni_rsp_get_sp_info {
 333        uint16_t spids[2];
 334};
 335
 336struct dpni_rsp_get_tx_data_offset {
 337        uint16_t data_offset;
 338};
 339
 340struct dpni_cmd_get_statistics {
 341        uint8_t page_number;
 342        uint16_t param;
 343};
 344
 345struct dpni_rsp_get_statistics {
 346        uint64_t counter[7];
 347};
 348
 349struct dpni_cmd_set_link_cfg {
 350        uint64_t pad0;
 351        uint32_t rate;
 352        uint32_t pad1;
 353        uint64_t options;
 354        uint64_t advertising;
 355};
 356
 357#define DPNI_LINK_STATE_SHIFT           0
 358#define DPNI_LINK_STATE_SIZE            1
 359#define DPNI_STATE_VALID_SHIFT          1
 360#define DPNI_STATE_VALID_SIZE           1
 361
 362struct dpni_rsp_get_link_state {
 363        uint32_t pad0;
 364        /* from LSB: up:1 */
 365        uint8_t flags;
 366        uint8_t pad1[3];
 367        uint32_t rate;
 368        uint32_t pad2;
 369        uint64_t options;
 370        uint64_t supported;
 371        uint64_t advertising;
 372};
 373
 374#define DPNI_COUPLED_SHIFT      0
 375#define DPNI_COUPLED_SIZE       1
 376#define DPNI_LNI_SHAPER_SHIFT   1
 377#define DPNI_LNI_SHAPER_SIZE    1
 378
 379struct dpni_cmd_set_tx_shaping {
 380        uint16_t tx_cr_max_burst_size;
 381        uint16_t tx_er_max_burst_size;
 382        uint32_t pad;
 383        uint32_t tx_cr_rate_limit;
 384        uint32_t tx_er_rate_limit;
 385        /* from LSB: coupled:1, lni_shaper: 1*/
 386        uint8_t options;
 387        uint8_t channel_id;
 388        uint16_t oal;
 389};
 390
 391struct dpni_cmd_set_max_frame_length {
 392        uint16_t max_frame_length;
 393};
 394
 395struct dpni_rsp_get_max_frame_length {
 396        uint16_t max_frame_length;
 397};
 398
 399struct dpni_cmd_set_multicast_promisc {
 400        uint8_t enable;
 401};
 402
 403struct dpni_rsp_get_multicast_promisc {
 404        uint8_t enabled;
 405};
 406
 407struct dpni_cmd_set_unicast_promisc {
 408        uint8_t enable;
 409};
 410
 411struct dpni_rsp_get_unicast_promisc {
 412        uint8_t enabled;
 413};
 414
 415struct dpni_cmd_set_primary_mac_addr {
 416        uint16_t pad;
 417        uint8_t mac_addr[6];
 418};
 419
 420struct dpni_rsp_get_primary_mac_addr {
 421        uint16_t pad;
 422        uint8_t mac_addr[6];
 423};
 424
 425struct dpni_rsp_get_port_mac_addr {
 426        uint16_t pad;
 427        uint8_t mac_addr[6];
 428};
 429
 430struct dpni_cmd_add_mac_addr {
 431        uint8_t flags;
 432        uint8_t pad;
 433        uint8_t mac_addr[6];
 434        uint8_t tc_id;
 435        uint8_t fq_id;
 436};
 437
 438struct dpni_cmd_remove_mac_addr {
 439        uint16_t pad;
 440        uint8_t mac_addr[6];
 441};
 442
 443#define DPNI_UNICAST_FILTERS_SHIFT      0
 444#define DPNI_UNICAST_FILTERS_SIZE       1
 445#define DPNI_MULTICAST_FILTERS_SHIFT    1
 446#define DPNI_MULTICAST_FILTERS_SIZE     1
 447
 448struct dpni_cmd_clear_mac_filters {
 449        /* from LSB: unicast:1, multicast:1 */
 450        uint8_t flags;
 451};
 452
 453struct dpni_cmd_enable_vlan_filter {
 454        /* only the LSB */
 455        uint8_t en;
 456};
 457
 458struct dpni_cmd_vlan_id {
 459        uint8_t flags;
 460        uint8_t tc_id;
 461        uint8_t flow_id;
 462        uint8_t pad;
 463        uint16_t vlan_id;
 464};
 465
 466#define DPNI_SEPARATE_GRP_SHIFT 0
 467#define DPNI_SEPARATE_GRP_SIZE  1
 468#define DPNI_MODE_1_SHIFT               0
 469#define DPNI_MODE_1_SIZE                4
 470#define DPNI_MODE_2_SHIFT               4
 471#define DPNI_MODE_2_SIZE                4
 472
 473struct dpni_cmd_set_tx_priorities {
 474        uint16_t flags;
 475        uint8_t prio_group_A;
 476        uint8_t prio_group_B;
 477        uint8_t channel_idx;
 478        uint8_t pad0[3];
 479        uint8_t modes[4];
 480        uint32_t pad1;
 481        uint64_t pad2;
 482        uint16_t delta_bandwidth[8];
 483};
 484
 485#define DPNI_DIST_MODE_SHIFT            0
 486#define DPNI_DIST_MODE_SIZE             4
 487#define DPNI_MISS_ACTION_SHIFT          4
 488#define DPNI_MISS_ACTION_SIZE           4
 489#define DPNI_KEEP_HASH_KEY_SHIFT        7
 490#define DPNI_KEEP_HASH_KEY_SIZE         1
 491#define DPNI_KEEP_ENTRIES_SHIFT         6
 492#define DPNI_KEEP_ENTRIES_SIZE          1
 493
 494struct dpni_cmd_set_rx_tc_dist {
 495        uint16_t dist_size;
 496        uint8_t tc_id;
 497        /* from LSB: dist_mode:4, miss_action:4 */
 498        uint8_t flags;
 499        uint8_t pad0;
 500        /* only the LSB */
 501        uint8_t keep_hash_key;
 502        uint16_t default_flow_id;
 503        uint64_t pad1[5];
 504        uint64_t key_cfg_iova;
 505};
 506
 507struct dpni_cmd_get_queue {
 508        uint8_t qtype;
 509        uint8_t tc;
 510        uint8_t index;
 511        uint8_t channel_id;
 512};
 513
 514#define DPNI_DEST_TYPE_SHIFT            0
 515#define DPNI_DEST_TYPE_SIZE             4
 516#define DPNI_CGID_VALID_SHIFT           5
 517#define DPNI_CGID_VALID_SIZE            1
 518#define DPNI_STASH_CTRL_SHIFT           6
 519#define DPNI_STASH_CTRL_SIZE            1
 520#define DPNI_HOLD_ACTIVE_SHIFT          7
 521#define DPNI_HOLD_ACTIVE_SIZE           1
 522
 523struct dpni_rsp_get_queue {
 524        /* response word 0 */
 525        uint64_t pad0;
 526        /* response word 1 */
 527        uint32_t dest_id;
 528        uint16_t pad1;
 529        uint8_t dest_prio;
 530        /* From LSB:
 531         * dest_type:4, pad:1, cgid_valid:1, flc_stash_ctrl:1, hold_active:1
 532         */
 533        uint8_t flags;
 534        /* response word 2 */
 535        uint64_t flc;
 536        /* response word 3 */
 537        uint64_t user_context;
 538        /* response word 4 */
 539        uint32_t fqid;
 540        uint16_t qdbin;
 541        uint16_t pad2;
 542        /* response word 5*/
 543        uint8_t cgid;
 544};
 545
 546struct dpni_cmd_set_queue {
 547        /* cmd word 0 */
 548        uint8_t qtype;
 549        uint8_t tc;
 550        uint8_t index;
 551        uint8_t options;
 552        uint32_t pad0;
 553        /* cmd word 1 */
 554        uint32_t dest_id;
 555        uint16_t pad1;
 556        uint8_t dest_prio;
 557        uint8_t flags;
 558        /* cmd word 2 */
 559        uint64_t flc;
 560        /* cmd word 3 */
 561        uint64_t user_context;
 562        /* cmd word 4 */
 563        uint8_t cgid;
 564        uint8_t channel_id;
 565};
 566
 567#define DPNI_DISCARD_ON_MISS_SHIFT      0
 568#define DPNI_DISCARD_ON_MISS_SIZE       1
 569#define DPNI_KEEP_QOS_ENTRIES_SHIFT             1
 570#define DPNI_KEEP_QOS_ENTRIES_SIZE              1
 571
 572struct dpni_cmd_set_qos_table {
 573        uint32_t pad;
 574        uint8_t default_tc;
 575        /* only the LSB */
 576        uint8_t discard_on_miss;
 577        uint16_t pad1[21];
 578        uint64_t key_cfg_iova;
 579};
 580
 581#define DPNI_QOS_OPT_SET_TC_ONLY 0x0
 582#define DPNI_QOS_OPT_SET_FLOW_ID 0x1
 583
 584struct dpni_cmd_add_qos_entry {
 585        uint8_t flags;
 586        uint8_t flow_id;
 587        uint8_t tc_id;
 588        uint8_t key_size;
 589        uint16_t index;
 590        uint16_t pad2;
 591        uint64_t key_iova;
 592        uint64_t mask_iova;
 593};
 594
 595struct dpni_cmd_remove_qos_entry {
 596        uint8_t pad1[3];
 597        uint8_t key_size;
 598        uint32_t pad2;
 599        uint64_t key_iova;
 600        uint64_t mask_iova;
 601};
 602
 603struct dpni_cmd_add_fs_entry {
 604        uint16_t options;
 605        uint8_t tc_id;
 606        uint8_t key_size;
 607        uint16_t index;
 608        uint16_t flow_id;
 609        uint64_t key_iova;
 610        uint64_t mask_iova;
 611        uint64_t flc;
 612        uint16_t redir_token;
 613};
 614
 615struct dpni_cmd_remove_fs_entry {
 616        uint16_t pad1;
 617        uint8_t tc_id;
 618        uint8_t key_size;
 619        uint32_t pad2;
 620        uint64_t key_iova;
 621        uint64_t mask_iova;
 622};
 623
 624struct dpni_cmd_clear_fs_entries {
 625        uint16_t pad;
 626        uint8_t tc_id;
 627};
 628
 629#define DPNI_MODE_SHIFT         0
 630#define DPNI_MODE_SIZE          4
 631#define DPNI_COLOR_SHIFT        4
 632#define DPNI_COLOR_SIZE         4
 633#define DPNI_UNITS_SHIFT        0
 634#define DPNI_UNITS_SIZE         4
 635
 636struct dpni_cmd_set_rx_tc_policing {
 637        /* from LSB: mode:4 color:4 */
 638        uint8_t mode_color;
 639        /* from LSB: units: 4 */
 640        uint8_t units;
 641        uint8_t tc_id;
 642        uint8_t pad;
 643        uint32_t options;
 644        uint32_t cir;
 645        uint32_t cbs;
 646        uint32_t eir;
 647        uint32_t ebs;
 648};
 649
 650struct dpni_cmd_get_rx_tc_policing {
 651        uint16_t pad;
 652        uint8_t tc_id;
 653};
 654
 655struct dpni_rsp_get_rx_tc_policing {
 656        /* from LSB: mode:4 color:4 */
 657        uint8_t mode_color;
 658        /* from LSB: units: 4 */
 659        uint8_t units;
 660        uint16_t pad;
 661        uint32_t options;
 662        uint32_t cir;
 663        uint32_t cbs;
 664        uint32_t eir;
 665        uint32_t ebs;
 666};
 667
 668#define DPNI_DROP_ENABLE_SHIFT  0
 669#define DPNI_DROP_ENABLE_SIZE   1
 670#define DPNI_DROP_UNITS_SHIFT   2
 671#define DPNI_DROP_UNITS_SIZE    2
 672
 673struct dpni_early_drop {
 674        /* from LSB: enable:1 units:2 */
 675        uint8_t flags;
 676        uint8_t pad0[3];
 677        uint32_t pad1;
 678        uint8_t green_drop_probability;
 679        uint8_t pad2[7];
 680        uint64_t green_max_threshold;
 681        uint64_t green_min_threshold;
 682        uint64_t pad3;
 683        uint8_t yellow_drop_probability;
 684        uint8_t pad4[7];
 685        uint64_t yellow_max_threshold;
 686        uint64_t yellow_min_threshold;
 687        uint64_t pad5;
 688        uint8_t red_drop_probability;
 689        uint8_t pad6[7];
 690        uint64_t red_max_threshold;
 691        uint64_t red_min_threshold;
 692};
 693
 694struct dpni_cmd_early_drop {
 695        uint8_t qtype;
 696        uint8_t tc;
 697        uint8_t channel_id;
 698        uint8_t pad[5];
 699        uint64_t early_drop_iova;
 700};
 701
 702struct dpni_rsp_get_api_version {
 703        uint16_t major;
 704        uint16_t minor;
 705};
 706
 707struct dpni_cmd_get_taildrop {
 708        uint8_t congestion_point;
 709        uint8_t qtype;
 710        uint8_t tc;
 711        uint8_t index;
 712};
 713
 714struct dpni_rsp_get_taildrop {
 715        /* cmd word 0 */
 716        uint64_t pad0;
 717        /* cmd word 1 */
 718        /* from LSB: enable:1 oal_lo:7 */
 719        uint8_t enable_oal_lo;
 720        /* from LSB: oal_hi:5 */
 721        uint8_t oal_hi;
 722        uint8_t units;
 723        uint8_t pad2;
 724        uint32_t threshold;
 725};
 726
 727#define DPNI_OAL_LO_SHIFT       1
 728#define DPNI_OAL_LO_SIZE        7
 729#define DPNI_OAL_HI_SHIFT       0
 730#define DPNI_OAL_HI_SIZE        5
 731
 732struct dpni_cmd_set_taildrop {
 733        /* cmd word 0 */
 734        uint8_t congestion_point;
 735        uint8_t qtype;
 736        uint8_t tc;
 737        uint8_t index;
 738        uint8_t channel_id;
 739        uint8_t pad0[3];
 740        /* cmd word 1 */
 741        /* from LSB: enable:1 oal_lo:7 */
 742        uint8_t enable_oal_lo;
 743        /* from LSB: oal_hi:5 */
 744        uint8_t oal_hi;
 745        uint8_t units;
 746        uint8_t pad2;
 747        uint32_t threshold;
 748};
 749
 750struct dpni_tx_confirmation_mode {
 751        uint32_t pad;
 752        uint8_t confirmation_mode;
 753};
 754
 755#define DPNI_DEST_TYPE_SHIFT            0
 756#define DPNI_DEST_TYPE_SIZE             4
 757#define DPNI_CONG_UNITS_SHIFT           4
 758#define DPNI_CONG_UNITS_SIZE            2
 759
 760struct dpni_cmd_set_congestion_notification {
 761        uint8_t qtype;
 762        uint8_t tc;
 763        uint8_t channel_id;
 764        uint8_t congestion_point;
 765        uint8_t cgid;
 766        uint8_t pad2[3];
 767        uint32_t dest_id;
 768        uint16_t notification_mode;
 769        uint8_t dest_priority;
 770        /* from LSB: dest_type: 4 units:2 */
 771        uint8_t type_units;
 772        uint64_t message_iova;
 773        uint64_t message_ctx;
 774        uint32_t threshold_entry;
 775        uint32_t threshold_exit;
 776};
 777
 778struct dpni_cmd_get_congestion_notification {
 779        uint8_t qtype;
 780        uint8_t tc;
 781        uint8_t channel_id;
 782        uint8_t congestion_point;
 783        uint8_t cgid;
 784};
 785
 786struct dpni_rsp_get_congestion_notification {
 787        uint64_t pad;
 788        uint32_t dest_id;
 789        uint16_t notification_mode;
 790        uint8_t dest_priority;
 791        /* from LSB: dest_type: 4 units:2 */
 792        uint8_t type_units;
 793        uint64_t message_iova;
 794        uint64_t message_ctx;
 795        uint32_t threshold_entry;
 796        uint32_t threshold_exit;
 797};
 798
 799struct dpni_cmd_set_opr {
 800        uint8_t opr_id;
 801        uint8_t tc_id;
 802        uint8_t index;
 803        uint8_t options;
 804        uint8_t pad1[7];
 805        uint8_t oloe;
 806        uint8_t oeane;
 807        uint8_t olws;
 808        uint8_t oa;
 809        uint8_t oprrws;
 810};
 811
 812struct dpni_cmd_get_opr {
 813        uint8_t flags;
 814        uint8_t tc_id;
 815        uint8_t index;
 816        uint8_t opr_id;
 817};
 818
 819#define DPNI_RIP_SHIFT  0
 820#define DPNI_RIP_SIZE           1
 821#define DPNI_OPR_ENABLE_SHIFT   1
 822#define DPNI_OPR_ENABLE_SIZE    1
 823#define DPNI_TSEQ_NLIS_SHIFT    0
 824#define DPNI_TSEQ_NLIS_SIZE     1
 825#define DPNI_HSEQ_NLIS_SHIFT    0
 826#define DPNI_HSEQ_NLIS_SIZE     1
 827
 828struct dpni_rsp_get_opr {
 829        uint64_t pad0;
 830        /* from LSB: rip:1 enable:1 */
 831        uint8_t flags;
 832        uint16_t pad1;
 833        uint8_t oloe;
 834        uint8_t oeane;
 835        uint8_t olws;
 836        uint8_t oa;
 837        uint8_t oprrws;
 838        uint16_t nesn;
 839        uint16_t pad8;
 840        uint16_t ndsn;
 841        uint16_t pad2;
 842        uint16_t ea_tseq;
 843        /* only the LSB */
 844        uint8_t tseq_nlis;
 845        uint8_t pad3;
 846        uint16_t ea_hseq;
 847        /* only the LSB */
 848        uint8_t hseq_nlis;
 849        uint8_t pad4;
 850        uint16_t ea_hptr;
 851        uint16_t pad5;
 852        uint16_t ea_tptr;
 853        uint16_t pad6;
 854        uint16_t opr_vid;
 855        uint16_t pad7;
 856        uint16_t opr_id;
 857};
 858
 859struct dpni_load_sw_sequence {
 860        uint8_t dest;
 861        uint8_t pad0[7];
 862        uint16_t ss_offset;
 863        uint16_t pad1;
 864        uint16_t ss_size;
 865        uint16_t pad2;
 866        uint64_t ss_iova;
 867};
 868
 869struct dpni_enable_sw_sequence {
 870        uint8_t dest;
 871        uint8_t pad0[7];
 872        uint16_t ss_offset;
 873        uint16_t hxs;
 874        uint8_t set_start;
 875        uint8_t pad1[3];
 876        uint8_t param_offset;
 877        uint8_t pad2[3];
 878        uint8_t param_size;
 879        uint8_t pad3[3];
 880        uint64_t param_iova;
 881};
 882
 883struct dpni_get_sw_sequence_layout {
 884        uint8_t src;
 885        uint8_t pad0[7];
 886        uint64_t layout_iova;
 887};
 888
 889struct dpni_sw_sequence_layout_entry {
 890        uint16_t ss_offset;
 891        uint16_t ss_size;
 892        uint8_t param_offset;
 893        uint8_t param_size;
 894        uint16_t pad;
 895};
 896
 897#define DPNI_PTP_ENABLE_SHIFT                   0
 898#define DPNI_PTP_ENABLE_SIZE                    1
 899#define DPNI_PTP_CH_UPDATE_SHIFT                1
 900#define DPNI_PTP_CH_UPDATE_SIZE                 1
 901struct dpni_cmd_single_step_cfg {
 902        uint16_t        flags;
 903        uint16_t        offset;
 904        uint32_t        peer_delay;
 905};
 906
 907struct dpni_rsp_single_step_cfg {
 908        uint16_t        flags;
 909        uint16_t        offset;
 910        uint32_t        peer_delay;
 911        uint32_t        ptp_onestep_reg_base;
 912        uint32_t        pad0;
 913};
 914
 915#define DPNI_PORT_LOOPBACK_EN_SHIFT     0
 916#define DPNI_PORT_LOOPBACK_EN_SIZE      1
 917
 918struct dpni_cmd_set_port_cfg {
 919        uint32_t        flags;
 920        uint32_t        bit_params;
 921};
 922
 923struct dpni_rsp_get_port_cfg {
 924        uint32_t        flags;
 925        uint32_t        bit_params;
 926};
 927
 928#define DPNI_RX_FS_DIST_ENABLE_SHIFT    0
 929#define DPNI_RX_FS_DIST_ENABLE_SIZE             1
 930struct dpni_cmd_set_rx_fs_dist {
 931        uint16_t        dist_size;
 932        uint8_t         enable;
 933        uint8_t         tc;
 934        uint16_t        miss_flow_id;
 935        uint16_t        pad1;
 936        uint64_t        key_cfg_iova;
 937};
 938
 939#define DPNI_RX_HASH_DIST_ENABLE_SHIFT  0
 940#define DPNI_RX_HASH_DIST_ENABLE_SIZE           1
 941struct dpni_cmd_set_rx_hash_dist {
 942        uint16_t        dist_size;
 943        uint8_t         enable;
 944        uint8_t         tc_id;
 945        uint32_t        pad;
 946        uint64_t        key_cfg_iova;
 947};
 948
 949struct dpni_cmd_add_custom_tpid {
 950        uint16_t        pad;
 951        uint16_t        tpid;
 952};
 953
 954struct dpni_cmd_remove_custom_tpid {
 955        uint16_t        pad;
 956        uint16_t        tpid;
 957};
 958
 959struct dpni_rsp_get_custom_tpid {
 960        uint16_t        tpid1;
 961        uint16_t        tpid2;
 962};
 963
 964#pragma pack(pop)
 965#endif /* _FSL_DPNI_CMD_H */
 966