Lines Matching refs:nsim_dev

59 unsigned int nsim_dev_get_vfs(struct nsim_dev *nsim_dev)
62 !devl_lock_is_held(priv_to_devlink(nsim_dev)));
64 return nsim_dev->nsim_bus_dev->num_vfs;
100 struct nsim_dev *nsim_dev = file->private_data;
106 devlink = priv_to_devlink(nsim_dev);
118 err = devlink_region_snapshot_create(nsim_dev->dummy_region,
141 struct nsim_dev *nsim_dev = file->private_data;
147 spin_lock(&nsim_dev->fa_cookie_lock);
148 fa_cookie = nsim_dev->fa_cookie;
160 spin_unlock(&nsim_dev->fa_cookie_lock);
168 spin_unlock(&nsim_dev->fa_cookie_lock);
176 struct nsim_dev *nsim_dev = file->private_data;
205 spin_lock(&nsim_dev->fa_cookie_lock);
206 kfree(nsim_dev->fa_cookie);
207 nsim_dev->fa_cookie = fa_cookie;
208 spin_unlock(&nsim_dev->fa_cookie_lock);
230 struct nsim_dev *nsim_dev = file->private_data;
235 READ_ONCE(nsim_dev->nsim_bus_dev->max_vfs));
245 struct nsim_dev *nsim_dev;
274 nsim_dev = file->private_data;
275 devl_lock(priv_to_devlink(nsim_dev));
277 if (nsim_dev_get_vfs(nsim_dev)) {
280 swap(nsim_dev->vfconfigs, vfconfigs);
281 WRITE_ONCE(nsim_dev->nsim_bus_dev->max_vfs, val);
285 devl_unlock(priv_to_devlink(nsim_dev));
299 static int nsim_dev_debugfs_init(struct nsim_dev *nsim_dev)
304 sprintf(dev_ddir_name, DRV_NAME "%u", nsim_dev->nsim_bus_dev->dev.id);
305 nsim_dev->ddir = debugfs_create_dir(dev_ddir_name, nsim_dev_ddir);
306 if (IS_ERR(nsim_dev->ddir))
307 return PTR_ERR(nsim_dev->ddir);
308 nsim_dev->ports_ddir = debugfs_create_dir("ports", nsim_dev->ddir);
309 if (IS_ERR(nsim_dev->ports_ddir)) {
310 err = PTR_ERR(nsim_dev->ports_ddir);
313 debugfs_create_bool("fw_update_status", 0600, nsim_dev->ddir,
314 &nsim_dev->fw_update_status);
315 debugfs_create_u32("fw_update_overwrite_mask", 0600, nsim_dev->ddir,
316 &nsim_dev->fw_update_overwrite_mask);
317 debugfs_create_u32("max_macs", 0600, nsim_dev->ddir,
318 &nsim_dev->max_macs);
319 debugfs_create_bool("test1", 0600, nsim_dev->ddir,
320 &nsim_dev->test1);
321 nsim_dev->take_snapshot = debugfs_create_file("take_snapshot",
323 nsim_dev->ddir,
324 nsim_dev,
326 debugfs_create_bool("dont_allow_reload", 0600, nsim_dev->ddir,
327 &nsim_dev->dont_allow_reload);
328 debugfs_create_bool("fail_reload", 0600, nsim_dev->ddir,
329 &nsim_dev->fail_reload);
330 debugfs_create_file("trap_flow_action_cookie", 0600, nsim_dev->ddir,
331 nsim_dev, &nsim_dev_trap_fa_cookie_fops);
333 nsim_dev->ddir,
334 &nsim_dev->fail_trap_group_set);
336 nsim_dev->ddir,
337 &nsim_dev->fail_trap_policer_set);
339 nsim_dev->ddir,
340 &nsim_dev->fail_trap_policer_counter_get);
342 debugfs_create_file("max_vfs", 0600, nsim_dev->ddir,
343 nsim_dev, &nsim_dev_max_vfs_fops);
345 nsim_dev->nodes_ddir = debugfs_create_dir("rate_nodes", nsim_dev->ddir);
346 if (IS_ERR(nsim_dev->nodes_ddir)) {
347 err = PTR_ERR(nsim_dev->nodes_ddir);
351 nsim_dev->ddir,
352 &nsim_dev->fail_trap_drop_counter_get);
353 nsim_udp_tunnels_debugfs_create(nsim_dev);
357 debugfs_remove_recursive(nsim_dev->ports_ddir);
359 debugfs_remove_recursive(nsim_dev->ddir);
363 static void nsim_dev_debugfs_exit(struct nsim_dev *nsim_dev)
365 debugfs_remove_recursive(nsim_dev->nodes_ddir);
366 debugfs_remove_recursive(nsim_dev->ports_ddir);
367 debugfs_remove_recursive(nsim_dev->ddir);
391 static int nsim_dev_port_debugfs_init(struct nsim_dev *nsim_dev,
394 struct nsim_bus_dev *nsim_bus_dev = nsim_dev->nsim_bus_dev;
401 nsim_dev->ports_ddir);
410 &nsim_dev->vfconfigs[vf_id].min_tx_rate);
412 &nsim_dev->vfconfigs[vf_id].max_tx_rate);
521 static void nsim_devlink_set_params_init_values(struct nsim_dev *nsim_dev,
526 value.vu32 = nsim_dev->max_macs;
530 value.vbool = nsim_dev->test1;
538 struct nsim_dev *nsim_dev = devlink_priv(devlink);
546 nsim_dev->max_macs = saved_value.vu32;
551 nsim_dev->test1 = saved_value.vbool;
562 static int nsim_dev_dummy_region_init(struct nsim_dev *nsim_dev,
565 nsim_dev->dummy_region =
569 return PTR_ERR_OR_ZERO(nsim_dev->dummy_region);
572 static void nsim_dev_dummy_region_exit(struct nsim_dev *nsim_dev)
574 devl_region_destroy(nsim_dev->dummy_region);
578 __nsim_dev_port_add(struct nsim_dev *nsim_dev, enum nsim_dev_port_type type,
582 static int nsim_esw_legacy_enable(struct nsim_dev *nsim_dev,
585 struct devlink *devlink = priv_to_devlink(nsim_dev);
589 list_for_each_entry_safe(nsim_dev_port, tmp, &nsim_dev->port_list, list)
592 nsim_dev->esw_mode = DEVLINK_ESWITCH_MODE_LEGACY;
596 static int nsim_esw_switchdev_enable(struct nsim_dev *nsim_dev,
602 for (i = 0; i < nsim_dev_get_vfs(nsim_dev); i++) {
603 err = __nsim_dev_port_add(nsim_dev, NSIM_DEV_PORT_TYPE_VF, i);
610 nsim_dev->esw_mode = DEVLINK_ESWITCH_MODE_SWITCHDEV;
614 list_for_each_entry_safe(nsim_dev_port, tmp, &nsim_dev->port_list, list)
623 struct nsim_dev *nsim_dev = devlink_priv(devlink);
625 if (mode == nsim_dev->esw_mode)
629 return nsim_esw_legacy_enable(nsim_dev, extack);
631 return nsim_esw_switchdev_enable(nsim_dev, extack);
638 struct nsim_dev *nsim_dev = devlink_priv(devlink);
640 *mode = nsim_dev->esw_mode;
654 struct nsim_dev *nsim_dev;
784 struct nsim_dev *nsim_dev = nsim_dev_port->ns->nsim_dev;
785 struct devlink *devlink = priv_to_devlink(nsim_dev);
789 nsim_trap_data = nsim_dev->trap_data;
816 spin_lock_bh(&nsim_dev->fa_cookie_lock);
817 fa_cookie = has_fa_cookie ? nsim_dev->fa_cookie : NULL;
820 spin_unlock_bh(&nsim_dev->fa_cookie_lock);
832 struct nsim_dev *nsim_dev;
836 nsim_dev = nsim_trap_data->nsim_dev;
838 if (!devl_trylock(priv_to_devlink(nsim_dev))) {
839 schedule_delayed_work(&nsim_dev->trap_data->trap_report_dw, 1);
846 list_for_each_entry(nsim_dev_port, &nsim_dev->port_list, list) {
852 devl_unlock(priv_to_devlink(nsim_dev));
854 schedule_delayed_work(&nsim_dev->trap_data->trap_report_dw,
861 struct nsim_dev *nsim_dev = devlink_priv(devlink);
890 nsim_trap_data->nsim_dev = nsim_dev;
891 nsim_dev->trap_data = nsim_trap_data;
908 INIT_DELAYED_WORK(&nsim_dev->trap_data->trap_report_dw,
910 schedule_delayed_work(&nsim_dev->trap_data->trap_report_dw,
932 struct nsim_dev *nsim_dev = devlink_priv(devlink);
935 cancel_delayed_work_sync(&nsim_dev->trap_data->trap_report_dw);
942 kfree(nsim_dev->trap_data->trap_policers_cnt_arr);
943 kfree(nsim_dev->trap_data->trap_items_arr);
944 kfree(nsim_dev->trap_data);
947 static int nsim_dev_reload_create(struct nsim_dev *nsim_dev,
949 static void nsim_dev_reload_destroy(struct nsim_dev *nsim_dev);
955 struct nsim_dev *nsim_dev = devlink_priv(devlink);
957 if (nsim_dev->dont_allow_reload) {
965 nsim_dev_reload_destroy(nsim_dev);
973 struct nsim_dev *nsim_dev = devlink_priv(devlink);
975 if (nsim_dev->fail_reload) {
985 return nsim_dev_reload_create(nsim_dev, extack);
1010 struct nsim_dev *nsim_dev = devlink_priv(devlink);
1013 if ((params->overwrite_mask & ~nsim_dev->fw_update_overwrite_mask) != 0)
1016 if (nsim_dev->fw_update_status) {
1023 if (nsim_dev->fw_update_status)
1031 if (nsim_dev->fw_update_status) {
1046 nsim_dev_trap_item_lookup(struct nsim_dev *nsim_dev, u16 trap_id)
1048 struct nsim_trap_data *nsim_trap_data = nsim_dev->trap_data;
1063 struct nsim_dev *nsim_dev = devlink_priv(devlink);
1066 nsim_trap_item = nsim_dev_trap_item_lookup(nsim_dev, trap->id);
1082 struct nsim_dev *nsim_dev = devlink_priv(devlink);
1085 nsim_trap_item = nsim_dev_trap_item_lookup(nsim_dev, trap->id);
1089 spin_lock(&nsim_dev->trap_data->trap_lock);
1091 spin_unlock(&nsim_dev->trap_data->trap_lock);
1102 struct nsim_dev *nsim_dev = devlink_priv(devlink);
1104 if (nsim_dev->fail_trap_group_set)
1116 struct nsim_dev *nsim_dev = devlink_priv(devlink);
1118 if (nsim_dev->fail_trap_policer_set) {
1131 struct nsim_dev *nsim_dev = devlink_priv(devlink);
1134 if (nsim_dev->fail_trap_policer_counter_get)
1137 cnt = &nsim_dev->trap_data->trap_policers_cnt_arr[policer->id - 1];
1176 struct nsim_dev *nsim_dev = nsim_dev_port->ns->nsim_dev;
1184 nsim_dev->vfconfigs[vf_id].min_tx_rate = tx_share;
1192 struct nsim_dev *nsim_dev = nsim_dev_port->ns->nsim_dev;
1200 nsim_dev->vfconfigs[vf_id].max_tx_rate = tx_max;
1243 struct nsim_dev *nsim_dev = devlink_priv(node->devlink);
1246 if (!nsim_esw_mode_is_switchdev(nsim_dev)) {
1255 nsim_node->ddir = debugfs_create_dir(node->name, nsim_dev->nodes_ddir);
1312 struct nsim_dev *nsim_dev = devlink_priv(devlink);
1315 if (nsim_dev->fail_trap_drop_counter_get)
1318 cnt = &nsim_dev->trap_data->trap_pkt_cnt;
1352 static int __nsim_dev_port_add(struct nsim_dev *nsim_dev, enum nsim_dev_port_type type,
1360 if (type == NSIM_DEV_PORT_TYPE_VF && !nsim_dev_get_vfs(nsim_dev))
1378 memcpy(attrs.switch_id.id, nsim_dev->switch_id.id, nsim_dev->switch_id.id_len);
1379 attrs.switch_id.id_len = nsim_dev->switch_id.id_len;
1381 err = devl_port_register(priv_to_devlink(nsim_dev), devlink_port,
1386 err = nsim_dev_port_debugfs_init(nsim_dev, nsim_dev_port);
1390 nsim_dev_port->ns = nsim_create(nsim_dev, nsim_dev_port);
1403 list_add(&nsim_dev_port->list, &nsim_dev->port_list);
1431 static void nsim_dev_port_del_all(struct nsim_dev *nsim_dev)
1436 &nsim_dev->port_list, list)
1440 static int nsim_dev_port_add_all(struct nsim_dev *nsim_dev,
1446 err = __nsim_dev_port_add(nsim_dev, NSIM_DEV_PORT_TYPE_PF, i);
1453 nsim_dev_port_del_all(nsim_dev);
1457 static int nsim_dev_reload_create(struct nsim_dev *nsim_dev,
1460 struct nsim_bus_dev *nsim_bus_dev = nsim_dev->nsim_bus_dev;
1464 devlink = priv_to_devlink(nsim_dev);
1465 nsim_dev = devlink_priv(devlink);
1466 INIT_LIST_HEAD(&nsim_dev->port_list);
1467 nsim_dev->fw_update_status = true;
1468 nsim_dev->fw_update_overwrite_mask = 0;
1472 err = nsim_dev_dummy_region_init(nsim_dev, devlink);
1480 nsim_dev->fib_data = nsim_fib_create(devlink, extack);
1481 if (IS_ERR(nsim_dev->fib_data)) {
1482 err = PTR_ERR(nsim_dev->fib_data);
1486 err = nsim_dev_health_init(nsim_dev, devlink);
1490 err = nsim_dev_psample_init(nsim_dev);
1494 err = nsim_dev_hwstats_init(nsim_dev);
1498 err = nsim_dev_port_add_all(nsim_dev, nsim_bus_dev->port_count);
1502 nsim_dev->take_snapshot = debugfs_create_file("take_snapshot",
1504 nsim_dev->ddir,
1505 nsim_dev,
1510 nsim_dev_hwstats_exit(nsim_dev);
1512 nsim_dev_psample_exit(nsim_dev);
1514 nsim_dev_health_exit(nsim_dev);
1516 nsim_fib_destroy(devlink, nsim_dev->fib_data);
1520 nsim_dev_dummy_region_exit(nsim_dev);
1526 struct nsim_dev *nsim_dev;
1530 devlink = devlink_alloc_ns(&nsim_dev_devlink_ops, sizeof(*nsim_dev),
1535 nsim_dev = devlink_priv(devlink);
1536 nsim_dev->nsim_bus_dev = nsim_bus_dev;
1537 nsim_dev->switch_id.id_len = sizeof(nsim_dev->switch_id.id);
1538 get_random_bytes(nsim_dev->switch_id.id, nsim_dev->switch_id.id_len);
1539 INIT_LIST_HEAD(&nsim_dev->port_list);
1540 nsim_dev->fw_update_status = true;
1541 nsim_dev->fw_update_overwrite_mask = 0;
1542 nsim_dev->max_macs = NSIM_DEV_MAX_MACS_DEFAULT;
1543 nsim_dev->test1 = NSIM_DEV_TEST1_DEFAULT;
1544 spin_lock_init(&nsim_dev->fa_cookie_lock);
1546 dev_set_drvdata(&nsim_bus_dev->dev, nsim_dev);
1548 nsim_dev->vfconfigs = kcalloc(nsim_bus_dev->max_vfs,
1551 if (!nsim_dev->vfconfigs) {
1568 nsim_devlink_set_params_init_values(nsim_dev, devlink);
1570 err = nsim_dev_dummy_region_init(nsim_dev, devlink);
1578 err = nsim_dev_debugfs_init(nsim_dev);
1582 nsim_dev->fib_data = nsim_fib_create(devlink, NULL);
1583 if (IS_ERR(nsim_dev->fib_data)) {
1584 err = PTR_ERR(nsim_dev->fib_data);
1588 err = nsim_dev_health_init(nsim_dev, devlink);
1592 err = nsim_bpf_dev_init(nsim_dev);
1596 err = nsim_dev_psample_init(nsim_dev);
1600 err = nsim_dev_hwstats_init(nsim_dev);
1604 err = nsim_dev_port_add_all(nsim_dev, nsim_bus_dev->port_count);
1608 nsim_dev->esw_mode = DEVLINK_ESWITCH_MODE_LEGACY;
1613 nsim_dev_hwstats_exit(nsim_dev);
1615 nsim_dev_psample_exit(nsim_dev);
1617 nsim_bpf_dev_exit(nsim_dev);
1619 nsim_dev_health_exit(nsim_dev);
1621 nsim_fib_destroy(devlink, nsim_dev->fib_data);
1623 nsim_dev_debugfs_exit(nsim_dev);
1627 nsim_dev_dummy_region_exit(nsim_dev);
1636 kfree(nsim_dev->vfconfigs);
1644 static void nsim_dev_reload_destroy(struct nsim_dev *nsim_dev)
1646 struct devlink *devlink = priv_to_devlink(nsim_dev);
1650 debugfs_remove(nsim_dev->take_snapshot);
1652 if (nsim_dev_get_vfs(nsim_dev)) {
1653 nsim_bus_dev_set_vfs(nsim_dev->nsim_bus_dev, 0);
1654 if (nsim_esw_mode_is_switchdev(nsim_dev))
1655 nsim_esw_legacy_enable(nsim_dev, NULL);
1658 nsim_dev_port_del_all(nsim_dev);
1659 nsim_dev_hwstats_exit(nsim_dev);
1660 nsim_dev_psample_exit(nsim_dev);
1661 nsim_dev_health_exit(nsim_dev);
1662 nsim_fib_destroy(devlink, nsim_dev->fib_data);
1664 nsim_dev_dummy_region_exit(nsim_dev);
1669 struct nsim_dev *nsim_dev = dev_get_drvdata(&nsim_bus_dev->dev);
1670 struct devlink *devlink = priv_to_devlink(nsim_dev);
1673 nsim_dev_reload_destroy(nsim_dev);
1675 nsim_bpf_dev_exit(nsim_dev);
1676 nsim_dev_debugfs_exit(nsim_dev);
1681 kfree(nsim_dev->vfconfigs);
1682 kfree(nsim_dev->fa_cookie);
1689 __nsim_dev_port_lookup(struct nsim_dev *nsim_dev, enum nsim_dev_port_type type,
1695 list_for_each_entry(nsim_dev_port, &nsim_dev->port_list, list)
1704 struct nsim_dev *nsim_dev = dev_get_drvdata(&nsim_bus_dev->dev);
1707 devl_lock(priv_to_devlink(nsim_dev));
1708 if (__nsim_dev_port_lookup(nsim_dev, type, port_index))
1711 err = __nsim_dev_port_add(nsim_dev, type, port_index);
1712 devl_unlock(priv_to_devlink(nsim_dev));
1719 struct nsim_dev *nsim_dev = dev_get_drvdata(&nsim_bus_dev->dev);
1723 devl_lock(priv_to_devlink(nsim_dev));
1724 nsim_dev_port = __nsim_dev_port_lookup(nsim_dev, type, port_index);
1729 devl_unlock(priv_to_devlink(nsim_dev));
1736 struct nsim_dev *nsim_dev = dev_get_drvdata(&nsim_bus_dev->dev);
1737 struct devlink *devlink = priv_to_devlink(nsim_dev);
1753 if (nsim_esw_mode_is_switchdev(nsim_dev)) {
1755 ret = nsim_esw_switchdev_enable(nsim_dev, NULL);
1761 nsim_esw_legacy_enable(nsim_dev, NULL);