forked from luck/tmp_suning_uos_patched
mlxsw: core: Move resource query API to common location
Move mlxsw_pci_resources_query() to a common location to allow reuse by the different drivers and over all the supported physical buses. Rename it to mlxsw_core_resources_query(). Signed-off-by: Vadim Pasternak <vadimp@mellanox.com> Acked-by: Jiri Pirko <jiri@mellanox.com> Signed-off-by: Ido Schimmel <idosch@mellanox.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
c100e47caa
commit
e5ba7803ba
|
@ -1917,6 +1917,43 @@ void mlxsw_core_fw_flash_end(struct mlxsw_core *mlxsw_core)
|
|||
}
|
||||
EXPORT_SYMBOL(mlxsw_core_fw_flash_end);
|
||||
|
||||
int mlxsw_core_resources_query(struct mlxsw_core *mlxsw_core, char *mbox,
|
||||
struct mlxsw_res *res)
|
||||
{
|
||||
int index, i;
|
||||
u64 data;
|
||||
u16 id;
|
||||
int err;
|
||||
|
||||
if (!res)
|
||||
return 0;
|
||||
|
||||
mlxsw_cmd_mbox_zero(mbox);
|
||||
|
||||
for (index = 0; index < MLXSW_CMD_QUERY_RESOURCES_MAX_QUERIES;
|
||||
index++) {
|
||||
err = mlxsw_cmd_query_resources(mlxsw_core, mbox, index);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
for (i = 0; i < MLXSW_CMD_QUERY_RESOURCES_PER_QUERY; i++) {
|
||||
id = mlxsw_cmd_mbox_query_resource_id_get(mbox, i);
|
||||
data = mlxsw_cmd_mbox_query_resource_data_get(mbox, i);
|
||||
|
||||
if (id == MLXSW_CMD_QUERY_RESOURCES_TABLE_END_ID)
|
||||
return 0;
|
||||
|
||||
mlxsw_res_parse(res, id, data);
|
||||
}
|
||||
}
|
||||
|
||||
/* If after MLXSW_RESOURCES_QUERY_MAX_QUERIES we still didn't get
|
||||
* MLXSW_RESOURCES_TABLE_END_ID, something went bad in the FW.
|
||||
*/
|
||||
return -EIO;
|
||||
}
|
||||
EXPORT_SYMBOL(mlxsw_core_resources_query);
|
||||
|
||||
static int __init mlxsw_core_module_init(void)
|
||||
{
|
||||
int err;
|
||||
|
|
|
@ -182,6 +182,8 @@ int mlxsw_core_port_get_phys_port_name(struct mlxsw_core *mlxsw_core,
|
|||
int mlxsw_core_schedule_dw(struct delayed_work *dwork, unsigned long delay);
|
||||
bool mlxsw_core_schedule_work(struct work_struct *work);
|
||||
void mlxsw_core_flush_owq(void);
|
||||
int mlxsw_core_resources_query(struct mlxsw_core *mlxsw_core, char *mbox,
|
||||
struct mlxsw_res *res);
|
||||
|
||||
#define MLXSW_CONFIG_PROFILE_SWID_COUNT 8
|
||||
|
||||
|
|
|
@ -1039,42 +1039,6 @@ mlxsw_pci_config_profile_swid_config(struct mlxsw_pci *mlxsw_pci,
|
|||
mlxsw_cmd_mbox_config_profile_swid_config_mask_set(mbox, index, mask);
|
||||
}
|
||||
|
||||
static int mlxsw_pci_resources_query(struct mlxsw_pci *mlxsw_pci, char *mbox,
|
||||
struct mlxsw_res *res)
|
||||
{
|
||||
int index, i;
|
||||
u64 data;
|
||||
u16 id;
|
||||
int err;
|
||||
|
||||
if (!res)
|
||||
return 0;
|
||||
|
||||
mlxsw_cmd_mbox_zero(mbox);
|
||||
|
||||
for (index = 0; index < MLXSW_CMD_QUERY_RESOURCES_MAX_QUERIES;
|
||||
index++) {
|
||||
err = mlxsw_cmd_query_resources(mlxsw_pci->core, mbox, index);
|
||||
if (err)
|
||||
return err;
|
||||
|
||||
for (i = 0; i < MLXSW_CMD_QUERY_RESOURCES_PER_QUERY; i++) {
|
||||
id = mlxsw_cmd_mbox_query_resource_id_get(mbox, i);
|
||||
data = mlxsw_cmd_mbox_query_resource_data_get(mbox, i);
|
||||
|
||||
if (id == MLXSW_CMD_QUERY_RESOURCES_TABLE_END_ID)
|
||||
return 0;
|
||||
|
||||
mlxsw_res_parse(res, id, data);
|
||||
}
|
||||
}
|
||||
|
||||
/* If after MLXSW_RESOURCES_QUERY_MAX_QUERIES we still didn't get
|
||||
* MLXSW_RESOURCES_TABLE_END_ID, something went bad in the FW.
|
||||
*/
|
||||
return -EIO;
|
||||
}
|
||||
|
||||
static int
|
||||
mlxsw_pci_profile_get_kvd_sizes(const struct mlxsw_pci *mlxsw_pci,
|
||||
const struct mlxsw_config_profile *profile,
|
||||
|
@ -1459,7 +1423,7 @@ static int mlxsw_pci_init(void *bus_priv, struct mlxsw_core *mlxsw_core,
|
|||
if (err)
|
||||
goto err_boardinfo;
|
||||
|
||||
err = mlxsw_pci_resources_query(mlxsw_pci, mbox, res);
|
||||
err = mlxsw_core_resources_query(mlxsw_core, mbox, res);
|
||||
if (err)
|
||||
goto err_query_resources;
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user