1 /*
2  * Copyright (c) 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: This file contains centralized definitions of converged configuration.
22  */
23 
24 #ifndef __HDD_SAR_SAFETY_CONFIG_H
25 #define __HDD_SAR_SAFETY_CONFIG_H
26 
27 #ifdef SAR_SAFETY_FEATURE
28 
29 /*
30  * SAR_SAFETY_DISABLED - feature disabled
31  * SAR_SAFETY_ENABLED_TIMER - SAR feature enabled with timer mechanism
32  * SAR_SAFETY_ENABLED_INIT - SAR feature enabled at init time
33  * SAR_SAFETY_ENABLED_MAX - SAR max valid value
34  */
35 #define SAR_SAFETY_DISABLED        0x0
36 #define SAR_SAFETY_ENABLED_TIMER   BIT(0)
37 #define SAR_SAFETY_ENABLED_INIT    BIT(1)
38 #define SAR_SAFETY_ENABLED_MAX     0x3
39 /*
40  * <ini>
41  * gSarSafetyTimeout - Specify SAR safety timeout value in milliseconds
42  *
43  * @Min: 120000
44  * @Max: 600000
45  * Default: 300000
46  *
47  * This ini is used to define SAR safety timeout value in milliseconds.
48  * This timer is started when the QCA_NL80211_VENDOR_SUBCMD_SET_SAR_LIMITS
49  * is received first time.
50  * SAR safety timer will wait for the gSarSafetyTimeout for
51  * QCA_NL80211_VENDOR_SUBCMD_SET_SAR_LIMITS vendor command and if
52  * SAR safety timer timeouts host will configure the gSarSafetyIndex
53  * to the FW.
54  *
55  * Usage: External
56  *
57  * </ini>
58  */
59 
60 #define CFG_SAR_SAFETY_TIMEOUT  CFG_INI_UINT( \
61 			"gSarSafetyTimeout", \
62 			120000, \
63 			600000, \
64 			300000, \
65 			CFG_VALUE_OR_DEFAULT, \
66 			"Timeout value for SAR safety timer")
67 
68 /*
69  * <ini>
70  * gSarSafetyUnsolicitedTimeout - Specify SAR safety unsolicited timeout value
71  * in milliseconds
72  *
73  * @Min: 5000
74  * @Max: 30000
75  * Default: 15000
76  *
77  * This ini is used to define SAR safety unsolicited timeout value in
78  * milliseconds. This timer is started on first data tx.
79  * SAR unsolicited timer will wait for the
80  * gSarSafetyUnsolicitedTimeout for QCA_NL80211_VENDOR_SUBCMD_SET_SAR_LIMITS
81  * vendor command and if SAR unsolicited timer timeouts host will indicate
82  * user space with QCA_NL80211_VENDOR_SUBCMD_REQUEST_SAR_LIMITS_EVENT to send
83  * QCA_NL80211_VENDOR_SUBCMD_SET_SAR_LIMITS vendor command.
84  *
85  * Usage: External
86  *
87  * </ini>
88  */
89 
90 #define CFG_SAR_SAFETY_UNSOLICITED_TIMEOUT  CFG_INI_UINT( \
91 			"gSarSafetyUnsolicitedTimeout", \
92 			5000, \
93 			30000, \
94 			15000, \
95 			CFG_VALUE_OR_DEFAULT, \
96 			"Timeout value for SAR Unsolicited timer")
97 
98 /*
99  * <ini>
100  * gSarSafetyReqRespTimeout - Specify SAR safety request response timeout value
101  * in milliseconds
102  *
103  * @Min: 500
104  * @Max: 3000
105  * Default: 1000
106  *
107  * This ini is used to define SAR request-response timeout value
108  * in milliseconds. SAR request-response timer will wait for the
109  * gSarSafetyReqRespTimeout for QCA_NL80211_VENDOR_SUBCMD_SET_SAR_LIMITS
110  * vendor command and if SAR request-response timer timeouts host will
111  * indicate user space with QCA_NL80211_VENDOR_SUBCMD_REQUEST_SAR_LIMITS_EVENT
112  * for gSarSafetyReqRespRetry number of times to send
113  * QCA_NL80211_VENDOR_SUBCMD_SET_SAR_LIMITS vendor command and still if host
114  * does not get QCA_NL80211_VENDOR_SUBCMD_SET_SAR_LIMITS vendor command, host
115  * will configure the gSarSafetyIndex to the FW.
116  *
117  * Usage: External
118  *
119  * </ini>
120  */
121 
122 #define CFG_SAR_SAFETY_REQ_RESP_TIMEOUT  CFG_INI_UINT( \
123 			"gSarSafetyReqRespTimeout", \
124 			500, \
125 			1000, \
126 			1000, \
127 			CFG_VALUE_OR_DEFAULT, \
128 			"Timeout value for SAR safety request response timer")
129 
130 /*
131  * <ini>
132  * gSarSafetyReqRespRetry - Specify SAR request response retries value
133  *
134  * @Min: 1
135  * @Max: 10
136  * Default: 5
137  *
138  * This ini is used to define SAR request-response retries value.
139  * SAR request-response timer will wait for the gSarReqRespTimeout for
140  * QCA_NL80211_VENDOR_SUBCMD_SET_SAR_LIMITS vendor command and if
141  * SAR request-response timer timeouts host will indicate user space
142  * for gSarSafetyReqRespRetry number of times to send
143  * QCA_NL80211_VENDOR_SUBCMD_SET_SAR_LIMITS vendor command and still if
144  * host does not get QCA_NL80211_VENDOR_SUBCMD_SET_SAR_LIMITS vendor
145  * command, host will configure the gSarSafetyIndex to the FW.
146  *
147  * Usage: External
148  *
149  * </ini>
150  */
151 
152 #define CFG_SAR_SAFETY_REQ_RESP_RETRIES  CFG_INI_UINT( \
153 			"gSarSafetyReqRespRetry", \
154 			1, \
155 			5, \
156 			5, \
157 			CFG_VALUE_OR_DEFAULT, \
158 			"Max Number of SAR Request Response Retries")
159 
160 /*
161  * <ini>
162  * gSarSafetyIndex - Specify SAR safety index
163  *
164  * @Min: 0
165  * @Max: 11
166  * Default: 11
167  *
168  * This ini is used to define SAR safety index, when sar safety timer
169  * timeouts or sar request response timer timeouts for gSarSafetyReqRespRetry
170  * number of times, host will configure gSarSafetyIndex value to the FW.
171  *
172  * Usage: External
173  *
174  * </ini>
175  */
176 
177 #define CFG_SAR_SAFETY_INDEX  CFG_INI_UINT( \
178 			"gSarSafetyIndex", \
179 			0, \
180 			11, \
181 			11, \
182 			CFG_VALUE_OR_DEFAULT, \
183 			"SAR safety index value")
184 /*
185  * <ini>
186  * gSarSafetySleepIndex - Specify SAR Safety sleep index
187  *
188  * @Min: 0
189  * @Max: 11
190  * Default: 11
191  *
192  * This ini is used to define SAR sleep index, when device goes into the
193  * sleep mode, before going into the sleep mode host configures
194  * gSarSafetySleepIndex value to the FW.
195  *
196  * Usage: External
197  *
198  * </ini>
199  */
200 
201 #define CFG_SAR_SAFETY_SLEEP_INDEX  CFG_INI_UINT( \
202 			"gSarSafetySleepIndex", \
203 			0, \
204 			11, \
205 			11, \
206 			CFG_VALUE_OR_DEFAULT, \
207 			"SAR safety sleep index value")
208 
209 /*
210  * <ini>
211  * gEnableSarSafety - Enable/Disable SAR safety feature
212  * this ini is also used to set SAR index at init time
213  *
214  * @Min: 0
215  * @Max: 3
216  * Default: 0
217  *
218  * This ini is used to enable/disable SAR safety feature
219  * Value 0 of this ini disables SAR safety feature and
220  * value 1 of this ini enables SAR safety feature and
221  * value 2 of this ini enable setting SAR index at init time
222  * value 3 of this enables both modes
223  *
224  * Usage: External
225  *
226  * </ini>
227  */
228 
229 #define CFG_ENABLE_SAR_SAFETY_FEATURE CFG_INI_UINT( \
230 			"gEnableSarSafety", \
231 			SAR_SAFETY_DISABLED, \
232 			SAR_SAFETY_ENABLED_MAX, \
233 			SAR_SAFETY_DISABLED, \
234 			CFG_VALUE_OR_DEFAULT, \
235 			"Enable/Disable SAR safety feature type")
236 
237 /*
238  * <ini>
239  * gConfigSarSafetySleepIndex - Enable/Disable SAR Safety sleep index
240  *
241  * @Min: 0
242  * @Max: 1
243  * Default: 0
244  *
245  * This Configuration is to decide that before going to
246  * sleep mode whether to maintain high RF power
247  * (SAR disable) or to configure SAR sleep mode index
248  *
249  * Value 0 for this ini indicates to maintain high
250  * RF power (SAR disable)
251  * Value 1 for this ini indicates to configure SAR
252  * sleep mode index.
253  *
254  * Usage: External
255  *
256  * </ini>
257  */
258 
259 #define CFG_CONFIG_SAR_SAFETY_SLEEP_MODE_INDEX CFG_INI_BOOL( \
260 			"gConfigSarSafetySleepIndex", \
261 			0, \
262 			"Config SAR sleep Index")
263 
264 #define SAR_SAFETY_FEATURE_ALL \
265 	CFG(CFG_SAR_SAFETY_TIMEOUT) \
266 	CFG(CFG_SAR_SAFETY_UNSOLICITED_TIMEOUT) \
267 	CFG(CFG_SAR_SAFETY_REQ_RESP_TIMEOUT) \
268 	CFG(CFG_SAR_SAFETY_REQ_RESP_RETRIES) \
269 	CFG(CFG_SAR_SAFETY_INDEX) \
270 	CFG(CFG_SAR_SAFETY_SLEEP_INDEX) \
271 	CFG(CFG_ENABLE_SAR_SAFETY_FEATURE) \
272 	CFG(CFG_CONFIG_SAR_SAFETY_SLEEP_MODE_INDEX) \
273 
274 #else
275 #define SAR_SAFETY_FEATURE_ALL
276 #endif
277 
278 #endif
279