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