1 /*
2  * Copyright (c) 2016-2021 The Linux Foundation. All rights reserved.
3  * Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved.
4  * Permission to use, copy, modify, and/or distribute this software for
5  * any purpose with or without fee is hereby granted, provided that the
6  * above copyright notice and this permission notice appear in all
7  * copies.
8  *
9  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
10  * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
11  * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
12  * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
13  * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
14  * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
15  * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
16  * PERFORMANCE OF THIS SOFTWARE.
17  */
18  /**
19   * DOC: Define the pSoc data structure of UMAC
20   *      Public APIs to perform operations on Global objects
21   */
22 #ifndef _WLAN_OBJMGR_PSOC_OBJ_H_
23 #define _WLAN_OBJMGR_PSOC_OBJ_H_
24 
25 #include "wlan_objmgr_cmn.h"
26 #include "wlan_objmgr_debug.h"
27 
28 #define REG_DMN_CH144        0x0001
29 #define REG_DMN_ENTREPRISE   0x0002
30 
31 
32 /* fw_caps */
33 	/* CAPABILITY: WEP available */
34 #define WLAN_SOC_C_WEP                  0x00000001
35 	/* CAPABILITY: TKIP available */
36 #define WLAN_SOC_C_TKIP                 0x00000002
37 	/* CAPABILITY: AES OCB avail */
38 #define WLAN_SOC_C_AES                  0x00000004
39 	/* CAPABILITY: AES CCM avail */
40 #define WLAN_SOC_C_AES_CCM              0x00000008
41 	/* CAPABILITY: 11n HT available */
42 #define WLAN_SOC_C_HT                   0x00000010
43 	/* CAPABILITY: CKIP available */
44 #define WLAN_SOC_C_CKIP                 0x00000020
45 	/* CAPABILITY: ATH FF avail */
46 #define WLAN_SOC_C_FF                   0x00000040
47 	/* CAPABILITY: ATH Turbo avail*/
48 #define WLAN_SOC_C_TURBOP               0x00000080
49 	/* CAPABILITY: IBSS available */
50 #define WLAN_SOC_C_IBSS                 0x00000100
51 	/* CAPABILITY: Power mgmt */
52 #define WLAN_SOC_C_PMGT                 0x00000200
53 	/* CAPABILITY: HOSTAP avail */
54 #define WLAN_SOC_C_HOSTAP               0x00000400
55 	/* CAPABILITY: Old Adhoc Demo */
56 #define WLAN_SOC_C_AHDEMO               0x00000800
57 	/* CAPABILITY: tx power mgmt */
58 #define WLAN_SOC_C_TXPMGT               0x00001000
59 	/* CAPABILITY: short slottime */
60 #define WLAN_SOC_C_SHSLOT               0x00002000
61 	/* CAPABILITY: short preamble */
62 #define WLAN_SOC_C_SHPREAMBLE           0x00004000
63 	/* CAPABILITY: monitor mode */
64 #define WLAN_SOC_C_MONITOR              0x00008000
65 	/* CAPABILITY: TKIP MIC avail */
66 #define WLAN_SOC_C_TKIPMIC              0x00010000
67 	/* CAPABILITY: ATH WAPI avail */
68 #define WLAN_SOC_C_WAPI                 0x00020000
69 	/* CONF: WDS auto Detect/DELBA */
70 #define WLAN_SOC_C_WDS_AUTODETECT       0x00040000
71 	/* CAPABILITY: WPA1 avail */
72 #define WLAN_SOC_C_WPA1                 0x00080000
73 	/* CAPABILITY: WPA2 avail */
74 #define WLAN_SOC_C_WPA2                 0x00100000
75 	/* CAPABILITY: WPA1+WPA2 avail*/
76 #define WLAN_SOC_C_WPA                  0x00180000
77 	/* CAPABILITY: frame bursting */
78 #define WLAN_SOC_C_BURST                0x00200000
79 	/* CAPABILITY: WME avail */
80 #define WLAN_SOC_C_WME                  0x00400000
81 	/* CAPABILITY: 4-addr support */
82 #define WLAN_SOC_C_WDS                  0x00800000
83 	/* CAPABILITY: TKIP MIC for QoS frame */
84 #define WLAN_SOC_C_WME_TKIPMIC          0x01000000
85 	/* CAPABILITY: bg scanning */
86 #define WLAN_SOC_C_BGSCAN               0x02000000
87 	/* CAPABILITY: UAPSD */
88 #define WLAN_SOC_C_UAPSD                0x04000000
89 	/* CAPABILITY: enabled 11.h */
90 #define WLAN_SOC_C_DOTH                 0x08000000
91 
92 /* XXX protection/barker? */
93 	/* CAPABILITY: crypto alg's */
94 #define WLAN_SOC_C_CRYPTO         0x0000002f
95 
96 /* fw_caps_ext */
97 	/* CAPABILITY: fast channel change */
98 #define WLAN_SOC_CEXT_FASTCC           0x00000001
99 	/* CAPABILITY: P2P */
100 #define WLAN_SOC_CEXT_P2P              0x00000002
101 	/* CAPABILITY: Multi-Channel Operations */
102 #define WLAN_SOC_CEXT_MULTICHAN        0x00000004
103 	/* CAPABILITY: the device supports perf and power offload */
104 #define WLAN_SOC_CEXT_PERF_PWR_OFLD    0x00000008
105 	/* CAPABILITY: the device supports 11ac */
106 #define WLAN_SOC_CEXT_11AC             0x00000010
107 	/* CAPABILITY: the device support acs channel hopping */
108 #define WLAN_SOC_CEXT_ACS_CHAN_HOP     0x00000020
109 	/* CAPABILITY: the device support STA DFS */
110 #define WLAN_SOC_CEXT_STADFS           0x00000040
111 	/* NSS offload capability */
112 #define WLAN_SOC_CEXT_NSS_OFFLOAD      0x00000080
113 	/* SW cal support capability */
114 #define WLAN_SOC_CEXT_SW_CAL           0x00000100
115 	/* Hybrid mode */
116 #define WLAN_SOC_CEXT_HYBRID_MODE      0x00000200
117 	/* TT support */
118 #define WLAN_SOC_CEXT_TT_SUPPORT       0x00000400
119 	/* WMI MGMT REF */
120 #define WLAN_SOC_CEXT_WMI_MGMT_REF     0x00000800
121 	/* Wideband scan */
122 #define WLAN_SOC_CEXT_WIDEBAND_SCAN    0x00001000
123 	/* TWT Requester capable */
124 #define WLAN_SOC_CEXT_TWT_REQUESTER    0x00002000
125 	/* TWT Responder capable */
126 #define WLAN_SOC_CEXT_TWT_RESPONDER    0x00004000
127 	/* HW DB2DBM CAPABLE */
128 #define WLAN_SOC_CEXT_HW_DB2DBM        0x00008000
129 	/* OBSS Narrow Bandwidth RU Tolerance */
130 #define WLAN_SOC_CEXT_OBSS_NBW_RU      0x00010000
131 	/* MBSS IE support */
132 #define WLAN_SOC_CEXT_MBSS_IE          0x00020000
133 	/* RXOLE Flow Search Support */
134 #define WLAN_SOC_CEXT_RX_FSE_SUPPORT   0x00040000
135 	/* Dynamic HW Mode Switch Support */
136 #define WLAN_SOC_CEXT_DYNAMIC_HW_MODE  0x00080000
137 	/* Restricted 80+80 MHz support */
138 #define WLAN_SOC_RESTRICTED_80P80_SUPPORT 0x00100000
139 	/* Indicates Firmware supports sending NSS ratio info to host */
140 #define WLAN_SOC_NSS_RATIO_TO_HOST_SUPPORT 0x00200000
141 	/* EMA AP Support */
142 #define WLAN_SOC_CEXT_EMA_AP           0x00400000
143 	/* MBSS PARAM IN START REQ Support */
144 #define WLAN_SOC_CEXT_MBSS_PARAM_IN_START   0x00800000
145 /* Per channel scan config flags support */
146 #define WLAN_SOC_CEXT_SCAN_PER_CH_CONFIG    0x01000000
147 	/* CAPABILITY: csa offload in case of AP */
148 #define WLAN_SOC_CEXT_CSA_TX_OFFLOAD      0x02000000
149 	/* AP initiator mode supported in staggered beacon mode */
150 #define WLAN_SOC_RTT_AP_INITIATOR_STAGGERED_MODE_SUPPORTED 0x04000000
151 	/* AP initiator mode supported in burst beacon mode */
152 #define WLAN_SOC_RTT_AP_INITIATOR_BURSTED_MODE_SUPPORTED 0x08000000
153 	/* ext cc event supported by fw */
154 #define WLAN_SOC_EXT_EVENT_SUPPORTED      0x010000000
155 	/* check 29th bit for p2p + p2p conc support by fw */
156 #define WLAN_SOC_EXT_P2P_P2P_CONC_SUPPORT 0x20000000
157 
158 /* check 31st bit for per channel pno scan config flags support */
159 #define WLAN_SOC_PNO_SCAN_CONFIG_PER_CHANNEL   0x40000000
160 
161 /* feature_flags */
162 	/* CONF: ATH FF enabled */
163 #define WLAN_SOC_F_FF                   0x00000001
164 	/* CONF: ATH Turbo enabled*/
165 #define WLAN_SOC_F_TURBOP               0x00000002
166 	/* STATUS: promiscuous mode */
167 #define WLAN_SOC_F_PROMISC              0x00000004
168 	/* STATUS: all multicast mode */
169 #define WLAN_SOC_F_ALLMULTI             0x00000008
170 /* NB: this is intentionally setup to be IEEE80211_CAPINFO_PRIVACY */
171 	/* STATUS: start IBSS */
172 #define WLAN_SOC_F_SIBSS                0x00000010
173 /* NB: this is intentionally setup to be IEEE80211_CAPINFO_SHORT_SLOTTIME */
174 	/* CONF: Power mgmt enable */
175 #define WLAN_SOC_F_PMGTON               0x00000020
176 	/* CONF: IBSS creation enable */
177 #define WLAN_SOC_F_IBSSON               0x00000040
178 	/* force chanswitch */
179 #define WLAN_SOC_F_CHANSWITCH           0x00000080
180 
181 /* ic_flags_ext and/or iv_flags_ext */
182 	/* CONF: enable country IE */
183 #define WLAN_SOC_F_COUNTRYIE           0x00000100
184 	/* STATE: enable full bgscan completion */
185 #define WLAN_SOC_F_BGSCAN              0x00000200
186 	/* CONF: enable U-APSD */
187 #define WLAN_SOC_F_UAPSD               0x00000400
188 	/* STATUS: sleeping */
189 #define WLAN_SOC_F_SLEEP               0x00000800
190 	/* Enable marking of dfs interference */
191 #define WLAN_SOC_F_MARKDFS             0x00001000
192 	/* enable or disable s/w ccmp encrypt decrypt support */
193 #define WLAN_SOC_F_CCMPSW_ENCDEC       0x00002000
194 	/* STATE: hibernating */
195 #define WLAN_SOC_F_HIBERNATION         0x00004000
196 	/* CONF: desired country has been set */
197 #define WLAN_SOC_F_DESCOUNTRY          0x00008000
198 	/* CONF: enable power capability or constraint IE */
199 #define WLAN_SOC_F_PWRCNSTRIE          0x00010000
200 	/* STATUS: 11D in used */
201 #define WLAN_SOC_F_DOT11D              0x00020000
202 	/* Beacon offload */
203 #define WLAN_SOC_F_BCN_OFFLOAD         0x00040000
204 	/* LTEU support */
205 #define WLAN_SOC_F_LTEU_SUPPORT        0x00100000
206 	/* BT coext support */
207 #define WLAN_SOC_F_BTCOEX_SUPPORT      0x00200000
208 	/* HOST 80211 enable*/
209 #define WLAN_SOC_F_HOST_80211_ENABLE   0x00400000
210 	/* Spectral disable from INI */
211 #define WLAN_SOC_F_SPECTRAL_INI_DISABLE    0x00800000
212 	/* FTM testmode enable */
213 #define WLAN_SOC_F_TESTMODE_ENABLE     0x01000000
214 	/* Dynamic HW mode switchh enable */
215 #define WLAN_SOC_F_DYNAMIC_HW_MODE     0x02000000
216 	/* Broadcast TWT support enable */
217 #define WLAN_SOC_F_BCAST_TWT           0x04000000
218        /* WDS Extended support */
219 #define WLAN_SOC_F_WDS_EXTENDED        0x08000000
220 /* Peer create response */
221 #define WLAN_SOC_F_PEER_CREATE_RESP    0x10000000
222 /* Strict channel mode */
223 #define WLAN_SOC_F_STRICT_CHANNEL      0x20000000
224 /* MGMT Rx REO feature capability */
225 #define WLAN_SOC_F_MGMT_RX_REO_CAPABLE  0x40000000
226 
227 /* 11AZ Secure ranging Feature flags */
228 /* 11AZ Non-Trigger based ranging support */
229 #define WLAN_RTT_11AZ_NTB_SUPPORT 0x80000000
230 
231 /*
232  * Feature flags are exhausted. Add EXT feature caps below to extend
233  * the feature flags
234  */
235 
236 /* 11AZ Trigger based ranging support */
237 #define WLAN_RTT_11AZ_TB_SUPPORT  0x00000001
238 /* 11AZ Secure ranging PASN Support */
239 #define WLAN_RTT_11AZ_MAC_SEC_SUPPORT    0x00000002
240 /* 11AZ Secure ranging PHY Security support */
241 #define WLAN_RTT_11AZ_MAC_PHY_SEC_SUPPORT 0x00000004
242 
243 /* Roam Frame info stats - per candidate frames support */
244 #define WLAN_ROAM_STATS_FRAME_INFO_PER_CANDIDATE  0x00000008
245 /* multi client feature flags support */
246 #define WLAN_SOC_WLM_MULTI_CLIENT_LL_SUPPORT      0x00000010
247 /* vendor handoff control feature support */
248 #define WLAN_SOC_VENDOR_HANDOFF_CONTROL           0x00000020
249 
250 /* Delete all vdev peer support */
251 #define WLAN_VDEV_DELETE_ALL_PEER_SUPPORT         0x00000040
252 
253 /* Restricted TWT */
254 #define WLAN_SOC_F_RESTRICTED_TWT           0x00000080
255 
256 /* Support for TDLS Concurrencies for Legacy STA & ML STA*/
257 #define WLAN_TDLS_CONCURRENCIES_SUPPORT           0x0000100
258 
259 /* 11AZ Trigger based ranging Responder support */
260 #define WLAN_RTT_11AZ_TB_RSTA_SUPPORT 0x00000200
261 
262 /* CCA busy info for each 20Mhz subband of wideband scan channel support */
263 #define WLAN_CCA_BUSY_INFO_FOREACH_20MHZ               0x00000400
264 /* ch width notify support */
265 #define WLAN_VDEV_PARAM_CHWIDTH_WITH_NOTIFY_SUPPORT    0x00000800
266 
267 /* PSOC op flags */
268 
269 	/* Invalid VHT cap */
270 #define WLAN_SOC_OP_VHT_INVALID_CAP    0x00000001
271 
272 /* enum wlan_nss_ratio - NSS ratio received from FW during service ready ext
273  *                       event.
274  * WLAN_NSS_RATIO_1BY2_NSS : Max nss of 160MHz is equals to half of the max nss
275  *                           of 80MHz
276  * WLAN_NSS_RATIO_3BY4_NSS : Max nss of 160MHz is equals to 3/4 of the max nss
277  *                           of 80MHz
278  * WLAN_NSS_RATIO_1_NSS    : Max nss of 160MHz is equals to the max nss of 80MHz
279  * WLAN_NSS_RATIO_2_NSS    : Max nss of 160MHz is equals to two times the max
280  *                           nss of 80MHz
281  * Values of this enum should be in sync with WMI_NSS_RATIO_INFO value provided
282  * in wmi_unified.h.
283  */
284 enum wlan_nss_ratio {
285 	WLAN_NSS_RATIO_1BY2_NSS = 0x0,
286 	WLAN_NSS_RATIO_3BY4_NSS = 0x1,
287 	WLAN_NSS_RATIO_1_NSS = 0x2,
288 	WLAN_NSS_RATIO_2_NSS = 0x3,
289 };
290 
291 /**
292  * struct wlan_objmgr_psoc_regulatory -  Regulatory sub structure of PSOC
293  * @country_code:  Country code
294  * @reg_dmn:       Regulatory Domain
295  * @reg_flags:     Regulatory flags
296  */
297 struct wlan_objmgr_psoc_regulatory {
298 	uint16_t country_code;
299 	uint16_t reg_dmn;
300 	uint16_t reg_flags;
301 };
302 
303 /**
304  * struct wlan_objmgr_psoc_user_config -  user configurations to
305  * be used by common modules
306  * @is_11d_support_enabled: Enable/disable 11d feature
307  * @is_11h_support_enabled: Enable/disable 11h feature
308  * @dot11_mode: Phy mode
309  * @skip_dfs_chnl_in_p2p_search: Skip Dfs Channel in case of P2P
310  *                             Search
311  * @band_capability: Preferred band (0:Both,  1:2G only,  2:5G only)
312  */
313 struct wlan_objmgr_psoc_user_config {
314 	bool is_11d_support_enabled;
315 	bool is_11h_support_enabled;
316 	uint8_t dot11_mode;
317 	uint8_t band_capability;
318 };
319 
320 /**
321  * struct wlan_objmgr_psoc_nif - HDD/OSIF specific sub structure of PSOC
322  * @phy_version:     phy version, read in device probe
323  * @phy_type:        OL/DA type
324  * @soc_fw_caps:     FW capabilities
325  * @soc_fw_ext_caps: FW ext capabilities
326  * @soc_fw_ext2_caps: FW ext2 capabilities
327  * @soc_feature_caps:Feature capabilities
328  * @soc_op_flags:    Flags to set/reset during operation
329  * @soc_hw_macaddr:  HW MAC address
330  * @user_config:     user config from OS layer
331  */
332 struct wlan_objmgr_psoc_nif {
333 	uint32_t phy_version;
334 	WLAN_DEV_TYPE phy_type;
335 	uint32_t soc_fw_caps;
336 	uint32_t soc_fw_ext_caps;
337 	uint32_t soc_fw_ext2_caps;
338 	uint32_t soc_feature_caps;
339 	uint32_t soc_op_flags;
340 	uint8_t soc_hw_macaddr[QDF_MAC_ADDR_SIZE];
341 	struct wlan_objmgr_psoc_user_config user_config;
342 };
343 
344 /**
345  * struct wlan_objmgr_psoc_objmgr - psoc object manager sub structure
346  * @psoc_id:              The PSOC's numeric Id
347  * @wlan_pdev_count:      PDEV count
348  * @wlan_pdev_id_map:     PDEV id map, to allocate free ids
349  * @wlan_vdev_count:      VDEV count
350  * @max_vdev_count:       Max no. of VDEVs supported by this PSOC
351  * @print_cnt:            Count to throttle Logical delete prints
352  * @wlan_peer_count:      PEER count
353  * @max_peer_count:       Max no. of peers supported by this PSOC
354  * @temp_peer_count:      Temporary peer count
355  * @wlan_pdev_list:       PDEV list
356  * @wlan_vdev_list:       VDEV list
357  * @wlan_vdev_id_map:     VDEV id map, to allocate free ids
358  * @peer_list:            Peer list
359  * @ref_cnt:              Ref count
360  * @ref_id_dbg:           Array to track Ref count
361  * @qdf_dev:              QDF Device
362  */
363 struct wlan_objmgr_psoc_objmgr {
364 	uint8_t psoc_id;
365 	uint8_t wlan_pdev_count;
366 	uint8_t wlan_pdev_id_map;
367 	uint16_t wlan_vdev_count;
368 	uint16_t max_vdev_count;
369 	uint8_t print_cnt;
370 	uint16_t wlan_peer_count;
371 	uint16_t max_peer_count;
372 	uint16_t temp_peer_count;
373 	struct wlan_objmgr_pdev *wlan_pdev_list[WLAN_UMAC_MAX_PDEVS];
374 	struct wlan_objmgr_vdev *wlan_vdev_list[WLAN_UMAC_PSOC_MAX_VDEVS];
375 	qdf_bitmap(wlan_vdev_id_map, WLAN_UMAC_PSOC_MAX_VDEVS);
376 	struct wlan_peer_list peer_list;
377 	qdf_atomic_t ref_cnt;
378 	qdf_atomic_t ref_id_dbg[WLAN_REF_ID_MAX];
379 	qdf_device_t qdf_dev;
380 };
381 
382 /**
383  * struct wlan_soc_southbound_cb - Southbound callbacks
384  * @tx_ops: contains southbound tx callbacks
385  * @rx_ops: contains southbound rx callbacks
386  */
387 struct wlan_soc_southbound_cb {
388 	struct wlan_lmac_if_tx_ops *tx_ops;
389 	struct wlan_lmac_if_rx_ops *rx_ops;
390 };
391 
392 /**
393  * struct wlan_concurrency_info - structure for concurrency info
394  *
395  */
396 struct wlan_concurrency_info {
397 };
398 
399 /**
400  * struct wlan_soc_timer - structure for soc timer
401  *
402  */
403 struct wlan_soc_timer {
404 };
405 
406 /**
407  * struct wlan_objmgr_psoc - PSOC common object
408  * @soc_reg:               regulatory sub structure
409  * @soc_nif:               nif sub structure
410  * @soc_objmgr:            object manager sub structure
411  * @soc_cb:                south bound callbacks
412  * @soc_timer:             soc timer for inactivity
413  * @soc_concurrency:       concurrency info
414  * @soc_comp_priv_obj:     component private object pointers
415  * @obj_status:            component object status
416  * @obj_state:             object state
417  * @tgt_if_handle:         target interface handle
418  * @dp_handle:             DP module handle
419  * @psoc_lock:             psoc lock
420  * @skip_mlo_pumac:        skip this psoc as MLO primary umac
421  */
422 struct wlan_objmgr_psoc {
423 	struct wlan_objmgr_psoc_regulatory soc_reg;
424 	struct wlan_objmgr_psoc_nif  soc_nif;
425 	struct wlan_objmgr_psoc_objmgr soc_objmgr;
426 	struct wlan_soc_southbound_cb soc_cb;
427 	struct wlan_soc_timer soc_timer;
428 	struct wlan_concurrency_info soc_concurrency; /*TODO */
429 	void *soc_comp_priv_obj[WLAN_UMAC_MAX_COMPONENTS];
430 	QDF_STATUS obj_status[WLAN_UMAC_MAX_COMPONENTS];
431 	WLAN_OBJ_STATE obj_state;
432 	struct target_psoc_info *tgt_if_handle;
433 	void *dp_handle;
434 	qdf_spinlock_t psoc_lock;
435 	bool skip_mlo_pumac;
436 };
437 
438 /**
439  * struct wlan_psoc_host_hal_reg_capabilities_ext: Below are Reg caps per PHY.
440  *                       Please note PHY ID starts with 0.
441  * @phy_id: phy id starts with 0.
442  * @eeprom_reg_domain: regdomain value specified in EEPROM
443  * @eeprom_reg_domain_ext: regdomain
444  * @regcap1: CAP1 capabilities bit map, see REGDMN_CAP1_ defines
445  * @regcap2: REGDMN EEPROM CAP, see REGDMN_EEPROM_EEREGCAP_ defines
446  * @wireless_modes: REGDMN MODE, see REGDMN_MODE_ enum
447  * @low_2ghz_chan: 2 GHz channel low
448  * @high_2ghz_chan: 2 GHz channel High
449  * @low_5ghz_chan: 5 GHz channel low
450  * @high_5ghz_chan: 5 GHz channel High
451  */
452 struct wlan_psoc_host_hal_reg_capabilities_ext {
453 	uint32_t phy_id;
454 	uint32_t eeprom_reg_domain;
455 	uint32_t eeprom_reg_domain_ext;
456 	uint32_t regcap1;
457 	uint32_t regcap2;
458 	uint64_t wireless_modes;
459 	uint32_t low_2ghz_chan;
460 	uint32_t high_2ghz_chan;
461 	uint32_t low_5ghz_chan;
462 	uint32_t high_5ghz_chan;
463 };
464 
465 /**
466  * struct wlan_psoc_host_hal_reg_capabilities_ext2 - HAL reg capabilities
467  * from service ready ext2 event.
468  * @phy_id: phy id starts with 0
469  * @wireless_modes_ext: REGDMN MODE, see REGDMN_MODE_ enum
470  * @low_2ghz_chan_ext: 2 GHz channel low
471  * @high_2ghz_chan_ext: 2 GHz channel High
472  * @low_5ghz_chan_ext: 5 GHz channel low
473  * @high_5ghz_chan_ext: 5 GHz channel High
474  */
475 struct wlan_psoc_host_hal_reg_capabilities_ext2 {
476 	uint32_t phy_id;
477 	uint64_t wireless_modes_ext;
478 	uint32_t low_2ghz_chan_ext;
479 	uint32_t high_2ghz_chan_ext;
480 	uint32_t low_5ghz_chan_ext;
481 	uint32_t high_5ghz_chan_ext;
482 };
483 
484 /*
485  * APIs to Create/Delete Global object APIs
486  */
487 /**
488  * wlan_objmgr_psoc_obj_create() - psoc object create
489  * @phy_version: device id (from probe)
490  * @dev_type: Offload/DA
491  *
492  * Creates PSOC object, initializes with default values
493  * Invokes the registered notifiers to create component object
494  *
495  * Return: Handle to struct wlan_objmgr_psoc on successful creation,
496  *         NULL on Failure (on Mem alloc failure and Component objects
497  *         Failure)
498  */
499 struct wlan_objmgr_psoc *wlan_objmgr_psoc_obj_create(uint32_t phy_version,
500 				WLAN_DEV_TYPE dev_type);
501 
502 /**
503  * wlan_objmgr_psoc_obj_delete() - psoc object delete
504  * @psoc: PSOC object
505  *
506  * Logically deletes PSOC object,
507  * Once all the references are released, object manager invokes the registered
508  * notifiers to destroy component objects
509  *
510  * Return: SUCCESS/FAILURE
511  */
512 QDF_STATUS wlan_objmgr_psoc_obj_delete(struct wlan_objmgr_psoc *psoc);
513 
514 /*
515  * APIs to attach/detach component objects
516  */
517 
518 /**
519  * wlan_objmgr_psoc_component_obj_attach() - psoc comp object attach
520  * @psoc: PSOC object
521  * @id: Component id
522  * @comp_priv_obj: component's private object pointer
523  * @status: Component's private object creation status
524  *
525  * API to be used for attaching component object with PSOC common object
526  *
527  * Return: SUCCESS on successful storing of component's object in common object
528  *         On FAILURE (appropriate failure codes are returned)
529  */
530 QDF_STATUS wlan_objmgr_psoc_component_obj_attach(
531 		struct wlan_objmgr_psoc *psoc,
532 		enum wlan_umac_comp_id id,
533 		void *comp_priv_obj,
534 		QDF_STATUS status);
535 
536 /**
537  * wlan_objmgr_psoc_component_obj_detach() - psoc comp object detach
538  * @psoc: PSOC object
539  * @id: Component id
540  * @comp_priv_obj: component's private object pointer
541  *
542  * API to be used for detaching component object with PSOC common object
543  *
544  * Return: SUCCESS on successful removal of component's object from common
545  *         object
546  *         On FAILURE (appropriate failure codes are returned)
547  */
548 QDF_STATUS wlan_objmgr_psoc_component_obj_detach(
549 		struct wlan_objmgr_psoc *psoc,
550 		enum wlan_umac_comp_id id,
551 		void *comp_priv_obj);
552 
553 /*
554  * APIs to operations on psoc objects
555  */
556 typedef void (*wlan_objmgr_op_handler)(struct wlan_objmgr_psoc *psoc,
557 					void *object,
558 					void *arg);
559 
560 /**
561  * wlan_objmgr_iterate_obj_list() - iterate through all psoc objects
562  *                                  (CREATED state)
563  * @psoc: PSOC object
564  * @obj_type: PDEV_OP/VDEV_OP/PEER_OP
565  * @handler: the handler will be called for each object of requested type
566  *            the handler should be implemented to perform required operation
567  * @arg:     arguments passed by caller
568  * @lock_free_op: its obsolete
569  * @dbg_id: id of the caller
570  *
571  * API to be used for performing the operations on all PDEV/VDEV/PEER objects
572  * of psoc
573  *
574  * Return: SUCCESS/FAILURE
575  */
576 QDF_STATUS wlan_objmgr_iterate_obj_list(
577 		struct wlan_objmgr_psoc *psoc,
578 		enum wlan_objmgr_obj_type obj_type,
579 		wlan_objmgr_op_handler handler,
580 		void *arg, uint8_t lock_free_op,
581 		wlan_objmgr_ref_dbgid dbg_id);
582 
583 /**
584  * wlan_objmgr_iterate_obj_list_all() - iterate through all psoc objects
585  * @psoc: PSOC object
586  * @obj_type: PDEV_OP/VDEV_OP/PEER_OP
587  * @handler: the handler will be called for each object of requested type
588  *            the handler should be implemented to perform required operation
589  * @arg:     arguments passed by caller
590  * @lock_free_op: its obsolete
591  * @dbg_id: id of the caller
592  *
593  * API to be used for performing the operations on all PDEV/VDEV/PEER objects
594  * of psoc
595  *
596  * Return: SUCCESS/FAILURE
597  */
598 QDF_STATUS wlan_objmgr_iterate_obj_list_all(
599 		struct wlan_objmgr_psoc *psoc,
600 		enum wlan_objmgr_obj_type obj_type,
601 		wlan_objmgr_op_handler handler,
602 		void *arg, uint8_t lock_free_op,
603 		wlan_objmgr_ref_dbgid dbg_id);
604 
605 /**
606  * wlan_objmgr_free_all_objects_per_psoc() - free all psoc objects
607  * @psoc: PSOC object
608  *
609  * API to be used free all the objects(pdev/vdev/peer) of psoc
610  *
611  * Return: SUCCESS/FAILURE
612  */
613 QDF_STATUS wlan_objmgr_free_all_objects_per_psoc(
614 		struct wlan_objmgr_psoc *psoc);
615 
616 /**
617  * wlan_objmgr_trigger_psoc_comp_priv_object_creation() - create
618  * psoc comp object
619  * @psoc: PSOC object
620  * @id: Component id
621  *
622  * API to create component private object in run time, this would
623  * be used for features which gets enabled in run time
624  *
625  * Return: SUCCESS on successful creation
626  *         On FAILURE (appropriate failure codes are returned)
627  */
628 QDF_STATUS wlan_objmgr_trigger_psoc_comp_priv_object_creation(
629 		struct wlan_objmgr_psoc *psoc,
630 		enum wlan_umac_comp_id id);
631 
632 /**
633  * wlan_objmgr_trigger_psoc_comp_priv_object_deletion() - destroy
634  * psoc comp object
635  * @psoc: PSOC object
636  * @id: Component id
637  *
638  * API to destroy component private object in run time, this would
639  * be used for features which gets disabled in run time
640  *
641  * Return: SUCCESS on successful deletion
642  *         On FAILURE (appropriate failure codes are returned)
643  */
644 QDF_STATUS wlan_objmgr_trigger_psoc_comp_priv_object_deletion(
645 		struct wlan_objmgr_psoc *psoc,
646 		enum wlan_umac_comp_id id);
647 
648 /**
649  * wlan_objmgr_get_peer_by_mac() - find peer from psoc's peer list
650  * @psoc: PSOC object
651  * @macaddr: MAC address
652  * @dbg_id: id of the caller
653  *
654  * API to find peer object pointer by MAC addr
655  *
656  * This API increments the ref count of the peer object internally, the
657  * caller has to invoke the wlan_objmgr_peer_release_ref() to decrement
658  * ref count
659  *
660  * Return: peer pointer
661  *         NULL on FAILURE
662  */
663 #ifdef WLAN_OBJMGR_REF_ID_TRACE
664 #define wlan_objmgr_get_peer_by_mac(psoc, macaddr, dbg_id) \
665 		wlan_objmgr_get_peer_by_mac_debug(psoc, macaddr, dbg_id, \
666 		__func__, __LINE__)
667 
668 struct wlan_objmgr_peer *wlan_objmgr_get_peer_by_mac_debug(
669 		struct wlan_objmgr_psoc *psoc, uint8_t *macaddr,
670 		wlan_objmgr_ref_dbgid dbg_id, const char *func, int line);
671 #else
672 struct wlan_objmgr_peer *wlan_objmgr_get_peer_by_mac(
673 		struct wlan_objmgr_psoc *psoc, uint8_t *macaddr,
674 		wlan_objmgr_ref_dbgid dbg_id);
675 #endif
676 
677 /**
678  * wlan_objmgr_get_peer() - find peer from psoc's peer list
679  * @psoc: PSOC object
680  * @pdev_id: Pdev id
681  * @macaddr: MAC address
682  * @dbg_id: id of the caller
683  *
684  * API to find peer object pointer by MAC addr and pdev id
685  *
686  * This API increments the ref count of the peer object internally, the
687  * caller has to invoke the wlan_objmgr_peer_release_ref() to decrement
688  * ref count
689  *
690  * Return: peer pointer
691  *         NULL on FAILURE
692  */
693 #ifdef WLAN_OBJMGR_REF_ID_TRACE
694 #define wlan_objmgr_get_peer(psoc, pdev_id, macaddr, dbg_id) \
695 		wlan_objmgr_get_peer_debug(psoc, pdev_id, macaddr, dbg_id, \
696 		__func__, __LINE__)
697 
698 struct wlan_objmgr_peer *wlan_objmgr_get_peer_debug(
699 			struct wlan_objmgr_psoc *psoc, uint8_t pdev_id,
700 			const uint8_t *macaddr, wlan_objmgr_ref_dbgid dbg_id,
701 			const char *func, int line);
702 #else
703 struct wlan_objmgr_peer *wlan_objmgr_get_peer(
704 			struct wlan_objmgr_psoc *psoc, uint8_t pdev_id,
705 			const uint8_t *macaddr, wlan_objmgr_ref_dbgid dbg_id);
706 #endif
707 
708 /**
709  * wlan_objmgr_get_peer_nolock() - find peer from psoc's peer list (lock free)
710  * @psoc: PSOC object
711  * @pdev_id: Pdev id
712  * @macaddr: MAC address
713  * @dbg_id: id of the caller
714  *
715  * API to find peer object pointer by MAC addr
716  *
717  * This API increments the ref count of the peer object internally, the
718  * caller has to invoke the wlan_objmgr_peer_release_ref() to decrement
719  * ref count
720  *
721  * Return: peer pointer
722  *         NULL on FAILURE
723  */
724 #ifdef WLAN_OBJMGR_REF_ID_TRACE
725 #define wlan_objmgr_get_peer_nolock(psoc, pdev_id, macaddr, dbg_id) \
726 		wlan_objmgr_get_peer_nolock_debug(psoc, pdev_id, macaddr, \
727 		dbg_id, __func__, __LINE__)
728 
729 struct wlan_objmgr_peer *wlan_objmgr_get_peer_nolock_debug(
730 			struct wlan_objmgr_psoc *psoc, uint8_t pdev_id,
731 			uint8_t *macaddr, wlan_objmgr_ref_dbgid dbg_id,
732 			const char *func, int line);
733 #else
734 struct wlan_objmgr_peer *wlan_objmgr_get_peer_nolock(
735 			struct wlan_objmgr_psoc *psoc, uint8_t pdev_id,
736 			uint8_t *macaddr, wlan_objmgr_ref_dbgid dbg_id);
737 #endif
738 
739 /**
740  * wlan_objmgr_get_peer_logically_deleted() - find peer
741  * from psoc's peer list
742  * @psoc: PSOC object
743  * @macaddr: MAC address
744  * @dbg_id: id of the caller
745  *
746  * API to find peer object pointer of logically deleted peer
747  *
748  * This API increments the ref count of the peer object internally, the
749  * caller has to invoke the wlan_objmgr_peer_release_ref() to decrement
750  * ref count
751  *
752  * Return: peer pointer
753  *         NULL on FAILURE
754  */
755 #ifdef WLAN_OBJMGR_REF_ID_TRACE
756 #define wlan_objmgr_get_peer_logically_deleted(psoc, macaddr, dbg_id) \
757 		wlan_objmgr_get_peer_logically_deleted_debug(psoc, macaddr, \
758 		dbg_id, __func__, __LINE__)
759 
760 struct wlan_objmgr_peer *wlan_objmgr_get_peer_logically_deleted_debug(
761 			struct wlan_objmgr_psoc *psoc, uint8_t *macaddr,
762 			wlan_objmgr_ref_dbgid dbg_id,
763 			const char *func, int line);
764 #else
765 struct wlan_objmgr_peer *wlan_objmgr_get_peer_logically_deleted(
766 			struct wlan_objmgr_psoc *psoc, uint8_t *macaddr,
767 			wlan_objmgr_ref_dbgid dbg_id);
768 #endif
769 
770 /**
771  * wlan_objmgr_get_peer_no_state() - find peer from psoc's peer list
772  * @psoc: PSOC object
773  * @pdev_id: Pdev id
774  * @macaddr: MAC address
775  * @dbg_id: id of the caller
776  *
777  * API to find peer object pointer by MAC addr and pdev id,
778  * ignores the state check
779  *
780  * This API increments the ref count of the peer object internally, the
781  * caller has to invoke the wlan_objmgr_peer_release_ref() to decrement
782  * ref count
783  *
784  * Return: peer pointer
785  *         NULL on FAILURE
786  */
787 #ifdef WLAN_OBJMGR_REF_ID_TRACE
788 #define wlan_objmgr_get_peer_no_state(psoc, pdev_id, macaddr, dbg_id) \
789 		wlan_objmgr_get_peer_no_state_debug(psoc, pdev_id, macaddr, \
790 		dbg_id, __func__, __LINE__)
791 
792 struct wlan_objmgr_peer *wlan_objmgr_get_peer_no_state_debug(
793 			struct wlan_objmgr_psoc *psoc, uint8_t pdev_id,
794 			uint8_t *macaddr, wlan_objmgr_ref_dbgid dbg_id,
795 			const char *func, int line);
796 #else
797 struct wlan_objmgr_peer *wlan_objmgr_get_peer_no_state(
798 			struct wlan_objmgr_psoc *psoc, uint8_t pdev_id,
799 			uint8_t *macaddr, wlan_objmgr_ref_dbgid dbg_id);
800 #endif
801 
802 #ifdef WLAN_OBJMGR_REF_ID_TRACE
803 /**
804  * wlan_objmgr_populate_logically_deleted_peerlist_by_mac_n_vdev_debug() -
805  *                                                           get peer from psoc
806  *                                                           peer list using
807  *                                                           mac and vdev
808  *                                                           self mac
809  * @psoc: PSOC object
810  * @pdev_id: Pdev id
811  * @macaddr: MAC address
812  * @bssid: BSSID address. NULL mac means search all.
813  * @dbg_id: id of the caller
814  * @func: function name
815  * @line: line number
816  *
817  * API to finds peer object pointer by MAC addr and BSSID from
818  * peer hash list, bssid check is done on matching peer
819  *
820  * Return: list of peer pointer pointers
821  *         NULL on FAILURE
822  */
823 qdf_list_t *wlan_objmgr_populate_logically_deleted_peerlist_by_mac_n_vdev_debug(
824 			struct wlan_objmgr_psoc *psoc, uint8_t pdev_id,
825 			uint8_t *bssid, uint8_t *macaddr,
826 			wlan_objmgr_ref_dbgid dbg_id,
827 			const char *func, int line);
828 
829 #define wlan_objmgr_populate_logically_deleted_peerlist_by_mac_n_vdev( \
830 	psoc, pdev_id, bssid, macaddr, dbgid) \
831 		wlan_objmgr_populate_logically_deleted_peerlist_by_mac_n_vdev_debug( \
832 		psoc, pdev_id, bssid, macaddr, dbgid, __func__, __LINE__)
833 #else
834 /**
835  * wlan_objmgr_populate_logically_deleted_peerlist_by_mac_n_vdev() - get peer from
836  *                                                psoc peer list using
837  *                                                mac and vdev
838  *                                                self mac
839  * @psoc: PSOC object
840  * @pdev_id: Pdev id
841  * @bssid: BSSID address
842  * @macaddr: MAC address
843  * @dbg_id: id of the caller
844  *
845  * API to find peer object pointer by MAC addr, vdev self mac
846  * address and pdev id for a node that is logically in deleted state
847  *
848  * This API increments the ref count of the peer object internally, the
849  * caller has to invoke the wlan_objmgr_peer_release_ref() to decrement
850  * ref count
851  *
852  * Return: List of peer pointers
853  *         NULL on FAILURE
854  */
855 qdf_list_t *wlan_objmgr_populate_logically_deleted_peerlist_by_mac_n_vdev(
856 			struct wlan_objmgr_psoc *psoc, uint8_t pdev_id,
857 			uint8_t *bssid, uint8_t *macaddr,
858 			wlan_objmgr_ref_dbgid dbg_id);
859 #endif
860 
861 /**
862  * wlan_objmgr_get_peer_by_mac_n_vdev() - find peer from psoc's peer list
863  *                                          using mac address and bssid
864  * @psoc: PSOC object
865  * @pdev_id: Pdev id
866  * @bssid: MAC address of AP its associated
867  * @macaddr: MAC address
868  * @dbg_id: id of the caller
869  *
870  * API to find peer object pointer by MAC addr and vdev self mac address
871  * and pdev id
872  *
873  * This API increments the ref count of the peer object internally, the
874  * caller has to invoke the wlan_objmgr_peer_release_ref() to decrement
875  * ref count
876  *
877  * Return: peer pointer
878  *         NULL on FAILURE
879  */
880 #ifdef WLAN_OBJMGR_REF_ID_TRACE
881 #define wlan_objmgr_get_peer_by_mac_n_vdev(psoc, pdev_id, bssid, macaddr, \
882 	dbg_id) \
883 		wlan_objmgr_get_peer_by_mac_n_vdev_debug(psoc, pdev_id, \
884 		bssid, macaddr, dbg_id, __func__, __LINE__)
885 
886 struct wlan_objmgr_peer *wlan_objmgr_get_peer_by_mac_n_vdev_debug(
887 			struct wlan_objmgr_psoc *psoc, uint8_t pdev_id,
888 			uint8_t *bssid, uint8_t *macaddr,
889 			wlan_objmgr_ref_dbgid dbg_id,
890 			const char *func, int line);
891 #else
892 struct wlan_objmgr_peer *wlan_objmgr_get_peer_by_mac_n_vdev(
893 			struct wlan_objmgr_psoc *psoc, uint8_t pdev_id,
894 			uint8_t *bssid, uint8_t *macaddr,
895 			wlan_objmgr_ref_dbgid dbg_id);
896 #endif
897 
898 /**
899  * wlan_objmgr_get_peer_by_mac_n_vdev_no_state() - find peer from psoc's peer
900  *                                          list using mac address and bssid
901  * @psoc: PSOC object
902  * @pdev_id: Pdev id
903  * @bssid: MAC address of AP its associated
904  * @macaddr: MAC address
905  * @dbg_id: id of the caller
906  *
907  * API to find peer object pointer by MAC addr, vdev self mac address,
908  * and pdev id ,ignores the state
909  *
910  * This API increments the ref count of the peer object internally, the
911  * caller has to invoke the wlan_objmgr_peer_release_ref() to decrement
912  * ref count
913  *
914  * Return: peer pointer
915  *         NULL on FAILURE
916  */
917 #ifdef WLAN_OBJMGR_REF_ID_TRACE
918 #define wlan_objmgr_get_peer_by_mac_n_vdev_no_state(psoc, pdev_id, bssid, \
919 	macaddr, dbg_id) \
920 		wlan_objmgr_get_peer_by_mac_n_vdev_no_state_debug(psoc, \
921 		pdev_id, bssid, macaddr, dbg_id, __func__, __LINE__)
922 
923 struct wlan_objmgr_peer *wlan_objmgr_get_peer_by_mac_n_vdev_no_state_debug(
924 			struct wlan_objmgr_psoc *psoc, uint8_t pdev_id,
925 			uint8_t *bssid,  uint8_t *macaddr,
926 			wlan_objmgr_ref_dbgid dbg_id,
927 			const char *func, int line);
928 #else
929 struct wlan_objmgr_peer *wlan_objmgr_get_peer_by_mac_n_vdev_no_state(
930 			struct wlan_objmgr_psoc *psoc, uint8_t pdev_id,
931 			uint8_t *bssid,  uint8_t *macaddr,
932 			wlan_objmgr_ref_dbgid dbg_id);
933 #endif
934 
935 /**
936  * wlan_objmgr_get_pdev_by_id() - retrieve pdev by id
937  * @psoc: PSOC object
938  * @id: pdev id
939  * @dbg_id: id of the caller
940  *
941  * API to find pdev object pointer by pdev id
942  *
943  * This API increments the ref count of the pdev object internally, the
944  * caller has to invoke the wlan_objmgr_pdev_release_ref() to decrement
945  * ref count
946  *
947  * Return: pdev pointer
948  *         NULL on FAILURE
949  */
950 struct wlan_objmgr_pdev *wlan_objmgr_get_pdev_by_id(
951 		struct wlan_objmgr_psoc *psoc, uint8_t id,
952 		wlan_objmgr_ref_dbgid dbg_id);
953 
954 /**
955  * wlan_objmgr_get_pdev_by_id_no_state() - retrieve pdev by id
956  * @psoc: PSOC object
957  * @id: pdev id
958  * @dbg_id: id of the caller
959  *
960  * API to find pdev object pointer by pdev id, Ignores the state check
961  *
962  * This API increments the ref count of the pdev object internally, the
963  * caller has to invoke the wlan_objmgr_pdev_release_ref() to decrement
964  * ref count
965  *
966  * Return: pdev pointer
967  *         NULL on FAILURE
968  */
969 struct wlan_objmgr_pdev *wlan_objmgr_get_pdev_by_id_no_state(
970 			struct wlan_objmgr_psoc *psoc, uint8_t id,
971 			wlan_objmgr_ref_dbgid dbg_id);
972 
973 /**
974  * wlan_objmgr_get_pdev_by_macaddr() - retrieve pdev by macaddr
975  * @psoc: PSOC object
976  * @macaddr: MAC address
977  * @dbg_id: id of the caller
978  *
979  * API to find pdev object pointer by pdev macaddr
980  *
981  * This API increments the ref count of the pdev object internally, the
982  * caller has to invoke the wlan_objmgr_pdev_release_ref() to decrement
983  * ref count
984  *
985  * Return: pdev pointer
986  *         NULL on FAILURE
987  */
988 struct wlan_objmgr_pdev *wlan_objmgr_get_pdev_by_macaddr(
989 		struct wlan_objmgr_psoc *psoc, uint8_t *macaddr,
990 		wlan_objmgr_ref_dbgid dbg_id);
991 
992 /**
993  * wlan_objmgr_get_pdev_by_macaddr_no_state() - retrieve pdev by macaddr
994  * @psoc: PSOC object
995  * @macaddr: MAC address
996  * @dbg_id: id of the caller
997  *
998  * API to find pdev object pointer by pdev macaddr, ignores the state check
999  *
1000  * This API increments the ref count of the pdev object internally, the
1001  * caller has to invoke the wlan_objmgr_pdev_release_ref() to decrement
1002  * ref count
1003  *
1004  * Return: pdev pointer
1005  *         NULL on FAILURE
1006  */
1007 struct wlan_objmgr_pdev *wlan_objmgr_get_pdev_by_macaddr_no_state(
1008 		struct wlan_objmgr_psoc *psoc, uint8_t *macaddr,
1009 		wlan_objmgr_ref_dbgid dbg_id);
1010 
1011 /**
1012  * wlan_objmgr_get_vdev_by_opmode_from_psoc() - retrieve vdev by opmode
1013  * @psoc: PSOC object
1014  * @opmode: vdev operating mode
1015  * @dbg_id: id of the caller
1016  *
1017  * API to find vdev object pointer by vdev operating mode from psoc
1018  *
1019  * This API increments the ref count of the vdev object internally, the
1020  * caller has to invoke the wlan_objmgr_vdev_release_ref() to decrement
1021  * ref count
1022  *
1023  * Return: vdev pointer
1024  *         NULL on FAILURE
1025  */
1026 #ifdef WLAN_OBJMGR_REF_ID_TRACE
1027 #define wlan_objmgr_get_vdev_by_opmode_from_psoc(psoc, opmode, dbg_id) \
1028 		wlan_objmgr_get_vdev_by_opmode_from_psoc_debug(psoc, opmode, \
1029 		dbg_id, __func__, __LINE__)
1030 
1031 struct wlan_objmgr_vdev *wlan_objmgr_get_vdev_by_opmode_from_psoc_debug(
1032 			struct wlan_objmgr_psoc *psoc,
1033 			enum QDF_OPMODE opmode,
1034 			wlan_objmgr_ref_dbgid dbg_id,
1035 			const char *func, int line);
1036 #else
1037 struct wlan_objmgr_vdev *wlan_objmgr_get_vdev_by_opmode_from_psoc(
1038 			struct wlan_objmgr_psoc *psoc,
1039 			enum QDF_OPMODE opmode,
1040 			wlan_objmgr_ref_dbgid dbg_id);
1041 #endif
1042 
1043 /**
1044  * wlan_objmgr_get_vdev_by_id_from_psoc() - retrieve vdev by id
1045  * @psoc: PSOC object
1046  * @vdev_id: vdev id
1047  * @dbg_id: id of the caller
1048  *
1049  * API to find vdev object pointer by vdev id from psoc
1050  *
1051  * This API increments the ref count of the vdev object internally, the
1052  * caller has to invoke the wlan_objmgr_vdev_release_ref() to decrement
1053  * ref count
1054  *
1055  * Return: vdev pointer
1056  *         NULL on FAILURE
1057  */
1058 #ifdef WLAN_OBJMGR_REF_ID_TRACE
1059 #define wlan_objmgr_get_vdev_by_id_from_psoc(psoc, vdev_id, dbg_id) \
1060 		wlan_objmgr_get_vdev_by_id_from_psoc_debug(psoc, vdev_id, \
1061 		dbg_id, __func__, __LINE__)
1062 
1063 struct wlan_objmgr_vdev *wlan_objmgr_get_vdev_by_id_from_psoc_debug(
1064 			struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
1065 			wlan_objmgr_ref_dbgid dbg_id,
1066 			const char *func, int line);
1067 #else
1068 struct wlan_objmgr_vdev *wlan_objmgr_get_vdev_by_id_from_psoc(
1069 			struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
1070 			wlan_objmgr_ref_dbgid dbg_id);
1071 #endif
1072 
1073 /**
1074  * wlan_objmgr_get_vdev_by_id_from_psoc_no_state() - retrieve vdev by id
1075  * @psoc: PSOC object
1076  * @vdev_id: vdev id
1077  * @dbg_id: id of the caller
1078  *
1079  * API to find vdev object pointer by vdev id from psoc, ignores the
1080  * state check
1081  *
1082  * This API increments the ref count of the vdev object internally, the
1083  * caller has to invoke the wlan_objmgr_vdev_release_ref() to decrement
1084  * ref count
1085  *
1086  * Return: vdev pointer
1087  *         NULL on FAILURE
1088  */
1089 #ifdef WLAN_OBJMGR_REF_ID_TRACE
1090 #define wlan_objmgr_get_vdev_by_id_from_psoc_no_state(psoc, vdev_id, dbg_id) \
1091 		wlan_objmgr_get_vdev_by_id_from_psoc_no_state_debug(psoc, \
1092 		vdev_id, dbg_id, __func__, __LINE__)
1093 
1094 struct wlan_objmgr_vdev *wlan_objmgr_get_vdev_by_id_from_psoc_no_state_debug(
1095 			struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
1096 			wlan_objmgr_ref_dbgid dbg_id,
1097 			const char *func, int line);
1098 #else
1099 struct wlan_objmgr_vdev *wlan_objmgr_get_vdev_by_id_from_psoc_no_state(
1100 			struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
1101 			wlan_objmgr_ref_dbgid dbg_id);
1102 #endif
1103 
1104 /**
1105  * wlan_objmgr_get_vdev_by_id_from_psoc_not_log_del() - retrieve vdev by id
1106  * @psoc: PSOC object
1107  * @vdev_id: vdev id
1108  * @dbg_id: id of the caller
1109  *
1110  * API to find vdev object pointer by vdev id from psoc, ignores the
1111  * state check
1112  *
1113  * This API increments the ref count of the vdev object internally, the
1114  * caller has to invoke the wlan_objmgr_vdev_release_ref() to decrement
1115  * ref count
1116  *
1117  * Return: vdev pointer
1118  *         NULL on FAILURE
1119  */
1120 #ifdef WLAN_OBJMGR_REF_ID_TRACE
1121 #define wlan_objmgr_get_vdev_by_id_from_psoc_not_log_del(psoc, vdev_id, dbg_id) \
1122 		wlan_objmgr_get_vdev_by_id_from_psoc_not_log_del_debug(psoc, \
1123 		vdev_id, dbg_id, __func__, __LINE__)
1124 
1125 struct wlan_objmgr_vdev *wlan_objmgr_get_vdev_by_id_from_psoc_not_log_del_debug(
1126 			struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
1127 			wlan_objmgr_ref_dbgid dbg_id,
1128 			const char *func, int line);
1129 #else
1130 struct wlan_objmgr_vdev *wlan_objmgr_get_vdev_by_id_from_psoc_not_log_del(
1131 			struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
1132 			wlan_objmgr_ref_dbgid dbg_id);
1133 #endif
1134 
1135 /**
1136  * wlan_objmgr_get_vdev_by_macaddr_from_psoc() - retrieve vdev by macaddr
1137  * @psoc: PSOC object
1138  * @pdev_id: Pdev id
1139  * @macaddr: macaddr
1140  * @dbg_id: id of the caller
1141  *
1142  * API to find vdev object pointer by vdev macaddr from pdev
1143  *
1144  * This API increments the ref count of the vdev object internally, the
1145  * caller has to invoke the wlan_objmgr_vdev_release_ref() to decrement
1146  * ref count
1147  *
1148  * Return: vdev pointer
1149  *         NULL on FAILURE
1150  */
1151 #ifdef WLAN_OBJMGR_REF_ID_TRACE
1152 #define wlan_objmgr_get_vdev_by_macaddr_from_psoc(psoc, pdev_id, macaddr, \
1153 	dbg_id) \
1154 		wlan_objmgr_get_vdev_by_macaddr_from_psoc_debug(psoc, pdev_id, \
1155 		macaddr, dbg_id, __func__, __LINE__)
1156 
1157 struct wlan_objmgr_vdev *wlan_objmgr_get_vdev_by_macaddr_from_psoc_debug(
1158 		struct wlan_objmgr_psoc *psoc, uint8_t pdev_id,
1159 		const uint8_t *macaddr, wlan_objmgr_ref_dbgid dbg_id,
1160 		const char *func, int line);
1161 #else
1162 struct wlan_objmgr_vdev *wlan_objmgr_get_vdev_by_macaddr_from_psoc(
1163 		struct wlan_objmgr_psoc *psoc, uint8_t pdev_id,
1164 		const uint8_t *macaddr, wlan_objmgr_ref_dbgid dbg_id);
1165 #endif
1166 
1167 /**
1168  * wlan_objmgr_get_vdev_by_macaddr_from_psoc_no_state() - retrieve vdev by
1169  *                                                           macaddr
1170  * @psoc: PSOC object
1171  * @pdev_id: Pdev id
1172  * @macaddr: macaddr
1173  * @dbg_id: id of the caller
1174  *
1175  * API to find vdev object pointer by vdev macaddr from psoc, ignores the state
1176  * check
1177  *
1178  * This API increments the ref count of the vdev object internally, the
1179  * caller has to invoke the wlan_objmgr_vdev_release_ref() to decrement
1180  * ref count
1181  *
1182  * Return: vdev pointer
1183  *         NULL on FAILURE
1184  */
1185 #ifdef WLAN_OBJMGR_REF_ID_TRACE
1186 #define wlan_objmgr_get_vdev_by_macaddr_from_psoc_no_state(psoc, pdev_id, \
1187 	macaddr, dbg_id) \
1188 		wlan_objmgr_get_vdev_by_macaddr_from_psoc_no_state_debug(psoc, \
1189 		pdev_id, macaddr, dbg_id, __func__, __LINE__)
1190 
1191 struct wlan_objmgr_vdev
1192 	*wlan_objmgr_get_vdev_by_macaddr_from_psoc_no_state_debug(
1193 		struct wlan_objmgr_psoc *psoc, uint8_t pdev_id,
1194 		const uint8_t *macaddr, wlan_objmgr_ref_dbgid dbg_id,
1195 		const char *func, int line);
1196 #else
1197 struct wlan_objmgr_vdev *wlan_objmgr_get_vdev_by_macaddr_from_psoc_no_state(
1198 		struct wlan_objmgr_psoc *psoc, uint8_t pdev_id,
1199 		const uint8_t *macaddr, wlan_objmgr_ref_dbgid dbg_id);
1200 #endif
1201 
1202 /**
1203  * wlan_psoc_obj_lock() - Acquire PSOC spinlock
1204  * @psoc: PSOC object
1205  *
1206  * API to acquire PSOC lock
1207  * Parent lock should not be taken in child lock context
1208  * but child lock can be taken in parent lock context
1209  * (for ex: psoc lock can't be invoked in pdev/vdev/peer lock context)
1210  *
1211  * Return: void
1212  */
wlan_psoc_obj_lock(struct wlan_objmgr_psoc * psoc)1213 static inline void wlan_psoc_obj_lock(struct wlan_objmgr_psoc *psoc)
1214 {
1215 	qdf_spin_lock_bh(&psoc->psoc_lock);
1216 }
1217 
1218 /**
1219  * wlan_psoc_obj_unlock() - Release PSOC spinlock
1220  * @psoc: PSOC object
1221  *
1222  * API to Release PSOC lock
1223  *
1224  * Return: void
1225  */
wlan_psoc_obj_unlock(struct wlan_objmgr_psoc * psoc)1226 static inline void wlan_psoc_obj_unlock(struct wlan_objmgr_psoc *psoc)
1227 {
1228 	qdf_spin_unlock_bh(&psoc->psoc_lock);
1229 }
1230 
1231 /**
1232  * wlan_psoc_set_nif_phy_version() - set nif phy version
1233  * @psoc: PSOC object
1234  * @phy_ver: phy version
1235  *
1236  * API to set nif phy version in psoc
1237  *
1238  * Return: void
1239  */
wlan_psoc_set_nif_phy_version(struct wlan_objmgr_psoc * psoc,uint32_t phy_ver)1240 static inline void wlan_psoc_set_nif_phy_version(struct wlan_objmgr_psoc *psoc,
1241 			uint32_t phy_ver)
1242 {
1243 	psoc->soc_nif.phy_version = phy_ver;
1244 }
1245 
1246 /**
1247  * wlan_psoc_get_nif_phy_version() - get nif phy version
1248  * @psoc: PSOC object
1249  *
1250  * API to set nif phy version in psoc
1251  *
1252  * Return: @phy_ver: phy version
1253  */
wlan_psoc_get_nif_phy_version(struct wlan_objmgr_psoc * psoc)1254 static inline uint32_t wlan_psoc_get_nif_phy_version(
1255 			struct wlan_objmgr_psoc *psoc)
1256 {
1257 	if (!psoc)
1258 		return (uint32_t)-1;
1259 
1260 	return psoc->soc_nif.phy_version;
1261 }
1262 
1263 /**
1264  * wlan_psoc_set_dev_type() - set dev type
1265  * @psoc: PSOC object
1266  * @phy_type: phy type (OL/DA)
1267  *
1268  * API to set dev type in psoc
1269  *
1270  * Return: void
1271  */
wlan_psoc_set_dev_type(struct wlan_objmgr_psoc * psoc,WLAN_DEV_TYPE phy_type)1272 static inline void wlan_psoc_set_dev_type(struct wlan_objmgr_psoc *psoc,
1273 				WLAN_DEV_TYPE phy_type)
1274 {
1275 	psoc->soc_nif.phy_type = phy_type;
1276 }
1277 
1278 /**
1279  * wlan_objmgr_psoc_get_dev_type - get dev type
1280  * @psoc: PSOC object
1281  *
1282  * API to get dev type in psoc
1283  *
1284  * Return: phy type (OL/DA)
1285  */
wlan_objmgr_psoc_get_dev_type(struct wlan_objmgr_psoc * psoc)1286 static inline WLAN_DEV_TYPE wlan_objmgr_psoc_get_dev_type(
1287 				struct wlan_objmgr_psoc *psoc)
1288 {
1289 	if (!psoc)
1290 		return (uint32_t)-1;
1291 
1292 	return psoc->soc_nif.phy_type;
1293 }
1294 
1295 /**
1296  * wlan_psoc_nif_fw_cap_set() - set fw caps
1297  * @psoc: PSOC object
1298  * @cap: capability flag to be set
1299  *
1300  * API to set fw caps in psoc
1301  *
1302  * Return: void
1303  */
wlan_psoc_nif_fw_cap_set(struct wlan_objmgr_psoc * psoc,uint32_t cap)1304 static inline void wlan_psoc_nif_fw_cap_set(struct wlan_objmgr_psoc *psoc,
1305 					uint32_t cap)
1306 {
1307 	psoc->soc_nif.soc_fw_caps |= cap;
1308 }
1309 
1310 /**
1311  * wlan_psoc_nif_fw_cap_clear() - clear fw caps
1312  * @psoc: PSOC object
1313  * @cap: capability flag to be cleared
1314  *
1315  * API to clear fw caps in psoc
1316  *
1317  * Return: void
1318  */
wlan_psoc_nif_fw_cap_clear(struct wlan_objmgr_psoc * psoc,uint32_t cap)1319 static inline void wlan_psoc_nif_fw_cap_clear(struct wlan_objmgr_psoc *psoc,
1320 				uint32_t cap)
1321 {
1322 	psoc->soc_nif.soc_fw_caps &= ~cap;
1323 }
1324 
1325 /**
1326  * wlan_psoc_nif_fw_cap_get() - get fw caps
1327  * @psoc: PSOC object
1328  * @cap: capability flag to be checked
1329  *
1330  * API to know, whether particular fw caps flag is set in psoc
1331  *
1332  * Return: 1 (for set) or 0 (for not set)
1333  */
wlan_psoc_nif_fw_cap_get(struct wlan_objmgr_psoc * psoc,uint32_t cap)1334 static inline uint8_t wlan_psoc_nif_fw_cap_get(struct wlan_objmgr_psoc *psoc,
1335 				uint32_t cap)
1336 {
1337 	return (psoc->soc_nif.soc_fw_caps & cap) ? 1 : 0;
1338 }
1339 
1340 /**
1341  * wlan_psoc_nif_fw_ext_cap_set() - set fw ext caps
1342  * @psoc: PSOC object
1343  * @ext_cap: capability flag to be set
1344  *
1345  * API to set fw ext caps in psoc
1346  *
1347  * Return: void
1348  */
wlan_psoc_nif_fw_ext_cap_set(struct wlan_objmgr_psoc * psoc,uint32_t ext_cap)1349 static inline void wlan_psoc_nif_fw_ext_cap_set(struct wlan_objmgr_psoc *psoc,
1350 				uint32_t ext_cap)
1351 {
1352 	psoc->soc_nif.soc_fw_ext_caps |= ext_cap;
1353 }
1354 
1355 /**
1356  * wlan_psoc_nif_fw_ext_cap_clear() - clear fw ext caps
1357  * @psoc: PSOC object
1358  * @ext_cap: capability flag to be cleared
1359  *
1360  * API to clear fw ext caps in psoc
1361  *
1362  * Return: void
1363  */
wlan_psoc_nif_fw_ext_cap_clear(struct wlan_objmgr_psoc * psoc,uint32_t ext_cap)1364 static inline void wlan_psoc_nif_fw_ext_cap_clear(struct wlan_objmgr_psoc *psoc,
1365 				uint32_t ext_cap)
1366 {
1367 	psoc->soc_nif.soc_fw_ext_caps &= ~ext_cap;
1368 }
1369 
1370 /**
1371  * wlan_psoc_nif_fw_ext_cap_get() - get fw caps
1372  * @psoc: PSOC object
1373  * @ext_cap: capability flag to be checked
1374  *
1375  * API to know, whether particular fw caps flag is set in psoc
1376  *
1377  * Return: 1 (for set) or 0 (for not set)
1378  */
wlan_psoc_nif_fw_ext_cap_get(struct wlan_objmgr_psoc * psoc,uint32_t ext_cap)1379 static inline uint8_t wlan_psoc_nif_fw_ext_cap_get(
1380 		struct wlan_objmgr_psoc *psoc, uint32_t ext_cap)
1381 {
1382 	return (psoc->soc_nif.soc_fw_ext_caps & ext_cap) ? 1 : 0;
1383 }
1384 
1385 /**
1386  * wlan_psoc_nif_fw_ext2_cap_set() - set fw ext2 caps
1387  * @psoc: PSOC object
1388  * @ext2_cap: capability flag to be set
1389  *
1390  * API to set fw ext caps in psoc
1391  *
1392  * Return: void
1393  */
wlan_psoc_nif_fw_ext2_cap_set(struct wlan_objmgr_psoc * psoc,uint32_t ext2_cap)1394 static inline void wlan_psoc_nif_fw_ext2_cap_set(struct wlan_objmgr_psoc *psoc,
1395 						 uint32_t ext2_cap)
1396 {
1397 	psoc->soc_nif.soc_fw_ext2_caps |= ext2_cap;
1398 }
1399 
1400 /**
1401  * wlan_psoc_nif_fw_ext2_cap_clear() - clear fw ext2 caps
1402  * @psoc: PSOC object
1403  * @ext2_cap: capability flag to be cleared
1404  *
1405  * API to clear fw ext caps in psoc
1406  *
1407  * Return: void
1408  */
1409 static inline void
wlan_psoc_nif_fw_ext2_cap_clear(struct wlan_objmgr_psoc * psoc,uint32_t ext2_cap)1410 wlan_psoc_nif_fw_ext2_cap_clear(struct wlan_objmgr_psoc *psoc,
1411 				uint32_t ext2_cap)
1412 {
1413 	psoc->soc_nif.soc_fw_ext2_caps &= ~ext2_cap;
1414 }
1415 
1416 /**
1417  * wlan_psoc_nif_fw_ext2_cap_get() - get fw caps
1418  * @psoc: PSOC object
1419  * @ext2_cap: capability flag to be checked
1420  *
1421  * API to know, whether particular fw caps flag is set in psoc
1422  *
1423  * Return: 1 (for set) or 0 (for not set)
1424  */
1425 static inline uint8_t
wlan_psoc_nif_fw_ext2_cap_get(struct wlan_objmgr_psoc * psoc,uint32_t ext2_cap)1426 wlan_psoc_nif_fw_ext2_cap_get(struct wlan_objmgr_psoc *psoc, uint32_t ext2_cap)
1427 {
1428 	return (psoc->soc_nif.soc_fw_ext2_caps & ext2_cap) ? 1 : 0;
1429 }
1430 
1431 /**
1432  * wlan_psoc_nif_feat_cap_set() - set feature caps
1433  * @psoc: PSOC object
1434  * @feat_cap: feature flag to be set
1435  *
1436  * API to set feature caps in psoc
1437  *
1438  * Return: void
1439  */
wlan_psoc_nif_feat_cap_set(struct wlan_objmgr_psoc * psoc,uint32_t feat_cap)1440 static inline void wlan_psoc_nif_feat_cap_set(struct wlan_objmgr_psoc *psoc,
1441 				uint32_t feat_cap)
1442 {
1443 	psoc->soc_nif.soc_feature_caps |= feat_cap;
1444 }
1445 
1446 /**
1447  * wlan_psoc_nif_feat_cap_clear() - clear feature caps
1448  * @psoc: PSOC object
1449  * @feat_cap: feature flag to be cleared
1450  *
1451  * API to clear feature caps in psoc
1452  *
1453  * Return: void
1454  */
wlan_psoc_nif_feat_cap_clear(struct wlan_objmgr_psoc * psoc,uint32_t feat_cap)1455 static inline void wlan_psoc_nif_feat_cap_clear(struct wlan_objmgr_psoc *psoc,
1456 				uint32_t feat_cap)
1457 {
1458 	psoc->soc_nif.soc_feature_caps &= ~feat_cap;
1459 }
1460 
1461 /**
1462  * wlan_psoc_nif_feat_cap_get() - get feature caps
1463  * @psoc: PSOC object
1464  * @feat_cap: feature flag to be checked
1465  *
1466  * API to know, whether particular feature cap flag is set in psoc
1467  *
1468  * Return: 1 (for set) or 0 (for not set)
1469  */
wlan_psoc_nif_feat_cap_get(struct wlan_objmgr_psoc * psoc,uint32_t feat_cap)1470 static inline uint8_t wlan_psoc_nif_feat_cap_get(struct wlan_objmgr_psoc *psoc,
1471 							uint32_t feat_cap)
1472 {
1473 	return (psoc->soc_nif.soc_feature_caps & feat_cap) ? 1 : 0;
1474 }
1475 
1476 /**
1477  * wlan_psoc_nif_op_flag_get() - get op flags
1478  * @psoc: PSOC object
1479  * @flag: op flag to be checked
1480  *
1481  * API to know, whether particular op flag is set in psoc
1482  *
1483  * Return: 1 (for set) or 0 (for not set)
1484  */
wlan_psoc_nif_op_flag_get(struct wlan_objmgr_psoc * psoc,uint32_t flag)1485 static inline uint8_t wlan_psoc_nif_op_flag_get(struct wlan_objmgr_psoc *psoc,
1486 						uint32_t flag)
1487 {
1488 	return (psoc->soc_nif.soc_op_flags & flag) ? 1 : 0;
1489 }
1490 
1491 /**
1492  * wlan_psoc_nif_op_flag_set() - set op flag
1493  * @psoc: PSOC object
1494  * @flag: op flag to be set
1495  *
1496  * API to set op flag in psoc
1497  *
1498  * Return: void
1499  */
wlan_psoc_nif_op_flag_set(struct wlan_objmgr_psoc * psoc,uint32_t flag)1500 static inline void wlan_psoc_nif_op_flag_set(struct wlan_objmgr_psoc *psoc,
1501 						uint32_t flag)
1502 {
1503 	psoc->soc_nif.soc_op_flags |= flag;
1504 }
1505 
1506 /**
1507  * wlan_psoc_nif_op_flag_clear() - clear op flag
1508  * @psoc: PSOC object
1509  * @flag: op flag to be cleared
1510  *
1511  * API to clear op flag in psoc
1512  *
1513  * Return: void
1514  */
wlan_psoc_nif_op_flag_clear(struct wlan_objmgr_psoc * psoc,uint32_t flag)1515 static inline void wlan_psoc_nif_op_flag_clear(struct wlan_objmgr_psoc *psoc,
1516 						uint32_t flag)
1517 {
1518 	psoc->soc_nif.soc_op_flags &= ~flag;
1519 }
1520 
1521 /**
1522  * wlan_psoc_set_hw_macaddr() - set hw mac addr
1523  * @psoc: PSOC object
1524  * @macaddr: hw macaddr
1525  *
1526  * API to set hw macaddr of psoc
1527  *
1528  * Caller need to acquire lock with wlan_psoc_obj_lock()
1529  *
1530  * Return: void
1531  */
wlan_psoc_set_hw_macaddr(struct wlan_objmgr_psoc * psoc,uint8_t * macaddr)1532 static inline void wlan_psoc_set_hw_macaddr(struct wlan_objmgr_psoc *psoc,
1533 					uint8_t *macaddr)
1534 {
1535 	/* This API is invoked with lock acquired, do not add log prints */
1536 	if (psoc)
1537 		WLAN_ADDR_COPY(psoc->soc_nif.soc_hw_macaddr, macaddr);
1538 }
1539 
1540 /**
1541  * wlan_psoc_get_hw_macaddr() - get hw macaddr
1542  * @psoc: PSOC object
1543  *
1544  * API to set hw macaddr of psoc
1545  *
1546  * Return: hw macaddr
1547  */
wlan_psoc_get_hw_macaddr(struct wlan_objmgr_psoc * psoc)1548 static inline uint8_t *wlan_psoc_get_hw_macaddr(struct wlan_objmgr_psoc *psoc)
1549 {
1550 	if (!psoc)
1551 		return NULL;
1552 
1553 	return psoc->soc_nif.soc_hw_macaddr;
1554 }
1555 
1556 /**
1557  * wlan_objmgr_psoc_get_comp_private_obj() - API to retrieve component object
1558  * @psoc: Psoc pointer
1559  * @id: component id
1560  *
1561  * This API is used to get the component private object pointer tied to the
1562  * corresponding psoc object
1563  *
1564  * Return: Component private object
1565  */
1566 void *wlan_objmgr_psoc_get_comp_private_obj(struct wlan_objmgr_psoc *psoc,
1567 					enum wlan_umac_comp_id id);
1568 /**
1569  * wlan_psoc_get_pdev_count() - get pdev count for psoc
1570  * @psoc: PSOC object
1571  *
1572  * API to get number of pdev's attached to the psoc
1573  *
1574  * Return: number of pdev's
1575  */
wlan_psoc_get_pdev_count(struct wlan_objmgr_psoc * psoc)1576 static inline uint8_t wlan_psoc_get_pdev_count(struct wlan_objmgr_psoc *psoc)
1577 {
1578 	if (!psoc)
1579 		return 0;
1580 
1581 	return psoc->soc_objmgr.wlan_pdev_count;
1582 }
1583 
1584 /**
1585  * wlan_psoc_set_lmac_if_txops() - API to set tx ops handle in psoc object
1586  * @psoc: Psoc pointer
1587  * @tx_ops: tx callbacks handle
1588  *
1589  * API to set tx callbacks handle in psoc object
1590  *
1591  * Return: None
1592  */
1593 static inline
wlan_psoc_set_lmac_if_txops(struct wlan_objmgr_psoc * psoc,struct wlan_lmac_if_tx_ops * tx_ops)1594 void wlan_psoc_set_lmac_if_txops(struct wlan_objmgr_psoc *psoc,
1595 			  struct wlan_lmac_if_tx_ops *tx_ops)
1596 {
1597 	if (!psoc)
1598 		return;
1599 
1600 	psoc->soc_cb.tx_ops = tx_ops;
1601 }
1602 
1603 /**
1604  * wlan_psoc_get_lmac_if_txops() - API to get tx ops handle
1605  * @psoc: Psoc pointer
1606  *
1607  * API to get tx callbacks handle from psoc object
1608  *
1609  * Return: tx callbacks handle
1610  */
1611 static inline
wlan_psoc_get_lmac_if_txops(struct wlan_objmgr_psoc * psoc)1612 struct wlan_lmac_if_tx_ops *wlan_psoc_get_lmac_if_txops(struct wlan_objmgr_psoc *psoc)
1613 {
1614 	if (!psoc)
1615 		return NULL;
1616 
1617 	return psoc->soc_cb.tx_ops;
1618 }
1619 
1620 /**
1621  * wlan_psoc_set_lmac_if_rxops() - API to set rx ops handle in psoc object
1622  * @psoc: Psoc pointer
1623  * @rx_ops: rx callbacks handle
1624  *
1625  * API to set rx callbacks handle in psoc object
1626  *
1627  * Return: None
1628  */
1629 static inline
wlan_psoc_set_lmac_if_rxops(struct wlan_objmgr_psoc * psoc,struct wlan_lmac_if_rx_ops * rx_ops)1630 void wlan_psoc_set_lmac_if_rxops(struct wlan_objmgr_psoc *psoc,
1631 				 struct	wlan_lmac_if_rx_ops *rx_ops)
1632 {
1633 	if (!psoc)
1634 		return;
1635 
1636 	psoc->soc_cb.rx_ops = rx_ops;
1637 }
1638 
1639 /**
1640  * wlan_psoc_get_lmac_if_rxops() - API to get rx ops handle
1641  * @psoc: Psoc pointer
1642  *
1643  * API to get rx callbacks handle from psoc object
1644  *
1645  * Return: rx callbacks handle
1646  */
1647 static inline
wlan_psoc_get_lmac_if_rxops(struct wlan_objmgr_psoc * psoc)1648 struct wlan_lmac_if_rx_ops *wlan_psoc_get_lmac_if_rxops(struct wlan_objmgr_psoc *psoc)
1649 {
1650 	if (!psoc)
1651 		return NULL;
1652 
1653 	return psoc->soc_cb.rx_ops;
1654 }
1655 
1656 /**
1657  * wlan_psoc_set_tgt_if_handle() - API to set target if handle in psoc object
1658  * @psoc: Psoc pointer
1659  * @tgt_if_handle: target interface handle
1660  *
1661  * API to set target interface handle in psoc object
1662  *
1663  * Return: None
1664  */
1665 static inline
wlan_psoc_set_tgt_if_handle(struct wlan_objmgr_psoc * psoc,struct target_psoc_info * tgt_if_handle)1666 void wlan_psoc_set_tgt_if_handle(struct wlan_objmgr_psoc *psoc,
1667 				 struct target_psoc_info *tgt_if_handle)
1668 {
1669 	if (!psoc)
1670 		return;
1671 
1672 	psoc->tgt_if_handle = tgt_if_handle;
1673 }
1674 
1675 /**
1676  * wlan_psoc_get_tgt_if_handle() - API to get target interface handle
1677  * @psoc: Psoc pointer
1678  *
1679  * API to get target interface handle from psoc object
1680  *
1681  * Return: target interface handle
1682  */
1683 static inline
wlan_psoc_get_tgt_if_handle(struct wlan_objmgr_psoc * psoc)1684 struct target_psoc_info *wlan_psoc_get_tgt_if_handle(
1685 				struct wlan_objmgr_psoc *psoc)
1686 {
1687 	if (!psoc)
1688 		return NULL;
1689 
1690 	return psoc->tgt_if_handle;
1691 }
1692 
1693 /**
1694  * wlan_psoc_get_qdf_dev() - API to get qdf device
1695  * @psoc: Psoc pointer
1696  *
1697  * API to get qdf device from psoc object
1698  *
1699  * Return: qdf_device_t
1700  */
wlan_psoc_get_qdf_dev(struct wlan_objmgr_psoc * psoc)1701 static inline qdf_device_t wlan_psoc_get_qdf_dev(
1702 			struct wlan_objmgr_psoc *psoc)
1703 {
1704 	if (!psoc)
1705 		return NULL;
1706 
1707 	return psoc->soc_objmgr.qdf_dev;
1708 }
1709 
1710 /**
1711  * wlan_psoc_set_qdf_dev() - API to get qdf device
1712  * @psoc: Psoc pointer
1713  * @dev: qdf device
1714  *
1715  * API to set qdf device from psoc object
1716  *
1717  * Return: None
1718  */
wlan_psoc_set_qdf_dev(struct wlan_objmgr_psoc * psoc,qdf_device_t dev)1719 static inline void wlan_psoc_set_qdf_dev(
1720 			struct wlan_objmgr_psoc *psoc,
1721 			qdf_device_t dev)
1722 {
1723 	if (!psoc)
1724 		return;
1725 
1726 	psoc->soc_objmgr.qdf_dev = dev;
1727 }
1728 
1729 /**
1730  * wlan_psoc_set_max_vdev_count() - set psoc max vdev count
1731  * @psoc: PSOC object
1732  * @max_vdev_count: Max vdev count
1733  *
1734  * API to set Max vdev count
1735  *
1736  * Return: void
1737  */
wlan_psoc_set_max_vdev_count(struct wlan_objmgr_psoc * psoc,uint16_t max_vdev_count)1738 static inline void wlan_psoc_set_max_vdev_count(struct wlan_objmgr_psoc *psoc,
1739 						uint16_t max_vdev_count)
1740 {
1741 	if (max_vdev_count > WLAN_UMAC_PSOC_MAX_VDEVS)
1742 		QDF_BUG(0);
1743 
1744 	psoc->soc_objmgr.max_vdev_count = max_vdev_count;
1745 }
1746 
1747 /**
1748  * wlan_psoc_get_max_vdev_count() - get psoc max vdev count
1749  * @psoc: PSOC object
1750  *
1751  * API to set Max vdev count
1752  *
1753  * Return: @vdev count: Max vdev count
1754  */
wlan_psoc_get_max_vdev_count(struct wlan_objmgr_psoc * psoc)1755 static inline uint16_t wlan_psoc_get_max_vdev_count(
1756 					struct wlan_objmgr_psoc *psoc)
1757 {
1758 	return psoc->soc_objmgr.max_vdev_count;
1759 }
1760 
1761 /**
1762  * wlan_psoc_set_max_peer_count() - set psoc max peer count
1763  * @psoc: PSOC object
1764  * @max_peer_count: Max peer count
1765  *
1766  * API to set Max peer count
1767  *
1768  * Return: void
1769  */
wlan_psoc_set_max_peer_count(struct wlan_objmgr_psoc * psoc,uint16_t max_peer_count)1770 static inline void wlan_psoc_set_max_peer_count(struct wlan_objmgr_psoc *psoc,
1771 						uint16_t max_peer_count)
1772 {
1773 	if (max_peer_count > WLAN_UMAC_PSOC_MAX_PEERS)
1774 		QDF_BUG(0);
1775 
1776 	psoc->soc_objmgr.max_peer_count = max_peer_count;
1777 }
1778 
1779 /**
1780  * wlan_psoc_get_max_peer_count() - get psoc max peer count
1781  * @psoc: PSOC object
1782  *
1783  * API to set Max peer count
1784  *
1785  * Return: @peer count: Max peer count
1786  */
wlan_psoc_get_max_peer_count(struct wlan_objmgr_psoc * psoc)1787 static inline uint16_t wlan_psoc_get_max_peer_count(
1788 					struct wlan_objmgr_psoc *psoc)
1789 {
1790 	return psoc->soc_objmgr.max_peer_count;
1791 }
1792 
1793 /**
1794  * wlan_psoc_get_peer_count() - get psoc peer count
1795  * @psoc: PSOC object
1796  *
1797  * API to get peer count
1798  *
1799  * Return: @peer count: peer count
1800  */
wlan_psoc_get_peer_count(struct wlan_objmgr_psoc * psoc)1801 static inline uint16_t wlan_psoc_get_peer_count(
1802 					struct wlan_objmgr_psoc *psoc)
1803 {
1804 	return psoc->soc_objmgr.wlan_peer_count;
1805 }
1806 
1807 
1808 /**
1809  * DOC: Examples to use PSOC ref count APIs
1810  *
1811  * In all the scenarios, the pair of API should be followed
1812  * other it lead to memory leak
1813  *
1814  *  scenario 1:
1815  *
1816  *     wlan_objmgr_psoc_obj_create()
1817  *     ----
1818  *     wlan_objmgr_psoc_obj_delete()
1819  *
1820  *  scenario 2:
1821  *
1822  *     wlan_objmgr_psoc_get_ref()
1823  *     ----
1824  *     the operations which are done on
1825  *     psoc object
1826  *     ----
1827  *     wlan_objmgr_psoc_release_ref()
1828  */
1829 
1830 /**
1831  * wlan_objmgr_psoc_get_ref() - increment ref count
1832  * @psoc: PSOC object
1833  * @id:   Object Manager ref debug id
1834  *
1835  * API to increment ref count of psoc
1836  *
1837  * Return: void
1838  */
1839 void wlan_objmgr_psoc_get_ref(struct wlan_objmgr_psoc *psoc,
1840 					wlan_objmgr_ref_dbgid id);
1841 
1842 /**
1843  * wlan_objmgr_psoc_try_get_ref() - increment ref count, if allowed
1844  * @psoc: PSOC object
1845  * @id:   Object Manager ref debug id
1846  *
1847  * API to increment ref count after checking valid object state
1848  *
1849  * Return: void
1850  */
1851 QDF_STATUS wlan_objmgr_psoc_try_get_ref(struct wlan_objmgr_psoc *psoc,
1852 						wlan_objmgr_ref_dbgid id);
1853 
1854 /**
1855  * wlan_objmgr_psoc_release_ref() - decrement ref count
1856  * @psoc: PSOC object
1857  * @id:   Object Manager ref debug id
1858  *
1859  * API to decrement ref count of psoc, if ref count is 1, it initiates the
1860  * PSOC deletion
1861  *
1862  * Return: void
1863  */
1864 void wlan_objmgr_psoc_release_ref(struct wlan_objmgr_psoc *psoc,
1865 						wlan_objmgr_ref_dbgid id);
1866 
1867 /**
1868  * wlan_objmgr_print_ref_all_objects_per_psoc() - print all psoc objects'
1869  *                                                ref counts
1870  * @psoc: PSOC object
1871  *
1872  * API to be used for printing all the objects(pdev/vdev/peer) ref counts
1873  *
1874  * Return: SUCCESS/FAILURE
1875  */
1876 QDF_STATUS wlan_objmgr_print_ref_all_objects_per_psoc(
1877 		struct wlan_objmgr_psoc *psoc);
1878 
1879 /**
1880 * wlan_objmgr_psoc_set_user_config () - populate user config
1881 * data in psoc
1882 * @psoc: psoc object pointer
1883 * @user_config_data: pointer to user config data filled up by os
1884 *                  dependent component
1885 * it is intended to set all elements by OSIF/HDD and it not
1886 * intended to modify a single element
1887 * Return: QDF status
1888 */
1889 QDF_STATUS wlan_objmgr_psoc_set_user_config(struct wlan_objmgr_psoc *psoc,
1890 		struct wlan_objmgr_psoc_user_config *user_config_data);
1891 
1892 /**
1893  * wlan_objmgr_psoc_check_for_pdev_leaks() - Assert no pdevs attached to @psoc
1894  * @psoc: The psoc to check
1895  *
1896  * Return: No. of psoc leaks
1897  */
1898 uint32_t wlan_objmgr_psoc_check_for_pdev_leaks(struct wlan_objmgr_psoc *psoc);
1899 
1900 /**
1901  * wlan_objmgr_psoc_check_for_vdev_leaks() - Assert no vdevs attached to @psoc
1902  * @psoc: The psoc to check
1903  *
1904  * Return: No. of vdev leaks
1905  */
1906 uint32_t wlan_objmgr_psoc_check_for_vdev_leaks(struct wlan_objmgr_psoc *psoc);
1907 
1908 /**
1909  * wlan_objmgr_psoc_check_for_peer_leaks() - Assert no peers attached to @psoc
1910  * @psoc: The psoc to check
1911  *
1912  * Return: No. of peer leaks
1913  */
1914 uint32_t wlan_objmgr_psoc_check_for_peer_leaks(struct wlan_objmgr_psoc *psoc);
1915 
1916 /**
1917  * wlan_objmgr_psoc_check_for_leaks() - Assert on leak
1918  * @psoc: The psoc to check
1919  *
1920  * Return: None
1921  */
1922 void wlan_objmgr_psoc_check_for_leaks(struct wlan_objmgr_psoc *psoc);
1923 
1924 /**
1925 * wlan_objmgr_psoc_get_band_capability () - get user config
1926 * data for band capability
1927 * @psoc: psoc object pointer
1928 *
1929 * Return: band_capability
1930 */
wlan_objmgr_psoc_get_band_capability(struct wlan_objmgr_psoc * psoc)1931 static inline uint8_t wlan_objmgr_psoc_get_band_capability(
1932 		struct wlan_objmgr_psoc *psoc)
1933 {
1934 	if (!psoc)
1935 		return 0;
1936 
1937 	return psoc->soc_nif.user_config.band_capability;
1938 }
1939 
1940 /**
1941  * wlan_psoc_set_dp_handle() - set dp handle
1942  * @psoc: psoc object pointer
1943  * @dp_handle: Data path module handle
1944  *
1945  * Return: void
1946  */
wlan_psoc_set_dp_handle(struct wlan_objmgr_psoc * psoc,void * dp_handle)1947 static inline void wlan_psoc_set_dp_handle(struct wlan_objmgr_psoc *psoc,
1948 		void *dp_handle)
1949 {
1950 	if (qdf_unlikely(!psoc)) {
1951 		QDF_BUG(0);
1952 		return;
1953 	}
1954 
1955 	psoc->dp_handle = dp_handle;
1956 }
1957 
1958 /**
1959  * wlan_psoc_get_dp_handle() - get dp handle
1960  * @psoc: psoc object pointer
1961  *
1962  * Return: dp handle
1963  */
wlan_psoc_get_dp_handle(struct wlan_objmgr_psoc * psoc)1964 static inline void *wlan_psoc_get_dp_handle(struct wlan_objmgr_psoc *psoc)
1965 {
1966 	if (qdf_unlikely(!psoc)) {
1967 		QDF_BUG(0);
1968 		return NULL;
1969 	}
1970 
1971 	return psoc->dp_handle;
1972 }
1973 
1974 /**
1975  * wlan_psoc_set_pumac_skip - set mlo primary umac skip setting
1976  * @psoc: psoc object pointer
1977  * @val: indicate support for MLO PUMAC feature on psoc
1978  *
1979  * Return: void
1980  */
wlan_psoc_set_pumac_skip(struct wlan_objmgr_psoc * psoc,bool val)1981 static inline void wlan_psoc_set_pumac_skip(
1982 			struct wlan_objmgr_psoc *psoc,
1983 			bool val)
1984 {
1985 	if (qdf_unlikely(!psoc)) {
1986 		QDF_BUG(0);
1987 		return;
1988 	}
1989 
1990 	psoc->skip_mlo_pumac = val;
1991 }
1992 
1993 /**
1994  * wlan_psoc_get_pumac_skip - get mlo primary umac skip setting
1995  * @psoc: psoc object pointer
1996  *
1997  * Return: bool (primary umac support)
1998  */
wlan_psoc_get_pumac_skip(struct wlan_objmgr_psoc * psoc)1999 static inline bool wlan_psoc_get_pumac_skip(struct wlan_objmgr_psoc *psoc)
2000 {
2001 	if (qdf_unlikely(!psoc)) {
2002 		QDF_BUG(0);
2003 		return false;
2004 	}
2005 
2006 	return psoc->skip_mlo_pumac;
2007 }
2008 
2009 struct wlan_logically_del_peer {
2010 	qdf_list_node_t list;
2011 	struct wlan_objmgr_peer *peer;
2012 };
2013 
2014 /**
2015  * wlan_psoc_get_id() - get psoc id
2016  * @psoc: PSOC object
2017  *
2018  * API to get psoc id
2019  *
2020  * Return: @psoc_id: psoc id
2021  */
wlan_psoc_get_id(struct wlan_objmgr_psoc * psoc)2022 static inline uint8_t wlan_psoc_get_id(
2023 			struct wlan_objmgr_psoc *psoc)
2024 {
2025 	if (!psoc)
2026 		return (uint8_t)-1;
2027 
2028 	return psoc->soc_objmgr.psoc_id;
2029 }
2030 
2031 /**
2032  * wlan_print_psoc_info() - print psoc members
2033  * @psoc: psoc object pointer
2034  *
2035  * Return: void
2036  */
2037 #ifdef WLAN_OBJMGR_DEBUG
2038 void wlan_print_psoc_info(struct wlan_objmgr_psoc *psoc);
2039 #else
wlan_print_psoc_info(struct wlan_objmgr_psoc * psoc)2040 static inline void wlan_print_psoc_info(struct wlan_objmgr_psoc *psoc) {}
2041 #endif
2042 
2043 #endif /* _WLAN_OBJMGR_PSOC_OBJ_H_*/
2044