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