]> git.itanic.dy.fi Git - linux-stable/blob - drivers/net/ipa/ipa_qmi_msg.h
495e85abe50bdb8a0e5b7f7dd3fc022449b73469
[linux-stable] / drivers / net / ipa / ipa_qmi_msg.h
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_ */