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 */ 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; 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 */ 57 struct ipa_indication_register_rsp { 58 struct qmi_response_type_v01 rsp; 59 }; 60 61 /* Request message for the IPA_QMI_DRIVER_INIT_COMPLETE request */ 62 struct 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 */ 69 struct 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 */ 76 struct 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. */ 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 */ 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 */ 96 struct 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 */ 106 struct 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 */ 117 struct 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 */ 125 struct 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 */ 226 struct 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" */ 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[]; 261 262 #endif /* !_IPA_QMI_MSG_H_ */ 263