1 /*
2  * Copyright (c) 2018-2020 The Linux Foundation. All rights reserved.
3  * Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.
4  *
5  * Permission to use, copy, modify, and/or distribute this software for
6  * any purpose with or without fee is hereby granted, provided that the
7  * above copyright notice and this permission notice appear in all
8  * copies.
9  *
10  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
11  * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
12  * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
13  * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
14  * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
15  * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
16  * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
17  * PERFORMANCE OF THIS SOFTWARE.
18  */
19 
20 /**
21  * DOC: contains NAN INI configurations
22  */
23 
24 #include "wlan_objmgr_psoc_obj.h"
25 #include "cfg_nan_api.h"
26 #include "../../core/src/nan_main_i.h"
27 #include "wlan_mlme_ucfg_api.h"
28 #include "cfg_ucfg_api.h"
29 #include "cfg_nan.h"
30 
31 static inline struct nan_psoc_priv_obj
cfg_nan_get_priv_obj(struct wlan_objmgr_psoc * psoc)32 		 *cfg_nan_get_priv_obj(struct wlan_objmgr_psoc *psoc)
33 {
34 	if (!psoc) {
35 		nan_err("PSOC obj null");
36 		return NULL;
37 	}
38 	return wlan_objmgr_psoc_get_comp_private_obj(psoc, WLAN_UMAC_COMP_NAN);
39 }
40 
cfg_nan_get_enable(struct wlan_objmgr_psoc * psoc)41 bool cfg_nan_get_enable(struct wlan_objmgr_psoc *psoc)
42 {
43 	struct nan_psoc_priv_obj *nan_obj = cfg_nan_get_priv_obj(psoc);
44 
45 	if (!nan_obj) {
46 		nan_err("NAN obj null");
47 		return false;
48 	}
49 	return nan_obj->cfg_param.enable;
50 }
51 
cfg_nan_get_datapath_enable(struct wlan_objmgr_psoc * psoc)52 bool cfg_nan_get_datapath_enable(struct wlan_objmgr_psoc *psoc)
53 {
54 	struct nan_psoc_priv_obj *nan_obj = cfg_nan_get_priv_obj(psoc);
55 
56 	if (!nan_obj) {
57 		nan_err("NAN obj null");
58 		return false;
59 	}
60 	return nan_obj->cfg_param.dp_enable;
61 }
62 
cfg_nan_get_ndi_mac_randomize(struct wlan_objmgr_psoc * psoc)63 bool cfg_nan_get_ndi_mac_randomize(struct wlan_objmgr_psoc *psoc)
64 {
65 	struct nan_psoc_priv_obj *nan_obj = cfg_nan_get_priv_obj(psoc);
66 
67 	if (!nan_obj) {
68 		nan_err("NAN obj null");
69 		return false;
70 	}
71 	return nan_obj->cfg_param.ndi_mac_randomize;
72 }
73 
cfg_nan_get_ndp_inactivity_timeout(struct wlan_objmgr_psoc * psoc,uint16_t * val)74 QDF_STATUS cfg_nan_get_ndp_inactivity_timeout(struct wlan_objmgr_psoc *psoc,
75 					      uint16_t *val)
76 {
77 	struct nan_psoc_priv_obj *nan_obj = cfg_nan_get_priv_obj(psoc);
78 
79 	if (!nan_obj) {
80 		nan_err("NAN obj null");
81 		return QDF_STATUS_E_INVAL;
82 	}
83 
84 	*val = nan_obj->cfg_param.ndp_inactivity_timeout;
85 	return QDF_STATUS_SUCCESS;
86 }
87 
cfg_nan_get_ndp_keepalive_period(struct wlan_objmgr_psoc * psoc,uint16_t * val)88 QDF_STATUS cfg_nan_get_ndp_keepalive_period(struct wlan_objmgr_psoc *psoc,
89 					    uint16_t *val)
90 {
91 	struct nan_psoc_priv_obj *nan_obj = cfg_nan_get_priv_obj(psoc);
92 
93 	if (!nan_obj) {
94 		nan_err("NAN obj null");
95 		return QDF_STATUS_E_INVAL;
96 	}
97 
98 	*val = nan_obj->cfg_param.ndp_keep_alive_period;
99 	return QDF_STATUS_SUCCESS;
100 }
101 
cfg_nan_get_ndp_max_sessions(struct wlan_objmgr_psoc * psoc,uint32_t * val)102 QDF_STATUS cfg_nan_get_ndp_max_sessions(struct wlan_objmgr_psoc *psoc,
103 					uint32_t *val)
104 {
105 	struct nan_psoc_priv_obj *nan_obj = cfg_nan_get_priv_obj(psoc);
106 
107 	if (!nan_obj) {
108 		nan_err("NAN obj null");
109 		*val = cfg_default(CFG_NDP_MAX_SESSIONS);
110 		return QDF_STATUS_E_INVAL;
111 	}
112 
113 	*val = nan_obj->cfg_param.max_ndp_sessions;
114 	return QDF_STATUS_SUCCESS;
115 }
116 
cfg_nan_get_max_ndi(struct wlan_objmgr_psoc * psoc,uint32_t * val)117 QDF_STATUS cfg_nan_get_max_ndi(struct wlan_objmgr_psoc *psoc, uint32_t *val)
118 {
119 	struct nan_psoc_priv_obj *nan_obj = cfg_nan_get_priv_obj(psoc);
120 
121 	if (!nan_obj) {
122 		nan_err("NAN obj null");
123 		*val = cfg_default(CFG_NDI_MAX_SUPPORT);
124 		return QDF_STATUS_E_INVAL;
125 	}
126 
127 	*val = nan_obj->cfg_param.max_ndi;
128 	return QDF_STATUS_SUCCESS;
129 }
130 
cfg_nan_get_support_mp0_discovery(struct wlan_objmgr_psoc * psoc)131 bool cfg_nan_get_support_mp0_discovery(struct wlan_objmgr_psoc *psoc)
132 {
133 	struct nan_psoc_priv_obj *nan_obj = cfg_nan_get_priv_obj(psoc);
134 
135 	if (!nan_obj) {
136 		nan_err("NAN obj null");
137 		return false;
138 	}
139 
140 	return nan_obj->cfg_param.support_mp0_discovery;
141 }
142 
cfg_nan_is_roam_config_disabled(struct wlan_objmgr_psoc * psoc)143 bool cfg_nan_is_roam_config_disabled(struct wlan_objmgr_psoc *psoc)
144 {
145 	uint32_t sta_roam_disable;
146 
147 	if (ucfg_mlme_get_roam_disable_config(psoc, &sta_roam_disable) ==
148 	    QDF_STATUS_SUCCESS)
149 		return sta_roam_disable & LFR3_STA_ROAM_DISABLE_BY_NAN;
150 
151 	return false;
152 }
153 
cfg_nan_is_eht_cap_enable(struct wlan_objmgr_psoc * psoc)154 bool cfg_nan_is_eht_cap_enable(struct wlan_objmgr_psoc *psoc)
155 {
156 	struct nan_psoc_priv_obj *nan_obj = cfg_nan_get_priv_obj(psoc);
157 
158 	if (!nan_obj) {
159 		nan_err("nan psoc priv object is NULL");
160 		return cfg_default(CFG_NAN_ENABLE_EHT_CAP);
161 	}
162 
163 	return nan_obj->cfg_param.enable_nan_eht_cap;
164 }
165