ipa_qmi_service.h 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533
  1. /* SPDX-License-Identifier: GPL-2.0-only */
  2. /*
  3. * Copyright (c) 2013-2019, The Linux Foundation. All rights reserved.
  4. */
  5. #ifndef IPA_QMI_SERVICE_H
  6. #define IPA_QMI_SERVICE_H
  7. #include <linux/ipa.h>
  8. #include <linux/ipa_qmi_service_v01.h>
  9. #include <uapi/linux/msm_rmnet.h>
  10. #include <linux/soc/qcom/qmi.h>
  11. #include "ipa_i.h"
  12. #include <linux/rmnet_ipa_fd_ioctl.h>
  13. /**
  14. * name of the DL wwan default routing tables for v4 and v6
  15. */
  16. #define IPA_A7_QMAP_HDR_NAME "ipa_qmap_hdr"
  17. #define IPA_DFLT_WAN_RT_TBL_NAME "ipa_dflt_wan_rt"
  18. #define MAX_NUM_Q6_RULE 35
  19. #define MAX_NUM_QMI_RULE_CACHE 10
  20. #define MAX_NUM_QMI_MPM_AGGR_CACHE 3
  21. #define DEV_NAME "ipa-wan"
  22. #define SUBSYS_LOCAL_MODEM "modem"
  23. #define SUBSYS_REMOTE_MODEM "esoc0"
  24. #define IPAWANDBG(fmt, args...) \
  25. do { \
  26. pr_debug(DEV_NAME " %s:%d " fmt, __func__,\
  27. __LINE__, ## args); \
  28. IPA_IPC_LOGGING(ipa_get_ipc_logbuf(), \
  29. DEV_NAME " %s:%d " fmt, ## args); \
  30. IPA_IPC_LOGGING(ipa_get_ipc_logbuf_low(), \
  31. DEV_NAME " %s:%d " fmt, ## args); \
  32. } while (0)
  33. #define IPAWANDBG_LOW(fmt, args...) \
  34. do { \
  35. pr_debug(DEV_NAME " %s:%d " fmt, __func__,\
  36. __LINE__, ## args); \
  37. IPA_IPC_LOGGING(ipa_get_ipc_logbuf_low(), \
  38. DEV_NAME " %s:%d " fmt, ## args); \
  39. } while (0)
  40. #define IPAWANERR(fmt, args...) \
  41. do { \
  42. pr_err(DEV_NAME " %s:%d " fmt, __func__,\
  43. __LINE__, ## args); \
  44. IPA_IPC_LOGGING(ipa_get_ipc_logbuf(), \
  45. DEV_NAME " %s:%d " fmt, ## args); \
  46. IPA_IPC_LOGGING(ipa_get_ipc_logbuf_low(), \
  47. DEV_NAME " %s:%d " fmt, ## args); \
  48. } while (0)
  49. #define IPAWANERR_RL(fmt, args...) \
  50. do { \
  51. pr_err_ratelimited_ipa(DEV_NAME " %s:%d " fmt, __func__,\
  52. __LINE__, ## args); \
  53. IPA_IPC_LOGGING(ipa_get_ipc_logbuf(), \
  54. DEV_NAME " %s:%d " fmt, ## args); \
  55. IPA_IPC_LOGGING(ipa_get_ipc_logbuf_low(), \
  56. DEV_NAME " %s:%d " fmt, ## args); \
  57. } while (0)
  58. #define IPAWANINFO(fmt, args...) \
  59. do { \
  60. pr_info(DEV_NAME " %s:%d " fmt, __func__,\
  61. __LINE__, ## args); \
  62. IPA_IPC_LOGGING(ipa_get_ipc_logbuf(), \
  63. DEV_NAME " %s:%d " fmt, ## args); \
  64. IPA_IPC_LOGGING(ipa_get_ipc_logbuf_low(), \
  65. DEV_NAME " %s:%d " fmt, ## args); \
  66. } while (0)
  67. extern struct ipa3_qmi_context *ipa3_qmi_ctx;
  68. struct ipa_offload_connection_val {
  69. enum ipa_ip_type_enum_v01 ip_type;
  70. bool valid;
  71. uint32_t rule_id;
  72. uint32_t rule_hdl;
  73. };
  74. struct ipa3_qmi_context {
  75. struct ipa_ioc_ext_intf_prop q6_ul_filter_rule[MAX_NUM_Q6_RULE];
  76. u32 q6_ul_filter_rule_hdl[MAX_NUM_Q6_RULE];
  77. int num_ipa_install_fltr_rule_req_msg;
  78. struct ipa_install_fltr_rule_req_msg_v01
  79. ipa_install_fltr_rule_req_msg_cache[MAX_NUM_QMI_RULE_CACHE];
  80. int num_ipa_install_fltr_rule_req_ex_msg;
  81. struct ipa_install_fltr_rule_req_ex_msg_v01
  82. ipa_install_fltr_rule_req_ex_msg_cache[MAX_NUM_QMI_RULE_CACHE];
  83. int num_ipa_fltr_installed_notif_req_msg;
  84. struct ipa_fltr_installed_notif_req_msg_v01
  85. ipa_fltr_installed_notif_req_msg_cache[MAX_NUM_QMI_RULE_CACHE];
  86. int num_ipa_configure_ul_firewall_rules_req_msg;
  87. struct ipa_configure_ul_firewall_rules_req_msg_v01
  88. ipa_configure_ul_firewall_rules_req_msg_cache
  89. [MAX_NUM_QMI_RULE_CACHE];
  90. struct ipa_mhi_prime_aggr_info_req_msg_v01
  91. ipa_mhi_prime_aggr_info_req_msg_cache
  92. [MAX_NUM_QMI_MPM_AGGR_CACHE];
  93. bool modem_cfg_emb_pipe_flt;
  94. struct sockaddr_qrtr client_sq;
  95. struct sockaddr_qrtr server_sq;
  96. int num_ipa_offload_connection;
  97. struct ipa_offload_connection_val
  98. ipa_offload_cache[QMI_IPA_MAX_FILTERS_V01];
  99. uint8_t ul_firewall_indices_list_valid;
  100. uint32_t ul_firewall_indices_list_len;
  101. uint32_t ul_firewall_indices_list[QMI_IPA_MAX_FILTERS_V01];
  102. };
  103. struct ipa3_rmnet_mux_val {
  104. uint32_t mux_id;
  105. int8_t vchannel_name[IFNAMSIZ];
  106. bool mux_channel_set;
  107. bool ul_flt_reg;
  108. bool mux_hdr_set;
  109. uint32_t hdr_hdl;
  110. };
  111. extern struct qmi_elem_info
  112. ipa3_init_modem_driver_req_msg_data_v01_ei[];
  113. extern struct qmi_elem_info
  114. ipa3_init_modem_driver_resp_msg_data_v01_ei[];
  115. extern struct qmi_elem_info
  116. ipa3_indication_reg_req_msg_data_v01_ei[];
  117. extern struct qmi_elem_info ipa3_indication_reg_resp_msg_data_v01_ei[];
  118. extern struct qmi_elem_info
  119. ipa3_master_driver_init_complt_ind_msg_data_v01_ei[];
  120. extern struct qmi_elem_info ipa3_install_fltr_rule_req_msg_data_v01_ei[];
  121. extern struct qmi_elem_info ipa3_install_fltr_rule_resp_msg_data_v01_ei[];
  122. extern struct qmi_elem_info ipa3_fltr_installed_notif_req_msg_data_v01_ei[];
  123. extern struct qmi_elem_info
  124. ipa3_fltr_installed_notif_resp_msg_data_v01_ei[];
  125. extern struct qmi_elem_info
  126. ipa3_enable_force_clear_datapath_req_msg_data_v01_ei[];
  127. extern struct qmi_elem_info
  128. ipa3_enable_force_clear_datapath_resp_msg_data_v01_ei[];
  129. extern struct qmi_elem_info
  130. ipa3_disable_force_clear_datapath_req_msg_data_v01_ei[];
  131. extern struct qmi_elem_info
  132. ipa3_disable_force_clear_datapath_resp_msg_data_v01_ei[];
  133. extern struct qmi_elem_info ipa3_config_req_msg_data_v01_ei[];
  134. extern struct qmi_elem_info ipa3_config_resp_msg_data_v01_ei[];
  135. extern struct qmi_elem_info ipa3_get_data_stats_req_msg_data_v01_ei[];
  136. extern struct qmi_elem_info ipa3_get_data_stats_resp_msg_data_v01_ei[];
  137. extern struct qmi_elem_info ipa3_get_apn_data_stats_req_msg_data_v01_ei[];
  138. extern struct qmi_elem_info ipa3_get_apn_data_stats_resp_msg_data_v01_ei[];
  139. extern struct qmi_elem_info ipa3_set_data_usage_quota_req_msg_data_v01_ei[];
  140. extern struct qmi_elem_info
  141. ipa3_set_data_usage_quota_resp_msg_data_v01_ei[];
  142. extern struct qmi_elem_info
  143. ipa3_data_usage_quota_reached_ind_msg_data_v01_ei[];
  144. extern struct qmi_elem_info
  145. ipa3_stop_data_usage_quota_req_msg_data_v01_ei[];
  146. extern struct qmi_elem_info
  147. ipa3_stop_data_usage_quota_resp_msg_data_v01_ei[];
  148. extern struct qmi_elem_info
  149. ipa3_init_modem_driver_cmplt_req_msg_data_v01_ei[];
  150. extern struct qmi_elem_info
  151. ipa3_init_modem_driver_cmplt_resp_msg_data_v01_ei[];
  152. extern struct qmi_elem_info
  153. ipa3_install_fltr_rule_req_ex_msg_data_v01_ei[];
  154. extern struct qmi_elem_info
  155. ipa3_install_fltr_rule_resp_ex_msg_data_v01_ei[];
  156. extern struct qmi_elem_info
  157. ipa3_ul_firewall_rule_type_data_v01_ei[];
  158. extern struct qmi_elem_info
  159. ipa3_ul_firewall_config_result_type_data_v01_ei[];
  160. extern struct
  161. qmi_elem_info ipa3_per_client_stats_info_type_data_v01_ei[];
  162. extern struct qmi_elem_info
  163. ipa3_enable_per_client_stats_req_msg_data_v01_ei[];
  164. extern struct qmi_elem_info
  165. ipa3_enable_per_client_stats_resp_msg_data_v01_ei[];
  166. extern struct qmi_elem_info
  167. ipa3_get_stats_per_client_req_msg_data_v01_ei[];
  168. extern struct qmi_elem_info
  169. ipa3_get_stats_per_client_resp_msg_data_v01_ei[];
  170. extern struct qmi_elem_info
  171. ipa3_configure_ul_firewall_rules_req_msg_data_v01_ei[];
  172. extern struct qmi_elem_info
  173. ipa3_configure_ul_firewall_rules_resp_msg_data_v01_ei[];
  174. extern struct qmi_elem_info
  175. ipa3_configure_ul_firewall_rules_ind_msg_data_v01_ei[];
  176. extern struct qmi_elem_info ipa_mhi_ready_indication_msg_v01_ei[];
  177. extern struct qmi_elem_info ipa_mhi_mem_addr_info_type_v01_ei[];
  178. extern struct qmi_elem_info ipa_mhi_tr_info_type_v01_ei[];
  179. extern struct qmi_elem_info ipa_mhi_er_info_type_v01_ei[];
  180. extern struct qmi_elem_info ipa_mhi_alloc_channel_req_msg_v01_ei[];
  181. extern struct qmi_elem_info ipa_mhi_ch_alloc_resp_type_v01_ei[];
  182. extern struct qmi_elem_info ipa_mhi_alloc_channel_resp_msg_v01_ei[];
  183. extern struct qmi_elem_info ipa_mhi_clk_vote_req_msg_v01_ei[];
  184. extern struct qmi_elem_info ipa_mhi_clk_vote_resp_msg_v01_ei[];
  185. extern struct qmi_elem_info ipa_mhi_cleanup_req_msg_v01_ei[];
  186. extern struct qmi_elem_info ipa_mhi_cleanup_resp_msg_v01_ei[];
  187. extern struct qmi_elem_info ipa_endp_desc_indication_msg_v01_ei[];
  188. extern struct qmi_elem_info ipa_mhi_prime_aggr_info_req_msg_v01_ei[];
  189. extern struct qmi_elem_info ipa_mhi_prime_aggr_info_resp_msg_v01_ei[];
  190. extern struct qmi_elem_info ipa_add_offload_connection_req_msg_v01_ei[];
  191. extern struct qmi_elem_info ipa_add_offload_connection_resp_msg_v01_ei[];
  192. extern struct qmi_elem_info ipa_remove_offload_connection_req_msg_v01_ei[];
  193. extern struct qmi_elem_info ipa_remove_offload_connection_resp_msg_v01_ei[];
  194. /**
  195. * struct ipa3_rmnet_context - IPA rmnet context
  196. * @ipa_rmnet_ssr: support modem SSR
  197. * @polling_interval: Requested interval for polling tethered statistics
  198. * @metered_mux_id: The mux ID on which quota has been set
  199. */
  200. struct ipa3_rmnet_context {
  201. bool ipa_rmnet_ssr;
  202. u64 polling_interval;
  203. u32 metered_mux_id;
  204. };
  205. extern struct ipa3_rmnet_context ipa3_rmnet_ctx;
  206. #ifdef CONFIG_RMNET_IPA3
  207. int ipa3_qmi_service_init(uint32_t wan_platform_type);
  208. void ipa3_qmi_service_exit(void);
  209. /* sending filter-install-request to modem*/
  210. int ipa3_qmi_filter_request_send(
  211. struct ipa_install_fltr_rule_req_msg_v01 *req);
  212. int ipa3_qmi_filter_request_ex_send(
  213. struct ipa_install_fltr_rule_req_ex_msg_v01 *req);
  214. int ipa3_qmi_add_offload_request_send(
  215. struct ipa_add_offload_connection_req_msg_v01 *req);
  216. int ipa3_qmi_rmv_offload_request_send(
  217. struct ipa_remove_offload_connection_req_msg_v01 *req);
  218. int ipa3_qmi_ul_filter_request_send(
  219. struct ipa_configure_ul_firewall_rules_req_msg_v01 *req);
  220. /* sending filter-installed-notify-request to modem*/
  221. int ipa3_qmi_filter_notify_send(struct ipa_fltr_installed_notif_req_msg_v01
  222. *req);
  223. /* voting for bus BW to ipa_rm*/
  224. int ipa3_vote_for_bus_bw(uint32_t *bw_mbps);
  225. int ipa3_qmi_enable_force_clear_datapath_send(
  226. struct ipa_enable_force_clear_datapath_req_msg_v01 *req);
  227. int ipa3_qmi_disable_force_clear_datapath_send(
  228. struct ipa_disable_force_clear_datapath_req_msg_v01 *req);
  229. int ipa3_copy_ul_filter_rule_to_ipa(struct ipa_install_fltr_rule_req_msg_v01
  230. *rule_req);
  231. int ipa3_wwan_update_mux_channel_prop(void);
  232. int ipa3_wan_ioctl_init(void);
  233. void ipa3_wan_ioctl_stop_qmi_messages(void);
  234. void ipa3_wan_ioctl_enable_qmi_messages(void);
  235. void ipa3_wan_ioctl_deinit(void);
  236. void ipa3_qmi_stop_workqueues(void);
  237. int rmnet_ipa3_poll_tethering_stats(struct wan_ioctl_poll_tethering_stats
  238. *data);
  239. int rmnet_ipa3_set_data_quota(struct wan_ioctl_set_data_quota *data);
  240. void ipa3_broadcast_quota_reach_ind(uint32_t mux_id,
  241. enum ipa_upstream_type upstream_type);
  242. int rmnet_ipa3_set_tether_client_pipe(struct wan_ioctl_set_tether_client_pipe
  243. *data);
  244. int rmnet_ipa3_query_tethering_stats(struct wan_ioctl_query_tether_stats *data,
  245. bool reset);
  246. int rmnet_ipa3_query_tethering_stats_all(
  247. struct wan_ioctl_query_tether_stats_all *data);
  248. int rmnet_ipa3_reset_tethering_stats(struct wan_ioctl_reset_tether_stats *data);
  249. int rmnet_ipa3_set_lan_client_info(struct wan_ioctl_lan_client_info *data);
  250. int rmnet_ipa3_clear_lan_client_info(struct wan_ioctl_lan_client_info *data);
  251. int rmnet_ipa3_send_lan_client_msg(struct wan_ioctl_send_lan_client_msg *data);
  252. int rmnet_ipa3_enable_per_client_stats(bool *data);
  253. int rmnet_ipa3_query_per_client_stats(
  254. struct wan_ioctl_query_per_client_stats *data);
  255. int ipa3_qmi_get_data_stats(struct ipa_get_data_stats_req_msg_v01 *req,
  256. struct ipa_get_data_stats_resp_msg_v01 *resp);
  257. int ipa3_qmi_get_network_stats(struct ipa_get_apn_data_stats_req_msg_v01 *req,
  258. struct ipa_get_apn_data_stats_resp_msg_v01 *resp);
  259. int ipa3_qmi_set_data_quota(struct ipa_set_data_usage_quota_req_msg_v01 *req);
  260. int ipa3_qmi_set_aggr_info(
  261. enum ipa_aggr_enum_type_v01 aggr_enum_type);
  262. int ipa3_qmi_stop_data_qouta(void);
  263. void ipa3_q6_handshake_complete(bool ssr_bootup);
  264. int ipa3_wwan_set_modem_perf_profile(int throughput);
  265. int ipa3_wwan_set_modem_state(struct wan_ioctl_notify_wan_state *state);
  266. int ipa3_qmi_enable_per_client_stats(
  267. struct ipa_enable_per_client_stats_req_msg_v01 *req,
  268. struct ipa_enable_per_client_stats_resp_msg_v01 *resp);
  269. int ipa3_qmi_get_per_client_packet_stats(
  270. struct ipa_get_stats_per_client_req_msg_v01 *req,
  271. struct ipa_get_stats_per_client_resp_msg_v01 *resp);
  272. int ipa3_qmi_send_mhi_ready_indication(
  273. struct ipa_mhi_ready_indication_msg_v01 *req);
  274. int ipa3_qmi_send_rsc_pipe_indication(
  275. struct ipa_endp_desc_indication_msg_v01 *req);
  276. int ipa3_qmi_send_mhi_cleanup_request(struct ipa_mhi_cleanup_req_msg_v01 *req);
  277. void ipa3_qmi_init(void);
  278. void ipa3_qmi_cleanup(void);
  279. #else /* CONFIG_RMNET_IPA3 */
  280. static inline int ipa3_qmi_service_init(uint32_t wan_platform_type)
  281. {
  282. return -EPERM;
  283. }
  284. static inline void ipa3_qmi_service_exit(void) { }
  285. /* sending filter-install-request to modem*/
  286. static inline int ipa3_qmi_filter_request_send(
  287. struct ipa_install_fltr_rule_req_msg_v01 *req)
  288. {
  289. return -EPERM;
  290. }
  291. static inline int ipa3_qmi_add_offload_request_send(
  292. struct ipa_add_offload_connection_req_msg_v01 *req)
  293. {
  294. return -EPERM;
  295. }
  296. static inline int ipa3_qmi_rmv_offload_request_send(
  297. struct ipa_rmv_offload_connection_req_msg_v01 *req)
  298. {
  299. return -EPERM;
  300. }
  301. static inline int ipa3_qmi_ul_filter_request_send(
  302. struct ipa_configure_ul_firewall_rules_req_msg_v01 *req)
  303. {
  304. return -EPERM;
  305. }
  306. static inline int ipa3_qmi_filter_request_ex_send(
  307. struct ipa_install_fltr_rule_req_ex_msg_v01 *req)
  308. {
  309. return -EPERM;
  310. }
  311. /* sending filter-installed-notify-request to modem*/
  312. static inline int ipa3_qmi_filter_notify_send(
  313. struct ipa_fltr_installed_notif_req_msg_v01 *req)
  314. {
  315. return -EPERM;
  316. }
  317. static inline int ipa3_qmi_enable_force_clear_datapath_send(
  318. struct ipa_enable_force_clear_datapath_req_msg_v01 *req)
  319. {
  320. return -EPERM;
  321. }
  322. static inline int ipa3_qmi_disable_force_clear_datapath_send(
  323. struct ipa_disable_force_clear_datapath_req_msg_v01 *req)
  324. {
  325. return -EPERM;
  326. }
  327. static inline int ipa3_copy_ul_filter_rule_to_ipa(
  328. struct ipa_install_fltr_rule_req_msg_v01 *rule_req)
  329. {
  330. return -EPERM;
  331. }
  332. static inline int ipa3_wwan_update_mux_channel_prop(void)
  333. {
  334. return -EPERM;
  335. }
  336. static inline int ipa3_wan_ioctl_init(void)
  337. {
  338. return -EPERM;
  339. }
  340. static inline void ipa3_wan_ioctl_stop_qmi_messages(void) { }
  341. static inline void ipa3_wan_ioctl_enable_qmi_messages(void) { }
  342. static inline void ipa3_wan_ioctl_deinit(void) { }
  343. static inline void ipa3_qmi_stop_workqueues(void) { }
  344. static inline int ipa3_vote_for_bus_bw(uint32_t *bw_mbps)
  345. {
  346. return -EPERM;
  347. }
  348. static inline int rmnet_ipa3_poll_tethering_stats(
  349. struct wan_ioctl_poll_tethering_stats *data)
  350. {
  351. return -EPERM;
  352. }
  353. static inline int rmnet_ipa3_set_data_quota(
  354. struct wan_ioctl_set_data_quota *data)
  355. {
  356. return -EPERM;
  357. }
  358. static inline void ipa3_broadcast_quota_reach_ind(uint32_t mux_id,
  359. enum ipa_upstream_type upstream_type) { }
  360. static inline int ipa3_qmi_get_data_stats(
  361. struct ipa_get_data_stats_req_msg_v01 *req,
  362. struct ipa_get_data_stats_resp_msg_v01 *resp)
  363. {
  364. return -EPERM;
  365. }
  366. static inline int ipa3_qmi_get_network_stats(
  367. struct ipa_get_apn_data_stats_req_msg_v01 *req,
  368. struct ipa_get_apn_data_stats_resp_msg_v01 *resp)
  369. {
  370. return -EPERM;
  371. }
  372. static inline int ipa3_qmi_set_data_quota(
  373. struct ipa_set_data_usage_quota_req_msg_v01 *req)
  374. {
  375. return -EPERM;
  376. }
  377. static inline int ipa3_qmi_stop_data_qouta(void)
  378. {
  379. return -EPERM;
  380. }
  381. static inline void ipa3_q6_handshake_complete(bool ssr_bootup) { }
  382. static inline int ipa3_qmi_send_mhi_ready_indication(
  383. struct ipa_mhi_ready_indication_msg_v01 *req)
  384. {
  385. return -EPERM;
  386. }
  387. static int ipa3_qmi_send_rsc_pipe_indication(
  388. struct ipa_endp_desc_indication_msg_v01 *req)
  389. {
  390. return -EPERM;
  391. }
  392. static inline int ipa3_qmi_send_mhi_cleanup_request(
  393. struct ipa_mhi_cleanup_req_msg_v01 *req)
  394. {
  395. return -EPERM;
  396. }
  397. static inline int ipa3_wwan_set_modem_perf_profile(
  398. int throughput)
  399. {
  400. return -EPERM;
  401. }
  402. static inline int ipa3_qmi_enable_per_client_stats(
  403. struct ipa_enable_per_client_stats_req_msg_v01 *req,
  404. struct ipa_enable_per_client_stats_resp_msg_v01 *resp)
  405. {
  406. return -EPERM;
  407. }
  408. static inline int ipa3_qmi_get_per_client_packet_stats(
  409. struct ipa_get_stats_per_client_req_msg_v01 *req,
  410. struct ipa_get_stats_per_client_resp_msg_v01 *resp)
  411. {
  412. return -EPERM;
  413. }
  414. static inline int ipa3_qmi_set_aggr_info(
  415. enum ipa_aggr_enum_type_v01 aggr_enum_type)
  416. {
  417. return -EPERM;
  418. }
  419. static inline void ipa3_qmi_init(void)
  420. {
  421. }
  422. static inline void ipa3_qmi_cleanup(void)
  423. {
  424. }
  425. #endif /* CONFIG_RMNET_IPA3 */
  426. #endif /* IPA_QMI_SERVICE_H */