Lines Matching refs:table

61 mlx5_sf_table_fn_to_hwc(struct mlx5_sf_hw_table *table, u16 fn_id)  in mlx5_sf_table_fn_to_hwc()  argument
65 for (i = 0; i < ARRAY_SIZE(table->hwc); i++) { in mlx5_sf_table_fn_to_hwc()
66 if (table->hwc[i].max_fn && in mlx5_sf_table_fn_to_hwc()
67 fn_id >= table->hwc[i].start_fn_id && in mlx5_sf_table_fn_to_hwc()
68 fn_id < (table->hwc[i].start_fn_id + table->hwc[i].max_fn)) in mlx5_sf_table_fn_to_hwc()
69 return &table->hwc[i]; in mlx5_sf_table_fn_to_hwc()
74 static int mlx5_sf_hw_table_id_alloc(struct mlx5_sf_hw_table *table, u32 controller, in mlx5_sf_hw_table_id_alloc() argument
81 hwc = mlx5_sf_controller_to_hwc(table->dev, controller); in mlx5_sf_hw_table_id_alloc()
103 static void mlx5_sf_hw_table_id_free(struct mlx5_sf_hw_table *table, u32 controller, int id) in mlx5_sf_hw_table_id_free() argument
107 hwc = mlx5_sf_controller_to_hwc(table->dev, controller); in mlx5_sf_hw_table_id_free()
114 struct mlx5_sf_hw_table *table = dev->priv.sf_hw_table; in mlx5_sf_hw_table_sf_alloc() local
119 if (!table) in mlx5_sf_hw_table_sf_alloc()
122 mutex_lock(&table->table_lock); in mlx5_sf_hw_table_sf_alloc()
123 sw_id = mlx5_sf_hw_table_id_alloc(table, controller, usr_sfnum); in mlx5_sf_hw_table_sf_alloc()
148 mutex_unlock(&table->table_lock); in mlx5_sf_hw_table_sf_alloc()
154 mlx5_sf_hw_table_id_free(table, controller, sw_id); in mlx5_sf_hw_table_sf_alloc()
156 mutex_unlock(&table->table_lock); in mlx5_sf_hw_table_sf_alloc()
162 struct mlx5_sf_hw_table *table = dev->priv.sf_hw_table; in mlx5_sf_hw_table_sf_free() local
165 mutex_lock(&table->table_lock); in mlx5_sf_hw_table_sf_free()
168 mlx5_sf_hw_table_id_free(table, controller, id); in mlx5_sf_hw_table_sf_free()
169 mutex_unlock(&table->table_lock); in mlx5_sf_hw_table_sf_free()
183 struct mlx5_sf_hw_table *table = dev->priv.sf_hw_table; in mlx5_sf_hw_table_sf_deferred_free() local
192 mutex_lock(&table->table_lock); in mlx5_sf_hw_table_sf_deferred_free()
205 mutex_unlock(&table->table_lock); in mlx5_sf_hw_table_sf_deferred_free()
219 static void mlx5_sf_hw_table_dealloc_all(struct mlx5_sf_hw_table *table) in mlx5_sf_hw_table_dealloc_all() argument
221 mlx5_sf_hw_table_hwc_dealloc_all(table->dev, &table->hwc[MLX5_SF_HWC_EXTERNAL]); in mlx5_sf_hw_table_dealloc_all()
222 mlx5_sf_hw_table_hwc_dealloc_all(table->dev, &table->hwc[MLX5_SF_HWC_LOCAL]); in mlx5_sf_hw_table_dealloc_all()
275 struct mlx5_sf_hw_table *table; in mlx5_sf_hw_table_init() local
297 table = kzalloc(sizeof(*table), GFP_KERNEL); in mlx5_sf_hw_table_init()
298 if (!table) { in mlx5_sf_hw_table_init()
303 mutex_init(&table->table_lock); in mlx5_sf_hw_table_init()
304 table->dev = dev; in mlx5_sf_hw_table_init()
305 dev->priv.sf_hw_table = table; in mlx5_sf_hw_table_init()
308 err = mlx5_sf_hw_table_hwc_init(&table->hwc[MLX5_SF_HWC_LOCAL], max_fn, base_id); in mlx5_sf_hw_table_init()
312 err = mlx5_sf_hw_table_hwc_init(&table->hwc[MLX5_SF_HWC_EXTERNAL], in mlx5_sf_hw_table_init()
321 mlx5_sf_hw_table_hwc_cleanup(&table->hwc[MLX5_SF_HWC_LOCAL]); in mlx5_sf_hw_table_init()
323 mutex_destroy(&table->table_lock); in mlx5_sf_hw_table_init()
324 kfree(table); in mlx5_sf_hw_table_init()
332 struct mlx5_sf_hw_table *table = dev->priv.sf_hw_table; in mlx5_sf_hw_table_cleanup() local
334 if (!table) in mlx5_sf_hw_table_cleanup()
337 mlx5_sf_hw_table_hwc_cleanup(&table->hwc[MLX5_SF_HWC_EXTERNAL]); in mlx5_sf_hw_table_cleanup()
338 mlx5_sf_hw_table_hwc_cleanup(&table->hwc[MLX5_SF_HWC_LOCAL]); in mlx5_sf_hw_table_cleanup()
339 mutex_destroy(&table->table_lock); in mlx5_sf_hw_table_cleanup()
340 kfree(table); in mlx5_sf_hw_table_cleanup()
347 struct mlx5_sf_hw_table *table = container_of(nb, struct mlx5_sf_hw_table, vhca_nb); in mlx5_sf_hw_vhca_event() local
356 hwc = mlx5_sf_table_fn_to_hwc(table, event->function_id); in mlx5_sf_hw_vhca_event()
363 mutex_lock(&table->table_lock); in mlx5_sf_hw_vhca_event()
368 mlx5_sf_hw_table_hwc_sf_free(table->dev, hwc, sw_id); in mlx5_sf_hw_vhca_event()
369 mutex_unlock(&table->table_lock); in mlx5_sf_hw_vhca_event()
375 struct mlx5_sf_hw_table *table = dev->priv.sf_hw_table; in mlx5_sf_hw_table_create() local
377 if (!table) in mlx5_sf_hw_table_create()
380 table->vhca_nb.notifier_call = mlx5_sf_hw_vhca_event; in mlx5_sf_hw_table_create()
381 return mlx5_vhca_event_notifier_register(dev, &table->vhca_nb); in mlx5_sf_hw_table_create()
386 struct mlx5_sf_hw_table *table = dev->priv.sf_hw_table; in mlx5_sf_hw_table_destroy() local
388 if (!table) in mlx5_sf_hw_table_destroy()
391 mlx5_vhca_event_notifier_unregister(dev, &table->vhca_nb); in mlx5_sf_hw_table_destroy()
393 mlx5_sf_hw_table_dealloc_all(table); in mlx5_sf_hw_table_destroy()