xref: /linux/drivers/net/wireless/ath/ath10k/qmi_wlfw_v01.c (revision 06d07429858317ded2db7986113a9e0129cd599b)
1 // SPDX-License-Identifier: ISC
2 /*
3  * Copyright (c) 2018 The Linux Foundation. All rights reserved.
4  * Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
5  */
6 
7 #include <linux/soc/qcom/qmi.h>
8 #include <linux/types.h>
9 #include "qmi_wlfw_v01.h"
10 
11 static const struct qmi_elem_info wlfw_ce_tgt_pipe_cfg_s_v01_ei[] = {
12 	{
13 		.data_type      = QMI_UNSIGNED_4_BYTE,
14 		.elem_len       = 1,
15 		.elem_size      = sizeof(u32),
16 		.array_type     = NO_ARRAY,
17 		.tlv_type       = 0,
18 		.offset         = offsetof(struct wlfw_ce_tgt_pipe_cfg_s_v01,
19 					   pipe_num),
20 	},
21 	{
22 		.data_type      = QMI_SIGNED_4_BYTE_ENUM,
23 		.elem_len       = 1,
24 		.elem_size      = sizeof(enum wlfw_pipedir_enum_v01),
25 		.array_type     = NO_ARRAY,
26 		.tlv_type       = 0,
27 		.offset         = offsetof(struct wlfw_ce_tgt_pipe_cfg_s_v01,
28 					   pipe_dir),
29 	},
30 	{
31 		.data_type      = QMI_UNSIGNED_4_BYTE,
32 		.elem_len       = 1,
33 		.elem_size      = sizeof(u32),
34 		.array_type     = NO_ARRAY,
35 		.tlv_type       = 0,
36 		.offset         = offsetof(struct wlfw_ce_tgt_pipe_cfg_s_v01,
37 					   nentries),
38 	},
39 	{
40 		.data_type      = QMI_UNSIGNED_4_BYTE,
41 		.elem_len       = 1,
42 		.elem_size      = sizeof(u32),
43 		.array_type     = NO_ARRAY,
44 		.tlv_type       = 0,
45 		.offset         = offsetof(struct wlfw_ce_tgt_pipe_cfg_s_v01,
46 					   nbytes_max),
47 	},
48 	{
49 		.data_type      = QMI_UNSIGNED_4_BYTE,
50 		.elem_len       = 1,
51 		.elem_size      = sizeof(u32),
52 		.array_type     = NO_ARRAY,
53 		.tlv_type       = 0,
54 		.offset         = offsetof(struct wlfw_ce_tgt_pipe_cfg_s_v01,
55 					   flags),
56 	},
57 	{}
58 };
59 
60 static const struct qmi_elem_info wlfw_ce_svc_pipe_cfg_s_v01_ei[] = {
61 	{
62 		.data_type      = QMI_UNSIGNED_4_BYTE,
63 		.elem_len       = 1,
64 		.elem_size      = sizeof(u32),
65 		.array_type     = NO_ARRAY,
66 		.tlv_type       = 0,
67 		.offset         = offsetof(struct wlfw_ce_svc_pipe_cfg_s_v01,
68 					   service_id),
69 	},
70 	{
71 		.data_type      = QMI_SIGNED_4_BYTE_ENUM,
72 		.elem_len       = 1,
73 		.elem_size      = sizeof(enum wlfw_pipedir_enum_v01),
74 		.array_type     = NO_ARRAY,
75 		.tlv_type       = 0,
76 		.offset         = offsetof(struct wlfw_ce_svc_pipe_cfg_s_v01,
77 					   pipe_dir),
78 	},
79 	{
80 		.data_type      = QMI_UNSIGNED_4_BYTE,
81 		.elem_len       = 1,
82 		.elem_size      = sizeof(u32),
83 		.array_type     = NO_ARRAY,
84 		.tlv_type       = 0,
85 		.offset         = offsetof(struct wlfw_ce_svc_pipe_cfg_s_v01,
86 					   pipe_num),
87 	},
88 	{}
89 };
90 
91 static const struct qmi_elem_info wlfw_shadow_reg_cfg_s_v01_ei[] = {
92 	{
93 		.data_type      = QMI_UNSIGNED_2_BYTE,
94 		.elem_len       = 1,
95 		.elem_size      = sizeof(u16),
96 		.array_type     = NO_ARRAY,
97 		.tlv_type       = 0,
98 		.offset         = offsetof(struct wlfw_shadow_reg_cfg_s_v01,
99 					   id),
100 	},
101 	{
102 		.data_type      = QMI_UNSIGNED_2_BYTE,
103 		.elem_len       = 1,
104 		.elem_size      = sizeof(u16),
105 		.array_type     = NO_ARRAY,
106 		.tlv_type       = 0,
107 		.offset         = offsetof(struct wlfw_shadow_reg_cfg_s_v01,
108 					   offset),
109 	},
110 	{}
111 };
112 
113 static const struct qmi_elem_info wlfw_shadow_reg_v2_cfg_s_v01_ei[] = {
114 	{
115 		.data_type      = QMI_UNSIGNED_4_BYTE,
116 		.elem_len       = 1,
117 		.elem_size      = sizeof(u32),
118 		.array_type     = NO_ARRAY,
119 		.tlv_type       = 0,
120 		.offset         = offsetof(struct wlfw_shadow_reg_v2_cfg_s_v01,
121 					   addr),
122 	},
123 	{}
124 };
125 
126 static const struct qmi_elem_info wlfw_memory_region_info_s_v01_ei[] = {
127 	{
128 		.data_type      = QMI_UNSIGNED_8_BYTE,
129 		.elem_len       = 1,
130 		.elem_size      = sizeof(u64),
131 		.array_type     = NO_ARRAY,
132 		.tlv_type       = 0,
133 		.offset         = offsetof(struct wlfw_memory_region_info_s_v01,
134 					   region_addr),
135 	},
136 	{
137 		.data_type      = QMI_UNSIGNED_4_BYTE,
138 		.elem_len       = 1,
139 		.elem_size      = sizeof(u32),
140 		.array_type     = NO_ARRAY,
141 		.tlv_type       = 0,
142 		.offset         = offsetof(struct wlfw_memory_region_info_s_v01,
143 					   size),
144 	},
145 	{
146 		.data_type      = QMI_UNSIGNED_1_BYTE,
147 		.elem_len       = 1,
148 		.elem_size      = sizeof(u8),
149 		.array_type     = NO_ARRAY,
150 		.tlv_type       = 0,
151 		.offset         = offsetof(struct wlfw_memory_region_info_s_v01,
152 					   secure_flag),
153 	},
154 	{}
155 };
156 
157 static const struct qmi_elem_info wlfw_mem_cfg_s_v01_ei[] = {
158 	{
159 		.data_type      = QMI_UNSIGNED_8_BYTE,
160 		.elem_len       = 1,
161 		.elem_size      = sizeof(u64),
162 		.array_type     = NO_ARRAY,
163 		.tlv_type       = 0,
164 		.offset         = offsetof(struct wlfw_mem_cfg_s_v01,
165 					   offset),
166 	},
167 	{
168 		.data_type      = QMI_UNSIGNED_4_BYTE,
169 		.elem_len       = 1,
170 		.elem_size      = sizeof(u32),
171 		.array_type     = NO_ARRAY,
172 		.tlv_type       = 0,
173 		.offset         = offsetof(struct wlfw_mem_cfg_s_v01,
174 					   size),
175 	},
176 	{
177 		.data_type      = QMI_UNSIGNED_1_BYTE,
178 		.elem_len       = 1,
179 		.elem_size      = sizeof(u8),
180 		.array_type     = NO_ARRAY,
181 		.tlv_type       = 0,
182 		.offset         = offsetof(struct wlfw_mem_cfg_s_v01,
183 					   secure_flag),
184 	},
185 	{}
186 };
187 
188 static const struct qmi_elem_info wlfw_mem_seg_s_v01_ei[] = {
189 	{
190 		.data_type      = QMI_UNSIGNED_4_BYTE,
191 		.elem_len       = 1,
192 		.elem_size      = sizeof(u32),
193 		.array_type     = NO_ARRAY,
194 		.tlv_type       = 0,
195 		.offset         = offsetof(struct wlfw_mem_seg_s_v01,
196 					   size),
197 	},
198 	{
199 		.data_type      = QMI_SIGNED_4_BYTE_ENUM,
200 		.elem_len       = 1,
201 		.elem_size      = sizeof(enum wlfw_mem_type_enum_v01),
202 		.array_type     = NO_ARRAY,
203 		.tlv_type       = 0,
204 		.offset         = offsetof(struct wlfw_mem_seg_s_v01,
205 					   type),
206 	},
207 	{
208 		.data_type      = QMI_DATA_LEN,
209 		.elem_len       = 1,
210 		.elem_size      = sizeof(u8),
211 		.array_type     = NO_ARRAY,
212 		.tlv_type       = 0,
213 		.offset         = offsetof(struct wlfw_mem_seg_s_v01,
214 					   mem_cfg_len),
215 	},
216 	{
217 		.data_type      = QMI_STRUCT,
218 		.elem_len       = QMI_WLFW_MAX_NUM_MEM_CFG_V01,
219 		.elem_size      = sizeof(struct wlfw_mem_cfg_s_v01),
220 		.array_type       = VAR_LEN_ARRAY,
221 		.tlv_type       = 0,
222 		.offset         = offsetof(struct wlfw_mem_seg_s_v01,
223 					   mem_cfg),
224 		.ei_array      = wlfw_mem_cfg_s_v01_ei,
225 	},
226 	{}
227 };
228 
229 static const struct qmi_elem_info wlfw_mem_seg_resp_s_v01_ei[] = {
230 	{
231 		.data_type      = QMI_UNSIGNED_8_BYTE,
232 		.elem_len       = 1,
233 		.elem_size      = sizeof(u64),
234 		.array_type     = NO_ARRAY,
235 		.tlv_type       = 0,
236 		.offset         = offsetof(struct wlfw_mem_seg_resp_s_v01,
237 					   addr),
238 	},
239 	{
240 		.data_type      = QMI_UNSIGNED_4_BYTE,
241 		.elem_len       = 1,
242 		.elem_size      = sizeof(u32),
243 		.array_type     = NO_ARRAY,
244 		.tlv_type       = 0,
245 		.offset         = offsetof(struct wlfw_mem_seg_resp_s_v01,
246 					   size),
247 	},
248 	{
249 		.data_type      = QMI_SIGNED_4_BYTE_ENUM,
250 		.elem_len       = 1,
251 		.elem_size      = sizeof(enum wlfw_mem_type_enum_v01),
252 		.array_type     = NO_ARRAY,
253 		.tlv_type       = 0,
254 		.offset         = offsetof(struct wlfw_mem_seg_resp_s_v01,
255 					   type),
256 	},
257 	{}
258 };
259 
260 static const struct qmi_elem_info wlfw_rf_chip_info_s_v01_ei[] = {
261 	{
262 		.data_type      = QMI_UNSIGNED_4_BYTE,
263 		.elem_len       = 1,
264 		.elem_size      = sizeof(u32),
265 		.array_type     = NO_ARRAY,
266 		.tlv_type       = 0,
267 		.offset         = offsetof(struct wlfw_rf_chip_info_s_v01,
268 					   chip_id),
269 	},
270 	{
271 		.data_type      = QMI_UNSIGNED_4_BYTE,
272 		.elem_len       = 1,
273 		.elem_size      = sizeof(u32),
274 		.array_type     = NO_ARRAY,
275 		.tlv_type       = 0,
276 		.offset         = offsetof(struct wlfw_rf_chip_info_s_v01,
277 					   chip_family),
278 	},
279 	{}
280 };
281 
282 static const struct qmi_elem_info wlfw_rf_board_info_s_v01_ei[] = {
283 	{
284 		.data_type      = QMI_UNSIGNED_4_BYTE,
285 		.elem_len       = 1,
286 		.elem_size      = sizeof(u32),
287 		.array_type     = NO_ARRAY,
288 		.tlv_type       = 0,
289 		.offset         = offsetof(struct wlfw_rf_board_info_s_v01,
290 					   board_id),
291 	},
292 	{}
293 };
294 
295 static const struct qmi_elem_info wlfw_soc_info_s_v01_ei[] = {
296 	{
297 		.data_type      = QMI_UNSIGNED_4_BYTE,
298 		.elem_len       = 1,
299 		.elem_size      = sizeof(u32),
300 		.array_type     = NO_ARRAY,
301 		.tlv_type       = 0,
302 		.offset         = offsetof(struct wlfw_soc_info_s_v01,
303 					   soc_id),
304 	},
305 	{}
306 };
307 
308 static const struct qmi_elem_info wlfw_fw_version_info_s_v01_ei[] = {
309 	{
310 		.data_type      = QMI_UNSIGNED_4_BYTE,
311 		.elem_len       = 1,
312 		.elem_size      = sizeof(u32),
313 		.array_type     = NO_ARRAY,
314 		.tlv_type       = 0,
315 		.offset         = offsetof(struct wlfw_fw_version_info_s_v01,
316 					   fw_version),
317 	},
318 	{
319 		.data_type      = QMI_STRING,
320 		.elem_len       = QMI_WLFW_MAX_TIMESTAMP_LEN_V01 + 1,
321 		.elem_size      = sizeof(char),
322 		.array_type     = NO_ARRAY,
323 		.tlv_type       = 0,
324 		.offset         = offsetof(struct wlfw_fw_version_info_s_v01,
325 					   fw_build_timestamp),
326 	},
327 	{}
328 };
329 
330 const struct qmi_elem_info wlfw_ind_register_req_msg_v01_ei[] = {
331 	{
332 		.data_type      = QMI_OPT_FLAG,
333 		.elem_len       = 1,
334 		.elem_size      = sizeof(u8),
335 		.array_type     = NO_ARRAY,
336 		.tlv_type       = 0x10,
337 		.offset         = offsetof(struct wlfw_ind_register_req_msg_v01,
338 					   fw_ready_enable_valid),
339 	},
340 	{
341 		.data_type      = QMI_UNSIGNED_1_BYTE,
342 		.elem_len       = 1,
343 		.elem_size      = sizeof(u8),
344 		.array_type     = NO_ARRAY,
345 		.tlv_type       = 0x10,
346 		.offset         = offsetof(struct wlfw_ind_register_req_msg_v01,
347 					   fw_ready_enable),
348 	},
349 	{
350 		.data_type      = QMI_OPT_FLAG,
351 		.elem_len       = 1,
352 		.elem_size      = sizeof(u8),
353 		.array_type     = NO_ARRAY,
354 		.tlv_type       = 0x11,
355 		.offset         = offsetof(struct wlfw_ind_register_req_msg_v01,
356 					   initiate_cal_download_enable_valid),
357 	},
358 	{
359 		.data_type      = QMI_UNSIGNED_1_BYTE,
360 		.elem_len       = 1,
361 		.elem_size      = sizeof(u8),
362 		.array_type     = NO_ARRAY,
363 		.tlv_type       = 0x11,
364 		.offset         = offsetof(struct wlfw_ind_register_req_msg_v01,
365 					   initiate_cal_download_enable),
366 	},
367 	{
368 		.data_type      = QMI_OPT_FLAG,
369 		.elem_len       = 1,
370 		.elem_size      = sizeof(u8),
371 		.array_type     = NO_ARRAY,
372 		.tlv_type       = 0x12,
373 		.offset         = offsetof(struct wlfw_ind_register_req_msg_v01,
374 					   initiate_cal_update_enable_valid),
375 	},
376 	{
377 		.data_type      = QMI_UNSIGNED_1_BYTE,
378 		.elem_len       = 1,
379 		.elem_size      = sizeof(u8),
380 		.array_type     = NO_ARRAY,
381 		.tlv_type       = 0x12,
382 		.offset         = offsetof(struct wlfw_ind_register_req_msg_v01,
383 					   initiate_cal_update_enable),
384 	},
385 	{
386 		.data_type      = QMI_OPT_FLAG,
387 		.elem_len       = 1,
388 		.elem_size      = sizeof(u8),
389 		.array_type     = NO_ARRAY,
390 		.tlv_type       = 0x13,
391 		.offset         = offsetof(struct wlfw_ind_register_req_msg_v01,
392 					   msa_ready_enable_valid),
393 	},
394 	{
395 		.data_type      = QMI_UNSIGNED_1_BYTE,
396 		.elem_len       = 1,
397 		.elem_size      = sizeof(u8),
398 		.array_type     = NO_ARRAY,
399 		.tlv_type       = 0x13,
400 		.offset         = offsetof(struct wlfw_ind_register_req_msg_v01,
401 					   msa_ready_enable),
402 	},
403 	{
404 		.data_type      = QMI_OPT_FLAG,
405 		.elem_len       = 1,
406 		.elem_size      = sizeof(u8),
407 		.array_type     = NO_ARRAY,
408 		.tlv_type       = 0x14,
409 		.offset         = offsetof(struct wlfw_ind_register_req_msg_v01,
410 					   pin_connect_result_enable_valid),
411 	},
412 	{
413 		.data_type      = QMI_UNSIGNED_1_BYTE,
414 		.elem_len       = 1,
415 		.elem_size      = sizeof(u8),
416 		.array_type     = NO_ARRAY,
417 		.tlv_type       = 0x14,
418 		.offset         = offsetof(struct wlfw_ind_register_req_msg_v01,
419 					   pin_connect_result_enable),
420 	},
421 	{
422 		.data_type      = QMI_OPT_FLAG,
423 		.elem_len       = 1,
424 		.elem_size      = sizeof(u8),
425 		.array_type     = NO_ARRAY,
426 		.tlv_type       = 0x15,
427 		.offset         = offsetof(struct wlfw_ind_register_req_msg_v01,
428 					   client_id_valid),
429 	},
430 	{
431 		.data_type      = QMI_UNSIGNED_4_BYTE,
432 		.elem_len       = 1,
433 		.elem_size      = sizeof(u32),
434 		.array_type     = NO_ARRAY,
435 		.tlv_type       = 0x15,
436 		.offset         = offsetof(struct wlfw_ind_register_req_msg_v01,
437 					   client_id),
438 	},
439 	{
440 		.data_type      = QMI_OPT_FLAG,
441 		.elem_len       = 1,
442 		.elem_size      = sizeof(u8),
443 		.array_type     = NO_ARRAY,
444 		.tlv_type       = 0x16,
445 		.offset         = offsetof(struct wlfw_ind_register_req_msg_v01,
446 					   request_mem_enable_valid),
447 	},
448 	{
449 		.data_type      = QMI_UNSIGNED_1_BYTE,
450 		.elem_len       = 1,
451 		.elem_size      = sizeof(u8),
452 		.array_type     = NO_ARRAY,
453 		.tlv_type       = 0x16,
454 		.offset         = offsetof(struct wlfw_ind_register_req_msg_v01,
455 					   request_mem_enable),
456 	},
457 	{
458 		.data_type      = QMI_OPT_FLAG,
459 		.elem_len       = 1,
460 		.elem_size      = sizeof(u8),
461 		.array_type     = NO_ARRAY,
462 		.tlv_type       = 0x17,
463 		.offset         = offsetof(struct wlfw_ind_register_req_msg_v01,
464 					   mem_ready_enable_valid),
465 	},
466 	{
467 		.data_type      = QMI_UNSIGNED_1_BYTE,
468 		.elem_len       = 1,
469 		.elem_size      = sizeof(u8),
470 		.array_type     = NO_ARRAY,
471 		.tlv_type       = 0x17,
472 		.offset         = offsetof(struct wlfw_ind_register_req_msg_v01,
473 					   mem_ready_enable),
474 	},
475 	{
476 		.data_type      = QMI_OPT_FLAG,
477 		.elem_len       = 1,
478 		.elem_size      = sizeof(u8),
479 		.array_type     = NO_ARRAY,
480 		.tlv_type       = 0x18,
481 		.offset         = offsetof(struct wlfw_ind_register_req_msg_v01,
482 					   fw_init_done_enable_valid),
483 	},
484 	{
485 		.data_type      = QMI_UNSIGNED_1_BYTE,
486 		.elem_len       = 1,
487 		.elem_size      = sizeof(u8),
488 		.array_type     = NO_ARRAY,
489 		.tlv_type       = 0x18,
490 		.offset         = offsetof(struct wlfw_ind_register_req_msg_v01,
491 					   fw_init_done_enable),
492 	},
493 	{
494 		.data_type      = QMI_OPT_FLAG,
495 		.elem_len       = 1,
496 		.elem_size      = sizeof(u8),
497 		.array_type     = NO_ARRAY,
498 		.tlv_type       = 0x19,
499 		.offset         = offsetof(struct wlfw_ind_register_req_msg_v01,
500 					   rejuvenate_enable_valid),
501 	},
502 	{
503 		.data_type      = QMI_UNSIGNED_4_BYTE,
504 		.elem_len       = 1,
505 		.elem_size      = sizeof(u32),
506 		.array_type     = NO_ARRAY,
507 		.tlv_type       = 0x19,
508 		.offset         = offsetof(struct wlfw_ind_register_req_msg_v01,
509 					   rejuvenate_enable),
510 	},
511 	{
512 		.data_type      = QMI_OPT_FLAG,
513 		.elem_len       = 1,
514 		.elem_size      = sizeof(u8),
515 		.array_type     = NO_ARRAY,
516 		.tlv_type       = 0x1A,
517 		.offset         = offsetof(struct wlfw_ind_register_req_msg_v01,
518 					   xo_cal_enable_valid),
519 	},
520 	{
521 		.data_type      = QMI_UNSIGNED_1_BYTE,
522 		.elem_len       = 1,
523 		.elem_size      = sizeof(u8),
524 		.array_type     = NO_ARRAY,
525 		.tlv_type       = 0x1A,
526 		.offset         = offsetof(struct wlfw_ind_register_req_msg_v01,
527 					   xo_cal_enable),
528 	},
529 	{}
530 };
531 
532 const struct qmi_elem_info wlfw_ind_register_resp_msg_v01_ei[] = {
533 	{
534 		.data_type      = QMI_STRUCT,
535 		.elem_len       = 1,
536 		.elem_size      = sizeof(struct qmi_response_type_v01),
537 		.array_type     = NO_ARRAY,
538 		.tlv_type       = 0x02,
539 		.offset         = offsetof(struct wlfw_ind_register_resp_msg_v01,
540 					   resp),
541 		.ei_array      = qmi_response_type_v01_ei,
542 	},
543 	{
544 		.data_type      = QMI_OPT_FLAG,
545 		.elem_len       = 1,
546 		.elem_size      = sizeof(u8),
547 		.array_type     = NO_ARRAY,
548 		.tlv_type       = 0x10,
549 		.offset         = offsetof(struct wlfw_ind_register_resp_msg_v01,
550 					   fw_status_valid),
551 	},
552 	{
553 		.data_type      = QMI_UNSIGNED_8_BYTE,
554 		.elem_len       = 1,
555 		.elem_size      = sizeof(u64),
556 		.array_type     = NO_ARRAY,
557 		.tlv_type       = 0x10,
558 		.offset         = offsetof(struct wlfw_ind_register_resp_msg_v01,
559 					   fw_status),
560 	},
561 	{}
562 };
563 
564 const struct qmi_elem_info wlfw_fw_ready_ind_msg_v01_ei[] = {
565 	{}
566 };
567 
568 const struct qmi_elem_info wlfw_msa_ready_ind_msg_v01_ei[] = {
569 	{}
570 };
571 
572 const struct qmi_elem_info wlfw_pin_connect_result_ind_msg_v01_ei[] = {
573 	{
574 		.data_type      = QMI_OPT_FLAG,
575 		.elem_len       = 1,
576 		.elem_size      = sizeof(u8),
577 		.array_type     = NO_ARRAY,
578 		.tlv_type       = 0x10,
579 		.offset         = offsetof(struct wlfw_pin_connect_result_ind_msg_v01,
580 					   pwr_pin_result_valid),
581 	},
582 	{
583 		.data_type      = QMI_UNSIGNED_4_BYTE,
584 		.elem_len       = 1,
585 		.elem_size      = sizeof(u32),
586 		.array_type     = NO_ARRAY,
587 		.tlv_type       = 0x10,
588 		.offset         = offsetof(struct wlfw_pin_connect_result_ind_msg_v01,
589 					   pwr_pin_result),
590 	},
591 	{
592 		.data_type      = QMI_OPT_FLAG,
593 		.elem_len       = 1,
594 		.elem_size      = sizeof(u8),
595 		.array_type     = NO_ARRAY,
596 		.tlv_type       = 0x11,
597 		.offset         = offsetof(struct wlfw_pin_connect_result_ind_msg_v01,
598 					   phy_io_pin_result_valid),
599 	},
600 	{
601 		.data_type      = QMI_UNSIGNED_4_BYTE,
602 		.elem_len       = 1,
603 		.elem_size      = sizeof(u32),
604 		.array_type     = NO_ARRAY,
605 		.tlv_type       = 0x11,
606 		.offset         = offsetof(struct wlfw_pin_connect_result_ind_msg_v01,
607 					   phy_io_pin_result),
608 	},
609 	{
610 		.data_type      = QMI_OPT_FLAG,
611 		.elem_len       = 1,
612 		.elem_size      = sizeof(u8),
613 		.array_type     = NO_ARRAY,
614 		.tlv_type       = 0x12,
615 		.offset         = offsetof(struct wlfw_pin_connect_result_ind_msg_v01,
616 					   rf_pin_result_valid),
617 	},
618 	{
619 		.data_type      = QMI_UNSIGNED_4_BYTE,
620 		.elem_len       = 1,
621 		.elem_size      = sizeof(u32),
622 		.array_type     = NO_ARRAY,
623 		.tlv_type       = 0x12,
624 		.offset         = offsetof(struct wlfw_pin_connect_result_ind_msg_v01,
625 					   rf_pin_result),
626 	},
627 	{}
628 };
629 
630 const struct qmi_elem_info wlfw_wlan_mode_req_msg_v01_ei[] = {
631 	{
632 		.data_type      = QMI_SIGNED_4_BYTE_ENUM,
633 		.elem_len       = 1,
634 		.elem_size      = sizeof(enum wlfw_driver_mode_enum_v01),
635 		.array_type     = NO_ARRAY,
636 		.tlv_type       = 0x01,
637 		.offset         = offsetof(struct wlfw_wlan_mode_req_msg_v01,
638 					   mode),
639 	},
640 	{
641 		.data_type      = QMI_OPT_FLAG,
642 		.elem_len       = 1,
643 		.elem_size      = sizeof(u8),
644 		.array_type     = NO_ARRAY,
645 		.tlv_type       = 0x10,
646 		.offset         = offsetof(struct wlfw_wlan_mode_req_msg_v01,
647 					   hw_debug_valid),
648 	},
649 	{
650 		.data_type      = QMI_UNSIGNED_1_BYTE,
651 		.elem_len       = 1,
652 		.elem_size      = sizeof(u8),
653 		.array_type     = NO_ARRAY,
654 		.tlv_type       = 0x10,
655 		.offset         = offsetof(struct wlfw_wlan_mode_req_msg_v01,
656 					   hw_debug),
657 	},
658 	{}
659 };
660 
661 const struct qmi_elem_info wlfw_wlan_mode_resp_msg_v01_ei[] = {
662 	{
663 		.data_type      = QMI_STRUCT,
664 		.elem_len       = 1,
665 		.elem_size      = sizeof(struct qmi_response_type_v01),
666 		.array_type     = NO_ARRAY,
667 		.tlv_type       = 0x02,
668 		.offset         = offsetof(struct wlfw_wlan_mode_resp_msg_v01,
669 					   resp),
670 		.ei_array      = qmi_response_type_v01_ei,
671 	},
672 	{}
673 };
674 
675 const struct qmi_elem_info wlfw_wlan_cfg_req_msg_v01_ei[] = {
676 	{
677 		.data_type      = QMI_OPT_FLAG,
678 		.elem_len       = 1,
679 		.elem_size      = sizeof(u8),
680 		.array_type     = NO_ARRAY,
681 		.tlv_type       = 0x10,
682 		.offset         = offsetof(struct wlfw_wlan_cfg_req_msg_v01,
683 					   host_version_valid),
684 	},
685 	{
686 		.data_type      = QMI_STRING,
687 		.elem_len       = QMI_WLFW_MAX_STR_LEN_V01 + 1,
688 		.elem_size      = sizeof(char),
689 		.array_type     = NO_ARRAY,
690 		.tlv_type       = 0x10,
691 		.offset         = offsetof(struct wlfw_wlan_cfg_req_msg_v01,
692 					   host_version),
693 	},
694 	{
695 		.data_type      = QMI_OPT_FLAG,
696 		.elem_len       = 1,
697 		.elem_size      = sizeof(u8),
698 		.array_type     = NO_ARRAY,
699 		.tlv_type       = 0x11,
700 		.offset         = offsetof(struct wlfw_wlan_cfg_req_msg_v01,
701 					   tgt_cfg_valid),
702 	},
703 	{
704 		.data_type      = QMI_DATA_LEN,
705 		.elem_len       = 1,
706 		.elem_size      = sizeof(u8),
707 		.array_type     = NO_ARRAY,
708 		.tlv_type       = 0x11,
709 		.offset         = offsetof(struct wlfw_wlan_cfg_req_msg_v01,
710 					   tgt_cfg_len),
711 	},
712 	{
713 		.data_type      = QMI_STRUCT,
714 		.elem_len       = QMI_WLFW_MAX_NUM_CE_V01,
715 		.elem_size      = sizeof(struct wlfw_ce_tgt_pipe_cfg_s_v01),
716 		.array_type       = VAR_LEN_ARRAY,
717 		.tlv_type       = 0x11,
718 		.offset         = offsetof(struct wlfw_wlan_cfg_req_msg_v01,
719 					   tgt_cfg),
720 		.ei_array      = wlfw_ce_tgt_pipe_cfg_s_v01_ei,
721 	},
722 	{
723 		.data_type      = QMI_OPT_FLAG,
724 		.elem_len       = 1,
725 		.elem_size      = sizeof(u8),
726 		.array_type     = NO_ARRAY,
727 		.tlv_type       = 0x12,
728 		.offset         = offsetof(struct wlfw_wlan_cfg_req_msg_v01,
729 					   svc_cfg_valid),
730 	},
731 	{
732 		.data_type      = QMI_DATA_LEN,
733 		.elem_len       = 1,
734 		.elem_size      = sizeof(u8),
735 		.array_type     = NO_ARRAY,
736 		.tlv_type       = 0x12,
737 		.offset         = offsetof(struct wlfw_wlan_cfg_req_msg_v01,
738 					   svc_cfg_len),
739 	},
740 	{
741 		.data_type      = QMI_STRUCT,
742 		.elem_len       = QMI_WLFW_MAX_NUM_SVC_V01,
743 		.elem_size      = sizeof(struct wlfw_ce_svc_pipe_cfg_s_v01),
744 		.array_type       = VAR_LEN_ARRAY,
745 		.tlv_type       = 0x12,
746 		.offset         = offsetof(struct wlfw_wlan_cfg_req_msg_v01,
747 					   svc_cfg),
748 		.ei_array      = wlfw_ce_svc_pipe_cfg_s_v01_ei,
749 	},
750 	{
751 		.data_type      = QMI_OPT_FLAG,
752 		.elem_len       = 1,
753 		.elem_size      = sizeof(u8),
754 		.array_type     = NO_ARRAY,
755 		.tlv_type       = 0x13,
756 		.offset         = offsetof(struct wlfw_wlan_cfg_req_msg_v01,
757 					   shadow_reg_valid),
758 	},
759 	{
760 		.data_type      = QMI_DATA_LEN,
761 		.elem_len       = 1,
762 		.elem_size      = sizeof(u8),
763 		.array_type     = NO_ARRAY,
764 		.tlv_type       = 0x13,
765 		.offset         = offsetof(struct wlfw_wlan_cfg_req_msg_v01,
766 					   shadow_reg_len),
767 	},
768 	{
769 		.data_type      = QMI_STRUCT,
770 		.elem_len       = QMI_WLFW_MAX_NUM_SHADOW_REG_V01,
771 		.elem_size      = sizeof(struct wlfw_shadow_reg_cfg_s_v01),
772 		.array_type       = VAR_LEN_ARRAY,
773 		.tlv_type       = 0x13,
774 		.offset         = offsetof(struct wlfw_wlan_cfg_req_msg_v01,
775 					   shadow_reg),
776 		.ei_array      = wlfw_shadow_reg_cfg_s_v01_ei,
777 	},
778 	{
779 		.data_type      = QMI_OPT_FLAG,
780 		.elem_len       = 1,
781 		.elem_size      = sizeof(u8),
782 		.array_type     = NO_ARRAY,
783 		.tlv_type       = 0x14,
784 		.offset         = offsetof(struct wlfw_wlan_cfg_req_msg_v01,
785 					   shadow_reg_v2_valid),
786 	},
787 	{
788 		.data_type      = QMI_DATA_LEN,
789 		.elem_len       = 1,
790 		.elem_size      = sizeof(u8),
791 		.array_type     = NO_ARRAY,
792 		.tlv_type       = 0x14,
793 		.offset         = offsetof(struct wlfw_wlan_cfg_req_msg_v01,
794 					   shadow_reg_v2_len),
795 	},
796 	{
797 		.data_type      = QMI_STRUCT,
798 		.elem_len       = QMI_WLFW_MAX_SHADOW_REG_V2,
799 		.elem_size      = sizeof(struct wlfw_shadow_reg_v2_cfg_s_v01),
800 		.array_type       = VAR_LEN_ARRAY,
801 		.tlv_type       = 0x14,
802 		.offset         = offsetof(struct wlfw_wlan_cfg_req_msg_v01,
803 					   shadow_reg_v2),
804 		.ei_array      = wlfw_shadow_reg_v2_cfg_s_v01_ei,
805 	},
806 	{}
807 };
808 
809 const struct qmi_elem_info wlfw_wlan_cfg_resp_msg_v01_ei[] = {
810 	{
811 		.data_type      = QMI_STRUCT,
812 		.elem_len       = 1,
813 		.elem_size      = sizeof(struct qmi_response_type_v01),
814 		.array_type     = NO_ARRAY,
815 		.tlv_type       = 0x02,
816 		.offset         = offsetof(struct wlfw_wlan_cfg_resp_msg_v01,
817 					   resp),
818 		.ei_array      = qmi_response_type_v01_ei,
819 	},
820 	{}
821 };
822 
823 const struct qmi_elem_info wlfw_cap_req_msg_v01_ei[] = {
824 	{}
825 };
826 
827 const struct qmi_elem_info wlfw_cap_resp_msg_v01_ei[] = {
828 	{
829 		.data_type      = QMI_STRUCT,
830 		.elem_len       = 1,
831 		.elem_size      = sizeof(struct qmi_response_type_v01),
832 		.array_type     = NO_ARRAY,
833 		.tlv_type       = 0x02,
834 		.offset         = offsetof(struct wlfw_cap_resp_msg_v01,
835 					   resp),
836 		.ei_array      = qmi_response_type_v01_ei,
837 	},
838 	{
839 		.data_type      = QMI_OPT_FLAG,
840 		.elem_len       = 1,
841 		.elem_size      = sizeof(u8),
842 		.array_type     = NO_ARRAY,
843 		.tlv_type       = 0x10,
844 		.offset         = offsetof(struct wlfw_cap_resp_msg_v01,
845 					   chip_info_valid),
846 	},
847 	{
848 		.data_type      = QMI_STRUCT,
849 		.elem_len       = 1,
850 		.elem_size      = sizeof(struct wlfw_rf_chip_info_s_v01),
851 		.array_type     = NO_ARRAY,
852 		.tlv_type       = 0x10,
853 		.offset         = offsetof(struct wlfw_cap_resp_msg_v01,
854 					   chip_info),
855 		.ei_array      = wlfw_rf_chip_info_s_v01_ei,
856 	},
857 	{
858 		.data_type      = QMI_OPT_FLAG,
859 		.elem_len       = 1,
860 		.elem_size      = sizeof(u8),
861 		.array_type     = NO_ARRAY,
862 		.tlv_type       = 0x11,
863 		.offset         = offsetof(struct wlfw_cap_resp_msg_v01,
864 					   board_info_valid),
865 	},
866 	{
867 		.data_type      = QMI_STRUCT,
868 		.elem_len       = 1,
869 		.elem_size      = sizeof(struct wlfw_rf_board_info_s_v01),
870 		.array_type     = NO_ARRAY,
871 		.tlv_type       = 0x11,
872 		.offset         = offsetof(struct wlfw_cap_resp_msg_v01,
873 					   board_info),
874 		.ei_array      = wlfw_rf_board_info_s_v01_ei,
875 	},
876 	{
877 		.data_type      = QMI_OPT_FLAG,
878 		.elem_len       = 1,
879 		.elem_size      = sizeof(u8),
880 		.array_type     = NO_ARRAY,
881 		.tlv_type       = 0x12,
882 		.offset         = offsetof(struct wlfw_cap_resp_msg_v01,
883 					   soc_info_valid),
884 	},
885 	{
886 		.data_type      = QMI_STRUCT,
887 		.elem_len       = 1,
888 		.elem_size      = sizeof(struct wlfw_soc_info_s_v01),
889 		.array_type     = NO_ARRAY,
890 		.tlv_type       = 0x12,
891 		.offset         = offsetof(struct wlfw_cap_resp_msg_v01,
892 					   soc_info),
893 		.ei_array      = wlfw_soc_info_s_v01_ei,
894 	},
895 	{
896 		.data_type      = QMI_OPT_FLAG,
897 		.elem_len       = 1,
898 		.elem_size      = sizeof(u8),
899 		.array_type     = NO_ARRAY,
900 		.tlv_type       = 0x13,
901 		.offset         = offsetof(struct wlfw_cap_resp_msg_v01,
902 					   fw_version_info_valid),
903 	},
904 	{
905 		.data_type      = QMI_STRUCT,
906 		.elem_len       = 1,
907 		.elem_size      = sizeof(struct wlfw_fw_version_info_s_v01),
908 		.array_type     = NO_ARRAY,
909 		.tlv_type       = 0x13,
910 		.offset         = offsetof(struct wlfw_cap_resp_msg_v01,
911 					   fw_version_info),
912 		.ei_array      = wlfw_fw_version_info_s_v01_ei,
913 	},
914 	{
915 		.data_type      = QMI_OPT_FLAG,
916 		.elem_len       = 1,
917 		.elem_size      = sizeof(u8),
918 		.array_type     = NO_ARRAY,
919 		.tlv_type       = 0x14,
920 		.offset         = offsetof(struct wlfw_cap_resp_msg_v01,
921 					   fw_build_id_valid),
922 	},
923 	{
924 		.data_type      = QMI_STRING,
925 		.elem_len       = QMI_WLFW_MAX_BUILD_ID_LEN_V01 + 1,
926 		.elem_size      = sizeof(char),
927 		.array_type     = NO_ARRAY,
928 		.tlv_type       = 0x14,
929 		.offset         = offsetof(struct wlfw_cap_resp_msg_v01,
930 					   fw_build_id),
931 	},
932 	{
933 		.data_type      = QMI_OPT_FLAG,
934 		.elem_len       = 1,
935 		.elem_size      = sizeof(u8),
936 		.array_type     = NO_ARRAY,
937 		.tlv_type       = 0x15,
938 		.offset         = offsetof(struct wlfw_cap_resp_msg_v01,
939 					   num_macs_valid),
940 	},
941 	{
942 		.data_type      = QMI_UNSIGNED_1_BYTE,
943 		.elem_len       = 1,
944 		.elem_size      = sizeof(u8),
945 		.array_type     = NO_ARRAY,
946 		.tlv_type       = 0x15,
947 		.offset         = offsetof(struct wlfw_cap_resp_msg_v01,
948 					   num_macs),
949 	},
950 	{}
951 };
952 
953 const struct qmi_elem_info wlfw_bdf_download_req_msg_v01_ei[] = {
954 	{
955 		.data_type      = QMI_UNSIGNED_1_BYTE,
956 		.elem_len       = 1,
957 		.elem_size      = sizeof(u8),
958 		.array_type     = NO_ARRAY,
959 		.tlv_type       = 0x01,
960 		.offset         = offsetof(struct wlfw_bdf_download_req_msg_v01,
961 					   valid),
962 	},
963 	{
964 		.data_type      = QMI_OPT_FLAG,
965 		.elem_len       = 1,
966 		.elem_size      = sizeof(u8),
967 		.array_type     = NO_ARRAY,
968 		.tlv_type       = 0x10,
969 		.offset         = offsetof(struct wlfw_bdf_download_req_msg_v01,
970 					   file_id_valid),
971 	},
972 	{
973 		.data_type      = QMI_SIGNED_4_BYTE_ENUM,
974 		.elem_len       = 1,
975 		.elem_size      = sizeof(enum wlfw_cal_temp_id_enum_v01),
976 		.array_type     = NO_ARRAY,
977 		.tlv_type       = 0x10,
978 		.offset         = offsetof(struct wlfw_bdf_download_req_msg_v01,
979 					   file_id),
980 	},
981 	{
982 		.data_type      = QMI_OPT_FLAG,
983 		.elem_len       = 1,
984 		.elem_size      = sizeof(u8),
985 		.array_type     = NO_ARRAY,
986 		.tlv_type       = 0x11,
987 		.offset         = offsetof(struct wlfw_bdf_download_req_msg_v01,
988 					   total_size_valid),
989 	},
990 	{
991 		.data_type      = QMI_UNSIGNED_4_BYTE,
992 		.elem_len       = 1,
993 		.elem_size      = sizeof(u32),
994 		.array_type     = NO_ARRAY,
995 		.tlv_type       = 0x11,
996 		.offset         = offsetof(struct wlfw_bdf_download_req_msg_v01,
997 					   total_size),
998 	},
999 	{
1000 		.data_type      = QMI_OPT_FLAG,
1001 		.elem_len       = 1,
1002 		.elem_size      = sizeof(u8),
1003 		.array_type     = NO_ARRAY,
1004 		.tlv_type       = 0x12,
1005 		.offset         = offsetof(struct wlfw_bdf_download_req_msg_v01,
1006 					   seg_id_valid),
1007 	},
1008 	{
1009 		.data_type      = QMI_UNSIGNED_4_BYTE,
1010 		.elem_len       = 1,
1011 		.elem_size      = sizeof(u32),
1012 		.array_type     = NO_ARRAY,
1013 		.tlv_type       = 0x12,
1014 		.offset         = offsetof(struct wlfw_bdf_download_req_msg_v01,
1015 					   seg_id),
1016 	},
1017 	{
1018 		.data_type      = QMI_OPT_FLAG,
1019 		.elem_len       = 1,
1020 		.elem_size      = sizeof(u8),
1021 		.array_type     = NO_ARRAY,
1022 		.tlv_type       = 0x13,
1023 		.offset         = offsetof(struct wlfw_bdf_download_req_msg_v01,
1024 					   data_valid),
1025 	},
1026 	{
1027 		.data_type      = QMI_DATA_LEN,
1028 		.elem_len       = 1,
1029 		.elem_size      = sizeof(u16),
1030 		.array_type     = NO_ARRAY,
1031 		.tlv_type       = 0x13,
1032 		.offset         = offsetof(struct wlfw_bdf_download_req_msg_v01,
1033 					   data_len),
1034 	},
1035 	{
1036 		.data_type      = QMI_UNSIGNED_1_BYTE,
1037 		.elem_len       = QMI_WLFW_MAX_DATA_SIZE_V01,
1038 		.elem_size      = sizeof(u8),
1039 		.array_type       = VAR_LEN_ARRAY,
1040 		.tlv_type       = 0x13,
1041 		.offset         = offsetof(struct wlfw_bdf_download_req_msg_v01,
1042 					   data),
1043 	},
1044 	{
1045 		.data_type      = QMI_OPT_FLAG,
1046 		.elem_len       = 1,
1047 		.elem_size      = sizeof(u8),
1048 		.array_type     = NO_ARRAY,
1049 		.tlv_type       = 0x14,
1050 		.offset         = offsetof(struct wlfw_bdf_download_req_msg_v01,
1051 					   end_valid),
1052 	},
1053 	{
1054 		.data_type      = QMI_UNSIGNED_1_BYTE,
1055 		.elem_len       = 1,
1056 		.elem_size      = sizeof(u8),
1057 		.array_type     = NO_ARRAY,
1058 		.tlv_type       = 0x14,
1059 		.offset         = offsetof(struct wlfw_bdf_download_req_msg_v01,
1060 					   end),
1061 	},
1062 	{
1063 		.data_type      = QMI_OPT_FLAG,
1064 		.elem_len       = 1,
1065 		.elem_size      = sizeof(u8),
1066 		.array_type     = NO_ARRAY,
1067 		.tlv_type       = 0x15,
1068 		.offset         = offsetof(struct wlfw_bdf_download_req_msg_v01,
1069 					   bdf_type_valid),
1070 	},
1071 	{
1072 		.data_type      = QMI_UNSIGNED_1_BYTE,
1073 		.elem_len       = 1,
1074 		.elem_size      = sizeof(u8),
1075 		.array_type     = NO_ARRAY,
1076 		.tlv_type       = 0x15,
1077 		.offset         = offsetof(struct wlfw_bdf_download_req_msg_v01,
1078 					   bdf_type),
1079 	},
1080 	{}
1081 };
1082 
1083 const struct qmi_elem_info wlfw_bdf_download_resp_msg_v01_ei[] = {
1084 	{
1085 		.data_type      = QMI_STRUCT,
1086 		.elem_len       = 1,
1087 		.elem_size      = sizeof(struct qmi_response_type_v01),
1088 		.array_type     = NO_ARRAY,
1089 		.tlv_type       = 0x02,
1090 		.offset         = offsetof(struct wlfw_bdf_download_resp_msg_v01,
1091 					   resp),
1092 		.ei_array      = qmi_response_type_v01_ei,
1093 	},
1094 	{}
1095 };
1096 
1097 const struct qmi_elem_info wlfw_cal_report_req_msg_v01_ei[] = {
1098 	{
1099 		.data_type      = QMI_DATA_LEN,
1100 		.elem_len       = 1,
1101 		.elem_size      = sizeof(u8),
1102 		.array_type     = NO_ARRAY,
1103 		.tlv_type       = 0x01,
1104 		.offset         = offsetof(struct wlfw_cal_report_req_msg_v01,
1105 					   meta_data_len),
1106 	},
1107 	{
1108 		.data_type      = QMI_SIGNED_4_BYTE_ENUM,
1109 		.elem_len       = QMI_WLFW_MAX_NUM_CAL_V01,
1110 		.elem_size      = sizeof(enum wlfw_cal_temp_id_enum_v01),
1111 		.array_type       = VAR_LEN_ARRAY,
1112 		.tlv_type       = 0x01,
1113 		.offset         = offsetof(struct wlfw_cal_report_req_msg_v01,
1114 					   meta_data),
1115 	},
1116 	{
1117 		.data_type      = QMI_OPT_FLAG,
1118 		.elem_len       = 1,
1119 		.elem_size      = sizeof(u8),
1120 		.array_type     = NO_ARRAY,
1121 		.tlv_type       = 0x10,
1122 		.offset         = offsetof(struct wlfw_cal_report_req_msg_v01,
1123 					   xo_cal_data_valid),
1124 	},
1125 	{
1126 		.data_type      = QMI_UNSIGNED_1_BYTE,
1127 		.elem_len       = 1,
1128 		.elem_size      = sizeof(u8),
1129 		.array_type     = NO_ARRAY,
1130 		.tlv_type       = 0x10,
1131 		.offset         = offsetof(struct wlfw_cal_report_req_msg_v01,
1132 					   xo_cal_data),
1133 	},
1134 	{}
1135 };
1136 
1137 const struct qmi_elem_info wlfw_cal_report_resp_msg_v01_ei[] = {
1138 	{
1139 		.data_type      = QMI_STRUCT,
1140 		.elem_len       = 1,
1141 		.elem_size      = sizeof(struct qmi_response_type_v01),
1142 		.array_type     = NO_ARRAY,
1143 		.tlv_type       = 0x02,
1144 		.offset         = offsetof(struct wlfw_cal_report_resp_msg_v01,
1145 					   resp),
1146 		.ei_array      = qmi_response_type_v01_ei,
1147 	},
1148 	{}
1149 };
1150 
1151 const struct qmi_elem_info wlfw_initiate_cal_download_ind_msg_v01_ei[] = {
1152 	{
1153 		.data_type      = QMI_SIGNED_4_BYTE_ENUM,
1154 		.elem_len       = 1,
1155 		.elem_size      = sizeof(enum wlfw_cal_temp_id_enum_v01),
1156 		.array_type     = NO_ARRAY,
1157 		.tlv_type       = 0x01,
1158 		.offset         = offsetof(struct wlfw_initiate_cal_download_ind_msg_v01,
1159 					   cal_id),
1160 	},
1161 	{}
1162 };
1163 
1164 const struct qmi_elem_info wlfw_cal_download_req_msg_v01_ei[] = {
1165 	{
1166 		.data_type      = QMI_UNSIGNED_1_BYTE,
1167 		.elem_len       = 1,
1168 		.elem_size      = sizeof(u8),
1169 		.array_type     = NO_ARRAY,
1170 		.tlv_type       = 0x01,
1171 		.offset         = offsetof(struct wlfw_cal_download_req_msg_v01,
1172 					   valid),
1173 	},
1174 	{
1175 		.data_type      = QMI_OPT_FLAG,
1176 		.elem_len       = 1,
1177 		.elem_size      = sizeof(u8),
1178 		.array_type     = NO_ARRAY,
1179 		.tlv_type       = 0x10,
1180 		.offset         = offsetof(struct wlfw_cal_download_req_msg_v01,
1181 					   file_id_valid),
1182 	},
1183 	{
1184 		.data_type      = QMI_SIGNED_4_BYTE_ENUM,
1185 		.elem_len       = 1,
1186 		.elem_size      = sizeof(enum wlfw_cal_temp_id_enum_v01),
1187 		.array_type     = NO_ARRAY,
1188 		.tlv_type       = 0x10,
1189 		.offset         = offsetof(struct wlfw_cal_download_req_msg_v01,
1190 					   file_id),
1191 	},
1192 	{
1193 		.data_type      = QMI_OPT_FLAG,
1194 		.elem_len       = 1,
1195 		.elem_size      = sizeof(u8),
1196 		.array_type     = NO_ARRAY,
1197 		.tlv_type       = 0x11,
1198 		.offset         = offsetof(struct wlfw_cal_download_req_msg_v01,
1199 					   total_size_valid),
1200 	},
1201 	{
1202 		.data_type      = QMI_UNSIGNED_4_BYTE,
1203 		.elem_len       = 1,
1204 		.elem_size      = sizeof(u32),
1205 		.array_type     = NO_ARRAY,
1206 		.tlv_type       = 0x11,
1207 		.offset         = offsetof(struct wlfw_cal_download_req_msg_v01,
1208 					   total_size),
1209 	},
1210 	{
1211 		.data_type      = QMI_OPT_FLAG,
1212 		.elem_len       = 1,
1213 		.elem_size      = sizeof(u8),
1214 		.array_type     = NO_ARRAY,
1215 		.tlv_type       = 0x12,
1216 		.offset         = offsetof(struct wlfw_cal_download_req_msg_v01,
1217 					   seg_id_valid),
1218 	},
1219 	{
1220 		.data_type      = QMI_UNSIGNED_4_BYTE,
1221 		.elem_len       = 1,
1222 		.elem_size      = sizeof(u32),
1223 		.array_type     = NO_ARRAY,
1224 		.tlv_type       = 0x12,
1225 		.offset         = offsetof(struct wlfw_cal_download_req_msg_v01,
1226 					   seg_id),
1227 	},
1228 	{
1229 		.data_type      = QMI_OPT_FLAG,
1230 		.elem_len       = 1,
1231 		.elem_size      = sizeof(u8),
1232 		.array_type     = NO_ARRAY,
1233 		.tlv_type       = 0x13,
1234 		.offset         = offsetof(struct wlfw_cal_download_req_msg_v01,
1235 					   data_valid),
1236 	},
1237 	{
1238 		.data_type      = QMI_DATA_LEN,
1239 		.elem_len       = 1,
1240 		.elem_size      = sizeof(u16),
1241 		.array_type     = NO_ARRAY,
1242 		.tlv_type       = 0x13,
1243 		.offset         = offsetof(struct wlfw_cal_download_req_msg_v01,
1244 					   data_len),
1245 	},
1246 	{
1247 		.data_type      = QMI_UNSIGNED_1_BYTE,
1248 		.elem_len       = QMI_WLFW_MAX_DATA_SIZE_V01,
1249 		.elem_size      = sizeof(u8),
1250 		.array_type       = VAR_LEN_ARRAY,
1251 		.tlv_type       = 0x13,
1252 		.offset         = offsetof(struct wlfw_cal_download_req_msg_v01,
1253 					   data),
1254 	},
1255 	{
1256 		.data_type      = QMI_OPT_FLAG,
1257 		.elem_len       = 1,
1258 		.elem_size      = sizeof(u8),
1259 		.array_type     = NO_ARRAY,
1260 		.tlv_type       = 0x14,
1261 		.offset         = offsetof(struct wlfw_cal_download_req_msg_v01,
1262 					   end_valid),
1263 	},
1264 	{
1265 		.data_type      = QMI_UNSIGNED_1_BYTE,
1266 		.elem_len       = 1,
1267 		.elem_size      = sizeof(u8),
1268 		.array_type     = NO_ARRAY,
1269 		.tlv_type       = 0x14,
1270 		.offset         = offsetof(struct wlfw_cal_download_req_msg_v01,
1271 					   end),
1272 	},
1273 	{}
1274 };
1275 
1276 const struct qmi_elem_info wlfw_cal_download_resp_msg_v01_ei[] = {
1277 	{
1278 		.data_type      = QMI_STRUCT,
1279 		.elem_len       = 1,
1280 		.elem_size      = sizeof(struct qmi_response_type_v01),
1281 		.array_type     = NO_ARRAY,
1282 		.tlv_type       = 0x02,
1283 		.offset         = offsetof(struct wlfw_cal_download_resp_msg_v01,
1284 					   resp),
1285 		.ei_array      = qmi_response_type_v01_ei,
1286 	},
1287 	{}
1288 };
1289 
1290 const struct qmi_elem_info wlfw_initiate_cal_update_ind_msg_v01_ei[] = {
1291 	{
1292 		.data_type      = QMI_SIGNED_4_BYTE_ENUM,
1293 		.elem_len       = 1,
1294 		.elem_size      = sizeof(enum wlfw_cal_temp_id_enum_v01),
1295 		.array_type     = NO_ARRAY,
1296 		.tlv_type       = 0x01,
1297 		.offset         = offsetof(struct wlfw_initiate_cal_update_ind_msg_v01,
1298 					   cal_id),
1299 	},
1300 	{
1301 		.data_type      = QMI_UNSIGNED_4_BYTE,
1302 		.elem_len       = 1,
1303 		.elem_size      = sizeof(u32),
1304 		.array_type     = NO_ARRAY,
1305 		.tlv_type       = 0x02,
1306 		.offset         = offsetof(struct wlfw_initiate_cal_update_ind_msg_v01,
1307 					   total_size),
1308 	},
1309 	{}
1310 };
1311 
1312 const struct qmi_elem_info wlfw_cal_update_req_msg_v01_ei[] = {
1313 	{
1314 		.data_type      = QMI_SIGNED_4_BYTE_ENUM,
1315 		.elem_len       = 1,
1316 		.elem_size      = sizeof(enum wlfw_cal_temp_id_enum_v01),
1317 		.array_type     = NO_ARRAY,
1318 		.tlv_type       = 0x01,
1319 		.offset         = offsetof(struct wlfw_cal_update_req_msg_v01,
1320 					   cal_id),
1321 	},
1322 	{
1323 		.data_type      = QMI_UNSIGNED_4_BYTE,
1324 		.elem_len       = 1,
1325 		.elem_size      = sizeof(u32),
1326 		.array_type     = NO_ARRAY,
1327 		.tlv_type       = 0x02,
1328 		.offset         = offsetof(struct wlfw_cal_update_req_msg_v01,
1329 					   seg_id),
1330 	},
1331 	{}
1332 };
1333 
1334 const struct qmi_elem_info wlfw_cal_update_resp_msg_v01_ei[] = {
1335 	{
1336 		.data_type      = QMI_STRUCT,
1337 		.elem_len       = 1,
1338 		.elem_size      = sizeof(struct qmi_response_type_v01),
1339 		.array_type     = NO_ARRAY,
1340 		.tlv_type       = 0x02,
1341 		.offset         = offsetof(struct wlfw_cal_update_resp_msg_v01,
1342 					   resp),
1343 		.ei_array      = qmi_response_type_v01_ei,
1344 	},
1345 	{
1346 		.data_type      = QMI_OPT_FLAG,
1347 		.elem_len       = 1,
1348 		.elem_size      = sizeof(u8),
1349 		.array_type     = NO_ARRAY,
1350 		.tlv_type       = 0x10,
1351 		.offset         = offsetof(struct wlfw_cal_update_resp_msg_v01,
1352 					   file_id_valid),
1353 	},
1354 	{
1355 		.data_type      = QMI_SIGNED_4_BYTE_ENUM,
1356 		.elem_len       = 1,
1357 		.elem_size      = sizeof(enum wlfw_cal_temp_id_enum_v01),
1358 		.array_type     = NO_ARRAY,
1359 		.tlv_type       = 0x10,
1360 		.offset         = offsetof(struct wlfw_cal_update_resp_msg_v01,
1361 					   file_id),
1362 	},
1363 	{
1364 		.data_type      = QMI_OPT_FLAG,
1365 		.elem_len       = 1,
1366 		.elem_size      = sizeof(u8),
1367 		.array_type     = NO_ARRAY,
1368 		.tlv_type       = 0x11,
1369 		.offset         = offsetof(struct wlfw_cal_update_resp_msg_v01,
1370 					   total_size_valid),
1371 	},
1372 	{
1373 		.data_type      = QMI_UNSIGNED_4_BYTE,
1374 		.elem_len       = 1,
1375 		.elem_size      = sizeof(u32),
1376 		.array_type     = NO_ARRAY,
1377 		.tlv_type       = 0x11,
1378 		.offset         = offsetof(struct wlfw_cal_update_resp_msg_v01,
1379 					   total_size),
1380 	},
1381 	{
1382 		.data_type      = QMI_OPT_FLAG,
1383 		.elem_len       = 1,
1384 		.elem_size      = sizeof(u8),
1385 		.array_type     = NO_ARRAY,
1386 		.tlv_type       = 0x12,
1387 		.offset         = offsetof(struct wlfw_cal_update_resp_msg_v01,
1388 					   seg_id_valid),
1389 	},
1390 	{
1391 		.data_type      = QMI_UNSIGNED_4_BYTE,
1392 		.elem_len       = 1,
1393 		.elem_size      = sizeof(u32),
1394 		.array_type     = NO_ARRAY,
1395 		.tlv_type       = 0x12,
1396 		.offset         = offsetof(struct wlfw_cal_update_resp_msg_v01,
1397 					   seg_id),
1398 	},
1399 	{
1400 		.data_type      = QMI_OPT_FLAG,
1401 		.elem_len       = 1,
1402 		.elem_size      = sizeof(u8),
1403 		.array_type     = NO_ARRAY,
1404 		.tlv_type       = 0x13,
1405 		.offset         = offsetof(struct wlfw_cal_update_resp_msg_v01,
1406 					   data_valid),
1407 	},
1408 	{
1409 		.data_type      = QMI_DATA_LEN,
1410 		.elem_len       = 1,
1411 		.elem_size      = sizeof(u16),
1412 		.array_type     = NO_ARRAY,
1413 		.tlv_type       = 0x13,
1414 		.offset         = offsetof(struct wlfw_cal_update_resp_msg_v01,
1415 					   data_len),
1416 	},
1417 	{
1418 		.data_type      = QMI_UNSIGNED_1_BYTE,
1419 		.elem_len       = QMI_WLFW_MAX_DATA_SIZE_V01,
1420 		.elem_size      = sizeof(u8),
1421 		.array_type       = VAR_LEN_ARRAY,
1422 		.tlv_type       = 0x13,
1423 		.offset         = offsetof(struct wlfw_cal_update_resp_msg_v01,
1424 					   data),
1425 	},
1426 	{
1427 		.data_type      = QMI_OPT_FLAG,
1428 		.elem_len       = 1,
1429 		.elem_size      = sizeof(u8),
1430 		.array_type     = NO_ARRAY,
1431 		.tlv_type       = 0x14,
1432 		.offset         = offsetof(struct wlfw_cal_update_resp_msg_v01,
1433 					   end_valid),
1434 	},
1435 	{
1436 		.data_type      = QMI_UNSIGNED_1_BYTE,
1437 		.elem_len       = 1,
1438 		.elem_size      = sizeof(u8),
1439 		.array_type     = NO_ARRAY,
1440 		.tlv_type       = 0x14,
1441 		.offset         = offsetof(struct wlfw_cal_update_resp_msg_v01,
1442 					   end),
1443 	},
1444 	{}
1445 };
1446 
1447 const struct qmi_elem_info wlfw_msa_info_req_msg_v01_ei[] = {
1448 	{
1449 		.data_type      = QMI_UNSIGNED_8_BYTE,
1450 		.elem_len       = 1,
1451 		.elem_size      = sizeof(u64),
1452 		.array_type     = NO_ARRAY,
1453 		.tlv_type       = 0x01,
1454 		.offset         = offsetof(struct wlfw_msa_info_req_msg_v01,
1455 					   msa_addr),
1456 	},
1457 	{
1458 		.data_type      = QMI_UNSIGNED_4_BYTE,
1459 		.elem_len       = 1,
1460 		.elem_size      = sizeof(u32),
1461 		.array_type     = NO_ARRAY,
1462 		.tlv_type       = 0x02,
1463 		.offset         = offsetof(struct wlfw_msa_info_req_msg_v01,
1464 					   size),
1465 	},
1466 	{}
1467 };
1468 
1469 const struct qmi_elem_info wlfw_msa_info_resp_msg_v01_ei[] = {
1470 	{
1471 		.data_type      = QMI_STRUCT,
1472 		.elem_len       = 1,
1473 		.elem_size      = sizeof(struct qmi_response_type_v01),
1474 		.array_type     = NO_ARRAY,
1475 		.tlv_type       = 0x02,
1476 		.offset         = offsetof(struct wlfw_msa_info_resp_msg_v01,
1477 					   resp),
1478 		.ei_array      = qmi_response_type_v01_ei,
1479 	},
1480 	{
1481 		.data_type      = QMI_DATA_LEN,
1482 		.elem_len       = 1,
1483 		.elem_size      = sizeof(u8),
1484 		.array_type     = NO_ARRAY,
1485 		.tlv_type       = 0x03,
1486 		.offset         = offsetof(struct wlfw_msa_info_resp_msg_v01,
1487 					   mem_region_info_len),
1488 	},
1489 	{
1490 		.data_type      = QMI_STRUCT,
1491 		.elem_len       = QMI_WLFW_MAX_MEM_REG_V01,
1492 		.elem_size      = sizeof(struct wlfw_memory_region_info_s_v01),
1493 		.array_type       = VAR_LEN_ARRAY,
1494 		.tlv_type       = 0x03,
1495 		.offset         = offsetof(struct wlfw_msa_info_resp_msg_v01,
1496 					   mem_region_info),
1497 		.ei_array      = wlfw_memory_region_info_s_v01_ei,
1498 	},
1499 	{}
1500 };
1501 
1502 const struct qmi_elem_info wlfw_msa_ready_req_msg_v01_ei[] = {
1503 	{}
1504 };
1505 
1506 const struct qmi_elem_info wlfw_msa_ready_resp_msg_v01_ei[] = {
1507 	{
1508 		.data_type      = QMI_STRUCT,
1509 		.elem_len       = 1,
1510 		.elem_size      = sizeof(struct qmi_response_type_v01),
1511 		.array_type     = NO_ARRAY,
1512 		.tlv_type       = 0x02,
1513 		.offset         = offsetof(struct wlfw_msa_ready_resp_msg_v01,
1514 					   resp),
1515 		.ei_array      = qmi_response_type_v01_ei,
1516 	},
1517 	{}
1518 };
1519 
1520 const struct qmi_elem_info wlfw_ini_req_msg_v01_ei[] = {
1521 	{
1522 		.data_type      = QMI_OPT_FLAG,
1523 		.elem_len       = 1,
1524 		.elem_size      = sizeof(u8),
1525 		.array_type     = NO_ARRAY,
1526 		.tlv_type       = 0x10,
1527 		.offset         = offsetof(struct wlfw_ini_req_msg_v01,
1528 					   enablefwlog_valid),
1529 	},
1530 	{
1531 		.data_type      = QMI_UNSIGNED_1_BYTE,
1532 		.elem_len       = 1,
1533 		.elem_size      = sizeof(u8),
1534 		.array_type     = NO_ARRAY,
1535 		.tlv_type       = 0x10,
1536 		.offset         = offsetof(struct wlfw_ini_req_msg_v01,
1537 					   enablefwlog),
1538 	},
1539 	{}
1540 };
1541 
1542 const struct qmi_elem_info wlfw_ini_resp_msg_v01_ei[] = {
1543 	{
1544 		.data_type      = QMI_STRUCT,
1545 		.elem_len       = 1,
1546 		.elem_size      = sizeof(struct qmi_response_type_v01),
1547 		.array_type     = NO_ARRAY,
1548 		.tlv_type       = 0x02,
1549 		.offset         = offsetof(struct wlfw_ini_resp_msg_v01,
1550 					   resp),
1551 		.ei_array      = qmi_response_type_v01_ei,
1552 	},
1553 	{}
1554 };
1555 
1556 const struct qmi_elem_info wlfw_athdiag_read_req_msg_v01_ei[] = {
1557 	{
1558 		.data_type      = QMI_UNSIGNED_4_BYTE,
1559 		.elem_len       = 1,
1560 		.elem_size      = sizeof(u32),
1561 		.array_type     = NO_ARRAY,
1562 		.tlv_type       = 0x01,
1563 		.offset         = offsetof(struct wlfw_athdiag_read_req_msg_v01,
1564 					   offset),
1565 	},
1566 	{
1567 		.data_type      = QMI_UNSIGNED_4_BYTE,
1568 		.elem_len       = 1,
1569 		.elem_size      = sizeof(u32),
1570 		.array_type     = NO_ARRAY,
1571 		.tlv_type       = 0x02,
1572 		.offset         = offsetof(struct wlfw_athdiag_read_req_msg_v01,
1573 					   mem_type),
1574 	},
1575 	{
1576 		.data_type      = QMI_UNSIGNED_4_BYTE,
1577 		.elem_len       = 1,
1578 		.elem_size      = sizeof(u32),
1579 		.array_type     = NO_ARRAY,
1580 		.tlv_type       = 0x03,
1581 		.offset         = offsetof(struct wlfw_athdiag_read_req_msg_v01,
1582 					   data_len),
1583 	},
1584 	{}
1585 };
1586 
1587 const struct qmi_elem_info wlfw_athdiag_read_resp_msg_v01_ei[] = {
1588 	{
1589 		.data_type      = QMI_STRUCT,
1590 		.elem_len       = 1,
1591 		.elem_size      = sizeof(struct qmi_response_type_v01),
1592 		.array_type     = NO_ARRAY,
1593 		.tlv_type       = 0x02,
1594 		.offset         = offsetof(struct wlfw_athdiag_read_resp_msg_v01,
1595 					   resp),
1596 		.ei_array      = qmi_response_type_v01_ei,
1597 	},
1598 	{
1599 		.data_type      = QMI_OPT_FLAG,
1600 		.elem_len       = 1,
1601 		.elem_size      = sizeof(u8),
1602 		.array_type     = NO_ARRAY,
1603 		.tlv_type       = 0x10,
1604 		.offset         = offsetof(struct wlfw_athdiag_read_resp_msg_v01,
1605 					   data_valid),
1606 	},
1607 	{
1608 		.data_type      = QMI_DATA_LEN,
1609 		.elem_len       = 1,
1610 		.elem_size      = sizeof(u16),
1611 		.array_type     = NO_ARRAY,
1612 		.tlv_type       = 0x10,
1613 		.offset         = offsetof(struct wlfw_athdiag_read_resp_msg_v01,
1614 					   data_len),
1615 	},
1616 	{
1617 		.data_type      = QMI_UNSIGNED_1_BYTE,
1618 		.elem_len       = QMI_WLFW_MAX_ATHDIAG_DATA_SIZE_V01,
1619 		.elem_size      = sizeof(u8),
1620 		.array_type       = VAR_LEN_ARRAY,
1621 		.tlv_type       = 0x10,
1622 		.offset         = offsetof(struct wlfw_athdiag_read_resp_msg_v01,
1623 					   data),
1624 	},
1625 	{}
1626 };
1627 
1628 const struct qmi_elem_info wlfw_athdiag_write_req_msg_v01_ei[] = {
1629 	{
1630 		.data_type      = QMI_UNSIGNED_4_BYTE,
1631 		.elem_len       = 1,
1632 		.elem_size      = sizeof(u32),
1633 		.array_type     = NO_ARRAY,
1634 		.tlv_type       = 0x01,
1635 		.offset         = offsetof(struct wlfw_athdiag_write_req_msg_v01,
1636 					   offset),
1637 	},
1638 	{
1639 		.data_type      = QMI_UNSIGNED_4_BYTE,
1640 		.elem_len       = 1,
1641 		.elem_size      = sizeof(u32),
1642 		.array_type     = NO_ARRAY,
1643 		.tlv_type       = 0x02,
1644 		.offset         = offsetof(struct wlfw_athdiag_write_req_msg_v01,
1645 					   mem_type),
1646 	},
1647 	{
1648 		.data_type      = QMI_DATA_LEN,
1649 		.elem_len       = 1,
1650 		.elem_size      = sizeof(u16),
1651 		.array_type     = NO_ARRAY,
1652 		.tlv_type       = 0x03,
1653 		.offset         = offsetof(struct wlfw_athdiag_write_req_msg_v01,
1654 					   data_len),
1655 	},
1656 	{
1657 		.data_type      = QMI_UNSIGNED_1_BYTE,
1658 		.elem_len       = QMI_WLFW_MAX_ATHDIAG_DATA_SIZE_V01,
1659 		.elem_size      = sizeof(u8),
1660 		.array_type       = VAR_LEN_ARRAY,
1661 		.tlv_type       = 0x03,
1662 		.offset         = offsetof(struct wlfw_athdiag_write_req_msg_v01,
1663 					   data),
1664 	},
1665 	{}
1666 };
1667 
1668 const struct qmi_elem_info wlfw_athdiag_write_resp_msg_v01_ei[] = {
1669 	{
1670 		.data_type      = QMI_STRUCT,
1671 		.elem_len       = 1,
1672 		.elem_size      = sizeof(struct qmi_response_type_v01),
1673 		.array_type     = NO_ARRAY,
1674 		.tlv_type       = 0x02,
1675 		.offset         = offsetof(struct wlfw_athdiag_write_resp_msg_v01,
1676 					   resp),
1677 		.ei_array      = qmi_response_type_v01_ei,
1678 	},
1679 	{}
1680 };
1681 
1682 const struct qmi_elem_info wlfw_vbatt_req_msg_v01_ei[] = {
1683 	{
1684 		.data_type      = QMI_UNSIGNED_8_BYTE,
1685 		.elem_len       = 1,
1686 		.elem_size      = sizeof(u64),
1687 		.array_type     = NO_ARRAY,
1688 		.tlv_type       = 0x01,
1689 		.offset         = offsetof(struct wlfw_vbatt_req_msg_v01,
1690 					   voltage_uv),
1691 	},
1692 	{}
1693 };
1694 
1695 const struct qmi_elem_info wlfw_vbatt_resp_msg_v01_ei[] = {
1696 	{
1697 		.data_type      = QMI_STRUCT,
1698 		.elem_len       = 1,
1699 		.elem_size      = sizeof(struct qmi_response_type_v01),
1700 		.array_type     = NO_ARRAY,
1701 		.tlv_type       = 0x02,
1702 		.offset         = offsetof(struct wlfw_vbatt_resp_msg_v01,
1703 					   resp),
1704 		.ei_array      = qmi_response_type_v01_ei,
1705 	},
1706 	{}
1707 };
1708 
1709 const struct qmi_elem_info wlfw_mac_addr_req_msg_v01_ei[] = {
1710 	{
1711 		.data_type      = QMI_OPT_FLAG,
1712 		.elem_len       = 1,
1713 		.elem_size      = sizeof(u8),
1714 		.array_type     = NO_ARRAY,
1715 		.tlv_type       = 0x10,
1716 		.offset         = offsetof(struct wlfw_mac_addr_req_msg_v01,
1717 					   mac_addr_valid),
1718 	},
1719 	{
1720 		.data_type      = QMI_UNSIGNED_1_BYTE,
1721 		.elem_len       = QMI_WLFW_MAC_ADDR_SIZE_V01,
1722 		.elem_size      = sizeof(u8),
1723 		.array_type       = STATIC_ARRAY,
1724 		.tlv_type       = 0x10,
1725 		.offset         = offsetof(struct wlfw_mac_addr_req_msg_v01,
1726 					   mac_addr),
1727 	},
1728 	{}
1729 };
1730 
1731 const struct qmi_elem_info wlfw_mac_addr_resp_msg_v01_ei[] = {
1732 	{
1733 		.data_type      = QMI_STRUCT,
1734 		.elem_len       = 1,
1735 		.elem_size      = sizeof(struct qmi_response_type_v01),
1736 		.array_type     = NO_ARRAY,
1737 		.tlv_type       = 0x02,
1738 		.offset         = offsetof(struct wlfw_mac_addr_resp_msg_v01,
1739 					   resp),
1740 		.ei_array      = qmi_response_type_v01_ei,
1741 	},
1742 	{}
1743 };
1744 
1745 const struct qmi_elem_info wlfw_host_cap_req_msg_v01_ei[] = {
1746 	{
1747 		.data_type      = QMI_OPT_FLAG,
1748 		.elem_len       = 1,
1749 		.elem_size      = sizeof(u8),
1750 		.array_type     = NO_ARRAY,
1751 		.tlv_type       = 0x10,
1752 		.offset         = offsetof(struct wlfw_host_cap_req_msg_v01,
1753 					   daemon_support_valid),
1754 	},
1755 	{
1756 		.data_type      = QMI_UNSIGNED_4_BYTE,
1757 		.elem_len       = 1,
1758 		.elem_size      = sizeof(u32),
1759 		.array_type     = NO_ARRAY,
1760 		.tlv_type       = 0x10,
1761 		.offset         = offsetof(struct wlfw_host_cap_req_msg_v01,
1762 					   daemon_support),
1763 	},
1764 	{
1765 		.data_type      = QMI_OPT_FLAG,
1766 		.elem_len       = 1,
1767 		.elem_size      = sizeof(u8),
1768 		.array_type     = NO_ARRAY,
1769 		.tlv_type       = 0x11,
1770 		.offset         = offsetof(struct wlfw_host_cap_req_msg_v01,
1771 					   wake_msi_valid),
1772 	},
1773 	{
1774 		.data_type      = QMI_UNSIGNED_4_BYTE,
1775 		.elem_len       = 1,
1776 		.elem_size      = sizeof(u32),
1777 		.array_type     = NO_ARRAY,
1778 		.tlv_type       = 0x11,
1779 		.offset         = offsetof(struct wlfw_host_cap_req_msg_v01,
1780 					   wake_msi),
1781 	},
1782 	{
1783 		.data_type      = QMI_OPT_FLAG,
1784 		.elem_len       = 1,
1785 		.elem_size      = sizeof(u8),
1786 		.array_type     = NO_ARRAY,
1787 		.tlv_type       = 0x12,
1788 		.offset         = offsetof(struct wlfw_host_cap_req_msg_v01,
1789 					   gpios_valid),
1790 	},
1791 	{
1792 		.data_type      = QMI_DATA_LEN,
1793 		.elem_len       = 1,
1794 		.elem_size      = sizeof(u32),
1795 		.array_type     = NO_ARRAY,
1796 		.tlv_type       = 0x12,
1797 		.offset         = offsetof(struct wlfw_host_cap_req_msg_v01,
1798 					   gpios_len),
1799 	},
1800 	{
1801 		.data_type      = QMI_UNSIGNED_4_BYTE,
1802 		.elem_len       = QMI_WLFW_MAX_NUM_GPIO_V01,
1803 		.elem_size      = sizeof(u32),
1804 		.array_type     = VAR_LEN_ARRAY,
1805 		.tlv_type       = 0x12,
1806 		.offset         = offsetof(struct wlfw_host_cap_req_msg_v01,
1807 					   gpios),
1808 	},
1809 	{
1810 		.data_type      = QMI_OPT_FLAG,
1811 		.elem_len       = 1,
1812 		.elem_size      = sizeof(u8),
1813 		.array_type     = NO_ARRAY,
1814 		.tlv_type       = 0x13,
1815 		.offset         = offsetof(struct wlfw_host_cap_req_msg_v01,
1816 					   nm_modem_valid),
1817 	},
1818 	{
1819 		.data_type      = QMI_UNSIGNED_1_BYTE,
1820 		.elem_len       = 1,
1821 		.elem_size      = sizeof(u8),
1822 		.array_type     = NO_ARRAY,
1823 		.tlv_type       = 0x13,
1824 		.offset         = offsetof(struct wlfw_host_cap_req_msg_v01,
1825 					   nm_modem),
1826 	},
1827 	{
1828 		.data_type      = QMI_OPT_FLAG,
1829 		.elem_len       = 1,
1830 		.elem_size      = sizeof(u8),
1831 		.array_type     = NO_ARRAY,
1832 		.tlv_type       = 0x14,
1833 		.offset         = offsetof(struct wlfw_host_cap_req_msg_v01,
1834 					   bdf_support_valid),
1835 	},
1836 	{
1837 		.data_type      = QMI_UNSIGNED_1_BYTE,
1838 		.elem_len       = 1,
1839 		.elem_size      = sizeof(u8),
1840 		.array_type     = NO_ARRAY,
1841 		.tlv_type       = 0x14,
1842 		.offset         = offsetof(struct wlfw_host_cap_req_msg_v01,
1843 					   bdf_support),
1844 	},
1845 	{
1846 		.data_type      = QMI_OPT_FLAG,
1847 		.elem_len       = 1,
1848 		.elem_size      = sizeof(u8),
1849 		.array_type     = NO_ARRAY,
1850 		.tlv_type       = 0x15,
1851 		.offset         = offsetof(struct wlfw_host_cap_req_msg_v01,
1852 					   bdf_cache_support_valid),
1853 	},
1854 	{
1855 		.data_type      = QMI_UNSIGNED_1_BYTE,
1856 		.elem_len       = 1,
1857 		.elem_size      = sizeof(u8),
1858 		.array_type     = NO_ARRAY,
1859 		.tlv_type       = 0x15,
1860 		.offset         = offsetof(struct wlfw_host_cap_req_msg_v01,
1861 					   bdf_cache_support),
1862 	},
1863 	{
1864 		.data_type      = QMI_OPT_FLAG,
1865 		.elem_len       = 1,
1866 		.elem_size      = sizeof(u8),
1867 		.array_type     = NO_ARRAY,
1868 		.tlv_type       = 0x16,
1869 		.offset         = offsetof(struct wlfw_host_cap_req_msg_v01,
1870 					   m3_support_valid),
1871 	},
1872 	{
1873 		.data_type      = QMI_UNSIGNED_1_BYTE,
1874 		.elem_len       = 1,
1875 		.elem_size      = sizeof(u8),
1876 		.array_type     = NO_ARRAY,
1877 		.tlv_type       = 0x16,
1878 		.offset         = offsetof(struct wlfw_host_cap_req_msg_v01,
1879 					   m3_support),
1880 	},
1881 	{
1882 		.data_type      = QMI_OPT_FLAG,
1883 		.elem_len       = 1,
1884 		.elem_size      = sizeof(u8),
1885 		.array_type     = NO_ARRAY,
1886 		.tlv_type       = 0x17,
1887 		.offset         = offsetof(struct wlfw_host_cap_req_msg_v01,
1888 					   m3_cache_support_valid),
1889 	},
1890 	{
1891 		.data_type      = QMI_UNSIGNED_1_BYTE,
1892 		.elem_len       = 1,
1893 		.elem_size      = sizeof(u8),
1894 		.array_type     = NO_ARRAY,
1895 		.tlv_type       = 0x17,
1896 		.offset         = offsetof(struct wlfw_host_cap_req_msg_v01,
1897 					   m3_cache_support),
1898 	},
1899 	{
1900 		.data_type      = QMI_OPT_FLAG,
1901 		.elem_len       = 1,
1902 		.elem_size      = sizeof(u8),
1903 		.array_type     = NO_ARRAY,
1904 		.tlv_type       = 0x18,
1905 		.offset         = offsetof(struct wlfw_host_cap_req_msg_v01,
1906 					   cal_filesys_support_valid),
1907 	},
1908 	{
1909 		.data_type      = QMI_UNSIGNED_1_BYTE,
1910 		.elem_len       = 1,
1911 		.elem_size      = sizeof(u8),
1912 		.array_type     = NO_ARRAY,
1913 		.tlv_type       = 0x18,
1914 		.offset         = offsetof(struct wlfw_host_cap_req_msg_v01,
1915 					   cal_filesys_support),
1916 	},
1917 	{
1918 		.data_type      = QMI_OPT_FLAG,
1919 		.elem_len       = 1,
1920 		.elem_size      = sizeof(u8),
1921 		.array_type     = NO_ARRAY,
1922 		.tlv_type       = 0x19,
1923 		.offset         = offsetof(struct wlfw_host_cap_req_msg_v01,
1924 					   cal_cache_support_valid),
1925 	},
1926 	{
1927 		.data_type      = QMI_UNSIGNED_1_BYTE,
1928 		.elem_len       = 1,
1929 		.elem_size      = sizeof(u8),
1930 		.array_type     = NO_ARRAY,
1931 		.tlv_type       = 0x19,
1932 		.offset         = offsetof(struct wlfw_host_cap_req_msg_v01,
1933 					   cal_cache_support),
1934 	},
1935 	{
1936 		.data_type      = QMI_OPT_FLAG,
1937 		.elem_len       = 1,
1938 		.elem_size      = sizeof(u8),
1939 		.array_type     = NO_ARRAY,
1940 		.tlv_type       = 0x1A,
1941 		.offset         = offsetof(struct wlfw_host_cap_req_msg_v01,
1942 					   cal_done_valid),
1943 	},
1944 	{
1945 		.data_type      = QMI_UNSIGNED_1_BYTE,
1946 		.elem_len       = 1,
1947 		.elem_size      = sizeof(u8),
1948 		.array_type     = NO_ARRAY,
1949 		.tlv_type       = 0x1A,
1950 		.offset         = offsetof(struct wlfw_host_cap_req_msg_v01,
1951 					   cal_done),
1952 	},
1953 	{
1954 		.data_type      = QMI_OPT_FLAG,
1955 		.elem_len       = 1,
1956 		.elem_size      = sizeof(u8),
1957 		.array_type     = NO_ARRAY,
1958 		.tlv_type       = 0x1B,
1959 		.offset         = offsetof(struct wlfw_host_cap_req_msg_v01,
1960 					   mem_bucket_valid),
1961 	},
1962 	{
1963 		.data_type      = QMI_UNSIGNED_4_BYTE,
1964 		.elem_len       = 1,
1965 		.elem_size      = sizeof(u32),
1966 		.array_type     = NO_ARRAY,
1967 		.tlv_type       = 0x1B,
1968 		.offset         = offsetof(struct wlfw_host_cap_req_msg_v01,
1969 					   mem_bucket),
1970 	},
1971 	{
1972 		.data_type      = QMI_OPT_FLAG,
1973 		.elem_len       = 1,
1974 		.elem_size      = sizeof(u8),
1975 		.array_type     = NO_ARRAY,
1976 		.tlv_type       = 0x1C,
1977 		.offset         = offsetof(struct wlfw_host_cap_req_msg_v01,
1978 					   mem_cfg_mode_valid),
1979 	},
1980 	{
1981 		.data_type      = QMI_UNSIGNED_1_BYTE,
1982 		.elem_len       = 1,
1983 		.elem_size      = sizeof(u8),
1984 		.array_type     = NO_ARRAY,
1985 		.tlv_type       = 0x1C,
1986 		.offset         = offsetof(struct wlfw_host_cap_req_msg_v01,
1987 					   mem_cfg_mode),
1988 	},
1989 	{}
1990 };
1991 
1992 const struct qmi_elem_info wlfw_host_cap_8bit_req_msg_v01_ei[] = {
1993 	{
1994 		.data_type      = QMI_OPT_FLAG,
1995 		.elem_len       = 1,
1996 		.elem_size      = sizeof(u8),
1997 		.array_type     = NO_ARRAY,
1998 		.tlv_type       = 0x10,
1999 		.offset         = offsetof(struct wlfw_host_cap_req_msg_v01,
2000 					   daemon_support_valid),
2001 	},
2002 	{
2003 		.data_type      = QMI_UNSIGNED_1_BYTE,
2004 		.elem_len       = 1,
2005 		.elem_size      = sizeof(u8),
2006 		.array_type     = NO_ARRAY,
2007 		.tlv_type       = 0x10,
2008 		.offset         = offsetof(struct wlfw_host_cap_req_msg_v01,
2009 					   daemon_support),
2010 	},
2011 	{}
2012 };
2013 
2014 const struct qmi_elem_info wlfw_host_cap_resp_msg_v01_ei[] = {
2015 	{
2016 		.data_type      = QMI_STRUCT,
2017 		.elem_len       = 1,
2018 		.elem_size      = sizeof(struct qmi_response_type_v01),
2019 		.array_type     = NO_ARRAY,
2020 		.tlv_type       = 0x02,
2021 		.offset         = offsetof(struct wlfw_host_cap_resp_msg_v01,
2022 					   resp),
2023 		.ei_array      = qmi_response_type_v01_ei,
2024 	},
2025 	{}
2026 };
2027 
2028 const struct qmi_elem_info wlfw_request_mem_ind_msg_v01_ei[] = {
2029 	{
2030 		.data_type      = QMI_DATA_LEN,
2031 		.elem_len       = 1,
2032 		.elem_size      = sizeof(u8),
2033 		.array_type     = NO_ARRAY,
2034 		.tlv_type       = 0x01,
2035 		.offset         = offsetof(struct wlfw_request_mem_ind_msg_v01,
2036 					   mem_seg_len),
2037 	},
2038 	{
2039 		.data_type      = QMI_STRUCT,
2040 		.elem_len       = QMI_WLFW_MAX_NUM_MEM_SEG_V01,
2041 		.elem_size      = sizeof(struct wlfw_mem_seg_s_v01),
2042 		.array_type       = VAR_LEN_ARRAY,
2043 		.tlv_type       = 0x01,
2044 		.offset         = offsetof(struct wlfw_request_mem_ind_msg_v01,
2045 					   mem_seg),
2046 		.ei_array      = wlfw_mem_seg_s_v01_ei,
2047 	},
2048 	{}
2049 };
2050 
2051 const struct qmi_elem_info wlfw_respond_mem_req_msg_v01_ei[] = {
2052 	{
2053 		.data_type      = QMI_DATA_LEN,
2054 		.elem_len       = 1,
2055 		.elem_size      = sizeof(u8),
2056 		.array_type     = NO_ARRAY,
2057 		.tlv_type       = 0x01,
2058 		.offset         = offsetof(struct wlfw_respond_mem_req_msg_v01,
2059 					   mem_seg_len),
2060 	},
2061 	{
2062 		.data_type      = QMI_STRUCT,
2063 		.elem_len       = QMI_WLFW_MAX_NUM_MEM_SEG_V01,
2064 		.elem_size      = sizeof(struct wlfw_mem_seg_resp_s_v01),
2065 		.array_type       = VAR_LEN_ARRAY,
2066 		.tlv_type       = 0x01,
2067 		.offset         = offsetof(struct wlfw_respond_mem_req_msg_v01,
2068 					   mem_seg),
2069 		.ei_array      = wlfw_mem_seg_resp_s_v01_ei,
2070 	},
2071 	{}
2072 };
2073 
2074 const struct qmi_elem_info wlfw_respond_mem_resp_msg_v01_ei[] = {
2075 	{
2076 		.data_type      = QMI_STRUCT,
2077 		.elem_len       = 1,
2078 		.elem_size      = sizeof(struct qmi_response_type_v01),
2079 		.array_type     = NO_ARRAY,
2080 		.tlv_type       = 0x02,
2081 		.offset         = offsetof(struct wlfw_respond_mem_resp_msg_v01,
2082 					   resp),
2083 		.ei_array      = qmi_response_type_v01_ei,
2084 	},
2085 	{}
2086 };
2087 
2088 const struct qmi_elem_info wlfw_mem_ready_ind_msg_v01_ei[] = {
2089 	{}
2090 };
2091 
2092 const struct qmi_elem_info wlfw_fw_init_done_ind_msg_v01_ei[] = {
2093 	{}
2094 };
2095 
2096 const struct qmi_elem_info wlfw_rejuvenate_ind_msg_v01_ei[] = {
2097 	{
2098 		.data_type      = QMI_OPT_FLAG,
2099 		.elem_len       = 1,
2100 		.elem_size      = sizeof(u8),
2101 		.array_type     = NO_ARRAY,
2102 		.tlv_type       = 0x10,
2103 		.offset         = offsetof(struct wlfw_rejuvenate_ind_msg_v01,
2104 					   cause_for_rejuvenation_valid),
2105 	},
2106 	{
2107 		.data_type      = QMI_UNSIGNED_1_BYTE,
2108 		.elem_len       = 1,
2109 		.elem_size      = sizeof(u8),
2110 		.array_type     = NO_ARRAY,
2111 		.tlv_type       = 0x10,
2112 		.offset         = offsetof(struct wlfw_rejuvenate_ind_msg_v01,
2113 					   cause_for_rejuvenation),
2114 	},
2115 	{
2116 		.data_type      = QMI_OPT_FLAG,
2117 		.elem_len       = 1,
2118 		.elem_size      = sizeof(u8),
2119 		.array_type     = NO_ARRAY,
2120 		.tlv_type       = 0x11,
2121 		.offset         = offsetof(struct wlfw_rejuvenate_ind_msg_v01,
2122 					   requesting_sub_system_valid),
2123 	},
2124 	{
2125 		.data_type      = QMI_UNSIGNED_1_BYTE,
2126 		.elem_len       = 1,
2127 		.elem_size      = sizeof(u8),
2128 		.array_type     = NO_ARRAY,
2129 		.tlv_type       = 0x11,
2130 		.offset         = offsetof(struct wlfw_rejuvenate_ind_msg_v01,
2131 					   requesting_sub_system),
2132 	},
2133 	{
2134 		.data_type      = QMI_OPT_FLAG,
2135 		.elem_len       = 1,
2136 		.elem_size      = sizeof(u8),
2137 		.array_type     = NO_ARRAY,
2138 		.tlv_type       = 0x12,
2139 		.offset         = offsetof(struct wlfw_rejuvenate_ind_msg_v01,
2140 					   line_number_valid),
2141 	},
2142 	{
2143 		.data_type      = QMI_UNSIGNED_2_BYTE,
2144 		.elem_len       = 1,
2145 		.elem_size      = sizeof(u16),
2146 		.array_type     = NO_ARRAY,
2147 		.tlv_type       = 0x12,
2148 		.offset         = offsetof(struct wlfw_rejuvenate_ind_msg_v01,
2149 					   line_number),
2150 	},
2151 	{
2152 		.data_type      = QMI_OPT_FLAG,
2153 		.elem_len       = 1,
2154 		.elem_size      = sizeof(u8),
2155 		.array_type     = NO_ARRAY,
2156 		.tlv_type       = 0x13,
2157 		.offset         = offsetof(struct wlfw_rejuvenate_ind_msg_v01,
2158 					   function_name_valid),
2159 	},
2160 	{
2161 		.data_type      = QMI_STRING,
2162 		.elem_len       = QMI_WLFW_FUNCTION_NAME_LEN_V01 + 1,
2163 		.elem_size      = sizeof(char),
2164 		.array_type     = NO_ARRAY,
2165 		.tlv_type       = 0x13,
2166 		.offset         = offsetof(struct wlfw_rejuvenate_ind_msg_v01,
2167 					   function_name),
2168 	},
2169 	{}
2170 };
2171 
2172 const struct qmi_elem_info wlfw_rejuvenate_ack_req_msg_v01_ei[] = {
2173 	{}
2174 };
2175 
2176 const struct qmi_elem_info wlfw_rejuvenate_ack_resp_msg_v01_ei[] = {
2177 	{
2178 		.data_type      = QMI_STRUCT,
2179 		.elem_len       = 1,
2180 		.elem_size      = sizeof(struct qmi_response_type_v01),
2181 		.array_type     = NO_ARRAY,
2182 		.tlv_type       = 0x02,
2183 		.offset         = offsetof(struct wlfw_rejuvenate_ack_resp_msg_v01,
2184 					   resp),
2185 		.ei_array      = qmi_response_type_v01_ei,
2186 	},
2187 	{}
2188 };
2189 
2190 const struct qmi_elem_info wlfw_dynamic_feature_mask_req_msg_v01_ei[] = {
2191 	{
2192 		.data_type      = QMI_OPT_FLAG,
2193 		.elem_len       = 1,
2194 		.elem_size      = sizeof(u8),
2195 		.array_type     = NO_ARRAY,
2196 		.tlv_type       = 0x10,
2197 		.offset         = offsetof(struct wlfw_dynamic_feature_mask_req_msg_v01,
2198 					   mask_valid),
2199 	},
2200 	{
2201 		.data_type      = QMI_UNSIGNED_8_BYTE,
2202 		.elem_len       = 1,
2203 		.elem_size      = sizeof(u64),
2204 		.array_type     = NO_ARRAY,
2205 		.tlv_type       = 0x10,
2206 		.offset         = offsetof(struct wlfw_dynamic_feature_mask_req_msg_v01,
2207 					   mask),
2208 	},
2209 	{}
2210 };
2211 
2212 const struct qmi_elem_info wlfw_dynamic_feature_mask_resp_msg_v01_ei[] = {
2213 	{
2214 		.data_type      = QMI_STRUCT,
2215 		.elem_len       = 1,
2216 		.elem_size      = sizeof(struct qmi_response_type_v01),
2217 		.array_type     = NO_ARRAY,
2218 		.tlv_type       = 0x02,
2219 		.offset         = offsetof(struct wlfw_dynamic_feature_mask_resp_msg_v01,
2220 					   resp),
2221 		.ei_array      = qmi_response_type_v01_ei,
2222 	},
2223 	{
2224 		.data_type      = QMI_OPT_FLAG,
2225 		.elem_len       = 1,
2226 		.elem_size      = sizeof(u8),
2227 		.array_type     = NO_ARRAY,
2228 		.tlv_type       = 0x10,
2229 		.offset         = offsetof(struct wlfw_dynamic_feature_mask_resp_msg_v01,
2230 					   prev_mask_valid),
2231 	},
2232 	{
2233 		.data_type      = QMI_UNSIGNED_8_BYTE,
2234 		.elem_len       = 1,
2235 		.elem_size      = sizeof(u64),
2236 		.array_type     = NO_ARRAY,
2237 		.tlv_type       = 0x10,
2238 		.offset         = offsetof(struct wlfw_dynamic_feature_mask_resp_msg_v01,
2239 					   prev_mask),
2240 	},
2241 	{
2242 		.data_type      = QMI_OPT_FLAG,
2243 		.elem_len       = 1,
2244 		.elem_size      = sizeof(u8),
2245 		.array_type     = NO_ARRAY,
2246 		.tlv_type       = 0x11,
2247 		.offset         = offsetof(struct wlfw_dynamic_feature_mask_resp_msg_v01,
2248 					   curr_mask_valid),
2249 	},
2250 	{
2251 		.data_type      = QMI_UNSIGNED_8_BYTE,
2252 		.elem_len       = 1,
2253 		.elem_size      = sizeof(u64),
2254 		.array_type     = NO_ARRAY,
2255 		.tlv_type       = 0x11,
2256 		.offset         = offsetof(struct wlfw_dynamic_feature_mask_resp_msg_v01,
2257 					   curr_mask),
2258 	},
2259 	{}
2260 };
2261 
2262 const struct qmi_elem_info wlfw_m3_info_req_msg_v01_ei[] = {
2263 	{
2264 		.data_type      = QMI_UNSIGNED_8_BYTE,
2265 		.elem_len       = 1,
2266 		.elem_size      = sizeof(u64),
2267 		.array_type     = NO_ARRAY,
2268 		.tlv_type       = 0x01,
2269 		.offset         = offsetof(struct wlfw_m3_info_req_msg_v01,
2270 					   addr),
2271 	},
2272 	{
2273 		.data_type      = QMI_UNSIGNED_4_BYTE,
2274 		.elem_len       = 1,
2275 		.elem_size      = sizeof(u32),
2276 		.array_type     = NO_ARRAY,
2277 		.tlv_type       = 0x02,
2278 		.offset         = offsetof(struct wlfw_m3_info_req_msg_v01,
2279 					   size),
2280 	},
2281 	{}
2282 };
2283 
2284 const struct qmi_elem_info wlfw_m3_info_resp_msg_v01_ei[] = {
2285 	{
2286 		.data_type      = QMI_STRUCT,
2287 		.elem_len       = 1,
2288 		.elem_size      = sizeof(struct qmi_response_type_v01),
2289 		.array_type     = NO_ARRAY,
2290 		.tlv_type       = 0x02,
2291 		.offset         = offsetof(struct wlfw_m3_info_resp_msg_v01,
2292 					   resp),
2293 		.ei_array      = qmi_response_type_v01_ei,
2294 	},
2295 	{}
2296 };
2297 
2298 const struct qmi_elem_info wlfw_xo_cal_ind_msg_v01_ei[] = {
2299 	{
2300 		.data_type      = QMI_UNSIGNED_1_BYTE,
2301 		.elem_len       = 1,
2302 		.elem_size      = sizeof(u8),
2303 		.array_type     = NO_ARRAY,
2304 		.tlv_type       = 0x01,
2305 		.offset         = offsetof(struct wlfw_xo_cal_ind_msg_v01,
2306 					   xo_cal_data),
2307 	},
2308 	{}
2309 };
2310