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