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