brintos

brintos / linux-shallow public Read only

0
0
Text · 23.3 KiB · b90bd36 Raw
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