1 /* SPDX-License-Identifier: GPL-2.0 */
3 /* Copyright (c) 2018, The Linux Foundation. All rights reserved.
4 * Copyright (C) 2018-2024 Linaro Ltd.
6 #ifndef _IPA_QMI_MSG_H_
7 #define _IPA_QMI_MSG_H_
9 /* === Only "ipa_qmi" and "ipa_qmi_msg.c" should include this file === */
11 #include <linux/types.h>
13 #include <linux/soc/qcom/qmi.h>
15 /* Request/response/indication QMI message ids used for IPA. Receiving
16 * end issues a response for requests; indications require no response.
18 #define IPA_QMI_INDICATION_REGISTER 0x20 /* modem -> AP request */
19 #define IPA_QMI_INIT_DRIVER 0x21 /* AP -> modem request */
20 #define IPA_QMI_INIT_COMPLETE 0x22 /* AP -> modem indication */
21 #define IPA_QMI_DRIVER_INIT_COMPLETE 0x35 /* modem -> AP request */
23 /* The maximum size required for message types. These sizes include
24 * the message data, along with type (1 byte) and length (2 byte)
25 * information for each field. The qmi_send_*() interfaces require
26 * the message size to be provided.
28 #define IPA_QMI_INDICATION_REGISTER_REQ_SZ 20 /* -> server handle */
29 #define IPA_QMI_INDICATION_REGISTER_RSP_SZ 7 /* <- server handle */
30 #define IPA_QMI_INIT_DRIVER_REQ_SZ 162 /* client handle -> */
31 #define IPA_QMI_INIT_DRIVER_RSP_SZ 25 /* client handle <- */
32 #define IPA_QMI_INIT_COMPLETE_IND_SZ 7 /* <- server handle */
33 #define IPA_QMI_DRIVER_INIT_COMPLETE_REQ_SZ 4 /* -> server handle */
34 #define IPA_QMI_DRIVER_INIT_COMPLETE_RSP_SZ 7 /* <- server handle */
36 /* Maximum size of messages we expect the AP to receive (max of above) */
37 #define IPA_QMI_SERVER_MAX_RCV_SZ 8
38 #define IPA_QMI_CLIENT_MAX_RCV_SZ 25
40 /* Request message for the IPA_QMI_INDICATION_REGISTER request */
41 struct ipa_indication_register_req
{
42 u8 master_driver_init_complete_valid
;
43 u8 master_driver_init_complete
;
44 u8 data_usage_quota_reached_valid
;
45 u8 data_usage_quota_reached
;
46 u8 ipa_mhi_ready_ind_valid
;
48 u8 endpoint_desc_ind_valid
;
50 u8 bw_change_ind_valid
;
54 /* The response to a IPA_QMI_INDICATION_REGISTER request consists only of
55 * a standard QMI response.
57 struct ipa_indication_register_rsp
{
58 struct qmi_response_type_v01 rsp
;
61 /* Request message for the IPA_QMI_DRIVER_INIT_COMPLETE request */
62 struct ipa_driver_init_complete_req
{
66 /* The response to a IPA_QMI_DRIVER_INIT_COMPLETE request consists only
67 * of a standard QMI response.
69 struct ipa_driver_init_complete_rsp
{
70 struct qmi_response_type_v01 rsp
;
73 /* The message for the IPA_QMI_INIT_COMPLETE_IND indication consists
74 * only of a standard QMI response.
76 struct ipa_init_complete_ind
{
77 struct qmi_response_type_v01 status
;
80 /* The AP tells the modem its platform type. We assume Android. */
81 enum ipa_platform_type
{
82 IPA_QMI_PLATFORM_TYPE_INVALID
= 0x0, /* Invalid */
83 IPA_QMI_PLATFORM_TYPE_TN
= 0x1, /* Data card */
84 IPA_QMI_PLATFORM_TYPE_LE
= 0x2, /* Data router */
85 IPA_QMI_PLATFORM_TYPE_MSM_ANDROID
= 0x3, /* Android MSM */
86 IPA_QMI_PLATFORM_TYPE_MSM_WINDOWS
= 0x4, /* Windows MSM */
87 IPA_QMI_PLATFORM_TYPE_MSM_QNX_V01
= 0x5, /* QNX MSM */
90 /* This defines the start and end offset of a range of memory. The start
91 * value is a byte offset relative to the start of IPA shared memory. The
92 * end value is the last addressable unit *within* the range. Typically
93 * the end value is in units of bytes, however it can also be a maximum
96 struct ipa_mem_bounds
{
101 /* This defines the location and size of an array. The start value
102 * is an offset relative to the start of IPA shared memory. The
103 * size of the array is implied by the number of entries (the entry
104 * size is assumed to be known).
106 struct ipa_mem_array
{
111 /* This defines the location and size of a range of memory. The
112 * start is an offset relative to the start of IPA shared memory.
113 * This differs from the ipa_mem_bounds structure in that the size
114 * (in bytes) of the memory region is specified rather than the
115 * offset of its last byte.
117 struct ipa_mem_range
{
122 /* The message for the IPA_QMI_INIT_DRIVER request contains information
123 * from the AP that affects modem initialization.
125 struct ipa_init_modem_driver_req
{
126 u8 platform_type_valid
;
127 u32 platform_type
; /* enum ipa_platform_type */
129 /* Modem header table information. This defines the IPA shared
130 * memory in which the modem may insert header table entries.
132 u8 hdr_tbl_info_valid
;
133 struct ipa_mem_bounds hdr_tbl_info
;
135 /* Routing table information. These define the location and maximum
136 * *index* (not byte) for the modem portion of non-hashable IPv4 and
137 * IPv6 routing tables. The start values are byte offsets relative
138 * to the start of IPA shared memory.
140 u8 v4_route_tbl_info_valid
;
141 struct ipa_mem_bounds v4_route_tbl_info
;
142 u8 v6_route_tbl_info_valid
;
143 struct ipa_mem_bounds v6_route_tbl_info
;
145 /* Filter table information. These define the location of the
146 * non-hashable IPv4 and IPv6 filter tables. The start values are
147 * byte offsets relative to the start of IPA shared memory.
149 u8 v4_filter_tbl_start_valid
;
150 u32 v4_filter_tbl_start
;
151 u8 v6_filter_tbl_start_valid
;
152 u32 v6_filter_tbl_start
;
154 /* Modem memory information. This defines the location and
155 * size of memory available for the modem to use.
157 u8 modem_mem_info_valid
;
158 struct ipa_mem_range modem_mem_info
;
160 /* This defines the destination endpoint on the AP to which
161 * the modem driver can send control commands. Must be less
162 * than ipa_endpoint_max().
164 u8 ctrl_comm_dest_end_pt_valid
;
165 u32 ctrl_comm_dest_end_pt
;
167 /* This defines whether the modem should load the microcontroller
168 * or not. It is unnecessary to reload it if the modem is being
171 * NOTE: this field is named "is_ssr_bootup" elsewhere.
173 u8 skip_uc_load_valid
;
176 /* Processing context memory information. This defines the memory in
177 * which the modem may insert header processing context table entries.
179 u8 hdr_proc_ctx_tbl_info_valid
;
180 struct ipa_mem_bounds hdr_proc_ctx_tbl_info
;
182 /* Compression command memory information. This defines the memory
183 * in which the modem may insert compression/decompression commands.
185 u8 zip_tbl_info_valid
;
186 struct ipa_mem_bounds zip_tbl_info
;
188 /* Routing table information. These define the location and maximum
189 * *index* (not byte) for the modem portion of hashable IPv4 and IPv6
190 * routing tables (if supported by hardware). The start values are
191 * byte offsets relative to the start of IPA shared memory.
193 u8 v4_hash_route_tbl_info_valid
;
194 struct ipa_mem_bounds v4_hash_route_tbl_info
;
195 u8 v6_hash_route_tbl_info_valid
;
196 struct ipa_mem_bounds v6_hash_route_tbl_info
;
198 /* Filter table information. These define the location and size
199 * of hashable IPv4 and IPv6 filter tables (if supported by hardware).
200 * The start values are byte offsets relative to the start of IPA
203 u8 v4_hash_filter_tbl_start_valid
;
204 u32 v4_hash_filter_tbl_start
;
205 u8 v6_hash_filter_tbl_start_valid
;
206 u32 v6_hash_filter_tbl_start
;
208 /* Statistics information. These define the locations of the
209 * first and last statistics sub-regions. (IPA v4.0 and above)
211 u8 hw_stats_quota_base_addr_valid
;
212 u32 hw_stats_quota_base_addr
;
213 u8 hw_stats_quota_size_valid
;
214 u32 hw_stats_quota_size
;
215 u8 hw_stats_drop_base_addr_valid
;
216 u32 hw_stats_drop_base_addr
;
217 u8 hw_stats_drop_size_valid
;
218 u32 hw_stats_drop_size
;
221 /* The response to a IPA_QMI_INIT_DRIVER request begins with a standard
222 * QMI response, but contains other information as well. Currently we
223 * simply wait for the INIT_DRIVER transaction to complete and
224 * ignore any other data that might be returned.
226 struct ipa_init_modem_driver_rsp
{
227 struct qmi_response_type_v01 rsp
;
229 /* This defines the destination endpoint on the modem to which
230 * the AP driver can send control commands. Must be less than
231 * ipa_endpoint_max().
233 u8 ctrl_comm_dest_end_pt_valid
;
234 u32 ctrl_comm_dest_end_pt
;
236 /* This defines the default endpoint. The AP driver is not
237 * required to configure the hardware with this value. Must
238 * be less than ipa_endpoint_max().
240 u8 default_end_pt_valid
;
243 /* This defines whether a second handshake is required to complete
246 u8 modem_driver_init_pending_valid
;
247 u8 modem_driver_init_pending
;
250 /* Message structure definitions defined in "ipa_qmi_msg.c" */
251 extern const struct qmi_elem_info ipa_indication_register_req_ei
[];
252 extern const struct qmi_elem_info ipa_indication_register_rsp_ei
[];
253 extern const struct qmi_elem_info ipa_driver_init_complete_req_ei
[];
254 extern const struct qmi_elem_info ipa_driver_init_complete_rsp_ei
[];
255 extern const struct qmi_elem_info ipa_init_complete_ind_ei
[];
256 extern const struct qmi_elem_info ipa_mem_bounds_ei
[];
257 extern const struct qmi_elem_info ipa_mem_array_ei
[];
258 extern const struct qmi_elem_info ipa_mem_range_ei
[];
259 extern const struct qmi_elem_info ipa_init_modem_driver_req_ei
[];
260 extern const struct qmi_elem_info ipa_init_modem_driver_rsp_ei
[];
262 #endif /* !_IPA_QMI_MSG_H_ */