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