162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */ 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * Copyright 2014-2016 Freescale Semiconductor Inc. 462306a36Sopenharmony_ci * Copyright 2017-2021 NXP 562306a36Sopenharmony_ci * 662306a36Sopenharmony_ci */ 762306a36Sopenharmony_ci 862306a36Sopenharmony_ci#ifndef __FSL_DPSW_CMD_H 962306a36Sopenharmony_ci#define __FSL_DPSW_CMD_H 1062306a36Sopenharmony_ci 1162306a36Sopenharmony_ci#include "dpsw.h" 1262306a36Sopenharmony_ci 1362306a36Sopenharmony_ci/* DPSW Version */ 1462306a36Sopenharmony_ci#define DPSW_VER_MAJOR 8 1562306a36Sopenharmony_ci#define DPSW_VER_MINOR 9 1662306a36Sopenharmony_ci 1762306a36Sopenharmony_ci#define DPSW_CMD_BASE_VERSION 1 1862306a36Sopenharmony_ci#define DPSW_CMD_VERSION_2 2 1962306a36Sopenharmony_ci#define DPSW_CMD_ID_OFFSET 4 2062306a36Sopenharmony_ci 2162306a36Sopenharmony_ci#define DPSW_CMD_ID(id) (((id) << DPSW_CMD_ID_OFFSET) | DPSW_CMD_BASE_VERSION) 2262306a36Sopenharmony_ci#define DPSW_CMD_V2(id) (((id) << DPSW_CMD_ID_OFFSET) | DPSW_CMD_VERSION_2) 2362306a36Sopenharmony_ci 2462306a36Sopenharmony_ci/* Command IDs */ 2562306a36Sopenharmony_ci#define DPSW_CMDID_CLOSE DPSW_CMD_ID(0x800) 2662306a36Sopenharmony_ci#define DPSW_CMDID_OPEN DPSW_CMD_ID(0x802) 2762306a36Sopenharmony_ci 2862306a36Sopenharmony_ci#define DPSW_CMDID_GET_API_VERSION DPSW_CMD_ID(0xa02) 2962306a36Sopenharmony_ci 3062306a36Sopenharmony_ci#define DPSW_CMDID_ENABLE DPSW_CMD_ID(0x002) 3162306a36Sopenharmony_ci#define DPSW_CMDID_DISABLE DPSW_CMD_ID(0x003) 3262306a36Sopenharmony_ci#define DPSW_CMDID_GET_ATTR DPSW_CMD_V2(0x004) 3362306a36Sopenharmony_ci#define DPSW_CMDID_RESET DPSW_CMD_ID(0x005) 3462306a36Sopenharmony_ci 3562306a36Sopenharmony_ci#define DPSW_CMDID_SET_IRQ_ENABLE DPSW_CMD_ID(0x012) 3662306a36Sopenharmony_ci 3762306a36Sopenharmony_ci#define DPSW_CMDID_SET_IRQ_MASK DPSW_CMD_ID(0x014) 3862306a36Sopenharmony_ci 3962306a36Sopenharmony_ci#define DPSW_CMDID_GET_IRQ_STATUS DPSW_CMD_ID(0x016) 4062306a36Sopenharmony_ci#define DPSW_CMDID_CLEAR_IRQ_STATUS DPSW_CMD_ID(0x017) 4162306a36Sopenharmony_ci 4262306a36Sopenharmony_ci#define DPSW_CMDID_SET_REFLECTION_IF DPSW_CMD_ID(0x022) 4362306a36Sopenharmony_ci 4462306a36Sopenharmony_ci#define DPSW_CMDID_IF_SET_TCI DPSW_CMD_ID(0x030) 4562306a36Sopenharmony_ci#define DPSW_CMDID_IF_SET_STP DPSW_CMD_ID(0x031) 4662306a36Sopenharmony_ci 4762306a36Sopenharmony_ci#define DPSW_CMDID_IF_GET_COUNTER DPSW_CMD_V2(0x034) 4862306a36Sopenharmony_ci 4962306a36Sopenharmony_ci#define DPSW_CMDID_IF_ADD_REFLECTION DPSW_CMD_ID(0x037) 5062306a36Sopenharmony_ci#define DPSW_CMDID_IF_REMOVE_REFLECTION DPSW_CMD_ID(0x038) 5162306a36Sopenharmony_ci 5262306a36Sopenharmony_ci#define DPSW_CMDID_IF_ENABLE DPSW_CMD_ID(0x03D) 5362306a36Sopenharmony_ci#define DPSW_CMDID_IF_DISABLE DPSW_CMD_ID(0x03E) 5462306a36Sopenharmony_ci 5562306a36Sopenharmony_ci#define DPSW_CMDID_IF_GET_ATTR DPSW_CMD_ID(0x042) 5662306a36Sopenharmony_ci 5762306a36Sopenharmony_ci#define DPSW_CMDID_IF_SET_MAX_FRAME_LENGTH DPSW_CMD_ID(0x044) 5862306a36Sopenharmony_ci 5962306a36Sopenharmony_ci#define DPSW_CMDID_IF_GET_LINK_STATE DPSW_CMD_ID(0x046) 6062306a36Sopenharmony_ci 6162306a36Sopenharmony_ci#define DPSW_CMDID_IF_GET_TCI DPSW_CMD_ID(0x04A) 6262306a36Sopenharmony_ci 6362306a36Sopenharmony_ci#define DPSW_CMDID_IF_SET_LINK_CFG DPSW_CMD_ID(0x04C) 6462306a36Sopenharmony_ci 6562306a36Sopenharmony_ci#define DPSW_CMDID_VLAN_ADD DPSW_CMD_ID(0x060) 6662306a36Sopenharmony_ci#define DPSW_CMDID_VLAN_ADD_IF DPSW_CMD_V2(0x061) 6762306a36Sopenharmony_ci#define DPSW_CMDID_VLAN_ADD_IF_UNTAGGED DPSW_CMD_ID(0x062) 6862306a36Sopenharmony_ci 6962306a36Sopenharmony_ci#define DPSW_CMDID_VLAN_REMOVE_IF DPSW_CMD_ID(0x064) 7062306a36Sopenharmony_ci#define DPSW_CMDID_VLAN_REMOVE_IF_UNTAGGED DPSW_CMD_ID(0x065) 7162306a36Sopenharmony_ci#define DPSW_CMDID_VLAN_REMOVE_IF_FLOODING DPSW_CMD_ID(0x066) 7262306a36Sopenharmony_ci#define DPSW_CMDID_VLAN_REMOVE DPSW_CMD_ID(0x067) 7362306a36Sopenharmony_ci 7462306a36Sopenharmony_ci#define DPSW_CMDID_FDB_ADD DPSW_CMD_ID(0x082) 7562306a36Sopenharmony_ci#define DPSW_CMDID_FDB_REMOVE DPSW_CMD_ID(0x083) 7662306a36Sopenharmony_ci#define DPSW_CMDID_FDB_ADD_UNICAST DPSW_CMD_ID(0x084) 7762306a36Sopenharmony_ci#define DPSW_CMDID_FDB_REMOVE_UNICAST DPSW_CMD_ID(0x085) 7862306a36Sopenharmony_ci#define DPSW_CMDID_FDB_ADD_MULTICAST DPSW_CMD_ID(0x086) 7962306a36Sopenharmony_ci#define DPSW_CMDID_FDB_REMOVE_MULTICAST DPSW_CMD_ID(0x087) 8062306a36Sopenharmony_ci#define DPSW_CMDID_FDB_DUMP DPSW_CMD_ID(0x08A) 8162306a36Sopenharmony_ci 8262306a36Sopenharmony_ci#define DPSW_CMDID_ACL_ADD DPSW_CMD_ID(0x090) 8362306a36Sopenharmony_ci#define DPSW_CMDID_ACL_REMOVE DPSW_CMD_ID(0x091) 8462306a36Sopenharmony_ci#define DPSW_CMDID_ACL_ADD_ENTRY DPSW_CMD_ID(0x092) 8562306a36Sopenharmony_ci#define DPSW_CMDID_ACL_REMOVE_ENTRY DPSW_CMD_ID(0x093) 8662306a36Sopenharmony_ci#define DPSW_CMDID_ACL_ADD_IF DPSW_CMD_ID(0x094) 8762306a36Sopenharmony_ci#define DPSW_CMDID_ACL_REMOVE_IF DPSW_CMD_ID(0x095) 8862306a36Sopenharmony_ci 8962306a36Sopenharmony_ci#define DPSW_CMDID_IF_GET_PORT_MAC_ADDR DPSW_CMD_ID(0x0A7) 9062306a36Sopenharmony_ci 9162306a36Sopenharmony_ci#define DPSW_CMDID_CTRL_IF_GET_ATTR DPSW_CMD_ID(0x0A0) 9262306a36Sopenharmony_ci#define DPSW_CMDID_CTRL_IF_SET_POOLS DPSW_CMD_ID(0x0A1) 9362306a36Sopenharmony_ci#define DPSW_CMDID_CTRL_IF_ENABLE DPSW_CMD_ID(0x0A2) 9462306a36Sopenharmony_ci#define DPSW_CMDID_CTRL_IF_DISABLE DPSW_CMD_ID(0x0A3) 9562306a36Sopenharmony_ci#define DPSW_CMDID_CTRL_IF_SET_QUEUE DPSW_CMD_ID(0x0A6) 9662306a36Sopenharmony_ci 9762306a36Sopenharmony_ci#define DPSW_CMDID_SET_EGRESS_FLOOD DPSW_CMD_ID(0x0AC) 9862306a36Sopenharmony_ci#define DPSW_CMDID_IF_SET_LEARNING_MODE DPSW_CMD_ID(0x0AD) 9962306a36Sopenharmony_ci 10062306a36Sopenharmony_ci/* Macros for accessing command fields smaller than 1byte */ 10162306a36Sopenharmony_ci#define DPSW_MASK(field) \ 10262306a36Sopenharmony_ci GENMASK(DPSW_##field##_SHIFT + DPSW_##field##_SIZE - 1, \ 10362306a36Sopenharmony_ci DPSW_##field##_SHIFT) 10462306a36Sopenharmony_ci#define dpsw_set_field(var, field, val) \ 10562306a36Sopenharmony_ci ((var) |= (((val) << DPSW_##field##_SHIFT) & DPSW_MASK(field))) 10662306a36Sopenharmony_ci#define dpsw_get_field(var, field) \ 10762306a36Sopenharmony_ci (((var) & DPSW_MASK(field)) >> DPSW_##field##_SHIFT) 10862306a36Sopenharmony_ci#define dpsw_get_bit(var, bit) \ 10962306a36Sopenharmony_ci (((var) >> (bit)) & GENMASK(0, 0)) 11062306a36Sopenharmony_ci 11162306a36Sopenharmony_ci#pragma pack(push, 1) 11262306a36Sopenharmony_cistruct dpsw_cmd_open { 11362306a36Sopenharmony_ci __le32 dpsw_id; 11462306a36Sopenharmony_ci}; 11562306a36Sopenharmony_ci 11662306a36Sopenharmony_ci#define DPSW_COMPONENT_TYPE_SHIFT 0 11762306a36Sopenharmony_ci#define DPSW_COMPONENT_TYPE_SIZE 4 11862306a36Sopenharmony_ci 11962306a36Sopenharmony_cistruct dpsw_cmd_create { 12062306a36Sopenharmony_ci /* cmd word 0 */ 12162306a36Sopenharmony_ci __le16 num_ifs; 12262306a36Sopenharmony_ci u8 max_fdbs; 12362306a36Sopenharmony_ci u8 max_meters_per_if; 12462306a36Sopenharmony_ci /* from LSB: only the first 4 bits */ 12562306a36Sopenharmony_ci u8 component_type; 12662306a36Sopenharmony_ci u8 pad[3]; 12762306a36Sopenharmony_ci /* cmd word 1 */ 12862306a36Sopenharmony_ci __le16 max_vlans; 12962306a36Sopenharmony_ci __le16 max_fdb_entries; 13062306a36Sopenharmony_ci __le16 fdb_aging_time; 13162306a36Sopenharmony_ci __le16 max_fdb_mc_groups; 13262306a36Sopenharmony_ci /* cmd word 2 */ 13362306a36Sopenharmony_ci __le64 options; 13462306a36Sopenharmony_ci}; 13562306a36Sopenharmony_ci 13662306a36Sopenharmony_cistruct dpsw_cmd_destroy { 13762306a36Sopenharmony_ci __le32 dpsw_id; 13862306a36Sopenharmony_ci}; 13962306a36Sopenharmony_ci 14062306a36Sopenharmony_ci#define DPSW_ENABLE_SHIFT 0 14162306a36Sopenharmony_ci#define DPSW_ENABLE_SIZE 1 14262306a36Sopenharmony_ci 14362306a36Sopenharmony_cistruct dpsw_rsp_is_enabled { 14462306a36Sopenharmony_ci /* from LSB: enable:1 */ 14562306a36Sopenharmony_ci u8 enabled; 14662306a36Sopenharmony_ci}; 14762306a36Sopenharmony_ci 14862306a36Sopenharmony_cistruct dpsw_cmd_set_irq_enable { 14962306a36Sopenharmony_ci u8 enable_state; 15062306a36Sopenharmony_ci u8 pad[3]; 15162306a36Sopenharmony_ci u8 irq_index; 15262306a36Sopenharmony_ci}; 15362306a36Sopenharmony_ci 15462306a36Sopenharmony_cistruct dpsw_cmd_get_irq_enable { 15562306a36Sopenharmony_ci __le32 pad; 15662306a36Sopenharmony_ci u8 irq_index; 15762306a36Sopenharmony_ci}; 15862306a36Sopenharmony_ci 15962306a36Sopenharmony_cistruct dpsw_rsp_get_irq_enable { 16062306a36Sopenharmony_ci u8 enable_state; 16162306a36Sopenharmony_ci}; 16262306a36Sopenharmony_ci 16362306a36Sopenharmony_cistruct dpsw_cmd_set_irq_mask { 16462306a36Sopenharmony_ci __le32 mask; 16562306a36Sopenharmony_ci u8 irq_index; 16662306a36Sopenharmony_ci}; 16762306a36Sopenharmony_ci 16862306a36Sopenharmony_cistruct dpsw_cmd_get_irq_mask { 16962306a36Sopenharmony_ci __le32 pad; 17062306a36Sopenharmony_ci u8 irq_index; 17162306a36Sopenharmony_ci}; 17262306a36Sopenharmony_ci 17362306a36Sopenharmony_cistruct dpsw_rsp_get_irq_mask { 17462306a36Sopenharmony_ci __le32 mask; 17562306a36Sopenharmony_ci}; 17662306a36Sopenharmony_ci 17762306a36Sopenharmony_cistruct dpsw_cmd_get_irq_status { 17862306a36Sopenharmony_ci __le32 status; 17962306a36Sopenharmony_ci u8 irq_index; 18062306a36Sopenharmony_ci}; 18162306a36Sopenharmony_ci 18262306a36Sopenharmony_cistruct dpsw_rsp_get_irq_status { 18362306a36Sopenharmony_ci __le32 status; 18462306a36Sopenharmony_ci}; 18562306a36Sopenharmony_ci 18662306a36Sopenharmony_cistruct dpsw_cmd_clear_irq_status { 18762306a36Sopenharmony_ci __le32 status; 18862306a36Sopenharmony_ci u8 irq_index; 18962306a36Sopenharmony_ci}; 19062306a36Sopenharmony_ci 19162306a36Sopenharmony_ci#define DPSW_COMPONENT_TYPE_SHIFT 0 19262306a36Sopenharmony_ci#define DPSW_COMPONENT_TYPE_SIZE 4 19362306a36Sopenharmony_ci 19462306a36Sopenharmony_ci#define DPSW_FLOODING_CFG_SHIFT 0 19562306a36Sopenharmony_ci#define DPSW_FLOODING_CFG_SIZE 4 19662306a36Sopenharmony_ci 19762306a36Sopenharmony_ci#define DPSW_BROADCAST_CFG_SHIFT 4 19862306a36Sopenharmony_ci#define DPSW_BROADCAST_CFG_SIZE 4 19962306a36Sopenharmony_ci 20062306a36Sopenharmony_cistruct dpsw_rsp_get_attr { 20162306a36Sopenharmony_ci /* cmd word 0 */ 20262306a36Sopenharmony_ci __le16 num_ifs; 20362306a36Sopenharmony_ci u8 max_fdbs; 20462306a36Sopenharmony_ci u8 num_fdbs; 20562306a36Sopenharmony_ci __le16 max_vlans; 20662306a36Sopenharmony_ci __le16 num_vlans; 20762306a36Sopenharmony_ci /* cmd word 1 */ 20862306a36Sopenharmony_ci __le16 max_fdb_entries; 20962306a36Sopenharmony_ci __le16 fdb_aging_time; 21062306a36Sopenharmony_ci __le32 dpsw_id; 21162306a36Sopenharmony_ci /* cmd word 2 */ 21262306a36Sopenharmony_ci __le16 mem_size; 21362306a36Sopenharmony_ci __le16 max_fdb_mc_groups; 21462306a36Sopenharmony_ci u8 max_meters_per_if; 21562306a36Sopenharmony_ci /* from LSB only the first 4 bits */ 21662306a36Sopenharmony_ci u8 component_type; 21762306a36Sopenharmony_ci /* [0:3] - flooding configuration 21862306a36Sopenharmony_ci * [4:7] - broadcast configuration 21962306a36Sopenharmony_ci */ 22062306a36Sopenharmony_ci u8 repl_cfg; 22162306a36Sopenharmony_ci u8 pad; 22262306a36Sopenharmony_ci /* cmd word 3 */ 22362306a36Sopenharmony_ci __le64 options; 22462306a36Sopenharmony_ci}; 22562306a36Sopenharmony_ci 22662306a36Sopenharmony_ci#define DPSW_VLAN_ID_SHIFT 0 22762306a36Sopenharmony_ci#define DPSW_VLAN_ID_SIZE 12 22862306a36Sopenharmony_ci#define DPSW_DEI_SHIFT 12 22962306a36Sopenharmony_ci#define DPSW_DEI_SIZE 1 23062306a36Sopenharmony_ci#define DPSW_PCP_SHIFT 13 23162306a36Sopenharmony_ci#define DPSW_PCP_SIZE 3 23262306a36Sopenharmony_ci 23362306a36Sopenharmony_cistruct dpsw_cmd_if_set_tci { 23462306a36Sopenharmony_ci __le16 if_id; 23562306a36Sopenharmony_ci /* from LSB: VLAN_ID:12 DEI:1 PCP:3 */ 23662306a36Sopenharmony_ci __le16 conf; 23762306a36Sopenharmony_ci}; 23862306a36Sopenharmony_ci 23962306a36Sopenharmony_cistruct dpsw_cmd_if_get_tci { 24062306a36Sopenharmony_ci __le16 if_id; 24162306a36Sopenharmony_ci}; 24262306a36Sopenharmony_ci 24362306a36Sopenharmony_cistruct dpsw_rsp_if_get_tci { 24462306a36Sopenharmony_ci __le16 pad; 24562306a36Sopenharmony_ci __le16 vlan_id; 24662306a36Sopenharmony_ci u8 dei; 24762306a36Sopenharmony_ci u8 pcp; 24862306a36Sopenharmony_ci}; 24962306a36Sopenharmony_ci 25062306a36Sopenharmony_ci#define DPSW_STATE_SHIFT 0 25162306a36Sopenharmony_ci#define DPSW_STATE_SIZE 4 25262306a36Sopenharmony_ci 25362306a36Sopenharmony_cistruct dpsw_cmd_if_set_stp { 25462306a36Sopenharmony_ci __le16 if_id; 25562306a36Sopenharmony_ci __le16 vlan_id; 25662306a36Sopenharmony_ci /* only the first LSB 4 bits */ 25762306a36Sopenharmony_ci u8 state; 25862306a36Sopenharmony_ci}; 25962306a36Sopenharmony_ci 26062306a36Sopenharmony_ci#define DPSW_COUNTER_TYPE_SHIFT 0 26162306a36Sopenharmony_ci#define DPSW_COUNTER_TYPE_SIZE 5 26262306a36Sopenharmony_ci 26362306a36Sopenharmony_cistruct dpsw_cmd_if_get_counter { 26462306a36Sopenharmony_ci __le16 if_id; 26562306a36Sopenharmony_ci /* from LSB: type:5 */ 26662306a36Sopenharmony_ci u8 type; 26762306a36Sopenharmony_ci}; 26862306a36Sopenharmony_ci 26962306a36Sopenharmony_cistruct dpsw_rsp_if_get_counter { 27062306a36Sopenharmony_ci __le64 pad; 27162306a36Sopenharmony_ci __le64 counter; 27262306a36Sopenharmony_ci}; 27362306a36Sopenharmony_ci 27462306a36Sopenharmony_cistruct dpsw_cmd_if { 27562306a36Sopenharmony_ci __le16 if_id; 27662306a36Sopenharmony_ci}; 27762306a36Sopenharmony_ci 27862306a36Sopenharmony_ci#define DPSW_ADMIT_UNTAGGED_SHIFT 0 27962306a36Sopenharmony_ci#define DPSW_ADMIT_UNTAGGED_SIZE 4 28062306a36Sopenharmony_ci#define DPSW_ENABLED_SHIFT 5 28162306a36Sopenharmony_ci#define DPSW_ENABLED_SIZE 1 28262306a36Sopenharmony_ci#define DPSW_ACCEPT_ALL_VLAN_SHIFT 6 28362306a36Sopenharmony_ci#define DPSW_ACCEPT_ALL_VLAN_SIZE 1 28462306a36Sopenharmony_ci 28562306a36Sopenharmony_cistruct dpsw_rsp_if_get_attr { 28662306a36Sopenharmony_ci /* cmd word 0 */ 28762306a36Sopenharmony_ci /* from LSB: admit_untagged:4 enabled:1 accept_all_vlan:1 */ 28862306a36Sopenharmony_ci u8 conf; 28962306a36Sopenharmony_ci u8 pad1; 29062306a36Sopenharmony_ci u8 num_tcs; 29162306a36Sopenharmony_ci u8 pad2; 29262306a36Sopenharmony_ci __le16 qdid; 29362306a36Sopenharmony_ci /* cmd word 1 */ 29462306a36Sopenharmony_ci __le32 options; 29562306a36Sopenharmony_ci __le32 pad3; 29662306a36Sopenharmony_ci /* cmd word 2 */ 29762306a36Sopenharmony_ci __le32 rate; 29862306a36Sopenharmony_ci}; 29962306a36Sopenharmony_ci 30062306a36Sopenharmony_cistruct dpsw_cmd_if_set_max_frame_length { 30162306a36Sopenharmony_ci __le16 if_id; 30262306a36Sopenharmony_ci __le16 frame_length; 30362306a36Sopenharmony_ci}; 30462306a36Sopenharmony_ci 30562306a36Sopenharmony_cistruct dpsw_cmd_if_set_link_cfg { 30662306a36Sopenharmony_ci /* cmd word 0 */ 30762306a36Sopenharmony_ci __le16 if_id; 30862306a36Sopenharmony_ci u8 pad[6]; 30962306a36Sopenharmony_ci /* cmd word 1 */ 31062306a36Sopenharmony_ci __le32 rate; 31162306a36Sopenharmony_ci __le32 pad1; 31262306a36Sopenharmony_ci /* cmd word 2 */ 31362306a36Sopenharmony_ci __le64 options; 31462306a36Sopenharmony_ci}; 31562306a36Sopenharmony_ci 31662306a36Sopenharmony_cistruct dpsw_cmd_if_get_link_state { 31762306a36Sopenharmony_ci __le16 if_id; 31862306a36Sopenharmony_ci}; 31962306a36Sopenharmony_ci 32062306a36Sopenharmony_ci#define DPSW_UP_SHIFT 0 32162306a36Sopenharmony_ci#define DPSW_UP_SIZE 1 32262306a36Sopenharmony_ci 32362306a36Sopenharmony_cistruct dpsw_rsp_if_get_link_state { 32462306a36Sopenharmony_ci /* cmd word 0 */ 32562306a36Sopenharmony_ci __le32 pad0; 32662306a36Sopenharmony_ci u8 up; 32762306a36Sopenharmony_ci u8 pad1[3]; 32862306a36Sopenharmony_ci /* cmd word 1 */ 32962306a36Sopenharmony_ci __le32 rate; 33062306a36Sopenharmony_ci __le32 pad2; 33162306a36Sopenharmony_ci /* cmd word 2 */ 33262306a36Sopenharmony_ci __le64 options; 33362306a36Sopenharmony_ci}; 33462306a36Sopenharmony_ci 33562306a36Sopenharmony_cistruct dpsw_vlan_add { 33662306a36Sopenharmony_ci __le16 fdb_id; 33762306a36Sopenharmony_ci __le16 vlan_id; 33862306a36Sopenharmony_ci}; 33962306a36Sopenharmony_ci 34062306a36Sopenharmony_cistruct dpsw_cmd_vlan_add_if { 34162306a36Sopenharmony_ci /* cmd word 0 */ 34262306a36Sopenharmony_ci __le16 options; 34362306a36Sopenharmony_ci __le16 vlan_id; 34462306a36Sopenharmony_ci __le16 fdb_id; 34562306a36Sopenharmony_ci __le16 pad0; 34662306a36Sopenharmony_ci /* cmd word 1-4 */ 34762306a36Sopenharmony_ci __le64 if_id; 34862306a36Sopenharmony_ci}; 34962306a36Sopenharmony_ci 35062306a36Sopenharmony_cistruct dpsw_cmd_vlan_manage_if { 35162306a36Sopenharmony_ci /* cmd word 0 */ 35262306a36Sopenharmony_ci __le16 pad0; 35362306a36Sopenharmony_ci __le16 vlan_id; 35462306a36Sopenharmony_ci __le32 pad1; 35562306a36Sopenharmony_ci /* cmd word 1-4 */ 35662306a36Sopenharmony_ci __le64 if_id; 35762306a36Sopenharmony_ci}; 35862306a36Sopenharmony_ci 35962306a36Sopenharmony_cistruct dpsw_cmd_vlan_remove { 36062306a36Sopenharmony_ci __le16 pad; 36162306a36Sopenharmony_ci __le16 vlan_id; 36262306a36Sopenharmony_ci}; 36362306a36Sopenharmony_ci 36462306a36Sopenharmony_cistruct dpsw_cmd_fdb_add { 36562306a36Sopenharmony_ci __le32 pad; 36662306a36Sopenharmony_ci __le16 fdb_ageing_time; 36762306a36Sopenharmony_ci __le16 num_fdb_entries; 36862306a36Sopenharmony_ci}; 36962306a36Sopenharmony_ci 37062306a36Sopenharmony_cistruct dpsw_rsp_fdb_add { 37162306a36Sopenharmony_ci __le16 fdb_id; 37262306a36Sopenharmony_ci}; 37362306a36Sopenharmony_ci 37462306a36Sopenharmony_cistruct dpsw_cmd_fdb_remove { 37562306a36Sopenharmony_ci __le16 fdb_id; 37662306a36Sopenharmony_ci}; 37762306a36Sopenharmony_ci 37862306a36Sopenharmony_ci#define DPSW_ENTRY_TYPE_SHIFT 0 37962306a36Sopenharmony_ci#define DPSW_ENTRY_TYPE_SIZE 4 38062306a36Sopenharmony_ci 38162306a36Sopenharmony_cistruct dpsw_cmd_fdb_unicast_op { 38262306a36Sopenharmony_ci /* cmd word 0 */ 38362306a36Sopenharmony_ci __le16 fdb_id; 38462306a36Sopenharmony_ci u8 mac_addr[6]; 38562306a36Sopenharmony_ci /* cmd word 1 */ 38662306a36Sopenharmony_ci __le16 if_egress; 38762306a36Sopenharmony_ci /* only the first 4 bits from LSB */ 38862306a36Sopenharmony_ci u8 type; 38962306a36Sopenharmony_ci}; 39062306a36Sopenharmony_ci 39162306a36Sopenharmony_cistruct dpsw_cmd_fdb_multicast_op { 39262306a36Sopenharmony_ci /* cmd word 0 */ 39362306a36Sopenharmony_ci __le16 fdb_id; 39462306a36Sopenharmony_ci __le16 num_ifs; 39562306a36Sopenharmony_ci /* only the first 4 bits from LSB */ 39662306a36Sopenharmony_ci u8 type; 39762306a36Sopenharmony_ci u8 pad[3]; 39862306a36Sopenharmony_ci /* cmd word 1 */ 39962306a36Sopenharmony_ci u8 mac_addr[6]; 40062306a36Sopenharmony_ci __le16 pad2; 40162306a36Sopenharmony_ci /* cmd word 2-5 */ 40262306a36Sopenharmony_ci __le64 if_id; 40362306a36Sopenharmony_ci}; 40462306a36Sopenharmony_ci 40562306a36Sopenharmony_cistruct dpsw_cmd_fdb_dump { 40662306a36Sopenharmony_ci __le16 fdb_id; 40762306a36Sopenharmony_ci __le16 pad0; 40862306a36Sopenharmony_ci __le32 pad1; 40962306a36Sopenharmony_ci __le64 iova_addr; 41062306a36Sopenharmony_ci __le32 iova_size; 41162306a36Sopenharmony_ci}; 41262306a36Sopenharmony_ci 41362306a36Sopenharmony_cistruct dpsw_rsp_fdb_dump { 41462306a36Sopenharmony_ci __le16 num_entries; 41562306a36Sopenharmony_ci}; 41662306a36Sopenharmony_ci 41762306a36Sopenharmony_cistruct dpsw_rsp_ctrl_if_get_attr { 41862306a36Sopenharmony_ci __le64 pad; 41962306a36Sopenharmony_ci __le32 rx_fqid; 42062306a36Sopenharmony_ci __le32 rx_err_fqid; 42162306a36Sopenharmony_ci __le32 tx_err_conf_fqid; 42262306a36Sopenharmony_ci}; 42362306a36Sopenharmony_ci 42462306a36Sopenharmony_ci#define DPSW_BACKUP_POOL(val, order) (((val) & 0x1) << (order)) 42562306a36Sopenharmony_cistruct dpsw_cmd_ctrl_if_set_pools { 42662306a36Sopenharmony_ci u8 num_dpbp; 42762306a36Sopenharmony_ci u8 backup_pool_mask; 42862306a36Sopenharmony_ci __le16 pad; 42962306a36Sopenharmony_ci __le32 dpbp_id[DPSW_MAX_DPBP]; 43062306a36Sopenharmony_ci __le16 buffer_size[DPSW_MAX_DPBP]; 43162306a36Sopenharmony_ci}; 43262306a36Sopenharmony_ci 43362306a36Sopenharmony_ci#define DPSW_DEST_TYPE_SHIFT 0 43462306a36Sopenharmony_ci#define DPSW_DEST_TYPE_SIZE 4 43562306a36Sopenharmony_ci 43662306a36Sopenharmony_cistruct dpsw_cmd_ctrl_if_set_queue { 43762306a36Sopenharmony_ci __le32 dest_id; 43862306a36Sopenharmony_ci u8 dest_priority; 43962306a36Sopenharmony_ci u8 pad; 44062306a36Sopenharmony_ci /* from LSB: dest_type:4 */ 44162306a36Sopenharmony_ci u8 dest_type; 44262306a36Sopenharmony_ci u8 qtype; 44362306a36Sopenharmony_ci __le64 user_ctx; 44462306a36Sopenharmony_ci __le32 options; 44562306a36Sopenharmony_ci}; 44662306a36Sopenharmony_ci 44762306a36Sopenharmony_cistruct dpsw_rsp_get_api_version { 44862306a36Sopenharmony_ci __le16 version_major; 44962306a36Sopenharmony_ci __le16 version_minor; 45062306a36Sopenharmony_ci}; 45162306a36Sopenharmony_ci 45262306a36Sopenharmony_cistruct dpsw_rsp_if_get_mac_addr { 45362306a36Sopenharmony_ci __le16 pad; 45462306a36Sopenharmony_ci u8 mac_addr[6]; 45562306a36Sopenharmony_ci}; 45662306a36Sopenharmony_ci 45762306a36Sopenharmony_cistruct dpsw_cmd_set_egress_flood { 45862306a36Sopenharmony_ci __le16 fdb_id; 45962306a36Sopenharmony_ci u8 flood_type; 46062306a36Sopenharmony_ci u8 pad[5]; 46162306a36Sopenharmony_ci __le64 if_id; 46262306a36Sopenharmony_ci}; 46362306a36Sopenharmony_ci 46462306a36Sopenharmony_ci#define DPSW_LEARNING_MODE_SHIFT 0 46562306a36Sopenharmony_ci#define DPSW_LEARNING_MODE_SIZE 4 46662306a36Sopenharmony_ci 46762306a36Sopenharmony_cistruct dpsw_cmd_if_set_learning_mode { 46862306a36Sopenharmony_ci __le16 if_id; 46962306a36Sopenharmony_ci /* only the first 4 bits from LSB */ 47062306a36Sopenharmony_ci u8 mode; 47162306a36Sopenharmony_ci}; 47262306a36Sopenharmony_ci 47362306a36Sopenharmony_cistruct dpsw_cmd_acl_add { 47462306a36Sopenharmony_ci __le16 pad; 47562306a36Sopenharmony_ci __le16 max_entries; 47662306a36Sopenharmony_ci}; 47762306a36Sopenharmony_ci 47862306a36Sopenharmony_cistruct dpsw_rsp_acl_add { 47962306a36Sopenharmony_ci __le16 acl_id; 48062306a36Sopenharmony_ci}; 48162306a36Sopenharmony_ci 48262306a36Sopenharmony_cistruct dpsw_cmd_acl_remove { 48362306a36Sopenharmony_ci __le16 acl_id; 48462306a36Sopenharmony_ci}; 48562306a36Sopenharmony_ci 48662306a36Sopenharmony_cistruct dpsw_cmd_acl_if { 48762306a36Sopenharmony_ci __le16 acl_id; 48862306a36Sopenharmony_ci __le16 num_ifs; 48962306a36Sopenharmony_ci __le32 pad; 49062306a36Sopenharmony_ci __le64 if_id; 49162306a36Sopenharmony_ci}; 49262306a36Sopenharmony_ci 49362306a36Sopenharmony_cistruct dpsw_prep_acl_entry { 49462306a36Sopenharmony_ci u8 match_l2_dest_mac[6]; 49562306a36Sopenharmony_ci __le16 match_l2_tpid; 49662306a36Sopenharmony_ci 49762306a36Sopenharmony_ci u8 match_l2_source_mac[6]; 49862306a36Sopenharmony_ci __le16 match_l2_vlan_id; 49962306a36Sopenharmony_ci 50062306a36Sopenharmony_ci __le32 match_l3_dest_ip; 50162306a36Sopenharmony_ci __le32 match_l3_source_ip; 50262306a36Sopenharmony_ci 50362306a36Sopenharmony_ci __le16 match_l4_dest_port; 50462306a36Sopenharmony_ci __le16 match_l4_source_port; 50562306a36Sopenharmony_ci __le16 match_l2_ether_type; 50662306a36Sopenharmony_ci u8 match_l2_pcp_dei; 50762306a36Sopenharmony_ci u8 match_l3_dscp; 50862306a36Sopenharmony_ci 50962306a36Sopenharmony_ci u8 mask_l2_dest_mac[6]; 51062306a36Sopenharmony_ci __le16 mask_l2_tpid; 51162306a36Sopenharmony_ci 51262306a36Sopenharmony_ci u8 mask_l2_source_mac[6]; 51362306a36Sopenharmony_ci __le16 mask_l2_vlan_id; 51462306a36Sopenharmony_ci 51562306a36Sopenharmony_ci __le32 mask_l3_dest_ip; 51662306a36Sopenharmony_ci __le32 mask_l3_source_ip; 51762306a36Sopenharmony_ci 51862306a36Sopenharmony_ci __le16 mask_l4_dest_port; 51962306a36Sopenharmony_ci __le16 mask_l4_source_port; 52062306a36Sopenharmony_ci __le16 mask_l2_ether_type; 52162306a36Sopenharmony_ci u8 mask_l2_pcp_dei; 52262306a36Sopenharmony_ci u8 mask_l3_dscp; 52362306a36Sopenharmony_ci 52462306a36Sopenharmony_ci u8 match_l3_protocol; 52562306a36Sopenharmony_ci u8 mask_l3_protocol; 52662306a36Sopenharmony_ci}; 52762306a36Sopenharmony_ci 52862306a36Sopenharmony_ci#define DPSW_RESULT_ACTION_SHIFT 0 52962306a36Sopenharmony_ci#define DPSW_RESULT_ACTION_SIZE 4 53062306a36Sopenharmony_ci 53162306a36Sopenharmony_cistruct dpsw_cmd_acl_entry { 53262306a36Sopenharmony_ci __le16 acl_id; 53362306a36Sopenharmony_ci __le16 result_if_id; 53462306a36Sopenharmony_ci __le32 precedence; 53562306a36Sopenharmony_ci /* from LSB only the first 4 bits */ 53662306a36Sopenharmony_ci u8 result_action; 53762306a36Sopenharmony_ci u8 pad[7]; 53862306a36Sopenharmony_ci __le64 pad2[4]; 53962306a36Sopenharmony_ci __le64 key_iova; 54062306a36Sopenharmony_ci}; 54162306a36Sopenharmony_ci 54262306a36Sopenharmony_cistruct dpsw_cmd_set_reflection_if { 54362306a36Sopenharmony_ci __le16 if_id; 54462306a36Sopenharmony_ci}; 54562306a36Sopenharmony_ci 54662306a36Sopenharmony_ci#define DPSW_FILTER_SHIFT 0 54762306a36Sopenharmony_ci#define DPSW_FILTER_SIZE 2 54862306a36Sopenharmony_ci 54962306a36Sopenharmony_cistruct dpsw_cmd_if_reflection { 55062306a36Sopenharmony_ci __le16 if_id; 55162306a36Sopenharmony_ci __le16 vlan_id; 55262306a36Sopenharmony_ci /* only 2 bits from the LSB */ 55362306a36Sopenharmony_ci u8 filter; 55462306a36Sopenharmony_ci}; 55562306a36Sopenharmony_ci#pragma pack(pop) 55662306a36Sopenharmony_ci#endif /* __FSL_DPSW_CMD_H */ 557