bnxt: Move generic devlink code to new file
Moving generic devlink code (registration) out of VF-R code into new bnxt_devlink file, in preparation for future work to add additional devlink functionality to bnxt. Signed-off-by: Steve Lin <steven.lin1@broadcom.com> Acked-by: Andy Gospodarek <gospo@broadcom.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
cb4dc41eaa
commit
3c467bf399
|
@ -1,4 +1,4 @@
|
|||
obj-$(CONFIG_BNXT) += bnxt_en.o
|
||||
|
||||
bnxt_en-y := bnxt.o bnxt_sriov.o bnxt_ethtool.o bnxt_dcb.o bnxt_ulp.o bnxt_xdp.o bnxt_vfr.o
|
||||
bnxt_en-y := bnxt.o bnxt_sriov.o bnxt_ethtool.o bnxt_dcb.o bnxt_ulp.o bnxt_xdp.o bnxt_vfr.o bnxt_devlink.o
|
||||
bnxt_en-$(CONFIG_BNXT_FLOWER_OFFLOAD) += bnxt_tc.o
|
||||
|
|
|
@ -61,6 +61,7 @@
|
|||
#include "bnxt_xdp.h"
|
||||
#include "bnxt_vfr.h"
|
||||
#include "bnxt_tc.h"
|
||||
#include "bnxt_devlink.h"
|
||||
|
||||
#define BNXT_TX_TIMEOUT (5 * HZ)
|
||||
|
||||
|
|
|
@ -0,0 +1,65 @@
|
|||
/* Broadcom NetXtreme-C/E network driver.
|
||||
*
|
||||
* Copyright (c) 2017 Broadcom Limited
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation.
|
||||
*/
|
||||
|
||||
#include <linux/pci.h>
|
||||
#include <linux/netdevice.h>
|
||||
#include "bnxt_hsi.h"
|
||||
#include "bnxt.h"
|
||||
#include "bnxt_vfr.h"
|
||||
#include "bnxt_devlink.h"
|
||||
|
||||
static const struct devlink_ops bnxt_dl_ops = {
|
||||
#ifdef CONFIG_BNXT_SRIOV
|
||||
.eswitch_mode_set = bnxt_dl_eswitch_mode_set,
|
||||
.eswitch_mode_get = bnxt_dl_eswitch_mode_get,
|
||||
#endif /* CONFIG_BNXT_SRIOV */
|
||||
};
|
||||
|
||||
int bnxt_dl_register(struct bnxt *bp)
|
||||
{
|
||||
struct devlink *dl;
|
||||
int rc;
|
||||
|
||||
if (!pci_find_ext_capability(bp->pdev, PCI_EXT_CAP_ID_SRIOV))
|
||||
return 0;
|
||||
|
||||
if (bp->hwrm_spec_code < 0x10800) {
|
||||
netdev_warn(bp->dev, "Firmware does not support SR-IOV E-Switch SWITCHDEV mode.\n");
|
||||
return -ENOTSUPP;
|
||||
}
|
||||
|
||||
dl = devlink_alloc(&bnxt_dl_ops, sizeof(struct bnxt_dl));
|
||||
if (!dl) {
|
||||
netdev_warn(bp->dev, "devlink_alloc failed");
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
bnxt_link_bp_to_dl(bp, dl);
|
||||
bp->eswitch_mode = DEVLINK_ESWITCH_MODE_LEGACY;
|
||||
rc = devlink_register(dl, &bp->pdev->dev);
|
||||
if (rc) {
|
||||
bnxt_link_bp_to_dl(bp, NULL);
|
||||
devlink_free(dl);
|
||||
netdev_warn(bp->dev, "devlink_register failed. rc=%d", rc);
|
||||
return rc;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void bnxt_dl_unregister(struct bnxt *bp)
|
||||
{
|
||||
struct devlink *dl = bp->dl;
|
||||
|
||||
if (!dl)
|
||||
return;
|
||||
|
||||
devlink_unregister(dl);
|
||||
devlink_free(dl);
|
||||
}
|
|
@ -0,0 +1,39 @@
|
|||
/* Broadcom NetXtreme-C/E network driver.
|
||||
*
|
||||
* Copyright (c) 2017 Broadcom Limited
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation.
|
||||
*/
|
||||
|
||||
#ifndef BNXT_DEVLINK_H
|
||||
#define BNXT_DEVLINK_H
|
||||
|
||||
/* Struct to hold housekeeping info needed by devlink interface */
|
||||
struct bnxt_dl {
|
||||
struct bnxt *bp; /* back ptr to the controlling dev */
|
||||
};
|
||||
|
||||
static inline struct bnxt *bnxt_get_bp_from_dl(struct devlink *dl)
|
||||
{
|
||||
return ((struct bnxt_dl *)devlink_priv(dl))->bp;
|
||||
}
|
||||
|
||||
/* To clear devlink pointer from bp, pass NULL dl */
|
||||
static inline void bnxt_link_bp_to_dl(struct bnxt *bp, struct devlink *dl)
|
||||
{
|
||||
bp->dl = dl;
|
||||
|
||||
/* add a back pointer in dl to bp */
|
||||
if (dl) {
|
||||
struct bnxt_dl *bp_dl = devlink_priv(dl);
|
||||
|
||||
bp_dl->bp = bp;
|
||||
}
|
||||
}
|
||||
|
||||
int bnxt_dl_register(struct bnxt *bp);
|
||||
void bnxt_dl_unregister(struct bnxt *bp);
|
||||
|
||||
#endif /* BNXT_DEVLINK_H */
|
|
@ -16,6 +16,7 @@
|
|||
#include "bnxt_hsi.h"
|
||||
#include "bnxt.h"
|
||||
#include "bnxt_vfr.h"
|
||||
#include "bnxt_devlink.h"
|
||||
#include "bnxt_tc.h"
|
||||
|
||||
#ifdef CONFIG_BNXT_SRIOV
|
||||
|
@ -451,7 +452,7 @@ static int bnxt_vf_reps_create(struct bnxt *bp)
|
|||
}
|
||||
|
||||
/* Devlink related routines */
|
||||
static int bnxt_dl_eswitch_mode_get(struct devlink *devlink, u16 *mode)
|
||||
int bnxt_dl_eswitch_mode_get(struct devlink *devlink, u16 *mode)
|
||||
{
|
||||
struct bnxt *bp = bnxt_get_bp_from_dl(devlink);
|
||||
|
||||
|
@ -459,7 +460,7 @@ static int bnxt_dl_eswitch_mode_get(struct devlink *devlink, u16 *mode)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int bnxt_dl_eswitch_mode_set(struct devlink *devlink, u16 mode)
|
||||
int bnxt_dl_eswitch_mode_set(struct devlink *devlink, u16 mode)
|
||||
{
|
||||
struct bnxt *bp = bnxt_get_bp_from_dl(devlink);
|
||||
int rc = 0;
|
||||
|
@ -497,52 +498,4 @@ static int bnxt_dl_eswitch_mode_set(struct devlink *devlink, u16 mode)
|
|||
return rc;
|
||||
}
|
||||
|
||||
static const struct devlink_ops bnxt_dl_ops = {
|
||||
.eswitch_mode_set = bnxt_dl_eswitch_mode_set,
|
||||
.eswitch_mode_get = bnxt_dl_eswitch_mode_get
|
||||
};
|
||||
|
||||
int bnxt_dl_register(struct bnxt *bp)
|
||||
{
|
||||
struct devlink *dl;
|
||||
int rc;
|
||||
|
||||
if (!pci_find_ext_capability(bp->pdev, PCI_EXT_CAP_ID_SRIOV))
|
||||
return 0;
|
||||
|
||||
if (bp->hwrm_spec_code < 0x10800) {
|
||||
netdev_warn(bp->dev, "Firmware does not support SR-IOV E-Switch SWITCHDEV mode.\n");
|
||||
return -ENOTSUPP;
|
||||
}
|
||||
|
||||
dl = devlink_alloc(&bnxt_dl_ops, sizeof(struct bnxt_dl));
|
||||
if (!dl) {
|
||||
netdev_warn(bp->dev, "devlink_alloc failed");
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
bnxt_link_bp_to_dl(bp, dl);
|
||||
bp->eswitch_mode = DEVLINK_ESWITCH_MODE_LEGACY;
|
||||
rc = devlink_register(dl, &bp->pdev->dev);
|
||||
if (rc) {
|
||||
bnxt_link_bp_to_dl(bp, NULL);
|
||||
devlink_free(dl);
|
||||
netdev_warn(bp->dev, "devlink_register failed. rc=%d", rc);
|
||||
return rc;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void bnxt_dl_unregister(struct bnxt *bp)
|
||||
{
|
||||
struct devlink *dl = bp->dl;
|
||||
|
||||
if (!dl)
|
||||
return;
|
||||
|
||||
devlink_unregister(dl);
|
||||
devlink_free(dl);
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
|
@ -14,31 +14,6 @@
|
|||
|
||||
#define MAX_CFA_CODE 65536
|
||||
|
||||
/* Struct to hold housekeeping info needed by devlink interface */
|
||||
struct bnxt_dl {
|
||||
struct bnxt *bp; /* back ptr to the controlling dev */
|
||||
};
|
||||
|
||||
static inline struct bnxt *bnxt_get_bp_from_dl(struct devlink *dl)
|
||||
{
|
||||
return ((struct bnxt_dl *)devlink_priv(dl))->bp;
|
||||
}
|
||||
|
||||
/* To clear devlink pointer from bp, pass NULL dl */
|
||||
static inline void bnxt_link_bp_to_dl(struct bnxt *bp, struct devlink *dl)
|
||||
{
|
||||
bp->dl = dl;
|
||||
|
||||
/* add a back pointer in dl to bp */
|
||||
if (dl) {
|
||||
struct bnxt_dl *bp_dl = devlink_priv(dl);
|
||||
|
||||
bp_dl->bp = bp;
|
||||
}
|
||||
}
|
||||
|
||||
int bnxt_dl_register(struct bnxt *bp);
|
||||
void bnxt_dl_unregister(struct bnxt *bp);
|
||||
void bnxt_vf_reps_destroy(struct bnxt *bp);
|
||||
void bnxt_vf_reps_close(struct bnxt *bp);
|
||||
void bnxt_vf_reps_open(struct bnxt *bp);
|
||||
|
@ -53,17 +28,11 @@ static inline u16 bnxt_vf_rep_get_fid(struct net_device *dev)
|
|||
return bp->pf.vf[vf_rep->vf_idx].fw_fid;
|
||||
}
|
||||
|
||||
int bnxt_dl_eswitch_mode_get(struct devlink *devlink, u16 *mode);
|
||||
int bnxt_dl_eswitch_mode_set(struct devlink *devlink, u16 mode);
|
||||
|
||||
#else
|
||||
|
||||
static inline int bnxt_dl_register(struct bnxt *bp)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline void bnxt_dl_unregister(struct bnxt *bp)
|
||||
{
|
||||
}
|
||||
|
||||
static inline void bnxt_vf_reps_close(struct bnxt *bp)
|
||||
{
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue