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