ipa_qmi_service.h 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540
  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. #if IS_ENABLED(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_wan_ioctl_init(void);
  232. void ipa3_wan_ioctl_stop_qmi_messages(void);
  233. void ipa3_wan_ioctl_enable_qmi_messages(void);
  234. void ipa3_wan_ioctl_deinit(void);
  235. void ipa3_qmi_stop_workqueues(void);
  236. int rmnet_ipa3_poll_tethering_stats(struct wan_ioctl_poll_tethering_stats
  237. *data);
  238. int rmnet_ipa3_set_data_quota(struct wan_ioctl_set_data_quota *data);
  239. void ipa3_broadcast_quota_reach_ind(uint32_t mux_id,
  240. enum ipa_upstream_type upstream_type);
  241. int rmnet_ipa3_set_tether_client_pipe(struct wan_ioctl_set_tether_client_pipe
  242. *data);
  243. int rmnet_ipa3_query_tethering_stats(struct wan_ioctl_query_tether_stats *data,
  244. bool reset);
  245. int rmnet_ipa3_query_tethering_stats_all(
  246. struct wan_ioctl_query_tether_stats_all *data);
  247. int rmnet_ipa3_reset_tethering_stats(struct wan_ioctl_reset_tether_stats *data);
  248. int rmnet_ipa3_set_lan_client_info(struct wan_ioctl_lan_client_info *data);
  249. int rmnet_ipa3_clear_lan_client_info(struct wan_ioctl_lan_client_info *data);
  250. int rmnet_ipa3_send_lan_client_msg(struct wan_ioctl_send_lan_client_msg *data);
  251. int rmnet_ipa3_enable_per_client_stats(bool *data);
  252. int rmnet_ipa3_query_per_client_stats(
  253. struct wan_ioctl_query_per_client_stats *data);
  254. int ipa3_qmi_get_data_stats(struct ipa_get_data_stats_req_msg_v01 *req,
  255. struct ipa_get_data_stats_resp_msg_v01 *resp);
  256. int ipa3_qmi_get_network_stats(struct ipa_get_apn_data_stats_req_msg_v01 *req,
  257. struct ipa_get_apn_data_stats_resp_msg_v01 *resp);
  258. int ipa3_qmi_set_data_quota(struct ipa_set_data_usage_quota_req_msg_v01 *req);
  259. int ipa3_qmi_set_aggr_info(
  260. enum ipa_aggr_enum_type_v01 aggr_enum_type);
  261. int ipa3_qmi_stop_data_qouta(void);
  262. void ipa3_q6_handshake_complete(bool ssr_bootup);
  263. int ipa3_wwan_set_modem_perf_profile(int throughput);
  264. int ipa3_wwan_set_modem_state(struct wan_ioctl_notify_wan_state *state);
  265. int ipa3_qmi_enable_per_client_stats(
  266. struct ipa_enable_per_client_stats_req_msg_v01 *req,
  267. struct ipa_enable_per_client_stats_resp_msg_v01 *resp);
  268. int ipa3_qmi_get_per_client_packet_stats(
  269. struct ipa_get_stats_per_client_req_msg_v01 *req,
  270. struct ipa_get_stats_per_client_resp_msg_v01 *resp);
  271. int ipa3_qmi_send_mhi_ready_indication(
  272. struct ipa_mhi_ready_indication_msg_v01 *req);
  273. int ipa3_qmi_send_rsc_pipe_indication(
  274. struct ipa_endp_desc_indication_msg_v01 *req);
  275. int ipa3_qmi_send_mhi_cleanup_request(struct ipa_mhi_cleanup_req_msg_v01 *req);
  276. void ipa3_qmi_init(void);
  277. void ipa3_qmi_cleanup(void);
  278. int ipa3_wwan_init(void);
  279. void ipa3_wwan_cleanup(void);
  280. #else /* IS_ENABLED(CONFIG_RMNET_IPA3) */
  281. static inline int ipa3_qmi_service_init(uint32_t wan_platform_type)
  282. {
  283. return -EPERM;
  284. }
  285. static inline void ipa3_qmi_service_exit(void) { }
  286. /* sending filter-install-request to modem*/
  287. static inline int ipa3_qmi_filter_request_send(
  288. struct ipa_install_fltr_rule_req_msg_v01 *req)
  289. {
  290. return -EPERM;
  291. }
  292. static inline int ipa3_qmi_add_offload_request_send(
  293. struct ipa_add_offload_connection_req_msg_v01 *req)
  294. {
  295. return -EPERM;
  296. }
  297. static inline int ipa3_qmi_rmv_offload_request_send(
  298. struct ipa_remove_offload_connection_req_msg_v01 *req)
  299. {
  300. return -EPERM;
  301. }
  302. static inline int ipa3_qmi_ul_filter_request_send(
  303. struct ipa_configure_ul_firewall_rules_req_msg_v01 *req)
  304. {
  305. return -EPERM;
  306. }
  307. static inline int ipa3_qmi_filter_request_ex_send(
  308. struct ipa_install_fltr_rule_req_ex_msg_v01 *req)
  309. {
  310. return -EPERM;
  311. }
  312. /* sending filter-installed-notify-request to modem*/
  313. static inline int ipa3_qmi_filter_notify_send(
  314. struct ipa_fltr_installed_notif_req_msg_v01 *req)
  315. {
  316. return -EPERM;
  317. }
  318. static inline int ipa3_qmi_enable_force_clear_datapath_send(
  319. struct ipa_enable_force_clear_datapath_req_msg_v01 *req)
  320. {
  321. return -EPERM;
  322. }
  323. static inline int ipa3_qmi_disable_force_clear_datapath_send(
  324. struct ipa_disable_force_clear_datapath_req_msg_v01 *req)
  325. {
  326. return -EPERM;
  327. }
  328. static inline int ipa3_copy_ul_filter_rule_to_ipa(
  329. struct ipa_install_fltr_rule_req_msg_v01 *rule_req)
  330. {
  331. return -EPERM;
  332. }
  333. static inline int ipa3_wan_ioctl_init(void)
  334. {
  335. return -EPERM;
  336. }
  337. static inline void ipa3_wan_ioctl_stop_qmi_messages(void) { }
  338. static inline void ipa3_wan_ioctl_enable_qmi_messages(void) { }
  339. static inline void ipa3_wan_ioctl_deinit(void) { }
  340. static inline void ipa3_qmi_stop_workqueues(void) { }
  341. static inline int ipa3_vote_for_bus_bw(uint32_t *bw_mbps)
  342. {
  343. return -EPERM;
  344. }
  345. static inline int rmnet_ipa3_poll_tethering_stats(
  346. struct wan_ioctl_poll_tethering_stats *data)
  347. {
  348. return -EPERM;
  349. }
  350. static inline int rmnet_ipa3_set_data_quota(
  351. struct wan_ioctl_set_data_quota *data)
  352. {
  353. return -EPERM;
  354. }
  355. static inline void ipa3_broadcast_quota_reach_ind(uint32_t mux_id,
  356. enum ipa_upstream_type upstream_type) { }
  357. static inline int ipa3_qmi_get_data_stats(
  358. struct ipa_get_data_stats_req_msg_v01 *req,
  359. struct ipa_get_data_stats_resp_msg_v01 *resp)
  360. {
  361. return -EPERM;
  362. }
  363. static inline int ipa3_qmi_get_network_stats(
  364. struct ipa_get_apn_data_stats_req_msg_v01 *req,
  365. struct ipa_get_apn_data_stats_resp_msg_v01 *resp)
  366. {
  367. return -EPERM;
  368. }
  369. static inline int ipa3_qmi_set_data_quota(
  370. struct ipa_set_data_usage_quota_req_msg_v01 *req)
  371. {
  372. return -EPERM;
  373. }
  374. static inline int ipa3_qmi_stop_data_qouta(void)
  375. {
  376. return -EPERM;
  377. }
  378. static inline void ipa3_q6_handshake_complete(bool ssr_bootup) { }
  379. static inline int ipa3_qmi_send_mhi_ready_indication(
  380. struct ipa_mhi_ready_indication_msg_v01 *req)
  381. {
  382. return -EPERM;
  383. }
  384. static inline int ipa3_qmi_send_rsc_pipe_indication(
  385. struct ipa_endp_desc_indication_msg_v01 *req)
  386. {
  387. return -EPERM;
  388. }
  389. static inline int ipa3_qmi_send_mhi_cleanup_request(
  390. struct ipa_mhi_cleanup_req_msg_v01 *req)
  391. {
  392. return -EPERM;
  393. }
  394. static inline int ipa3_wwan_set_modem_perf_profile(
  395. int throughput)
  396. {
  397. return -EPERM;
  398. }
  399. static inline int ipa3_qmi_enable_per_client_stats(
  400. struct ipa_enable_per_client_stats_req_msg_v01 *req,
  401. struct ipa_enable_per_client_stats_resp_msg_v01 *resp)
  402. {
  403. return -EPERM;
  404. }
  405. static inline int ipa3_qmi_get_per_client_packet_stats(
  406. struct ipa_get_stats_per_client_req_msg_v01 *req,
  407. struct ipa_get_stats_per_client_resp_msg_v01 *resp)
  408. {
  409. return -EPERM;
  410. }
  411. static inline int ipa3_qmi_set_aggr_info(
  412. enum ipa_aggr_enum_type_v01 aggr_enum_type)
  413. {
  414. return -EPERM;
  415. }
  416. static inline void ipa3_qmi_init(void)
  417. {
  418. }
  419. static inline void ipa3_qmi_cleanup(void)
  420. {
  421. }
  422. static inline int ipa3_wwan_init(void)
  423. {
  424. return -EPERM;
  425. }
  426. static inline void ipa3_wwan_cleanup(void)
  427. {
  428. }
  429. #endif /* IS_ENABLED(CONFIG_RMNET_IPA3) */
  430. #endif /* IPA_QMI_SERVICE_H */