mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-11 04:18:39 +08:00
c4f78134d4
According to the CMIS standard, the firmware update process is done using a CDB commands sequence. Implement a work that will be triggered from the module layer in the next patch the will initiate and execute all the CDB commands in order, to eventually complete the firmware update process. This flashing process includes, writing the firmware image, running the new firmware image and committing it after testing, so that it will run upon reset. This work will also notify user space about the progress of the firmware update process. Signed-off-by: Danielle Ratson <danieller@nvidia.com> Reviewed-by: Petr Machata <petrm@nvidia.com> Signed-off-by: David S. Miller <davem@davemloft.net>
73 lines
2.2 KiB
C
73 lines
2.2 KiB
C
/* SPDX-License-Identifier: GPL-2.0-only */
|
|
|
|
#include <uapi/linux/ethtool.h>
|
|
|
|
/**
|
|
* struct ethnl_module_fw_flash_ntf_params - module firmware flashing
|
|
* notifications parameters
|
|
* @portid: Netlink portid of sender.
|
|
* @seq: Sequence number of sender.
|
|
* @closed_sock: Indicates whether the socket was closed from user space.
|
|
*/
|
|
struct ethnl_module_fw_flash_ntf_params {
|
|
u32 portid;
|
|
u32 seq;
|
|
bool closed_sock;
|
|
};
|
|
|
|
/**
|
|
* struct ethtool_module_fw_flash_params - module firmware flashing parameters
|
|
* @password: Module password. Only valid when @pass_valid is set.
|
|
* @password_valid: Whether the module password is valid or not.
|
|
*/
|
|
struct ethtool_module_fw_flash_params {
|
|
__be32 password;
|
|
u8 password_valid:1;
|
|
};
|
|
|
|
/**
|
|
* struct ethtool_cmis_fw_update_params - CMIS firmware update specific
|
|
* parameters
|
|
* @dev: Pointer to the net_device to be flashed.
|
|
* @params: Module firmware flashing parameters.
|
|
* @ntf_params: Module firmware flashing notification parameters.
|
|
* @fw: Firmware to flash.
|
|
*/
|
|
struct ethtool_cmis_fw_update_params {
|
|
struct net_device *dev;
|
|
struct ethtool_module_fw_flash_params params;
|
|
struct ethnl_module_fw_flash_ntf_params ntf_params;
|
|
const struct firmware *fw;
|
|
};
|
|
|
|
/**
|
|
* struct ethtool_module_fw_flash - module firmware flashing
|
|
* @list: List node for &module_fw_flash_work_list.
|
|
* @dev_tracker: Refcount tracker for @dev.
|
|
* @work: The flashing firmware work.
|
|
* @fw_update: CMIS firmware update specific parameters.
|
|
*/
|
|
struct ethtool_module_fw_flash {
|
|
struct list_head list;
|
|
netdevice_tracker dev_tracker;
|
|
struct work_struct work;
|
|
struct ethtool_cmis_fw_update_params fw_update;
|
|
};
|
|
|
|
void
|
|
ethnl_module_fw_flash_ntf_err(struct net_device *dev,
|
|
struct ethnl_module_fw_flash_ntf_params *params,
|
|
char *err_msg, char *sub_err_msg);
|
|
void
|
|
ethnl_module_fw_flash_ntf_start(struct net_device *dev,
|
|
struct ethnl_module_fw_flash_ntf_params *params);
|
|
void
|
|
ethnl_module_fw_flash_ntf_complete(struct net_device *dev,
|
|
struct ethnl_module_fw_flash_ntf_params *params);
|
|
void
|
|
ethnl_module_fw_flash_ntf_in_progress(struct net_device *dev,
|
|
struct ethnl_module_fw_flash_ntf_params *params,
|
|
u64 done, u64 total);
|
|
|
|
void ethtool_cmis_fw_update(struct ethtool_cmis_fw_update_params *params);
|