Skip to content

Commit

Permalink
nfp: devlink add support for getting eswitch mode
Browse files Browse the repository at this point in the history
Add app callback for reporting eswitch mode.  Non-SRIOV apps
should not implement this callback, nfp_app code will then
respond with -EOPNOTSUPP.

Signed-off-by: Jakub Kicinski <jakub.kicinski@netronome.com>
Signed-off-by: Simon Horman <simon.horman@netronome.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Jakub Kicinski authored and David S. Miller committed Jun 25, 2017
1 parent 3fcece1 commit 9daee04
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 0 deletions.
15 changes: 15 additions & 0 deletions drivers/net/ethernet/netronome/nfp/nfp_app.h
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,8 @@
#ifndef _NFP_APP_H
#define _NFP_APP_H 1

#include <net/devlink.h>

struct bpf_prog;
struct net_device;
struct pci_dev;
Expand Down Expand Up @@ -70,6 +72,7 @@ extern const struct nfp_app_type app_bpf;
* @setup_tc: setup TC ndo
* @tc_busy: TC HW offload busy (rules loaded)
* @xdp_offload: offload an XDP program
* @eswitch_mode_get: get SR-IOV eswitch mode
*/
struct nfp_app_type {
enum nfp_app_id id;
Expand All @@ -95,6 +98,8 @@ struct nfp_app_type {
bool (*tc_busy)(struct nfp_app *app, struct nfp_net *nn);
int (*xdp_offload)(struct nfp_app *app, struct nfp_net *nn,
struct bpf_prog *prog);

enum devlink_eswitch_mode (*eswitch_mode_get)(struct nfp_app *app);
};

/**
Expand Down Expand Up @@ -216,6 +221,16 @@ static inline void nfp_app_ctrl_rx(struct nfp_app *app, struct sk_buff *skb)
app->type->ctrl_msg_rx(app, skb);
}

static inline int nfp_app_eswitch_mode_get(struct nfp_app *app, u16 *mode)
{
if (!app->type->eswitch_mode_get)
return -EOPNOTSUPP;

*mode = app->type->eswitch_mode_get(app);

return 0;
}

const char *nfp_app_mip_name(struct nfp_app *app);
struct sk_buff *nfp_app_ctrl_msg_alloc(struct nfp_app *app, unsigned int size);

Expand Down
18 changes: 18 additions & 0 deletions drivers/net/ethernet/netronome/nfp/nfp_devlink.c
Original file line number Diff line number Diff line change
Expand Up @@ -149,9 +149,27 @@ nfp_devlink_port_unsplit(struct devlink *devlink, unsigned int port_index)
return ret;
}

static int nfp_devlink_eswitch_mode_get(struct devlink *devlink, u16 *mode)
{
struct nfp_pf *pf = devlink_priv(devlink);
int ret;

mutex_lock(&pf->lock);
if (!pf->app) {
ret = -EBUSY;
goto out;
}
ret = nfp_app_eswitch_mode_get(pf->app, mode);
out:
mutex_unlock(&pf->lock);

return ret;
}

const struct devlink_ops nfp_devlink_ops = {
.port_split = nfp_devlink_port_split,
.port_unsplit = nfp_devlink_port_unsplit,
.eswitch_mode_get = nfp_devlink_eswitch_mode_get,
};

int nfp_devlink_port_register(struct nfp_app *app, struct nfp_port *port)
Expand Down

0 comments on commit 9daee04

Please sign in to comment.