cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

ipa_qmi_msg.h (8886B)


      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 */
     40struct 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 */
     56struct ipa_indication_register_rsp {
     57	struct qmi_response_type_v01 rsp;
     58};
     59
     60/* Request message for the IPA_QMI_DRIVER_INIT_COMPLETE request */
     61struct 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 */
     68struct 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 */
     75struct 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. */
     80enum 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 */
     93struct 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 */
    103struct 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 */
    114struct 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 */
    122struct 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 the INIT_DRIVER transaction to complete and
    218 * ignore any other data that might be returned.
    219 */
    220struct 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" */
    245extern struct qmi_elem_info ipa_indication_register_req_ei[];
    246extern struct qmi_elem_info ipa_indication_register_rsp_ei[];
    247extern struct qmi_elem_info ipa_driver_init_complete_req_ei[];
    248extern struct qmi_elem_info ipa_driver_init_complete_rsp_ei[];
    249extern struct qmi_elem_info ipa_init_complete_ind_ei[];
    250extern struct qmi_elem_info ipa_mem_bounds_ei[];
    251extern struct qmi_elem_info ipa_mem_array_ei[];
    252extern struct qmi_elem_info ipa_mem_range_ei[];
    253extern struct qmi_elem_info ipa_init_modem_driver_req_ei[];
    254extern struct qmi_elem_info ipa_init_modem_driver_rsp_ei[];
    255
    256#endif /* !_IPA_QMI_MSG_H_ */