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