Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9daee04a authored by Jakub Kicinski's avatar Jakub Kicinski Committed by David S. Miller
Browse files

nfp: devlink add support for getting eswitch mode



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: default avatarJakub Kicinski <jakub.kicinski@netronome.com>
Signed-off-by: default avatarSimon Horman <simon.horman@netronome.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 3fcece12
Loading
Loading
Loading
Loading
+15 −0
Original line number Diff line number Diff line
@@ -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;
@@ -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;
@@ -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);
};

/**
@@ -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);

+18 −0
Original line number Diff line number Diff line
@@ -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)