792 lines · c
1/* SPDX-License-Identifier: GPL-2.0 */2/*3 * Copyright 2014-2016 Freescale Semiconductor Inc.4 * Copyright 2017-2021 NXP5 *6 */7 8#ifndef __FSL_DPSW_H9#define __FSL_DPSW_H10 11/* Data Path L2-Switch API12 * Contains API for handling DPSW topology and functionality13 */14 15struct fsl_mc_io;16 17/* DPSW general definitions */18 19#define DPSW_MAX_PRIORITIES 820 21#define DPSW_MAX_IF 6422 23int dpsw_open(struct fsl_mc_io *mc_io, u32 cmd_flags, int dpsw_id, u16 *token);24 25int dpsw_close(struct fsl_mc_io *mc_io, u32 cmd_flags, u16 token);26 27/* DPSW options */28 29/**30 * DPSW_OPT_FLOODING_DIS - Flooding was disabled at device create31 */32#define DPSW_OPT_FLOODING_DIS 0x0000000000000001ULL33/**34 * DPSW_OPT_MULTICAST_DIS - Multicast was disabled at device create35 */36#define DPSW_OPT_MULTICAST_DIS 0x0000000000000004ULL37/**38 * DPSW_OPT_CTRL_IF_DIS - Control interface support is disabled39 */40#define DPSW_OPT_CTRL_IF_DIS 0x0000000000000010ULL41 42/**43 * enum dpsw_component_type - component type of a bridge44 * @DPSW_COMPONENT_TYPE_C_VLAN: A C-VLAN component of an45 * enterprise VLAN bridge or of a Provider Bridge used46 * to process C-tagged frames47 * @DPSW_COMPONENT_TYPE_S_VLAN: An S-VLAN component of a48 * Provider Bridge49 *50 */51enum dpsw_component_type {52 DPSW_COMPONENT_TYPE_C_VLAN = 0,53 DPSW_COMPONENT_TYPE_S_VLAN54};55 56/**57 * enum dpsw_flooding_cfg - flooding configuration requested58 * @DPSW_FLOODING_PER_VLAN: Flooding replicators are allocated per VLAN and59 * interfaces present in each of them can be configured using60 * dpsw_vlan_add_if_flooding()/dpsw_vlan_remove_if_flooding().61 * This is the default configuration.62 *63 * @DPSW_FLOODING_PER_FDB: Flooding replicators are allocated per FDB and64 * interfaces present in each of them can be configured using65 * dpsw_set_egress_flood().66 */67enum dpsw_flooding_cfg {68 DPSW_FLOODING_PER_VLAN = 0,69 DPSW_FLOODING_PER_FDB,70};71 72/**73 * enum dpsw_broadcast_cfg - broadcast configuration requested74 * @DPSW_BROADCAST_PER_OBJECT: There is only one broadcast replicator per DPSW75 * object. This is the default configuration.76 * @DPSW_BROADCAST_PER_FDB: Broadcast replicators are allocated per FDB and77 * interfaces present in each of them can be configured using78 * dpsw_set_egress_flood().79 */80enum dpsw_broadcast_cfg {81 DPSW_BROADCAST_PER_OBJECT = 0,82 DPSW_BROADCAST_PER_FDB,83};84 85int dpsw_enable(struct fsl_mc_io *mc_io, u32 cmd_flags, u16 token);86 87int dpsw_disable(struct fsl_mc_io *mc_io, u32 cmd_flags, u16 token);88 89int dpsw_reset(struct fsl_mc_io *mc_io, u32 cmd_flags, u16 token);90 91/* DPSW IRQ Index and Events */92 93#define DPSW_IRQ_INDEX_IF 0x000094#define DPSW_IRQ_INDEX_L2SW 0x000195 96/**97 * DPSW_IRQ_EVENT_LINK_CHANGED - Indicates that the link state changed98 */99#define DPSW_IRQ_EVENT_LINK_CHANGED 0x0001100 101/**102 * DPSW_IRQ_EVENT_ENDPOINT_CHANGED - Indicates a change in endpoint103 */104#define DPSW_IRQ_EVENT_ENDPOINT_CHANGED 0x0002105 106/**107 * struct dpsw_irq_cfg - IRQ configuration108 * @addr: Address that must be written to signal a message-based interrupt109 * @val: Value to write into irq_addr address110 * @irq_num: A user defined number associated with this IRQ111 */112struct dpsw_irq_cfg {113 u64 addr;114 u32 val;115 int irq_num;116};117 118int dpsw_set_irq_enable(struct fsl_mc_io *mc_io, u32 cmd_flags, u16 token,119 u8 irq_index, u8 en);120 121int dpsw_set_irq_mask(struct fsl_mc_io *mc_io, u32 cmd_flags, u16 token,122 u8 irq_index, u32 mask);123 124int dpsw_get_irq_status(struct fsl_mc_io *mc_io, u32 cmd_flags, u16 token,125 u8 irq_index, u32 *status);126 127int dpsw_clear_irq_status(struct fsl_mc_io *mc_io, u32 cmd_flags, u16 token,128 u8 irq_index, u32 status);129 130/**131 * struct dpsw_attr - Structure representing DPSW attributes132 * @id: DPSW object ID133 * @options: Enable/Disable DPSW features134 * @max_vlans: Maximum Number of VLANs135 * @max_meters_per_if: Number of meters per interface136 * @max_fdbs: Maximum Number of FDBs137 * @max_fdb_entries: Number of FDB entries for default FDB table;138 * 0 - indicates default 1024 entries.139 * @fdb_aging_time: Default FDB aging time for default FDB table;140 * 0 - indicates default 300 seconds141 * @max_fdb_mc_groups: Number of multicast groups in each FDB table;142 * 0 - indicates default 32143 * @mem_size: DPSW frame storage memory size144 * @num_ifs: Number of interfaces145 * @num_vlans: Current number of VLANs146 * @num_fdbs: Current number of FDBs147 * @component_type: Component type of this bridge148 * @flooding_cfg: Flooding configuration (PER_VLAN - default, PER_FDB)149 * @broadcast_cfg: Broadcast configuration (PER_OBJECT - default, PER_FDB)150 */151struct dpsw_attr {152 int id;153 u64 options;154 u16 max_vlans;155 u8 max_meters_per_if;156 u8 max_fdbs;157 u16 max_fdb_entries;158 u16 fdb_aging_time;159 u16 max_fdb_mc_groups;160 u16 num_ifs;161 u16 mem_size;162 u16 num_vlans;163 u8 num_fdbs;164 enum dpsw_component_type component_type;165 enum dpsw_flooding_cfg flooding_cfg;166 enum dpsw_broadcast_cfg broadcast_cfg;167};168 169int dpsw_get_attributes(struct fsl_mc_io *mc_io, u32 cmd_flags, u16 token,170 struct dpsw_attr *attr);171 172/**173 * struct dpsw_ctrl_if_attr - Control interface attributes174 * @rx_fqid: Receive FQID175 * @rx_err_fqid: Receive error FQID176 * @tx_err_conf_fqid: Transmit error and confirmation FQID177 */178struct dpsw_ctrl_if_attr {179 u32 rx_fqid;180 u32 rx_err_fqid;181 u32 tx_err_conf_fqid;182};183 184int dpsw_ctrl_if_get_attributes(struct fsl_mc_io *mc_io, u32 cmd_flags,185 u16 token, struct dpsw_ctrl_if_attr *attr);186 187enum dpsw_queue_type {188 DPSW_QUEUE_RX,189 DPSW_QUEUE_TX_ERR_CONF,190 DPSW_QUEUE_RX_ERR,191};192 193#define DPSW_MAX_DPBP 8194 195/**196 * struct dpsw_ctrl_if_pools_cfg - Control interface buffer pools configuration197 * @num_dpbp: Number of DPBPs198 * @pools: Array of buffer pools parameters; The number of valid entries199 * must match 'num_dpbp' value200 * @pools.dpbp_id: DPBP object ID201 * @pools.buffer_size: Buffer size202 * @pools.backup_pool: Backup pool203 */204struct dpsw_ctrl_if_pools_cfg {205 u8 num_dpbp;206 struct {207 int dpbp_id;208 u16 buffer_size;209 int backup_pool;210 } pools[DPSW_MAX_DPBP];211};212 213int dpsw_ctrl_if_set_pools(struct fsl_mc_io *mc_io, u32 cmd_flags, u16 token,214 const struct dpsw_ctrl_if_pools_cfg *cfg);215 216#define DPSW_CTRL_IF_QUEUE_OPT_USER_CTX 0x00000001217#define DPSW_CTRL_IF_QUEUE_OPT_DEST 0x00000002218 219enum dpsw_ctrl_if_dest {220 DPSW_CTRL_IF_DEST_NONE = 0,221 DPSW_CTRL_IF_DEST_DPIO = 1,222};223 224struct dpsw_ctrl_if_dest_cfg {225 enum dpsw_ctrl_if_dest dest_type;226 int dest_id;227 u8 priority;228};229 230struct dpsw_ctrl_if_queue_cfg {231 u32 options;232 u64 user_ctx;233 struct dpsw_ctrl_if_dest_cfg dest_cfg;234};235 236int dpsw_ctrl_if_set_queue(struct fsl_mc_io *mc_io, u32 cmd_flags, u16 token,237 enum dpsw_queue_type qtype,238 const struct dpsw_ctrl_if_queue_cfg *cfg);239 240int dpsw_ctrl_if_enable(struct fsl_mc_io *mc_io, u32 cmd_flags, u16 token);241 242int dpsw_ctrl_if_disable(struct fsl_mc_io *mc_io, u32 cmd_flags, u16 token);243 244/**245 * enum dpsw_action - Action selection for special/control frames246 * @DPSW_ACTION_DROP: Drop frame247 * @DPSW_ACTION_REDIRECT: Redirect frame to control port248 */249enum dpsw_action {250 DPSW_ACTION_DROP = 0,251 DPSW_ACTION_REDIRECT = 1252};253 254#define DPSW_LINK_OPT_AUTONEG 0x0000000000000001ULL255#define DPSW_LINK_OPT_HALF_DUPLEX 0x0000000000000002ULL256#define DPSW_LINK_OPT_PAUSE 0x0000000000000004ULL257#define DPSW_LINK_OPT_ASYM_PAUSE 0x0000000000000008ULL258 259/**260 * struct dpsw_link_cfg - Structure representing DPSW link configuration261 * @rate: Rate262 * @options: Mask of available options; use 'DPSW_LINK_OPT_<X>' values263 */264struct dpsw_link_cfg {265 u32 rate;266 u64 options;267};268 269int dpsw_if_set_link_cfg(struct fsl_mc_io *mc_io, u32 cmd_flags, u16 token, u16 if_id,270 struct dpsw_link_cfg *cfg);271 272/**273 * struct dpsw_link_state - Structure representing DPSW link state274 * @rate: Rate275 * @options: Mask of available options; use 'DPSW_LINK_OPT_<X>' values276 * @up: 0 - covers two cases: down and disconnected, 1 - up277 */278struct dpsw_link_state {279 u32 rate;280 u64 options;281 u8 up;282};283 284int dpsw_if_get_link_state(struct fsl_mc_io *mc_io, u32 cmd_flags, u16 token,285 u16 if_id, struct dpsw_link_state *state);286 287/**288 * struct dpsw_tci_cfg - Tag Control Information (TCI) configuration289 * @pcp: Priority Code Point (PCP): a 3-bit field which refers290 * to the IEEE 802.1p priority291 * @dei: Drop Eligible Indicator (DEI): a 1-bit field. May be used292 * separately or in conjunction with PCP to indicate frames293 * eligible to be dropped in the presence of congestion294 * @vlan_id: VLAN Identifier (VID): a 12-bit field specifying the VLAN295 * to which the frame belongs. The hexadecimal values296 * of 0x000 and 0xFFF are reserved;297 * all other values may be used as VLAN identifiers,298 * allowing up to 4,094 VLANs299 */300struct dpsw_tci_cfg {301 u8 pcp;302 u8 dei;303 u16 vlan_id;304};305 306int dpsw_if_set_tci(struct fsl_mc_io *mc_io, u32 cmd_flags, u16 token, u16 if_id,307 const struct dpsw_tci_cfg *cfg);308 309int dpsw_if_get_tci(struct fsl_mc_io *mc_io, u32 cmd_flags, u16 token, u16 if_id,310 struct dpsw_tci_cfg *cfg);311 312/**313 * enum dpsw_stp_state - Spanning Tree Protocol (STP) states314 * @DPSW_STP_STATE_DISABLED: Disabled state315 * @DPSW_STP_STATE_LISTENING: Listening state316 * @DPSW_STP_STATE_LEARNING: Learning state317 * @DPSW_STP_STATE_FORWARDING: Forwarding state318 * @DPSW_STP_STATE_BLOCKING: Blocking state319 *320 */321enum dpsw_stp_state {322 DPSW_STP_STATE_DISABLED = 0,323 DPSW_STP_STATE_LISTENING = 1,324 DPSW_STP_STATE_LEARNING = 2,325 DPSW_STP_STATE_FORWARDING = 3,326 DPSW_STP_STATE_BLOCKING = 0327};328 329/**330 * struct dpsw_stp_cfg - Spanning Tree Protocol (STP) Configuration331 * @vlan_id: VLAN ID STP state332 * @state: STP state333 */334struct dpsw_stp_cfg {335 u16 vlan_id;336 enum dpsw_stp_state state;337};338 339int dpsw_if_set_stp(struct fsl_mc_io *mc_io, u32 cmd_flags, u16 token, u16 if_id,340 const struct dpsw_stp_cfg *cfg);341 342/**343 * enum dpsw_accepted_frames - Types of frames to accept344 * @DPSW_ADMIT_ALL: The device accepts VLAN tagged, untagged and345 * priority tagged frames346 * @DPSW_ADMIT_ONLY_VLAN_TAGGED: The device discards untagged frames or347 * Priority-Tagged frames received on this interface.348 *349 */350enum dpsw_accepted_frames {351 DPSW_ADMIT_ALL = 1,352 DPSW_ADMIT_ONLY_VLAN_TAGGED = 3353};354 355/**356 * enum dpsw_counter - Counters types357 * @DPSW_CNT_ING_FRAME: Counts ingress frames358 * @DPSW_CNT_ING_BYTE: Counts ingress bytes359 * @DPSW_CNT_ING_FLTR_FRAME: Counts filtered ingress frames360 * @DPSW_CNT_ING_FRAME_DISCARD: Counts discarded ingress frame361 * @DPSW_CNT_ING_MCAST_FRAME: Counts ingress multicast frames362 * @DPSW_CNT_ING_MCAST_BYTE: Counts ingress multicast bytes363 * @DPSW_CNT_ING_BCAST_FRAME: Counts ingress broadcast frames364 * @DPSW_CNT_ING_BCAST_BYTES: Counts ingress broadcast bytes365 * @DPSW_CNT_EGR_FRAME: Counts egress frames366 * @DPSW_CNT_EGR_BYTE: Counts egress bytes367 * @DPSW_CNT_EGR_FRAME_DISCARD: Counts discarded egress frames368 * @DPSW_CNT_EGR_STP_FRAME_DISCARD: Counts egress STP discarded frames369 * @DPSW_CNT_ING_NO_BUFF_DISCARD: Counts ingress no buffer discarded frames370 */371enum dpsw_counter {372 DPSW_CNT_ING_FRAME = 0x0,373 DPSW_CNT_ING_BYTE = 0x1,374 DPSW_CNT_ING_FLTR_FRAME = 0x2,375 DPSW_CNT_ING_FRAME_DISCARD = 0x3,376 DPSW_CNT_ING_MCAST_FRAME = 0x4,377 DPSW_CNT_ING_MCAST_BYTE = 0x5,378 DPSW_CNT_ING_BCAST_FRAME = 0x6,379 DPSW_CNT_ING_BCAST_BYTES = 0x7,380 DPSW_CNT_EGR_FRAME = 0x8,381 DPSW_CNT_EGR_BYTE = 0x9,382 DPSW_CNT_EGR_FRAME_DISCARD = 0xa,383 DPSW_CNT_EGR_STP_FRAME_DISCARD = 0xb,384 DPSW_CNT_ING_NO_BUFF_DISCARD = 0xc,385};386 387int dpsw_if_get_counter(struct fsl_mc_io *mc_io, u32 cmd_flags, u16 token,388 u16 if_id, enum dpsw_counter type, u64 *counter);389 390int dpsw_if_enable(struct fsl_mc_io *mc_io, u32 cmd_flags, u16 token, u16 if_id);391 392int dpsw_if_disable(struct fsl_mc_io *mc_io, u32 cmd_flags, u16 token, u16 if_id);393 394/**395 * struct dpsw_if_attr - Structure representing DPSW interface attributes396 * @num_tcs: Number of traffic classes397 * @rate: Transmit rate in bits per second398 * @options: Interface configuration options (bitmap)399 * @enabled: Indicates if interface is enabled400 * @accept_all_vlan: The device discards/accepts incoming frames401 * for VLANs that do not include this interface402 * @admit_untagged: When set to 'DPSW_ADMIT_ONLY_VLAN_TAGGED', the device403 * discards untagged frames or priority-tagged frames received on404 * this interface;405 * When set to 'DPSW_ADMIT_ALL', untagged frames or priority-406 * tagged frames received on this interface are accepted407 * @qdid: control frames transmit qdid408 */409struct dpsw_if_attr {410 u8 num_tcs;411 u32 rate;412 u32 options;413 int enabled;414 int accept_all_vlan;415 enum dpsw_accepted_frames admit_untagged;416 u16 qdid;417};418 419int dpsw_if_get_attributes(struct fsl_mc_io *mc_io, u32 cmd_flags, u16 token,420 u16 if_id, struct dpsw_if_attr *attr);421 422int dpsw_if_set_max_frame_length(struct fsl_mc_io *mc_io, u32 cmd_flags, u16 token,423 u16 if_id, u16 frame_length);424 425/**426 * struct dpsw_vlan_cfg - VLAN Configuration427 * @fdb_id: Forwarding Data Base428 */429struct dpsw_vlan_cfg {430 u16 fdb_id;431};432 433int dpsw_vlan_add(struct fsl_mc_io *mc_io, u32 cmd_flags, u16 token,434 u16 vlan_id, const struct dpsw_vlan_cfg *cfg);435 436#define DPSW_VLAN_ADD_IF_OPT_FDB_ID 0x0001437 438/**439 * struct dpsw_vlan_if_cfg - Set of VLAN Interfaces440 * @num_ifs: The number of interfaces that are assigned to the egress441 * list for this VLAN442 * @if_id: The set of interfaces that are443 * assigned to the egress list for this VLAN444 * @options: Options map for this command (DPSW_VLAN_ADD_IF_OPT_FDB_ID)445 * @fdb_id: FDB id to be used by this VLAN on these specific interfaces446 * (taken into account only if the DPSW_VLAN_ADD_IF_OPT_FDB_ID is447 * specified in the options field)448 */449struct dpsw_vlan_if_cfg {450 u16 num_ifs;451 u16 options;452 u16 if_id[DPSW_MAX_IF];453 u16 fdb_id;454};455 456int dpsw_vlan_add_if(struct fsl_mc_io *mc_io, u32 cmd_flags, u16 token,457 u16 vlan_id, const struct dpsw_vlan_if_cfg *cfg);458 459int dpsw_vlan_add_if_untagged(struct fsl_mc_io *mc_io, u32 cmd_flags, u16 token,460 u16 vlan_id, const struct dpsw_vlan_if_cfg *cfg);461 462int dpsw_vlan_remove_if(struct fsl_mc_io *mc_io, u32 cmd_flags, u16 token,463 u16 vlan_id, const struct dpsw_vlan_if_cfg *cfg);464 465int dpsw_vlan_remove_if_untagged(struct fsl_mc_io *mc_io, u32 cmd_flags, u16 token,466 u16 vlan_id, const struct dpsw_vlan_if_cfg *cfg);467 468int dpsw_vlan_remove(struct fsl_mc_io *mc_io, u32 cmd_flags, u16 token,469 u16 vlan_id);470 471/**472 * enum dpsw_fdb_entry_type - FDB Entry type - Static/Dynamic473 * @DPSW_FDB_ENTRY_STATIC: Static entry474 * @DPSW_FDB_ENTRY_DINAMIC: Dynamic entry475 */476enum dpsw_fdb_entry_type {477 DPSW_FDB_ENTRY_STATIC = 0,478 DPSW_FDB_ENTRY_DINAMIC = 1479};480 481/**482 * struct dpsw_fdb_unicast_cfg - Unicast entry configuration483 * @type: Select static or dynamic entry484 * @mac_addr: MAC address485 * @if_egress: Egress interface ID486 */487struct dpsw_fdb_unicast_cfg {488 enum dpsw_fdb_entry_type type;489 u8 mac_addr[6];490 u16 if_egress;491};492 493int dpsw_fdb_add_unicast(struct fsl_mc_io *mc_io, u32 cmd_flags, u16 token,494 u16 fdb_id, const struct dpsw_fdb_unicast_cfg *cfg);495 496int dpsw_fdb_remove_unicast(struct fsl_mc_io *mc_io, u32 cmd_flags, u16 token,497 u16 fdb_id, const struct dpsw_fdb_unicast_cfg *cfg);498 499#define DPSW_FDB_ENTRY_TYPE_DYNAMIC BIT(0)500#define DPSW_FDB_ENTRY_TYPE_UNICAST BIT(1)501 502/**503 * struct fdb_dump_entry - fdb snapshot entry504 * @mac_addr: MAC address505 * @type: bit0 - DINAMIC(1)/STATIC(0), bit1 - UNICAST(1)/MULTICAST(0)506 * @if_info: unicast - egress interface, multicast - number of egress interfaces507 * @if_mask: multicast - egress interface mask508 */509struct fdb_dump_entry {510 u8 mac_addr[6];511 u8 type;512 u8 if_info;513 u8 if_mask[8];514};515 516int dpsw_fdb_dump(struct fsl_mc_io *mc_io, u32 cmd_flags, u16 token, u16 fdb_id,517 u64 iova_addr, u32 iova_size, u16 *num_entries);518 519/**520 * struct dpsw_fdb_multicast_cfg - Multi-cast entry configuration521 * @type: Select static or dynamic entry522 * @mac_addr: MAC address523 * @num_ifs: Number of external and internal interfaces524 * @if_id: Egress interface IDs525 */526struct dpsw_fdb_multicast_cfg {527 enum dpsw_fdb_entry_type type;528 u8 mac_addr[6];529 u16 num_ifs;530 u16 if_id[DPSW_MAX_IF];531};532 533int dpsw_fdb_add_multicast(struct fsl_mc_io *mc_io, u32 cmd_flags, u16 token,534 u16 fdb_id, const struct dpsw_fdb_multicast_cfg *cfg);535 536int dpsw_fdb_remove_multicast(struct fsl_mc_io *mc_io, u32 cmd_flags, u16 token,537 u16 fdb_id, const struct dpsw_fdb_multicast_cfg *cfg);538 539/**540 * enum dpsw_learning_mode - Auto-learning modes541 * @DPSW_LEARNING_MODE_DIS: Disable Auto-learning542 * @DPSW_LEARNING_MODE_HW: Enable HW auto-Learning543 * @DPSW_LEARNING_MODE_NON_SECURE: Enable None secure learning by CPU544 * @DPSW_LEARNING_MODE_SECURE: Enable secure learning by CPU545 *546 * NONE - SECURE LEARNING547 * SMAC found DMAC found CTLU Action548 * v v Forward frame to549 * 1. DMAC destination550 * - v Forward frame to551 * 1. DMAC destination552 * 2. Control interface553 * v - Forward frame to554 * 1. Flooding list of interfaces555 * - - Forward frame to556 * 1. Flooding list of interfaces557 * 2. Control interface558 * SECURE LEARING559 * SMAC found DMAC found CTLU Action560 * v v Forward frame to561 * 1. DMAC destination562 * - v Forward frame to563 * 1. Control interface564 * v - Forward frame to565 * 1. Flooding list of interfaces566 * - - Forward frame to567 * 1. Control interface568 */569enum dpsw_learning_mode {570 DPSW_LEARNING_MODE_DIS = 0,571 DPSW_LEARNING_MODE_HW = 1,572 DPSW_LEARNING_MODE_NON_SECURE = 2,573 DPSW_LEARNING_MODE_SECURE = 3574};575 576/**577 * struct dpsw_fdb_attr - FDB Attributes578 * @max_fdb_entries: Number of FDB entries579 * @fdb_ageing_time: Ageing time in seconds580 * @learning_mode: Learning mode581 * @num_fdb_mc_groups: Current number of multicast groups582 * @max_fdb_mc_groups: Maximum number of multicast groups583 */584struct dpsw_fdb_attr {585 u16 max_fdb_entries;586 u16 fdb_ageing_time;587 enum dpsw_learning_mode learning_mode;588 u16 num_fdb_mc_groups;589 u16 max_fdb_mc_groups;590};591 592int dpsw_get_api_version(struct fsl_mc_io *mc_io, u32 cmd_flags,593 u16 *major_ver, u16 *minor_ver);594 595int dpsw_if_get_port_mac_addr(struct fsl_mc_io *mc_io, u32 cmd_flags, u16 token,596 u16 if_id, u8 mac_addr[6]);597 598/**599 * struct dpsw_fdb_cfg - FDB Configuration600 * @num_fdb_entries: Number of FDB entries601 * @fdb_ageing_time: Ageing time in seconds602 */603struct dpsw_fdb_cfg {604 u16 num_fdb_entries;605 u16 fdb_ageing_time;606};607 608int dpsw_fdb_add(struct fsl_mc_io *mc_io, u32 cmd_flags, u16 token, u16 *fdb_id,609 const struct dpsw_fdb_cfg *cfg);610 611int dpsw_fdb_remove(struct fsl_mc_io *mc_io, u32 cmd_flags, u16 token, u16 fdb_id);612 613/**614 * enum dpsw_flood_type - Define the flood type of a DPSW object615 * @DPSW_BROADCAST: Broadcast flooding616 * @DPSW_FLOODING: Unknown flooding617 */618enum dpsw_flood_type {619 DPSW_BROADCAST = 0,620 DPSW_FLOODING,621};622 623struct dpsw_egress_flood_cfg {624 u16 fdb_id;625 enum dpsw_flood_type flood_type;626 u16 num_ifs;627 u16 if_id[DPSW_MAX_IF];628};629 630int dpsw_set_egress_flood(struct fsl_mc_io *mc_io, u32 cmd_flags, u16 token,631 const struct dpsw_egress_flood_cfg *cfg);632 633int dpsw_if_set_learning_mode(struct fsl_mc_io *mc_io, u32 cmd_flags, u16 token,634 u16 if_id, enum dpsw_learning_mode mode);635 636/**637 * struct dpsw_acl_cfg - ACL Configuration638 * @max_entries: Number of ACL rules639 */640struct dpsw_acl_cfg {641 u16 max_entries;642};643 644int dpsw_acl_add(struct fsl_mc_io *mc_io, u32 cmd_flags, u16 token, u16 *acl_id,645 const struct dpsw_acl_cfg *cfg);646 647int dpsw_acl_remove(struct fsl_mc_io *mc_io, u32 cmd_flags, u16 token,648 u16 acl_id);649 650/**651 * struct dpsw_acl_if_cfg - List of interfaces to associate with an ACL table652 * @num_ifs: Number of interfaces653 * @if_id: List of interfaces654 */655struct dpsw_acl_if_cfg {656 u16 num_ifs;657 u16 if_id[DPSW_MAX_IF];658};659 660int dpsw_acl_add_if(struct fsl_mc_io *mc_io, u32 cmd_flags, u16 token,661 u16 acl_id, const struct dpsw_acl_if_cfg *cfg);662 663int dpsw_acl_remove_if(struct fsl_mc_io *mc_io, u32 cmd_flags, u16 token,664 u16 acl_id, const struct dpsw_acl_if_cfg *cfg);665 666/**667 * struct dpsw_acl_fields - ACL fields.668 * @l2_dest_mac: Destination MAC address: BPDU, Multicast, Broadcast, Unicast,669 * slow protocols, MVRP, STP670 * @l2_source_mac: Source MAC address671 * @l2_tpid: Layer 2 (Ethernet) protocol type, used to identify the following672 * protocols: MPLS, PTP, PFC, ARP, Jumbo frames, LLDP, IEEE802.1ae,673 * Q-in-Q, IPv4, IPv6, PPPoE674 * @l2_pcp_dei: indicate which protocol is encapsulated in the payload675 * @l2_vlan_id: layer 2 VLAN ID676 * @l2_ether_type: layer 2 Ethernet type677 * @l3_dscp: Layer 3 differentiated services code point678 * @l3_protocol: Tells the Network layer at the destination host, to which679 * Protocol this packet belongs to. The following protocol are680 * supported: ICMP, IGMP, IPv4 (encapsulation), TCP, IPv6681 * (encapsulation), GRE, PTP682 * @l3_source_ip: Source IPv4 IP683 * @l3_dest_ip: Destination IPv4 IP684 * @l4_source_port: Source TCP/UDP Port685 * @l4_dest_port: Destination TCP/UDP Port686 */687struct dpsw_acl_fields {688 u8 l2_dest_mac[6];689 u8 l2_source_mac[6];690 u16 l2_tpid;691 u8 l2_pcp_dei;692 u16 l2_vlan_id;693 u16 l2_ether_type;694 u8 l3_dscp;695 u8 l3_protocol;696 u32 l3_source_ip;697 u32 l3_dest_ip;698 u16 l4_source_port;699 u16 l4_dest_port;700};701 702/**703 * struct dpsw_acl_key - ACL key704 * @match: Match fields705 * @mask: Mask: b'1 - valid, b'0 don't care706 */707struct dpsw_acl_key {708 struct dpsw_acl_fields match;709 struct dpsw_acl_fields mask;710};711 712/**713 * enum dpsw_acl_action - action to be run on the ACL rule match714 * @DPSW_ACL_ACTION_DROP: Drop frame715 * @DPSW_ACL_ACTION_REDIRECT: Redirect to certain port716 * @DPSW_ACL_ACTION_ACCEPT: Accept frame717 * @DPSW_ACL_ACTION_REDIRECT_TO_CTRL_IF: Redirect to control interface718 */719enum dpsw_acl_action {720 DPSW_ACL_ACTION_DROP,721 DPSW_ACL_ACTION_REDIRECT,722 DPSW_ACL_ACTION_ACCEPT,723 DPSW_ACL_ACTION_REDIRECT_TO_CTRL_IF724};725 726/**727 * struct dpsw_acl_result - ACL action728 * @action: Action should be taken when ACL entry hit729 * @if_id: Interface IDs to redirect frame. Valid only if redirect selected for730 * action731 */732struct dpsw_acl_result {733 enum dpsw_acl_action action;734 u16 if_id;735};736 737/**738 * struct dpsw_acl_entry_cfg - ACL entry739 * @key_iova: I/O virtual address of DMA-able memory filled with key after call740 * to dpsw_acl_prepare_entry_cfg()741 * @result: Required action when entry hit occurs742 * @precedence: Precedence inside ACL 0 is lowest; This priority can not change743 * during the lifetime of a Policy. It is user responsibility to744 * space the priorities according to consequent rule additions.745 */746struct dpsw_acl_entry_cfg {747 u64 key_iova;748 struct dpsw_acl_result result;749 int precedence;750};751 752void dpsw_acl_prepare_entry_cfg(const struct dpsw_acl_key *key,753 u8 *entry_cfg_buf);754 755int dpsw_acl_add_entry(struct fsl_mc_io *mc_io, u32 cmd_flags, u16 token,756 u16 acl_id, const struct dpsw_acl_entry_cfg *cfg);757 758int dpsw_acl_remove_entry(struct fsl_mc_io *mc_io, u32 cmd_flags, u16 token,759 u16 acl_id, const struct dpsw_acl_entry_cfg *cfg);760 761/**762 * enum dpsw_reflection_filter - Filter type for frames to be reflected763 * @DPSW_REFLECTION_FILTER_INGRESS_ALL: Reflect all frames764 * @DPSW_REFLECTION_FILTER_INGRESS_VLAN: Reflect only frames that belong to765 * the particular VLAN defined by vid parameter766 *767 */768enum dpsw_reflection_filter {769 DPSW_REFLECTION_FILTER_INGRESS_ALL = 0,770 DPSW_REFLECTION_FILTER_INGRESS_VLAN = 1771};772 773/**774 * struct dpsw_reflection_cfg - Structure representing the mirroring config775 * @filter: Filter type for frames to be mirrored776 * @vlan_id: VLAN ID to mirror; valid only when the type is DPSW_INGRESS_VLAN777 */778struct dpsw_reflection_cfg {779 enum dpsw_reflection_filter filter;780 u16 vlan_id;781};782 783int dpsw_set_reflection_if(struct fsl_mc_io *mc_io, u32 cmd_flags, u16 token,784 u16 if_id);785 786int dpsw_if_add_reflection(struct fsl_mc_io *mc_io, u32 cmd_flags, u16 token,787 u16 if_id, const struct dpsw_reflection_cfg *cfg);788 789int dpsw_if_remove_reflection(struct fsl_mc_io *mc_io, u32 cmd_flags, u16 token,790 u16 if_id, const struct dpsw_reflection_cfg *cfg);791#endif /* __FSL_DPSW_H */792