1 /* 2 * Copyright (c) 2017-2019, 2021 The Linux Foundation. All rights reserved. 3 * Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved. 4 * 5 * Permission to use, copy, modify, and/or distribute this software for 6 * any purpose with or without fee is hereby granted, provided that the 7 * above copyright notice and this permission notice appear in all 8 * copies. 9 * 10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL 11 * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED 12 * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE 13 * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL 14 * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR 15 * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER 16 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR 17 * PERFORMANCE OF THIS SOFTWARE. 18 */ 19 /** 20 * DOC: Declare various struct, macros which are used for private to PMO. 21 * 22 * Note: This file shall not contain public API's prototype/declarations. 23 * 24 */ 25 26 #ifndef _WLAN_PMO_PRIV_STRUCT_H_ 27 #define _WLAN_PMO_PRIV_STRUCT_H_ 28 29 #ifdef WLAN_POWER_MANAGEMENT_OFFLOAD 30 31 #include "wlan_pmo_common_public_struct.h" 32 #include "wlan_pmo_arp_public_struct.h" 33 #include "wlan_pmo_ns_public_struct.h" 34 #include "wlan_pmo_gtk_public_struct.h" 35 #include "wlan_pmo_wow_public_struct.h" 36 #include "wlan_pmo_mc_addr_filtering_public_struct.h" 37 38 #define PMO_PS_DATA_INACTIVITY_TIMEOUT (200) 39 #define PMO_PS_DATA_SPEC_WAKE (0) 40 41 /** 42 * struct pmo_psoc_priv_obj - psoc related data require for pmo 43 * @psoc_cfg: place holder for psoc configuration 44 * @pmo_tx_ops: transmit ops for PMO 45 * @wow: wow configuration 46 * @caps: PMO specific device capability bits 47 * @dp_hdl: psoc data path handle 48 * @htc_hdl: htc layer handle 49 * @hif_hdl: hif layer handle 50 * @txrx_pdev_id: txrx pdev identifier 51 * @pause_bitmap_notifier: registered callback to update pause bitmap value 52 * @get_pause_bitmap: registered callback to get pause bitmap value 53 * @get_vdev_dp_handle: registered callback to get vdev's DP handle 54 * @is_device_in_low_pwr_mode: registered callback to determine if the 55 * device is in low power mode 56 * @get_dtim_period: register callback to get dtim period from mlme 57 * @get_beacon_interval: register callback to get beacon interval from mlme 58 * @lock: spin lock for pmo psoc 59 */ 60 struct pmo_psoc_priv_obj { 61 struct pmo_psoc_cfg psoc_cfg; 62 struct wlan_pmo_tx_ops pmo_tx_ops; 63 struct pmo_wow wow; 64 struct pmo_device_caps caps; 65 void *dp_hdl; 66 void *htc_hdl; 67 void *hif_hdl; 68 uint8_t txrx_pdev_id; 69 pmo_notify_pause_bitmap pause_bitmap_notifier; 70 pmo_get_pause_bitmap get_pause_bitmap; 71 pmo_get_vdev_dp_handle get_vdev_dp_handle; 72 pmo_is_device_in_low_pwr_mode is_device_in_low_pwr_mode; 73 pmo_get_dtim_period get_dtim_period; 74 pmo_get_beacon_interval get_beacon_interval; 75 qdf_spinlock_t lock; 76 }; 77 78 /** 79 * struct wlan_pmo_ctx -offload mgr context 80 * @psoc_context: psoc context 81 * @pmo_suspend_handler: suspend handler table for all components 82 * @pmo_suspend_handler_arg: suspend handler argument sfor all components 83 * @pmo_resume_handler: resume handler table for all components 84 * @pmo_resume_handler_arg: resume handler argument for all components 85 * @lock: lock for global pmo ctx 86 */ 87 struct wlan_pmo_ctx { 88 pmo_psoc_suspend_handler 89 pmo_suspend_handler[WLAN_UMAC_MAX_COMPONENTS]; 90 void *pmo_suspend_handler_arg[WLAN_UMAC_MAX_COMPONENTS]; 91 pmo_psoc_resume_handler 92 pmo_resume_handler[WLAN_UMAC_MAX_COMPONENTS]; 93 void *pmo_resume_handler_arg[WLAN_UMAC_MAX_COMPONENTS]; 94 qdf_spinlock_t lock; 95 }; 96 97 /** 98 * struct pmo_vdev_priv_obj -vdev specific user configuration required for pmo 99 * @pmo_psoc_ctx: pmo psoc ctx 100 * @vdev_arp_req: place holder for arp request for vdev 101 * @vdev_ns_req: place holder for ns request for vdev 102 * @vdev_mc_list_req: place holder for mc addr list for vdev 103 * @addr_filter_pattern: addr filter pattern for vdev 104 * @vdev_gtk_req: place holder for gtk request for vdev 105 * @vdev_gtk_rsp_req: place holder for gtk response request for vdev 106 * @ps_params: OPM params 107 * @gtk_err_enable: gtk error is enabled or not 108 * @vdev_bpf_req: place holder for apf/bpf for vdev 109 * @vdev_pkt_filter: place holder for vdev packet filter 110 * @magic_ptrn_enable: true when magic pattern is enabled else false 111 * @ptrn_match_enable: true when pattern match is enabled else false 112 * @num_wow_default_patterns: number of wow default patterns for vdev 113 * @num_wow_user_patterns: number of user wow patterns for vdev 114 * @extscan_in_progress: true when extscan in progress else false 115 * @p2plo_in_progress: true when p2plo_in_progress in progress else false 116 * @dtim_period: dtim period for vdev 117 * @beacon_interval: vdev beacon interval 118 * @dyn_modulated_dtim: dynamically configured modulated dtim value 119 * @dyn_modulated_dtim_enabled: if dynamically modulated dtim is set or not 120 * @is_dyn_modulated_dtim_activated: if dynamically modulated dtim is sent to fw 121 * @dyn_listen_interval: dynamically user configured listen interval 122 * @restore_dtim_setting: DTIM settings restore flag 123 * @pmo_vdev_lock: spin lock for pmo vdev priv ctx 124 * @dyn_arp_ns_offload_disable: true when arp/ns offload is disable 125 * @dyn_arp_ns_offload_rt_lock: wake lock which prevent runtime pm happen if 126 * arp/ns offload is disable 127 * @bridgeaddr: Bridge MAC address 128 */ 129 struct pmo_vdev_priv_obj { 130 struct pmo_psoc_priv_obj *pmo_psoc_ctx; 131 struct pmo_arp_offload_params vdev_arp_req; 132 struct pmo_ns_offload_params vdev_ns_req; 133 struct pmo_mc_addr_list vdev_mc_list_req; 134 uint8_t addr_filter_pattern; 135 struct pmo_gtk_req vdev_gtk_req; 136 struct pmo_gtk_rsp_req vdev_gtk_rsp_req; 137 struct pmo_ps_params ps_params; 138 qdf_atomic_t gtk_err_enable; 139 bool magic_ptrn_enable; 140 bool ptrn_match_enable; 141 uint8_t num_wow_default_patterns; 142 uint8_t num_wow_user_patterns; 143 bool extscan_in_progress; 144 bool p2plo_in_progress; 145 uint8_t dtim_period; 146 uint8_t beacon_interval; 147 uint32_t dyn_modulated_dtim; 148 bool dyn_modulated_dtim_enabled; 149 bool is_dyn_modulated_dtim_activated; 150 uint32_t dyn_listen_interval; 151 bool restore_dtim_setting; 152 qdf_spinlock_t pmo_vdev_lock; 153 #ifdef FEATURE_WLAN_DYNAMIC_ARP_NS_OFFLOAD 154 bool dyn_arp_ns_offload_disable; 155 qdf_runtime_lock_t dyn_arp_ns_offload_rt_lock; 156 #endif 157 uint8_t bridgeaddr[QDF_MAC_ADDR_SIZE]; 158 }; 159 160 #endif /* WLAN_POWER_MANAGEMENT_OFFLOAD */ 161 #endif /* end of _WLAN_PMO_PRIV_STRUCT_H_ */ 162