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