brintos

brintos / linux-shallow public Read only

0
0
Text · 9.0 KiB · 644b8c2 Raw
263 lines · 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.  Receiving16 * 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 include24 * the message data, along with type (1 byte) and length (2 byte)25 * information for each field.  The qmi_send_*() interfaces require26 * 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		838#define IPA_QMI_CLIENT_MAX_RCV_SZ		2539 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 of55 * 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 only67 * 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 consists74 * 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 start91 * value is a byte offset relative to the start of IPA shared memory.  The92 * end value is the last addressable unit *within* the range.  Typically93 * the end value is in units of bytes, however it can also be a maximum94 * 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 value102 * is an offset relative to the start of IPA shared memory.  The103 * size of the array is implied by the number of entries (the entry104 * 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.  The112 * start is an offset relative to the start of IPA shared memory.113 * This differs from the ipa_mem_bounds structure in that the size114 * (in bytes) of the memory region is specified rather than the115 * 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 information123 * 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 shared130	 * 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 maximum136	 * *index* (not byte) for the modem portion of non-hashable IPv4 and137	 * IPv6 routing tables.  The start values are byte offsets relative138	 * 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 the146	 * non-hashable IPv4 and IPv6 filter tables.  The start values are147	 * 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 and155	 * 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 which161	 * the modem driver can send control commands.  Must be less162	 * 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 microcontroller168	 * or not.  It is unnecessary to reload it if the modem is being169	 * 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 in177	 * 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 memory183	 * 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 maximum189	 * *index* (not byte) for the modem portion of hashable IPv4 and IPv6190	 * routing tables (if supported by hardware).  The start values are191	 * 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 size199	 * of hashable IPv4 and IPv6 filter tables (if supported by hardware).200	 * The start values are byte offsets relative to the start of IPA201	 * 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 the209	 * 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 standard222 * QMI response, but contains other information as well.  Currently we223 * simply wait for the INIT_DRIVER transaction to complete and224 * 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 which230	 * the AP driver can send control commands.  Must be less than231	 * 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 not237	 * required to configure the hardware with this value.  Must238	 * 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 complete244	 * 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_ */263