File Index
Files and directories
Sign in
FILE

ipa_qmi_msg.h

File preview with syntax highlighting.

linux-6.19.14/drivers/net/ipa/ipa_qmi_msg.h C
  1/* SPDX-License-Identifier: GPL-2.0 */
  2
  3/* Copyright (c) 2018, The Linux Foundation. All rights reserved.
  4 * Copyright (C) 2018-2024 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
 13#include <linux/soc/qcom/qmi.h>
 14
 15/* Request/response/indication QMI message ids used for IPA.  Receiving
 16 * end issues a response for requests; indications require no response.
 17 */
 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 */
 22
 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.
 27 */
 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 */
 35
 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
 39
 40/* Request message for the IPA_QMI_INDICATION_REGISTER request */
 41struct 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;
 47	u8 ipa_mhi_ready_ind;
 48	u8 endpoint_desc_ind_valid;
 49	u8 endpoint_desc_ind;
 50	u8 bw_change_ind_valid;
 51	u8 bw_change_ind;
 52};
 53
 54/* The response to a IPA_QMI_INDICATION_REGISTER request consists only of
 55 * a standard QMI response.
 56 */
 57struct ipa_indication_register_rsp {
 58	struct qmi_response_type_v01 rsp;
 59};
 60
 61/* Request message for the IPA_QMI_DRIVER_INIT_COMPLETE request */
 62struct ipa_driver_init_complete_req {
 63	u8 status;
 64};
 65
 66/* The response to a IPA_QMI_DRIVER_INIT_COMPLETE request consists only
 67 * of a standard QMI response.
 68 */
 69struct ipa_driver_init_complete_rsp {
 70	struct qmi_response_type_v01 rsp;
 71};
 72
 73/* The message for the IPA_QMI_INIT_COMPLETE_IND indication consists
 74 * only of a standard QMI response.
 75 */
 76struct ipa_init_complete_ind {
 77	struct qmi_response_type_v01 status;
 78};
 79
 80/* The AP tells the modem its platform type.  We assume Android. */
 81enum 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 */
 88};
 89
 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
 94 * array index value.
 95 */
 96struct ipa_mem_bounds {
 97	u32 start;
 98	u32 end;
 99};
100
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).
105 */
106struct ipa_mem_array {
107	u32 start;
108	u32 count;
109};
110
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.
116 */
117struct ipa_mem_range {
118	u32 start;
119	u32 size;
120};
121
122/* The message for the IPA_QMI_INIT_DRIVER request contains information
123 * from the AP that affects modem initialization.
124 */
125struct ipa_init_modem_driver_req {
126	u8			platform_type_valid;
127	u32			platform_type;	/* enum ipa_platform_type */
128
129	/* Modem header table information.  This defines the IPA shared
130	 * memory in which the modem may insert header table entries.
131	 */
132	u8			hdr_tbl_info_valid;
133	struct ipa_mem_bounds	hdr_tbl_info;
134
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.
139	 */
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;
144
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.
148	 */
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;
153
154	/* Modem memory information.  This defines the location and
155	 * size of memory available for the modem to use.
156	 */
157	u8			modem_mem_info_valid;
158	struct ipa_mem_range	modem_mem_info;
159
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().
163	 */
164	u8			ctrl_comm_dest_end_pt_valid;
165	u32			ctrl_comm_dest_end_pt;
166
167	/* This defines whether the modem should load the microcontroller
168	 * or not.  It is unnecessary to reload it if the modem is being
169	 * restarted.
170	 *
171	 * NOTE: this field is named "is_ssr_bootup" elsewhere.
172	 */
173	u8			skip_uc_load_valid;
174	u8			skip_uc_load;
175
176	/* Processing context memory information.  This defines the memory in
177	 * which the modem may insert header processing context table entries.
178	 */
179	u8			hdr_proc_ctx_tbl_info_valid;
180	struct ipa_mem_bounds	hdr_proc_ctx_tbl_info;
181
182	/* Compression command memory information.  This defines the memory
183	 * in which the modem may insert compression/decompression commands.
184	 */
185	u8			zip_tbl_info_valid;
186	struct ipa_mem_bounds	zip_tbl_info;
187
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.
192	 */
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;
197
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
201	 * shared memory.
202	 */
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;
207
208	/* Statistics information.  These define the locations of the
209	 * first and last statistics sub-regions.  (IPA v4.0 and above)
210	 */
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;
219};
220
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.
225 */
226struct ipa_init_modem_driver_rsp {
227	struct qmi_response_type_v01	rsp;
228
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().
232	 */
233	u8				ctrl_comm_dest_end_pt_valid;
234	u32				ctrl_comm_dest_end_pt;
235
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().
239	 */
240	u8				default_end_pt_valid;
241	u32				default_end_pt;
242
243	/* This defines whether a second handshake is required to complete
244	 * initialization.
245	 */
246	u8				modem_driver_init_pending_valid;
247	u8				modem_driver_init_pending;
248};
249
250/* Message structure definitions defined in "ipa_qmi_msg.c" */
251extern const struct qmi_elem_info ipa_indication_register_req_ei[];
252extern const struct qmi_elem_info ipa_indication_register_rsp_ei[];
253extern const struct qmi_elem_info ipa_driver_init_complete_req_ei[];
254extern const struct qmi_elem_info ipa_driver_init_complete_rsp_ei[];
255extern const struct qmi_elem_info ipa_init_complete_ind_ei[];
256extern const struct qmi_elem_info ipa_mem_bounds_ei[];
257extern const struct qmi_elem_info ipa_mem_array_ei[];
258extern const struct qmi_elem_info ipa_mem_range_ei[];
259extern const struct qmi_elem_info ipa_init_modem_driver_req_ei[];
260extern const struct qmi_elem_info ipa_init_modem_driver_rsp_ei[];
261
262#endif /* !_IPA_QMI_MSG_H_ */
~/ Read-only file preview.