mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2025-01-10 23:20:05 +00:00
devlink: extend attrs_set for setting port flavours
Devlink ports can have specific flavour according to the purpose of use. This patch extend attrs_set so the driver can say which flavour port has. Initial flavours are: physical, cpu, dsa User can query this to see right away what is the purpose of each port. Signed-off-by: Jiri Pirko <jiri@mellanox.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
b9ffcbaf56
commit
5ec1380a21
@ -1722,8 +1722,8 @@ void mlxsw_core_port_eth_set(struct mlxsw_core *mlxsw_core, u8 local_port,
|
||||
struct devlink_port *devlink_port = &mlxsw_core_port->devlink_port;
|
||||
|
||||
mlxsw_core_port->port_driver_priv = port_driver_priv;
|
||||
devlink_port_attrs_set(devlink_port, port_number,
|
||||
split, split_port_subnumber);
|
||||
devlink_port_attrs_set(devlink_port, DEVLINK_PORT_FLAVOUR_PHYSICAL,
|
||||
port_number, split, split_port_subnumber);
|
||||
devlink_port_type_eth_set(devlink_port, dev);
|
||||
}
|
||||
EXPORT_SYMBOL(mlxsw_core_port_eth_set);
|
||||
|
@ -175,8 +175,9 @@ int nfp_devlink_port_register(struct nfp_app *app, struct nfp_port *port)
|
||||
return ret;
|
||||
|
||||
devlink_port_type_eth_set(&port->dl_port, port->netdev);
|
||||
devlink_port_attrs_set(&port->dl_port, eth_port.label_port,
|
||||
eth_port.is_split, eth_port.label_subport);
|
||||
devlink_port_attrs_set(&port->dl_port, DEVLINK_PORT_FLAVOUR_PHYSICAL,
|
||||
eth_port.label_port, eth_port.is_split,
|
||||
eth_port.label_subport);
|
||||
|
||||
devlink = priv_to_devlink(app->pf);
|
||||
|
||||
|
@ -37,6 +37,7 @@ struct devlink {
|
||||
|
||||
struct devlink_port_attrs {
|
||||
bool set;
|
||||
enum devlink_port_flavour flavour;
|
||||
u32 port_number; /* same value as "split group" */
|
||||
bool split;
|
||||
u32 split_subport_number;
|
||||
@ -374,6 +375,7 @@ void devlink_port_type_ib_set(struct devlink_port *devlink_port,
|
||||
struct ib_device *ibdev);
|
||||
void devlink_port_type_clear(struct devlink_port *devlink_port);
|
||||
void devlink_port_attrs_set(struct devlink_port *devlink_port,
|
||||
enum devlink_port_flavour flavour,
|
||||
u32 port_number, bool split,
|
||||
u32 split_subport_number);
|
||||
int devlink_sb_register(struct devlink *devlink, unsigned int sb_index,
|
||||
@ -474,6 +476,7 @@ static inline void devlink_port_type_clear(struct devlink_port *devlink_port)
|
||||
}
|
||||
|
||||
static inline void devlink_port_attrs_set(struct devlink_port *devlink_port,
|
||||
enum devlink_port_flavour flavour,
|
||||
u32 port_number, bool split,
|
||||
u32 split_subport_number)
|
||||
{
|
||||
|
@ -132,6 +132,16 @@ enum devlink_eswitch_encap_mode {
|
||||
DEVLINK_ESWITCH_ENCAP_MODE_BASIC,
|
||||
};
|
||||
|
||||
enum devlink_port_flavour {
|
||||
DEVLINK_PORT_FLAVOUR_PHYSICAL, /* Any kind of a port physically
|
||||
* facing the user.
|
||||
*/
|
||||
DEVLINK_PORT_FLAVOUR_CPU, /* CPU port */
|
||||
DEVLINK_PORT_FLAVOUR_DSA, /* Distributed switch architecture
|
||||
* interconnect port.
|
||||
*/
|
||||
};
|
||||
|
||||
enum devlink_attr {
|
||||
/* don't change the order or add anything between, this is ABI! */
|
||||
DEVLINK_ATTR_UNSPEC,
|
||||
@ -224,6 +234,7 @@ enum devlink_attr {
|
||||
DEVLINK_ATTR_DPIPE_TABLE_RESOURCE_ID, /* u64 */
|
||||
DEVLINK_ATTR_DPIPE_TABLE_RESOURCE_UNITS,/* u64 */
|
||||
|
||||
DEVLINK_ATTR_PORT_FLAVOUR, /* u16 */
|
||||
DEVLINK_ATTR_PORT_NUMBER, /* u32 */
|
||||
DEVLINK_ATTR_PORT_SPLIT_SUBPORT_NUMBER, /* u32 */
|
||||
|
||||
|
@ -460,6 +460,8 @@ static int devlink_nl_port_attrs_put(struct sk_buff *msg,
|
||||
|
||||
if (!attrs->set)
|
||||
return 0;
|
||||
if (nla_put_u16(msg, DEVLINK_ATTR_PORT_FLAVOUR, attrs->flavour))
|
||||
return -EMSGSIZE;
|
||||
if (nla_put_u32(msg, DEVLINK_ATTR_PORT_NUMBER, attrs->port_number))
|
||||
return -EMSGSIZE;
|
||||
if (!attrs->split)
|
||||
@ -2991,6 +2993,7 @@ EXPORT_SYMBOL_GPL(devlink_port_type_clear);
|
||||
* devlink_port_attrs_set - Set port attributes
|
||||
*
|
||||
* @devlink_port: devlink port
|
||||
* @flavour: flavour of the port
|
||||
* @port_number: number of the port that is facing user, for example
|
||||
* the front panel port number
|
||||
* @split: indicates if this is split port
|
||||
@ -2998,12 +3001,14 @@ EXPORT_SYMBOL_GPL(devlink_port_type_clear);
|
||||
* of subport.
|
||||
*/
|
||||
void devlink_port_attrs_set(struct devlink_port *devlink_port,
|
||||
enum devlink_port_flavour flavour,
|
||||
u32 port_number, bool split,
|
||||
u32 split_subport_number)
|
||||
{
|
||||
struct devlink_port_attrs *attrs = &devlink_port->attrs;
|
||||
|
||||
attrs->set = true;
|
||||
attrs->flavour = flavour;
|
||||
attrs->port_number = port_number;
|
||||
attrs->split = split;
|
||||
attrs->split_subport_number = split_subport_number;
|
||||
|
Loading…
x
Reference in New Issue
Block a user