Loading...
1/* SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0 */
2/* Copyright (c) 2019-2020 Marvell International Ltd. All rights reserved. */
3
4#ifndef _PRESTERA_HW_H_
5#define _PRESTERA_HW_H_
6
7#include <linux/types.h>
8
9enum prestera_accept_frm_type {
10 PRESTERA_ACCEPT_FRAME_TYPE_TAGGED,
11 PRESTERA_ACCEPT_FRAME_TYPE_UNTAGGED,
12 PRESTERA_ACCEPT_FRAME_TYPE_ALL,
13};
14
15enum prestera_fdb_flush_mode {
16 PRESTERA_FDB_FLUSH_MODE_DYNAMIC = BIT(0),
17 PRESTERA_FDB_FLUSH_MODE_STATIC = BIT(1),
18 PRESTERA_FDB_FLUSH_MODE_ALL = PRESTERA_FDB_FLUSH_MODE_DYNAMIC
19 | PRESTERA_FDB_FLUSH_MODE_STATIC,
20};
21
22enum {
23 PRESTERA_LINK_MODE_10baseT_Half,
24 PRESTERA_LINK_MODE_10baseT_Full,
25 PRESTERA_LINK_MODE_100baseT_Half,
26 PRESTERA_LINK_MODE_100baseT_Full,
27 PRESTERA_LINK_MODE_1000baseT_Half,
28 PRESTERA_LINK_MODE_1000baseT_Full,
29 PRESTERA_LINK_MODE_1000baseX_Full,
30 PRESTERA_LINK_MODE_1000baseKX_Full,
31 PRESTERA_LINK_MODE_2500baseX_Full,
32 PRESTERA_LINK_MODE_10GbaseKR_Full,
33 PRESTERA_LINK_MODE_10GbaseSR_Full,
34 PRESTERA_LINK_MODE_10GbaseLR_Full,
35 PRESTERA_LINK_MODE_20GbaseKR2_Full,
36 PRESTERA_LINK_MODE_25GbaseCR_Full,
37 PRESTERA_LINK_MODE_25GbaseKR_Full,
38 PRESTERA_LINK_MODE_25GbaseSR_Full,
39 PRESTERA_LINK_MODE_40GbaseKR4_Full,
40 PRESTERA_LINK_MODE_40GbaseCR4_Full,
41 PRESTERA_LINK_MODE_40GbaseSR4_Full,
42 PRESTERA_LINK_MODE_50GbaseCR2_Full,
43 PRESTERA_LINK_MODE_50GbaseKR2_Full,
44 PRESTERA_LINK_MODE_50GbaseSR2_Full,
45 PRESTERA_LINK_MODE_100GbaseKR4_Full,
46 PRESTERA_LINK_MODE_100GbaseSR4_Full,
47 PRESTERA_LINK_MODE_100GbaseCR4_Full,
48
49 PRESTERA_LINK_MODE_MAX
50};
51
52enum {
53 PRESTERA_PORT_TYPE_NONE,
54 PRESTERA_PORT_TYPE_TP,
55 PRESTERA_PORT_TYPE_AUI,
56 PRESTERA_PORT_TYPE_MII,
57 PRESTERA_PORT_TYPE_FIBRE,
58 PRESTERA_PORT_TYPE_BNC,
59 PRESTERA_PORT_TYPE_DA,
60 PRESTERA_PORT_TYPE_OTHER,
61
62 PRESTERA_PORT_TYPE_MAX
63};
64
65enum {
66 PRESTERA_PORT_TCVR_COPPER,
67 PRESTERA_PORT_TCVR_SFP,
68
69 PRESTERA_PORT_TCVR_MAX
70};
71
72enum {
73 PRESTERA_PORT_FEC_OFF,
74 PRESTERA_PORT_FEC_BASER,
75 PRESTERA_PORT_FEC_RS,
76
77 PRESTERA_PORT_FEC_MAX
78};
79
80enum {
81 PRESTERA_PORT_DUPLEX_HALF,
82 PRESTERA_PORT_DUPLEX_FULL,
83};
84
85enum {
86 PRESTERA_STP_DISABLED,
87 PRESTERA_STP_BLOCK_LISTEN,
88 PRESTERA_STP_LEARN,
89 PRESTERA_STP_FORWARD,
90};
91
92enum prestera_hw_cpu_code_cnt_t {
93 PRESTERA_HW_CPU_CODE_CNT_TYPE_DROP = 0,
94 PRESTERA_HW_CPU_CODE_CNT_TYPE_TRAP = 1,
95};
96
97struct prestera_switch;
98struct prestera_port;
99struct prestera_port_stats;
100struct prestera_port_caps;
101enum prestera_event_type;
102struct prestera_event;
103struct prestera_acl_rule;
104
105typedef void (*prestera_event_cb_t)
106 (struct prestera_switch *sw, struct prestera_event *evt, void *arg);
107
108struct prestera_rxtx_params;
109
110/* Switch API */
111int prestera_hw_switch_init(struct prestera_switch *sw);
112void prestera_hw_switch_fini(struct prestera_switch *sw);
113int prestera_hw_switch_ageing_set(struct prestera_switch *sw, u32 ageing_ms);
114int prestera_hw_switch_mac_set(struct prestera_switch *sw, const char *mac);
115
116/* Port API */
117int prestera_hw_port_info_get(const struct prestera_port *port,
118 u32 *dev_id, u32 *hw_id, u16 *fp_id);
119int prestera_hw_port_state_set(const struct prestera_port *port,
120 bool admin_state);
121int prestera_hw_port_mtu_set(const struct prestera_port *port, u32 mtu);
122int prestera_hw_port_mtu_get(const struct prestera_port *port, u32 *mtu);
123int prestera_hw_port_mac_set(const struct prestera_port *port, const char *mac);
124int prestera_hw_port_mac_get(const struct prestera_port *port, char *mac);
125int prestera_hw_port_cap_get(const struct prestera_port *port,
126 struct prestera_port_caps *caps);
127int prestera_hw_port_remote_cap_get(const struct prestera_port *port,
128 u64 *link_mode_bitmap);
129int prestera_hw_port_remote_fc_get(const struct prestera_port *port,
130 bool *pause, bool *asym_pause);
131int prestera_hw_port_type_get(const struct prestera_port *port, u8 *type);
132int prestera_hw_port_fec_get(const struct prestera_port *port, u8 *fec);
133int prestera_hw_port_fec_set(const struct prestera_port *port, u8 fec);
134int prestera_hw_port_autoneg_set(const struct prestera_port *port,
135 bool autoneg, u64 link_modes, u8 fec);
136int prestera_hw_port_autoneg_restart(struct prestera_port *port);
137int prestera_hw_port_duplex_get(const struct prestera_port *port, u8 *duplex);
138int prestera_hw_port_stats_get(const struct prestera_port *port,
139 struct prestera_port_stats *stats);
140int prestera_hw_port_link_mode_set(const struct prestera_port *port, u32 mode);
141int prestera_hw_port_link_mode_get(const struct prestera_port *port, u32 *mode);
142int prestera_hw_port_mdix_get(const struct prestera_port *port, u8 *status,
143 u8 *admin_mode);
144int prestera_hw_port_mdix_set(const struct prestera_port *port, u8 mode);
145int prestera_hw_port_speed_get(const struct prestera_port *port, u32 *speed);
146int prestera_hw_port_learning_set(struct prestera_port *port, bool enable);
147int prestera_hw_port_flood_set(struct prestera_port *port, unsigned long mask,
148 unsigned long val);
149int prestera_hw_port_accept_frm_type(struct prestera_port *port,
150 enum prestera_accept_frm_type type);
151/* Vlan API */
152int prestera_hw_vlan_create(struct prestera_switch *sw, u16 vid);
153int prestera_hw_vlan_delete(struct prestera_switch *sw, u16 vid);
154int prestera_hw_vlan_port_set(struct prestera_port *port, u16 vid,
155 bool is_member, bool untagged);
156int prestera_hw_vlan_port_vid_set(struct prestera_port *port, u16 vid);
157int prestera_hw_vlan_port_stp_set(struct prestera_port *port, u16 vid, u8 state);
158
159/* FDB API */
160int prestera_hw_fdb_add(struct prestera_port *port, const unsigned char *mac,
161 u16 vid, bool dynamic);
162int prestera_hw_fdb_del(struct prestera_port *port, const unsigned char *mac,
163 u16 vid);
164int prestera_hw_fdb_flush_port(struct prestera_port *port, u32 mode);
165int prestera_hw_fdb_flush_vlan(struct prestera_switch *sw, u16 vid, u32 mode);
166int prestera_hw_fdb_flush_port_vlan(struct prestera_port *port, u16 vid,
167 u32 mode);
168
169/* Bridge API */
170int prestera_hw_bridge_create(struct prestera_switch *sw, u16 *bridge_id);
171int prestera_hw_bridge_delete(struct prestera_switch *sw, u16 bridge_id);
172int prestera_hw_bridge_port_add(struct prestera_port *port, u16 bridge_id);
173int prestera_hw_bridge_port_delete(struct prestera_port *port, u16 bridge_id);
174
175/* ACL API */
176int prestera_hw_acl_ruleset_create(struct prestera_switch *sw,
177 u16 *ruleset_id);
178int prestera_hw_acl_ruleset_del(struct prestera_switch *sw,
179 u16 ruleset_id);
180int prestera_hw_acl_rule_add(struct prestera_switch *sw,
181 struct prestera_acl_rule *rule,
182 u32 *rule_id);
183int prestera_hw_acl_rule_del(struct prestera_switch *sw, u32 rule_id);
184int prestera_hw_acl_rule_stats_get(struct prestera_switch *sw,
185 u32 rule_id, u64 *packets, u64 *bytes);
186int prestera_hw_acl_port_bind(const struct prestera_port *port,
187 u16 ruleset_id);
188int prestera_hw_acl_port_unbind(const struct prestera_port *port,
189 u16 ruleset_id);
190
191/* SPAN API */
192int prestera_hw_span_get(const struct prestera_port *port, u8 *span_id);
193int prestera_hw_span_bind(const struct prestera_port *port, u8 span_id);
194int prestera_hw_span_unbind(const struct prestera_port *port);
195int prestera_hw_span_release(struct prestera_switch *sw, u8 span_id);
196
197/* Event handlers */
198int prestera_hw_event_handler_register(struct prestera_switch *sw,
199 enum prestera_event_type type,
200 prestera_event_cb_t fn,
201 void *arg);
202void prestera_hw_event_handler_unregister(struct prestera_switch *sw,
203 enum prestera_event_type type,
204 prestera_event_cb_t fn);
205
206/* RX/TX */
207int prestera_hw_rxtx_init(struct prestera_switch *sw,
208 struct prestera_rxtx_params *params);
209int prestera_hw_rxtx_port_init(struct prestera_port *port);
210
211/* LAG API */
212int prestera_hw_lag_member_add(struct prestera_port *port, u16 lag_id);
213int prestera_hw_lag_member_del(struct prestera_port *port, u16 lag_id);
214int prestera_hw_lag_member_enable(struct prestera_port *port, u16 lag_id,
215 bool enable);
216int prestera_hw_lag_fdb_add(struct prestera_switch *sw, u16 lag_id,
217 const unsigned char *mac, u16 vid, bool dynamic);
218int prestera_hw_lag_fdb_del(struct prestera_switch *sw, u16 lag_id,
219 const unsigned char *mac, u16 vid);
220int prestera_hw_fdb_flush_lag(struct prestera_switch *sw, u16 lag_id,
221 u32 mode);
222int prestera_hw_fdb_flush_lag_vlan(struct prestera_switch *sw,
223 u16 lag_id, u16 vid, u32 mode);
224
225/* HW trap/drop counters API */
226int
227prestera_hw_cpu_code_counters_get(struct prestera_switch *sw, u8 code,
228 enum prestera_hw_cpu_code_cnt_t counter_type,
229 u64 *packet_count);
230
231#endif /* _PRESTERA_HW_H_ */
1/* SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0 */
2/* Copyright (c) 2019-2020 Marvell International Ltd. All rights reserved. */
3
4#ifndef _PRESTERA_HW_H_
5#define _PRESTERA_HW_H_
6
7#include <linux/types.h>
8#include "prestera_acl.h"
9
10enum prestera_accept_frm_type {
11 PRESTERA_ACCEPT_FRAME_TYPE_TAGGED,
12 PRESTERA_ACCEPT_FRAME_TYPE_UNTAGGED,
13 PRESTERA_ACCEPT_FRAME_TYPE_ALL,
14};
15
16enum prestera_fdb_flush_mode {
17 PRESTERA_FDB_FLUSH_MODE_DYNAMIC = BIT(0),
18 PRESTERA_FDB_FLUSH_MODE_STATIC = BIT(1),
19 PRESTERA_FDB_FLUSH_MODE_ALL = PRESTERA_FDB_FLUSH_MODE_DYNAMIC
20 | PRESTERA_FDB_FLUSH_MODE_STATIC,
21};
22
23enum {
24 PRESTERA_MAC_MODE_INTERNAL,
25 PRESTERA_MAC_MODE_SGMII,
26 PRESTERA_MAC_MODE_1000BASE_X,
27 PRESTERA_MAC_MODE_KR,
28 PRESTERA_MAC_MODE_KR2,
29 PRESTERA_MAC_MODE_KR4,
30 PRESTERA_MAC_MODE_CR,
31 PRESTERA_MAC_MODE_CR2,
32 PRESTERA_MAC_MODE_CR4,
33 PRESTERA_MAC_MODE_SR_LR,
34 PRESTERA_MAC_MODE_SR_LR2,
35 PRESTERA_MAC_MODE_SR_LR4,
36
37 PRESTERA_MAC_MODE_MAX
38};
39
40enum {
41 PRESTERA_LINK_MODE_10baseT_Half,
42 PRESTERA_LINK_MODE_10baseT_Full,
43 PRESTERA_LINK_MODE_100baseT_Half,
44 PRESTERA_LINK_MODE_100baseT_Full,
45 PRESTERA_LINK_MODE_1000baseT_Half,
46 PRESTERA_LINK_MODE_1000baseT_Full,
47 PRESTERA_LINK_MODE_1000baseX_Full,
48 PRESTERA_LINK_MODE_1000baseKX_Full,
49 PRESTERA_LINK_MODE_2500baseX_Full,
50 PRESTERA_LINK_MODE_10GbaseKR_Full,
51 PRESTERA_LINK_MODE_10GbaseSR_Full,
52 PRESTERA_LINK_MODE_10GbaseLR_Full,
53 PRESTERA_LINK_MODE_20GbaseKR2_Full,
54 PRESTERA_LINK_MODE_25GbaseCR_Full,
55 PRESTERA_LINK_MODE_25GbaseKR_Full,
56 PRESTERA_LINK_MODE_25GbaseSR_Full,
57 PRESTERA_LINK_MODE_40GbaseKR4_Full,
58 PRESTERA_LINK_MODE_40GbaseCR4_Full,
59 PRESTERA_LINK_MODE_40GbaseSR4_Full,
60 PRESTERA_LINK_MODE_50GbaseCR2_Full,
61 PRESTERA_LINK_MODE_50GbaseKR2_Full,
62 PRESTERA_LINK_MODE_50GbaseSR2_Full,
63 PRESTERA_LINK_MODE_100GbaseKR4_Full,
64 PRESTERA_LINK_MODE_100GbaseSR4_Full,
65 PRESTERA_LINK_MODE_100GbaseCR4_Full,
66
67 PRESTERA_LINK_MODE_MAX
68};
69
70enum {
71 PRESTERA_PORT_TYPE_NONE,
72 PRESTERA_PORT_TYPE_TP,
73 PRESTERA_PORT_TYPE_AUI,
74 PRESTERA_PORT_TYPE_MII,
75 PRESTERA_PORT_TYPE_FIBRE,
76 PRESTERA_PORT_TYPE_BNC,
77 PRESTERA_PORT_TYPE_DA,
78 PRESTERA_PORT_TYPE_OTHER,
79
80 PRESTERA_PORT_TYPE_MAX
81};
82
83enum {
84 PRESTERA_PORT_TCVR_COPPER,
85 PRESTERA_PORT_TCVR_SFP,
86
87 PRESTERA_PORT_TCVR_MAX
88};
89
90enum {
91 PRESTERA_PORT_FEC_OFF,
92 PRESTERA_PORT_FEC_BASER,
93 PRESTERA_PORT_FEC_RS,
94
95 PRESTERA_PORT_FEC_MAX
96};
97
98enum {
99 PRESTERA_PORT_DUPLEX_HALF,
100 PRESTERA_PORT_DUPLEX_FULL,
101};
102
103enum {
104 PRESTERA_STP_DISABLED,
105 PRESTERA_STP_BLOCK_LISTEN,
106 PRESTERA_STP_LEARN,
107 PRESTERA_STP_FORWARD,
108};
109
110enum {
111 PRESTERA_POLICER_TYPE_INGRESS,
112 PRESTERA_POLICER_TYPE_EGRESS
113};
114
115enum prestera_hw_cpu_code_cnt_t {
116 PRESTERA_HW_CPU_CODE_CNT_TYPE_DROP = 0,
117 PRESTERA_HW_CPU_CODE_CNT_TYPE_TRAP = 1,
118};
119
120enum prestera_hw_vtcam_direction_t {
121 PRESTERA_HW_VTCAM_DIR_INGRESS = 0,
122 PRESTERA_HW_VTCAM_DIR_EGRESS = 1,
123};
124
125enum {
126 PRESTERA_HW_COUNTER_CLIENT_INGRESS_LOOKUP_0 = 0,
127 PRESTERA_HW_COUNTER_CLIENT_INGRESS_LOOKUP_1 = 1,
128 PRESTERA_HW_COUNTER_CLIENT_INGRESS_LOOKUP_2 = 2,
129 PRESTERA_HW_COUNTER_CLIENT_EGRESS_LOOKUP = 3,
130};
131
132struct prestera_switch;
133struct prestera_port;
134struct prestera_port_stats;
135struct prestera_port_caps;
136enum prestera_event_type;
137struct prestera_event;
138
139typedef void (*prestera_event_cb_t)
140 (struct prestera_switch *sw, struct prestera_event *evt, void *arg);
141
142struct prestera_rxtx_params;
143struct prestera_acl_hw_action_info;
144struct prestera_acl_iface;
145struct prestera_counter_stats;
146struct prestera_iface;
147struct prestera_flood_domain;
148struct prestera_mdb_entry;
149struct prestera_neigh_info;
150
151/* Switch API */
152int prestera_hw_switch_init(struct prestera_switch *sw);
153void prestera_hw_switch_fini(struct prestera_switch *sw);
154int prestera_hw_switch_ageing_set(struct prestera_switch *sw, u32 ageing_ms);
155int prestera_hw_switch_mac_set(struct prestera_switch *sw, const char *mac);
156
157/* Port API */
158int prestera_hw_port_info_get(const struct prestera_port *port,
159 u32 *dev_id, u32 *hw_id, u16 *fp_id);
160
161int prestera_hw_port_mac_mode_get(const struct prestera_port *port,
162 u32 *mode, u32 *speed, u8 *duplex, u8 *fec);
163int prestera_hw_port_mac_mode_set(const struct prestera_port *port,
164 bool admin, u32 mode, u8 inband,
165 u32 speed, u8 duplex, u8 fec);
166int prestera_hw_port_phy_mode_get(const struct prestera_port *port,
167 u8 *mdix, u64 *lmode_bmap,
168 bool *fc_pause, bool *fc_asym);
169int prestera_hw_port_phy_mode_set(const struct prestera_port *port,
170 bool admin, bool adv, u32 mode, u64 modes,
171 u8 mdix);
172
173int prestera_hw_port_mtu_set(const struct prestera_port *port, u32 mtu);
174int prestera_hw_port_mtu_get(const struct prestera_port *port, u32 *mtu);
175int prestera_hw_port_mac_set(const struct prestera_port *port, const char *mac);
176int prestera_hw_port_mac_get(const struct prestera_port *port, char *mac);
177int prestera_hw_port_cap_get(const struct prestera_port *port,
178 struct prestera_port_caps *caps);
179int prestera_hw_port_type_get(const struct prestera_port *port, u8 *type);
180int prestera_hw_port_autoneg_restart(struct prestera_port *port);
181int prestera_hw_port_stats_get(const struct prestera_port *port,
182 struct prestera_port_stats *stats);
183int prestera_hw_port_speed_get(const struct prestera_port *port, u32 *speed);
184int prestera_hw_port_learning_set(struct prestera_port *port, bool enable);
185int prestera_hw_port_uc_flood_set(const struct prestera_port *port, bool flood);
186int prestera_hw_port_mc_flood_set(const struct prestera_port *port, bool flood);
187int prestera_hw_port_br_locked_set(const struct prestera_port *port,
188 bool br_locked);
189int prestera_hw_port_accept_frm_type(struct prestera_port *port,
190 enum prestera_accept_frm_type type);
191/* Vlan API */
192int prestera_hw_vlan_create(struct prestera_switch *sw, u16 vid);
193int prestera_hw_vlan_delete(struct prestera_switch *sw, u16 vid);
194int prestera_hw_vlan_port_set(struct prestera_port *port, u16 vid,
195 bool is_member, bool untagged);
196int prestera_hw_vlan_port_vid_set(struct prestera_port *port, u16 vid);
197int prestera_hw_vlan_port_stp_set(struct prestera_port *port, u16 vid, u8 state);
198
199/* FDB API */
200int prestera_hw_fdb_add(struct prestera_port *port, const unsigned char *mac,
201 u16 vid, bool dynamic);
202int prestera_hw_fdb_del(struct prestera_port *port, const unsigned char *mac,
203 u16 vid);
204int prestera_hw_fdb_flush_port(struct prestera_port *port, u32 mode);
205int prestera_hw_fdb_flush_vlan(struct prestera_switch *sw, u16 vid, u32 mode);
206int prestera_hw_fdb_flush_port_vlan(struct prestera_port *port, u16 vid,
207 u32 mode);
208
209/* Bridge API */
210int prestera_hw_bridge_create(struct prestera_switch *sw, u16 *bridge_id);
211int prestera_hw_bridge_delete(struct prestera_switch *sw, u16 bridge_id);
212int prestera_hw_bridge_port_add(struct prestera_port *port, u16 bridge_id);
213int prestera_hw_bridge_port_delete(struct prestera_port *port, u16 bridge_id);
214
215/* vTCAM API */
216int prestera_hw_vtcam_create(struct prestera_switch *sw,
217 u8 lookup, const u32 *keymask, u32 *vtcam_id,
218 enum prestera_hw_vtcam_direction_t direction);
219int prestera_hw_vtcam_rule_add(struct prestera_switch *sw, u32 vtcam_id,
220 u32 prio, void *key, void *keymask,
221 struct prestera_acl_hw_action_info *act,
222 u8 n_act, u32 *rule_id);
223int prestera_hw_vtcam_rule_del(struct prestera_switch *sw,
224 u32 vtcam_id, u32 rule_id);
225int prestera_hw_vtcam_destroy(struct prestera_switch *sw, u32 vtcam_id);
226int prestera_hw_vtcam_iface_bind(struct prestera_switch *sw,
227 struct prestera_acl_iface *iface,
228 u32 vtcam_id, u16 pcl_id);
229int prestera_hw_vtcam_iface_unbind(struct prestera_switch *sw,
230 struct prestera_acl_iface *iface,
231 u32 vtcam_id);
232
233/* Counter API */
234int prestera_hw_counter_trigger(struct prestera_switch *sw, u32 block_id);
235int prestera_hw_counter_abort(struct prestera_switch *sw);
236int prestera_hw_counters_get(struct prestera_switch *sw, u32 idx,
237 u32 *len, bool *done,
238 struct prestera_counter_stats *stats);
239int prestera_hw_counter_block_get(struct prestera_switch *sw,
240 u32 client, u32 *block_id, u32 *offset,
241 u32 *num_counters);
242int prestera_hw_counter_block_release(struct prestera_switch *sw,
243 u32 block_id);
244int prestera_hw_counter_clear(struct prestera_switch *sw, u32 block_id,
245 u32 counter_id);
246
247/* SPAN API */
248int prestera_hw_span_get(const struct prestera_port *port, u8 *span_id);
249int prestera_hw_span_bind(const struct prestera_port *port, u8 span_id,
250 bool ingress);
251int prestera_hw_span_unbind(const struct prestera_port *port, bool ingress);
252int prestera_hw_span_release(struct prestera_switch *sw, u8 span_id);
253
254/* Router API */
255int prestera_hw_rif_create(struct prestera_switch *sw,
256 struct prestera_iface *iif, u8 *mac, u16 *rif_id);
257int prestera_hw_rif_delete(struct prestera_switch *sw, u16 rif_id,
258 struct prestera_iface *iif);
259
260/* Virtual Router API */
261int prestera_hw_vr_create(struct prestera_switch *sw, u16 *vr_id);
262int prestera_hw_vr_delete(struct prestera_switch *sw, u16 vr_id);
263
264/* LPM PI */
265int prestera_hw_lpm_add(struct prestera_switch *sw, u16 vr_id,
266 __be32 dst, u32 dst_len, u32 grp_id);
267int prestera_hw_lpm_del(struct prestera_switch *sw, u16 vr_id,
268 __be32 dst, u32 dst_len);
269
270/* NH API */
271int prestera_hw_nh_entries_set(struct prestera_switch *sw, int count,
272 struct prestera_neigh_info *nhs, u32 grp_id);
273int prestera_hw_nhgrp_blk_get(struct prestera_switch *sw,
274 u8 *hw_state, u32 buf_size /* Buffer in bytes */);
275int prestera_hw_nh_group_create(struct prestera_switch *sw, u16 nh_count,
276 u32 *grp_id);
277int prestera_hw_nh_group_delete(struct prestera_switch *sw, u16 nh_count,
278 u32 grp_id);
279
280/* Event handlers */
281int prestera_hw_event_handler_register(struct prestera_switch *sw,
282 enum prestera_event_type type,
283 prestera_event_cb_t fn,
284 void *arg);
285void prestera_hw_event_handler_unregister(struct prestera_switch *sw,
286 enum prestera_event_type type,
287 prestera_event_cb_t fn);
288
289/* RX/TX */
290int prestera_hw_rxtx_init(struct prestera_switch *sw,
291 struct prestera_rxtx_params *params);
292
293/* LAG API */
294int prestera_hw_lag_member_add(struct prestera_port *port, u16 lag_id);
295int prestera_hw_lag_member_del(struct prestera_port *port, u16 lag_id);
296int prestera_hw_lag_member_enable(struct prestera_port *port, u16 lag_id,
297 bool enable);
298int prestera_hw_lag_fdb_add(struct prestera_switch *sw, u16 lag_id,
299 const unsigned char *mac, u16 vid, bool dynamic);
300int prestera_hw_lag_fdb_del(struct prestera_switch *sw, u16 lag_id,
301 const unsigned char *mac, u16 vid);
302int prestera_hw_fdb_flush_lag(struct prestera_switch *sw, u16 lag_id,
303 u32 mode);
304int prestera_hw_fdb_flush_lag_vlan(struct prestera_switch *sw,
305 u16 lag_id, u16 vid, u32 mode);
306
307/* HW trap/drop counters API */
308int
309prestera_hw_cpu_code_counters_get(struct prestera_switch *sw, u8 code,
310 enum prestera_hw_cpu_code_cnt_t counter_type,
311 u64 *packet_count);
312
313/* Policer API */
314int prestera_hw_policer_create(struct prestera_switch *sw, u8 type,
315 u32 *policer_id);
316int prestera_hw_policer_release(struct prestera_switch *sw,
317 u32 policer_id);
318int prestera_hw_policer_sr_tcm_set(struct prestera_switch *sw,
319 u32 policer_id, u64 cir, u32 cbs);
320
321/* Flood domain / MDB API */
322int prestera_hw_flood_domain_create(struct prestera_flood_domain *domain);
323int prestera_hw_flood_domain_destroy(struct prestera_flood_domain *domain);
324int prestera_hw_flood_domain_ports_set(struct prestera_flood_domain *domain);
325int prestera_hw_flood_domain_ports_reset(struct prestera_flood_domain *domain);
326
327int prestera_hw_mdb_create(struct prestera_mdb_entry *mdb);
328int prestera_hw_mdb_destroy(struct prestera_mdb_entry *mdb);
329
330#endif /* _PRESTERA_HW_H_ */