mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-04-30 22:50:54 -04:00
bnxt: Implement ndo_get_port_parent_id()
BNXT only supports SWITCHDEV_ATTR_ID_PORT_PARENT_ID, which makes it a great candidate to be converted to use the ndo_get_port_parent_id() NDO instead of implementing switchdev_port_attr_get(). The conversion is straight forward here since the PF and VF code use the same getter. Since bnxt makes uses of switchdev_port_same_parent_id() convert it to use netdev_port_same_parent_id(). Acked-by: Jiri Pirko <jiri@mellanox.com> Signed-off-by: Florian Fainelli <f.fainelli@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
David S. Miller
parent
d6abc59694
commit
52d5254a2d
@@ -9981,8 +9981,11 @@ static int bnxt_get_phys_port_name(struct net_device *dev, char *buf,
|
||||
return 0;
|
||||
}
|
||||
|
||||
int bnxt_port_attr_get(struct bnxt *bp, struct switchdev_attr *attr)
|
||||
int bnxt_get_port_parent_id(struct net_device *dev,
|
||||
struct netdev_phys_item_id *ppid)
|
||||
{
|
||||
struct bnxt *bp = netdev_priv(dev);
|
||||
|
||||
if (bp->eswitch_mode != DEVLINK_ESWITCH_MODE_SWITCHDEV)
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
@@ -9990,27 +9993,12 @@ int bnxt_port_attr_get(struct bnxt *bp, struct switchdev_attr *attr)
|
||||
if (!BNXT_PF(bp))
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
switch (attr->id) {
|
||||
case SWITCHDEV_ATTR_ID_PORT_PARENT_ID:
|
||||
attr->u.ppid.id_len = sizeof(bp->switch_id);
|
||||
memcpy(attr->u.ppid.id, bp->switch_id, attr->u.ppid.id_len);
|
||||
break;
|
||||
default:
|
||||
return -EOPNOTSUPP;
|
||||
}
|
||||
ppid->id_len = sizeof(bp->switch_id);
|
||||
memcpy(ppid->id, bp->switch_id, ppid->id_len);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int bnxt_swdev_port_attr_get(struct net_device *dev,
|
||||
struct switchdev_attr *attr)
|
||||
{
|
||||
return bnxt_port_attr_get(netdev_priv(dev), attr);
|
||||
}
|
||||
|
||||
static const struct switchdev_ops bnxt_switchdev_ops = {
|
||||
.switchdev_port_attr_get = bnxt_swdev_port_attr_get
|
||||
};
|
||||
|
||||
static const struct net_device_ops bnxt_netdev_ops = {
|
||||
.ndo_open = bnxt_open,
|
||||
.ndo_start_xmit = bnxt_start_xmit,
|
||||
@@ -10042,6 +10030,7 @@ static const struct net_device_ops bnxt_netdev_ops = {
|
||||
.ndo_bpf = bnxt_xdp,
|
||||
.ndo_bridge_getlink = bnxt_bridge_getlink,
|
||||
.ndo_bridge_setlink = bnxt_bridge_setlink,
|
||||
.ndo_get_port_parent_id = bnxt_get_port_parent_id,
|
||||
.ndo_get_phys_port_name = bnxt_get_phys_port_name
|
||||
};
|
||||
|
||||
@@ -10400,7 +10389,6 @@ static int bnxt_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
|
||||
dev->netdev_ops = &bnxt_netdev_ops;
|
||||
dev->watchdog_timeo = BNXT_TX_TIMEOUT;
|
||||
dev->ethtool_ops = &bnxt_ethtool_ops;
|
||||
SWITCHDEV_SET_OPS(dev, &bnxt_switchdev_ops);
|
||||
pci_set_drvdata(pdev, dev);
|
||||
|
||||
rc = bnxt_alloc_hwrm_resources(bp);
|
||||
|
||||
@@ -22,7 +22,6 @@
|
||||
#include <linux/rhashtable.h>
|
||||
#include <net/devlink.h>
|
||||
#include <net/dst_metadata.h>
|
||||
#include <net/switchdev.h>
|
||||
#include <net/xdp.h>
|
||||
#include <linux/net_dim.h>
|
||||
|
||||
@@ -1795,7 +1794,8 @@ int bnxt_check_rings(struct bnxt *bp, int tx, int rx, bool sh, int tcs,
|
||||
int bnxt_setup_mq_tc(struct net_device *dev, u8 tc);
|
||||
int bnxt_get_max_rings(struct bnxt *, int *, int *, bool);
|
||||
int bnxt_restore_pf_fw_resources(struct bnxt *bp);
|
||||
int bnxt_port_attr_get(struct bnxt *bp, struct switchdev_attr *attr);
|
||||
int bnxt_get_port_parent_id(struct net_device *dev,
|
||||
struct netdev_phys_item_id *ppid);
|
||||
void bnxt_dim_work(struct work_struct *work);
|
||||
int bnxt_hwrm_set_ring_coal(struct bnxt *bp, struct bnxt_napi *bnapi);
|
||||
|
||||
|
||||
@@ -45,7 +45,7 @@ static u16 bnxt_flow_get_dst_fid(struct bnxt *pf_bp, struct net_device *dev)
|
||||
struct bnxt *bp;
|
||||
|
||||
/* check if dev belongs to the same switch */
|
||||
if (!switchdev_port_same_parent_id(pf_bp->dev, dev)) {
|
||||
if (!netdev_port_same_parent_id(pf_bp->dev, dev)) {
|
||||
netdev_info(pf_bp->dev, "dev(ifindex=%d) not on same switch",
|
||||
dev->ifindex);
|
||||
return BNXT_FID_INVALID;
|
||||
|
||||
@@ -237,21 +237,17 @@ static void bnxt_vf_rep_get_drvinfo(struct net_device *dev,
|
||||
strlcpy(info->version, DRV_MODULE_VERSION, sizeof(info->version));
|
||||
}
|
||||
|
||||
static int bnxt_vf_rep_port_attr_get(struct net_device *dev,
|
||||
struct switchdev_attr *attr)
|
||||
static int bnxt_vf_rep_get_port_parent_id(struct net_device *dev,
|
||||
struct netdev_phys_item_id *ppid)
|
||||
{
|
||||
struct bnxt_vf_rep *vf_rep = netdev_priv(dev);
|
||||
|
||||
/* as only PORT_PARENT_ID is supported currently use common code
|
||||
* between PF and VF-rep for now.
|
||||
*/
|
||||
return bnxt_port_attr_get(vf_rep->bp, attr);
|
||||
return bnxt_get_port_parent_id(vf_rep->bp->dev, ppid);
|
||||
}
|
||||
|
||||
static const struct switchdev_ops bnxt_vf_rep_switchdev_ops = {
|
||||
.switchdev_port_attr_get = bnxt_vf_rep_port_attr_get
|
||||
};
|
||||
|
||||
static const struct ethtool_ops bnxt_vf_rep_ethtool_ops = {
|
||||
.get_drvinfo = bnxt_vf_rep_get_drvinfo
|
||||
};
|
||||
@@ -262,6 +258,7 @@ static const struct net_device_ops bnxt_vf_rep_netdev_ops = {
|
||||
.ndo_start_xmit = bnxt_vf_rep_xmit,
|
||||
.ndo_get_stats64 = bnxt_vf_rep_get_stats64,
|
||||
.ndo_setup_tc = bnxt_vf_rep_setup_tc,
|
||||
.ndo_get_port_parent_id = bnxt_vf_rep_get_port_parent_id,
|
||||
.ndo_get_phys_port_name = bnxt_vf_rep_get_phys_port_name
|
||||
};
|
||||
|
||||
@@ -392,7 +389,6 @@ static void bnxt_vf_rep_netdev_init(struct bnxt *bp, struct bnxt_vf_rep *vf_rep,
|
||||
|
||||
dev->netdev_ops = &bnxt_vf_rep_netdev_ops;
|
||||
dev->ethtool_ops = &bnxt_vf_rep_ethtool_ops;
|
||||
SWITCHDEV_SET_OPS(dev, &bnxt_vf_rep_switchdev_ops);
|
||||
/* Just inherit all the featues of the parent PF as the VF-R
|
||||
* uses the RX/TX rings of the parent PF
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user