Lines Matching refs:linecard

278 		struct devlink_linecard *linecard;  in devlink_linecard_get_from_attrs()  local
280 linecard = devlink_linecard_get_by_index(devlink, linecard_index); in devlink_linecard_get_from_attrs()
281 if (!linecard) in devlink_linecard_get_from_attrs()
283 return linecard; in devlink_linecard_get_from_attrs()
949 if (devlink_port->linecard && in devlink_nl_port_fill()
951 devlink_port->linecard->index)) in devlink_nl_port_fill()
1770 struct devlink_linecard *linecard, in devlink_nl_linecard_fill() argument
1786 if (nla_put_u32(msg, DEVLINK_ATTR_LINECARD_INDEX, linecard->index)) in devlink_nl_linecard_fill()
1788 if (nla_put_u8(msg, DEVLINK_ATTR_LINECARD_STATE, linecard->state)) in devlink_nl_linecard_fill()
1790 if (linecard->type && in devlink_nl_linecard_fill()
1791 nla_put_string(msg, DEVLINK_ATTR_LINECARD_TYPE, linecard->type)) in devlink_nl_linecard_fill()
1794 if (linecard->types_count) { in devlink_nl_linecard_fill()
1799 for (i = 0; i < linecard->types_count; i++) { in devlink_nl_linecard_fill()
1800 linecard_type = &linecard->types[i]; in devlink_nl_linecard_fill()
1810 if (linecard->nested_devlink && in devlink_nl_linecard_fill()
1811 devlink_nl_put_nested_handle(msg, linecard->nested_devlink)) in devlink_nl_linecard_fill()
1822 static void devlink_linecard_notify(struct devlink_linecard *linecard, in devlink_linecard_notify() argument
1825 struct devlink *devlink = linecard->devlink; in devlink_linecard_notify()
1839 err = devlink_nl_linecard_fill(msg, devlink, linecard, cmd, 0, 0, 0, in devlink_linecard_notify()
1853 struct devlink_linecard *linecard = info->user_ptr[1]; in devlink_nl_cmd_linecard_get_doit() local
1854 struct devlink *devlink = linecard->devlink; in devlink_nl_cmd_linecard_get_doit()
1862 mutex_lock(&linecard->state_lock); in devlink_nl_cmd_linecard_get_doit()
1863 err = devlink_nl_linecard_fill(msg, devlink, linecard, in devlink_nl_cmd_linecard_get_doit()
1867 mutex_unlock(&linecard->state_lock); in devlink_nl_cmd_linecard_get_doit()
1881 struct devlink_linecard *linecard; in devlink_nl_cmd_linecard_get_dump_one() local
1885 list_for_each_entry(linecard, &devlink->linecard_list, list) { in devlink_nl_cmd_linecard_get_dump_one()
1890 mutex_lock(&linecard->state_lock); in devlink_nl_cmd_linecard_get_dump_one()
1891 err = devlink_nl_linecard_fill(msg, devlink, linecard, in devlink_nl_cmd_linecard_get_dump_one()
1897 mutex_unlock(&linecard->state_lock); in devlink_nl_cmd_linecard_get_dump_one()
1913 devlink_linecard_type_lookup(struct devlink_linecard *linecard, in devlink_linecard_type_lookup() argument
1919 for (i = 0; i < linecard->types_count; i++) { in devlink_linecard_type_lookup()
1920 linecard_type = &linecard->types[i]; in devlink_linecard_type_lookup()
1927 static int devlink_linecard_type_set(struct devlink_linecard *linecard, in devlink_linecard_type_set() argument
1931 const struct devlink_linecard_ops *ops = linecard->ops; in devlink_linecard_type_set()
1935 mutex_lock(&linecard->state_lock); in devlink_linecard_type_set()
1936 if (linecard->state == DEVLINK_LINECARD_STATE_PROVISIONING) { in devlink_linecard_type_set()
1941 if (linecard->state == DEVLINK_LINECARD_STATE_UNPROVISIONING) { in devlink_linecard_type_set()
1947 linecard_type = devlink_linecard_type_lookup(linecard, type); in devlink_linecard_type_set()
1954 if (linecard->state != DEVLINK_LINECARD_STATE_UNPROVISIONED && in devlink_linecard_type_set()
1955 linecard->state != DEVLINK_LINECARD_STATE_PROVISIONING_FAILED) { in devlink_linecard_type_set()
1963 ops->same_provision(linecard, linecard->priv, in devlink_linecard_type_set()
1970 linecard->state = DEVLINK_LINECARD_STATE_PROVISIONING; in devlink_linecard_type_set()
1971 linecard->type = linecard_type->type; in devlink_linecard_type_set()
1972 devlink_linecard_notify(linecard, DEVLINK_CMD_LINECARD_NEW); in devlink_linecard_type_set()
1973 mutex_unlock(&linecard->state_lock); in devlink_linecard_type_set()
1974 err = ops->provision(linecard, linecard->priv, linecard_type->type, in devlink_linecard_type_set()
1980 mutex_lock(&linecard->state_lock); in devlink_linecard_type_set()
1981 linecard->state = DEVLINK_LINECARD_STATE_UNPROVISIONED; in devlink_linecard_type_set()
1982 linecard->type = NULL; in devlink_linecard_type_set()
1983 devlink_linecard_notify(linecard, DEVLINK_CMD_LINECARD_NEW); in devlink_linecard_type_set()
1984 mutex_unlock(&linecard->state_lock); in devlink_linecard_type_set()
1989 mutex_unlock(&linecard->state_lock); in devlink_linecard_type_set()
1993 static int devlink_linecard_type_unset(struct devlink_linecard *linecard, in devlink_linecard_type_unset() argument
1998 mutex_lock(&linecard->state_lock); in devlink_linecard_type_unset()
1999 if (linecard->state == DEVLINK_LINECARD_STATE_PROVISIONING) { in devlink_linecard_type_unset()
2004 if (linecard->state == DEVLINK_LINECARD_STATE_UNPROVISIONING) { in devlink_linecard_type_unset()
2009 if (linecard->state == DEVLINK_LINECARD_STATE_PROVISIONING_FAILED) { in devlink_linecard_type_unset()
2010 linecard->state = DEVLINK_LINECARD_STATE_UNPROVISIONED; in devlink_linecard_type_unset()
2011 linecard->type = NULL; in devlink_linecard_type_unset()
2012 devlink_linecard_notify(linecard, DEVLINK_CMD_LINECARD_NEW); in devlink_linecard_type_unset()
2017 if (linecard->state == DEVLINK_LINECARD_STATE_UNPROVISIONED) { in devlink_linecard_type_unset()
2022 linecard->state = DEVLINK_LINECARD_STATE_UNPROVISIONING; in devlink_linecard_type_unset()
2023 devlink_linecard_notify(linecard, DEVLINK_CMD_LINECARD_NEW); in devlink_linecard_type_unset()
2024 mutex_unlock(&linecard->state_lock); in devlink_linecard_type_unset()
2025 err = linecard->ops->unprovision(linecard, linecard->priv, in devlink_linecard_type_unset()
2031 mutex_lock(&linecard->state_lock); in devlink_linecard_type_unset()
2032 linecard->state = DEVLINK_LINECARD_STATE_UNPROVISIONED; in devlink_linecard_type_unset()
2033 linecard->type = NULL; in devlink_linecard_type_unset()
2034 devlink_linecard_notify(linecard, DEVLINK_CMD_LINECARD_NEW); in devlink_linecard_type_unset()
2035 mutex_unlock(&linecard->state_lock); in devlink_linecard_type_unset()
2040 mutex_unlock(&linecard->state_lock); in devlink_linecard_type_unset()
2047 struct devlink_linecard *linecard = info->user_ptr[1]; in devlink_nl_cmd_linecard_set_doit() local
2056 err = devlink_linecard_type_set(linecard, type, extack); in devlink_nl_cmd_linecard_set_doit()
2060 err = devlink_linecard_type_unset(linecard, extack); in devlink_nl_cmd_linecard_set_doit()
6700 struct devlink_linecard *linecard; in devlink_notify_register() local
6707 list_for_each_entry(linecard, &devlink->linecard_list, list) in devlink_notify_register()
6708 devlink_linecard_notify(linecard, DEVLINK_CMD_LINECARD_NEW); in devlink_notify_register()
7397 struct devlink_linecard *linecard) in devlink_port_linecard_set() argument
7401 devlink_port->linecard = linecard; in devlink_port_linecard_set()
7416 if (devlink_port->linecard) in __devlink_port_phys_port_name_get()
7418 devlink_port->linecard->index); in __devlink_port_phys_port_name_get()
7476 static int devlink_linecard_types_init(struct devlink_linecard *linecard) in devlink_linecard_types_init() argument
7482 count = linecard->ops->types_count(linecard, linecard->priv); in devlink_linecard_types_init()
7483 linecard->types = kmalloc_array(count, sizeof(*linecard_type), in devlink_linecard_types_init()
7485 if (!linecard->types) in devlink_linecard_types_init()
7487 linecard->types_count = count; in devlink_linecard_types_init()
7490 linecard_type = &linecard->types[i]; in devlink_linecard_types_init()
7491 linecard->ops->types_get(linecard, linecard->priv, i, in devlink_linecard_types_init()
7498 static void devlink_linecard_types_fini(struct devlink_linecard *linecard) in devlink_linecard_types_fini() argument
7500 kfree(linecard->types); in devlink_linecard_types_fini()
7520 struct devlink_linecard *linecard; in devl_linecard_create() local
7530 linecard = kzalloc(sizeof(*linecard), GFP_KERNEL); in devl_linecard_create()
7531 if (!linecard) in devl_linecard_create()
7534 linecard->devlink = devlink; in devl_linecard_create()
7535 linecard->index = linecard_index; in devl_linecard_create()
7536 linecard->ops = ops; in devl_linecard_create()
7537 linecard->priv = priv; in devl_linecard_create()
7538 linecard->state = DEVLINK_LINECARD_STATE_UNPROVISIONED; in devl_linecard_create()
7539 mutex_init(&linecard->state_lock); in devl_linecard_create()
7541 err = devlink_linecard_types_init(linecard); in devl_linecard_create()
7543 mutex_destroy(&linecard->state_lock); in devl_linecard_create()
7544 kfree(linecard); in devl_linecard_create()
7548 list_add_tail(&linecard->list, &devlink->linecard_list); in devl_linecard_create()
7549 devlink_linecard_notify(linecard, DEVLINK_CMD_LINECARD_NEW); in devl_linecard_create()
7550 return linecard; in devl_linecard_create()
7559 void devl_linecard_destroy(struct devlink_linecard *linecard) in devl_linecard_destroy() argument
7561 devlink_linecard_notify(linecard, DEVLINK_CMD_LINECARD_DEL); in devl_linecard_destroy()
7562 list_del(&linecard->list); in devl_linecard_destroy()
7563 devlink_linecard_types_fini(linecard); in devl_linecard_destroy()
7564 mutex_destroy(&linecard->state_lock); in devl_linecard_destroy()
7565 kfree(linecard); in devl_linecard_destroy()
7578 void devlink_linecard_provision_set(struct devlink_linecard *linecard, in devlink_linecard_provision_set() argument
7581 mutex_lock(&linecard->state_lock); in devlink_linecard_provision_set()
7582 WARN_ON(linecard->type && strcmp(linecard->type, type)); in devlink_linecard_provision_set()
7583 linecard->state = DEVLINK_LINECARD_STATE_PROVISIONED; in devlink_linecard_provision_set()
7584 linecard->type = type; in devlink_linecard_provision_set()
7585 devlink_linecard_notify(linecard, DEVLINK_CMD_LINECARD_NEW); in devlink_linecard_provision_set()
7586 mutex_unlock(&linecard->state_lock); in devlink_linecard_provision_set()
7598 void devlink_linecard_provision_clear(struct devlink_linecard *linecard) in devlink_linecard_provision_clear() argument
7600 mutex_lock(&linecard->state_lock); in devlink_linecard_provision_clear()
7601 WARN_ON(linecard->nested_devlink); in devlink_linecard_provision_clear()
7602 linecard->state = DEVLINK_LINECARD_STATE_UNPROVISIONED; in devlink_linecard_provision_clear()
7603 linecard->type = NULL; in devlink_linecard_provision_clear()
7604 devlink_linecard_notify(linecard, DEVLINK_CMD_LINECARD_NEW); in devlink_linecard_provision_clear()
7605 mutex_unlock(&linecard->state_lock); in devlink_linecard_provision_clear()
7617 void devlink_linecard_provision_fail(struct devlink_linecard *linecard) in devlink_linecard_provision_fail() argument
7619 mutex_lock(&linecard->state_lock); in devlink_linecard_provision_fail()
7620 WARN_ON(linecard->nested_devlink); in devlink_linecard_provision_fail()
7621 linecard->state = DEVLINK_LINECARD_STATE_PROVISIONING_FAILED; in devlink_linecard_provision_fail()
7622 devlink_linecard_notify(linecard, DEVLINK_CMD_LINECARD_NEW); in devlink_linecard_provision_fail()
7623 mutex_unlock(&linecard->state_lock); in devlink_linecard_provision_fail()
7632 void devlink_linecard_activate(struct devlink_linecard *linecard) in devlink_linecard_activate() argument
7634 mutex_lock(&linecard->state_lock); in devlink_linecard_activate()
7635 WARN_ON(linecard->state != DEVLINK_LINECARD_STATE_PROVISIONED); in devlink_linecard_activate()
7636 linecard->state = DEVLINK_LINECARD_STATE_ACTIVE; in devlink_linecard_activate()
7637 devlink_linecard_notify(linecard, DEVLINK_CMD_LINECARD_NEW); in devlink_linecard_activate()
7638 mutex_unlock(&linecard->state_lock); in devlink_linecard_activate()
7647 void devlink_linecard_deactivate(struct devlink_linecard *linecard) in devlink_linecard_deactivate() argument
7649 mutex_lock(&linecard->state_lock); in devlink_linecard_deactivate()
7650 switch (linecard->state) { in devlink_linecard_deactivate()
7652 linecard->state = DEVLINK_LINECARD_STATE_PROVISIONED; in devlink_linecard_deactivate()
7653 devlink_linecard_notify(linecard, DEVLINK_CMD_LINECARD_NEW); in devlink_linecard_deactivate()
7664 mutex_unlock(&linecard->state_lock); in devlink_linecard_deactivate()
7675 void devlink_linecard_nested_dl_set(struct devlink_linecard *linecard, in devlink_linecard_nested_dl_set() argument
7678 mutex_lock(&linecard->state_lock); in devlink_linecard_nested_dl_set()
7679 linecard->nested_devlink = nested_devlink; in devlink_linecard_nested_dl_set()
7680 devlink_linecard_notify(linecard, DEVLINK_CMD_LINECARD_NEW); in devlink_linecard_nested_dl_set()
7681 mutex_unlock(&linecard->state_lock); in devlink_linecard_nested_dl_set()