| /** |
| * Copyright (C) 2018 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions vand |
| * limitations under the License. |
| */ |
| #include <sys/types.h> |
| #ifndef IPA_QMI_SERVICE_V01_H |
| #define IPA_QMI_SERVICE_V01_H |
| |
| #define QMI_IPA_IPFLTR_NUM_IHL_RANGE_16_EQNS_V01 2 |
| #define QMI_IPA_IPFLTR_NUM_MEQ_32_EQNS_V01 2 |
| #define QMI_IPA_IPFLTR_NUM_IHL_MEQ_32_EQNS_V01 2 |
| #define QMI_IPA_IPFLTR_NUM_MEQ_128_EQNS_V01 2 |
| #define QMI_IPA_MAX_FILTERS_V01 64 |
| |
| #define IPA_INT_MAX ((int)(~0U >> 1)) |
| #define IPA_INT_MIN (-IPA_INT_MAX - 1) |
| |
| enum ipa_qmi_result_type_v01 { |
| IPA_QMI_RESULT_TYPE_MIN_ENUM_VAL_V01 = IPA_INT_MIN, |
| IPA_QMI_RESULT_SUCCESS_V01 = 0, |
| IPA_QMI_RESULT_FAILURE_V01 = 1, |
| IPA_QMI_RESULT_TYPE_MAX_ENUM_VAL_V01 = IPA_INT_MAX, |
| }; |
| |
| enum ipa_qmi_error_type_v01 { |
| IPA_QMI_ERROR_TYPE_MIN_ENUM_VAL_V01 = IPA_INT_MIN, |
| IPA_QMI_ERR_NONE_V01 = 0x0000, |
| IPA_QMI_ERR_MALFORMED_MSG_V01 = 0x0001, |
| IPA_QMI_ERR_NO_MEMORY_V01 = 0x0002, |
| IPA_QMI_ERR_INTERNAL_V01 = 0x0003, |
| IPA_QMI_ERR_CLIENT_IDS_EXHAUSTED_V01 = 0x0005, |
| IPA_QMI_ERR_INVALID_ID_V01 = 0x0029, |
| IPA_QMI_ERR_ENCODING_V01 = 0x003A, |
| IPA_QMI_ERR_INCOMPATIBLE_STATE_V01 = 0x005A, |
| IPA_QMI_ERR_NOT_SUPPORTED_V01 = 0x005E, |
| IPA_QMI_ERROR_TYPE_MAX_ENUM_VAL_V01 = IPA_INT_MAX, |
| }; |
| |
| struct ipa_qmi_response_type_v01 { |
| enum ipa_qmi_result_type_v01 result; |
| enum ipa_qmi_error_type_v01 error; |
| }; |
| |
| enum ipa_platform_type_enum_v01 { |
| IPA_PLATFORM_TYPE_ENUM_MIN_ENUM_VAL_V01 = -2147483647, |
| QMI_IPA_PLATFORM_TYPE_INVALID_V01 = 0, |
| QMI_IPA_PLATFORM_TYPE_TN_V01 = 1, |
| QMI_IPA_PLATFORM_TYPE_LE_V01 = 2, |
| QMI_IPA_PLATFORM_TYPE_MSM_ANDROID_V01 = 3, |
| QMI_IPA_PLATFORM_TYPE_MSM_WINDOWS_V01 = 4, |
| QMI_IPA_PLATFORM_TYPE_MSM_QNX_V01 = 5, |
| IPA_PLATFORM_TYPE_ENUM_MAX_ENUM_VAL_V01 = 2147483647 |
| }; |
| |
| struct ipa_hdr_tbl_info_type_v01 { |
| uint32_t modem_offset_start; |
| uint32_t modem_offset_end; |
| }; |
| |
| struct ipa_route_tbl_info_type_v01 { |
| uint32_t route_tbl_start_addr; |
| uint32_t num_indices; |
| }; |
| |
| struct ipa_modem_mem_info_type_v01 { |
| uint32_t block_start_addr; |
| uint32_t size; |
| }; |
| |
| struct ipa_hdr_proc_ctx_tbl_info_type_v01 { |
| uint32_t modem_offset_start; |
| uint32_t modem_offset_end; |
| }; |
| |
| struct ipa_zip_tbl_info_type_v01 { |
| uint32_t modem_offset_start; |
| uint32_t modem_offset_end; |
| }; |
| |
| struct ipa_init_modem_driver_req_msg_v01 { |
| uint8_t platform_type_valid; |
| enum ipa_platform_type_enum_v01 platform_type; |
| uint8_t hdr_tbl_info_valid; |
| struct ipa_hdr_tbl_info_type_v01 hdr_tbl_info; |
| uint8_t v4_route_tbl_info_valid; |
| struct ipa_route_tbl_info_type_v01 v4_route_tbl_info; |
| uint8_t v6_route_tbl_info_valid; |
| struct ipa_route_tbl_info_type_v01 v6_route_tbl_info; |
| uint8_t v4_filter_tbl_start_addr_valid; |
| uint32_t v4_filter_tbl_start_addr; |
| uint8_t v6_filter_tbl_start_addr_valid; |
| uint32_t v6_filter_tbl_start_addr; |
| uint8_t modem_mem_info_valid; |
| struct ipa_modem_mem_info_type_v01 modem_mem_info; |
| uint8_t ctrl_comm_dest_end_pt_valid; |
| uint32_t ctrl_comm_dest_end_pt; |
| uint8_t is_ssr_bootup_valid; |
| uint8_t is_ssr_bootup; |
| uint8_t hdr_proc_ctx_tbl_info_valid; |
| struct ipa_hdr_proc_ctx_tbl_info_type_v01 hdr_proc_ctx_tbl_info; |
| uint8_t zip_tbl_info_valid; |
| struct ipa_zip_tbl_info_type_v01 zip_tbl_info; |
| }; |
| |
| struct ipa_init_modem_driver_resp_msg_v01 { |
| struct ipa_qmi_response_type_v01 resp; |
| uint8_t ctrl_comm_dest_end_pt_valid; |
| uint32_t ctrl_comm_dest_end_pt; |
| uint8_t default_end_pt_valid; |
| uint32_t default_end_pt; |
| }; |
| |
| struct ipa_indication_reg_req_msg_v01 { |
| uint8_t master_driver_init_complete_valid; |
| uint8_t master_driver_init_complete; |
| }; |
| |
| struct ipa_indication_reg_resp_msg_v01 { |
| struct ipa_qmi_response_type_v01 resp; |
| }; |
| |
| struct ipa_master_driver_init_complt_ind_msg_v01 { |
| struct ipa_qmi_response_type_v01 master_driver_init_status; |
| }; |
| |
| struct ipa_ipfltr_range_eq_16_type_v01 { |
| uint8_t offset; |
| uint16_t range_low; |
| uint16_t range_high; |
| }; |
| |
| struct ipa_ipfltr_mask_eq_32_type_v01 { |
| uint8_t offset; |
| uint32_t mask; |
| uint32_t value; |
| }; |
| |
| struct ipa_ipfltr_eq_16_type_v01 { |
| uint8_t offset; |
| uint16_t value; |
| }; |
| |
| struct ipa_ipfltr_eq_32_type_v01 { |
| uint8_t offset; |
| uint32_t value; |
| }; |
| |
| struct ipa_ipfltr_mask_eq_128_type_v01 { |
| uint8_t offset; |
| uint8_t mask[16]; |
| uint8_t value[16]; |
| }; |
| |
| struct ipa_filter_rule_type_v01 { |
| uint16_t rule_eq_bitmap; |
| uint8_t tos_eq_present; |
| uint8_t tos_eq; |
| uint8_t protocol_eq_present; |
| uint8_t protocol_eq; |
| uint8_t num_ihl_offset_range_16; |
| |
| struct ipa_ipfltr_range_eq_16_type_v01 |
| ihl_offset_range_16[QMI_IPA_IPFLTR_NUM_IHL_RANGE_16_EQNS_V01]; |
| |
| uint8_t num_offset_meq_32; |
| |
| struct ipa_ipfltr_mask_eq_32_type_v01 |
| offset_meq_32[QMI_IPA_IPFLTR_NUM_MEQ_32_EQNS_V01]; |
| |
| uint8_t tc_eq_present; |
| uint8_t tc_eq; |
| uint8_t flow_eq_present; |
| uint32_t flow_eq; |
| uint8_t ihl_offset_eq_16_present; |
| struct ipa_ipfltr_eq_16_type_v01 ihl_offset_eq_16; |
| uint8_t ihl_offset_eq_32_present; |
| struct ipa_ipfltr_eq_32_type_v01 ihl_offset_eq_32; |
| uint8_t num_ihl_offset_meq_32; |
| struct ipa_ipfltr_mask_eq_32_type_v01 |
| ihl_offset_meq_32[QMI_IPA_IPFLTR_NUM_IHL_MEQ_32_EQNS_V01]; |
| uint8_t num_offset_meq_128; |
| struct ipa_ipfltr_mask_eq_128_type_v01 |
| offset_meq_128[QMI_IPA_IPFLTR_NUM_MEQ_128_EQNS_V01]; |
| |
| uint8_t metadata_meq32_present; |
| |
| struct ipa_ipfltr_mask_eq_32_type_v01 metadata_meq32; |
| uint8_t ipv4_frag_eq_present; |
| }; |
| |
| enum ipa_ip_type_enum_v01 { |
| IPA_IP_TYPE_ENUM_MIN_ENUM_VAL_V01 = -2147483647, |
| QMI_IPA_IP_TYPE_INVALID_V01 = 0, |
| QMI_IPA_IP_TYPE_V4_V01 = 1, |
| QMI_IPA_IP_TYPE_V6_V01 = 2, |
| QMI_IPA_IP_TYPE_V4V6_V01 = 3, |
| IPA_IP_TYPE_ENUM_MAX_ENUM_VAL_V01 = 2147483647 |
| }; |
| |
| enum ipa_filter_action_enum_v01 { |
| IPA_FILTER_ACTION_ENUM_MIN_ENUM_VAL_V01 = -2147483647, |
| QMI_IPA_FILTER_ACTION_INVALID_V01 = 0, |
| QMI_IPA_FILTER_ACTION_SRC_NAT_V01 = 1, |
| QMI_IPA_FILTER_ACTION_DST_NAT_V01 = 2, |
| QMI_IPA_FILTER_ACTION_ROUTING_V01 = 3, |
| QMI_IPA_FILTER_ACTION_EXCEPTION_V01 = 4, |
| IPA_FILTER_ACTION_ENUM_MAX_ENUM_VAL_V01 = 2147483647 |
| }; |
| |
| struct ipa_filter_spec_type_v01 { |
| uint32_t filter_spec_identifier; |
| enum ipa_ip_type_enum_v01 ip_type; |
| struct ipa_filter_rule_type_v01 filter_rule; |
| enum ipa_filter_action_enum_v01 filter_action; |
| uint8_t is_routing_table_index_valid; |
| uint32_t route_table_index; |
| uint8_t is_mux_id_valid; |
| uint32_t mux_id; |
| }; |
| |
| struct ipa_install_fltr_rule_req_msg_v01 { |
| uint8_t filter_spec_list_valid; |
| uint32_t filter_spec_list_len; |
| struct ipa_filter_spec_type_v01 filter_spec_list[QMI_IPA_MAX_FILTERS_V01]; |
| uint8_t source_pipe_index_valid; |
| uint32_t source_pipe_index; |
| uint8_t num_ipv4_filters_valid; |
| uint32_t num_ipv4_filters; |
| uint8_t num_ipv6_filters_valid; |
| uint32_t num_ipv6_filters; |
| uint8_t xlat_filter_indices_list_valid; |
| uint32_t xlat_filter_indices_list_len; |
| uint32_t xlat_filter_indices_list[QMI_IPA_MAX_FILTERS_V01]; |
| }; |
| |
| struct ipa_filter_rule_identifier_to_handle_map_v01 { |
| uint32_t filter_spec_identifier; |
| uint32_t filter_handle; |
| }; |
| |
| struct ipa_install_fltr_rule_resp_msg_v01 { |
| struct ipa_qmi_response_type_v01 resp; |
| uint8_t filter_handle_list_valid; |
| uint32_t filter_handle_list_len; |
| struct ipa_filter_rule_identifier_to_handle_map_v01 |
| filter_handle_list[QMI_IPA_MAX_FILTERS_V01]; |
| }; |
| |
| struct ipa_filter_handle_to_index_map_v01 { |
| uint32_t filter_handle; |
| uint32_t filter_index; |
| }; |
| |
| struct ipa_fltr_installed_notif_req_msg_v01 { |
| uint32_t source_pipe_index; |
| enum ipa_qmi_result_type_v01 install_status; |
| uint32_t filter_index_list_len; |
| struct ipa_filter_handle_to_index_map_v01 |
| filter_index_list[QMI_IPA_MAX_FILTERS_V01]; |
| |
| uint8_t embedded_pipe_index_valid; |
| uint32_t embedded_pipe_index; |
| uint8_t retain_header_valid; |
| uint8_t retain_header; |
| uint8_t embedded_call_mux_id_valid; |
| uint32_t embedded_call_mux_id; |
| uint8_t num_ipv4_filters_valid; |
| uint32_t num_ipv4_filters; |
| uint8_t num_ipv6_filters_valid; |
| uint32_t num_ipv6_filters; |
| uint8_t start_ipv4_filter_idx_valid; |
| uint32_t start_ipv4_filter_idx; |
| uint8_t start_ipv6_filter_idx_valid; |
| uint32_t start_ipv6_filter_idx; |
| }; |
| |
| struct ipa_fltr_installed_notif_resp_msg_v01 { |
| struct ipa_qmi_response_type_v01 resp; |
| }; |
| |
| struct ipa_enable_force_clear_datapath_req_msg_v01 { |
| uint32_t source_pipe_bitmask; |
| uint32_t request_id; |
| uint8_t throttle_source_valid; |
| uint8_t throttle_source; |
| }; |
| |
| struct ipa_enable_force_clear_datapath_resp_msg_v01 { |
| struct ipa_qmi_response_type_v01 resp; |
| }; |
| |
| struct ipa_disable_force_clear_datapath_req_msg_v01 { |
| uint32_t request_id; |
| }; |
| |
| struct ipa_disable_force_clear_datapath_resp_msg_v01 { |
| struct ipa_qmi_response_type_v01 resp; |
| }; |
| |
| enum ipa_peripheral_speed_enum_v01 { |
| IPA_PERIPHERAL_SPEED_ENUM_MIN_ENUM_VAL_V01 = -2147483647, |
| QMI_IPA_PER_USB_FS_V01 = 1, |
| QMI_IPA_PER_USB_HS_V01 = 2, |
| QMI_IPA_PER_USB_SS_V01 = 3, |
| IPA_PERIPHERAL_SPEED_ENUM_MAX_ENUM_VAL_V01 = 2147483647 |
| }; |
| |
| enum ipa_pipe_mode_enum_v01 { |
| IPA_PIPE_MODE_ENUM_MIN_ENUM_VAL_V01 = -2147483647, |
| QMI_IPA_PIPE_MODE_HW_V01 = 1, |
| QMI_IPA_PIPE_MODE_SW_V01 = 2, |
| IPA_PIPE_MODE_ENUM_MAX_ENUM_VAL_V01 = 2147483647 |
| }; |
| |
| enum ipa_peripheral_type_enum_v01 { |
| IPA_PERIPHERAL_TYPE_ENUM_MIN_ENUM_VAL_V01 = -2147483647, |
| QMI_IPA_PERIPHERAL_USB_V01 = 1, |
| QMI_IPA_PERIPHERAL_HSIC_V01 = 2, |
| QMI_IPA_PERIPHERAL_PCIE_V01 = 3, |
| IPA_PERIPHERAL_TYPE_ENUM_MAX_ENUM_VAL_V01 = 2147483647 |
| }; |
| |
| struct ipa_config_req_msg_v01 { |
| uint8_t peripheral_type_valid; |
| enum ipa_peripheral_type_enum_v01 peripheral_type; |
| uint8_t hw_deaggr_supported_valid; |
| uint8_t hw_deaggr_supported; |
| uint8_t max_aggr_frame_size_valid; |
| uint32_t max_aggr_frame_size; |
| uint8_t ipa_ingress_pipe_mode_valid; |
| enum ipa_pipe_mode_enum_v01 ipa_ingress_pipe_mode; |
| uint8_t peripheral_speed_info_valid; |
| enum ipa_peripheral_speed_enum_v01 peripheral_speed_info; |
| uint8_t dl_accumulation_time_limit_valid; |
| uint32_t dl_accumulation_time_limit; |
| uint8_t dl_accumulation_pkt_limit_valid; |
| uint32_t dl_accumulation_pkt_limit; |
| uint8_t dl_accumulation_byte_limit_valid; |
| uint32_t dl_accumulation_byte_limit; |
| uint8_t ul_accumulation_time_limit_valid; |
| uint32_t ul_accumulation_time_limit; |
| uint8_t hw_control_flags_valid; |
| uint32_t hw_control_flags; |
| uint8_t ul_msi_event_threshold_valid; |
| uint32_t ul_msi_event_threshold; |
| uint8_t dl_msi_event_threshold_valid; |
| uint32_t dl_msi_event_threshold; |
| }; |
| |
| struct ipa_config_resp_msg_v01 { |
| struct ipa_qmi_response_type_v01 resp; |
| }; |
| |
| /*Service Message Definition*/ |
| #define QMI_IPA_INDICATION_REGISTER_REQ_V01 0x0020 |
| #define QMI_IPA_INDICATION_REGISTER_RESP_V01 0x0020 |
| #define QMI_IPA_INIT_MODEM_DRIVER_REQ_V01 0x0021 |
| #define QMI_IPA_INIT_MODEM_DRIVER_RESP_V01 0x0021 |
| #define QMI_IPA_MASTER_DRIVER_INIT_COMPLETE_IND_V01 0x0022 |
| #define QMI_IPA_INSTALL_FILTER_RULE_REQ_V01 0x0023 |
| #define QMI_IPA_INSTALL_FILTER_RULE_RESP_V01 0x0023 |
| #define QMI_IPA_FILTER_INSTALLED_NOTIF_REQ_V01 0x0024 |
| #define QMI_IPA_FILTER_INSTALLED_NOTIF_RESP_V01 0x0024 |
| #define QMI_IPA_ENABLE_FORCE_CLEAR_DATAPATH_REQ_V01 0x0025 |
| #define QMI_IPA_ENABLE_FORCE_CLEAR_DATAPATH_RESP_V01 0x0025 |
| #define QMI_IPA_DISABLE_FORCE_CLEAR_DATAPATH_REQ_V01 0x0026 |
| #define QMI_IPA_DISABLE_FORCE_CLEAR_DATAPATH_RESP_V01 0x0026 |
| #define QMI_IPA_CONFIG_REQ_V01 0x0027 |
| #define QMI_IPA_CONFIG_RESP_V01 0x0027 |
| |
| /* add for max length*/ |
| #define QMI_IPA_INIT_MODEM_DRIVER_REQ_MAX_MSG_LEN_V01 98 |
| #define QMI_IPA_INIT_MODEM_DRIVER_RESP_MAX_MSG_LEN_V01 21 |
| #define QMI_IPA_INDICATION_REGISTER_REQ_MAX_MSG_LEN_V01 4 |
| #define QMI_IPA_INDICATION_REGISTER_RESP_MAX_MSG_LEN_V01 7 |
| #define QMI_IPA_INSTALL_FILTER_RULE_REQ_MAX_MSG_LEN_V01 11293 |
| #define QMI_IPA_INSTALL_FILTER_RULE_RESP_MAX_MSG_LEN_V01 523 |
| #define QMI_IPA_FILTER_INSTALLED_NOTIF_REQ_MAX_MSG_LEN_V01 574 |
| #define QMI_IPA_FILTER_INSTALLED_NOTIF_RESP_MAX_MSG_LEN_V01 7 |
| #define QMI_IPA_MASTER_DRIVER_INIT_COMPLETE_IND_MAX_MSG_LEN_V01 7 |
| |
| #define QMI_IPA_ENABLE_FORCE_CLEAR_DATAPATH_REQ_MAX_MSG_LEN_V01 18 |
| #define QMI_IPA_DISABLE_FORCE_CLEAR_DATAPATH_REQ_MAX_MSG_LEN_V01 7 |
| #define QMI_IPA_ENABLE_FORCE_CLEAR_DATAPATH_RESP_MAX_MSG_LEN_V01 7 |
| #define QMI_IPA_DISABLE_FORCE_CLEAR_DATAPATH_RESP_MAX_MSG_LEN_V01 7 |
| |
| #define QMI_IPA_CONFIG_REQ_MAX_MSG_LEN_V01 81 |
| #define QMI_IPA_CONFIG_RESP_MAX_MSG_LEN_V01 7 |
| /* Service Object Accessor */ |
| |
| #endif /* IPA_QMI_SERVICE_V01_H */ |
| |
| #ifndef _UAPI_MSM_IPC_H_ |
| #define _UAPI_MSM_IPC_H_ |
| |
| #include <linux/ioctl.h> |
| #include <linux/types.h> |
| |
| struct msm_ipc_port_addr { |
| uint32_t node_id; |
| uint32_t port_id; |
| }; |
| |
| struct msm_ipc_port_name { |
| uint32_t service; |
| uint32_t instance; |
| }; |
| |
| struct msm_ipc_addr { |
| unsigned char addrtype; |
| union { |
| struct msm_ipc_port_addr port_addr; |
| struct msm_ipc_port_name port_name; |
| } addr; |
| }; |
| |
| #define MSM_IPC_WAIT_FOREVER (~0) /* timeout for permanent subscription */ |
| |
| #ifndef AF_MSM_IPC |
| #define AF_MSM_IPC 27 |
| #endif |
| |
| #ifndef PF_MSM_IPC |
| #define PF_MSM_IPC AF_MSM_IPC |
| #endif |
| |
| #define MSM_IPC_ADDR_NAME 1 |
| #define MSM_IPC_ADDR_ID 2 |
| |
| struct sockaddr_msm_ipc { |
| unsigned short family; |
| struct msm_ipc_addr address; |
| unsigned char reserved; |
| }; |
| |
| struct config_sec_rules_args { |
| int num_group_info; |
| uint32_t service_id; |
| uint32_t instance_id; |
| unsigned reserved; |
| gid_t group_id[0]; |
| }; |
| |
| #define IPC_ROUTER_IOCTL_MAGIC (0xC3) |
| |
| #define IPC_ROUTER_IOCTL_GET_VERSION \ |
| _IOR(IPC_ROUTER_IOCTL_MAGIC, 0, unsigned int) |
| |
| #define IPC_ROUTER_IOCTL_GET_MTU _IOR(IPC_ROUTER_IOCTL_MAGIC, 1, unsigned int) |
| |
| #define IPC_ROUTER_IOCTL_LOOKUP_SERVER \ |
| _IOWR(IPC_ROUTER_IOCTL_MAGIC, 2, struct sockaddr_msm_ipc) |
| |
| #define IPC_ROUTER_IOCTL_GET_CURR_PKT_SIZE \ |
| _IOR(IPC_ROUTER_IOCTL_MAGIC, 3, unsigned int) |
| |
| #define IPC_ROUTER_IOCTL_BIND_CONTROL_PORT \ |
| _IOR(IPC_ROUTER_IOCTL_MAGIC, 4, unsigned int) |
| |
| #define IPC_ROUTER_IOCTL_CONFIG_SEC_RULES \ |
| _IOR(IPC_ROUTER_IOCTL_MAGIC, 5, struct config_sec_rules_args) |
| |
| struct msm_ipc_server_info { |
| uint32_t node_id; |
| uint32_t port_id; |
| uint32_t service; |
| uint32_t instance; |
| }; |
| |
| struct server_lookup_args { |
| struct msm_ipc_port_name port_name; |
| int num_entries_in_array; |
| int num_entries_found; |
| uint32_t lookup_mask; |
| struct msm_ipc_server_info srv_info[0]; |
| }; |
| |
| #endif |
| |
| #ifndef _UAPI_MSM_RMNET_H_ |
| #define _UAPI_MSM_RMNET_H_ |
| |
| /* Bitmap macros for RmNET driver operation mode. */ |
| #define RMNET_MODE_NONE (0x00) |
| #define RMNET_MODE_LLP_ETH (0x01) |
| #define RMNET_MODE_LLP_IP (0x02) |
| #define RMNET_MODE_QOS (0x04) |
| #define RMNET_MODE_MASK \ |
| (RMNET_MODE_LLP_ETH | RMNET_MODE_LLP_IP | RMNET_MODE_QOS) |
| |
| #define RMNET_IS_MODE_QOS(mode) ((mode & RMNET_MODE_QOS) == RMNET_MODE_QOS) |
| #define RMNET_IS_MODE_IP(mode) ((mode & RMNET_MODE_LLP_IP) == RMNET_MODE_LLP_IP) |
| |
| enum rmnet_ioctl_cmds_e { |
| RMNET_IOCTL_SET_LLP_ETHERNET = 0x000089F1, /* Set Ethernet protocol */ |
| RMNET_IOCTL_SET_LLP_IP = 0x000089F2, /* Set RAWIP protocol */ |
| RMNET_IOCTL_GET_LLP = 0x000089F3, /* Get link protocol */ |
| RMNET_IOCTL_SET_QOS_ENABLE = 0x000089F4, /* Set QoS header enabled */ |
| RMNET_IOCTL_SET_QOS_DISABLE = 0x000089F5, /* Set QoS header disabled*/ |
| RMNET_IOCTL_GET_QOS = 0x000089F6, /* Get QoS header state */ |
| RMNET_IOCTL_GET_OPMODE = 0x000089F7, /* Get operation mode */ |
| RMNET_IOCTL_OPEN = 0x000089F8, /* Open transport port */ |
| RMNET_IOCTL_CLOSE = 0x000089F9, /* Close transport port */ |
| RMNET_IOCTL_FLOW_ENABLE = 0x000089FA, /* Flow enable */ |
| RMNET_IOCTL_FLOW_DISABLE = 0x000089FB, /* Flow disable */ |
| RMNET_IOCTL_FLOW_SET_HNDL = 0x000089FC, /* Set flow handle */ |
| RMNET_IOCTL_EXTENDED = 0x000089FD, /* Extended IOCTLs */ |
| RMNET_IOCTL_MAX |
| }; |
| |
| enum rmnet_ioctl_extended_cmds_e { |
| /* RmNet Data Required IOCTLs */ |
| RMNET_IOCTL_GET_SUPPORTED_FEATURES = 0x0000, /* Get features */ |
| RMNET_IOCTL_SET_MRU = 0x0001, /* Set MRU */ |
| RMNET_IOCTL_GET_MRU = 0x0002, /* Get MRU */ |
| RMNET_IOCTL_GET_EPID = 0x0003, /* Get endpoint ID */ |
| RMNET_IOCTL_GET_DRIVER_NAME = 0x0004, /* Get driver name */ |
| RMNET_IOCTL_ADD_MUX_CHANNEL = 0x0005, /* Add MUX ID */ |
| RMNET_IOCTL_SET_EGRESS_DATA_FORMAT = 0x0006, /* Set EDF */ |
| RMNET_IOCTL_SET_INGRESS_DATA_FORMAT = 0x0007, /* Set IDF */ |
| RMNET_IOCTL_SET_AGGREGATION_COUNT = 0x0008, /* Set agg count */ |
| RMNET_IOCTL_GET_AGGREGATION_COUNT = 0x0009, /* Get agg count */ |
| RMNET_IOCTL_SET_AGGREGATION_SIZE = 0x000A, /* Set agg size */ |
| RMNET_IOCTL_GET_AGGREGATION_SIZE = 0x000B, /* Get agg size */ |
| RMNET_IOCTL_FLOW_CONTROL = 0x000C, /* Do flow control */ |
| RMNET_IOCTL_GET_DFLT_CONTROL_CHANNEL = 0x000D, /* For legacy use */ |
| RMNET_IOCTL_GET_HWSW_MAP = 0x000E, /* Get HW/SW map */ |
| RMNET_IOCTL_SET_RX_HEADROOM = 0x000F, /* RX Headroom */ |
| RMNET_IOCTL_GET_EP_PAIR = 0x0010, /* Endpoint pair */ |
| RMNET_IOCTL_SET_QOS_VERSION = 0x0011, /* 8/6 byte QoS hdr*/ |
| RMNET_IOCTL_GET_QOS_VERSION = 0x0012, /* 8/6 byte QoS hdr*/ |
| RMNET_IOCTL_GET_SUPPORTED_QOS_MODES = 0x0013, /* Get QoS modes */ |
| RMNET_IOCTL_SET_SLEEP_STATE = 0x0014, /* Set sleep state */ |
| RMNET_IOCTL_SET_XLAT_DEV_INFO = 0x0015, /* xlat dev name */ |
| RMNET_IOCTL_EXTENDED_MAX = 0x0016 |
| }; |
| |
| /* Return values for the RMNET_IOCTL_GET_SUPPORTED_FEATURES IOCTL */ |
| #define RMNET_IOCTL_FEAT_NOTIFY_MUX_CHANNEL (1 << 0) |
| #define RMNET_IOCTL_FEAT_SET_EGRESS_DATA_FORMAT (1 << 1) |
| #define RMNET_IOCTL_FEAT_SET_INGRESS_DATA_FORMAT (1 << 2) |
| #define RMNET_IOCTL_FEAT_SET_AGGREGATION_COUNT (1 << 3) |
| #define RMNET_IOCTL_FEAT_GET_AGGREGATION_COUNT (1 << 4) |
| #define RMNET_IOCTL_FEAT_SET_AGGREGATION_SIZE (1 << 5) |
| #define RMNET_IOCTL_FEAT_GET_AGGREGATION_SIZE (1 << 6) |
| #define RMNET_IOCTL_FEAT_FLOW_CONTROL (1 << 7) |
| #define RMNET_IOCTL_FEAT_GET_DFLT_CONTROL_CHANNEL (1 << 8) |
| #define RMNET_IOCTL_FEAT_GET_HWSW_MAP (1 << 9) |
| |
| /* Input values for the RMNET_IOCTL_SET_EGRESS_DATA_FORMAT IOCTL */ |
| #define RMNET_IOCTL_EGRESS_FORMAT_MAP (1 << 1) |
| #define RMNET_IOCTL_EGRESS_FORMAT_AGGREGATION (1 << 2) |
| #define RMNET_IOCTL_EGRESS_FORMAT_MUXING (1 << 3) |
| #define RMNET_IOCTL_EGRESS_FORMAT_CHECKSUM (1 << 4) |
| |
| /* Input values for the RMNET_IOCTL_SET_INGRESS_DATA_FORMAT IOCTL */ |
| #define RMNET_IOCTL_INGRESS_FORMAT_MAP (1 << 1) |
| #define RMNET_IOCTL_INGRESS_FORMAT_DEAGGREGATION (1 << 2) |
| #define RMNET_IOCTL_INGRESS_FORMAT_DEMUXING (1 << 3) |
| #define RMNET_IOCTL_INGRESS_FORMAT_CHECKSUM (1 << 4) |
| |
| /* User space may not have this defined. */ |
| #ifndef IFNAMSIZ |
| #define IFNAMSIZ 16 |
| #endif |
| |
| struct rmnet_ioctl_extended_s { |
| uint32_t extended_ioctl; |
| union { |
| uint32_t data; /* Generic data field for most extended IOCTLs */ |
| int8_t if_name[IFNAMSIZ]; |
| struct { |
| uint32_t mux_id; |
| int8_t vchannel_name[IFNAMSIZ]; |
| } rmnet_mux_val; |
| struct { |
| uint8_t flow_mode; |
| uint8_t mux_id; |
| } flow_control_prop; |
| struct { |
| uint32_t consumer_pipe_num; |
| uint32_t producer_pipe_num; |
| } ipa_ep_pair; |
| } u; |
| }; |
| |
| struct rmnet_ioctl_data_s { |
| union { |
| uint32_t operation_mode; |
| uint32_t tcm_handle; |
| } u; |
| }; |
| |
| #define RMNET_IOCTL_QOS_MODE_6 (1 << 0) |
| #define RMNET_IOCTL_QOS_MODE_8 (1 << 1) |
| |
| #define QMI_QOS_HDR_S __attribute((__packed__)) qmi_qos_hdr_s |
| struct QMI_QOS_HDR_S { |
| unsigned char version; |
| unsigned char flags; |
| uint32_t flow_id; |
| }; |
| |
| struct qmi_qos_hdr8_s { |
| struct QMI_QOS_HDR_S hdr; |
| uint8_t reserved[2]; |
| } __attribute((__packed__)); |
| |
| #endif |