8
8
* descriptor format. It is shared between Firmware and Software.
9
9
*/
10
10
11
+ #define ICE_AQC_TOPO_MAX_LEVEL_NUM 0x9
12
+
11
13
struct ice_aqc_generic {
12
14
__le32 param0 ;
13
15
__le32 param1 ;
@@ -68,13 +70,202 @@ struct ice_aqc_req_res {
68
70
u8 reserved [2 ];
69
71
};
70
72
73
+ /* Get function capabilities (indirect 0x000A)
74
+ * Get device capabilities (indirect 0x000B)
75
+ */
76
+ struct ice_aqc_list_caps {
77
+ u8 cmd_flags ;
78
+ u8 pf_index ;
79
+ u8 reserved [2 ];
80
+ __le32 count ;
81
+ __le32 addr_high ;
82
+ __le32 addr_low ;
83
+ };
84
+
85
+ /* Device/Function buffer entry, repeated per reported capability */
86
+ struct ice_aqc_list_caps_elem {
87
+ __le16 cap ;
88
+ #define ICE_AQC_CAPS_VSI 0x0017
89
+ #define ICE_AQC_CAPS_RSS 0x0040
90
+ #define ICE_AQC_CAPS_RXQS 0x0041
91
+ #define ICE_AQC_CAPS_TXQS 0x0042
92
+ #define ICE_AQC_CAPS_MSIX 0x0043
93
+ #define ICE_AQC_CAPS_MAX_MTU 0x0047
94
+
95
+ u8 major_ver ;
96
+ u8 minor_ver ;
97
+ /* Number of resources described by this capability */
98
+ __le32 number ;
99
+ /* Only meaningful for some types of resources */
100
+ __le32 logical_id ;
101
+ /* Only meaningful for some types of resources */
102
+ __le32 phys_id ;
103
+ __le64 rsvd1 ;
104
+ __le64 rsvd2 ;
105
+ };
106
+
71
107
/* Clear PXE Command and response (direct 0x0110) */
72
108
struct ice_aqc_clear_pxe {
73
109
u8 rx_cnt ;
74
110
#define ICE_AQC_CLEAR_PXE_RX_CNT 0x2
75
111
u8 reserved [15 ];
76
112
};
77
113
114
+ /* Get switch configuration (0x0200) */
115
+ struct ice_aqc_get_sw_cfg {
116
+ /* Reserved for command and copy of request flags for response */
117
+ __le16 flags ;
118
+ /* First desc in case of command and next_elem in case of response
119
+ * In case of response, if it is not zero, means all the configuration
120
+ * was not returned and new command shall be sent with this value in
121
+ * the 'first desc' field
122
+ */
123
+ __le16 element ;
124
+ /* Reserved for command, only used for response */
125
+ __le16 num_elems ;
126
+ __le16 rsvd ;
127
+ __le32 addr_high ;
128
+ __le32 addr_low ;
129
+ };
130
+
131
+ /* Each entry in the response buffer is of the following type: */
132
+ struct ice_aqc_get_sw_cfg_resp_elem {
133
+ /* VSI/Port Number */
134
+ __le16 vsi_port_num ;
135
+ #define ICE_AQC_GET_SW_CONF_RESP_VSI_PORT_NUM_S 0
136
+ #define ICE_AQC_GET_SW_CONF_RESP_VSI_PORT_NUM_M \
137
+ (0x3FF << ICE_AQC_GET_SW_CONF_RESP_VSI_PORT_NUM_S)
138
+ #define ICE_AQC_GET_SW_CONF_RESP_TYPE_S 14
139
+ #define ICE_AQC_GET_SW_CONF_RESP_TYPE_M (0x3 << ICE_AQC_GET_SW_CONF_RESP_TYPE_S)
140
+ #define ICE_AQC_GET_SW_CONF_RESP_PHYS_PORT 0
141
+ #define ICE_AQC_GET_SW_CONF_RESP_VIRT_PORT 1
142
+ #define ICE_AQC_GET_SW_CONF_RESP_VSI 2
143
+
144
+ /* SWID VSI/Port belongs to */
145
+ __le16 swid ;
146
+
147
+ /* Bit 14..0 : PF/VF number VSI belongs to
148
+ * Bit 15 : VF indication bit
149
+ */
150
+ __le16 pf_vf_num ;
151
+ #define ICE_AQC_GET_SW_CONF_RESP_FUNC_NUM_S 0
152
+ #define ICE_AQC_GET_SW_CONF_RESP_FUNC_NUM_M \
153
+ (0x7FFF << ICE_AQC_GET_SW_CONF_RESP_FUNC_NUM_S)
154
+ #define ICE_AQC_GET_SW_CONF_RESP_IS_VF BIT(15)
155
+ };
156
+
157
+ /* The response buffer is as follows. Note that the length of the
158
+ * elements array varies with the length of the command response.
159
+ */
160
+ struct ice_aqc_get_sw_cfg_resp {
161
+ struct ice_aqc_get_sw_cfg_resp_elem elements [1 ];
162
+ };
163
+
164
+ /* Add TSE (indirect 0x0401)
165
+ * Delete TSE (indirect 0x040F)
166
+ * Move TSE (indirect 0x0408)
167
+ */
168
+ struct ice_aqc_add_move_delete_elem {
169
+ __le16 num_grps_req ;
170
+ __le16 num_grps_updated ;
171
+ __le32 reserved ;
172
+ __le32 addr_high ;
173
+ __le32 addr_low ;
174
+ };
175
+
176
+ struct ice_aqc_elem_info_bw {
177
+ __le16 bw_profile_idx ;
178
+ __le16 bw_alloc ;
179
+ };
180
+
181
+ struct ice_aqc_txsched_elem {
182
+ u8 elem_type ; /* Special field, reserved for some aq calls */
183
+ #define ICE_AQC_ELEM_TYPE_UNDEFINED 0x0
184
+ #define ICE_AQC_ELEM_TYPE_ROOT_PORT 0x1
185
+ #define ICE_AQC_ELEM_TYPE_TC 0x2
186
+ #define ICE_AQC_ELEM_TYPE_SE_GENERIC 0x3
187
+ #define ICE_AQC_ELEM_TYPE_ENTRY_POINT 0x4
188
+ #define ICE_AQC_ELEM_TYPE_LEAF 0x5
189
+ #define ICE_AQC_ELEM_TYPE_SE_PADDED 0x6
190
+ u8 valid_sections ;
191
+ #define ICE_AQC_ELEM_VALID_GENERIC BIT(0)
192
+ #define ICE_AQC_ELEM_VALID_CIR BIT(1)
193
+ #define ICE_AQC_ELEM_VALID_EIR BIT(2)
194
+ #define ICE_AQC_ELEM_VALID_SHARED BIT(3)
195
+ u8 generic ;
196
+ #define ICE_AQC_ELEM_GENERIC_MODE_M 0x1
197
+ #define ICE_AQC_ELEM_GENERIC_PRIO_S 0x1
198
+ #define ICE_AQC_ELEM_GENERIC_PRIO_M (0x7 << ICE_AQC_ELEM_GENERIC_PRIO_S)
199
+ #define ICE_AQC_ELEM_GENERIC_SP_S 0x4
200
+ #define ICE_AQC_ELEM_GENERIC_SP_M (0x1 << ICE_AQC_ELEM_GENERIC_SP_S)
201
+ #define ICE_AQC_ELEM_GENERIC_ADJUST_VAL_S 0x5
202
+ #define ICE_AQC_ELEM_GENERIC_ADJUST_VAL_M \
203
+ (0x3 << ICE_AQC_ELEM_GENERIC_ADJUST_VAL_S)
204
+ u8 flags ; /* Special field, reserved for some aq calls */
205
+ #define ICE_AQC_ELEM_FLAG_SUSPEND_M 0x1
206
+ struct ice_aqc_elem_info_bw cir_bw ;
207
+ struct ice_aqc_elem_info_bw eir_bw ;
208
+ __le16 srl_id ;
209
+ __le16 reserved2 ;
210
+ };
211
+
212
+ struct ice_aqc_txsched_elem_data {
213
+ __le32 parent_teid ;
214
+ __le32 node_teid ;
215
+ struct ice_aqc_txsched_elem data ;
216
+ };
217
+
218
+ struct ice_aqc_txsched_topo_grp_info_hdr {
219
+ __le32 parent_teid ;
220
+ __le16 num_elems ;
221
+ __le16 reserved2 ;
222
+ };
223
+
224
+ struct ice_aqc_delete_elem {
225
+ struct ice_aqc_txsched_topo_grp_info_hdr hdr ;
226
+ __le32 teid [1 ];
227
+ };
228
+
229
+ /* Query Scheduler Resource Allocation (indirect 0x0412)
230
+ * This indirect command retrieves the scheduler resources allocated by
231
+ * EMP Firmware to the given PF.
232
+ */
233
+ struct ice_aqc_query_txsched_res {
234
+ u8 reserved [8 ];
235
+ __le32 addr_high ;
236
+ __le32 addr_low ;
237
+ };
238
+
239
+ struct ice_aqc_generic_sched_props {
240
+ __le16 phys_levels ;
241
+ __le16 logical_levels ;
242
+ u8 flattening_bitmap ;
243
+ u8 max_device_cgds ;
244
+ u8 max_pf_cgds ;
245
+ u8 rsvd0 ;
246
+ __le16 rdma_qsets ;
247
+ u8 rsvd1 [22 ];
248
+ };
249
+
250
+ struct ice_aqc_layer_props {
251
+ u8 logical_layer ;
252
+ u8 chunk_size ;
253
+ __le16 max_device_nodes ;
254
+ __le16 max_pf_nodes ;
255
+ u8 rsvd0 [2 ];
256
+ __le16 max_shared_rate_lmtr ;
257
+ __le16 max_children ;
258
+ __le16 max_cir_rl_profiles ;
259
+ __le16 max_eir_rl_profiles ;
260
+ __le16 max_srl_profiles ;
261
+ u8 rsvd1 [14 ];
262
+ };
263
+
264
+ struct ice_aqc_query_txsched_res_resp {
265
+ struct ice_aqc_generic_sched_props sched_props ;
266
+ struct ice_aqc_layer_props layer_props [ICE_AQC_TOPO_MAX_LEVEL_NUM ];
267
+ };
268
+
78
269
/* NVM Read command (indirect 0x0701)
79
270
* NVM Erase commands (direct 0x0702)
80
271
* NVM Update commands (indirect 0x0703)
@@ -128,6 +319,10 @@ struct ice_aq_desc {
128
319
struct ice_aqc_q_shutdown q_shutdown ;
129
320
struct ice_aqc_req_res res_owner ;
130
321
struct ice_aqc_clear_pxe clear_pxe ;
322
+ struct ice_aqc_list_caps get_cap ;
323
+ struct ice_aqc_get_sw_cfg get_sw_conf ;
324
+ struct ice_aqc_query_txsched_res query_sched_res ;
325
+ struct ice_aqc_add_move_delete_elem add_move_delete_elem ;
131
326
struct ice_aqc_nvm nvm ;
132
327
} params ;
133
328
};
@@ -136,16 +331,19 @@ struct ice_aq_desc {
136
331
#define ICE_AQ_LG_BUF 512
137
332
138
333
#define ICE_AQ_FLAG_LB_S 9
334
+ #define ICE_AQ_FLAG_RD_S 10
139
335
#define ICE_AQ_FLAG_BUF_S 12
140
336
#define ICE_AQ_FLAG_SI_S 13
141
337
142
338
#define ICE_AQ_FLAG_LB BIT(ICE_AQ_FLAG_LB_S) /* 0x200 */
339
+ #define ICE_AQ_FLAG_RD BIT(ICE_AQ_FLAG_RD_S) /* 0x400 */
143
340
#define ICE_AQ_FLAG_BUF BIT(ICE_AQ_FLAG_BUF_S) /* 0x1000 */
144
341
#define ICE_AQ_FLAG_SI BIT(ICE_AQ_FLAG_SI_S) /* 0x2000 */
145
342
146
343
/* error codes */
147
344
enum ice_aq_err {
148
345
ICE_AQ_RC_OK = 0 , /* success */
346
+ ICE_AQ_RC_ENOMEM = 9 , /* Out of memory */
149
347
ICE_AQ_RC_EBUSY = 12 , /* Device or resource busy */
150
348
ICE_AQ_RC_EEXIST = 13 , /* object already exists */
151
349
};
@@ -160,11 +358,22 @@ enum ice_adminq_opc {
160
358
ice_aqc_opc_req_res = 0x0008 ,
161
359
ice_aqc_opc_release_res = 0x0009 ,
162
360
361
+ /* device/function capabilities */
362
+ ice_aqc_opc_list_func_caps = 0x000A ,
363
+ ice_aqc_opc_list_dev_caps = 0x000B ,
364
+
163
365
/* PXE */
164
366
ice_aqc_opc_clear_pxe_mode = 0x0110 ,
165
367
368
+ /* internal switch commands */
369
+ ice_aqc_opc_get_sw_cfg = 0x0200 ,
370
+
166
371
ice_aqc_opc_clear_pf_cfg = 0x02A4 ,
167
372
373
+ /* transmit scheduler commands */
374
+ ice_aqc_opc_delete_sched_elems = 0x040F ,
375
+ ice_aqc_opc_query_sched_res = 0x0412 ,
376
+
168
377
/* NVM commands */
169
378
ice_aqc_opc_nvm_read = 0x0701 ,
170
379
0 commit comments