Add a new attribute that indicates the split ability to devlink port.

Drivers are expected to set it via devlink_port_attrs_set(), before
registering the port.

Signed-off-by: Danielle Ratson <daniel...@mellanox.com>
Reviewed-by: Jiri Pirko <j...@mellanox.com>
---
 drivers/net/ethernet/mellanox/mlxsw/core.c       | 1 +
 drivers/net/ethernet/netronome/nfp/nfp_devlink.c | 1 +
 include/net/devlink.h                            | 3 ++-
 include/uapi/linux/devlink.h                     | 1 +
 net/core/devlink.c                               | 3 +++
 5 files changed, 8 insertions(+), 1 deletion(-)

diff --git a/drivers/net/ethernet/mellanox/mlxsw/core.c 
b/drivers/net/ethernet/mellanox/mlxsw/core.c
index f85f5d88d331..8b3791d73c99 100644
--- a/drivers/net/ethernet/mellanox/mlxsw/core.c
+++ b/drivers/net/ethernet/mellanox/mlxsw/core.c
@@ -2135,6 +2135,7 @@ static int __mlxsw_core_port_init(struct mlxsw_core 
*mlxsw_core, u8 local_port,
 
        attrs.split = split;
        attrs.lanes = lanes;
+       attrs.splittable = splittable;
        attrs.flavour = flavour;
        attrs.phys.port_number = port_number;
        attrs.phys.split_subport_number = split_port_subnumber;
diff --git a/drivers/net/ethernet/netronome/nfp/nfp_devlink.c 
b/drivers/net/ethernet/netronome/nfp/nfp_devlink.c
index 71f4e624b3db..b6a10565309a 100644
--- a/drivers/net/ethernet/netronome/nfp/nfp_devlink.c
+++ b/drivers/net/ethernet/netronome/nfp/nfp_devlink.c
@@ -367,6 +367,7 @@ int nfp_devlink_port_register(struct nfp_app *app, struct 
nfp_port *port)
                return ret;
 
        attrs.split = eth_port.is_split;
+       attrs.splittable = !attrs.split;
        attrs.flavour = DEVLINK_PORT_FLAVOUR_PHYSICAL;
        attrs.phys.port_number = eth_port.label_port;
        attrs.phys.split_subport_number = eth_port.label_subport;
diff --git a/include/net/devlink.h b/include/net/devlink.h
index ee088cead80a..3eb5fd41731f 100644
--- a/include/net/devlink.h
+++ b/include/net/devlink.h
@@ -65,7 +65,8 @@ struct devlink_port_pci_vf_attrs {
 };
 
 struct devlink_port_attrs {
-       u8 split:1;
+       u8 split:1,
+          splittable:1;
        u32 lanes;
        enum devlink_port_flavour flavour;
        struct netdev_phys_item_id switch_id;
diff --git a/include/uapi/linux/devlink.h b/include/uapi/linux/devlink.h
index 806c6a437fa2..22bd17ba8adb 100644
--- a/include/uapi/linux/devlink.h
+++ b/include/uapi/linux/devlink.h
@@ -452,6 +452,7 @@ enum devlink_attr {
        DEVLINK_ATTR_TRAP_POLICER_BURST,                /* u64 */
 
        DEVLINK_ATTR_PORT_LANES,                        /* u32 */
+       DEVLINK_ATTR_PORT_SPLITTABLE,                   /* u8 */
 
        /* add new attributes above here, update the policy in devlink.c */
 
diff --git a/net/core/devlink.c b/net/core/devlink.c
index ce82629b7386..a47426941e21 100644
--- a/net/core/devlink.c
+++ b/net/core/devlink.c
@@ -530,6 +530,8 @@ static int devlink_nl_port_attrs_put(struct sk_buff *msg,
                if (nla_put_u32(msg, DEVLINK_ATTR_PORT_LANES, attrs->lanes))
                        return -EMSGSIZE;
        }
+       if (nla_put_u8(msg, DEVLINK_ATTR_PORT_SPLITTABLE, attrs->splittable))
+               return -EMSGSIZE;
        if (nla_put_u16(msg, DEVLINK_ATTR_PORT_FLAVOUR, attrs->flavour))
                return -EMSGSIZE;
        switch (devlink_port->attrs.flavour) {
@@ -7409,6 +7411,7 @@ static int __devlink_port_attrs_set(struct devlink_port 
*devlink_port,
  *                                        user, for example the front panel
  *                                        port number
  *                          @split: indicates if this is split port
+ *                          @splittable: indicates if the port can be split.
  *                          @lanes: maximum number of lanes the port supports.
  *                                  0 value is not passed to netlink and valid
  *                                  number is a power of 2.
-- 
2.20.1

Reply via email to