Lines Matching refs:devlink_port

138 static struct devlink_port *devlink_port_get_by_index(struct devlink *devlink,  in devlink_port_get_by_index()
141 struct devlink_port *devlink_port; in devlink_port_get_by_index() local
143 list_for_each_entry(devlink_port, &devlink->port_list, list) { in devlink_port_get_by_index()
144 if (devlink_port->index == port_index) in devlink_port_get_by_index()
145 return devlink_port; in devlink_port_get_by_index()
156 static struct devlink_port *devlink_port_get_from_attrs(struct devlink *devlink, in devlink_port_get_from_attrs()
161 struct devlink_port *devlink_port; in devlink_port_get_from_attrs() local
163 devlink_port = devlink_port_get_by_index(devlink, port_index); in devlink_port_get_from_attrs()
164 if (!devlink_port) in devlink_port_get_from_attrs()
166 return devlink_port; in devlink_port_get_from_attrs()
171 static struct devlink_port *devlink_port_get_from_info(struct devlink *devlink, in devlink_port_get_from_info()
404 struct devlink_port *devlink_port; in devlink_nl_pre_doit() local
406 devlink_port = devlink_port_get_from_info(devlink, info); in devlink_nl_pre_doit()
407 if (IS_ERR(devlink_port)) { in devlink_nl_pre_doit()
408 err = PTR_ERR(devlink_port); in devlink_nl_pre_doit()
411 info->user_ptr[0] = devlink_port; in devlink_nl_pre_doit()
507 struct devlink_port *devlink_port) in devlink_nl_port_attrs_put() argument
509 struct devlink_port_attrs *attrs = &devlink_port->attrs; in devlink_nl_port_attrs_put()
515 switch (devlink_port->attrs.flavour) { in devlink_nl_port_attrs_put()
550 struct devlink_port *devlink_port, in devlink_nl_port_fill() argument
562 if (nla_put_u32(msg, DEVLINK_ATTR_PORT_INDEX, devlink_port->index)) in devlink_nl_port_fill()
565 spin_lock_bh(&devlink_port->type_lock); in devlink_nl_port_fill()
566 if (nla_put_u16(msg, DEVLINK_ATTR_PORT_TYPE, devlink_port->type)) in devlink_nl_port_fill()
568 if (devlink_port->desired_type != DEVLINK_PORT_TYPE_NOTSET && in devlink_nl_port_fill()
570 devlink_port->desired_type)) in devlink_nl_port_fill()
572 if (devlink_port->type == DEVLINK_PORT_TYPE_ETH) { in devlink_nl_port_fill()
573 struct net_device *netdev = devlink_port->type_dev; in devlink_nl_port_fill()
582 if (devlink_port->type == DEVLINK_PORT_TYPE_IB) { in devlink_nl_port_fill()
583 struct ib_device *ibdev = devlink_port->type_dev; in devlink_nl_port_fill()
590 spin_unlock_bh(&devlink_port->type_lock); in devlink_nl_port_fill()
591 if (devlink_nl_port_attrs_put(msg, devlink_port)) in devlink_nl_port_fill()
598 spin_unlock_bh(&devlink_port->type_lock); in devlink_nl_port_fill()
604 static void devlink_port_notify(struct devlink_port *devlink_port, in devlink_port_notify() argument
607 struct devlink *devlink = devlink_port->devlink; in devlink_port_notify()
611 if (!devlink_port->registered) in devlink_port_notify()
620 err = devlink_nl_port_fill(msg, devlink, devlink_port, cmd, 0, 0, 0); in devlink_port_notify()
683 struct devlink_port *devlink_port = info->user_ptr[0]; in devlink_nl_cmd_port_get_doit() local
684 struct devlink *devlink = devlink_port->devlink; in devlink_nl_cmd_port_get_doit()
692 err = devlink_nl_port_fill(msg, devlink, devlink_port, in devlink_nl_cmd_port_get_doit()
707 struct devlink_port *devlink_port; in devlink_nl_cmd_port_get_dumpit() local
717 list_for_each_entry(devlink_port, &devlink->port_list, list) { in devlink_nl_cmd_port_get_dumpit()
722 err = devlink_nl_port_fill(msg, devlink, devlink_port, in devlink_nl_cmd_port_get_dumpit()
743 struct devlink_port *devlink_port, in devlink_port_type_set() argument
752 if (port_type == devlink_port->type) in devlink_port_type_set()
754 err = devlink->ops->port_type_set(devlink_port, port_type); in devlink_port_type_set()
757 devlink_port->desired_type = port_type; in devlink_port_type_set()
758 devlink_port_notify(devlink_port, DEVLINK_CMD_PORT_NEW); in devlink_port_type_set()
767 struct devlink_port *devlink_port = info->user_ptr[0]; in devlink_nl_cmd_port_set_doit() local
768 struct devlink *devlink = devlink_port->devlink; in devlink_nl_cmd_port_set_doit()
775 err = devlink_port_type_set(devlink, devlink_port, port_type); in devlink_nl_cmd_port_set_doit()
1109 struct devlink_port *devlink_port, in devlink_nl_sb_port_pool_fill() argument
1120 err = ops->sb_port_pool_get(devlink_port, devlink_sb->index, in devlink_nl_sb_port_pool_fill()
1131 if (nla_put_u32(msg, DEVLINK_ATTR_PORT_INDEX, devlink_port->index)) in devlink_nl_sb_port_pool_fill()
1144 err = ops->sb_occ_port_pool_get(devlink_port, devlink_sb->index, in devlink_nl_sb_port_pool_fill()
1167 struct devlink_port *devlink_port = info->user_ptr[0]; in devlink_nl_cmd_sb_port_pool_get_doit() local
1168 struct devlink *devlink = devlink_port->devlink; in devlink_nl_cmd_sb_port_pool_get_doit()
1186 err = devlink_nl_sb_port_pool_fill(msg, devlink, devlink_port, in devlink_nl_cmd_sb_port_pool_get_doit()
1203 struct devlink_port *devlink_port; in __sb_port_pool_get_dumpit() local
1208 list_for_each_entry(devlink_port, &devlink->port_list, list) { in __sb_port_pool_get_dumpit()
1215 devlink_port, in __sb_port_pool_get_dumpit()
1263 static int devlink_sb_port_pool_set(struct devlink_port *devlink_port, in devlink_sb_port_pool_set() argument
1269 const struct devlink_ops *ops = devlink_port->devlink->ops; in devlink_sb_port_pool_set()
1272 return ops->sb_port_pool_set(devlink_port, sb_index, in devlink_sb_port_pool_set()
1280 struct devlink_port *devlink_port = info->user_ptr[0]; in devlink_nl_cmd_sb_port_pool_set_doit() local
1295 return devlink_sb_port_pool_set(devlink_port, devlink_sb->index, in devlink_nl_cmd_sb_port_pool_set_doit()
1301 struct devlink_port *devlink_port, in devlink_nl_sb_tc_pool_bind_fill() argument
1313 err = ops->sb_tc_pool_bind_get(devlink_port, devlink_sb->index, in devlink_nl_sb_tc_pool_bind_fill()
1325 if (nla_put_u32(msg, DEVLINK_ATTR_PORT_INDEX, devlink_port->index)) in devlink_nl_sb_tc_pool_bind_fill()
1342 err = ops->sb_occ_tc_port_bind_get(devlink_port, in devlink_nl_sb_tc_pool_bind_fill()
1367 struct devlink_port *devlink_port = info->user_ptr[0]; in devlink_nl_cmd_sb_tc_pool_bind_get_doit() local
1368 struct devlink *devlink = devlink_port->devlink; in devlink_nl_cmd_sb_tc_pool_bind_get_doit()
1391 err = devlink_nl_sb_tc_pool_bind_fill(msg, devlink, devlink_port, in devlink_nl_cmd_sb_tc_pool_bind_get_doit()
1410 struct devlink_port *devlink_port; in __sb_tc_pool_bind_get_dumpit() local
1414 list_for_each_entry(devlink_port, &devlink->port_list, list) { in __sb_tc_pool_bind_get_dumpit()
1422 devlink_port, in __sb_tc_pool_bind_get_dumpit()
1440 devlink_port, in __sb_tc_pool_bind_get_dumpit()
1492 static int devlink_sb_tc_pool_bind_set(struct devlink_port *devlink_port, in devlink_sb_tc_pool_bind_set() argument
1499 const struct devlink_ops *ops = devlink_port->devlink->ops; in devlink_sb_tc_pool_bind_set()
1502 return ops->sb_tc_pool_bind_set(devlink_port, sb_index, in devlink_sb_tc_pool_bind_set()
1511 struct devlink_port *devlink_port = info->user_ptr[0]; in devlink_nl_cmd_sb_tc_pool_bind_set_doit() local
1537 return devlink_sb_tc_pool_bind_set(devlink_port, devlink_sb->index, in devlink_nl_cmd_sb_tc_pool_bind_set_doit()
3410 struct devlink_port *devlink_port; in devlink_nl_cmd_port_param_get_dumpit() local
3421 list_for_each_entry(devlink_port, &devlink->port_list, list) { in devlink_nl_cmd_port_param_get_dumpit()
3423 &devlink_port->param_list, list) { in devlink_nl_cmd_port_param_get_dumpit()
3429 devlink_port->devlink, in devlink_nl_cmd_port_param_get_dumpit()
3430 devlink_port->index, param_item, in devlink_nl_cmd_port_param_get_dumpit()
3454 struct devlink_port *devlink_port = info->user_ptr[0]; in devlink_nl_cmd_port_param_get_doit() local
3459 param_item = devlink_param_get_from_info(&devlink_port->param_list, in devlink_nl_cmd_port_param_get_doit()
3468 err = devlink_nl_param_fill(msg, devlink_port->devlink, in devlink_nl_cmd_port_param_get_doit()
3469 devlink_port->index, param_item, in devlink_nl_cmd_port_param_get_doit()
3483 struct devlink_port *devlink_port = info->user_ptr[0]; in devlink_nl_cmd_port_param_set_doit() local
3485 return __devlink_nl_cmd_param_set_doit(devlink_port->devlink, in devlink_nl_cmd_port_param_set_doit()
3486 devlink_port->index, in devlink_nl_cmd_port_param_set_doit()
3487 &devlink_port->param_list, info, in devlink_nl_cmd_port_param_set_doit()
6276 static bool devlink_port_type_should_warn(struct devlink_port *devlink_port) in devlink_port_type_should_warn() argument
6279 return devlink_port->attrs.flavour != DEVLINK_PORT_FLAVOUR_CPU && in devlink_port_type_should_warn()
6280 devlink_port->attrs.flavour != DEVLINK_PORT_FLAVOUR_DSA; in devlink_port_type_should_warn()
6285 static void devlink_port_type_warn_schedule(struct devlink_port *devlink_port) in devlink_port_type_warn_schedule() argument
6287 if (!devlink_port_type_should_warn(devlink_port)) in devlink_port_type_warn_schedule()
6292 schedule_delayed_work(&devlink_port->type_warn_dw, in devlink_port_type_warn_schedule()
6296 static void devlink_port_type_warn_cancel(struct devlink_port *devlink_port) in devlink_port_type_warn_cancel() argument
6298 if (!devlink_port_type_should_warn(devlink_port)) in devlink_port_type_warn_cancel()
6300 cancel_delayed_work_sync(&devlink_port->type_warn_dw); in devlink_port_type_warn_cancel()
6317 struct devlink_port *devlink_port, in devlink_port_register() argument
6325 devlink_port->devlink = devlink; in devlink_port_register()
6326 devlink_port->index = port_index; in devlink_port_register()
6327 devlink_port->registered = true; in devlink_port_register()
6328 spin_lock_init(&devlink_port->type_lock); in devlink_port_register()
6329 list_add_tail(&devlink_port->list, &devlink->port_list); in devlink_port_register()
6330 INIT_LIST_HEAD(&devlink_port->param_list); in devlink_port_register()
6332 INIT_DELAYED_WORK(&devlink_port->type_warn_dw, &devlink_port_type_warn); in devlink_port_register()
6333 devlink_port_type_warn_schedule(devlink_port); in devlink_port_register()
6334 devlink_port_notify(devlink_port, DEVLINK_CMD_PORT_NEW); in devlink_port_register()
6344 void devlink_port_unregister(struct devlink_port *devlink_port) in devlink_port_unregister() argument
6346 struct devlink *devlink = devlink_port->devlink; in devlink_port_unregister()
6348 devlink_port_type_warn_cancel(devlink_port); in devlink_port_unregister()
6349 devlink_port_notify(devlink_port, DEVLINK_CMD_PORT_DEL); in devlink_port_unregister()
6351 list_del(&devlink_port->list); in devlink_port_unregister()
6356 static void __devlink_port_type_set(struct devlink_port *devlink_port, in __devlink_port_type_set() argument
6360 if (WARN_ON(!devlink_port->registered)) in __devlink_port_type_set()
6362 devlink_port_type_warn_cancel(devlink_port); in __devlink_port_type_set()
6363 spin_lock_bh(&devlink_port->type_lock); in __devlink_port_type_set()
6364 devlink_port->type = type; in __devlink_port_type_set()
6365 devlink_port->type_dev = type_dev; in __devlink_port_type_set()
6366 spin_unlock_bh(&devlink_port->type_lock); in __devlink_port_type_set()
6367 devlink_port_notify(devlink_port, DEVLINK_CMD_PORT_NEW); in __devlink_port_type_set()
6376 void devlink_port_type_eth_set(struct devlink_port *devlink_port, in devlink_port_type_eth_set() argument
6411 __devlink_port_type_set(devlink_port, DEVLINK_PORT_TYPE_ETH, netdev); in devlink_port_type_eth_set()
6421 void devlink_port_type_ib_set(struct devlink_port *devlink_port, in devlink_port_type_ib_set() argument
6424 __devlink_port_type_set(devlink_port, DEVLINK_PORT_TYPE_IB, ibdev); in devlink_port_type_ib_set()
6433 void devlink_port_type_clear(struct devlink_port *devlink_port) in devlink_port_type_clear() argument
6435 __devlink_port_type_set(devlink_port, DEVLINK_PORT_TYPE_NOTSET, NULL); in devlink_port_type_clear()
6436 devlink_port_type_warn_schedule(devlink_port); in devlink_port_type_clear()
6440 static int __devlink_port_attrs_set(struct devlink_port *devlink_port, in __devlink_port_attrs_set() argument
6445 struct devlink_port_attrs *attrs = &devlink_port->attrs; in __devlink_port_attrs_set()
6447 if (WARN_ON(devlink_port->registered)) in __devlink_port_attrs_set()
6477 void devlink_port_attrs_set(struct devlink_port *devlink_port, in devlink_port_attrs_set() argument
6484 struct devlink_port_attrs *attrs = &devlink_port->attrs; in devlink_port_attrs_set()
6487 ret = __devlink_port_attrs_set(devlink_port, flavour, in devlink_port_attrs_set()
6506 void devlink_port_attrs_pci_pf_set(struct devlink_port *devlink_port, in devlink_port_attrs_pci_pf_set() argument
6510 struct devlink_port_attrs *attrs = &devlink_port->attrs; in devlink_port_attrs_pci_pf_set()
6513 ret = __devlink_port_attrs_set(devlink_port, in devlink_port_attrs_pci_pf_set()
6533 void devlink_port_attrs_pci_vf_set(struct devlink_port *devlink_port, in devlink_port_attrs_pci_vf_set() argument
6538 struct devlink_port_attrs *attrs = &devlink_port->attrs; in devlink_port_attrs_pci_vf_set()
6541 ret = __devlink_port_attrs_set(devlink_port, in devlink_port_attrs_pci_vf_set()
6551 static int __devlink_port_phys_port_name_get(struct devlink_port *devlink_port, in __devlink_port_phys_port_name_get() argument
6554 struct devlink_port_attrs *attrs = &devlink_port->attrs; in __devlink_port_phys_port_name_get()
7126 int devlink_port_params_register(struct devlink_port *devlink_port, in devlink_port_params_register() argument
7130 return __devlink_params_register(devlink_port->devlink, in devlink_port_params_register()
7131 devlink_port->index, in devlink_port_params_register()
7132 &devlink_port->param_list, params, in devlink_port_params_register()
7147 void devlink_port_params_unregister(struct devlink_port *devlink_port, in devlink_port_params_unregister() argument
7151 return __devlink_params_unregister(devlink_port->devlink, in devlink_port_params_unregister()
7152 devlink_port->index, in devlink_port_params_unregister()
7153 &devlink_port->param_list, in devlink_port_params_unregister()
7264 int devlink_port_param_driverinit_value_get(struct devlink_port *devlink_port, in devlink_port_param_driverinit_value_get() argument
7268 struct devlink *devlink = devlink_port->devlink; in devlink_port_param_driverinit_value_get()
7273 return __devlink_param_driverinit_value_get(&devlink_port->param_list, in devlink_port_param_driverinit_value_get()
7290 int devlink_port_param_driverinit_value_set(struct devlink_port *devlink_port, in devlink_port_param_driverinit_value_set() argument
7294 return __devlink_param_driverinit_value_set(devlink_port->devlink, in devlink_port_param_driverinit_value_set()
7295 devlink_port->index, in devlink_port_param_driverinit_value_set()
7296 &devlink_port->param_list, in devlink_port_param_driverinit_value_set()
7338 void devlink_port_param_value_changed(struct devlink_port *devlink_port, in devlink_port_param_value_changed() argument
7343 param_item = devlink_param_find_by_id(&devlink_port->param_list, in devlink_port_param_value_changed()
7347 devlink_param_notify(devlink_port->devlink, devlink_port->index, in devlink_port_param_value_changed()
7939 struct devlink_port *in_devlink_port) in devlink_trap_report_metadata_fill()
7960 void *trap_ctx, struct devlink_port *in_devlink_port) in devlink_trap_report()
8073 struct devlink_port *devlink_port; in devlink_compat_phys_port_name_get() local
8081 devlink_port = netdev_to_devlink_port(dev); in devlink_compat_phys_port_name_get()
8082 if (!devlink_port) in devlink_compat_phys_port_name_get()
8085 return __devlink_port_phys_port_name_get(devlink_port, name, len); in devlink_compat_phys_port_name_get()
8091 struct devlink_port *devlink_port; in devlink_compat_switch_id_get() local
8097 devlink_port = netdev_to_devlink_port(dev); in devlink_compat_switch_id_get()
8098 if (!devlink_port || !devlink_port->attrs.switch_port) in devlink_compat_switch_id_get()
8101 memcpy(ppid, &devlink_port->attrs.switch_id, sizeof(*ppid)); in devlink_compat_switch_id_get()