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