mlxsw_driver
int mlxsw_core_driver_register(struct mlxsw_driver *mlxsw_driver)
list_add_tail(&mlxsw_driver->list, &mlxsw_core_driver_list);
void mlxsw_core_driver_unregister(struct mlxsw_driver *mlxsw_driver)
list_del(&mlxsw_driver->list);
static struct mlxsw_driver *__driver_find(const char *kind)
struct mlxsw_driver *mlxsw_driver;
list_for_each_entry(mlxsw_driver, &mlxsw_core_driver_list, list) {
if (strcmp(mlxsw_driver->kind, kind) == 0)
return mlxsw_driver;
static struct mlxsw_driver *mlxsw_core_driver_get(const char *kind)
struct mlxsw_driver *mlxsw_driver;
mlxsw_driver = __driver_find(kind);
return mlxsw_driver;
struct mlxsw_driver *mlxsw_driver = mlxsw_core->driver;
if (!mlxsw_driver->sb_pool_get)
return mlxsw_driver->sb_pool_get(mlxsw_core, sb_index,
struct mlxsw_driver *mlxsw_driver = mlxsw_core->driver;
if (!mlxsw_driver->sb_pool_set)
return mlxsw_driver->sb_pool_set(mlxsw_core, sb_index,
struct mlxsw_driver *mlxsw_driver = mlxsw_core->driver;
if (!mlxsw_driver->sb_port_pool_get ||
return mlxsw_driver->sb_port_pool_get(mlxsw_core_port, sb_index,
struct mlxsw_driver *mlxsw_driver = mlxsw_core->driver;
if (!mlxsw_driver->sb_port_pool_set ||
return mlxsw_driver->sb_port_pool_set(mlxsw_core_port, sb_index,
struct mlxsw_driver *mlxsw_driver = mlxsw_core->driver;
if (!mlxsw_driver->sb_tc_pool_bind_get ||
return mlxsw_driver->sb_tc_pool_bind_get(mlxsw_core_port, sb_index,
struct mlxsw_driver *mlxsw_driver = mlxsw_core->driver;
if (!mlxsw_driver->sb_tc_pool_bind_set ||
return mlxsw_driver->sb_tc_pool_bind_set(mlxsw_core_port, sb_index,
struct mlxsw_driver *mlxsw_driver = mlxsw_core->driver;
if (!mlxsw_driver->sb_occ_snapshot)
return mlxsw_driver->sb_occ_snapshot(mlxsw_core, sb_index);
struct mlxsw_driver *mlxsw_driver = mlxsw_core->driver;
if (!mlxsw_driver->sb_occ_max_clear)
return mlxsw_driver->sb_occ_max_clear(mlxsw_core, sb_index);
struct mlxsw_driver *mlxsw_driver = mlxsw_core->driver;
if (!mlxsw_driver->sb_occ_port_pool_get ||
return mlxsw_driver->sb_occ_port_pool_get(mlxsw_core_port, sb_index,
struct mlxsw_driver *mlxsw_driver = mlxsw_core->driver;
if (!mlxsw_driver->sb_occ_tc_port_bind_get ||
return mlxsw_driver->sb_occ_tc_port_bind_get(mlxsw_core_port,
struct mlxsw_driver *mlxsw_driver = mlxsw_core->driver;
if (!mlxsw_driver->trap_init)
return mlxsw_driver->trap_init(mlxsw_core, trap, trap_ctx);
struct mlxsw_driver *mlxsw_driver = mlxsw_core->driver;
if (!mlxsw_driver->trap_fini)
mlxsw_driver->trap_fini(mlxsw_core, trap, trap_ctx);
struct mlxsw_driver *mlxsw_driver = mlxsw_core->driver;
if (!mlxsw_driver->trap_action_set)
return mlxsw_driver->trap_action_set(mlxsw_core, trap, action, extack);
struct mlxsw_driver *mlxsw_driver = mlxsw_core->driver;
if (!mlxsw_driver->trap_group_init)
return mlxsw_driver->trap_group_init(mlxsw_core, group);
struct mlxsw_driver *mlxsw_driver = mlxsw_core->driver;
if (!mlxsw_driver->trap_group_set)
return mlxsw_driver->trap_group_set(mlxsw_core, group, policer, extack);
struct mlxsw_driver *mlxsw_driver = mlxsw_core->driver;
if (!mlxsw_driver->trap_policer_init)
return mlxsw_driver->trap_policer_init(mlxsw_core, policer);
struct mlxsw_driver *mlxsw_driver = mlxsw_core->driver;
if (!mlxsw_driver->trap_policer_fini)
mlxsw_driver->trap_policer_fini(mlxsw_core, policer);
struct mlxsw_driver *mlxsw_driver = mlxsw_core->driver;
if (!mlxsw_driver->trap_policer_set)
return mlxsw_driver->trap_policer_set(mlxsw_core, policer, rate, burst,
struct mlxsw_driver *mlxsw_driver = mlxsw_core->driver;
if (!mlxsw_driver->trap_policer_counter_get)
return mlxsw_driver->trap_policer_counter_get(mlxsw_core, policer,
struct mlxsw_driver *driver = mlxsw_core->driver;
struct mlxsw_driver *mlxsw_driver;
mlxsw_driver = mlxsw_core_driver_get(device_kind);
if (!mlxsw_driver)
alloc_size = sizeof(*mlxsw_core) + mlxsw_driver->priv_size;
mlxsw_core->driver = mlxsw_driver;
err = mlxsw_bus->init(bus_priv, mlxsw_core, mlxsw_driver->profile,
if (mlxsw_driver->resources_register && !reload) {
err = mlxsw_driver->resources_register(mlxsw_core);
err = mlxsw_core_fw_rev_validate(mlxsw_core, mlxsw_bus_info, mlxsw_driver->fw_req_rev,
mlxsw_driver->fw_filename);
if (mlxsw_driver->init) {
err = mlxsw_driver->init(mlxsw_core, mlxsw_bus_info, extack);
struct mlxsw_driver *driver = mlxsw_core->driver;
struct mlxsw_driver *driver;
struct mlxsw_driver;
int mlxsw_core_driver_register(struct mlxsw_driver *mlxsw_driver);
void mlxsw_core_driver_unregister(struct mlxsw_driver *mlxsw_driver);
static struct mlxsw_driver mlxsw_m_driver = {
static struct mlxsw_driver mlxsw_sp1_driver = {
static struct mlxsw_driver mlxsw_sp2_driver = {
static struct mlxsw_driver mlxsw_sp3_driver = {
static struct mlxsw_driver mlxsw_sp4_driver = {