162306a36Sopenharmony_ci/* SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0 */
262306a36Sopenharmony_ci/* Copyright (c) 2019-2020 Marvell International Ltd. All rights reserved. */
362306a36Sopenharmony_ci
462306a36Sopenharmony_ci#ifndef _PRESTERA_HW_H_
562306a36Sopenharmony_ci#define _PRESTERA_HW_H_
662306a36Sopenharmony_ci
762306a36Sopenharmony_ci#include <linux/types.h>
862306a36Sopenharmony_ci#include "prestera_acl.h"
962306a36Sopenharmony_ci
1062306a36Sopenharmony_cienum prestera_accept_frm_type {
1162306a36Sopenharmony_ci	PRESTERA_ACCEPT_FRAME_TYPE_TAGGED,
1262306a36Sopenharmony_ci	PRESTERA_ACCEPT_FRAME_TYPE_UNTAGGED,
1362306a36Sopenharmony_ci	PRESTERA_ACCEPT_FRAME_TYPE_ALL,
1462306a36Sopenharmony_ci};
1562306a36Sopenharmony_ci
1662306a36Sopenharmony_cienum prestera_fdb_flush_mode {
1762306a36Sopenharmony_ci	PRESTERA_FDB_FLUSH_MODE_DYNAMIC = BIT(0),
1862306a36Sopenharmony_ci	PRESTERA_FDB_FLUSH_MODE_STATIC = BIT(1),
1962306a36Sopenharmony_ci	PRESTERA_FDB_FLUSH_MODE_ALL = PRESTERA_FDB_FLUSH_MODE_DYNAMIC
2062306a36Sopenharmony_ci					| PRESTERA_FDB_FLUSH_MODE_STATIC,
2162306a36Sopenharmony_ci};
2262306a36Sopenharmony_ci
2362306a36Sopenharmony_cienum {
2462306a36Sopenharmony_ci	PRESTERA_MAC_MODE_INTERNAL,
2562306a36Sopenharmony_ci	PRESTERA_MAC_MODE_SGMII,
2662306a36Sopenharmony_ci	PRESTERA_MAC_MODE_1000BASE_X,
2762306a36Sopenharmony_ci	PRESTERA_MAC_MODE_KR,
2862306a36Sopenharmony_ci	PRESTERA_MAC_MODE_KR2,
2962306a36Sopenharmony_ci	PRESTERA_MAC_MODE_KR4,
3062306a36Sopenharmony_ci	PRESTERA_MAC_MODE_CR,
3162306a36Sopenharmony_ci	PRESTERA_MAC_MODE_CR2,
3262306a36Sopenharmony_ci	PRESTERA_MAC_MODE_CR4,
3362306a36Sopenharmony_ci	PRESTERA_MAC_MODE_SR_LR,
3462306a36Sopenharmony_ci	PRESTERA_MAC_MODE_SR_LR2,
3562306a36Sopenharmony_ci	PRESTERA_MAC_MODE_SR_LR4,
3662306a36Sopenharmony_ci
3762306a36Sopenharmony_ci	PRESTERA_MAC_MODE_MAX
3862306a36Sopenharmony_ci};
3962306a36Sopenharmony_ci
4062306a36Sopenharmony_cienum {
4162306a36Sopenharmony_ci	PRESTERA_LINK_MODE_10baseT_Half,
4262306a36Sopenharmony_ci	PRESTERA_LINK_MODE_10baseT_Full,
4362306a36Sopenharmony_ci	PRESTERA_LINK_MODE_100baseT_Half,
4462306a36Sopenharmony_ci	PRESTERA_LINK_MODE_100baseT_Full,
4562306a36Sopenharmony_ci	PRESTERA_LINK_MODE_1000baseT_Half,
4662306a36Sopenharmony_ci	PRESTERA_LINK_MODE_1000baseT_Full,
4762306a36Sopenharmony_ci	PRESTERA_LINK_MODE_1000baseX_Full,
4862306a36Sopenharmony_ci	PRESTERA_LINK_MODE_1000baseKX_Full,
4962306a36Sopenharmony_ci	PRESTERA_LINK_MODE_2500baseX_Full,
5062306a36Sopenharmony_ci	PRESTERA_LINK_MODE_10GbaseKR_Full,
5162306a36Sopenharmony_ci	PRESTERA_LINK_MODE_10GbaseSR_Full,
5262306a36Sopenharmony_ci	PRESTERA_LINK_MODE_10GbaseLR_Full,
5362306a36Sopenharmony_ci	PRESTERA_LINK_MODE_20GbaseKR2_Full,
5462306a36Sopenharmony_ci	PRESTERA_LINK_MODE_25GbaseCR_Full,
5562306a36Sopenharmony_ci	PRESTERA_LINK_MODE_25GbaseKR_Full,
5662306a36Sopenharmony_ci	PRESTERA_LINK_MODE_25GbaseSR_Full,
5762306a36Sopenharmony_ci	PRESTERA_LINK_MODE_40GbaseKR4_Full,
5862306a36Sopenharmony_ci	PRESTERA_LINK_MODE_40GbaseCR4_Full,
5962306a36Sopenharmony_ci	PRESTERA_LINK_MODE_40GbaseSR4_Full,
6062306a36Sopenharmony_ci	PRESTERA_LINK_MODE_50GbaseCR2_Full,
6162306a36Sopenharmony_ci	PRESTERA_LINK_MODE_50GbaseKR2_Full,
6262306a36Sopenharmony_ci	PRESTERA_LINK_MODE_50GbaseSR2_Full,
6362306a36Sopenharmony_ci	PRESTERA_LINK_MODE_100GbaseKR4_Full,
6462306a36Sopenharmony_ci	PRESTERA_LINK_MODE_100GbaseSR4_Full,
6562306a36Sopenharmony_ci	PRESTERA_LINK_MODE_100GbaseCR4_Full,
6662306a36Sopenharmony_ci
6762306a36Sopenharmony_ci	PRESTERA_LINK_MODE_MAX
6862306a36Sopenharmony_ci};
6962306a36Sopenharmony_ci
7062306a36Sopenharmony_cienum {
7162306a36Sopenharmony_ci	PRESTERA_PORT_TYPE_NONE,
7262306a36Sopenharmony_ci	PRESTERA_PORT_TYPE_TP,
7362306a36Sopenharmony_ci	PRESTERA_PORT_TYPE_AUI,
7462306a36Sopenharmony_ci	PRESTERA_PORT_TYPE_MII,
7562306a36Sopenharmony_ci	PRESTERA_PORT_TYPE_FIBRE,
7662306a36Sopenharmony_ci	PRESTERA_PORT_TYPE_BNC,
7762306a36Sopenharmony_ci	PRESTERA_PORT_TYPE_DA,
7862306a36Sopenharmony_ci	PRESTERA_PORT_TYPE_OTHER,
7962306a36Sopenharmony_ci
8062306a36Sopenharmony_ci	PRESTERA_PORT_TYPE_MAX
8162306a36Sopenharmony_ci};
8262306a36Sopenharmony_ci
8362306a36Sopenharmony_cienum {
8462306a36Sopenharmony_ci	PRESTERA_PORT_TCVR_COPPER,
8562306a36Sopenharmony_ci	PRESTERA_PORT_TCVR_SFP,
8662306a36Sopenharmony_ci
8762306a36Sopenharmony_ci	PRESTERA_PORT_TCVR_MAX
8862306a36Sopenharmony_ci};
8962306a36Sopenharmony_ci
9062306a36Sopenharmony_cienum {
9162306a36Sopenharmony_ci	PRESTERA_PORT_FEC_OFF,
9262306a36Sopenharmony_ci	PRESTERA_PORT_FEC_BASER,
9362306a36Sopenharmony_ci	PRESTERA_PORT_FEC_RS,
9462306a36Sopenharmony_ci
9562306a36Sopenharmony_ci	PRESTERA_PORT_FEC_MAX
9662306a36Sopenharmony_ci};
9762306a36Sopenharmony_ci
9862306a36Sopenharmony_cienum {
9962306a36Sopenharmony_ci	PRESTERA_PORT_DUPLEX_HALF,
10062306a36Sopenharmony_ci	PRESTERA_PORT_DUPLEX_FULL,
10162306a36Sopenharmony_ci};
10262306a36Sopenharmony_ci
10362306a36Sopenharmony_cienum {
10462306a36Sopenharmony_ci	PRESTERA_STP_DISABLED,
10562306a36Sopenharmony_ci	PRESTERA_STP_BLOCK_LISTEN,
10662306a36Sopenharmony_ci	PRESTERA_STP_LEARN,
10762306a36Sopenharmony_ci	PRESTERA_STP_FORWARD,
10862306a36Sopenharmony_ci};
10962306a36Sopenharmony_ci
11062306a36Sopenharmony_cienum {
11162306a36Sopenharmony_ci	PRESTERA_POLICER_TYPE_INGRESS,
11262306a36Sopenharmony_ci	PRESTERA_POLICER_TYPE_EGRESS
11362306a36Sopenharmony_ci};
11462306a36Sopenharmony_ci
11562306a36Sopenharmony_cienum prestera_hw_cpu_code_cnt_t {
11662306a36Sopenharmony_ci	PRESTERA_HW_CPU_CODE_CNT_TYPE_DROP = 0,
11762306a36Sopenharmony_ci	PRESTERA_HW_CPU_CODE_CNT_TYPE_TRAP = 1,
11862306a36Sopenharmony_ci};
11962306a36Sopenharmony_ci
12062306a36Sopenharmony_cienum prestera_hw_vtcam_direction_t {
12162306a36Sopenharmony_ci	PRESTERA_HW_VTCAM_DIR_INGRESS = 0,
12262306a36Sopenharmony_ci	PRESTERA_HW_VTCAM_DIR_EGRESS = 1,
12362306a36Sopenharmony_ci};
12462306a36Sopenharmony_ci
12562306a36Sopenharmony_cienum {
12662306a36Sopenharmony_ci	PRESTERA_HW_COUNTER_CLIENT_INGRESS_LOOKUP_0 = 0,
12762306a36Sopenharmony_ci	PRESTERA_HW_COUNTER_CLIENT_INGRESS_LOOKUP_1 = 1,
12862306a36Sopenharmony_ci	PRESTERA_HW_COUNTER_CLIENT_INGRESS_LOOKUP_2 = 2,
12962306a36Sopenharmony_ci	PRESTERA_HW_COUNTER_CLIENT_EGRESS_LOOKUP = 3,
13062306a36Sopenharmony_ci};
13162306a36Sopenharmony_ci
13262306a36Sopenharmony_cistruct prestera_switch;
13362306a36Sopenharmony_cistruct prestera_port;
13462306a36Sopenharmony_cistruct prestera_port_stats;
13562306a36Sopenharmony_cistruct prestera_port_caps;
13662306a36Sopenharmony_cienum prestera_event_type;
13762306a36Sopenharmony_cistruct prestera_event;
13862306a36Sopenharmony_ci
13962306a36Sopenharmony_citypedef void (*prestera_event_cb_t)
14062306a36Sopenharmony_ci	(struct prestera_switch *sw, struct prestera_event *evt, void *arg);
14162306a36Sopenharmony_ci
14262306a36Sopenharmony_cistruct prestera_rxtx_params;
14362306a36Sopenharmony_cistruct prestera_acl_hw_action_info;
14462306a36Sopenharmony_cistruct prestera_acl_iface;
14562306a36Sopenharmony_cistruct prestera_counter_stats;
14662306a36Sopenharmony_cistruct prestera_iface;
14762306a36Sopenharmony_cistruct prestera_flood_domain;
14862306a36Sopenharmony_cistruct prestera_mdb_entry;
14962306a36Sopenharmony_cistruct prestera_neigh_info;
15062306a36Sopenharmony_ci
15162306a36Sopenharmony_ci/* Switch API */
15262306a36Sopenharmony_ciint prestera_hw_switch_init(struct prestera_switch *sw);
15362306a36Sopenharmony_civoid prestera_hw_switch_fini(struct prestera_switch *sw);
15462306a36Sopenharmony_ciint prestera_hw_switch_ageing_set(struct prestera_switch *sw, u32 ageing_ms);
15562306a36Sopenharmony_ciint prestera_hw_switch_mac_set(struct prestera_switch *sw, const char *mac);
15662306a36Sopenharmony_ci
15762306a36Sopenharmony_ci/* Port API */
15862306a36Sopenharmony_ciint prestera_hw_port_info_get(const struct prestera_port *port,
15962306a36Sopenharmony_ci			      u32 *dev_id, u32 *hw_id, u16 *fp_id);
16062306a36Sopenharmony_ci
16162306a36Sopenharmony_ciint prestera_hw_port_mac_mode_get(const struct prestera_port *port,
16262306a36Sopenharmony_ci				  u32 *mode, u32 *speed, u8 *duplex, u8 *fec);
16362306a36Sopenharmony_ciint prestera_hw_port_mac_mode_set(const struct prestera_port *port,
16462306a36Sopenharmony_ci				  bool admin, u32 mode, u8 inband,
16562306a36Sopenharmony_ci				  u32 speed, u8 duplex, u8 fec);
16662306a36Sopenharmony_ciint prestera_hw_port_phy_mode_get(const struct prestera_port *port,
16762306a36Sopenharmony_ci				  u8 *mdix, u64 *lmode_bmap,
16862306a36Sopenharmony_ci				  bool *fc_pause, bool *fc_asym);
16962306a36Sopenharmony_ciint prestera_hw_port_phy_mode_set(const struct prestera_port *port,
17062306a36Sopenharmony_ci				  bool admin, bool adv, u32 mode, u64 modes,
17162306a36Sopenharmony_ci				  u8 mdix);
17262306a36Sopenharmony_ci
17362306a36Sopenharmony_ciint prestera_hw_port_mtu_set(const struct prestera_port *port, u32 mtu);
17462306a36Sopenharmony_ciint prestera_hw_port_mtu_get(const struct prestera_port *port, u32 *mtu);
17562306a36Sopenharmony_ciint prestera_hw_port_mac_set(const struct prestera_port *port, const char *mac);
17662306a36Sopenharmony_ciint prestera_hw_port_mac_get(const struct prestera_port *port, char *mac);
17762306a36Sopenharmony_ciint prestera_hw_port_cap_get(const struct prestera_port *port,
17862306a36Sopenharmony_ci			     struct prestera_port_caps *caps);
17962306a36Sopenharmony_ciint prestera_hw_port_type_get(const struct prestera_port *port, u8 *type);
18062306a36Sopenharmony_ciint prestera_hw_port_autoneg_restart(struct prestera_port *port);
18162306a36Sopenharmony_ciint prestera_hw_port_stats_get(const struct prestera_port *port,
18262306a36Sopenharmony_ci			       struct prestera_port_stats *stats);
18362306a36Sopenharmony_ciint prestera_hw_port_speed_get(const struct prestera_port *port, u32 *speed);
18462306a36Sopenharmony_ciint prestera_hw_port_learning_set(struct prestera_port *port, bool enable);
18562306a36Sopenharmony_ciint prestera_hw_port_uc_flood_set(const struct prestera_port *port, bool flood);
18662306a36Sopenharmony_ciint prestera_hw_port_mc_flood_set(const struct prestera_port *port, bool flood);
18762306a36Sopenharmony_ciint prestera_hw_port_br_locked_set(const struct prestera_port *port,
18862306a36Sopenharmony_ci				   bool br_locked);
18962306a36Sopenharmony_ciint prestera_hw_port_accept_frm_type(struct prestera_port *port,
19062306a36Sopenharmony_ci				     enum prestera_accept_frm_type type);
19162306a36Sopenharmony_ci/* Vlan API */
19262306a36Sopenharmony_ciint prestera_hw_vlan_create(struct prestera_switch *sw, u16 vid);
19362306a36Sopenharmony_ciint prestera_hw_vlan_delete(struct prestera_switch *sw, u16 vid);
19462306a36Sopenharmony_ciint prestera_hw_vlan_port_set(struct prestera_port *port, u16 vid,
19562306a36Sopenharmony_ci			      bool is_member, bool untagged);
19662306a36Sopenharmony_ciint prestera_hw_vlan_port_vid_set(struct prestera_port *port, u16 vid);
19762306a36Sopenharmony_ciint prestera_hw_vlan_port_stp_set(struct prestera_port *port, u16 vid, u8 state);
19862306a36Sopenharmony_ci
19962306a36Sopenharmony_ci/* FDB API */
20062306a36Sopenharmony_ciint prestera_hw_fdb_add(struct prestera_port *port, const unsigned char *mac,
20162306a36Sopenharmony_ci			u16 vid, bool dynamic);
20262306a36Sopenharmony_ciint prestera_hw_fdb_del(struct prestera_port *port, const unsigned char *mac,
20362306a36Sopenharmony_ci			u16 vid);
20462306a36Sopenharmony_ciint prestera_hw_fdb_flush_port(struct prestera_port *port, u32 mode);
20562306a36Sopenharmony_ciint prestera_hw_fdb_flush_vlan(struct prestera_switch *sw, u16 vid, u32 mode);
20662306a36Sopenharmony_ciint prestera_hw_fdb_flush_port_vlan(struct prestera_port *port, u16 vid,
20762306a36Sopenharmony_ci				    u32 mode);
20862306a36Sopenharmony_ci
20962306a36Sopenharmony_ci/* Bridge API */
21062306a36Sopenharmony_ciint prestera_hw_bridge_create(struct prestera_switch *sw, u16 *bridge_id);
21162306a36Sopenharmony_ciint prestera_hw_bridge_delete(struct prestera_switch *sw, u16 bridge_id);
21262306a36Sopenharmony_ciint prestera_hw_bridge_port_add(struct prestera_port *port, u16 bridge_id);
21362306a36Sopenharmony_ciint prestera_hw_bridge_port_delete(struct prestera_port *port, u16 bridge_id);
21462306a36Sopenharmony_ci
21562306a36Sopenharmony_ci/* vTCAM API */
21662306a36Sopenharmony_ciint prestera_hw_vtcam_create(struct prestera_switch *sw,
21762306a36Sopenharmony_ci			     u8 lookup, const u32 *keymask, u32 *vtcam_id,
21862306a36Sopenharmony_ci			     enum prestera_hw_vtcam_direction_t direction);
21962306a36Sopenharmony_ciint prestera_hw_vtcam_rule_add(struct prestera_switch *sw, u32 vtcam_id,
22062306a36Sopenharmony_ci			       u32 prio, void *key, void *keymask,
22162306a36Sopenharmony_ci			       struct prestera_acl_hw_action_info *act,
22262306a36Sopenharmony_ci			       u8 n_act, u32 *rule_id);
22362306a36Sopenharmony_ciint prestera_hw_vtcam_rule_del(struct prestera_switch *sw,
22462306a36Sopenharmony_ci			       u32 vtcam_id, u32 rule_id);
22562306a36Sopenharmony_ciint prestera_hw_vtcam_destroy(struct prestera_switch *sw, u32 vtcam_id);
22662306a36Sopenharmony_ciint prestera_hw_vtcam_iface_bind(struct prestera_switch *sw,
22762306a36Sopenharmony_ci				 struct prestera_acl_iface *iface,
22862306a36Sopenharmony_ci				 u32 vtcam_id, u16 pcl_id);
22962306a36Sopenharmony_ciint prestera_hw_vtcam_iface_unbind(struct prestera_switch *sw,
23062306a36Sopenharmony_ci				   struct prestera_acl_iface *iface,
23162306a36Sopenharmony_ci				   u32 vtcam_id);
23262306a36Sopenharmony_ci
23362306a36Sopenharmony_ci/* Counter API */
23462306a36Sopenharmony_ciint prestera_hw_counter_trigger(struct prestera_switch *sw, u32 block_id);
23562306a36Sopenharmony_ciint prestera_hw_counter_abort(struct prestera_switch *sw);
23662306a36Sopenharmony_ciint prestera_hw_counters_get(struct prestera_switch *sw, u32 idx,
23762306a36Sopenharmony_ci			     u32 *len, bool *done,
23862306a36Sopenharmony_ci			     struct prestera_counter_stats *stats);
23962306a36Sopenharmony_ciint prestera_hw_counter_block_get(struct prestera_switch *sw,
24062306a36Sopenharmony_ci				  u32 client, u32 *block_id, u32 *offset,
24162306a36Sopenharmony_ci				  u32 *num_counters);
24262306a36Sopenharmony_ciint prestera_hw_counter_block_release(struct prestera_switch *sw,
24362306a36Sopenharmony_ci				      u32 block_id);
24462306a36Sopenharmony_ciint prestera_hw_counter_clear(struct prestera_switch *sw, u32 block_id,
24562306a36Sopenharmony_ci			      u32 counter_id);
24662306a36Sopenharmony_ci
24762306a36Sopenharmony_ci/* SPAN API */
24862306a36Sopenharmony_ciint prestera_hw_span_get(const struct prestera_port *port, u8 *span_id);
24962306a36Sopenharmony_ciint prestera_hw_span_bind(const struct prestera_port *port, u8 span_id,
25062306a36Sopenharmony_ci			  bool ingress);
25162306a36Sopenharmony_ciint prestera_hw_span_unbind(const struct prestera_port *port, bool ingress);
25262306a36Sopenharmony_ciint prestera_hw_span_release(struct prestera_switch *sw, u8 span_id);
25362306a36Sopenharmony_ci
25462306a36Sopenharmony_ci/* Router API */
25562306a36Sopenharmony_ciint prestera_hw_rif_create(struct prestera_switch *sw,
25662306a36Sopenharmony_ci			   struct prestera_iface *iif, u8 *mac, u16 *rif_id);
25762306a36Sopenharmony_ciint prestera_hw_rif_delete(struct prestera_switch *sw, u16 rif_id,
25862306a36Sopenharmony_ci			   struct prestera_iface *iif);
25962306a36Sopenharmony_ci
26062306a36Sopenharmony_ci/* Virtual Router API */
26162306a36Sopenharmony_ciint prestera_hw_vr_create(struct prestera_switch *sw, u16 *vr_id);
26262306a36Sopenharmony_ciint prestera_hw_vr_delete(struct prestera_switch *sw, u16 vr_id);
26362306a36Sopenharmony_ci
26462306a36Sopenharmony_ci/* LPM PI */
26562306a36Sopenharmony_ciint prestera_hw_lpm_add(struct prestera_switch *sw, u16 vr_id,
26662306a36Sopenharmony_ci			__be32 dst, u32 dst_len, u32 grp_id);
26762306a36Sopenharmony_ciint prestera_hw_lpm_del(struct prestera_switch *sw, u16 vr_id,
26862306a36Sopenharmony_ci			__be32 dst, u32 dst_len);
26962306a36Sopenharmony_ci
27062306a36Sopenharmony_ci/* NH API */
27162306a36Sopenharmony_ciint prestera_hw_nh_entries_set(struct prestera_switch *sw, int count,
27262306a36Sopenharmony_ci			       struct prestera_neigh_info *nhs, u32 grp_id);
27362306a36Sopenharmony_ciint prestera_hw_nhgrp_blk_get(struct prestera_switch *sw,
27462306a36Sopenharmony_ci			      u8 *hw_state, u32 buf_size /* Buffer in bytes */);
27562306a36Sopenharmony_ciint prestera_hw_nh_group_create(struct prestera_switch *sw, u16 nh_count,
27662306a36Sopenharmony_ci				u32 *grp_id);
27762306a36Sopenharmony_ciint prestera_hw_nh_group_delete(struct prestera_switch *sw, u16 nh_count,
27862306a36Sopenharmony_ci				u32 grp_id);
27962306a36Sopenharmony_ci
28062306a36Sopenharmony_ci/* Event handlers */
28162306a36Sopenharmony_ciint prestera_hw_event_handler_register(struct prestera_switch *sw,
28262306a36Sopenharmony_ci				       enum prestera_event_type type,
28362306a36Sopenharmony_ci				       prestera_event_cb_t fn,
28462306a36Sopenharmony_ci				       void *arg);
28562306a36Sopenharmony_civoid prestera_hw_event_handler_unregister(struct prestera_switch *sw,
28662306a36Sopenharmony_ci					  enum prestera_event_type type,
28762306a36Sopenharmony_ci					  prestera_event_cb_t fn);
28862306a36Sopenharmony_ci
28962306a36Sopenharmony_ci/* RX/TX */
29062306a36Sopenharmony_ciint prestera_hw_rxtx_init(struct prestera_switch *sw,
29162306a36Sopenharmony_ci			  struct prestera_rxtx_params *params);
29262306a36Sopenharmony_ci
29362306a36Sopenharmony_ci/* LAG API */
29462306a36Sopenharmony_ciint prestera_hw_lag_member_add(struct prestera_port *port, u16 lag_id);
29562306a36Sopenharmony_ciint prestera_hw_lag_member_del(struct prestera_port *port, u16 lag_id);
29662306a36Sopenharmony_ciint prestera_hw_lag_member_enable(struct prestera_port *port, u16 lag_id,
29762306a36Sopenharmony_ci				  bool enable);
29862306a36Sopenharmony_ciint prestera_hw_lag_fdb_add(struct prestera_switch *sw, u16 lag_id,
29962306a36Sopenharmony_ci			    const unsigned char *mac, u16 vid, bool dynamic);
30062306a36Sopenharmony_ciint prestera_hw_lag_fdb_del(struct prestera_switch *sw, u16 lag_id,
30162306a36Sopenharmony_ci			    const unsigned char *mac, u16 vid);
30262306a36Sopenharmony_ciint prestera_hw_fdb_flush_lag(struct prestera_switch *sw, u16 lag_id,
30362306a36Sopenharmony_ci			      u32 mode);
30462306a36Sopenharmony_ciint prestera_hw_fdb_flush_lag_vlan(struct prestera_switch *sw,
30562306a36Sopenharmony_ci				   u16 lag_id, u16 vid, u32 mode);
30662306a36Sopenharmony_ci
30762306a36Sopenharmony_ci/* HW trap/drop counters API */
30862306a36Sopenharmony_ciint
30962306a36Sopenharmony_ciprestera_hw_cpu_code_counters_get(struct prestera_switch *sw, u8 code,
31062306a36Sopenharmony_ci				  enum prestera_hw_cpu_code_cnt_t counter_type,
31162306a36Sopenharmony_ci				  u64 *packet_count);
31262306a36Sopenharmony_ci
31362306a36Sopenharmony_ci/* Policer API */
31462306a36Sopenharmony_ciint prestera_hw_policer_create(struct prestera_switch *sw, u8 type,
31562306a36Sopenharmony_ci			       u32 *policer_id);
31662306a36Sopenharmony_ciint prestera_hw_policer_release(struct prestera_switch *sw,
31762306a36Sopenharmony_ci				u32 policer_id);
31862306a36Sopenharmony_ciint prestera_hw_policer_sr_tcm_set(struct prestera_switch *sw,
31962306a36Sopenharmony_ci				   u32 policer_id, u64 cir, u32 cbs);
32062306a36Sopenharmony_ci
32162306a36Sopenharmony_ci/* Flood domain / MDB API */
32262306a36Sopenharmony_ciint prestera_hw_flood_domain_create(struct prestera_flood_domain *domain);
32362306a36Sopenharmony_ciint prestera_hw_flood_domain_destroy(struct prestera_flood_domain *domain);
32462306a36Sopenharmony_ciint prestera_hw_flood_domain_ports_set(struct prestera_flood_domain *domain);
32562306a36Sopenharmony_ciint prestera_hw_flood_domain_ports_reset(struct prestera_flood_domain *domain);
32662306a36Sopenharmony_ci
32762306a36Sopenharmony_ciint prestera_hw_mdb_create(struct prestera_mdb_entry *mdb);
32862306a36Sopenharmony_ciint prestera_hw_mdb_destroy(struct prestera_mdb_entry *mdb);
32962306a36Sopenharmony_ci
33062306a36Sopenharmony_ci#endif /* _PRESTERA_HW_H_ */
331