summaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorDavid S. Miller <davem@davemloft.net>2019-02-17 15:27:39 -0800
committerDavid S. Miller <davem@davemloft.net>2019-02-17 15:27:39 -0800
commiteaec2efbe4dc6be84165fcbc54238d51aa7e6c30 (patch)
treeca776d2ae616aaa2f697331b90e7009df052b1c1 /include
parent8e31c47424f7d03d0cc992fe6a9ebfdedf66a709 (diff)
parent5c5696f3df2acbe738526c7ba76ab7dd38e9ba49 (diff)
downloadcachepc-linux-eaec2efbe4dc6be84165fcbc54238d51aa7e6c30.tar.gz
cachepc-linux-eaec2efbe4dc6be84165fcbc54238d51aa7e6c30.zip
Merge branch 'devlink-add-the-ability-to-update-device-flash'
Jakub Kicinski says: ==================== devlink: add the ability to update device flash This series is the second step to allow trouble shooting and recovering devices in bad state without the use of netdevs as handles. We can already query FW versions over devlink, now we add the ability to update the FW. This will allow drivers to implement some from of "limp-mode" where the device can't really be used for networking and hence has no netdev, but we can interrogate it over devlink and fix the broken FW. Small but nice advantage of devlink is that it only holds the devlink instance lock during flashing, unlike ethtool which holds rtnl_lock(). ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'include')
-rw-r--r--include/net/devlink.h10
-rw-r--r--include/uapi/linux/devlink.h6
2 files changed, 16 insertions, 0 deletions
diff --git a/include/net/devlink.h b/include/net/devlink.h
index c6d88759b7d5..a2da49dd9147 100644
--- a/include/net/devlink.h
+++ b/include/net/devlink.h
@@ -521,6 +521,9 @@ struct devlink_ops {
struct netlink_ext_ack *extack);
int (*info_get)(struct devlink *devlink, struct devlink_info_req *req,
struct netlink_ext_ack *extack);
+ int (*flash_update)(struct devlink *devlink, const char *file_name,
+ const char *component,
+ struct netlink_ext_ack *extack);
};
static inline void *devlink_priv(struct devlink *devlink)
@@ -1192,11 +1195,18 @@ devlink_health_report(struct devlink_health_reporter *reporter,
#if IS_REACHABLE(CONFIG_NET_DEVLINK)
void devlink_compat_running_version(struct net_device *dev,
char *buf, size_t len);
+int devlink_compat_flash_update(struct net_device *dev, const char *file_name);
#else
static inline void
devlink_compat_running_version(struct net_device *dev, char *buf, size_t len)
{
}
+
+static inline int
+devlink_compat_flash_update(struct net_device *dev, const char *file_name)
+{
+ return -EOPNOTSUPP;
+}
#endif
#endif /* _NET_DEVLINK_H_ */
diff --git a/include/uapi/linux/devlink.h b/include/uapi/linux/devlink.h
index 72d9f7c89190..53de8802a000 100644
--- a/include/uapi/linux/devlink.h
+++ b/include/uapi/linux/devlink.h
@@ -103,6 +103,8 @@ enum devlink_command {
DEVLINK_CMD_HEALTH_REPORTER_DUMP_GET,
DEVLINK_CMD_HEALTH_REPORTER_DUMP_CLEAR,
+ DEVLINK_CMD_FLASH_UPDATE,
+
/* add new commands above here */
__DEVLINK_CMD_MAX,
DEVLINK_CMD_MAX = __DEVLINK_CMD_MAX - 1
@@ -326,6 +328,10 @@ enum devlink_attr {
DEVLINK_ATTR_HEALTH_REPORTER_DUMP_TS, /* u64 */
DEVLINK_ATTR_HEALTH_REPORTER_GRACEFUL_PERIOD, /* u64 */
DEVLINK_ATTR_HEALTH_REPORTER_AUTO_RECOVER, /* u8 */
+
+ DEVLINK_ATTR_FLASH_UPDATE_FILE_NAME, /* string */
+ DEVLINK_ATTR_FLASH_UPDATE_COMPONENT, /* string */
+
/* add new attributes above here, update the policy in devlink.c */
__DEVLINK_ATTR_MAX,