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 20 /* -> 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 u8 endpoint_desc_ind_valid; 48 u8 endpoint_desc_ind; 49 u8 bw_change_ind_valid; 50 u8 bw_change_ind; 51 }; 52 53 /* The response to a IPA_QMI_INDICATION_REGISTER request consists only of 54 * a standard QMI response. 55 */ 56 struct ipa_indication_register_rsp { 57 struct qmi_response_type_v01 rsp; 58 }; 59 60 /* Request message for the IPA_QMI_DRIVER_INIT_COMPLETE request */ 61 struct ipa_driver_init_complete_req { 62 u8 status; 63 }; 64 65 /* The response to a IPA_QMI_DRIVER_INIT_COMPLETE request consists only 66 * of a standard QMI response. 67 */ 68 struct ipa_driver_init_complete_rsp { 69 struct qmi_response_type_v01 rsp; 70 }; 71 72 /* The message for the IPA_QMI_INIT_COMPLETE_IND indication consists 73 * only of a standard QMI response. 74 */ 75 struct ipa_init_complete_ind { 76 struct qmi_response_type_v01 status; 77 }; 78 79 /* The AP tells the modem its platform type. We assume Android. */ 80 enum ipa_platform_type { 81 IPA_QMI_PLATFORM_TYPE_INVALID = 0x0, /* Invalid */ 82 IPA_QMI_PLATFORM_TYPE_TN = 0x1, /* Data card */ 83 IPA_QMI_PLATFORM_TYPE_LE = 0x2, /* Data router */ 84 IPA_QMI_PLATFORM_TYPE_MSM_ANDROID = 0x3, /* Android MSM */ 85 IPA_QMI_PLATFORM_TYPE_MSM_WINDOWS = 0x4, /* Windows MSM */ 86 IPA_QMI_PLATFORM_TYPE_MSM_QNX_V01 = 0x5, /* QNX MSM */ 87 }; 88 89 /* This defines the start and end offset of a range of memory. Both 90 * fields are offsets relative to the start of IPA shared memory. 91 * The end value is the last addressable byte *within* the range. 92 */ 93 struct ipa_mem_bounds { 94 u32 start; 95 u32 end; 96 }; 97 98 /* This defines the location and size of an array. The start value 99 * is an offset relative to the start of IPA shared memory. The 100 * size of the array is implied by the number of entries (the entry 101 * size is assumed to be known). 102 */ 103 struct ipa_mem_array { 104 u32 start; 105 u32 count; 106 }; 107 108 /* This defines the location and size of a range of memory. The 109 * start is an offset relative to the start of IPA shared memory. 110 * This differs from the ipa_mem_bounds structure in that the size 111 * (in bytes) of the memory region is specified rather than the 112 * offset of its last byte. 113 */ 114 struct ipa_mem_range { 115 u32 start; 116 u32 size; 117 }; 118 119 /* The message for the IPA_QMI_INIT_DRIVER request contains information 120 * from the AP that affects modem initialization. 121 */ 122 struct ipa_init_modem_driver_req { 123 u8 platform_type_valid; 124 u32 platform_type; /* enum ipa_platform_type */ 125 126 /* Modem header table information. This defines the IPA shared 127 * memory in which the modem may insert header table entries. 128 */ 129 u8 hdr_tbl_info_valid; 130 struct ipa_mem_bounds hdr_tbl_info; 131 132 /* Routing table information. These define the location and size of 133 * non-hashable IPv4 and IPv6 filter tables. The start values are 134 * offsets relative to the start of IPA shared memory. 135 */ 136 u8 v4_route_tbl_info_valid; 137 struct ipa_mem_array v4_route_tbl_info; 138 u8 v6_route_tbl_info_valid; 139 struct ipa_mem_array v6_route_tbl_info; 140 141 /* Filter table information. These define the location of the 142 * non-hashable IPv4 and IPv6 filter tables. The start values are 143 * offsets relative to the start of IPA shared memory. 144 */ 145 u8 v4_filter_tbl_start_valid; 146 u32 v4_filter_tbl_start; 147 u8 v6_filter_tbl_start_valid; 148 u32 v6_filter_tbl_start; 149 150 /* Modem memory information. This defines the location and 151 * size of memory available for the modem to use. 152 */ 153 u8 modem_mem_info_valid; 154 struct ipa_mem_range modem_mem_info; 155 156 /* This defines the destination endpoint on the AP to which 157 * the modem driver can send control commands. Must be less 158 * than ipa_endpoint_max(). 159 */ 160 u8 ctrl_comm_dest_end_pt_valid; 161 u32 ctrl_comm_dest_end_pt; 162 163 /* This defines whether the modem should load the microcontroller 164 * or not. It is unnecessary to reload it if the modem is being 165 * restarted. 166 * 167 * NOTE: this field is named "is_ssr_bootup" elsewhere. 168 */ 169 u8 skip_uc_load_valid; 170 u8 skip_uc_load; 171 172 /* Processing context memory information. This defines the memory in 173 * which the modem may insert header processing context table entries. 174 */ 175 u8 hdr_proc_ctx_tbl_info_valid; 176 struct ipa_mem_bounds hdr_proc_ctx_tbl_info; 177 178 /* Compression command memory information. This defines the memory 179 * in which the modem may insert compression/decompression commands. 180 */ 181 u8 zip_tbl_info_valid; 182 struct ipa_mem_bounds zip_tbl_info; 183 184 /* Routing table information. These define the location and size 185 * of hashable IPv4 and IPv6 filter tables. The start values are 186 * offsets relative to the start of IPA shared memory. 187 */ 188 u8 v4_hash_route_tbl_info_valid; 189 struct ipa_mem_array v4_hash_route_tbl_info; 190 u8 v6_hash_route_tbl_info_valid; 191 struct ipa_mem_array v6_hash_route_tbl_info; 192 193 /* Filter table information. These define the location and size 194 * of hashable IPv4 and IPv6 filter tables. The start values are 195 * offsets relative to the start of IPA shared memory. 196 */ 197 u8 v4_hash_filter_tbl_start_valid; 198 u32 v4_hash_filter_tbl_start; 199 u8 v6_hash_filter_tbl_start_valid; 200 u32 v6_hash_filter_tbl_start; 201 202 /* Statistics information. These define the locations of the 203 * first and last statistics sub-regions. (IPA v4.0 and above) 204 */ 205 u8 hw_stats_quota_base_addr_valid; 206 u32 hw_stats_quota_base_addr; 207 u8 hw_stats_quota_size_valid; 208 u32 hw_stats_quota_size; 209 u8 hw_stats_drop_base_addr_valid; 210 u32 hw_stats_drop_base_addr; 211 u8 hw_stats_drop_size_valid; 212 u32 hw_stats_drop_size; 213 }; 214 215 /* The response to a IPA_QMI_INIT_DRIVER request begins with a standard 216 * QMI response, but contains other information as well. Currently we 217 * simply wait for the INIT_DRIVER transaction to complete and 218 * ignore any other data that might be returned. 219 */ 220 struct ipa_init_modem_driver_rsp { 221 struct qmi_response_type_v01 rsp; 222 223 /* This defines the destination endpoint on the modem to which 224 * the AP driver can send control commands. Must be less than 225 * ipa_endpoint_max(). 226 */ 227 u8 ctrl_comm_dest_end_pt_valid; 228 u32 ctrl_comm_dest_end_pt; 229 230 /* This defines the default endpoint. The AP driver is not 231 * required to configure the hardware with this value. Must 232 * be less than ipa_endpoint_max(). 233 */ 234 u8 default_end_pt_valid; 235 u32 default_end_pt; 236 237 /* This defines whether a second handshake is required to complete 238 * initialization. 239 */ 240 u8 modem_driver_init_pending_valid; 241 u8 modem_driver_init_pending; 242 }; 243 244 /* Message structure definitions defined in "ipa_qmi_msg.c" */ 245 extern struct qmi_elem_info ipa_indication_register_req_ei[]; 246 extern struct qmi_elem_info ipa_indication_register_rsp_ei[]; 247 extern struct qmi_elem_info ipa_driver_init_complete_req_ei[]; 248 extern struct qmi_elem_info ipa_driver_init_complete_rsp_ei[]; 249 extern struct qmi_elem_info ipa_init_complete_ind_ei[]; 250 extern struct qmi_elem_info ipa_mem_bounds_ei[]; 251 extern struct qmi_elem_info ipa_mem_array_ei[]; 252 extern struct qmi_elem_info ipa_mem_range_ei[]; 253 extern struct qmi_elem_info ipa_init_modem_driver_req_ei[]; 254 extern struct qmi_elem_info ipa_init_modem_driver_rsp_ei[]; 255 256 #endif /* !_IPA_QMI_MSG_H_ */ 257