1 /* Copyright (c) 2013-2017, The Linux Foundation. All rights reserved. 2 * 3 * This program is free software; you can redistribute it and/or modify 4 * it under the terms of the GNU General Public License version 2 and 5 * only version 2 as published by the Free Software Foundation. 6 * 7 * This program is distributed in the hope that it will be useful, 8 * but WITHOUT ANY WARRANTY; without even the implied warranty of 9 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 10 * GNU General Public License for more details. 11 */ 12 13 #ifndef _RMNET_IPA_FD_IOCTL_H 14 #define _RMNET_IPA_FD_IOCTL_H 15 16 #include <linux/ioctl.h> 17 #include <linux/ipa_qmi_service_v01.h> 18 #include <linux/msm_ipa.h> 19 20 /** 21 * unique magic number of the IPA_WAN device 22 */ 23 #define WAN_IOC_MAGIC 0x69 24 25 #define WAN_IOCTL_ADD_FLT_RULE 0 26 #define WAN_IOCTL_ADD_FLT_INDEX 1 27 #define WAN_IOCTL_VOTE_FOR_BW_MBPS 2 28 #define WAN_IOCTL_POLL_TETHERING_STATS 3 29 #define WAN_IOCTL_SET_DATA_QUOTA 4 30 #define WAN_IOCTL_SET_TETHER_CLIENT_PIPE 5 31 #define WAN_IOCTL_QUERY_TETHER_STATS 6 32 #define WAN_IOCTL_RESET_TETHER_STATS 7 33 #define WAN_IOCTL_QUERY_DL_FILTER_STATS 8 34 #define WAN_IOCTL_ADD_FLT_RULE_EX 9 35 #define WAN_IOCTL_QUERY_TETHER_STATS_ALL 10 36 37 /* User space may not have this defined. */ 38 #ifndef IFNAMSIZ 39 #define IFNAMSIZ 16 40 #endif 41 42 /** 43 * struct wan_ioctl_poll_tethering_stats - structure used for 44 * WAN_IOCTL_POLL_TETHERING_STATS IOCTL. 45 * 46 * @polling_interval_secs: Polling interval in seconds. 47 * @reset_stats: Indicate whether to reset the stats (use 1) or not. 48 * 49 * The structure to be used by the user space in order to request for the 50 * tethering stats to be polled. Setting the interval to 0 indicates to stop 51 * the polling process. 52 */ 53 struct wan_ioctl_poll_tethering_stats { 54 uint64_t polling_interval_secs; 55 uint8_t reset_stats; 56 }; 57 58 /** 59 * struct wan_ioctl_set_data_quota - structure used for 60 * WAN_IOCTL_SET_DATA_QUOTA IOCTL. 61 * 62 * @interface_name: Name of the interface on which to set the quota. 63 * @quota_mbytes: Quota (in Mbytes) for the above interface. 64 * @set_quota: Indicate whether to set the quota (use 1) or 65 * unset the quota. 66 * 67 * The structure to be used by the user space in order to request 68 * a quota to be set on a specific interface (by specifying its name). 69 */ 70 struct wan_ioctl_set_data_quota { 71 char interface_name[IFNAMSIZ]; 72 uint64_t quota_mbytes; 73 uint8_t set_quota; 74 }; 75 76 struct wan_ioctl_set_tether_client_pipe { 77 /* enum of tether interface */ 78 enum ipacm_client_enum ipa_client; 79 uint8_t reset_client; 80 uint32_t ul_src_pipe_len; 81 uint32_t ul_src_pipe_list[QMI_IPA_MAX_PIPES_V01]; 82 uint32_t dl_dst_pipe_len; 83 uint32_t dl_dst_pipe_list[QMI_IPA_MAX_PIPES_V01]; 84 }; 85 86 struct wan_ioctl_query_tether_stats { 87 /* Name of the upstream interface */ 88 char upstreamIface[IFNAMSIZ]; 89 /* Name of the tethered interface */ 90 char tetherIface[IFNAMSIZ]; 91 /* enum of tether interface */ 92 enum ipacm_client_enum ipa_client; 93 uint64_t ipv4_tx_packets; 94 uint64_t ipv4_tx_bytes; 95 uint64_t ipv4_rx_packets; 96 uint64_t ipv4_rx_bytes; 97 uint64_t ipv6_tx_packets; 98 uint64_t ipv6_tx_bytes; 99 uint64_t ipv6_rx_packets; 100 uint64_t ipv6_rx_bytes; 101 }; 102 103 struct wan_ioctl_query_tether_stats_all { 104 /* Name of the upstream interface */ 105 char upstreamIface[IFNAMSIZ]; 106 /* enum of tether interface */ 107 enum ipacm_client_enum ipa_client; 108 uint8_t reset_stats; 109 uint64_t tx_bytes; 110 uint64_t rx_bytes; 111 }; 112 113 struct wan_ioctl_reset_tether_stats { 114 /* Name of the upstream interface, not support now */ 115 char upstreamIface[IFNAMSIZ]; 116 /* Indicate whether to reset the stats (use 1) or not */ 117 uint8_t reset_stats; 118 }; 119 120 struct wan_ioctl_query_dl_filter_stats { 121 /* Indicate whether to reset the filter stats (use 1) or not*/ 122 uint8_t reset_stats; 123 /* Modem response QMI */ 124 struct ipa_get_data_stats_resp_msg_v01 stats_resp; 125 /* provide right index to 1st firewall rule */ 126 uint32_t index; 127 }; 128 129 #define WAN_IOC_ADD_FLT_RULE _IOWR(WAN_IOC_MAGIC, \ 130 WAN_IOCTL_ADD_FLT_RULE, \ 131 struct ipa_install_fltr_rule_req_msg_v01 *) 132 133 #define WAN_IOC_ADD_FLT_RULE_INDEX _IOWR(WAN_IOC_MAGIC, \ 134 WAN_IOCTL_ADD_FLT_INDEX, \ 135 struct ipa_fltr_installed_notif_req_msg_v01 *) 136 137 #define WAN_IOC_VOTE_FOR_BW_MBPS _IOWR(WAN_IOC_MAGIC, \ 138 WAN_IOCTL_VOTE_FOR_BW_MBPS, \ 139 uint32_t *) 140 141 #define WAN_IOC_POLL_TETHERING_STATS _IOWR(WAN_IOC_MAGIC, \ 142 WAN_IOCTL_POLL_TETHERING_STATS, \ 143 struct wan_ioctl_poll_tethering_stats *) 144 145 #define WAN_IOC_SET_DATA_QUOTA _IOWR(WAN_IOC_MAGIC, \ 146 WAN_IOCTL_SET_DATA_QUOTA, \ 147 struct wan_ioctl_set_data_quota *) 148 149 #define WAN_IOC_SET_TETHER_CLIENT_PIPE _IOWR(WAN_IOC_MAGIC, \ 150 WAN_IOCTL_SET_TETHER_CLIENT_PIPE, \ 151 struct wan_ioctl_set_tether_client_pipe *) 152 153 #define WAN_IOC_QUERY_TETHER_STATS _IOWR(WAN_IOC_MAGIC, \ 154 WAN_IOCTL_QUERY_TETHER_STATS, \ 155 struct wan_ioctl_query_tether_stats *) 156 157 #define WAN_IOC_RESET_TETHER_STATS _IOWR(WAN_IOC_MAGIC, \ 158 WAN_IOCTL_RESET_TETHER_STATS, \ 159 struct wan_ioctl_reset_tether_stats *) 160 161 #define WAN_IOC_QUERY_DL_FILTER_STATS _IOWR(WAN_IOC_MAGIC, \ 162 WAN_IOCTL_QUERY_DL_FILTER_STATS, \ 163 struct wan_ioctl_query_dl_filter_stats *) 164 165 #define WAN_IOC_ADD_FLT_RULE_EX _IOWR(WAN_IOC_MAGIC, \ 166 WAN_IOCTL_ADD_FLT_RULE_EX, \ 167 struct ipa_install_fltr_rule_req_ex_msg_v01 *) 168 169 #define WAN_IOC_QUERY_TETHER_STATS_ALL _IOWR(WAN_IOC_MAGIC, \ 170 WAN_IOCTL_QUERY_TETHER_STATS_ALL, \ 171 struct wan_ioctl_query_tether_stats_all *) 172 173 #endif /* _RMNET_IPA_FD_IOCTL_H */ 174