mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-22 14:41:27 +00:00
devlink: Refactor physical port attributes
To support additional devlink port flavours and to support few common and few different port attributes, move physical port attributes to a different structure. Acked-by: Jiri Pirko <jiri@mellanox.com> Signed-off-by: Parav Pandit <parav@mellanox.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
b14a260e33
commit
378ef01b5f
2 changed files with 49 additions and 22 deletions
|
@ -38,14 +38,23 @@ struct devlink {
|
||||||
char priv[0] __aligned(NETDEV_ALIGN);
|
char priv[0] __aligned(NETDEV_ALIGN);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct devlink_port_phys_attrs {
|
||||||
|
u32 port_number; /* Same value as "split group".
|
||||||
|
* A physical port which is visible to the user
|
||||||
|
* for a given port flavour.
|
||||||
|
*/
|
||||||
|
u32 split_subport_number;
|
||||||
|
};
|
||||||
|
|
||||||
struct devlink_port_attrs {
|
struct devlink_port_attrs {
|
||||||
u8 set:1,
|
u8 set:1,
|
||||||
split:1,
|
split:1,
|
||||||
switch_port:1;
|
switch_port:1;
|
||||||
enum devlink_port_flavour flavour;
|
enum devlink_port_flavour flavour;
|
||||||
u32 port_number; /* same value as "split group" */
|
|
||||||
u32 split_subport_number;
|
|
||||||
struct netdev_phys_item_id switch_id;
|
struct netdev_phys_item_id switch_id;
|
||||||
|
union {
|
||||||
|
struct devlink_port_phys_attrs phys;
|
||||||
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
struct devlink_port {
|
struct devlink_port {
|
||||||
|
|
|
@ -515,14 +515,16 @@ static int devlink_nl_port_attrs_put(struct sk_buff *msg,
|
||||||
return 0;
|
return 0;
|
||||||
if (nla_put_u16(msg, DEVLINK_ATTR_PORT_FLAVOUR, attrs->flavour))
|
if (nla_put_u16(msg, DEVLINK_ATTR_PORT_FLAVOUR, attrs->flavour))
|
||||||
return -EMSGSIZE;
|
return -EMSGSIZE;
|
||||||
if (nla_put_u32(msg, DEVLINK_ATTR_PORT_NUMBER, attrs->port_number))
|
if (nla_put_u32(msg, DEVLINK_ATTR_PORT_NUMBER,
|
||||||
|
attrs->phys.port_number))
|
||||||
return -EMSGSIZE;
|
return -EMSGSIZE;
|
||||||
if (!attrs->split)
|
if (!attrs->split)
|
||||||
return 0;
|
return 0;
|
||||||
if (nla_put_u32(msg, DEVLINK_ATTR_PORT_SPLIT_GROUP, attrs->port_number))
|
if (nla_put_u32(msg, DEVLINK_ATTR_PORT_SPLIT_GROUP,
|
||||||
|
attrs->phys.port_number))
|
||||||
return -EMSGSIZE;
|
return -EMSGSIZE;
|
||||||
if (nla_put_u32(msg, DEVLINK_ATTR_PORT_SPLIT_SUBPORT_NUMBER,
|
if (nla_put_u32(msg, DEVLINK_ATTR_PORT_SPLIT_SUBPORT_NUMBER,
|
||||||
attrs->split_subport_number))
|
attrs->phys.split_subport_number))
|
||||||
return -EMSGSIZE;
|
return -EMSGSIZE;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -5738,6 +5740,29 @@ void devlink_port_type_clear(struct devlink_port *devlink_port)
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(devlink_port_type_clear);
|
EXPORT_SYMBOL_GPL(devlink_port_type_clear);
|
||||||
|
|
||||||
|
static int __devlink_port_attrs_set(struct devlink_port *devlink_port,
|
||||||
|
enum devlink_port_flavour flavour,
|
||||||
|
const unsigned char *switch_id,
|
||||||
|
unsigned char switch_id_len)
|
||||||
|
{
|
||||||
|
struct devlink_port_attrs *attrs = &devlink_port->attrs;
|
||||||
|
|
||||||
|
if (WARN_ON(devlink_port->registered))
|
||||||
|
return -EEXIST;
|
||||||
|
attrs->set = true;
|
||||||
|
attrs->flavour = flavour;
|
||||||
|
if (switch_id) {
|
||||||
|
attrs->switch_port = true;
|
||||||
|
if (WARN_ON(switch_id_len > MAX_PHYS_ITEM_ID_LEN))
|
||||||
|
switch_id_len = MAX_PHYS_ITEM_ID_LEN;
|
||||||
|
memcpy(attrs->switch_id.id, switch_id, switch_id_len);
|
||||||
|
attrs->switch_id.id_len = switch_id_len;
|
||||||
|
} else {
|
||||||
|
attrs->switch_port = false;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* devlink_port_attrs_set - Set port attributes
|
* devlink_port_attrs_set - Set port attributes
|
||||||
*
|
*
|
||||||
|
@ -5760,23 +5785,15 @@ void devlink_port_attrs_set(struct devlink_port *devlink_port,
|
||||||
unsigned char switch_id_len)
|
unsigned char switch_id_len)
|
||||||
{
|
{
|
||||||
struct devlink_port_attrs *attrs = &devlink_port->attrs;
|
struct devlink_port_attrs *attrs = &devlink_port->attrs;
|
||||||
|
int ret;
|
||||||
|
|
||||||
if (WARN_ON(devlink_port->registered))
|
ret = __devlink_port_attrs_set(devlink_port, flavour,
|
||||||
|
switch_id, switch_id_len);
|
||||||
|
if (ret)
|
||||||
return;
|
return;
|
||||||
attrs->set = true;
|
|
||||||
attrs->flavour = flavour;
|
|
||||||
attrs->port_number = port_number;
|
|
||||||
attrs->split = split;
|
attrs->split = split;
|
||||||
attrs->split_subport_number = split_subport_number;
|
attrs->phys.port_number = port_number;
|
||||||
if (switch_id) {
|
attrs->phys.split_subport_number = split_subport_number;
|
||||||
attrs->switch_port = true;
|
|
||||||
if (WARN_ON(switch_id_len > MAX_PHYS_ITEM_ID_LEN))
|
|
||||||
switch_id_len = MAX_PHYS_ITEM_ID_LEN;
|
|
||||||
memcpy(attrs->switch_id.id, switch_id, switch_id_len);
|
|
||||||
attrs->switch_id.id_len = switch_id_len;
|
|
||||||
} else {
|
|
||||||
attrs->switch_port = false;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(devlink_port_attrs_set);
|
EXPORT_SYMBOL_GPL(devlink_port_attrs_set);
|
||||||
|
|
||||||
|
@ -5792,10 +5809,11 @@ static int __devlink_port_phys_port_name_get(struct devlink_port *devlink_port,
|
||||||
switch (attrs->flavour) {
|
switch (attrs->flavour) {
|
||||||
case DEVLINK_PORT_FLAVOUR_PHYSICAL:
|
case DEVLINK_PORT_FLAVOUR_PHYSICAL:
|
||||||
if (!attrs->split)
|
if (!attrs->split)
|
||||||
n = snprintf(name, len, "p%u", attrs->port_number);
|
n = snprintf(name, len, "p%u", attrs->phys.port_number);
|
||||||
else
|
else
|
||||||
n = snprintf(name, len, "p%us%u", attrs->port_number,
|
n = snprintf(name, len, "p%us%u",
|
||||||
attrs->split_subport_number);
|
attrs->phys.port_number,
|
||||||
|
attrs->phys.split_subport_number);
|
||||||
break;
|
break;
|
||||||
case DEVLINK_PORT_FLAVOUR_CPU:
|
case DEVLINK_PORT_FLAVOUR_CPU:
|
||||||
case DEVLINK_PORT_FLAVOUR_DSA:
|
case DEVLINK_PORT_FLAVOUR_DSA:
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue