mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/herbert/cryptodev-2.6.git
synced 2026-04-18 03:23:53 -04:00
CDB (Command Data Block Message Communication) reads and writes are performed on memory map pages 9Fh-AFh according to the CMIS standard, section 8.20 of revision 5.2. Page 9Fh is used to specify the CDB command to be executed and also provides an area for a local payload (LPL). According to the CMIS standard, the firmware update process is done using a CDB commands sequence that will be implemented in the next patch. The kernel interface that will implement the firmware update using CDB command will include 2 layers that will be added under ethtool: * The upper layer that will be triggered from the module layer, is cmis_fw_update. * The lower one is cmis_cdb. In the future there might be more operations to implement using CDB commands. Therefore, the idea is to keep the CDB interface clean and the cmis_fw_update specific to the CDB commands handling it. These two layers will communicate using the API the consists of three functions: - struct ethtool_cmis_cdb * ethtool_cmis_cdb_init(struct net_device *dev, struct ethtool_module_fw_flash_params *params); - void ethtool_cmis_cdb_fini(struct ethtool_cmis_cdb *cdb); - int ethtool_cmis_cdb_execute_cmd(struct net_device *dev, struct ethtool_cmis_cdb_cmd_args *args); Add the CDB layer to support initializing, finishing and executing CDB commands: * The initialization process will include creating of an ethtool_cmis_cdb instance, querying the module CDB support, entering and validating the password from user space (CMD 0x0000) and querying the module features (CMD 0x0040). * The finishing API will simply free the ethtool_cmis_cdb instance. * The executing process will write the CDB command to EEPROM using set_module_eeprom_by_page() that was presented earlier, and will process the reply from EEPROM. Signed-off-by: Danielle Ratson <danieller@nvidia.com> Reviewed-by: Petr Machata <petrm@nvidia.com> Signed-off-by: David S. Miller <davem@davemloft.net>
42 lines
1.3 KiB
C
42 lines
1.3 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;
|
|
};
|
|
|
|
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);
|