File Index
Files and directories
Sign in
FILE

usb_audio_qmi_v01.c

File preview with syntax highlighting.

linux-6.19.14/sound/usb/qcom/usb_audio_qmi_v01.c C
  1// SPDX-License-Identifier: GPL-2.0
  2/*
  3 * Copyright (c) 2022-2025 Qualcomm Innovation Center, Inc. All rights reserved.
  4 */
  5
  6#include <linux/soc/qcom/qmi.h>
  7
  8#include "usb_audio_qmi_v01.h"
  9
 10static const struct qmi_elem_info mem_info_v01_ei[] = {
 11	{
 12		.data_type	= QMI_UNSIGNED_8_BYTE,
 13		.elem_len	= 1,
 14		.elem_size	= sizeof(u64),
 15		.array_type	= NO_ARRAY,
 16		.tlv_type	= 0,
 17		.offset		= offsetof(struct mem_info_v01, iova),
 18	},
 19	{
 20		.data_type	= QMI_UNSIGNED_8_BYTE,
 21		.elem_len	= 1,
 22		.elem_size	= sizeof(u64),
 23		.array_type	= NO_ARRAY,
 24		.tlv_type	= 0,
 25		.offset		= offsetof(struct mem_info_v01, dma),
 26	},
 27	{
 28		.data_type	= QMI_UNSIGNED_4_BYTE,
 29		.elem_len	= 1,
 30		.elem_size	= sizeof(u32),
 31		.array_type	= NO_ARRAY,
 32		.tlv_type	= 0,
 33		.offset		= offsetof(struct mem_info_v01, size),
 34	},
 35	{
 36		.data_type	= QMI_EOTI,
 37		.array_type	= NO_ARRAY,
 38		.tlv_type	= QMI_COMMON_TLV_TYPE,
 39	},
 40};
 41
 42static const struct qmi_elem_info apps_mem_info_v01_ei[] = {
 43	{
 44		.data_type	= QMI_STRUCT,
 45		.elem_len	= 1,
 46		.elem_size	= sizeof(struct mem_info_v01),
 47		.array_type	= NO_ARRAY,
 48		.tlv_type	= 0,
 49		.offset		= offsetof(struct apps_mem_info_v01, evt_ring),
 50		.ei_array	= mem_info_v01_ei,
 51	},
 52	{
 53		.data_type	= QMI_STRUCT,
 54		.elem_len	= 1,
 55		.elem_size	= sizeof(struct mem_info_v01),
 56		.array_type	= NO_ARRAY,
 57		.tlv_type	= 0,
 58		.offset		= offsetof(struct apps_mem_info_v01, tr_data),
 59		.ei_array	= mem_info_v01_ei,
 60	},
 61	{
 62		.data_type	= QMI_STRUCT,
 63		.elem_len	= 1,
 64		.elem_size	= sizeof(struct mem_info_v01),
 65		.array_type	= NO_ARRAY,
 66		.tlv_type	= 0,
 67		.offset		= offsetof(struct apps_mem_info_v01, tr_sync),
 68		.ei_array	= mem_info_v01_ei,
 69	},
 70	{
 71		.data_type	= QMI_STRUCT,
 72		.elem_len	= 1,
 73		.elem_size	= sizeof(struct mem_info_v01),
 74		.array_type	= NO_ARRAY,
 75		.tlv_type	= 0,
 76		.offset		= offsetof(struct apps_mem_info_v01, xfer_buff),
 77		.ei_array	= mem_info_v01_ei,
 78	},
 79	{
 80		.data_type	= QMI_STRUCT,
 81		.elem_len	= 1,
 82		.elem_size	= sizeof(struct mem_info_v01),
 83		.array_type	= NO_ARRAY,
 84		.tlv_type	= 0,
 85		.offset		= offsetof(struct apps_mem_info_v01, dcba),
 86		.ei_array	= mem_info_v01_ei,
 87	},
 88	{
 89		.data_type	= QMI_EOTI,
 90		.array_type	= NO_ARRAY,
 91		.tlv_type	= QMI_COMMON_TLV_TYPE,
 92	},
 93};
 94
 95static const struct qmi_elem_info usb_endpoint_descriptor_v01_ei[] = {
 96	{
 97		.data_type	= QMI_UNSIGNED_1_BYTE,
 98		.elem_len	= 1,
 99		.elem_size	= sizeof(u8),
100		.array_type	= NO_ARRAY,
101		.tlv_type	= 0,
102		.offset		= offsetof(struct usb_endpoint_descriptor_v01,
103						bLength),
104	},
105	{
106		.data_type	= QMI_UNSIGNED_1_BYTE,
107		.elem_len	= 1,
108		.elem_size	= sizeof(u8),
109		.array_type	= NO_ARRAY,
110		.tlv_type	= 0,
111		.offset		= offsetof(struct usb_endpoint_descriptor_v01,
112						bDescriptorType),
113	},
114	{
115		.data_type	= QMI_UNSIGNED_1_BYTE,
116		.elem_len	= 1,
117		.elem_size	= sizeof(u8),
118		.array_type	= NO_ARRAY,
119		.tlv_type	= 0,
120		.offset		= offsetof(struct usb_endpoint_descriptor_v01,
121						bEndpointAddress),
122	},
123	{
124		.data_type	= QMI_UNSIGNED_1_BYTE,
125		.elem_len	= 1,
126		.elem_size	= sizeof(u8),
127		.array_type	= NO_ARRAY,
128		.tlv_type	= 0,
129		.offset		= offsetof(struct usb_endpoint_descriptor_v01,
130						bmAttributes),
131	},
132	{
133		.data_type	= QMI_UNSIGNED_2_BYTE,
134		.elem_len	= 1,
135		.elem_size	= sizeof(u16),
136		.array_type	= NO_ARRAY,
137		.tlv_type	= 0,
138		.offset		= offsetof(struct usb_endpoint_descriptor_v01,
139						wMaxPacketSize),
140	},
141	{
142		.data_type	= QMI_UNSIGNED_1_BYTE,
143		.elem_len	= 1,
144		.elem_size	= sizeof(u8),
145		.array_type	= NO_ARRAY,
146		.tlv_type	= 0,
147		.offset		= offsetof(struct usb_endpoint_descriptor_v01,
148						bInterval),
149	},
150	{
151		.data_type	= QMI_UNSIGNED_1_BYTE,
152		.elem_len	= 1,
153		.elem_size	= sizeof(u8),
154		.array_type	= NO_ARRAY,
155		.tlv_type	= 0,
156		.offset		= offsetof(struct usb_endpoint_descriptor_v01,
157						bRefresh),
158	},
159	{
160		.data_type	= QMI_UNSIGNED_1_BYTE,
161		.elem_len	= 1,
162		.elem_size	= sizeof(u8),
163		.array_type	= NO_ARRAY,
164		.tlv_type	= 0,
165		.offset		= offsetof(struct usb_endpoint_descriptor_v01,
166						bSynchAddress),
167	},
168	{
169		.data_type	= QMI_EOTI,
170		.array_type	= NO_ARRAY,
171		.tlv_type	= QMI_COMMON_TLV_TYPE,
172	},
173};
174
175static const struct qmi_elem_info usb_interface_descriptor_v01_ei[] = {
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 usb_interface_descriptor_v01,
183						bLength),
184	},
185	{
186		.data_type	= QMI_UNSIGNED_1_BYTE,
187		.elem_len	= 1,
188		.elem_size	= sizeof(u8),
189		.array_type	= NO_ARRAY,
190		.tlv_type	= 0,
191		.offset		= offsetof(struct usb_interface_descriptor_v01,
192						bDescriptorType),
193	},
194	{
195		.data_type	= QMI_UNSIGNED_1_BYTE,
196		.elem_len	= 1,
197		.elem_size	= sizeof(u8),
198		.array_type	= NO_ARRAY,
199		.tlv_type	= 0,
200		.offset		= offsetof(struct usb_interface_descriptor_v01,
201						bInterfaceNumber),
202	},
203	{
204		.data_type	= QMI_UNSIGNED_1_BYTE,
205		.elem_len	= 1,
206		.elem_size	= sizeof(u8),
207		.array_type	= NO_ARRAY,
208		.tlv_type	= 0,
209		.offset		= offsetof(struct usb_interface_descriptor_v01,
210						bAlternateSetting),
211	},
212	{
213		.data_type	= QMI_UNSIGNED_1_BYTE,
214		.elem_len	= 1,
215		.elem_size	= sizeof(u8),
216		.array_type	= NO_ARRAY,
217		.tlv_type	= 0,
218		.offset		= offsetof(struct usb_interface_descriptor_v01,
219						bNumEndpoints),
220	},
221	{
222		.data_type	= QMI_UNSIGNED_1_BYTE,
223		.elem_len	= 1,
224		.elem_size	= sizeof(u8),
225		.array_type	= NO_ARRAY,
226		.tlv_type	= 0,
227		.offset		= offsetof(struct usb_interface_descriptor_v01,
228						bInterfaceClass),
229	},
230	{
231		.data_type	= QMI_UNSIGNED_1_BYTE,
232		.elem_len	= 1,
233		.elem_size	= sizeof(u8),
234		.array_type	= NO_ARRAY,
235		.tlv_type	= 0,
236		.offset		= offsetof(struct usb_interface_descriptor_v01,
237						bInterfaceSubClass),
238	},
239	{
240		.data_type	= QMI_UNSIGNED_1_BYTE,
241		.elem_len	= 1,
242		.elem_size	= sizeof(u8),
243		.array_type	= NO_ARRAY,
244		.tlv_type	= 0,
245		.offset		= offsetof(struct usb_interface_descriptor_v01,
246						bInterfaceProtocol),
247	},
248	{
249		.data_type	= QMI_UNSIGNED_1_BYTE,
250		.elem_len	= 1,
251		.elem_size	= sizeof(u8),
252		.array_type	= NO_ARRAY,
253		.tlv_type	= 0,
254		.offset		= offsetof(struct usb_interface_descriptor_v01,
255						iInterface),
256	},
257	{
258		.data_type	= QMI_EOTI,
259		.array_type	= NO_ARRAY,
260		.tlv_type	= QMI_COMMON_TLV_TYPE,
261	},
262};
263
264const struct qmi_elem_info qmi_uaudio_stream_req_msg_v01_ei[] = {
265	{
266		.data_type	= QMI_UNSIGNED_1_BYTE,
267		.elem_len	= 1,
268		.elem_size	= sizeof(u8),
269		.array_type	= NO_ARRAY,
270		.tlv_type	= 0x01,
271		.offset		= offsetof(struct qmi_uaudio_stream_req_msg_v01,
272						enable),
273	},
274	{
275		.data_type	= QMI_UNSIGNED_4_BYTE,
276		.elem_len	= 1,
277		.elem_size	= sizeof(u32),
278		.array_type	= NO_ARRAY,
279		.tlv_type	= 0x02,
280		.offset		= offsetof(struct qmi_uaudio_stream_req_msg_v01,
281						usb_token),
282	},
283	{
284		.data_type	= QMI_OPT_FLAG,
285		.elem_len	= 1,
286		.elem_size	= sizeof(u8),
287		.array_type	= NO_ARRAY,
288		.tlv_type	= 0x10,
289		.offset		= offsetof(struct qmi_uaudio_stream_req_msg_v01,
290						audio_format_valid),
291	},
292	{
293		.data_type	= QMI_UNSIGNED_4_BYTE,
294		.elem_len	= 1,
295		.elem_size	= sizeof(u32),
296		.array_type	= NO_ARRAY,
297		.tlv_type	= 0x10,
298		.offset		= offsetof(struct qmi_uaudio_stream_req_msg_v01,
299						audio_format),
300	},
301	{
302		.data_type	= QMI_OPT_FLAG,
303		.elem_len	= 1,
304		.elem_size	= sizeof(u8),
305		.array_type	= NO_ARRAY,
306		.tlv_type	= 0x11,
307		.offset		= offsetof(struct qmi_uaudio_stream_req_msg_v01,
308						number_of_ch_valid),
309	},
310	{
311		.data_type	= QMI_UNSIGNED_4_BYTE,
312		.elem_len	= 1,
313		.elem_size	= sizeof(u32),
314		.array_type	= NO_ARRAY,
315		.tlv_type	= 0x11,
316		.offset		= offsetof(struct qmi_uaudio_stream_req_msg_v01,
317						number_of_ch),
318	},
319	{
320		.data_type	= QMI_OPT_FLAG,
321		.elem_len	= 1,
322		.elem_size	= sizeof(u8),
323		.array_type	= NO_ARRAY,
324		.tlv_type	= 0x12,
325		.offset		= offsetof(struct qmi_uaudio_stream_req_msg_v01,
326						bit_rate_valid),
327	},
328	{
329		.data_type	= QMI_UNSIGNED_4_BYTE,
330		.elem_len	= 1,
331		.elem_size	= sizeof(u32),
332		.array_type	= NO_ARRAY,
333		.tlv_type	= 0x12,
334		.offset		= offsetof(struct qmi_uaudio_stream_req_msg_v01,
335						bit_rate),
336	},
337	{
338		.data_type	= QMI_OPT_FLAG,
339		.elem_len	= 1,
340		.elem_size	= sizeof(u8),
341		.array_type	= NO_ARRAY,
342		.tlv_type	= 0x13,
343		.offset		= offsetof(struct qmi_uaudio_stream_req_msg_v01,
344						xfer_buff_size_valid),
345	},
346	{
347		.data_type	= QMI_UNSIGNED_4_BYTE,
348		.elem_len	= 1,
349		.elem_size	= sizeof(u32),
350		.array_type	= NO_ARRAY,
351		.tlv_type	= 0x13,
352		.offset		= offsetof(struct qmi_uaudio_stream_req_msg_v01,
353						xfer_buff_size),
354	},
355	{
356		.data_type	= QMI_OPT_FLAG,
357		.elem_len	= 1,
358		.elem_size	= sizeof(u8),
359		.array_type	= NO_ARRAY,
360		.tlv_type	= 0x14,
361		.offset		= offsetof(struct qmi_uaudio_stream_req_msg_v01,
362						service_interval_valid),
363	},
364	{
365		.data_type	= QMI_UNSIGNED_4_BYTE,
366		.elem_len	= 1,
367		.elem_size	= sizeof(u32),
368		.array_type	= NO_ARRAY,
369		.tlv_type	= 0x14,
370		.offset		= offsetof(struct qmi_uaudio_stream_req_msg_v01,
371						service_interval),
372	},
373	{
374		.data_type	= QMI_EOTI,
375		.array_type	= NO_ARRAY,
376		.tlv_type	= QMI_COMMON_TLV_TYPE,
377	},
378};
379
380const struct qmi_elem_info qmi_uaudio_stream_resp_msg_v01_ei[] = {
381	{
382		.data_type	= QMI_STRUCT,
383		.elem_len	= 1,
384		.elem_size	= sizeof(struct qmi_response_type_v01),
385		.array_type	= NO_ARRAY,
386		.tlv_type	= 0x02,
387		.offset		= offsetof(struct qmi_uaudio_stream_resp_msg_v01,
388					resp),
389		.ei_array	= qmi_response_type_v01_ei,
390	},
391	{
392		.data_type	= QMI_OPT_FLAG,
393		.elem_len	= 1,
394		.elem_size	= sizeof(u8),
395		.array_type	= NO_ARRAY,
396		.tlv_type	= 0x10,
397		.offset		= offsetof(struct qmi_uaudio_stream_resp_msg_v01,
398					status_valid),
399	},
400	{
401		.data_type	= QMI_SIGNED_4_BYTE_ENUM,
402		.elem_len	= 1,
403		.elem_size	= sizeof(enum usb_qmi_audio_stream_status_enum_v01),
404		.array_type	= NO_ARRAY,
405		.tlv_type	= 0x10,
406		.offset		= offsetof(struct qmi_uaudio_stream_resp_msg_v01,
407					status),
408	},
409	{
410		.data_type	= QMI_OPT_FLAG,
411		.elem_len	= 1,
412		.elem_size	= sizeof(u8),
413		.array_type	= NO_ARRAY,
414		.tlv_type	= 0x11,
415		.offset		= offsetof(struct qmi_uaudio_stream_resp_msg_v01,
416					internal_status_valid),
417	},
418	{
419		.data_type	= QMI_UNSIGNED_4_BYTE,
420		.elem_len	= 1,
421		.elem_size	= sizeof(u32),
422		.array_type	= NO_ARRAY,
423		.tlv_type	= 0x11,
424		.offset		= offsetof(struct qmi_uaudio_stream_resp_msg_v01,
425					internal_status),
426	},
427	{
428		.data_type	= QMI_OPT_FLAG,
429		.elem_len	= 1,
430		.elem_size	= sizeof(u8),
431		.array_type	= NO_ARRAY,
432		.tlv_type	= 0x12,
433		.offset		= offsetof(struct qmi_uaudio_stream_resp_msg_v01,
434					slot_id_valid),
435	},
436	{
437		.data_type	= QMI_UNSIGNED_4_BYTE,
438		.elem_len	= 1,
439		.elem_size	= sizeof(u32),
440		.array_type	= NO_ARRAY,
441		.tlv_type	= 0x12,
442		.offset		= offsetof(struct qmi_uaudio_stream_resp_msg_v01,
443					slot_id),
444	},
445	{
446		.data_type	= QMI_OPT_FLAG,
447		.elem_len	= 1,
448		.elem_size	= sizeof(u8),
449		.array_type	= NO_ARRAY,
450		.tlv_type	= 0x13,
451		.offset		= offsetof(struct qmi_uaudio_stream_resp_msg_v01,
452					usb_token_valid),
453	},
454	{
455		.data_type	= QMI_UNSIGNED_4_BYTE,
456		.elem_len	= 1,
457		.elem_size	= sizeof(u32),
458		.array_type	= NO_ARRAY,
459		.tlv_type	= 0x13,
460		.offset		= offsetof(struct qmi_uaudio_stream_resp_msg_v01,
461					usb_token),
462	},
463	{
464		.data_type	= QMI_OPT_FLAG,
465		.elem_len	= 1,
466		.elem_size	= sizeof(u8),
467		.array_type	= NO_ARRAY,
468		.tlv_type	= 0x14,
469		.offset		= offsetof(struct qmi_uaudio_stream_resp_msg_v01,
470					std_as_opr_intf_desc_valid),
471	},
472	{
473		.data_type	= QMI_STRUCT,
474		.elem_len	= 1,
475		.elem_size	= sizeof(struct usb_interface_descriptor_v01),
476		.array_type	= NO_ARRAY,
477		.tlv_type	= 0x14,
478		.offset		= offsetof(struct qmi_uaudio_stream_resp_msg_v01,
479					std_as_opr_intf_desc),
480		.ei_array	= usb_interface_descriptor_v01_ei,
481	},
482	{
483		.data_type	= QMI_OPT_FLAG,
484		.elem_len	= 1,
485		.elem_size	= sizeof(u8),
486		.array_type	= NO_ARRAY,
487		.tlv_type	= 0x15,
488		.offset		= offsetof(struct qmi_uaudio_stream_resp_msg_v01,
489					std_as_data_ep_desc_valid),
490	},
491	{
492		.data_type	= QMI_STRUCT,
493		.elem_len	= 1,
494		.elem_size	= sizeof(struct usb_endpoint_descriptor_v01),
495		.array_type	= NO_ARRAY,
496		.tlv_type	= 0x15,
497		.offset		= offsetof(struct qmi_uaudio_stream_resp_msg_v01,
498					std_as_data_ep_desc),
499		.ei_array	= usb_endpoint_descriptor_v01_ei,
500	},
501	{
502		.data_type	= QMI_OPT_FLAG,
503		.elem_len	= 1,
504		.elem_size	= sizeof(u8),
505		.array_type	= NO_ARRAY,
506		.tlv_type	= 0x16,
507		.offset		= offsetof(struct qmi_uaudio_stream_resp_msg_v01,
508					std_as_sync_ep_desc_valid),
509	},
510	{
511		.data_type	= QMI_STRUCT,
512		.elem_len	= 1,
513		.elem_size	= sizeof(struct usb_endpoint_descriptor_v01),
514		.array_type	= NO_ARRAY,
515		.tlv_type	= 0x16,
516		.offset		= offsetof(struct qmi_uaudio_stream_resp_msg_v01,
517					std_as_sync_ep_desc),
518		.ei_array	= usb_endpoint_descriptor_v01_ei,
519	},
520	{
521		.data_type	= QMI_OPT_FLAG,
522		.elem_len	= 1,
523		.elem_size	= sizeof(u8),
524		.array_type	= NO_ARRAY,
525		.tlv_type	= 0x17,
526		.offset		= offsetof(struct qmi_uaudio_stream_resp_msg_v01,
527					usb_audio_spec_revision_valid),
528	},
529	{
530		.data_type	= QMI_UNSIGNED_2_BYTE,
531		.elem_len	= 1,
532		.elem_size	= sizeof(u16),
533		.array_type	= NO_ARRAY,
534		.tlv_type	= 0x17,
535		.offset		= offsetof(struct qmi_uaudio_stream_resp_msg_v01,
536					usb_audio_spec_revision),
537	},
538	{
539		.data_type	= QMI_OPT_FLAG,
540		.elem_len	= 1,
541		.elem_size	= sizeof(u8),
542		.array_type	= NO_ARRAY,
543		.tlv_type	= 0x18,
544		.offset		= offsetof(struct qmi_uaudio_stream_resp_msg_v01,
545					data_path_delay_valid),
546	},
547	{
548		.data_type	= QMI_UNSIGNED_1_BYTE,
549		.elem_len	= 1,
550		.elem_size	= sizeof(u8),
551		.array_type	= NO_ARRAY,
552		.tlv_type	= 0x18,
553		.offset		= offsetof(struct qmi_uaudio_stream_resp_msg_v01,
554					data_path_delay),
555	},
556	{
557		.data_type	= QMI_OPT_FLAG,
558		.elem_len	= 1,
559		.elem_size	= sizeof(u8),
560		.array_type	= NO_ARRAY,
561		.tlv_type	= 0x19,
562		.offset		= offsetof(struct qmi_uaudio_stream_resp_msg_v01,
563					usb_audio_subslot_size_valid),
564	},
565	{
566		.data_type	= QMI_UNSIGNED_1_BYTE,
567		.elem_len	= 1,
568		.elem_size	= sizeof(u8),
569		.array_type	= NO_ARRAY,
570		.tlv_type	= 0x19,
571		.offset		= offsetof(struct qmi_uaudio_stream_resp_msg_v01,
572					usb_audio_subslot_size),
573	},
574	{
575		.data_type	= QMI_OPT_FLAG,
576		.elem_len	= 1,
577		.elem_size	= sizeof(u8),
578		.array_type	= NO_ARRAY,
579		.tlv_type	= 0x1A,
580		.offset		= offsetof(struct qmi_uaudio_stream_resp_msg_v01,
581					xhci_mem_info_valid),
582	},
583	{
584		.data_type	= QMI_STRUCT,
585		.elem_len	= 1,
586		.elem_size	= sizeof(struct apps_mem_info_v01),
587		.array_type	= NO_ARRAY,
588		.tlv_type	= 0x1A,
589		.offset		= offsetof(struct qmi_uaudio_stream_resp_msg_v01,
590					xhci_mem_info),
591		.ei_array	= apps_mem_info_v01_ei,
592	},
593	{
594		.data_type	= QMI_OPT_FLAG,
595		.elem_len	= 1,
596		.elem_size	= sizeof(u8),
597		.array_type	= NO_ARRAY,
598		.tlv_type	= 0x1B,
599		.offset		= offsetof(struct qmi_uaudio_stream_resp_msg_v01,
600					interrupter_num_valid),
601	},
602	{
603		.data_type	= QMI_UNSIGNED_1_BYTE,
604		.elem_len	= 1,
605		.elem_size	= sizeof(u8),
606		.array_type	= NO_ARRAY,
607		.tlv_type	= 0x1B,
608		.offset		= offsetof(struct qmi_uaudio_stream_resp_msg_v01,
609					interrupter_num),
610	},
611	{
612		.data_type	= QMI_OPT_FLAG,
613		.elem_len	= 1,
614		.elem_size	= sizeof(u8),
615		.array_type	= NO_ARRAY,
616		.tlv_type	= 0x1C,
617		.offset		= offsetof(struct qmi_uaudio_stream_resp_msg_v01,
618					speed_info_valid),
619	},
620	{
621		.data_type	= QMI_SIGNED_4_BYTE_ENUM,
622		.elem_len	= 1,
623		.elem_size	= sizeof(enum usb_qmi_audio_device_speed_enum_v01),
624		.array_type	= NO_ARRAY,
625		.tlv_type	= 0x1C,
626		.offset		= offsetof(struct qmi_uaudio_stream_resp_msg_v01,
627					speed_info),
628	},
629	{
630		.data_type	= QMI_OPT_FLAG,
631		.elem_len	= 1,
632		.elem_size	= sizeof(u8),
633		.array_type	= NO_ARRAY,
634		.tlv_type	= 0x1D,
635		.offset		= offsetof(struct qmi_uaudio_stream_resp_msg_v01,
636					controller_num_valid),
637	},
638	{
639		.data_type	= QMI_UNSIGNED_1_BYTE,
640		.elem_len	= 1,
641		.elem_size	= sizeof(u8),
642		.array_type	= NO_ARRAY,
643		.tlv_type	= 0x1D,
644		.offset		= offsetof(struct qmi_uaudio_stream_resp_msg_v01,
645					controller_num),
646	},
647	{
648		.data_type	= QMI_EOTI,
649		.array_type	= NO_ARRAY,
650		.tlv_type	= QMI_COMMON_TLV_TYPE,
651	},
652};
653
654const struct qmi_elem_info qmi_uaudio_stream_ind_msg_v01_ei[] = {
655	{
656		.data_type	= QMI_SIGNED_4_BYTE_ENUM,
657		.elem_len	= 1,
658		.elem_size	= sizeof(
659				enum usb_qmi_audio_device_indication_enum_v01),
660		.array_type	= NO_ARRAY,
661		.tlv_type	= 0x01,
662		.offset		= offsetof(struct qmi_uaudio_stream_ind_msg_v01,
663						dev_event),
664	},
665	{
666		.data_type	= QMI_UNSIGNED_4_BYTE,
667		.elem_len	= 1,
668		.elem_size	= sizeof(u32),
669		.array_type	= NO_ARRAY,
670		.tlv_type	= 0x02,
671		.offset		= offsetof(struct qmi_uaudio_stream_ind_msg_v01,
672						slot_id),
673	},
674	{
675		.data_type	= QMI_OPT_FLAG,
676		.elem_len	= 1,
677		.elem_size	= sizeof(u8),
678		.array_type	= NO_ARRAY,
679		.tlv_type	= 0x10,
680		.offset		= offsetof(struct qmi_uaudio_stream_ind_msg_v01,
681						usb_token_valid),
682	},
683	{
684		.data_type	= QMI_UNSIGNED_4_BYTE,
685		.elem_len	= 1,
686		.elem_size	= sizeof(u32),
687		.array_type	= NO_ARRAY,
688		.tlv_type	= 0x10,
689		.offset		= offsetof(struct qmi_uaudio_stream_ind_msg_v01,
690						usb_token),
691	},
692	{
693		.data_type	= QMI_OPT_FLAG,
694		.elem_len	= 1,
695		.elem_size	= sizeof(u8),
696		.array_type	= NO_ARRAY,
697		.tlv_type	= 0x11,
698		.offset		= offsetof(struct qmi_uaudio_stream_ind_msg_v01,
699						std_as_opr_intf_desc_valid),
700	},
701	{
702		.data_type	= QMI_STRUCT,
703		.elem_len	= 1,
704		.elem_size	= sizeof(struct usb_interface_descriptor_v01),
705		.array_type	= NO_ARRAY,
706		.tlv_type	= 0x11,
707		.offset		= offsetof(struct qmi_uaudio_stream_ind_msg_v01,
708						std_as_opr_intf_desc),
709		.ei_array	= usb_interface_descriptor_v01_ei,
710	},
711	{
712		.data_type	= QMI_OPT_FLAG,
713		.elem_len	= 1,
714		.elem_size	= sizeof(u8),
715		.array_type	= NO_ARRAY,
716		.tlv_type	= 0x12,
717		.offset		= offsetof(struct qmi_uaudio_stream_ind_msg_v01,
718						std_as_data_ep_desc_valid),
719	},
720	{
721		.data_type	= QMI_STRUCT,
722		.elem_len	= 1,
723		.elem_size	= sizeof(struct usb_endpoint_descriptor_v01),
724		.array_type	= NO_ARRAY,
725		.tlv_type	= 0x12,
726		.offset		= offsetof(struct qmi_uaudio_stream_ind_msg_v01,
727						std_as_data_ep_desc),
728		.ei_array	= usb_endpoint_descriptor_v01_ei,
729	},
730	{
731		.data_type	= QMI_OPT_FLAG,
732		.elem_len	= 1,
733		.elem_size	= sizeof(u8),
734		.array_type	= NO_ARRAY,
735		.tlv_type	= 0x13,
736		.offset		= offsetof(struct qmi_uaudio_stream_ind_msg_v01,
737						std_as_sync_ep_desc_valid),
738	},
739	{
740		.data_type	= QMI_STRUCT,
741		.elem_len	= 1,
742		.elem_size	= sizeof(struct usb_endpoint_descriptor_v01),
743		.array_type	= NO_ARRAY,
744		.tlv_type	= 0x13,
745		.offset		= offsetof(struct qmi_uaudio_stream_ind_msg_v01,
746						std_as_sync_ep_desc),
747		.ei_array	= usb_endpoint_descriptor_v01_ei,
748	},
749	{
750		.data_type	= QMI_OPT_FLAG,
751		.elem_len	= 1,
752		.elem_size	= sizeof(u8),
753		.array_type	= NO_ARRAY,
754		.tlv_type	= 0x14,
755		.offset		= offsetof(struct qmi_uaudio_stream_ind_msg_v01,
756						usb_audio_spec_revision_valid),
757	},
758	{
759		.data_type	= QMI_UNSIGNED_2_BYTE,
760		.elem_len	= 1,
761		.elem_size	= sizeof(u16),
762		.array_type	= NO_ARRAY,
763		.tlv_type	= 0x14,
764		.offset		= offsetof(struct qmi_uaudio_stream_ind_msg_v01,
765						usb_audio_spec_revision),
766	},
767	{
768		.data_type	= QMI_OPT_FLAG,
769		.elem_len	= 1,
770		.elem_size	= sizeof(u8),
771		.array_type	= NO_ARRAY,
772		.tlv_type	= 0x15,
773		.offset		= offsetof(struct qmi_uaudio_stream_ind_msg_v01,
774						data_path_delay_valid),
775	},
776	{
777		.data_type	= QMI_UNSIGNED_1_BYTE,
778		.elem_len	= 1,
779		.elem_size	= sizeof(u8),
780		.array_type	= NO_ARRAY,
781		.tlv_type	= 0x15,
782		.offset		= offsetof(struct qmi_uaudio_stream_ind_msg_v01,
783						data_path_delay),
784	},
785	{
786		.data_type	= QMI_OPT_FLAG,
787		.elem_len	= 1,
788		.elem_size	= sizeof(u8),
789		.array_type	= NO_ARRAY,
790		.tlv_type	= 0x16,
791		.offset		= offsetof(struct qmi_uaudio_stream_ind_msg_v01,
792						usb_audio_subslot_size_valid),
793	},
794	{
795		.data_type	= QMI_UNSIGNED_1_BYTE,
796		.elem_len	= 1,
797		.elem_size	= sizeof(u8),
798		.array_type	= NO_ARRAY,
799		.tlv_type	= 0x16,
800		.offset		= offsetof(struct qmi_uaudio_stream_ind_msg_v01,
801						usb_audio_subslot_size),
802	},
803	{
804		.data_type	= QMI_OPT_FLAG,
805		.elem_len	= 1,
806		.elem_size	= sizeof(u8),
807		.array_type	= NO_ARRAY,
808		.tlv_type	= 0x17,
809		.offset		= offsetof(struct qmi_uaudio_stream_ind_msg_v01,
810						xhci_mem_info_valid),
811	},
812	{
813		.data_type	= QMI_STRUCT,
814		.elem_len	= 1,
815		.elem_size	= sizeof(struct apps_mem_info_v01),
816		.array_type	= NO_ARRAY,
817		.tlv_type	= 0x17,
818		.offset		= offsetof(struct qmi_uaudio_stream_ind_msg_v01,
819						xhci_mem_info),
820		.ei_array	= apps_mem_info_v01_ei,
821	},
822	{
823		.data_type	= QMI_OPT_FLAG,
824		.elem_len	= 1,
825		.elem_size	= sizeof(u8),
826		.array_type	= NO_ARRAY,
827		.tlv_type	= 0x18,
828		.offset		= offsetof(struct qmi_uaudio_stream_ind_msg_v01,
829						interrupter_num_valid),
830	},
831	{
832		.data_type	= QMI_UNSIGNED_1_BYTE,
833		.elem_len	= 1,
834		.elem_size	= sizeof(u8),
835		.array_type	= NO_ARRAY,
836		.tlv_type	= 0x18,
837		.offset		= offsetof(struct qmi_uaudio_stream_ind_msg_v01,
838						interrupter_num),
839	},
840	{
841		.data_type	= QMI_OPT_FLAG,
842		.elem_len	= 1,
843		.elem_size	= sizeof(u8),
844		.array_type	= NO_ARRAY,
845		.tlv_type	= 0x19,
846		.offset		= offsetof(struct qmi_uaudio_stream_ind_msg_v01,
847						controller_num_valid),
848	},
849	{
850		.data_type	= QMI_UNSIGNED_1_BYTE,
851		.elem_len	= 1,
852		.elem_size	= sizeof(u8),
853		.array_type	= NO_ARRAY,
854		.tlv_type	= 0x19,
855		.offset		= offsetof(struct qmi_uaudio_stream_ind_msg_v01,
856						controller_num),
857	},
858	{
859		.data_type	= QMI_EOTI,
860		.array_type	= NO_ARRAY,
861		.tlv_type	= QMI_COMMON_TLV_TYPE,
862	},
863};
~/ Read-only file preview.