xref: /linux/drivers/net/ipa/ipa_qmi_msg.c (revision 249ebf3f65f8530beb2cbfb91bff1d83ba88d23c)
1 // SPDX-License-Identifier: GPL-2.0
2 
3 /* Copyright (c) 2018, The Linux Foundation. All rights reserved.
4  * Copyright (C) 2018-2024 Linaro Ltd.
5  */
6 #include <linux/stddef.h>
7 
8 #include <linux/soc/qcom/qmi.h>
9 
10 #include "ipa_qmi_msg.h"
11 
12 /* QMI message structure definition for struct ipa_indication_register_req */
13 const struct qmi_elem_info ipa_indication_register_req_ei[] = {
14 	{
15 		.data_type	= QMI_OPT_FLAG,
16 		.elem_len	= 1,
17 		.elem_size	=
18 			sizeof_field(struct ipa_indication_register_req,
19 				     master_driver_init_complete_valid),
20 		.tlv_type	= 0x10,
21 		.offset		= offsetof(struct ipa_indication_register_req,
22 					   master_driver_init_complete_valid),
23 	},
24 	{
25 		.data_type	= QMI_UNSIGNED_1_BYTE,
26 		.elem_len	= 1,
27 		.elem_size	=
28 			sizeof_field(struct ipa_indication_register_req,
29 				     master_driver_init_complete),
30 		.tlv_type	= 0x10,
31 		.offset		= offsetof(struct ipa_indication_register_req,
32 					   master_driver_init_complete),
33 	},
34 	{
35 		.data_type	= QMI_OPT_FLAG,
36 		.elem_len	= 1,
37 		.elem_size	=
38 			sizeof_field(struct ipa_indication_register_req,
39 				     data_usage_quota_reached_valid),
40 		.tlv_type	= 0x11,
41 		.offset		= offsetof(struct ipa_indication_register_req,
42 					   data_usage_quota_reached_valid),
43 	},
44 	{
45 		.data_type	= QMI_UNSIGNED_1_BYTE,
46 		.elem_len	= 1,
47 		.elem_size	=
48 			sizeof_field(struct ipa_indication_register_req,
49 				     data_usage_quota_reached),
50 		.tlv_type	= 0x11,
51 		.offset		= offsetof(struct ipa_indication_register_req,
52 					   data_usage_quota_reached),
53 	},
54 	{
55 		.data_type	= QMI_OPT_FLAG,
56 		.elem_len	= 1,
57 		.elem_size	=
58 			sizeof_field(struct ipa_indication_register_req,
59 				     ipa_mhi_ready_ind_valid),
60 		.tlv_type	= 0x12,
61 		.offset		= offsetof(struct ipa_indication_register_req,
62 					   ipa_mhi_ready_ind_valid),
63 	},
64 	{
65 		.data_type	= QMI_UNSIGNED_1_BYTE,
66 		.elem_len	= 1,
67 		.elem_size	=
68 			sizeof_field(struct ipa_indication_register_req,
69 				     ipa_mhi_ready_ind),
70 		.tlv_type	= 0x12,
71 		.offset		= offsetof(struct ipa_indication_register_req,
72 					   ipa_mhi_ready_ind),
73 	},
74 	{
75 		.data_type	= QMI_OPT_FLAG,
76 		.elem_len	= 1,
77 		.elem_size	=
78 			sizeof_field(struct ipa_indication_register_req,
79 				     endpoint_desc_ind_valid),
80 		.tlv_type	= 0x13,
81 		.offset		= offsetof(struct ipa_indication_register_req,
82 					   endpoint_desc_ind_valid),
83 	},
84 	{
85 		.data_type	= QMI_UNSIGNED_1_BYTE,
86 		.elem_len	= 1,
87 		.elem_size	=
88 			sizeof_field(struct ipa_indication_register_req,
89 				     endpoint_desc_ind),
90 		.tlv_type	= 0x13,
91 		.offset		= offsetof(struct ipa_indication_register_req,
92 					   endpoint_desc_ind),
93 	},
94 	{
95 		.data_type	= QMI_OPT_FLAG,
96 		.elem_len	= 1,
97 		.elem_size	=
98 			sizeof_field(struct ipa_indication_register_req,
99 				     bw_change_ind_valid),
100 		.tlv_type	= 0x14,
101 		.offset		= offsetof(struct ipa_indication_register_req,
102 					   bw_change_ind_valid),
103 	},
104 	{
105 		.data_type	= QMI_UNSIGNED_1_BYTE,
106 		.elem_len	= 1,
107 		.elem_size	=
108 			sizeof_field(struct ipa_indication_register_req,
109 				     bw_change_ind),
110 		.tlv_type	= 0x14,
111 		.offset		= offsetof(struct ipa_indication_register_req,
112 					   bw_change_ind),
113 	},
114 	{
115 		.data_type	= QMI_EOTI,
116 	},
117 };
118 
119 /* QMI message structure definition for struct ipa_indication_register_rsp */
120 const struct qmi_elem_info ipa_indication_register_rsp_ei[] = {
121 	{
122 		.data_type	= QMI_STRUCT,
123 		.elem_len	= 1,
124 		.elem_size	=
125 			sizeof_field(struct ipa_indication_register_rsp,
126 				     rsp),
127 		.tlv_type	= 0x02,
128 		.offset		= offsetof(struct ipa_indication_register_rsp,
129 					   rsp),
130 		.ei_array	= qmi_response_type_v01_ei,
131 	},
132 	{
133 		.data_type	= QMI_EOTI,
134 	},
135 };
136 
137 /* QMI message structure definition for struct ipa_driver_init_complete_req */
138 const struct qmi_elem_info ipa_driver_init_complete_req_ei[] = {
139 	{
140 		.data_type	= QMI_UNSIGNED_1_BYTE,
141 		.elem_len	= 1,
142 		.elem_size	=
143 			sizeof_field(struct ipa_driver_init_complete_req,
144 				     status),
145 		.tlv_type	= 0x01,
146 		.offset		= offsetof(struct ipa_driver_init_complete_req,
147 					   status),
148 	},
149 	{
150 		.data_type	= QMI_EOTI,
151 	},
152 };
153 
154 /* QMI message structure definition for struct ipa_driver_init_complete_rsp */
155 const struct qmi_elem_info ipa_driver_init_complete_rsp_ei[] = {
156 	{
157 		.data_type	= QMI_STRUCT,
158 		.elem_len	= 1,
159 		.elem_size	=
160 			sizeof_field(struct ipa_driver_init_complete_rsp,
161 				     rsp),
162 		.tlv_type	= 0x02,
163 		.offset		= offsetof(struct ipa_driver_init_complete_rsp,
164 					   rsp),
165 		.ei_array	= qmi_response_type_v01_ei,
166 	},
167 	{
168 		.data_type	= QMI_EOTI,
169 	},
170 };
171 
172 /* QMI message structure definition for struct ipa_init_complete_ind */
173 const struct qmi_elem_info ipa_init_complete_ind_ei[] = {
174 	{
175 		.data_type	= QMI_STRUCT,
176 		.elem_len	= 1,
177 		.elem_size	=
178 			sizeof_field(struct ipa_init_complete_ind,
179 				     status),
180 		.tlv_type	= 0x02,
181 		.offset		= offsetof(struct ipa_init_complete_ind,
182 					   status),
183 		.ei_array	= qmi_response_type_v01_ei,
184 	},
185 	{
186 		.data_type	= QMI_EOTI,
187 	},
188 };
189 
190 /* QMI message structure definition for struct ipa_mem_bounds */
191 const struct qmi_elem_info ipa_mem_bounds_ei[] = {
192 	{
193 		.data_type	= QMI_UNSIGNED_4_BYTE,
194 		.elem_len	= 1,
195 		.elem_size	=
196 			sizeof_field(struct ipa_mem_bounds, start),
197 		.offset		= offsetof(struct ipa_mem_bounds, start),
198 	},
199 	{
200 		.data_type	= QMI_UNSIGNED_4_BYTE,
201 		.elem_len	= 1,
202 		.elem_size	=
203 			sizeof_field(struct ipa_mem_bounds, end),
204 		.offset		= offsetof(struct ipa_mem_bounds, end),
205 	},
206 	{
207 		.data_type	= QMI_EOTI,
208 	},
209 };
210 
211 /* QMI message structure definition for struct ipa_mem_array */
212 const struct qmi_elem_info ipa_mem_array_ei[] = {
213 	{
214 		.data_type	= QMI_UNSIGNED_4_BYTE,
215 		.elem_len	= 1,
216 		.elem_size	=
217 			sizeof_field(struct ipa_mem_array, start),
218 		.offset		= offsetof(struct ipa_mem_array, start),
219 	},
220 	{
221 		.data_type	= QMI_UNSIGNED_4_BYTE,
222 		.elem_len	= 1,
223 		.elem_size	=
224 			sizeof_field(struct ipa_mem_array, count),
225 		.offset		= offsetof(struct ipa_mem_array, count),
226 	},
227 	{
228 		.data_type	= QMI_EOTI,
229 	},
230 };
231 
232 /* QMI message structure definition for struct ipa_mem_range */
233 const struct qmi_elem_info ipa_mem_range_ei[] = {
234 	{
235 		.data_type	= QMI_UNSIGNED_4_BYTE,
236 		.elem_len	= 1,
237 		.elem_size	=
238 			sizeof_field(struct ipa_mem_range, start),
239 		.offset		= offsetof(struct ipa_mem_range, start),
240 	},
241 	{
242 		.data_type	= QMI_UNSIGNED_4_BYTE,
243 		.elem_len	= 1,
244 		.elem_size	=
245 			sizeof_field(struct ipa_mem_range, size),
246 		.offset		= offsetof(struct ipa_mem_range, size),
247 	},
248 	{
249 		.data_type	= QMI_EOTI,
250 	},
251 };
252 
253 /* QMI message structure definition for struct ipa_init_modem_driver_req */
254 const struct qmi_elem_info ipa_init_modem_driver_req_ei[] = {
255 	{
256 		.data_type	= QMI_OPT_FLAG,
257 		.elem_len	= 1,
258 		.elem_size	=
259 			sizeof_field(struct ipa_init_modem_driver_req,
260 				     platform_type_valid),
261 		.tlv_type	= 0x10,
262 		.offset		= offsetof(struct ipa_init_modem_driver_req,
263 					   platform_type_valid),
264 	},
265 	{
266 		.data_type	= QMI_SIGNED_4_BYTE_ENUM,
267 		.elem_len	= 1,
268 		.elem_size	=
269 			sizeof_field(struct ipa_init_modem_driver_req,
270 				     platform_type),
271 		.tlv_type	= 0x10,
272 		.offset		= offsetof(struct ipa_init_modem_driver_req,
273 					   platform_type),
274 	},
275 	{
276 		.data_type	= QMI_OPT_FLAG,
277 		.elem_len	= 1,
278 		.elem_size	=
279 			sizeof_field(struct ipa_init_modem_driver_req,
280 				     hdr_tbl_info_valid),
281 		.tlv_type	= 0x11,
282 		.offset		= offsetof(struct ipa_init_modem_driver_req,
283 					   hdr_tbl_info_valid),
284 	},
285 	{
286 		.data_type	= QMI_STRUCT,
287 		.elem_len	= 1,
288 		.elem_size	=
289 			sizeof_field(struct ipa_init_modem_driver_req,
290 				     hdr_tbl_info),
291 		.tlv_type	= 0x11,
292 		.offset		= offsetof(struct ipa_init_modem_driver_req,
293 					   hdr_tbl_info),
294 		.ei_array	= ipa_mem_bounds_ei,
295 	},
296 	{
297 		.data_type	= QMI_OPT_FLAG,
298 		.elem_len	= 1,
299 		.elem_size	=
300 			sizeof_field(struct ipa_init_modem_driver_req,
301 				     v4_route_tbl_info_valid),
302 		.tlv_type	= 0x12,
303 		.offset		= offsetof(struct ipa_init_modem_driver_req,
304 					   v4_route_tbl_info_valid),
305 	},
306 	{
307 		.data_type	= QMI_STRUCT,
308 		.elem_len	= 1,
309 		.elem_size	=
310 			sizeof_field(struct ipa_init_modem_driver_req,
311 				     v4_route_tbl_info),
312 		.tlv_type	= 0x12,
313 		.offset		= offsetof(struct ipa_init_modem_driver_req,
314 					   v4_route_tbl_info),
315 		.ei_array	= ipa_mem_bounds_ei,
316 	},
317 	{
318 		.data_type	= QMI_OPT_FLAG,
319 		.elem_len	= 1,
320 		.elem_size	=
321 			sizeof_field(struct ipa_init_modem_driver_req,
322 				     v6_route_tbl_info_valid),
323 		.tlv_type	= 0x13,
324 		.offset		= offsetof(struct ipa_init_modem_driver_req,
325 					   v6_route_tbl_info_valid),
326 	},
327 	{
328 		.data_type	= QMI_STRUCT,
329 		.elem_len	= 1,
330 		.elem_size	=
331 			sizeof_field(struct ipa_init_modem_driver_req,
332 				     v6_route_tbl_info),
333 		.tlv_type	= 0x13,
334 		.offset		= offsetof(struct ipa_init_modem_driver_req,
335 					   v6_route_tbl_info),
336 		.ei_array	= ipa_mem_bounds_ei,
337 	},
338 	{
339 		.data_type	= QMI_OPT_FLAG,
340 		.elem_len	= 1,
341 		.elem_size	=
342 			sizeof_field(struct ipa_init_modem_driver_req,
343 				     v4_filter_tbl_start_valid),
344 		.tlv_type	= 0x14,
345 		.offset		= offsetof(struct ipa_init_modem_driver_req,
346 					   v4_filter_tbl_start_valid),
347 	},
348 	{
349 		.data_type	= QMI_UNSIGNED_4_BYTE,
350 		.elem_len	= 1,
351 		.elem_size	=
352 			sizeof_field(struct ipa_init_modem_driver_req,
353 				     v4_filter_tbl_start),
354 		.tlv_type	= 0x14,
355 		.offset		= offsetof(struct ipa_init_modem_driver_req,
356 					   v4_filter_tbl_start),
357 	},
358 	{
359 		.data_type	= QMI_OPT_FLAG,
360 		.elem_len	= 1,
361 		.elem_size	=
362 			sizeof_field(struct ipa_init_modem_driver_req,
363 				     v6_filter_tbl_start_valid),
364 		.tlv_type	= 0x15,
365 		.offset		= offsetof(struct ipa_init_modem_driver_req,
366 					   v6_filter_tbl_start_valid),
367 	},
368 	{
369 		.data_type	= QMI_UNSIGNED_4_BYTE,
370 		.elem_len	= 1,
371 		.elem_size	=
372 			sizeof_field(struct ipa_init_modem_driver_req,
373 				     v6_filter_tbl_start),
374 		.tlv_type	= 0x15,
375 		.offset		= offsetof(struct ipa_init_modem_driver_req,
376 					   v6_filter_tbl_start),
377 	},
378 	{
379 		.data_type	= QMI_OPT_FLAG,
380 		.elem_len	= 1,
381 		.elem_size	=
382 			sizeof_field(struct ipa_init_modem_driver_req,
383 				     modem_mem_info_valid),
384 		.tlv_type	= 0x16,
385 		.offset		= offsetof(struct ipa_init_modem_driver_req,
386 					   modem_mem_info_valid),
387 	},
388 	{
389 		.data_type	= QMI_STRUCT,
390 		.elem_len	= 1,
391 		.elem_size	=
392 			sizeof_field(struct ipa_init_modem_driver_req,
393 				     modem_mem_info),
394 		.tlv_type	= 0x16,
395 		.offset		= offsetof(struct ipa_init_modem_driver_req,
396 					   modem_mem_info),
397 		.ei_array	= ipa_mem_range_ei,
398 	},
399 	{
400 		.data_type	= QMI_OPT_FLAG,
401 		.elem_len	= 1,
402 		.elem_size	=
403 			sizeof_field(struct ipa_init_modem_driver_req,
404 				     ctrl_comm_dest_end_pt_valid),
405 		.tlv_type	= 0x17,
406 		.offset		= offsetof(struct ipa_init_modem_driver_req,
407 					   ctrl_comm_dest_end_pt_valid),
408 	},
409 	{
410 		.data_type	= QMI_UNSIGNED_4_BYTE,
411 		.elem_len	= 1,
412 		.elem_size	=
413 			sizeof_field(struct ipa_init_modem_driver_req,
414 				     ctrl_comm_dest_end_pt),
415 		.tlv_type	= 0x17,
416 		.offset		= offsetof(struct ipa_init_modem_driver_req,
417 					   ctrl_comm_dest_end_pt),
418 	},
419 	{
420 		.data_type	= QMI_OPT_FLAG,
421 		.elem_len	= 1,
422 		.elem_size	=
423 			sizeof_field(struct ipa_init_modem_driver_req,
424 				     skip_uc_load_valid),
425 		.tlv_type	= 0x18,
426 		.offset		= offsetof(struct ipa_init_modem_driver_req,
427 					   skip_uc_load_valid),
428 	},
429 	{
430 		.data_type	= QMI_UNSIGNED_1_BYTE,
431 		.elem_len	= 1,
432 		.elem_size	=
433 			sizeof_field(struct ipa_init_modem_driver_req,
434 				     skip_uc_load),
435 		.tlv_type	= 0x18,
436 		.offset		= offsetof(struct ipa_init_modem_driver_req,
437 					   skip_uc_load),
438 	},
439 	{
440 		.data_type	= QMI_OPT_FLAG,
441 		.elem_len	= 1,
442 		.elem_size	=
443 			sizeof_field(struct ipa_init_modem_driver_req,
444 				     hdr_proc_ctx_tbl_info_valid),
445 		.tlv_type	= 0x19,
446 		.offset		= offsetof(struct ipa_init_modem_driver_req,
447 					   hdr_proc_ctx_tbl_info_valid),
448 	},
449 	{
450 		.data_type	= QMI_STRUCT,
451 		.elem_len	= 1,
452 		.elem_size	=
453 			sizeof_field(struct ipa_init_modem_driver_req,
454 				     hdr_proc_ctx_tbl_info),
455 		.tlv_type	= 0x19,
456 		.offset		= offsetof(struct ipa_init_modem_driver_req,
457 					   hdr_proc_ctx_tbl_info),
458 		.ei_array	= ipa_mem_bounds_ei,
459 	},
460 	{
461 		.data_type	= QMI_OPT_FLAG,
462 		.elem_len	= 1,
463 		.elem_size	=
464 			sizeof_field(struct ipa_init_modem_driver_req,
465 				     zip_tbl_info_valid),
466 		.tlv_type	= 0x1a,
467 		.offset		= offsetof(struct ipa_init_modem_driver_req,
468 					   zip_tbl_info_valid),
469 	},
470 	{
471 		.data_type	= QMI_STRUCT,
472 		.elem_len	= 1,
473 		.elem_size	=
474 			sizeof_field(struct ipa_init_modem_driver_req,
475 				     zip_tbl_info),
476 		.tlv_type	= 0x1a,
477 		.offset		= offsetof(struct ipa_init_modem_driver_req,
478 					   zip_tbl_info),
479 		.ei_array	= ipa_mem_bounds_ei,
480 	},
481 	{
482 		.data_type	= QMI_OPT_FLAG,
483 		.elem_len	= 1,
484 		.elem_size	=
485 			sizeof_field(struct ipa_init_modem_driver_req,
486 				     v4_hash_route_tbl_info_valid),
487 		.tlv_type	= 0x1b,
488 		.offset		= offsetof(struct ipa_init_modem_driver_req,
489 					   v4_hash_route_tbl_info_valid),
490 	},
491 	{
492 		.data_type	= QMI_STRUCT,
493 		.elem_len	= 1,
494 		.elem_size	=
495 			sizeof_field(struct ipa_init_modem_driver_req,
496 				     v4_hash_route_tbl_info),
497 		.tlv_type	= 0x1b,
498 		.offset		= offsetof(struct ipa_init_modem_driver_req,
499 					   v4_hash_route_tbl_info),
500 		.ei_array	= ipa_mem_bounds_ei,
501 	},
502 	{
503 		.data_type	= QMI_OPT_FLAG,
504 		.elem_len	= 1,
505 		.elem_size	=
506 			sizeof_field(struct ipa_init_modem_driver_req,
507 				     v6_hash_route_tbl_info_valid),
508 		.tlv_type	= 0x1c,
509 		.offset		= offsetof(struct ipa_init_modem_driver_req,
510 					   v6_hash_route_tbl_info_valid),
511 	},
512 	{
513 		.data_type	= QMI_STRUCT,
514 		.elem_len	= 1,
515 		.elem_size	=
516 			sizeof_field(struct ipa_init_modem_driver_req,
517 				     v6_hash_route_tbl_info),
518 		.tlv_type	= 0x1c,
519 		.offset		= offsetof(struct ipa_init_modem_driver_req,
520 					   v6_hash_route_tbl_info),
521 		.ei_array	= ipa_mem_bounds_ei,
522 	},
523 	{
524 		.data_type	= QMI_OPT_FLAG,
525 		.elem_len	= 1,
526 		.elem_size	=
527 			sizeof_field(struct ipa_init_modem_driver_req,
528 				     v4_hash_filter_tbl_start_valid),
529 		.tlv_type	= 0x1d,
530 		.offset		= offsetof(struct ipa_init_modem_driver_req,
531 					   v4_hash_filter_tbl_start_valid),
532 	},
533 	{
534 		.data_type	= QMI_UNSIGNED_4_BYTE,
535 		.elem_len	= 1,
536 		.elem_size	=
537 			sizeof_field(struct ipa_init_modem_driver_req,
538 				     v4_hash_filter_tbl_start),
539 		.tlv_type	= 0x1d,
540 		.offset		= offsetof(struct ipa_init_modem_driver_req,
541 					   v4_hash_filter_tbl_start),
542 	},
543 	{
544 		.data_type	= QMI_OPT_FLAG,
545 		.elem_len	= 1,
546 		.elem_size	=
547 			sizeof_field(struct ipa_init_modem_driver_req,
548 				     v6_hash_filter_tbl_start_valid),
549 		.tlv_type	= 0x1e,
550 		.offset		= offsetof(struct ipa_init_modem_driver_req,
551 					   v6_hash_filter_tbl_start_valid),
552 	},
553 	{
554 		.data_type	= QMI_UNSIGNED_4_BYTE,
555 		.elem_len	= 1,
556 		.elem_size	=
557 			sizeof_field(struct ipa_init_modem_driver_req,
558 				     v6_hash_filter_tbl_start),
559 		.tlv_type	= 0x1e,
560 		.offset		= offsetof(struct ipa_init_modem_driver_req,
561 					   v6_hash_filter_tbl_start),
562 	},
563 	{
564 		.data_type	= QMI_OPT_FLAG,
565 		.elem_len	= 1,
566 		.elem_size	=
567 			sizeof_field(struct ipa_init_modem_driver_req,
568 				     hw_stats_quota_base_addr_valid),
569 		.tlv_type	= 0x1f,
570 		.offset		= offsetof(struct ipa_init_modem_driver_req,
571 					   hw_stats_quota_base_addr_valid),
572 	},
573 	{
574 		.data_type	= QMI_UNSIGNED_4_BYTE,
575 		.elem_len	= 1,
576 		.elem_size	=
577 			sizeof_field(struct ipa_init_modem_driver_req,
578 				     hw_stats_quota_base_addr),
579 		.tlv_type	= 0x1f,
580 		.offset		= offsetof(struct ipa_init_modem_driver_req,
581 					   hw_stats_quota_base_addr),
582 	},
583 	{
584 		.data_type	= QMI_OPT_FLAG,
585 		.elem_len	= 1,
586 		.elem_size	=
587 			sizeof_field(struct ipa_init_modem_driver_req,
588 				     hw_stats_quota_size_valid),
589 		.tlv_type	= 0x20,
590 		.offset		= offsetof(struct ipa_init_modem_driver_req,
591 					   hw_stats_quota_size_valid),
592 	},
593 	{
594 		.data_type	= QMI_UNSIGNED_4_BYTE,
595 		.elem_len	= 1,
596 		.elem_size	=
597 			sizeof_field(struct ipa_init_modem_driver_req,
598 				     hw_stats_quota_size),
599 		.tlv_type	= 0x20,
600 		.offset		= offsetof(struct ipa_init_modem_driver_req,
601 					   hw_stats_quota_size),
602 	},
603 	{
604 		.data_type	= QMI_OPT_FLAG,
605 		.elem_len	= 1,
606 		.elem_size	=
607 			sizeof_field(struct ipa_init_modem_driver_req,
608 				     hw_stats_drop_base_addr_valid),
609 		.tlv_type	= 0x21,
610 		.offset		= offsetof(struct ipa_init_modem_driver_req,
611 					   hw_stats_drop_base_addr_valid),
612 	},
613 	{
614 		.data_type	= QMI_UNSIGNED_4_BYTE,
615 		.elem_len	= 1,
616 		.elem_size	=
617 			sizeof_field(struct ipa_init_modem_driver_req,
618 				     hw_stats_drop_base_addr),
619 		.tlv_type	= 0x21,
620 		.offset		= offsetof(struct ipa_init_modem_driver_req,
621 					   hw_stats_drop_base_addr),
622 	},
623 	{
624 		.data_type	= QMI_OPT_FLAG,
625 		.elem_len	= 1,
626 		.elem_size	=
627 			sizeof_field(struct ipa_init_modem_driver_req,
628 				     hw_stats_drop_size_valid),
629 		.tlv_type	= 0x22,
630 		.offset		= offsetof(struct ipa_init_modem_driver_req,
631 					   hw_stats_drop_size_valid),
632 	},
633 	{
634 		.data_type	= QMI_UNSIGNED_4_BYTE,
635 		.elem_len	= 1,
636 		.elem_size	=
637 			sizeof_field(struct ipa_init_modem_driver_req,
638 				     hw_stats_drop_size),
639 		.tlv_type	= 0x22,
640 		.offset		= offsetof(struct ipa_init_modem_driver_req,
641 					   hw_stats_drop_size),
642 	},
643 	{
644 		.data_type	= QMI_EOTI,
645 	},
646 };
647 
648 /* QMI message structure definition for struct ipa_init_modem_driver_rsp */
649 const struct qmi_elem_info ipa_init_modem_driver_rsp_ei[] = {
650 	{
651 		.data_type	= QMI_STRUCT,
652 		.elem_len	= 1,
653 		.elem_size	=
654 			sizeof_field(struct ipa_init_modem_driver_rsp,
655 				     rsp),
656 		.tlv_type	= 0x02,
657 		.offset		= offsetof(struct ipa_init_modem_driver_rsp,
658 					   rsp),
659 		.ei_array	= qmi_response_type_v01_ei,
660 	},
661 	{
662 		.data_type	= QMI_OPT_FLAG,
663 		.elem_len	= 1,
664 		.elem_size	=
665 			sizeof_field(struct ipa_init_modem_driver_rsp,
666 				     ctrl_comm_dest_end_pt_valid),
667 		.tlv_type	= 0x10,
668 		.offset		= offsetof(struct ipa_init_modem_driver_rsp,
669 					   ctrl_comm_dest_end_pt_valid),
670 	},
671 	{
672 		.data_type	= QMI_UNSIGNED_4_BYTE,
673 		.elem_len	= 1,
674 		.elem_size	=
675 			sizeof_field(struct ipa_init_modem_driver_rsp,
676 				     ctrl_comm_dest_end_pt),
677 		.tlv_type	= 0x10,
678 		.offset		= offsetof(struct ipa_init_modem_driver_rsp,
679 					   ctrl_comm_dest_end_pt),
680 	},
681 	{
682 		.data_type	= QMI_OPT_FLAG,
683 		.elem_len	= 1,
684 		.elem_size	=
685 			sizeof_field(struct ipa_init_modem_driver_rsp,
686 				     default_end_pt_valid),
687 		.tlv_type	= 0x11,
688 		.offset		= offsetof(struct ipa_init_modem_driver_rsp,
689 					   default_end_pt_valid),
690 	},
691 	{
692 		.data_type	= QMI_UNSIGNED_4_BYTE,
693 		.elem_len	= 1,
694 		.elem_size	=
695 			sizeof_field(struct ipa_init_modem_driver_rsp,
696 				     default_end_pt),
697 		.tlv_type	= 0x11,
698 		.offset		= offsetof(struct ipa_init_modem_driver_rsp,
699 					   default_end_pt),
700 	},
701 	{
702 		.data_type	= QMI_OPT_FLAG,
703 		.elem_len	= 1,
704 		.elem_size	=
705 			sizeof_field(struct ipa_init_modem_driver_rsp,
706 				     modem_driver_init_pending_valid),
707 		.tlv_type	= 0x12,
708 		.offset		= offsetof(struct ipa_init_modem_driver_rsp,
709 					   modem_driver_init_pending_valid),
710 	},
711 	{
712 		.data_type	= QMI_UNSIGNED_1_BYTE,
713 		.elem_len	= 1,
714 		.elem_size	=
715 			sizeof_field(struct ipa_init_modem_driver_rsp,
716 				     modem_driver_init_pending),
717 		.tlv_type	= 0x12,
718 		.offset		= offsetof(struct ipa_init_modem_driver_rsp,
719 					   modem_driver_init_pending),
720 	},
721 	{
722 		.data_type	= QMI_EOTI,
723 	},
724 };
725