1 /*
2 * Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.
3 *
4 * Permission to use, copy, modify, and/or distribute this software for any
5 * purpose with or without fee is hereby granted, provided that the above
6 * copyright notice and this permission notice appear in all copies.
7 *
8 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
9 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
10 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
11 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
12 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
13 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
14 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
15 */
16
17 /**
18 * DOC: contains policy manager ll_sap definitions specific to the ll_sap module
19 */
20 #ifndef WLAN_POLICY_MGR_LL_SAP_H
21 #define WLAN_POLICY_MGR_LL_SAP_H
22
23 #include "wlan_objmgr_psoc_obj.h"
24
25 #ifdef WLAN_FEATURE_LL_LT_SAP
26 /**
27 * policy_mgr_ll_lt_sap_get_valid_freq() - Check and get valid frequency for
28 * the current interface (SAP/P2PGO/LL_LT_SAP)
29 * @psoc: PSOC object
30 * @pdev: PDEV pointer
31 * @vdev_id: Vdev id of the current interface
32 * @sap_ch_freq: Frequency of the current interface
33 * @cc_switch_mode: Channel switch mode
34 * @new_sap_freq: Updated frequency
35 * @is_ll_lt_sap_present: Indicates if ll_lt_sap is present or not
36 *
37 * This API checks if ll_lt_sap is present or not and if ll_lt_sap is present
38 * then if current frequency of the ll_lt_sap or concurrent SAP or concurrent
39 * P2PGO is valid or not according to ll_lt_sap concurrency, if valid, does not
40 * fill anything in the new_sap_freq and if not valid, update the new_sap_freq
41 * with some new valid frequency.
42 *
43 * Return: true/false
44 */
45 void policy_mgr_ll_lt_sap_get_valid_freq(struct wlan_objmgr_psoc *psoc,
46 struct wlan_objmgr_pdev *pdev,
47 uint8_t vdev_id,
48 qdf_freq_t sap_ch_freq,
49 uint8_t cc_switch_mode,
50 qdf_freq_t *new_sap_freq,
51 bool *is_ll_lt_sap_present);
52
53 /**
54 * wlan_policy_mgr_get_ll_lt_sap_vdev_id() - Get ll_lt_sap vdev id
55 * @psoc: PSOC object
56 *
57 * API to find ll_lt_sap vdev id
58 *
59 * Return: vdev id
60 */
61 uint8_t wlan_policy_mgr_get_ll_lt_sap_vdev_id(struct wlan_objmgr_psoc *psoc);
62
63 /**
64 * __policy_mgr_is_ll_lt_sap_restart_required() - Check in ll_lt_sap restart is
65 * required
66 * @psoc: PSOC object
67 * @func: Function pointer of the caller function.
68 *
69 * This API checks if ll_lt_sap restart is required or not
70 *
71 * Return: true/false
72 */
73 bool __policy_mgr_is_ll_lt_sap_restart_required(struct wlan_objmgr_psoc *psoc,
74 const char *func);
75
76 #define policy_mgr_is_ll_lt_sap_restart_required(psoc) \
77 __policy_mgr_is_ll_lt_sap_restart_required(psoc, __func__)
78
79 /**
80 * policy_mgr_ll_lt_sap_restart_concurrent_sap() - Check and restart
81 * concurrent SAP or ll_lt_sap
82 * @psoc: PSOC object
83 * @is_ll_lt_sap_enabled: Indicates if ll_lt_sap is getting enabled or
84 * getting disabled
85 *
86 * This API checks and restarts concurrent SAP or ll_lt_sap when ll_lt_sap comes
87 * up or goes down.
88 * Concurrent SAP and ll_lt_sap should always be on different MAC.
89 * restart the concurrent SAP in below scenario:
90 * If ll_lt_sap is coming up and HW is not sbs capable and concurrent SAP is
91 * operating on 5 GHz, then move concurrent SAP to 2.4 Ghz MAC to allow
92 * ll_lt_sap on 5 GHz
93 * If ll_lt_sap is going down and if concurrent SAP is on 2.4 GHz then try to
94 * restart concurrent SAP on its original user configured frequency
95 * If ll_lt_sap interface has come up and in parallel if some other interface
96 * comes up on the ll_lt_sap frequency, then ll_lt_sap needs to be restarted.
97 *
98 * Return: None
99 */
100 void policy_mgr_ll_lt_sap_restart_concurrent_sap(struct wlan_objmgr_psoc *psoc,
101 bool is_ll_lt_sap_enabled);
102 #else
103
104 static inline bool
policy_mgr_is_ll_lt_sap_restart_required(struct wlan_objmgr_psoc * psoc)105 policy_mgr_is_ll_lt_sap_restart_required(struct wlan_objmgr_psoc *psoc)
106 {
107 return false;
108 }
109
110 static inline
policy_mgr_ll_lt_sap_get_valid_freq(struct wlan_objmgr_psoc * psoc,struct wlan_objmgr_pdev * pdev,uint8_t vdev_id,qdf_freq_t sap_ch_freq,uint8_t cc_switch_mode,qdf_freq_t * new_sap_freq,bool * is_ll_lt_sap_present)111 void policy_mgr_ll_lt_sap_get_valid_freq(struct wlan_objmgr_psoc *psoc,
112 struct wlan_objmgr_pdev *pdev,
113 uint8_t vdev_id,
114 qdf_freq_t sap_ch_freq,
115 uint8_t cc_switch_mode,
116 qdf_freq_t *new_sap_freq,
117 bool *is_ll_lt_sap_present)
118 {
119 }
120
121 static inline
wlan_policy_mgr_get_ll_lt_sap_vdev_id(struct wlan_objmgr_psoc * psoc)122 uint8_t wlan_policy_mgr_get_ll_lt_sap_vdev_id(struct wlan_objmgr_psoc *psoc)
123 {
124 return WLAN_INVALID_VDEV_ID;
125 }
126
127 static inline void
policy_mgr_ll_lt_sap_restart_concurrent_sap(struct wlan_objmgr_psoc * psoc,bool is_ll_lt_sap_enabled)128 policy_mgr_ll_lt_sap_restart_concurrent_sap(struct wlan_objmgr_psoc *psoc,
129 bool is_ll_lt_sap_enabled)
130 {
131 }
132 #endif
133 #endif /* WLAN_POLICY_MGR_LL_SAP_H */
134