Lines Matching refs:nsim_dev

60 unsigned int nsim_dev_get_vfs(struct nsim_dev *nsim_dev)  in nsim_dev_get_vfs()  argument
63 !devl_lock_is_held(priv_to_devlink(nsim_dev))); in nsim_dev_get_vfs()
65 return nsim_dev->nsim_bus_dev->num_vfs; in nsim_dev_get_vfs()
101 struct nsim_dev *nsim_dev = file->private_data; in nsim_dev_take_snapshot_write() local
107 devlink = priv_to_devlink(nsim_dev); in nsim_dev_take_snapshot_write()
119 err = devlink_region_snapshot_create(nsim_dev->dummy_region, in nsim_dev_take_snapshot_write()
142 struct nsim_dev *nsim_dev = file->private_data; in nsim_dev_trap_fa_cookie_read() local
148 spin_lock(&nsim_dev->fa_cookie_lock); in nsim_dev_trap_fa_cookie_read()
149 fa_cookie = nsim_dev->fa_cookie; in nsim_dev_trap_fa_cookie_read()
161 spin_unlock(&nsim_dev->fa_cookie_lock); in nsim_dev_trap_fa_cookie_read()
169 spin_unlock(&nsim_dev->fa_cookie_lock); in nsim_dev_trap_fa_cookie_read()
177 struct nsim_dev *nsim_dev = file->private_data; in nsim_dev_trap_fa_cookie_write() local
206 spin_lock(&nsim_dev->fa_cookie_lock); in nsim_dev_trap_fa_cookie_write()
207 kfree(nsim_dev->fa_cookie); in nsim_dev_trap_fa_cookie_write()
208 nsim_dev->fa_cookie = fa_cookie; in nsim_dev_trap_fa_cookie_write()
209 spin_unlock(&nsim_dev->fa_cookie_lock); in nsim_dev_trap_fa_cookie_write()
231 struct nsim_dev *nsim_dev = file->private_data; in nsim_bus_dev_max_vfs_read() local
236 READ_ONCE(nsim_dev->nsim_bus_dev->max_vfs)); in nsim_bus_dev_max_vfs_read()
246 struct nsim_dev *nsim_dev; in nsim_bus_dev_max_vfs_write() local
275 nsim_dev = file->private_data; in nsim_bus_dev_max_vfs_write()
276 devl_lock(priv_to_devlink(nsim_dev)); in nsim_bus_dev_max_vfs_write()
278 if (nsim_dev_get_vfs(nsim_dev)) { in nsim_bus_dev_max_vfs_write()
281 swap(nsim_dev->vfconfigs, vfconfigs); in nsim_bus_dev_max_vfs_write()
282 WRITE_ONCE(nsim_dev->nsim_bus_dev->max_vfs, val); in nsim_bus_dev_max_vfs_write()
286 devl_unlock(priv_to_devlink(nsim_dev)); in nsim_bus_dev_max_vfs_write()
300 static int nsim_dev_debugfs_init(struct nsim_dev *nsim_dev) in nsim_dev_debugfs_init() argument
305 sprintf(dev_ddir_name, DRV_NAME "%u", nsim_dev->nsim_bus_dev->dev.id); in nsim_dev_debugfs_init()
306 nsim_dev->ddir = debugfs_create_dir(dev_ddir_name, nsim_dev_ddir); in nsim_dev_debugfs_init()
307 if (IS_ERR(nsim_dev->ddir)) in nsim_dev_debugfs_init()
308 return PTR_ERR(nsim_dev->ddir); in nsim_dev_debugfs_init()
309 nsim_dev->ports_ddir = debugfs_create_dir("ports", nsim_dev->ddir); in nsim_dev_debugfs_init()
310 if (IS_ERR(nsim_dev->ports_ddir)) { in nsim_dev_debugfs_init()
311 err = PTR_ERR(nsim_dev->ports_ddir); in nsim_dev_debugfs_init()
314 debugfs_create_bool("fw_update_status", 0600, nsim_dev->ddir, in nsim_dev_debugfs_init()
315 &nsim_dev->fw_update_status); in nsim_dev_debugfs_init()
316 debugfs_create_u32("fw_update_overwrite_mask", 0600, nsim_dev->ddir, in nsim_dev_debugfs_init()
317 &nsim_dev->fw_update_overwrite_mask); in nsim_dev_debugfs_init()
318 debugfs_create_u32("fw_update_flash_chunk_time_ms", 0600, nsim_dev->ddir, in nsim_dev_debugfs_init()
319 &nsim_dev->fw_update_flash_chunk_time_ms); in nsim_dev_debugfs_init()
320 debugfs_create_u32("max_macs", 0600, nsim_dev->ddir, in nsim_dev_debugfs_init()
321 &nsim_dev->max_macs); in nsim_dev_debugfs_init()
322 debugfs_create_bool("test1", 0600, nsim_dev->ddir, in nsim_dev_debugfs_init()
323 &nsim_dev->test1); in nsim_dev_debugfs_init()
324 debugfs_create_u32("test2", 0600, nsim_dev->ddir, in nsim_dev_debugfs_init()
325 &nsim_dev->test2); in nsim_dev_debugfs_init()
326 nsim_dev->take_snapshot = debugfs_create_file("take_snapshot", in nsim_dev_debugfs_init()
328 nsim_dev->ddir, in nsim_dev_debugfs_init()
329 nsim_dev, in nsim_dev_debugfs_init()
331 debugfs_create_bool("dont_allow_reload", 0600, nsim_dev->ddir, in nsim_dev_debugfs_init()
332 &nsim_dev->dont_allow_reload); in nsim_dev_debugfs_init()
333 debugfs_create_bool("fail_reload", 0600, nsim_dev->ddir, in nsim_dev_debugfs_init()
334 &nsim_dev->fail_reload); in nsim_dev_debugfs_init()
335 debugfs_create_file("trap_flow_action_cookie", 0600, nsim_dev->ddir, in nsim_dev_debugfs_init()
336 nsim_dev, &nsim_dev_trap_fa_cookie_fops); in nsim_dev_debugfs_init()
338 nsim_dev->ddir, in nsim_dev_debugfs_init()
339 &nsim_dev->fail_trap_group_set); in nsim_dev_debugfs_init()
341 nsim_dev->ddir, in nsim_dev_debugfs_init()
342 &nsim_dev->fail_trap_policer_set); in nsim_dev_debugfs_init()
344 nsim_dev->ddir, in nsim_dev_debugfs_init()
345 &nsim_dev->fail_trap_policer_counter_get); in nsim_dev_debugfs_init()
347 debugfs_create_file("max_vfs", 0600, nsim_dev->ddir, in nsim_dev_debugfs_init()
348 nsim_dev, &nsim_dev_max_vfs_fops); in nsim_dev_debugfs_init()
350 nsim_dev->nodes_ddir = debugfs_create_dir("rate_nodes", nsim_dev->ddir); in nsim_dev_debugfs_init()
351 if (IS_ERR(nsim_dev->nodes_ddir)) { in nsim_dev_debugfs_init()
352 err = PTR_ERR(nsim_dev->nodes_ddir); in nsim_dev_debugfs_init()
356 nsim_dev->ddir, in nsim_dev_debugfs_init()
357 &nsim_dev->fail_trap_drop_counter_get); in nsim_dev_debugfs_init()
358 nsim_udp_tunnels_debugfs_create(nsim_dev); in nsim_dev_debugfs_init()
362 debugfs_remove_recursive(nsim_dev->ports_ddir); in nsim_dev_debugfs_init()
364 debugfs_remove_recursive(nsim_dev->ddir); in nsim_dev_debugfs_init()
368 static void nsim_dev_debugfs_exit(struct nsim_dev *nsim_dev) in nsim_dev_debugfs_exit() argument
370 debugfs_remove_recursive(nsim_dev->nodes_ddir); in nsim_dev_debugfs_exit()
371 debugfs_remove_recursive(nsim_dev->ports_ddir); in nsim_dev_debugfs_exit()
372 debugfs_remove_recursive(nsim_dev->ddir); in nsim_dev_debugfs_exit()
407 static int nsim_dev_port_debugfs_init(struct nsim_dev *nsim_dev, in nsim_dev_port_debugfs_init() argument
410 struct nsim_bus_dev *nsim_bus_dev = nsim_dev->nsim_bus_dev; in nsim_dev_port_debugfs_init()
417 nsim_dev->ports_ddir); in nsim_dev_port_debugfs_init()
426 &nsim_dev->vfconfigs[vf_id].min_tx_rate); in nsim_dev_port_debugfs_init()
428 &nsim_dev->vfconfigs[vf_id].max_tx_rate); in nsim_dev_port_debugfs_init()
535 struct nsim_dev *nsim_dev = devlink_priv(devlink); in nsim_devlink_param_test2_get() local
537 ctx->val.vu32 = nsim_dev->test2; in nsim_devlink_param_test2_get()
546 struct nsim_dev *nsim_dev = devlink_priv(devlink); in nsim_devlink_param_test2_set() local
548 nsim_dev->test2 = ctx->val.vu32; in nsim_devlink_param_test2_set()
568 struct nsim_dev *nsim_dev = devlink_priv(devlink); in nsim_devlink_param_test2_reset_default() local
570 nsim_dev->test2 = NSIM_DEV_TEST2_DEFAULT; in nsim_devlink_param_test2_reset_default()
592 static void nsim_devlink_set_params_init_values(struct nsim_dev *nsim_dev, in nsim_devlink_set_params_init_values() argument
597 value.vu32 = nsim_dev->max_macs; in nsim_devlink_set_params_init_values()
601 value.vbool = nsim_dev->test1; in nsim_devlink_set_params_init_values()
609 struct nsim_dev *nsim_dev = devlink_priv(devlink); in nsim_devlink_param_load_driverinit_values() local
617 nsim_dev->max_macs = saved_value.vu32; in nsim_devlink_param_load_driverinit_values()
622 nsim_dev->test1 = saved_value.vbool; in nsim_devlink_param_load_driverinit_values()
633 static int nsim_dev_dummy_region_init(struct nsim_dev *nsim_dev, in nsim_dev_dummy_region_init() argument
636 nsim_dev->dummy_region = in nsim_dev_dummy_region_init()
640 return PTR_ERR_OR_ZERO(nsim_dev->dummy_region); in nsim_dev_dummy_region_init()
643 static void nsim_dev_dummy_region_exit(struct nsim_dev *nsim_dev) in nsim_dev_dummy_region_exit() argument
645 devl_region_destroy(nsim_dev->dummy_region); in nsim_dev_dummy_region_exit()
649 __nsim_dev_port_add(struct nsim_dev *nsim_dev, enum nsim_dev_port_type type,
653 static int nsim_esw_legacy_enable(struct nsim_dev *nsim_dev, in nsim_esw_legacy_enable() argument
656 struct devlink *devlink = priv_to_devlink(nsim_dev); in nsim_esw_legacy_enable()
660 list_for_each_entry_safe(nsim_dev_port, tmp, &nsim_dev->port_list, list) in nsim_esw_legacy_enable()
663 nsim_dev->esw_mode = DEVLINK_ESWITCH_MODE_LEGACY; in nsim_esw_legacy_enable()
667 static int nsim_esw_switchdev_enable(struct nsim_dev *nsim_dev, in nsim_esw_switchdev_enable() argument
673 for (i = 0; i < nsim_dev_get_vfs(nsim_dev); i++) { in nsim_esw_switchdev_enable()
674 err = __nsim_dev_port_add(nsim_dev, NSIM_DEV_PORT_TYPE_VF, i, NULL); in nsim_esw_switchdev_enable()
681 nsim_dev->esw_mode = DEVLINK_ESWITCH_MODE_SWITCHDEV; in nsim_esw_switchdev_enable()
685 list_for_each_entry_safe(nsim_dev_port, tmp, &nsim_dev->port_list, list) in nsim_esw_switchdev_enable()
694 struct nsim_dev *nsim_dev = devlink_priv(devlink); in nsim_devlink_eswitch_mode_set() local
696 if (mode == nsim_dev->esw_mode) in nsim_devlink_eswitch_mode_set()
700 return nsim_esw_legacy_enable(nsim_dev, extack); in nsim_devlink_eswitch_mode_set()
702 return nsim_esw_switchdev_enable(nsim_dev, extack); in nsim_devlink_eswitch_mode_set()
709 struct nsim_dev *nsim_dev = devlink_priv(devlink); in nsim_devlink_eswitch_mode_get() local
711 *mode = nsim_dev->esw_mode; in nsim_devlink_eswitch_mode_get()
725 struct nsim_dev *nsim_dev; member
855 struct nsim_dev *nsim_dev = nsim_dev_port->ns->nsim_dev; in nsim_dev_trap_report() local
856 struct devlink *devlink = priv_to_devlink(nsim_dev); in nsim_dev_trap_report()
860 nsim_trap_data = nsim_dev->trap_data; in nsim_dev_trap_report()
887 spin_lock_bh(&nsim_dev->fa_cookie_lock); in nsim_dev_trap_report()
888 fa_cookie = has_fa_cookie ? nsim_dev->fa_cookie : NULL; in nsim_dev_trap_report()
891 spin_unlock_bh(&nsim_dev->fa_cookie_lock); in nsim_dev_trap_report()
903 struct nsim_dev *nsim_dev; in nsim_dev_trap_report_work() local
907 nsim_dev = nsim_trap_data->nsim_dev; in nsim_dev_trap_report_work()
909 if (!devl_trylock(priv_to_devlink(nsim_dev))) { in nsim_dev_trap_report_work()
911 &nsim_dev->trap_data->trap_report_dw, 1); in nsim_dev_trap_report_work()
918 list_for_each_entry(nsim_dev_port, &nsim_dev->port_list, list) { in nsim_dev_trap_report_work()
925 devl_unlock(priv_to_devlink(nsim_dev)); in nsim_dev_trap_report_work()
927 &nsim_dev->trap_data->trap_report_dw, in nsim_dev_trap_report_work()
934 struct nsim_dev *nsim_dev = devlink_priv(devlink); in nsim_dev_traps_init() local
962 nsim_trap_data->nsim_dev = nsim_dev; in nsim_dev_traps_init()
963 nsim_dev->trap_data = nsim_trap_data; in nsim_dev_traps_init()
980 INIT_DELAYED_WORK(&nsim_dev->trap_data->trap_report_dw, in nsim_dev_traps_init()
983 &nsim_dev->trap_data->trap_report_dw, in nsim_dev_traps_init()
1005 struct nsim_dev *nsim_dev = devlink_priv(devlink); in nsim_dev_traps_exit() local
1008 cancel_delayed_work_sync(&nsim_dev->trap_data->trap_report_dw); in nsim_dev_traps_exit()
1015 kfree(nsim_dev->trap_data->trap_policers_cnt_arr); in nsim_dev_traps_exit()
1016 kfree(nsim_dev->trap_data->trap_items_arr); in nsim_dev_traps_exit()
1017 kfree(nsim_dev->trap_data); in nsim_dev_traps_exit()
1020 static int nsim_dev_reload_create(struct nsim_dev *nsim_dev,
1022 static void nsim_dev_reload_destroy(struct nsim_dev *nsim_dev);
1028 struct nsim_dev *nsim_dev = devlink_priv(devlink); in nsim_dev_reload_down() local
1030 if (nsim_dev->dont_allow_reload) { in nsim_dev_reload_down()
1038 nsim_dev_reload_destroy(nsim_dev); in nsim_dev_reload_down()
1046 struct nsim_dev *nsim_dev = devlink_priv(devlink); in nsim_dev_reload_up() local
1048 if (nsim_dev->fail_reload) { in nsim_dev_reload_up()
1058 return nsim_dev_reload_create(nsim_dev, extack); in nsim_dev_reload_up()
1083 struct nsim_dev *nsim_dev = devlink_priv(devlink); in nsim_dev_flash_update() local
1086 if ((params->overwrite_mask & ~nsim_dev->fw_update_overwrite_mask) != 0) in nsim_dev_flash_update()
1089 if (nsim_dev->fw_update_status) { in nsim_dev_flash_update()
1096 if (nsim_dev->fw_update_status) in nsim_dev_flash_update()
1101 msleep(nsim_dev->fw_update_flash_chunk_time_ms ?: 1); in nsim_dev_flash_update()
1104 if (nsim_dev->fw_update_status) { in nsim_dev_flash_update()
1119 nsim_dev_trap_item_lookup(struct nsim_dev *nsim_dev, u16 trap_id) in nsim_dev_trap_item_lookup() argument
1121 struct nsim_trap_data *nsim_trap_data = nsim_dev->trap_data; in nsim_dev_trap_item_lookup()
1136 struct nsim_dev *nsim_dev = devlink_priv(devlink); in nsim_dev_devlink_trap_init() local
1139 nsim_trap_item = nsim_dev_trap_item_lookup(nsim_dev, trap->id); in nsim_dev_devlink_trap_init()
1155 struct nsim_dev *nsim_dev = devlink_priv(devlink); in nsim_dev_devlink_trap_action_set() local
1158 nsim_trap_item = nsim_dev_trap_item_lookup(nsim_dev, trap->id); in nsim_dev_devlink_trap_action_set()
1162 spin_lock(&nsim_dev->trap_data->trap_lock); in nsim_dev_devlink_trap_action_set()
1164 spin_unlock(&nsim_dev->trap_data->trap_lock); in nsim_dev_devlink_trap_action_set()
1175 struct nsim_dev *nsim_dev = devlink_priv(devlink); in nsim_dev_devlink_trap_group_set() local
1177 if (nsim_dev->fail_trap_group_set) in nsim_dev_devlink_trap_group_set()
1189 struct nsim_dev *nsim_dev = devlink_priv(devlink); in nsim_dev_devlink_trap_policer_set() local
1191 if (nsim_dev->fail_trap_policer_set) { in nsim_dev_devlink_trap_policer_set()
1204 struct nsim_dev *nsim_dev = devlink_priv(devlink); in nsim_dev_devlink_trap_policer_counter_get() local
1207 if (nsim_dev->fail_trap_policer_counter_get) in nsim_dev_devlink_trap_policer_counter_get()
1210 cnt = &nsim_dev->trap_data->trap_policers_cnt_arr[policer->id - 1]; in nsim_dev_devlink_trap_policer_counter_get()
1262 struct nsim_dev *nsim_dev = nsim_dev_port->ns->nsim_dev; in nsim_leaf_tx_share_set() local
1270 nsim_dev->vfconfigs[vf_id].min_tx_rate = tx_share; in nsim_leaf_tx_share_set()
1278 struct nsim_dev *nsim_dev = nsim_dev_port->ns->nsim_dev; in nsim_leaf_tx_max_set() local
1286 nsim_dev->vfconfigs[vf_id].max_tx_rate = tx_max; in nsim_leaf_tx_max_set()
1342 struct nsim_dev *nsim_dev = devlink_priv(node->devlink); in nsim_rate_node_new() local
1345 if (!nsim_esw_mode_is_switchdev(nsim_dev)) { in nsim_rate_node_new()
1354 nsim_node->ddir = debugfs_create_dir(node->name, nsim_dev->nodes_ddir); in nsim_rate_node_new()
1413 struct nsim_dev *nsim_dev = devlink_priv(devlink); in nsim_dev_devlink_trap_drop_counter_get() local
1416 if (nsim_dev->fail_trap_drop_counter_get) in nsim_dev_devlink_trap_drop_counter_get()
1419 cnt = &nsim_dev->trap_data->trap_pkt_cnt; in nsim_dev_devlink_trap_drop_counter_get()
1455 static int __nsim_dev_port_add(struct nsim_dev *nsim_dev, enum nsim_dev_port_type type, in __nsim_dev_port_add() argument
1463 if (type == NSIM_DEV_PORT_TYPE_VF && !nsim_dev_get_vfs(nsim_dev)) in __nsim_dev_port_add()
1481 memcpy(attrs.switch_id.id, nsim_dev->switch_id.id, nsim_dev->switch_id.id_len); in __nsim_dev_port_add()
1482 attrs.switch_id.id_len = nsim_dev->switch_id.id_len; in __nsim_dev_port_add()
1484 err = devl_port_register(priv_to_devlink(nsim_dev), devlink_port, in __nsim_dev_port_add()
1489 err = nsim_dev_port_debugfs_init(nsim_dev, nsim_dev_port); in __nsim_dev_port_add()
1493 nsim_dev_port->ns = nsim_create(nsim_dev, nsim_dev_port, perm_addr); in __nsim_dev_port_add()
1506 list_add(&nsim_dev_port->list, &nsim_dev->port_list); in __nsim_dev_port_add()
1534 static void nsim_dev_port_del_all(struct nsim_dev *nsim_dev) in nsim_dev_port_del_all() argument
1539 &nsim_dev->port_list, list) in nsim_dev_port_del_all()
1543 static int nsim_dev_port_add_all(struct nsim_dev *nsim_dev, in nsim_dev_port_add_all() argument
1549 err = __nsim_dev_port_add(nsim_dev, NSIM_DEV_PORT_TYPE_PF, i, NULL); in nsim_dev_port_add_all()
1556 nsim_dev_port_del_all(nsim_dev); in nsim_dev_port_add_all()
1560 static int nsim_dev_reload_create(struct nsim_dev *nsim_dev, in nsim_dev_reload_create() argument
1563 struct nsim_bus_dev *nsim_bus_dev = nsim_dev->nsim_bus_dev; in nsim_dev_reload_create()
1567 devlink = priv_to_devlink(nsim_dev); in nsim_dev_reload_create()
1568 nsim_dev = devlink_priv(devlink); in nsim_dev_reload_create()
1569 INIT_LIST_HEAD(&nsim_dev->port_list); in nsim_dev_reload_create()
1570 nsim_dev->fw_update_status = true; in nsim_dev_reload_create()
1571 nsim_dev->fw_update_overwrite_mask = 0; in nsim_dev_reload_create()
1575 err = nsim_dev_dummy_region_init(nsim_dev, devlink); in nsim_dev_reload_create()
1583 nsim_dev->fib_data = nsim_fib_create(devlink, extack); in nsim_dev_reload_create()
1584 if (IS_ERR(nsim_dev->fib_data)) { in nsim_dev_reload_create()
1585 err = PTR_ERR(nsim_dev->fib_data); in nsim_dev_reload_create()
1589 err = nsim_dev_health_init(nsim_dev, devlink); in nsim_dev_reload_create()
1593 err = nsim_dev_psample_init(nsim_dev); in nsim_dev_reload_create()
1597 err = nsim_dev_hwstats_init(nsim_dev); in nsim_dev_reload_create()
1601 err = nsim_dev_port_add_all(nsim_dev, nsim_bus_dev->port_count); in nsim_dev_reload_create()
1605 nsim_dev->take_snapshot = debugfs_create_file("take_snapshot", in nsim_dev_reload_create()
1607 nsim_dev->ddir, in nsim_dev_reload_create()
1608 nsim_dev, in nsim_dev_reload_create()
1613 nsim_dev_hwstats_exit(nsim_dev); in nsim_dev_reload_create()
1615 nsim_dev_psample_exit(nsim_dev); in nsim_dev_reload_create()
1617 nsim_dev_health_exit(nsim_dev); in nsim_dev_reload_create()
1619 nsim_fib_destroy(devlink, nsim_dev->fib_data); in nsim_dev_reload_create()
1623 nsim_dev_dummy_region_exit(nsim_dev); in nsim_dev_reload_create()
1629 struct nsim_dev *nsim_dev; in nsim_drv_probe() local
1633 devlink = devlink_alloc_ns(&nsim_dev_devlink_ops, sizeof(*nsim_dev), in nsim_drv_probe()
1638 nsim_dev = devlink_priv(devlink); in nsim_drv_probe()
1639 nsim_dev->nsim_bus_dev = nsim_bus_dev; in nsim_drv_probe()
1640 nsim_dev->switch_id.id_len = sizeof(nsim_dev->switch_id.id); in nsim_drv_probe()
1641 get_random_bytes(nsim_dev->switch_id.id, nsim_dev->switch_id.id_len); in nsim_drv_probe()
1642 INIT_LIST_HEAD(&nsim_dev->port_list); in nsim_drv_probe()
1643 nsim_dev->fw_update_status = true; in nsim_drv_probe()
1644 nsim_dev->fw_update_overwrite_mask = 0; in nsim_drv_probe()
1645 nsim_dev->fw_update_flash_chunk_time_ms = NSIM_DEV_FLASH_CHUNK_TIME_MS_DEFAULT; in nsim_drv_probe()
1646 nsim_dev->max_macs = NSIM_DEV_MAX_MACS_DEFAULT; in nsim_drv_probe()
1647 nsim_dev->test1 = NSIM_DEV_TEST1_DEFAULT; in nsim_drv_probe()
1648 nsim_dev->test2 = NSIM_DEV_TEST2_DEFAULT; in nsim_drv_probe()
1649 spin_lock_init(&nsim_dev->fa_cookie_lock); in nsim_drv_probe()
1650 mutex_init(&nsim_dev->progs_list_lock); in nsim_drv_probe()
1652 dev_set_drvdata(&nsim_bus_dev->dev, nsim_dev); in nsim_drv_probe()
1654 nsim_dev->vfconfigs = kzalloc_objs(struct nsim_vf_config, in nsim_drv_probe()
1657 if (!nsim_dev->vfconfigs) { in nsim_drv_probe()
1674 nsim_devlink_set_params_init_values(nsim_dev, devlink); in nsim_drv_probe()
1676 err = nsim_dev_dummy_region_init(nsim_dev, devlink); in nsim_drv_probe()
1684 err = nsim_dev_debugfs_init(nsim_dev); in nsim_drv_probe()
1688 nsim_dev->fib_data = nsim_fib_create(devlink, NULL); in nsim_drv_probe()
1689 if (IS_ERR(nsim_dev->fib_data)) { in nsim_drv_probe()
1690 err = PTR_ERR(nsim_dev->fib_data); in nsim_drv_probe()
1694 err = nsim_dev_health_init(nsim_dev, devlink); in nsim_drv_probe()
1698 err = nsim_bpf_dev_init(nsim_dev); in nsim_drv_probe()
1702 err = nsim_dev_psample_init(nsim_dev); in nsim_drv_probe()
1706 err = nsim_dev_hwstats_init(nsim_dev); in nsim_drv_probe()
1710 err = nsim_dev_port_add_all(nsim_dev, nsim_bus_dev->port_count); in nsim_drv_probe()
1714 nsim_dev->esw_mode = DEVLINK_ESWITCH_MODE_LEGACY; in nsim_drv_probe()
1719 nsim_dev_hwstats_exit(nsim_dev); in nsim_drv_probe()
1721 nsim_dev_psample_exit(nsim_dev); in nsim_drv_probe()
1723 nsim_bpf_dev_exit(nsim_dev); in nsim_drv_probe()
1725 nsim_dev_health_exit(nsim_dev); in nsim_drv_probe()
1727 nsim_fib_destroy(devlink, nsim_dev->fib_data); in nsim_drv_probe()
1729 nsim_dev_debugfs_exit(nsim_dev); in nsim_drv_probe()
1733 nsim_dev_dummy_region_exit(nsim_dev); in nsim_drv_probe()
1742 kfree(nsim_dev->vfconfigs); in nsim_drv_probe()
1750 static void nsim_dev_reload_destroy(struct nsim_dev *nsim_dev) in nsim_dev_reload_destroy() argument
1752 struct devlink *devlink = priv_to_devlink(nsim_dev); in nsim_dev_reload_destroy()
1756 debugfs_remove(nsim_dev->take_snapshot); in nsim_dev_reload_destroy()
1758 if (nsim_dev_get_vfs(nsim_dev)) { in nsim_dev_reload_destroy()
1759 nsim_bus_dev_set_vfs(nsim_dev->nsim_bus_dev, 0); in nsim_dev_reload_destroy()
1760 if (nsim_esw_mode_is_switchdev(nsim_dev)) in nsim_dev_reload_destroy()
1761 nsim_esw_legacy_enable(nsim_dev, NULL); in nsim_dev_reload_destroy()
1764 nsim_dev_port_del_all(nsim_dev); in nsim_dev_reload_destroy()
1765 nsim_dev_hwstats_exit(nsim_dev); in nsim_dev_reload_destroy()
1766 nsim_dev_psample_exit(nsim_dev); in nsim_dev_reload_destroy()
1767 nsim_dev_health_exit(nsim_dev); in nsim_dev_reload_destroy()
1768 nsim_fib_destroy(devlink, nsim_dev->fib_data); in nsim_dev_reload_destroy()
1770 nsim_dev_dummy_region_exit(nsim_dev); in nsim_dev_reload_destroy()
1775 struct nsim_dev *nsim_dev = dev_get_drvdata(&nsim_bus_dev->dev); in nsim_drv_remove() local
1776 struct devlink *devlink = priv_to_devlink(nsim_dev); in nsim_drv_remove()
1779 nsim_dev_reload_destroy(nsim_dev); in nsim_drv_remove()
1781 nsim_bpf_dev_exit(nsim_dev); in nsim_drv_remove()
1782 nsim_dev_debugfs_exit(nsim_dev); in nsim_drv_remove()
1787 kfree(nsim_dev->vfconfigs); in nsim_drv_remove()
1788 kfree(nsim_dev->fa_cookie); in nsim_drv_remove()
1789 mutex_destroy(&nsim_dev->progs_list_lock); in nsim_drv_remove()
1796 __nsim_dev_port_lookup(struct nsim_dev *nsim_dev, enum nsim_dev_port_type type, in __nsim_dev_port_lookup() argument
1802 list_for_each_entry(nsim_dev_port, &nsim_dev->port_list, list) in __nsim_dev_port_lookup()
1811 struct nsim_dev *nsim_dev = dev_get_drvdata(&nsim_bus_dev->dev); in nsim_drv_port_add() local
1814 devl_lock(priv_to_devlink(nsim_dev)); in nsim_drv_port_add()
1815 if (__nsim_dev_port_lookup(nsim_dev, type, port_index)) in nsim_drv_port_add()
1818 err = __nsim_dev_port_add(nsim_dev, type, port_index, perm_addr); in nsim_drv_port_add()
1819 devl_unlock(priv_to_devlink(nsim_dev)); in nsim_drv_port_add()
1826 struct nsim_dev *nsim_dev = dev_get_drvdata(&nsim_bus_dev->dev); in nsim_drv_port_del() local
1830 devl_lock(priv_to_devlink(nsim_dev)); in nsim_drv_port_del()
1831 nsim_dev_port = __nsim_dev_port_lookup(nsim_dev, type, port_index); in nsim_drv_port_del()
1836 devl_unlock(priv_to_devlink(nsim_dev)); in nsim_drv_port_del()
1843 struct nsim_dev *nsim_dev = dev_get_drvdata(&nsim_bus_dev->dev); in nsim_drv_configure_vfs() local
1844 struct devlink *devlink = priv_to_devlink(nsim_dev); in nsim_drv_configure_vfs()
1860 if (nsim_esw_mode_is_switchdev(nsim_dev)) { in nsim_drv_configure_vfs()
1862 ret = nsim_esw_switchdev_enable(nsim_dev, NULL); in nsim_drv_configure_vfs()
1868 nsim_esw_legacy_enable(nsim_dev, NULL); in nsim_drv_configure_vfs()