xref: /linux/sound/usb/qcom/usb_audio_qmi_v01.h (revision c0c9379f235df33a12ceae94370ad80c5278324d)
1 /* SPDX-License-Identifier: GPL-2.0
2  *
3  * Copyright (c) 2022-2025 Qualcomm Innovation Center, Inc. All rights reserved.
4  */
5 
6 #ifndef USB_QMI_V01_H
7 #define USB_QMI_V01_H
8 
9 #define UAUDIO_STREAM_SERVICE_ID_V01 0x41D
10 #define UAUDIO_STREAM_SERVICE_VERS_V01 0x01
11 
12 #define QMI_UAUDIO_STREAM_RESP_V01 0x0001
13 #define QMI_UAUDIO_STREAM_REQ_V01 0x0001
14 #define QMI_UAUDIO_STREAM_IND_V01 0x0001
15 
16 struct mem_info_v01 {
17 	u64 iova;	/* mapped into sysdev */
18 	u64 dma;	/* mapped into usb host */
19 	u32 size;
20 };
21 
22 struct apps_mem_info_v01 {
23 	struct mem_info_v01 evt_ring;
24 	struct mem_info_v01 tr_data;
25 	struct mem_info_v01 tr_sync;
26 	struct mem_info_v01 xfer_buff;
27 	struct mem_info_v01 dcba;
28 };
29 
30 struct usb_endpoint_descriptor_v01 {
31 	u8 bLength;
32 	u8 bDescriptorType;
33 	u8 bEndpointAddress;
34 	u8 bmAttributes;
35 	u16 wMaxPacketSize;
36 	u8 bInterval;
37 	u8 bRefresh;
38 	u8 bSynchAddress;
39 };
40 
41 struct usb_interface_descriptor_v01 {
42 	u8 bLength;
43 	u8 bDescriptorType;
44 	u8 bInterfaceNumber;
45 	u8 bAlternateSetting;
46 	u8 bNumEndpoints;
47 	u8 bInterfaceClass;
48 	u8 bInterfaceSubClass;
49 	u8 bInterfaceProtocol;
50 	u8 iInterface;
51 };
52 
53 enum usb_qmi_audio_stream_status_enum_v01 {
54 	USB_QMI_STREAM_STATUS_ENUM_MIN_VAL_V01 = INT_MIN,
55 	USB_QMI_STREAM_REQ_SUCCESS_V01 = 0,
56 	USB_QMI_STREAM_REQ_FAILURE_V01 = 1,
57 	USB_QMI_STREAM_REQ_FAILURE_NOT_FOUND_V01 = 2,
58 	USB_QMI_STREAM_REQ_FAILURE_INVALID_PARAM_V01 = 3,
59 	USB_QMI_STREAM_REQ_FAILURE_MEMALLOC_V01 = 4,
60 	USB_QMI_STREAM_STATUS_ENUM_MAX_VAL_V01 = INT_MAX,
61 };
62 
63 enum usb_qmi_audio_device_indication_enum_v01 {
64 	USB_QMI_DEVICE_INDICATION_ENUM_MIN_VAL_V01 = INT_MIN,
65 	USB_QMI_DEV_CONNECT_V01 = 0,
66 	USB_QMI_DEV_DISCONNECT_V01 = 1,
67 	USB_QMI_DEV_SUSPEND_V01 = 2,
68 	USB_QMI_DEV_RESUME_V01 = 3,
69 	USB_QMI_DEVICE_INDICATION_ENUM_MAX_VAL_V01 = INT_MAX,
70 };
71 
72 enum usb_qmi_audio_device_speed_enum_v01 {
73 	USB_QMI_DEVICE_SPEED_ENUM_MIN_VAL_V01 = INT_MIN,
74 	USB_QMI_DEVICE_SPEED_INVALID_V01 = 0,
75 	USB_QMI_DEVICE_SPEED_LOW_V01 = 1,
76 	USB_QMI_DEVICE_SPEED_FULL_V01 = 2,
77 	USB_QMI_DEVICE_SPEED_HIGH_V01 = 3,
78 	USB_QMI_DEVICE_SPEED_SUPER_V01 = 4,
79 	USB_QMI_DEVICE_SPEED_SUPER_PLUS_V01 = 5,
80 	USB_QMI_DEVICE_SPEED_ENUM_MAX_VAL_V01 = INT_MAX,
81 };
82 
83 struct qmi_uaudio_stream_req_msg_v01 {
84 	u8 enable;
85 	u32 usb_token;
86 	u8 audio_format_valid;
87 	u32 audio_format;
88 	u8 number_of_ch_valid;
89 	u32 number_of_ch;
90 	u8 bit_rate_valid;
91 	u32 bit_rate;
92 	u8 xfer_buff_size_valid;
93 	u32 xfer_buff_size;
94 	u8 service_interval_valid;
95 	u32 service_interval;
96 };
97 
98 #define QMI_UAUDIO_STREAM_REQ_MSG_V01_MAX_MSG_LEN 46
99 extern const struct qmi_elem_info qmi_uaudio_stream_req_msg_v01_ei[];
100 
101 struct qmi_uaudio_stream_resp_msg_v01 {
102 	struct qmi_response_type_v01 resp;
103 	u8 status_valid;
104 	enum usb_qmi_audio_stream_status_enum_v01 status;
105 	u8 internal_status_valid;
106 	u32 internal_status;
107 	u8 slot_id_valid;
108 	u32 slot_id;
109 	u8 usb_token_valid;
110 	u32 usb_token;
111 	u8 std_as_opr_intf_desc_valid;
112 	struct usb_interface_descriptor_v01 std_as_opr_intf_desc;
113 	u8 std_as_data_ep_desc_valid;
114 	struct usb_endpoint_descriptor_v01 std_as_data_ep_desc;
115 	u8 std_as_sync_ep_desc_valid;
116 	struct usb_endpoint_descriptor_v01 std_as_sync_ep_desc;
117 	u8 usb_audio_spec_revision_valid;
118 	u16 usb_audio_spec_revision;
119 	u8 data_path_delay_valid;
120 	u8 data_path_delay;
121 	u8 usb_audio_subslot_size_valid;
122 	u8 usb_audio_subslot_size;
123 	u8 xhci_mem_info_valid;
124 	struct apps_mem_info_v01 xhci_mem_info;
125 	u8 interrupter_num_valid;
126 	u8 interrupter_num;
127 	u8 speed_info_valid;
128 	enum usb_qmi_audio_device_speed_enum_v01 speed_info;
129 	u8 controller_num_valid;
130 	u8 controller_num;
131 };
132 
133 #define QMI_UAUDIO_STREAM_RESP_MSG_V01_MAX_MSG_LEN 202
134 extern const struct qmi_elem_info qmi_uaudio_stream_resp_msg_v01_ei[];
135 
136 struct qmi_uaudio_stream_ind_msg_v01 {
137 	enum usb_qmi_audio_device_indication_enum_v01 dev_event;
138 	u32 slot_id;
139 	u8 usb_token_valid;
140 	u32 usb_token;
141 	u8 std_as_opr_intf_desc_valid;
142 	struct usb_interface_descriptor_v01 std_as_opr_intf_desc;
143 	u8 std_as_data_ep_desc_valid;
144 	struct usb_endpoint_descriptor_v01 std_as_data_ep_desc;
145 	u8 std_as_sync_ep_desc_valid;
146 	struct usb_endpoint_descriptor_v01 std_as_sync_ep_desc;
147 	u8 usb_audio_spec_revision_valid;
148 	u16 usb_audio_spec_revision;
149 	u8 data_path_delay_valid;
150 	u8 data_path_delay;
151 	u8 usb_audio_subslot_size_valid;
152 	u8 usb_audio_subslot_size;
153 	u8 xhci_mem_info_valid;
154 	struct apps_mem_info_v01 xhci_mem_info;
155 	u8 interrupter_num_valid;
156 	u8 interrupter_num;
157 	u8 controller_num_valid;
158 	u8 controller_num;
159 };
160 
161 #define QMI_UAUDIO_STREAM_IND_MSG_V01_MAX_MSG_LEN 181
162 extern const struct qmi_elem_info qmi_uaudio_stream_ind_msg_v01_ei[];
163 
164 #endif
165