Linux Audio

Check our new training course

Loading...
Note: File does not exist in v6.8.
  1/* SPDX-License-Identifier: GPL-2.0-only */
  2
  3#define ETHTOOL_CMIS_CDB_LPL_MAX_PL_LENGTH		120
  4#define ETHTOOL_CMIS_CDB_EPL_MAX_PL_LENGTH		2048
  5#define ETHTOOL_CMIS_CDB_CMD_PAGE			0x9F
  6#define ETHTOOL_CMIS_CDB_PAGE_I2C_ADDR			0x50
  7
  8/**
  9 * struct ethtool_cmis_cdb - CDB commands parameters
 10 * @cmis_rev: CMIS revision major.
 11 * @read_write_len_ext: Allowable additional number of byte octets to the LPL
 12 *			in a READ or a WRITE CDB commands.
 13 * @max_completion_time:  Maximum CDB command completion time in msec.
 14 */
 15struct ethtool_cmis_cdb {
 16	u8	cmis_rev;
 17	u8      read_write_len_ext;
 18	u16     max_completion_time;
 19};
 20
 21enum ethtool_cmis_cdb_cmd_id {
 22	ETHTOOL_CMIS_CDB_CMD_QUERY_STATUS		= 0x0000,
 23	ETHTOOL_CMIS_CDB_CMD_MODULE_FEATURES		= 0x0040,
 24	ETHTOOL_CMIS_CDB_CMD_FW_MANAGMENT_FEATURES	= 0x0041,
 25	ETHTOOL_CMIS_CDB_CMD_START_FW_DOWNLOAD		= 0x0101,
 26	ETHTOOL_CMIS_CDB_CMD_WRITE_FW_BLOCK_LPL		= 0x0103,
 27	ETHTOOL_CMIS_CDB_CMD_WRITE_FW_BLOCK_EPL		= 0x0104,
 28	ETHTOOL_CMIS_CDB_CMD_COMPLETE_FW_DOWNLOAD	= 0x0107,
 29	ETHTOOL_CMIS_CDB_CMD_RUN_FW_IMAGE		= 0x0109,
 30	ETHTOOL_CMIS_CDB_CMD_COMMIT_FW_IMAGE		= 0x010A,
 31};
 32
 33/**
 34 * struct ethtool_cmis_cdb_request - CDB commands request fields as decribed in
 35 *				the CMIS standard
 36 * @id: Command ID.
 37 * @epl_len: EPL memory length.
 38 * @lpl_len: LPL memory length.
 39 * @chk_code: Check code for the previous field and the payload.
 40 * @resv1: Added to match the CMIS standard request continuity.
 41 * @resv2: Added to match the CMIS standard request continuity.
 42 * @payload: Payload for the CDB commands.
 43 * @epl: Extended payload for the CDB commands.
 44 */
 45struct ethtool_cmis_cdb_request {
 46	__be16 id;
 47	struct_group(body,
 48		__be16 epl_len;
 49		u8 lpl_len;
 50		u8 chk_code;
 51		u8 resv1;
 52		u8 resv2;
 53		u8 payload[ETHTOOL_CMIS_CDB_LPL_MAX_PL_LENGTH];
 54	);
 55	u8 *epl;	/* Everything above this field checksummed. */
 56};
 57
 58#define CDB_F_COMPLETION_VALID		BIT(0)
 59#define CDB_F_STATUS_VALID		BIT(1)
 60#define CDB_F_MODULE_STATE_VALID	BIT(2)
 61
 62/**
 63 * struct ethtool_cmis_cdb_cmd_args - CDB commands execution arguments
 64 * @req: CDB command fields as described in the CMIS standard.
 65 * @max_duration: Maximum duration time for command completion in msec.
 66 * @read_write_len_ext: Allowable additional number of byte octets to the LPL
 67 *			in a READ or a WRITE commands.
 68 * @msleep_pre_rpl: Waiting time before checking reply in msec.
 69 * @rpl_exp_len: Expected reply length in bytes.
 70 * @flags: Validation flags for CDB commands.
 71 * @err_msg: Error message to be sent to user space.
 72 */
 73struct ethtool_cmis_cdb_cmd_args {
 74	struct ethtool_cmis_cdb_request req;
 75	u16				max_duration;
 76	u8				read_write_len_ext;
 77	u8				msleep_pre_rpl;
 78	u8                              rpl_exp_len;
 79	u8				flags;
 80	char				*err_msg;
 81};
 82
 83/**
 84 * struct ethtool_cmis_cdb_rpl_hdr - CDB commands reply header arguments
 85 * @rpl_len: Reply length.
 86 * @rpl_chk_code: Reply check code.
 87 */
 88struct ethtool_cmis_cdb_rpl_hdr {
 89	u8 rpl_len;
 90	u8 rpl_chk_code;
 91};
 92
 93/**
 94 * struct ethtool_cmis_cdb_rpl - CDB commands reply arguments
 95 * @hdr: CDB commands reply header arguments.
 96 * @payload: Payload for the CDB commands reply.
 97 */
 98struct ethtool_cmis_cdb_rpl {
 99	struct ethtool_cmis_cdb_rpl_hdr hdr;
100	u8 payload[ETHTOOL_CMIS_CDB_LPL_MAX_PL_LENGTH];
101};
102
103u32 ethtool_cmis_get_max_lpl_size(u8 num_of_byte_octs);
104u32 ethtool_cmis_get_max_epl_size(u8 num_of_byte_octs);
105
106void ethtool_cmis_cdb_compose_args(struct ethtool_cmis_cdb_cmd_args *args,
107				   enum ethtool_cmis_cdb_cmd_id cmd, u8 *lpl,
108				   u8 lpl_len, u8 *epl, u16 epl_len,
109				   u16 max_duration, u8 read_write_len_ext,
110				   u16 msleep_pre_rpl, u8 rpl_exp_len,
111				   u8 flags);
112
113void ethtool_cmis_cdb_check_completion_flag(u8 cmis_rev, u8 *flags);
114
115void ethtool_cmis_page_init(struct ethtool_module_eeprom *page_data,
116			    u8 page, u32 offset, u32 length);
117
118struct ethtool_cmis_cdb *
119ethtool_cmis_cdb_init(struct net_device *dev,
120		      const struct ethtool_module_fw_flash_params *params,
121		      struct ethnl_module_fw_flash_ntf_params *ntf_params);
122void ethtool_cmis_cdb_fini(struct ethtool_cmis_cdb *cdb);
123
124int ethtool_cmis_wait_for_cond(struct net_device *dev, u8 flags, u8 flag,
125			       u16 max_duration, u32 offset,
126			       bool (*cond_success)(u8), bool (*cond_fail)(u8), u8 *state);
127
128int ethtool_cmis_cdb_execute_cmd(struct net_device *dev,
129				 struct ethtool_cmis_cdb_cmd_args *args);