• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 #ifndef _IPA_QMI_MSG_H_
7 #define _IPA_QMI_MSG_H_
8 
9 /* === Only "ipa_qmi" and "ipa_qmi_msg.c" should include this file === */
10 
11 #include <linux/types.h>
12 #include <linux/soc/qcom/qmi.h>
13 
14 /* Request/response/indication QMI message ids used for IPA.  Receiving
15  * end issues a response for requests; indications require no response.
16  */
17 #define IPA_QMI_INDICATION_REGISTER	0x20	/* modem -> AP request */
18 #define IPA_QMI_INIT_DRIVER		0x21	/* AP -> modem request */
19 #define IPA_QMI_INIT_COMPLETE		0x22	/* AP -> modem indication */
20 #define IPA_QMI_DRIVER_INIT_COMPLETE	0x35	/* modem -> AP request */
21 
22 /* The maximum size required for message types.  These sizes include
23  * the message data, along with type (1 byte) and length (2 byte)
24  * information for each field.  The qmi_send_*() interfaces require
25  * the message size to be provided.
26  */
27 #define IPA_QMI_INDICATION_REGISTER_REQ_SZ	12	/* -> server handle */
28 #define IPA_QMI_INDICATION_REGISTER_RSP_SZ	7	/* <- server handle */
29 #define IPA_QMI_INIT_DRIVER_REQ_SZ		162	/* client handle -> */
30 #define IPA_QMI_INIT_DRIVER_RSP_SZ		25	/* client handle <- */
31 #define IPA_QMI_INIT_COMPLETE_IND_SZ		7	/* <- server handle */
32 #define IPA_QMI_DRIVER_INIT_COMPLETE_REQ_SZ	4	/* -> server handle */
33 #define IPA_QMI_DRIVER_INIT_COMPLETE_RSP_SZ	7	/* <- server handle */
34 
35 /* Maximum size of messages we expect the AP to receive (max of above) */
36 #define IPA_QMI_SERVER_MAX_RCV_SZ		8
37 #define IPA_QMI_CLIENT_MAX_RCV_SZ		25
38 
39 /* Request message for the IPA_QMI_INDICATION_REGISTER request */
40 struct ipa_indication_register_req {
41 	u8 master_driver_init_complete_valid;
42 	u8 master_driver_init_complete;
43 	u8 data_usage_quota_reached_valid;
44 	u8 data_usage_quota_reached;
45 	u8 ipa_mhi_ready_ind_valid;
46 	u8 ipa_mhi_ready_ind;
47 };
48 
49 /* The response to a IPA_QMI_INDICATION_REGISTER request consists only of
50  * a standard QMI response.
51  */
52 struct ipa_indication_register_rsp {
53 	struct qmi_response_type_v01 rsp;
54 };
55 
56 /* Request message for the IPA_QMI_DRIVER_INIT_COMPLETE request */
57 struct ipa_driver_init_complete_req {
58 	u8 status;
59 };
60 
61 /* The response to a IPA_QMI_DRIVER_INIT_COMPLETE request consists only
62  * of a standard QMI response.
63  */
64 struct ipa_driver_init_complete_rsp {
65 	struct qmi_response_type_v01 rsp;
66 };
67 
68 /* The message for the IPA_QMI_INIT_COMPLETE_IND indication consists
69  * only of a standard QMI response.
70  */
71 struct ipa_init_complete_ind {
72 	struct qmi_response_type_v01 status;
73 };
74 
75 /* The AP tells the modem its platform type.  We assume Android. */
76 enum ipa_platform_type {
77 	IPA_QMI_PLATFORM_TYPE_INVALID		= 0,	/* Invalid */
78 	IPA_QMI_PLATFORM_TYPE_TN		= 1,	/* Data card */
79 	IPA_QMI_PLATFORM_TYPE_LE		= 2,	/* Data router */
80 	IPA_QMI_PLATFORM_TYPE_MSM_ANDROID	= 3,	/* Android MSM */
81 	IPA_QMI_PLATFORM_TYPE_MSM_WINDOWS	= 4,	/* Windows MSM */
82 	IPA_QMI_PLATFORM_TYPE_MSM_QNX_V01	= 5,	/* QNX MSM */
83 };
84 
85 /* This defines the start and end offset of a range of memory.  The start
86  * value is a byte offset relative to the start of IPA shared memory.  The
87  * end value is the last addressable unit *within* the range.  Typically
88  * the end value is in units of bytes, however it can also be a maximum
89  * array index value.
90  */
91 struct ipa_mem_bounds {
92 	u32 start;
93 	u32 end;
94 };
95 
96 /* This defines the location and size of an array.  The start value
97  * is an offset relative to the start of IPA shared memory.  The
98  * size of the array is implied by the number of entries (the entry
99  * size is assumed to be known).
100  */
101 struct ipa_mem_array {
102 	u32 start;
103 	u32 count;
104 };
105 
106 /* This defines the location and size of a range of memory.  The
107  * start is an offset relative to the start of IPA shared memory.
108  * This differs from the ipa_mem_bounds structure in that the size
109  * (in bytes) of the memory region is specified rather than the
110  * offset of its last byte.
111  */
112 struct ipa_mem_range {
113 	u32 start;
114 	u32 size;
115 };
116 
117 /* The message for the IPA_QMI_INIT_DRIVER request contains information
118  * from the AP that affects modem initialization.
119  */
120 struct ipa_init_modem_driver_req {
121 	u8			platform_type_valid;
122 	u32			platform_type;	/* enum ipa_platform_type */
123 
124 	/* Modem header table information.  This defines the IPA shared
125 	 * memory in which the modem may insert header table entries.
126 	 */
127 	u8			hdr_tbl_info_valid;
128 	struct ipa_mem_bounds	hdr_tbl_info;
129 
130 	/* Routing table information.  These define the location and maximum
131 	 * *index* (not byte) for the modem portion of non-hashable IPv4 and
132 	 * IPv6 routing tables.  The start values are byte offsets relative
133 	 * to the start of IPA shared memory.
134 	 */
135 	u8			v4_route_tbl_info_valid;
136 	struct ipa_mem_bounds	v4_route_tbl_info;
137 	u8			v6_route_tbl_info_valid;
138 	struct ipa_mem_bounds	v6_route_tbl_info;
139 
140 	/* Filter table information.  These define the location of the
141 	 * non-hashable IPv4 and IPv6 filter tables.  The start values are
142 	 * byte offsets relative to the start of IPA shared memory.
143 	 */
144 	u8			v4_filter_tbl_start_valid;
145 	u32			v4_filter_tbl_start;
146 	u8			v6_filter_tbl_start_valid;
147 	u32			v6_filter_tbl_start;
148 
149 	/* Modem memory information.  This defines the location and
150 	 * size of memory available for the modem to use.
151 	 */
152 	u8			modem_mem_info_valid;
153 	struct ipa_mem_range	modem_mem_info;
154 
155 	/* This defines the destination endpoint on the AP to which
156 	 * the modem driver can send control commands.  Must be less
157 	 * than ipa_endpoint_max().
158 	 */
159 	u8			ctrl_comm_dest_end_pt_valid;
160 	u32			ctrl_comm_dest_end_pt;
161 
162 	/* This defines whether the modem should load the microcontroller
163 	 * or not.  It is unnecessary to reload it if the modem is being
164 	 * restarted.
165 	 *
166 	 * NOTE: this field is named "is_ssr_bootup" elsewhere.
167 	 */
168 	u8			skip_uc_load_valid;
169 	u8			skip_uc_load;
170 
171 	/* Processing context memory information.  This defines the memory in
172 	 * which the modem may insert header processing context table entries.
173 	 */
174 	u8			hdr_proc_ctx_tbl_info_valid;
175 	struct ipa_mem_bounds	hdr_proc_ctx_tbl_info;
176 
177 	/* Compression command memory information.  This defines the memory
178 	 * in which the modem may insert compression/decompression commands.
179 	 */
180 	u8			zip_tbl_info_valid;
181 	struct ipa_mem_bounds	zip_tbl_info;
182 
183 	/* Routing table information.  These define the location and maximum
184 	 * *index* (not byte) for the modem portion of hashable IPv4 and IPv6
185 	 * routing tables (if supported by hardware).  The start values are
186 	 * byte offsets relative to the start of IPA shared memory.
187 	 */
188 	u8			v4_hash_route_tbl_info_valid;
189 	struct ipa_mem_bounds	v4_hash_route_tbl_info;
190 	u8			v6_hash_route_tbl_info_valid;
191 	struct ipa_mem_bounds	v6_hash_route_tbl_info;
192 
193 	/* Filter table information.  These define the location and size
194 	 * of hashable IPv4 and IPv6 filter tables (if supported by hardware).
195 	 * The start values are byte offsets relative to the start of IPA
196 	 * shared memory.
197 	 */
198 	u8			v4_hash_filter_tbl_start_valid;
199 	u32			v4_hash_filter_tbl_start;
200 	u8			v6_hash_filter_tbl_start_valid;
201 	u32			v6_hash_filter_tbl_start;
202 
203 	/* Statistics information.  These define the locations of the
204 	 * first and last statistics sub-regions.  (IPA v4.0 and above)
205 	 */
206 	u8			hw_stats_quota_base_addr_valid;
207 	u32			hw_stats_quota_base_addr;
208 	u8			hw_stats_quota_size_valid;
209 	u32			hw_stats_quota_size;
210 	u8			hw_stats_drop_base_addr_valid;
211 	u32			hw_stats_drop_base_addr;
212 	u8			hw_stats_drop_size_valid;
213 	u32			hw_stats_drop_size;
214 };
215 
216 /* The response to a IPA_QMI_INIT_DRIVER request begins with a standard
217  * QMI response, but contains other information as well.  Currently we
218  * simply wait for the the INIT_DRIVER transaction to complete and
219  * ignore any other data that might be returned.
220  */
221 struct ipa_init_modem_driver_rsp {
222 	struct qmi_response_type_v01	rsp;
223 
224 	/* This defines the destination endpoint on the modem to which
225 	 * the AP driver can send control commands.  Must be less than
226 	 * ipa_endpoint_max().
227 	 */
228 	u8				ctrl_comm_dest_end_pt_valid;
229 	u32				ctrl_comm_dest_end_pt;
230 
231 	/* This defines the default endpoint.  The AP driver is not
232 	 * required to configure the hardware with this value.  Must
233 	 * be less than ipa_endpoint_max().
234 	 */
235 	u8				default_end_pt_valid;
236 	u32				default_end_pt;
237 
238 	/* This defines whether a second handshake is required to complete
239 	 * initialization.
240 	 */
241 	u8				modem_driver_init_pending_valid;
242 	u8				modem_driver_init_pending;
243 };
244 
245 /* Message structure definitions defined in "ipa_qmi_msg.c" */
246 extern struct qmi_elem_info ipa_indication_register_req_ei[];
247 extern struct qmi_elem_info ipa_indication_register_rsp_ei[];
248 extern struct qmi_elem_info ipa_driver_init_complete_req_ei[];
249 extern struct qmi_elem_info ipa_driver_init_complete_rsp_ei[];
250 extern struct qmi_elem_info ipa_init_complete_ind_ei[];
251 extern struct qmi_elem_info ipa_mem_bounds_ei[];
252 extern struct qmi_elem_info ipa_mem_array_ei[];
253 extern struct qmi_elem_info ipa_mem_range_ei[];
254 extern struct qmi_elem_info ipa_init_modem_driver_req_ei[];
255 extern struct qmi_elem_info ipa_init_modem_driver_rsp_ei[];
256 
257 #endif /* !_IPA_QMI_MSG_H_ */
258