Lines Matching refs:mlxsw_sp
62 static int mlxsw_sp_rx_listener(struct mlxsw_sp *mlxsw_sp, struct sk_buff *skb, in mlxsw_sp_rx_listener() argument
69 dev_warn_ratelimited(mlxsw_sp->bus_info->dev, "Port %d: skb received for non-existent port\n", in mlxsw_sp_rx_listener()
93 struct mlxsw_sp *mlxsw_sp; in mlxsw_sp_rx_drop_listener() local
97 mlxsw_sp = devlink_trap_ctx_priv(trap_ctx); in mlxsw_sp_rx_drop_listener()
98 mlxsw_sp_port = mlxsw_sp->ports[local_port]; in mlxsw_sp_rx_drop_listener()
100 err = mlxsw_sp_rx_listener(mlxsw_sp, skb, local_port, mlxsw_sp_port); in mlxsw_sp_rx_drop_listener()
104 devlink = priv_to_devlink(mlxsw_sp->core); in mlxsw_sp_rx_drop_listener()
105 in_devlink_port = mlxsw_core_port_devlink_port_get(mlxsw_sp->core, in mlxsw_sp_rx_drop_listener()
119 struct mlxsw_sp *mlxsw_sp; in mlxsw_sp_rx_acl_drop_listener() local
123 mlxsw_sp = devlink_trap_ctx_priv(trap_ctx); in mlxsw_sp_rx_acl_drop_listener()
124 mlxsw_sp_port = mlxsw_sp->ports[local_port]; in mlxsw_sp_rx_acl_drop_listener()
126 err = mlxsw_sp_rx_listener(mlxsw_sp, skb, local_port, mlxsw_sp_port); in mlxsw_sp_rx_acl_drop_listener()
130 devlink = priv_to_devlink(mlxsw_sp->core); in mlxsw_sp_rx_acl_drop_listener()
131 in_devlink_port = mlxsw_core_port_devlink_port_get(mlxsw_sp->core, in mlxsw_sp_rx_acl_drop_listener()
135 fa_cookie = mlxsw_sp_acl_act_cookie_lookup(mlxsw_sp, cookie_index); in mlxsw_sp_rx_acl_drop_listener()
146 struct mlxsw_sp *mlxsw_sp; in __mlxsw_sp_rx_no_mark_listener() local
150 mlxsw_sp = devlink_trap_ctx_priv(trap_ctx); in __mlxsw_sp_rx_no_mark_listener()
151 mlxsw_sp_port = mlxsw_sp->ports[local_port]; in __mlxsw_sp_rx_no_mark_listener()
153 err = mlxsw_sp_rx_listener(mlxsw_sp, skb, local_port, mlxsw_sp_port); in __mlxsw_sp_rx_no_mark_listener()
157 devlink = priv_to_devlink(mlxsw_sp->core); in __mlxsw_sp_rx_no_mark_listener()
158 in_devlink_port = mlxsw_core_port_devlink_port_get(mlxsw_sp->core, in __mlxsw_sp_rx_no_mark_listener()
197 struct mlxsw_sp *mlxsw_sp = devlink_trap_ctx_priv(trap_ctx); in mlxsw_sp_rx_ptp_listener() local
208 mlxsw_sp_ptp_receive(mlxsw_sp, skb, local_port); in mlxsw_sp_rx_ptp_listener()
212 mlxsw_sp_sample_tx_port_get(struct mlxsw_sp *mlxsw_sp, in mlxsw_sp_sample_tx_port_get() argument
221 local_port = mlxsw_core_lag_mapping_get(mlxsw_sp->core, in mlxsw_sp_sample_tx_port_get()
227 if (local_port >= mlxsw_core_max_ports(mlxsw_sp->core)) in mlxsw_sp_sample_tx_port_get()
230 return mlxsw_sp->ports[local_port]; in mlxsw_sp_sample_tx_port_get()
238 static void mlxsw_sp_psample_md_init(struct mlxsw_sp *mlxsw_sp, in mlxsw_sp_psample_md_init() argument
248 mlxsw_sp_port = mlxsw_sp_sample_tx_port_get(mlxsw_sp, rx_md_info); in mlxsw_sp_psample_md_init()
263 struct mlxsw_sp *mlxsw_sp = devlink_trap_ctx_priv(trap_ctx); in mlxsw_sp_rx_sample_listener() local
274 mlxsw_sp_port = mlxsw_sp->ports[local_port]; in mlxsw_sp_rx_sample_listener()
280 params = mlxsw_sp_sample_trigger_params_lookup(mlxsw_sp, &trigger); in mlxsw_sp_rx_sample_listener()
288 mlxsw_sp_psample_md_init(mlxsw_sp, &md, skb, in mlxsw_sp_rx_sample_listener()
300 struct mlxsw_sp *mlxsw_sp = devlink_trap_ctx_priv(trap_ctx); in mlxsw_sp_rx_sample_tx_listener() local
317 mlxsw_sp_port = mlxsw_sp->ports[local_port]; in mlxsw_sp_rx_sample_tx_listener()
324 mlxsw_sp_port_tx = mlxsw_sp_sample_tx_port_get(mlxsw_sp, rx_md_info); in mlxsw_sp_rx_sample_tx_listener()
330 params = mlxsw_sp_sample_trigger_params_lookup(mlxsw_sp, &trigger); in mlxsw_sp_rx_sample_tx_listener()
338 mlxsw_sp_psample_md_init(mlxsw_sp, &md, skb, in mlxsw_sp_rx_sample_tx_listener()
349 struct mlxsw_sp *mlxsw_sp = devlink_trap_ctx_priv(trap_ctx); in mlxsw_sp_rx_sample_acl_listener() local
362 mlxsw_sp_port = mlxsw_sp->ports[local_port]; in mlxsw_sp_rx_sample_acl_listener()
366 params = mlxsw_sp_sample_trigger_params_lookup(mlxsw_sp, &trigger); in mlxsw_sp_rx_sample_acl_listener()
374 mlxsw_sp_psample_md_init(mlxsw_sp, &md, skb, in mlxsw_sp_rx_sample_acl_listener()
1166 mlxsw_sp_trap_policer_item_lookup(struct mlxsw_sp *mlxsw_sp, u32 id) in mlxsw_sp_trap_policer_item_lookup() argument
1168 struct mlxsw_sp_trap *trap = mlxsw_sp->trap; in mlxsw_sp_trap_policer_item_lookup()
1180 mlxsw_sp_trap_group_item_lookup(struct mlxsw_sp *mlxsw_sp, u16 id) in mlxsw_sp_trap_group_item_lookup() argument
1182 struct mlxsw_sp_trap *trap = mlxsw_sp->trap; in mlxsw_sp_trap_group_item_lookup()
1194 mlxsw_sp_trap_item_lookup(struct mlxsw_sp *mlxsw_sp, u16 id) in mlxsw_sp_trap_item_lookup() argument
1196 struct mlxsw_sp_trap *trap = mlxsw_sp->trap; in mlxsw_sp_trap_item_lookup()
1207 static int mlxsw_sp_trap_cpu_policers_set(struct mlxsw_sp *mlxsw_sp) in mlxsw_sp_trap_cpu_policers_set() argument
1209 struct mlxsw_sp_trap *trap = mlxsw_sp->trap; in mlxsw_sp_trap_cpu_policers_set()
1224 return mlxsw_reg_write(mlxsw_sp->core, MLXSW_REG(qpcr), qpcr_pl); in mlxsw_sp_trap_cpu_policers_set()
1227 static int mlxsw_sp_trap_dummy_group_init(struct mlxsw_sp *mlxsw_sp) in mlxsw_sp_trap_dummy_group_init() argument
1232 mlxsw_sp->trap->thin_policer_hw_id, 0, 1); in mlxsw_sp_trap_dummy_group_init()
1233 return mlxsw_reg_write(mlxsw_sp->core, MLXSW_REG(htgt), htgt_pl); in mlxsw_sp_trap_dummy_group_init()
1236 static int mlxsw_sp_trap_policer_items_arr_init(struct mlxsw_sp *mlxsw_sp) in mlxsw_sp_trap_policer_items_arr_init() argument
1240 struct mlxsw_sp_trap *trap = mlxsw_sp->trap; in mlxsw_sp_trap_policer_items_arr_init()
1249 dev_err(mlxsw_sp->bus_info->dev, "Exceeded number of supported packet trap policers\n"); in mlxsw_sp_trap_policer_items_arr_init()
1283 static void mlxsw_sp_trap_policer_items_arr_fini(struct mlxsw_sp *mlxsw_sp) in mlxsw_sp_trap_policer_items_arr_fini() argument
1285 kfree(mlxsw_sp->trap->policer_items_arr); in mlxsw_sp_trap_policer_items_arr_fini()
1288 static int mlxsw_sp_trap_policers_init(struct mlxsw_sp *mlxsw_sp) in mlxsw_sp_trap_policers_init() argument
1290 struct devlink *devlink = priv_to_devlink(mlxsw_sp->core); in mlxsw_sp_trap_policers_init()
1292 struct mlxsw_sp_trap *trap = mlxsw_sp->trap; in mlxsw_sp_trap_policers_init()
1295 err = mlxsw_sp_trap_policer_items_arr_init(mlxsw_sp); in mlxsw_sp_trap_policers_init()
1315 mlxsw_sp_trap_policer_items_arr_fini(mlxsw_sp); in mlxsw_sp_trap_policers_init()
1319 static void mlxsw_sp_trap_policers_fini(struct mlxsw_sp *mlxsw_sp) in mlxsw_sp_trap_policers_fini() argument
1321 struct devlink *devlink = priv_to_devlink(mlxsw_sp->core); in mlxsw_sp_trap_policers_fini()
1323 struct mlxsw_sp_trap *trap = mlxsw_sp->trap; in mlxsw_sp_trap_policers_fini()
1331 mlxsw_sp_trap_policer_items_arr_fini(mlxsw_sp); in mlxsw_sp_trap_policers_fini()
1334 static int mlxsw_sp_trap_group_items_arr_init(struct mlxsw_sp *mlxsw_sp) in mlxsw_sp_trap_group_items_arr_init() argument
1339 struct mlxsw_sp_trap *trap = mlxsw_sp->trap; in mlxsw_sp_trap_group_items_arr_init()
1343 err = mlxsw_sp->trap_ops->groups_init(mlxsw_sp, &spec_group_items_arr, in mlxsw_sp_trap_group_items_arr_init()
1366 static void mlxsw_sp_trap_group_items_arr_fini(struct mlxsw_sp *mlxsw_sp) in mlxsw_sp_trap_group_items_arr_fini() argument
1368 kfree(mlxsw_sp->trap->group_items_arr); in mlxsw_sp_trap_group_items_arr_fini()
1371 static int mlxsw_sp_trap_groups_init(struct mlxsw_sp *mlxsw_sp) in mlxsw_sp_trap_groups_init() argument
1373 struct devlink *devlink = priv_to_devlink(mlxsw_sp->core); in mlxsw_sp_trap_groups_init()
1375 struct mlxsw_sp_trap *trap = mlxsw_sp->trap; in mlxsw_sp_trap_groups_init()
1378 err = mlxsw_sp_trap_group_items_arr_init(mlxsw_sp); in mlxsw_sp_trap_groups_init()
1396 mlxsw_sp_trap_group_items_arr_fini(mlxsw_sp); in mlxsw_sp_trap_groups_init()
1400 static void mlxsw_sp_trap_groups_fini(struct mlxsw_sp *mlxsw_sp) in mlxsw_sp_trap_groups_fini() argument
1402 struct devlink *devlink = priv_to_devlink(mlxsw_sp->core); in mlxsw_sp_trap_groups_fini()
1403 struct mlxsw_sp_trap *trap = mlxsw_sp->trap; in mlxsw_sp_trap_groups_fini()
1412 mlxsw_sp_trap_group_items_arr_fini(mlxsw_sp); in mlxsw_sp_trap_groups_fini()
1421 static int mlxsw_sp_trap_items_arr_init(struct mlxsw_sp *mlxsw_sp) in mlxsw_sp_trap_items_arr_init() argument
1426 struct mlxsw_sp_trap *trap = mlxsw_sp->trap; in mlxsw_sp_trap_items_arr_init()
1430 err = mlxsw_sp->trap_ops->traps_init(mlxsw_sp, &spec_trap_items_arr, in mlxsw_sp_trap_items_arr_init()
1453 static void mlxsw_sp_trap_items_arr_fini(struct mlxsw_sp *mlxsw_sp) in mlxsw_sp_trap_items_arr_fini() argument
1455 kfree(mlxsw_sp->trap->trap_items_arr); in mlxsw_sp_trap_items_arr_fini()
1458 static int mlxsw_sp_traps_init(struct mlxsw_sp *mlxsw_sp) in mlxsw_sp_traps_init() argument
1460 struct devlink *devlink = priv_to_devlink(mlxsw_sp->core); in mlxsw_sp_traps_init()
1461 struct mlxsw_sp_trap *trap = mlxsw_sp->trap; in mlxsw_sp_traps_init()
1465 err = mlxsw_sp_trap_items_arr_init(mlxsw_sp); in mlxsw_sp_traps_init()
1472 mlxsw_sp); in mlxsw_sp_traps_init()
1484 mlxsw_sp_trap_items_arr_fini(mlxsw_sp); in mlxsw_sp_traps_init()
1488 static void mlxsw_sp_traps_fini(struct mlxsw_sp *mlxsw_sp) in mlxsw_sp_traps_fini() argument
1490 struct devlink *devlink = priv_to_devlink(mlxsw_sp->core); in mlxsw_sp_traps_fini()
1491 struct mlxsw_sp_trap *trap = mlxsw_sp->trap; in mlxsw_sp_traps_fini()
1500 mlxsw_sp_trap_items_arr_fini(mlxsw_sp); in mlxsw_sp_traps_fini()
1503 int mlxsw_sp_devlink_traps_init(struct mlxsw_sp *mlxsw_sp) in mlxsw_sp_devlink_traps_init() argument
1507 err = mlxsw_sp_trap_cpu_policers_set(mlxsw_sp); in mlxsw_sp_devlink_traps_init()
1511 err = mlxsw_sp_trap_dummy_group_init(mlxsw_sp); in mlxsw_sp_devlink_traps_init()
1515 err = mlxsw_sp_trap_policers_init(mlxsw_sp); in mlxsw_sp_devlink_traps_init()
1519 err = mlxsw_sp_trap_groups_init(mlxsw_sp); in mlxsw_sp_devlink_traps_init()
1523 err = mlxsw_sp_traps_init(mlxsw_sp); in mlxsw_sp_devlink_traps_init()
1530 mlxsw_sp_trap_groups_fini(mlxsw_sp); in mlxsw_sp_devlink_traps_init()
1532 mlxsw_sp_trap_policers_fini(mlxsw_sp); in mlxsw_sp_devlink_traps_init()
1536 void mlxsw_sp_devlink_traps_fini(struct mlxsw_sp *mlxsw_sp) in mlxsw_sp_devlink_traps_fini() argument
1538 mlxsw_sp_traps_fini(mlxsw_sp); in mlxsw_sp_devlink_traps_fini()
1539 mlxsw_sp_trap_groups_fini(mlxsw_sp); in mlxsw_sp_devlink_traps_fini()
1540 mlxsw_sp_trap_policers_fini(mlxsw_sp); in mlxsw_sp_devlink_traps_fini()
1546 struct mlxsw_sp *mlxsw_sp = mlxsw_core_driver_priv(mlxsw_core); in mlxsw_sp_trap_init() local
1550 trap_item = mlxsw_sp_trap_item_lookup(mlxsw_sp, trap->id); in mlxsw_sp_trap_init()
1572 struct mlxsw_sp *mlxsw_sp = mlxsw_core_driver_priv(mlxsw_core); in mlxsw_sp_trap_fini() local
1576 trap_item = mlxsw_sp_trap_item_lookup(mlxsw_sp, trap->id); in mlxsw_sp_trap_fini()
1595 struct mlxsw_sp *mlxsw_sp = mlxsw_core_driver_priv(mlxsw_core); in mlxsw_sp_trap_action_set() local
1599 trap_item = mlxsw_sp_trap_item_lookup(mlxsw_sp, trap->id); in mlxsw_sp_trap_action_set()
1640 struct mlxsw_sp *mlxsw_sp = mlxsw_core_driver_priv(mlxsw_core); in __mlxsw_sp_trap_group_init() local
1645 group_item = mlxsw_sp_trap_group_item_lookup(mlxsw_sp, group->id); in __mlxsw_sp_trap_group_init()
1657 policer_item = mlxsw_sp_trap_policer_item_lookup(mlxsw_sp, in __mlxsw_sp_trap_group_init()
1688 mlxsw_sp_trap_policer_item_init(struct mlxsw_sp *mlxsw_sp, in mlxsw_sp_trap_policer_item_init() argument
1691 struct mlxsw_sp_trap *trap = mlxsw_sp->trap; in mlxsw_sp_trap_policer_item_init()
1709 mlxsw_sp_trap_policer_item_fini(struct mlxsw_sp *mlxsw_sp, in mlxsw_sp_trap_policer_item_fini() argument
1712 __clear_bit(policer_item->hw_id, mlxsw_sp->trap->policers_usage); in mlxsw_sp_trap_policer_item_fini()
1730 static int __mlxsw_sp_trap_policer_set(struct mlxsw_sp *mlxsw_sp, u16 hw_id, in __mlxsw_sp_trap_policer_set() argument
1745 return mlxsw_reg_write(mlxsw_sp->core, MLXSW_REG(qpcr), qpcr_pl); in __mlxsw_sp_trap_policer_set()
1751 struct mlxsw_sp *mlxsw_sp = mlxsw_core_driver_priv(mlxsw_core); in mlxsw_sp_trap_policer_init() local
1755 policer_item = mlxsw_sp_trap_policer_item_lookup(mlxsw_sp, policer->id); in mlxsw_sp_trap_policer_init()
1759 err = mlxsw_sp_trap_policer_item_init(mlxsw_sp, policer_item); in mlxsw_sp_trap_policer_init()
1763 err = __mlxsw_sp_trap_policer_set(mlxsw_sp, policer_item->hw_id, in mlxsw_sp_trap_policer_init()
1772 mlxsw_sp_trap_policer_item_fini(mlxsw_sp, policer_item); in mlxsw_sp_trap_policer_init()
1779 struct mlxsw_sp *mlxsw_sp = mlxsw_core_driver_priv(mlxsw_core); in mlxsw_sp_trap_policer_fini() local
1782 policer_item = mlxsw_sp_trap_policer_item_lookup(mlxsw_sp, policer->id); in mlxsw_sp_trap_policer_fini()
1786 mlxsw_sp_trap_policer_item_fini(mlxsw_sp, policer_item); in mlxsw_sp_trap_policer_fini()
1794 struct mlxsw_sp *mlxsw_sp = mlxsw_core_driver_priv(mlxsw_core); in mlxsw_sp_trap_policer_set() local
1797 policer_item = mlxsw_sp_trap_policer_item_lookup(mlxsw_sp, policer->id); in mlxsw_sp_trap_policer_set()
1801 return __mlxsw_sp_trap_policer_set(mlxsw_sp, policer_item->hw_id, in mlxsw_sp_trap_policer_set()
1810 struct mlxsw_sp *mlxsw_sp = mlxsw_core_driver_priv(mlxsw_core); in mlxsw_sp_trap_policer_counter_get() local
1815 policer_item = mlxsw_sp_trap_policer_item_lookup(mlxsw_sp, policer->id); in mlxsw_sp_trap_policer_counter_get()
1821 err = mlxsw_reg_query(mlxsw_sp->core, MLXSW_REG(qpcr), qpcr_pl); in mlxsw_sp_trap_policer_counter_get()
1830 int mlxsw_sp_trap_group_policer_hw_id_get(struct mlxsw_sp *mlxsw_sp, u16 id, in mlxsw_sp_trap_group_policer_hw_id_get() argument
1837 gr_item = mlxsw_sp_trap_group_item_lookup(mlxsw_sp, id); in mlxsw_sp_trap_group_policer_hw_id_get()
1847 pol_item = mlxsw_sp_trap_policer_item_lookup(mlxsw_sp, pol_id); in mlxsw_sp_trap_group_policer_hw_id_get()
1878 mlxsw_sp1_trap_groups_init(struct mlxsw_sp *mlxsw_sp, in mlxsw_sp1_trap_groups_init() argument
1888 static int mlxsw_sp1_traps_init(struct mlxsw_sp *mlxsw_sp, in mlxsw_sp1_traps_init() argument
1946 mlxsw_sp2_trap_groups_init(struct mlxsw_sp *mlxsw_sp, in mlxsw_sp2_trap_groups_init() argument
1956 static int mlxsw_sp2_traps_init(struct mlxsw_sp *mlxsw_sp, in mlxsw_sp2_traps_init() argument