Merge tag 'asm-generic-fixes-5.15' of git://git.kernel.org/pub/scm/linux/kernel/git...
[sfrench/cifs-2.6.git] / drivers / net / wireless / ath / ath10k / qmi_wlfw_v01.c
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 };