dpsw-cmd.h (11662B)
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 */