summaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorDavid S. Miller <davem@davemloft.net>2020-09-18 18:19:42 -0700
committerDavid S. Miller <davem@davemloft.net>2020-09-18 18:19:42 -0700
commita5a3303e26cdf6867bc1f4cdd3f0a56673d70ea7 (patch)
treec7ec78419603ec1867d8f6a4361e4ba6dd2253b0 /include
parent0db0561d13df07978bea63a19f644fc16a60f54a (diff)
parent93157307f7b4e11232d972d325ab688f1a08f487 (diff)
downloadcachepc-linux-a5a3303e26cdf6867bc1f4cdd3f0a56673d70ea7.tar.gz
cachepc-linux-a5a3303e26cdf6867bc1f4cdd3f0a56673d70ea7.zip
Merge branch 'mv88e6xxx-Add-devlink-regions-support'
Andrew Lunn says: ==================== mv88e6xxx: Add devlink regions support Make use of devlink regions to allow read access to some of the internal of the switches. Currently access to global1, global2 and the ATU is provided. The switch itself will never trigger a region snapshot, it is assumed it is performed from user space as needed. v2: Remove left of debug print Comment ATU format is generic to mv88e6xxx Combine declaration and the assignment on a single line. v3: Drop support for port regions Improve the devlink API with a priv member and passing the region to the snapshot function Make the helper to convert from devlink to ds an inline function v4: Add missing kerneldoc in ICE driver Fix typo for global2 reading global1 registers Make use of enum to make code more readable ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'include')
-rw-r--r--include/net/devlink.h6
-rw-r--r--include/net/dsa.h18
2 files changed, 22 insertions, 2 deletions
diff --git a/include/net/devlink.h b/include/net/devlink.h
index 73065f07bf17..4883dbae7faf 100644
--- a/include/net/devlink.h
+++ b/include/net/devlink.h
@@ -561,12 +561,16 @@ struct devlink_info_req;
* the data variable must be updated to point to the snapshot data.
* The function will be called while the devlink instance lock is
* held.
+ * @priv: Pointer to driver private data for the region operation
*/
struct devlink_region_ops {
const char *name;
void (*destructor)(const void *data);
- int (*snapshot)(struct devlink *devlink, struct netlink_ext_ack *extack,
+ int (*snapshot)(struct devlink *devlink,
+ const struct devlink_region_ops *ops,
+ struct netlink_ext_ack *extack,
u8 **data);
+ void *priv;
};
struct devlink_fmsg;
diff --git a/include/net/dsa.h b/include/net/dsa.h
index 75c8fac82017..d16057c5987a 100644
--- a/include/net/dsa.h
+++ b/include/net/dsa.h
@@ -612,11 +612,14 @@ struct dsa_switch_ops {
bool (*port_rxtstamp)(struct dsa_switch *ds, int port,
struct sk_buff *skb, unsigned int type);
- /* Devlink parameters */
+ /* Devlink parameters, etc */
int (*devlink_param_get)(struct dsa_switch *ds, u32 id,
struct devlink_param_gset_ctx *ctx);
int (*devlink_param_set)(struct dsa_switch *ds, u32 id,
struct devlink_param_gset_ctx *ctx);
+ int (*devlink_info_get)(struct dsa_switch *ds,
+ struct devlink_info_req *req,
+ struct netlink_ext_ack *extack);
/*
* MTU change functionality. Switches can also adjust their MRU through
@@ -658,12 +661,25 @@ void dsa_devlink_resource_occ_get_register(struct dsa_switch *ds,
void *occ_get_priv);
void dsa_devlink_resource_occ_get_unregister(struct dsa_switch *ds,
u64 resource_id);
+struct devlink_region *
+dsa_devlink_region_create(struct dsa_switch *ds,
+ const struct devlink_region_ops *ops,
+ u32 region_max_snapshots, u64 region_size);
+void dsa_devlink_region_destroy(struct devlink_region *region);
+
struct dsa_port *dsa_port_from_netdev(struct net_device *netdev);
struct dsa_devlink_priv {
struct dsa_switch *ds;
};
+static inline struct dsa_switch *dsa_devlink_to_ds(struct devlink *dl)
+{
+ struct dsa_devlink_priv *dl_priv = devlink_priv(dl);
+
+ return dl_priv->ds;
+}
+
struct dsa_switch_driver {
struct list_head list;
const struct dsa_switch_ops *ops;