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