Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/net/ethtool/cmis.h
26278 views
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
*/
15
struct ethtool_cmis_cdb {
16
u8 cmis_rev;
17
u8 read_write_len_ext;
18
u16 max_completion_time;
19
};
20
21
enum 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
*/
45
struct 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
*/
73
struct 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
*/
88
struct 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
*/
98
struct ethtool_cmis_cdb_rpl {
99
struct ethtool_cmis_cdb_rpl_hdr hdr;
100
u8 payload[ETHTOOL_CMIS_CDB_LPL_MAX_PL_LENGTH];
101
};
102
103
u32 ethtool_cmis_get_max_lpl_size(u8 num_of_byte_octs);
104
105
void ethtool_cmis_cdb_compose_args(struct ethtool_cmis_cdb_cmd_args *args,
106
enum ethtool_cmis_cdb_cmd_id cmd, u8 *lpl,
107
u8 lpl_len, u8 *epl, u16 epl_len,
108
u16 max_duration, u8 read_write_len_ext,
109
u16 msleep_pre_rpl, u8 rpl_exp_len,
110
u8 flags);
111
112
void ethtool_cmis_cdb_check_completion_flag(u8 cmis_rev, u8 *flags);
113
114
void ethtool_cmis_page_init(struct ethtool_module_eeprom *page_data,
115
u8 page, u32 offset, u32 length);
116
117
struct ethtool_cmis_cdb *
118
ethtool_cmis_cdb_init(struct net_device *dev,
119
const struct ethtool_module_fw_flash_params *params,
120
struct ethnl_module_fw_flash_ntf_params *ntf_params);
121
void ethtool_cmis_cdb_fini(struct ethtool_cmis_cdb *cdb);
122
123
int ethtool_cmis_wait_for_cond(struct net_device *dev, u8 flags, u8 flag,
124
u16 max_duration, u32 offset,
125
bool (*cond_success)(u8), bool (*cond_fail)(u8), u8 *state);
126
127
int ethtool_cmis_cdb_execute_cmd(struct net_device *dev,
128
struct ethtool_cmis_cdb_cmd_args *args);
129
130