Home | History | Annotate | Download | only in CVE-2016-0844
      1 /**
      2  * Copyright (C) 2018 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions vand
     14  * limitations under the License.
     15  */
     16 #include <sys/types.h>
     17 #ifndef IPA_QMI_SERVICE_V01_H
     18 #define IPA_QMI_SERVICE_V01_H
     19 
     20 #define QMI_IPA_IPFLTR_NUM_IHL_RANGE_16_EQNS_V01 2
     21 #define QMI_IPA_IPFLTR_NUM_MEQ_32_EQNS_V01 2
     22 #define QMI_IPA_IPFLTR_NUM_IHL_MEQ_32_EQNS_V01 2
     23 #define QMI_IPA_IPFLTR_NUM_MEQ_128_EQNS_V01 2
     24 #define QMI_IPA_MAX_FILTERS_V01 64
     25 
     26 #define IPA_INT_MAX ((int)(~0U >> 1))
     27 #define IPA_INT_MIN (-IPA_INT_MAX - 1)
     28 
     29 enum ipa_qmi_result_type_v01 {
     30   IPA_QMI_RESULT_TYPE_MIN_ENUM_VAL_V01 = IPA_INT_MIN,
     31   IPA_QMI_RESULT_SUCCESS_V01 = 0,
     32   IPA_QMI_RESULT_FAILURE_V01 = 1,
     33   IPA_QMI_RESULT_TYPE_MAX_ENUM_VAL_V01 = IPA_INT_MAX,
     34 };
     35 
     36 enum ipa_qmi_error_type_v01 {
     37   IPA_QMI_ERROR_TYPE_MIN_ENUM_VAL_V01 = IPA_INT_MIN,
     38   IPA_QMI_ERR_NONE_V01 = 0x0000,
     39   IPA_QMI_ERR_MALFORMED_MSG_V01 = 0x0001,
     40   IPA_QMI_ERR_NO_MEMORY_V01 = 0x0002,
     41   IPA_QMI_ERR_INTERNAL_V01 = 0x0003,
     42   IPA_QMI_ERR_CLIENT_IDS_EXHAUSTED_V01 = 0x0005,
     43   IPA_QMI_ERR_INVALID_ID_V01 = 0x0029,
     44   IPA_QMI_ERR_ENCODING_V01 = 0x003A,
     45   IPA_QMI_ERR_INCOMPATIBLE_STATE_V01 = 0x005A,
     46   IPA_QMI_ERR_NOT_SUPPORTED_V01 = 0x005E,
     47   IPA_QMI_ERROR_TYPE_MAX_ENUM_VAL_V01 = IPA_INT_MAX,
     48 };
     49 
     50 struct ipa_qmi_response_type_v01 {
     51   enum ipa_qmi_result_type_v01 result;
     52   enum ipa_qmi_error_type_v01 error;
     53 };
     54 
     55 enum ipa_platform_type_enum_v01 {
     56   IPA_PLATFORM_TYPE_ENUM_MIN_ENUM_VAL_V01 = -2147483647,
     57   QMI_IPA_PLATFORM_TYPE_INVALID_V01 = 0,
     58   QMI_IPA_PLATFORM_TYPE_TN_V01 = 1,
     59   QMI_IPA_PLATFORM_TYPE_LE_V01 = 2,
     60   QMI_IPA_PLATFORM_TYPE_MSM_ANDROID_V01 = 3,
     61   QMI_IPA_PLATFORM_TYPE_MSM_WINDOWS_V01 = 4,
     62   QMI_IPA_PLATFORM_TYPE_MSM_QNX_V01 = 5,
     63   IPA_PLATFORM_TYPE_ENUM_MAX_ENUM_VAL_V01 = 2147483647
     64 };
     65 
     66 struct ipa_hdr_tbl_info_type_v01 {
     67   uint32_t modem_offset_start;
     68   uint32_t modem_offset_end;
     69 };
     70 
     71 struct ipa_route_tbl_info_type_v01 {
     72   uint32_t route_tbl_start_addr;
     73   uint32_t num_indices;
     74 };
     75 
     76 struct ipa_modem_mem_info_type_v01 {
     77   uint32_t block_start_addr;
     78   uint32_t size;
     79 };
     80 
     81 struct ipa_hdr_proc_ctx_tbl_info_type_v01 {
     82   uint32_t modem_offset_start;
     83   uint32_t modem_offset_end;
     84 };
     85 
     86 struct ipa_zip_tbl_info_type_v01 {
     87   uint32_t modem_offset_start;
     88   uint32_t modem_offset_end;
     89 };
     90 
     91 struct ipa_init_modem_driver_req_msg_v01 {
     92   uint8_t platform_type_valid;
     93   enum ipa_platform_type_enum_v01 platform_type;
     94   uint8_t hdr_tbl_info_valid;
     95   struct ipa_hdr_tbl_info_type_v01 hdr_tbl_info;
     96   uint8_t v4_route_tbl_info_valid;
     97   struct ipa_route_tbl_info_type_v01 v4_route_tbl_info;
     98   uint8_t v6_route_tbl_info_valid;
     99   struct ipa_route_tbl_info_type_v01 v6_route_tbl_info;
    100   uint8_t v4_filter_tbl_start_addr_valid;
    101   uint32_t v4_filter_tbl_start_addr;
    102   uint8_t v6_filter_tbl_start_addr_valid;
    103   uint32_t v6_filter_tbl_start_addr;
    104   uint8_t modem_mem_info_valid;
    105   struct ipa_modem_mem_info_type_v01 modem_mem_info;
    106   uint8_t ctrl_comm_dest_end_pt_valid;
    107   uint32_t ctrl_comm_dest_end_pt;
    108   uint8_t is_ssr_bootup_valid;
    109   uint8_t is_ssr_bootup;
    110   uint8_t hdr_proc_ctx_tbl_info_valid;
    111   struct ipa_hdr_proc_ctx_tbl_info_type_v01 hdr_proc_ctx_tbl_info;
    112   uint8_t zip_tbl_info_valid;
    113   struct ipa_zip_tbl_info_type_v01 zip_tbl_info;
    114 };
    115 
    116 struct ipa_init_modem_driver_resp_msg_v01 {
    117   struct ipa_qmi_response_type_v01 resp;
    118   uint8_t ctrl_comm_dest_end_pt_valid;
    119   uint32_t ctrl_comm_dest_end_pt;
    120   uint8_t default_end_pt_valid;
    121   uint32_t default_end_pt;
    122 };
    123 
    124 struct ipa_indication_reg_req_msg_v01 {
    125   uint8_t master_driver_init_complete_valid;
    126   uint8_t master_driver_init_complete;
    127 };
    128 
    129 struct ipa_indication_reg_resp_msg_v01 {
    130   struct ipa_qmi_response_type_v01 resp;
    131 };
    132 
    133 struct ipa_master_driver_init_complt_ind_msg_v01 {
    134   struct ipa_qmi_response_type_v01 master_driver_init_status;
    135 };
    136 
    137 struct ipa_ipfltr_range_eq_16_type_v01 {
    138   uint8_t offset;
    139   uint16_t range_low;
    140   uint16_t range_high;
    141 };
    142 
    143 struct ipa_ipfltr_mask_eq_32_type_v01 {
    144   uint8_t offset;
    145   uint32_t mask;
    146   uint32_t value;
    147 };
    148 
    149 struct ipa_ipfltr_eq_16_type_v01 {
    150   uint8_t offset;
    151   uint16_t value;
    152 };
    153 
    154 struct ipa_ipfltr_eq_32_type_v01 {
    155   uint8_t offset;
    156   uint32_t value;
    157 };
    158 
    159 struct ipa_ipfltr_mask_eq_128_type_v01 {
    160   uint8_t offset;
    161   uint8_t mask[16];
    162   uint8_t value[16];
    163 };
    164 
    165 struct ipa_filter_rule_type_v01 {
    166   uint16_t rule_eq_bitmap;
    167   uint8_t tos_eq_present;
    168   uint8_t tos_eq;
    169   uint8_t protocol_eq_present;
    170   uint8_t protocol_eq;
    171   uint8_t num_ihl_offset_range_16;
    172 
    173   struct ipa_ipfltr_range_eq_16_type_v01
    174       ihl_offset_range_16[QMI_IPA_IPFLTR_NUM_IHL_RANGE_16_EQNS_V01];
    175 
    176   uint8_t num_offset_meq_32;
    177 
    178   struct ipa_ipfltr_mask_eq_32_type_v01
    179       offset_meq_32[QMI_IPA_IPFLTR_NUM_MEQ_32_EQNS_V01];
    180 
    181   uint8_t tc_eq_present;
    182   uint8_t tc_eq;
    183   uint8_t flow_eq_present;
    184   uint32_t flow_eq;
    185   uint8_t ihl_offset_eq_16_present;
    186   struct ipa_ipfltr_eq_16_type_v01 ihl_offset_eq_16;
    187   uint8_t ihl_offset_eq_32_present;
    188   struct ipa_ipfltr_eq_32_type_v01 ihl_offset_eq_32;
    189   uint8_t num_ihl_offset_meq_32;
    190   struct ipa_ipfltr_mask_eq_32_type_v01
    191       ihl_offset_meq_32[QMI_IPA_IPFLTR_NUM_IHL_MEQ_32_EQNS_V01];
    192   uint8_t num_offset_meq_128;
    193   struct ipa_ipfltr_mask_eq_128_type_v01
    194       offset_meq_128[QMI_IPA_IPFLTR_NUM_MEQ_128_EQNS_V01];
    195 
    196   uint8_t metadata_meq32_present;
    197 
    198   struct ipa_ipfltr_mask_eq_32_type_v01 metadata_meq32;
    199   uint8_t ipv4_frag_eq_present;
    200 };
    201 
    202 enum ipa_ip_type_enum_v01 {
    203   IPA_IP_TYPE_ENUM_MIN_ENUM_VAL_V01 = -2147483647,
    204   QMI_IPA_IP_TYPE_INVALID_V01 = 0,
    205   QMI_IPA_IP_TYPE_V4_V01 = 1,
    206   QMI_IPA_IP_TYPE_V6_V01 = 2,
    207   QMI_IPA_IP_TYPE_V4V6_V01 = 3,
    208   IPA_IP_TYPE_ENUM_MAX_ENUM_VAL_V01 = 2147483647
    209 };
    210 
    211 enum ipa_filter_action_enum_v01 {
    212   IPA_FILTER_ACTION_ENUM_MIN_ENUM_VAL_V01 = -2147483647,
    213   QMI_IPA_FILTER_ACTION_INVALID_V01 = 0,
    214   QMI_IPA_FILTER_ACTION_SRC_NAT_V01 = 1,
    215   QMI_IPA_FILTER_ACTION_DST_NAT_V01 = 2,
    216   QMI_IPA_FILTER_ACTION_ROUTING_V01 = 3,
    217   QMI_IPA_FILTER_ACTION_EXCEPTION_V01 = 4,
    218   IPA_FILTER_ACTION_ENUM_MAX_ENUM_VAL_V01 = 2147483647
    219 };
    220 
    221 struct ipa_filter_spec_type_v01 {
    222   uint32_t filter_spec_identifier;
    223   enum ipa_ip_type_enum_v01 ip_type;
    224   struct ipa_filter_rule_type_v01 filter_rule;
    225   enum ipa_filter_action_enum_v01 filter_action;
    226   uint8_t is_routing_table_index_valid;
    227   uint32_t route_table_index;
    228   uint8_t is_mux_id_valid;
    229   uint32_t mux_id;
    230 };
    231 
    232 struct ipa_install_fltr_rule_req_msg_v01 {
    233   uint8_t filter_spec_list_valid;
    234   uint32_t filter_spec_list_len;
    235   struct ipa_filter_spec_type_v01 filter_spec_list[QMI_IPA_MAX_FILTERS_V01];
    236   uint8_t source_pipe_index_valid;
    237   uint32_t source_pipe_index;
    238   uint8_t num_ipv4_filters_valid;
    239   uint32_t num_ipv4_filters;
    240   uint8_t num_ipv6_filters_valid;
    241   uint32_t num_ipv6_filters;
    242   uint8_t xlat_filter_indices_list_valid;
    243   uint32_t xlat_filter_indices_list_len;
    244   uint32_t xlat_filter_indices_list[QMI_IPA_MAX_FILTERS_V01];
    245 };
    246 
    247 struct ipa_filter_rule_identifier_to_handle_map_v01 {
    248   uint32_t filter_spec_identifier;
    249   uint32_t filter_handle;
    250 };
    251 
    252 struct ipa_install_fltr_rule_resp_msg_v01 {
    253   struct ipa_qmi_response_type_v01 resp;
    254   uint8_t filter_handle_list_valid;
    255   uint32_t filter_handle_list_len;
    256   struct ipa_filter_rule_identifier_to_handle_map_v01
    257       filter_handle_list[QMI_IPA_MAX_FILTERS_V01];
    258 };
    259 
    260 struct ipa_filter_handle_to_index_map_v01 {
    261   uint32_t filter_handle;
    262   uint32_t filter_index;
    263 };
    264 
    265 struct ipa_fltr_installed_notif_req_msg_v01 {
    266   uint32_t source_pipe_index;
    267   enum ipa_qmi_result_type_v01 install_status;
    268   uint32_t filter_index_list_len;
    269   struct ipa_filter_handle_to_index_map_v01
    270       filter_index_list[QMI_IPA_MAX_FILTERS_V01];
    271 
    272   uint8_t embedded_pipe_index_valid;
    273   uint32_t embedded_pipe_index;
    274   uint8_t retain_header_valid;
    275   uint8_t retain_header;
    276   uint8_t embedded_call_mux_id_valid;
    277   uint32_t embedded_call_mux_id;
    278   uint8_t num_ipv4_filters_valid;
    279   uint32_t num_ipv4_filters;
    280   uint8_t num_ipv6_filters_valid;
    281   uint32_t num_ipv6_filters;
    282   uint8_t start_ipv4_filter_idx_valid;
    283   uint32_t start_ipv4_filter_idx;
    284   uint8_t start_ipv6_filter_idx_valid;
    285   uint32_t start_ipv6_filter_idx;
    286 };
    287 
    288 struct ipa_fltr_installed_notif_resp_msg_v01 {
    289   struct ipa_qmi_response_type_v01 resp;
    290 };
    291 
    292 struct ipa_enable_force_clear_datapath_req_msg_v01 {
    293   uint32_t source_pipe_bitmask;
    294   uint32_t request_id;
    295   uint8_t throttle_source_valid;
    296   uint8_t throttle_source;
    297 };
    298 
    299 struct ipa_enable_force_clear_datapath_resp_msg_v01 {
    300   struct ipa_qmi_response_type_v01 resp;
    301 };
    302 
    303 struct ipa_disable_force_clear_datapath_req_msg_v01 {
    304   uint32_t request_id;
    305 };
    306 
    307 struct ipa_disable_force_clear_datapath_resp_msg_v01 {
    308   struct ipa_qmi_response_type_v01 resp;
    309 };
    310 
    311 enum ipa_peripheral_speed_enum_v01 {
    312   IPA_PERIPHERAL_SPEED_ENUM_MIN_ENUM_VAL_V01 = -2147483647,
    313   QMI_IPA_PER_USB_FS_V01 = 1,
    314   QMI_IPA_PER_USB_HS_V01 = 2,
    315   QMI_IPA_PER_USB_SS_V01 = 3,
    316   IPA_PERIPHERAL_SPEED_ENUM_MAX_ENUM_VAL_V01 = 2147483647
    317 };
    318 
    319 enum ipa_pipe_mode_enum_v01 {
    320   IPA_PIPE_MODE_ENUM_MIN_ENUM_VAL_V01 = -2147483647,
    321   QMI_IPA_PIPE_MODE_HW_V01 = 1,
    322   QMI_IPA_PIPE_MODE_SW_V01 = 2,
    323   IPA_PIPE_MODE_ENUM_MAX_ENUM_VAL_V01 = 2147483647
    324 };
    325 
    326 enum ipa_peripheral_type_enum_v01 {
    327   IPA_PERIPHERAL_TYPE_ENUM_MIN_ENUM_VAL_V01 = -2147483647,
    328   QMI_IPA_PERIPHERAL_USB_V01 = 1,
    329   QMI_IPA_PERIPHERAL_HSIC_V01 = 2,
    330   QMI_IPA_PERIPHERAL_PCIE_V01 = 3,
    331   IPA_PERIPHERAL_TYPE_ENUM_MAX_ENUM_VAL_V01 = 2147483647
    332 };
    333 
    334 struct ipa_config_req_msg_v01 {
    335   uint8_t peripheral_type_valid;
    336   enum ipa_peripheral_type_enum_v01 peripheral_type;
    337   uint8_t hw_deaggr_supported_valid;
    338   uint8_t hw_deaggr_supported;
    339   uint8_t max_aggr_frame_size_valid;
    340   uint32_t max_aggr_frame_size;
    341   uint8_t ipa_ingress_pipe_mode_valid;
    342   enum ipa_pipe_mode_enum_v01 ipa_ingress_pipe_mode;
    343   uint8_t peripheral_speed_info_valid;
    344   enum ipa_peripheral_speed_enum_v01 peripheral_speed_info;
    345   uint8_t dl_accumulation_time_limit_valid;
    346   uint32_t dl_accumulation_time_limit;
    347   uint8_t dl_accumulation_pkt_limit_valid;
    348   uint32_t dl_accumulation_pkt_limit;
    349   uint8_t dl_accumulation_byte_limit_valid;
    350   uint32_t dl_accumulation_byte_limit;
    351   uint8_t ul_accumulation_time_limit_valid;
    352   uint32_t ul_accumulation_time_limit;
    353   uint8_t hw_control_flags_valid;
    354   uint32_t hw_control_flags;
    355   uint8_t ul_msi_event_threshold_valid;
    356   uint32_t ul_msi_event_threshold;
    357   uint8_t dl_msi_event_threshold_valid;
    358   uint32_t dl_msi_event_threshold;
    359 };
    360 
    361 struct ipa_config_resp_msg_v01 {
    362   struct ipa_qmi_response_type_v01 resp;
    363 };
    364 
    365 /*Service Message Definition*/
    366 #define QMI_IPA_INDICATION_REGISTER_REQ_V01 0x0020
    367 #define QMI_IPA_INDICATION_REGISTER_RESP_V01 0x0020
    368 #define QMI_IPA_INIT_MODEM_DRIVER_REQ_V01 0x0021
    369 #define QMI_IPA_INIT_MODEM_DRIVER_RESP_V01 0x0021
    370 #define QMI_IPA_MASTER_DRIVER_INIT_COMPLETE_IND_V01 0x0022
    371 #define QMI_IPA_INSTALL_FILTER_RULE_REQ_V01 0x0023
    372 #define QMI_IPA_INSTALL_FILTER_RULE_RESP_V01 0x0023
    373 #define QMI_IPA_FILTER_INSTALLED_NOTIF_REQ_V01 0x0024
    374 #define QMI_IPA_FILTER_INSTALLED_NOTIF_RESP_V01 0x0024
    375 #define QMI_IPA_ENABLE_FORCE_CLEAR_DATAPATH_REQ_V01 0x0025
    376 #define QMI_IPA_ENABLE_FORCE_CLEAR_DATAPATH_RESP_V01 0x0025
    377 #define QMI_IPA_DISABLE_FORCE_CLEAR_DATAPATH_REQ_V01 0x0026
    378 #define QMI_IPA_DISABLE_FORCE_CLEAR_DATAPATH_RESP_V01 0x0026
    379 #define QMI_IPA_CONFIG_REQ_V01 0x0027
    380 #define QMI_IPA_CONFIG_RESP_V01 0x0027
    381 
    382 /* add for max length*/
    383 #define QMI_IPA_INIT_MODEM_DRIVER_REQ_MAX_MSG_LEN_V01 98
    384 #define QMI_IPA_INIT_MODEM_DRIVER_RESP_MAX_MSG_LEN_V01 21
    385 #define QMI_IPA_INDICATION_REGISTER_REQ_MAX_MSG_LEN_V01 4
    386 #define QMI_IPA_INDICATION_REGISTER_RESP_MAX_MSG_LEN_V01 7
    387 #define QMI_IPA_INSTALL_FILTER_RULE_REQ_MAX_MSG_LEN_V01 11293
    388 #define QMI_IPA_INSTALL_FILTER_RULE_RESP_MAX_MSG_LEN_V01 523
    389 #define QMI_IPA_FILTER_INSTALLED_NOTIF_REQ_MAX_MSG_LEN_V01 574
    390 #define QMI_IPA_FILTER_INSTALLED_NOTIF_RESP_MAX_MSG_LEN_V01 7
    391 #define QMI_IPA_MASTER_DRIVER_INIT_COMPLETE_IND_MAX_MSG_LEN_V01 7
    392 
    393 #define QMI_IPA_ENABLE_FORCE_CLEAR_DATAPATH_REQ_MAX_MSG_LEN_V01 18
    394 #define QMI_IPA_DISABLE_FORCE_CLEAR_DATAPATH_REQ_MAX_MSG_LEN_V01 7
    395 #define QMI_IPA_ENABLE_FORCE_CLEAR_DATAPATH_RESP_MAX_MSG_LEN_V01 7
    396 #define QMI_IPA_DISABLE_FORCE_CLEAR_DATAPATH_RESP_MAX_MSG_LEN_V01 7
    397 
    398 #define QMI_IPA_CONFIG_REQ_MAX_MSG_LEN_V01 81
    399 #define QMI_IPA_CONFIG_RESP_MAX_MSG_LEN_V01 7
    400 /* Service Object Accessor */
    401 
    402 #endif /* IPA_QMI_SERVICE_V01_H */
    403 
    404 #ifndef _UAPI_MSM_IPC_H_
    405 #define _UAPI_MSM_IPC_H_
    406 
    407 #include <linux/ioctl.h>
    408 #include <linux/types.h>
    409 
    410 struct msm_ipc_port_addr {
    411   uint32_t node_id;
    412   uint32_t port_id;
    413 };
    414 
    415 struct msm_ipc_port_name {
    416   uint32_t service;
    417   uint32_t instance;
    418 };
    419 
    420 struct msm_ipc_addr {
    421   unsigned char addrtype;
    422   union {
    423     struct msm_ipc_port_addr port_addr;
    424     struct msm_ipc_port_name port_name;
    425   } addr;
    426 };
    427 
    428 #define MSM_IPC_WAIT_FOREVER (~0) /* timeout for permanent subscription */
    429 
    430 #ifndef AF_MSM_IPC
    431 #define AF_MSM_IPC 27
    432 #endif
    433 
    434 #ifndef PF_MSM_IPC
    435 #define PF_MSM_IPC AF_MSM_IPC
    436 #endif
    437 
    438 #define MSM_IPC_ADDR_NAME 1
    439 #define MSM_IPC_ADDR_ID 2
    440 
    441 struct sockaddr_msm_ipc {
    442   unsigned short family;
    443   struct msm_ipc_addr address;
    444   unsigned char reserved;
    445 };
    446 
    447 struct config_sec_rules_args {
    448   int num_group_info;
    449   uint32_t service_id;
    450   uint32_t instance_id;
    451   unsigned reserved;
    452   gid_t group_id[0];
    453 };
    454 
    455 #define IPC_ROUTER_IOCTL_MAGIC (0xC3)
    456 
    457 #define IPC_ROUTER_IOCTL_GET_VERSION                                           \
    458   _IOR(IPC_ROUTER_IOCTL_MAGIC, 0, unsigned int)
    459 
    460 #define IPC_ROUTER_IOCTL_GET_MTU _IOR(IPC_ROUTER_IOCTL_MAGIC, 1, unsigned int)
    461 
    462 #define IPC_ROUTER_IOCTL_LOOKUP_SERVER                                         \
    463   _IOWR(IPC_ROUTER_IOCTL_MAGIC, 2, struct sockaddr_msm_ipc)
    464 
    465 #define IPC_ROUTER_IOCTL_GET_CURR_PKT_SIZE                                     \
    466   _IOR(IPC_ROUTER_IOCTL_MAGIC, 3, unsigned int)
    467 
    468 #define IPC_ROUTER_IOCTL_BIND_CONTROL_PORT                                     \
    469   _IOR(IPC_ROUTER_IOCTL_MAGIC, 4, unsigned int)
    470 
    471 #define IPC_ROUTER_IOCTL_CONFIG_SEC_RULES                                      \
    472   _IOR(IPC_ROUTER_IOCTL_MAGIC, 5, struct config_sec_rules_args)
    473 
    474 struct msm_ipc_server_info {
    475   uint32_t node_id;
    476   uint32_t port_id;
    477   uint32_t service;
    478   uint32_t instance;
    479 };
    480 
    481 struct server_lookup_args {
    482   struct msm_ipc_port_name port_name;
    483   int num_entries_in_array;
    484   int num_entries_found;
    485   uint32_t lookup_mask;
    486   struct msm_ipc_server_info srv_info[0];
    487 };
    488 
    489 #endif
    490 
    491 #ifndef _UAPI_MSM_RMNET_H_
    492 #define _UAPI_MSM_RMNET_H_
    493 
    494 /* Bitmap macros for RmNET driver operation mode. */
    495 #define RMNET_MODE_NONE (0x00)
    496 #define RMNET_MODE_LLP_ETH (0x01)
    497 #define RMNET_MODE_LLP_IP (0x02)
    498 #define RMNET_MODE_QOS (0x04)
    499 #define RMNET_MODE_MASK                                                        \
    500   (RMNET_MODE_LLP_ETH | RMNET_MODE_LLP_IP | RMNET_MODE_QOS)
    501 
    502 #define RMNET_IS_MODE_QOS(mode) ((mode & RMNET_MODE_QOS) == RMNET_MODE_QOS)
    503 #define RMNET_IS_MODE_IP(mode) ((mode & RMNET_MODE_LLP_IP) == RMNET_MODE_LLP_IP)
    504 
    505 enum rmnet_ioctl_cmds_e {
    506   RMNET_IOCTL_SET_LLP_ETHERNET = 0x000089F1, /* Set Ethernet protocol  */
    507   RMNET_IOCTL_SET_LLP_IP = 0x000089F2,       /* Set RAWIP protocol     */
    508   RMNET_IOCTL_GET_LLP = 0x000089F3,          /* Get link protocol      */
    509   RMNET_IOCTL_SET_QOS_ENABLE = 0x000089F4,   /* Set QoS header enabled */
    510   RMNET_IOCTL_SET_QOS_DISABLE = 0x000089F5,  /* Set QoS header disabled*/
    511   RMNET_IOCTL_GET_QOS = 0x000089F6,          /* Get QoS header state   */
    512   RMNET_IOCTL_GET_OPMODE = 0x000089F7,       /* Get operation mode     */
    513   RMNET_IOCTL_OPEN = 0x000089F8,             /* Open transport port    */
    514   RMNET_IOCTL_CLOSE = 0x000089F9,            /* Close transport port   */
    515   RMNET_IOCTL_FLOW_ENABLE = 0x000089FA,      /* Flow enable            */
    516   RMNET_IOCTL_FLOW_DISABLE = 0x000089FB,     /* Flow disable           */
    517   RMNET_IOCTL_FLOW_SET_HNDL = 0x000089FC,    /* Set flow handle        */
    518   RMNET_IOCTL_EXTENDED = 0x000089FD,         /* Extended IOCTLs        */
    519   RMNET_IOCTL_MAX
    520 };
    521 
    522 enum rmnet_ioctl_extended_cmds_e {
    523   /* RmNet Data Required IOCTLs */
    524   RMNET_IOCTL_GET_SUPPORTED_FEATURES = 0x0000,   /* Get features    */
    525   RMNET_IOCTL_SET_MRU = 0x0001,                  /* Set MRU         */
    526   RMNET_IOCTL_GET_MRU = 0x0002,                  /* Get MRU         */
    527   RMNET_IOCTL_GET_EPID = 0x0003,                 /* Get endpoint ID */
    528   RMNET_IOCTL_GET_DRIVER_NAME = 0x0004,          /* Get driver name */
    529   RMNET_IOCTL_ADD_MUX_CHANNEL = 0x0005,          /* Add MUX ID      */
    530   RMNET_IOCTL_SET_EGRESS_DATA_FORMAT = 0x0006,   /* Set EDF         */
    531   RMNET_IOCTL_SET_INGRESS_DATA_FORMAT = 0x0007,  /* Set IDF         */
    532   RMNET_IOCTL_SET_AGGREGATION_COUNT = 0x0008,    /* Set agg count   */
    533   RMNET_IOCTL_GET_AGGREGATION_COUNT = 0x0009,    /* Get agg count   */
    534   RMNET_IOCTL_SET_AGGREGATION_SIZE = 0x000A,     /* Set agg size    */
    535   RMNET_IOCTL_GET_AGGREGATION_SIZE = 0x000B,     /* Get agg size    */
    536   RMNET_IOCTL_FLOW_CONTROL = 0x000C,             /* Do flow control */
    537   RMNET_IOCTL_GET_DFLT_CONTROL_CHANNEL = 0x000D, /* For legacy use  */
    538   RMNET_IOCTL_GET_HWSW_MAP = 0x000E,             /* Get HW/SW map   */
    539   RMNET_IOCTL_SET_RX_HEADROOM = 0x000F,          /* RX Headroom     */
    540   RMNET_IOCTL_GET_EP_PAIR = 0x0010,              /* Endpoint pair   */
    541   RMNET_IOCTL_SET_QOS_VERSION = 0x0011,          /* 8/6 byte QoS hdr*/
    542   RMNET_IOCTL_GET_QOS_VERSION = 0x0012,          /* 8/6 byte QoS hdr*/
    543   RMNET_IOCTL_GET_SUPPORTED_QOS_MODES = 0x0013,  /* Get QoS modes   */
    544   RMNET_IOCTL_SET_SLEEP_STATE = 0x0014,          /* Set sleep state */
    545   RMNET_IOCTL_SET_XLAT_DEV_INFO = 0x0015,        /* xlat dev name   */
    546   RMNET_IOCTL_EXTENDED_MAX = 0x0016
    547 };
    548 
    549 /* Return values for the RMNET_IOCTL_GET_SUPPORTED_FEATURES IOCTL */
    550 #define RMNET_IOCTL_FEAT_NOTIFY_MUX_CHANNEL (1 << 0)
    551 #define RMNET_IOCTL_FEAT_SET_EGRESS_DATA_FORMAT (1 << 1)
    552 #define RMNET_IOCTL_FEAT_SET_INGRESS_DATA_FORMAT (1 << 2)
    553 #define RMNET_IOCTL_FEAT_SET_AGGREGATION_COUNT (1 << 3)
    554 #define RMNET_IOCTL_FEAT_GET_AGGREGATION_COUNT (1 << 4)
    555 #define RMNET_IOCTL_FEAT_SET_AGGREGATION_SIZE (1 << 5)
    556 #define RMNET_IOCTL_FEAT_GET_AGGREGATION_SIZE (1 << 6)
    557 #define RMNET_IOCTL_FEAT_FLOW_CONTROL (1 << 7)
    558 #define RMNET_IOCTL_FEAT_GET_DFLT_CONTROL_CHANNEL (1 << 8)
    559 #define RMNET_IOCTL_FEAT_GET_HWSW_MAP (1 << 9)
    560 
    561 /* Input values for the RMNET_IOCTL_SET_EGRESS_DATA_FORMAT IOCTL  */
    562 #define RMNET_IOCTL_EGRESS_FORMAT_MAP (1 << 1)
    563 #define RMNET_IOCTL_EGRESS_FORMAT_AGGREGATION (1 << 2)
    564 #define RMNET_IOCTL_EGRESS_FORMAT_MUXING (1 << 3)
    565 #define RMNET_IOCTL_EGRESS_FORMAT_CHECKSUM (1 << 4)
    566 
    567 /* Input values for the RMNET_IOCTL_SET_INGRESS_DATA_FORMAT IOCTL */
    568 #define RMNET_IOCTL_INGRESS_FORMAT_MAP (1 << 1)
    569 #define RMNET_IOCTL_INGRESS_FORMAT_DEAGGREGATION (1 << 2)
    570 #define RMNET_IOCTL_INGRESS_FORMAT_DEMUXING (1 << 3)
    571 #define RMNET_IOCTL_INGRESS_FORMAT_CHECKSUM (1 << 4)
    572 
    573 /* User space may not have this defined. */
    574 #ifndef IFNAMSIZ
    575 #define IFNAMSIZ 16
    576 #endif
    577 
    578 struct rmnet_ioctl_extended_s {
    579   uint32_t extended_ioctl;
    580   union {
    581     uint32_t data; /* Generic data field for most extended IOCTLs */
    582     int8_t if_name[IFNAMSIZ];
    583     struct {
    584       uint32_t mux_id;
    585       int8_t vchannel_name[IFNAMSIZ];
    586     } rmnet_mux_val;
    587     struct {
    588       uint8_t flow_mode;
    589       uint8_t mux_id;
    590     } flow_control_prop;
    591     struct {
    592       uint32_t consumer_pipe_num;
    593       uint32_t producer_pipe_num;
    594     } ipa_ep_pair;
    595   } u;
    596 };
    597 
    598 struct rmnet_ioctl_data_s {
    599   union {
    600     uint32_t operation_mode;
    601     uint32_t tcm_handle;
    602   } u;
    603 };
    604 
    605 #define RMNET_IOCTL_QOS_MODE_6 (1 << 0)
    606 #define RMNET_IOCTL_QOS_MODE_8 (1 << 1)
    607 
    608 #define QMI_QOS_HDR_S __attribute((__packed__)) qmi_qos_hdr_s
    609 struct QMI_QOS_HDR_S {
    610   unsigned char version;
    611   unsigned char flags;
    612   uint32_t flow_id;
    613 };
    614 
    615 struct qmi_qos_hdr8_s {
    616   struct QMI_QOS_HDR_S hdr;
    617   uint8_t reserved[2];
    618 } __attribute((__packed__));
    619 
    620 #endif
    621