1 /*
2  * Copyright (c) 2018 Nordic Semiconductor ASA
3  * Copyright (c) 2018 Ioannis Glaropoulos
4  * Copyright (c) 2018 Oticon A/S
5  *
6  * SPDX-License-Identifier: Apache-2.0
7  */
8 
9 /*
10  * This header needs lots of types and macros, instead of relaying on
11  * good inclusion order let's pull them through soc.h
12  */
13 #include <soc.h>
14 
15 /* Use the NRF_RTC instance for coarse radio event scheduling */
16 #define NRF_RTC NRF_RTC0
17 
18 /* HAL abstraction of event timer prescaler value */
19 #define HAL_EVENT_TIMER_PRESCALER_VALUE 4U
20 
21 /* NRF Radio HW timing constants
22  * - provided in US and NS (for higher granularity)
23  * - based on the timings configured in the HW models, which are based
24  *   on the product specification
25  * - Note that this timings are approx. the same as in the real HW,
26  *   but tend to be rounded to the nearest microsecond
27  */
28 
29 /* TXEN->TXIDLE + TXIDLE->TX (with fast Radio ramp-up mode)
30  * in microseconds for LE 1M PHY.
31  */
32 #define HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_1M_FAST_NS 41000
33 #define HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_1M_FAST_US \
34 	HAL_RADIO_NS2US_ROUND(HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_1M_FAST_NS)
35 
36 /* TXEN->TXIDLE + TXIDLE->TX (with default Radio ramp-up mode)
37  * in microseconds for LE 1M PHY.
38  */
39 #define HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_1M_DEFAULT_NS 141000
40 #define HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_1M_DEFAULT_US \
41 	HAL_RADIO_NS2US_ROUND(HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_1M_DEFAULT_NS)
42 
43 /* TXEN->TXIDLE + TXIDLE->TX (with default Radio ramp-up mode
44  * and no HW TIFS auto-switch) in microseconds for LE 1M PHY.
45  */
46 #define HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_1M_DEFAULT_NO_HW_TIFS_NS 130000
47 #define HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_1M_DEFAULT_NO_HW_TIFS_US \
48 	HAL_RADIO_NS2US_ROUND( \
49 		HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_1M_DEFAULT_NO_HW_TIFS_NS)
50 
51 /* TXEN->TXIDLE + TXIDLE->TX (with fast Radio ramp-up mode)
52  * in microseconds for LE 2M PHY.
53  */
54 #define HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_2M_FAST_NS 40000
55 #define HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_2M_FAST_US \
56 	HAL_RADIO_NS2US_ROUND(HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_2M_FAST_NS)
57 
58 /* TXEN->TXIDLE + TXIDLE->TX (with default Radio ramp-up mode)
59  * in microseconds for LE 2M PHY.
60  */
61 #define HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_2M_DEFAULT_NS 140000
62 #define HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_2M_DEFAULT_US \
63 	HAL_RADIO_NS2US_ROUND(HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_2M_DEFAULT_NS)
64 
65 /* TXEN->TXIDLE + TXIDLE->TX (with default Radio ramp-up mode
66  * and no HW TIFS auto-switch) in microseconds for LE 2M PHY.
67  */
68 #define HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_2M_DEFAULT_NO_HW_TIFS_NS 129000
69 #define HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_2M_DEFAULT_NO_HW_TIFS_US \
70 	HAL_RADIO_NS2US_ROUND( \
71 		HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_2M_DEFAULT_NO_HW_TIFS_NS)
72 
73 /* TXEN->TXIDLE + TXIDLE->TX (with fast Radio ramp-up mode)
74  * in microseconds for LE CODED PHY [S2].
75  */
76 #define HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_S2_FAST_NS 42000
77 #define HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_S2_FAST_US \
78 	HAL_RADIO_NS2US_ROUND(HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_S2_FAST_NS)
79 
80 /* TXEN->TXIDLE + TXIDLE->TX (with default Radio ramp-up mode)
81  * in microseconds for LE 2M PHY [S2].
82  */
83 #define HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_S2_DEFAULT_NS 132000
84 #define HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_S2_DEFAULT_US \
85 	HAL_RADIO_NS2US_ROUND(HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_S2_DEFAULT_NS)
86 
87 /* TXEN->TXIDLE + TXIDLE->TX (with default Radio ramp-up mode and
88  * no HW TIFS auto-switch) in microseconds for LE 2M PHY [S2].
89  */
90 /* 129.5 + 2.2 */
91 #define HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_S2_DEFAULT_NO_HW_TIFS_NS 132000
92 #define HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_S2_DEFAULT_NO_HW_TIFS_US \
93 	HAL_RADIO_NS2US_ROUND( \
94 		HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_S2_DEFAULT_NO_HW_TIFS_NS)
95 
96 /* TXEN->TXIDLE + TXIDLE->TX (with fast Radio ramp-up mode)
97  * in microseconds for LE CODED PHY [S8].
98  */
99 #define HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_S8_FAST_NS 42000
100 #define HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_S8_FAST_US \
101 	HAL_RADIO_NS2US_ROUND(HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_S8_FAST_NS)
102 /* TXEN->TXIDLE + TXIDLE->TX (with default Radio ramp-up mode)
103  * in microseconds for LE 2M PHY [S8].
104  */
105 #define HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_S8_DEFAULT_NS 122000
106 #define HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_S8_DEFAULT_US \
107 	HAL_RADIO_NS2US_ROUND(HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_S8_DEFAULT_NS)
108 
109 /* TXEN->TXIDLE + TXIDLE->TX (with default Radio ramp-up mode and
110  * no HW TIFS auto-switch) in microseconds for LE 2M PHY [S8].
111  */
112  /* 129.5 + 2.2 */
113 #define HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_S8_DEFAULT_NO_HW_TIFS_NS 132000
114 #define HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_S8_DEFAULT_NO_HW_TIFS_US \
115 	HAL_RADIO_NS2US_ROUND( \
116 		HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_S8_DEFAULT_NO_HW_TIFS_NS)
117 
118 /* RXEN->RXIDLE + RXIDLE->RX (with fast Radio ramp-up mode)
119  * in microseconds for LE 1M PHY.
120  */
121 #define HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_1M_FAST_NS 40000
122 #define HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_1M_FAST_US \
123 	HAL_RADIO_NS2US_CEIL(HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_1M_FAST_NS)
124 
125 /* RXEN->RXIDLE + RXIDLE->RX (with default Radio ramp-up mode)
126  * in microseconds for LE 1M PHY.
127  */
128 #define HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_1M_DEFAULT_NS 140000
129 #define HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_1M_DEFAULT_US \
130 	HAL_RADIO_NS2US_CEIL(HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_1M_DEFAULT_NS)
131 
132 /* RXEN->RXIDLE + RXIDLE->RX (with default Radio ramp-up mode and
133  * no HW TIFS auto-switch) in microseconds for LE 1M PHY.
134  */
135 #define HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_1M_DEFAULT_NO_HW_TIFS_NS 129000
136 #define HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_1M_DEFAULT_NO_HW_TIFS_US \
137 	HAL_RADIO_NS2US_CEIL( \
138 		HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_1M_DEFAULT_NO_HW_TIFS_NS)
139 
140 /* RXEN->RXIDLE + RXIDLE->RX (with fast Radio ramp-up mode)
141  * in microseconds for LE 2M PHY.
142  */
143 #define HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_2M_FAST_NS 40000
144 #define HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_2M_FAST_US \
145 	HAL_RADIO_NS2US_CEIL(HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_2M_FAST_NS)
146 
147 /* RXEN->RXIDLE + RXIDLE->RX (with default Radio ramp-up mode)
148  * in microseconds for LE 2M PHY.
149  */
150 #define HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_2M_DEFAULT_NS 140000
151 #define HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_2M_DEFAULT_US \
152 	HAL_RADIO_NS2US_CEIL(HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_2M_DEFAULT_NS)
153 
154 /* RXEN->RXIDLE + RXIDLE->RX (with default Radio ramp-up mode and
155  * no HW TIFS auto-switch) in microseconds for LE 2M PHY.
156  */
157 #define HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_2M_DEFAULT_NO_HW_TIFS_NS 129000
158 #define HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_2M_DEFAULT_NO_HW_TIFS_US \
159 	HAL_RADIO_NS2US_CEIL(\
160 		HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_2M_DEFAULT_NO_HW_TIFS_NS)
161 
162 
163 /* RXEN->RXIDLE + RXIDLE->RX (with fast Radio ramp-up mode)
164  * in microseconds for LE Coded PHY [S2].
165  */
166 #define HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_S2_FAST_NS 40000
167 #define HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_S2_FAST_US \
168 	HAL_RADIO_NS2US_CEIL(HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_S2_FAST_NS)
169 
170 /* RXEN->RXIDLE + RXIDLE->RX (with default Radio ramp-up mode)
171  * in microseconds for LE Coded PHY [S2].
172  */
173 #define HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_S2_DEFAULT_NS 120000
174 #define HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_S2_DEFAULT_US \
175 	HAL_RADIO_NS2US_CEIL(HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_S2_DEFAULT_NS)
176 
177 /* RXEN->RXIDLE + RXIDLE->RX (with default Radio ramp-up mode
178  * and no HW TIFS auto-switch) in microseconds for LE Coded PHY [S2].
179  */
180 /* 129.5 + 0.2 */
181 #define HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_S2_DEFAULT_NO_HW_TIFS_NS 130000
182 #define HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_S2_DEFAULT_NO_HW_TIFS_US \
183 	HAL_RADIO_NS2US_CEIL( \
184 		HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_S2_DEFAULT_NO_HW_TIFS_NS)
185 
186 /* RXEN->RXIDLE + RXIDLE->RX (with fast Radio ramp-up mode)
187  * in microseconds for LE Coded PHY [S8].
188  */
189 #define HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_S8_FAST_NS 40000
190 #define HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_S8_FAST_US \
191 	HAL_RADIO_NS2US_CEIL(HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_S8_FAST_NS)
192 
193 /* RXEN->RXIDLE + RXIDLE->RX (with default Radio ramp-up mode)
194  * in microseconds for LE Coded PHY [S8].
195  */
196 #define HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_S8_DEFAULT_NS 120000
197 #define HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_S8_DEFAULT_US \
198 	HAL_RADIO_NS2US_CEIL(HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_S8_DEFAULT_NS)
199 
200 /* RXEN->RXIDLE + RXIDLE->RX (with default Radio ramp-up mode and
201  * no HW TIFS auto-switch) in microseconds for LE Coded PHY [S8].
202  */
203 /* 129.5 + 0.2 */
204 #define HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_S8_DEFAULT_NO_HW_TIFS_NS 130000
205 #define HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_S8_DEFAULT_NO_HW_TIFS_US \
206 	HAL_RADIO_NS2US_CEIL( \
207 		HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_S8_DEFAULT_NO_HW_TIFS_NS)
208 
209 
210 #define HAL_RADIO_NRF52833_TX_CHAIN_DELAY_NS     1000
211 #define HAL_RADIO_NRF52833_TX_CHAIN_DELAY_US \
212 	HAL_RADIO_NS2US_CEIL(HAL_RADIO_NRF52833_TX_CHAIN_DELAY_NS)
213 
214 #define HAL_RADIO_NRF52833_RX_CHAIN_DELAY_1M_NS  9000
215 #define HAL_RADIO_NRF52833_RX_CHAIN_DELAY_1M_US \
216 	HAL_RADIO_NS2US_CEIL(HAL_RADIO_NRF52833_RX_CHAIN_DELAY_1M_NS)
217 
218 #define HAL_RADIO_NRF52833_RX_CHAIN_DELAY_2M_NS  5000
219 #define HAL_RADIO_NRF52833_RX_CHAIN_DELAY_2M_US \
220 	HAL_RADIO_NS2US_CEIL(HAL_RADIO_NRF52833_RX_CHAIN_DELAY_2M_NS)
221 
222 #define HAL_RADIO_NRF52833_RX_CHAIN_DELAY_S2_US  30
223 #define HAL_RADIO_NRF52833_RX_CHAIN_DELAY_S2_NS  30000
224 #define HAL_RADIO_NRF52833_RX_CHAIN_DELAY_S8_US  30
225 #define HAL_RADIO_NRF52833_RX_CHAIN_DELAY_S8_NS  30000
226 
227 
228 #if defined(CONFIG_BT_CTLR_RADIO_ENABLE_FAST)
229 #define HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_1M_US \
230 	HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_1M_FAST_US
231 #define HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_1M_NS \
232 	HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_1M_FAST_NS
233 
234 #define HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_2M_US \
235 	HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_2M_FAST_US
236 #define HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_2M_NS \
237 	HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_2M_FAST_NS
238 
239 #define HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_S2_US \
240 	HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_S2_FAST_US
241 #define HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_S2_NS \
242 	HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_S2_FAST_NS
243 
244 #define HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_S8_US \
245 	HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_S8_FAST_US
246 #define HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_S8_NS \
247 	HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_S8_FAST_NS
248 
249 #define HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_1M_US \
250 	HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_1M_FAST_US
251 #define HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_1M_NS \
252 	HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_1M_FAST_NS
253 
254 #define HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_2M_US \
255 	HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_2M_FAST_US
256 #define HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_2M_NS \
257 	HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_2M_FAST_NS
258 
259 #define HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_S2_US \
260 	HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_S2_FAST_US
261 #define HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_S2_NS \
262 	HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_S2_FAST_NS
263 
264 #define HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_S8_US \
265 	HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_S8_FAST_US
266 #define HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_S8_NS \
267 	HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_S8_FAST_NS
268 
269 #else /* !CONFIG_BT_CTLR_RADIO_ENABLE_FAST */
270 #if defined(CONFIG_BT_CTLR_TIFS_HW)
271 #define HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_1M_US \
272 	HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_1M_DEFAULT_US
273 #define HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_1M_NS \
274 	HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_1M_DEFAULT_NS
275 
276 #define HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_2M_US \
277 	HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_2M_DEFAULT_US
278 #define HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_2M_NS \
279 	HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_2M_DEFAULT_NS
280 
281 #define HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_S2_US \
282 	HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_S2_DEFAULT_US
283 #define HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_S2_NS \
284 	HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_S2_DEFAULT_NS
285 
286 #define HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_S8_US \
287 	HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_S8_DEFAULT_US
288 #define HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_S8_NS \
289 	HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_S8_DEFAULT_NS
290 
291 #define HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_1M_US \
292 	HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_1M_DEFAULT_US
293 #define HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_1M_NS \
294 	HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_1M_DEFAULT_NS
295 
296 #define HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_2M_US \
297 	HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_2M_DEFAULT_US
298 #define HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_2M_NS \
299 	HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_2M_DEFAULT_NS
300 
301 #define HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_S2_US \
302 	HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_S2_DEFAULT_US
303 #define HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_S2_NS \
304 	HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_S2_DEFAULT_NS
305 
306 #define HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_S8_US \
307 	HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_S8_DEFAULT_US
308 #define HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_S8_NS \
309 	HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_S8_DEFAULT_NS
310 
311 #else /* !CONFIG_BT_CTLR_TIFS_HW */
312 #define HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_1M_US \
313 	HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_1M_DEFAULT_NO_HW_TIFS_US
314 #define HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_1M_NS \
315 	HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_1M_DEFAULT_NO_HW_TIFS_NS
316 
317 #define HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_2M_US \
318 	HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_2M_DEFAULT_NO_HW_TIFS_US
319 #define HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_2M_NS \
320 	HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_2M_DEFAULT_NO_HW_TIFS_NS
321 
322 #define HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_S2_US \
323 	HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_S2_DEFAULT_NO_HW_TIFS_US
324 #define HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_S2_NS \
325 	HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_S2_DEFAULT_NO_HW_TIFS_NS
326 
327 #define HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_S8_US \
328 	HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_S8_DEFAULT_NO_HW_TIFS_US
329 #define HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_S8_NS \
330 	HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_S8_DEFAULT_NO_HW_TIFS_NS
331 
332 #define HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_1M_US \
333 	HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_1M_DEFAULT_NO_HW_TIFS_US
334 #define HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_1M_NS \
335 	HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_1M_DEFAULT_NO_HW_TIFS_NS
336 
337 #define HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_2M_US \
338 	HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_2M_DEFAULT_NO_HW_TIFS_US
339 #define HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_2M_NS \
340 	HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_2M_DEFAULT_NO_HW_TIFS_NS
341 
342 #define HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_S2_US \
343 	HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_S2_DEFAULT_NO_HW_TIFS_US
344 #define HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_S2_NS \
345 	HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_S2_DEFAULT_NO_HW_TIFS_NS
346 
347 #define HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_S8_US \
348 	HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_S8_DEFAULT_NO_HW_TIFS_US
349 #define HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_S8_NS \
350 	HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_S8_DEFAULT_NO_HW_TIFS_NS
351 #endif /* !CONFIG_BT_CTLR_TIFS_HW */
352 #endif /* !CONFIG_BT_CTLR_RADIO_ENABLE_FAST */
353 
354 /* HAL abstraction of Radio bitfields */
355 #define HAL_RADIO_INTENSET_DISABLED_Msk         RADIO_INTENSET_DISABLED_Msk
356 #define HAL_RADIO_SHORTS_TRX_END_DISABLE_Msk    RADIO_SHORTS_END_DISABLE_Msk
357 #define HAL_RADIO_SHORTS_TRX_PHYEND_DISABLE_Msk RADIO_SHORTS_PHYEND_DISABLE_Msk
358 
359 /* HAL abstraction of Radio IRQ number */
360 #define HAL_RADIO_IRQn                          RADIO_IRQn
361 
hal_radio_reset(void)362 static inline void hal_radio_reset(void)
363 {
364 }
365 
hal_radio_stop(void)366 static inline void hal_radio_stop(void)
367 {
368 }
369 
hal_radio_ram_prio_setup(void)370 static inline void hal_radio_ram_prio_setup(void)
371 {
372 
373 }
374 
hal_radio_phy_mode_get(uint8_t phy,uint8_t flags)375 static inline uint32_t hal_radio_phy_mode_get(uint8_t phy, uint8_t flags)
376 {
377 	ARG_UNUSED(flags);
378 	uint32_t mode;
379 
380 	switch (phy) {
381 	case BIT(0):
382 	default:
383 		mode = RADIO_MODE_MODE_Ble_1Mbit;
384 		break;
385 
386 	case BIT(1):
387 		mode = RADIO_MODE_MODE_Ble_2Mbit;
388 		break;
389 
390 #if defined(CONFIG_BT_CTLR_PHY_CODED)
391 	case BIT(2):
392 		if (flags & 0x01) {
393 			mode = RADIO_MODE_MODE_Ble_LR125Kbit;
394 		} else {
395 			mode = RADIO_MODE_MODE_Ble_LR500Kbit;
396 		}
397 		break;
398 #endif /* CONFIG_BT_CTLR_PHY_CODED */
399 	}
400 
401 	return mode;
402 }
403 
hal_radio_tx_power_min_get(void)404 static inline uint32_t hal_radio_tx_power_min_get(void)
405 {
406 	return RADIO_TXPOWER_TXPOWER_Neg40dBm;
407 }
408 
hal_radio_tx_power_max_get(void)409 static inline uint32_t hal_radio_tx_power_max_get(void)
410 {
411 	return RADIO_TXPOWER_TXPOWER_Pos8dBm;
412 }
413 
hal_radio_tx_power_floor(int8_t tx_power_lvl)414 static inline uint32_t hal_radio_tx_power_floor(int8_t tx_power_lvl)
415 {
416 	if (tx_power_lvl >= (int8_t)RADIO_TXPOWER_TXPOWER_Pos8dBm) {
417 		return RADIO_TXPOWER_TXPOWER_Pos8dBm;
418 	}
419 
420 	if (tx_power_lvl >= (int8_t)RADIO_TXPOWER_TXPOWER_Pos7dBm) {
421 		return RADIO_TXPOWER_TXPOWER_Pos7dBm;
422 	}
423 
424 	if (tx_power_lvl >= (int8_t)RADIO_TXPOWER_TXPOWER_Pos6dBm) {
425 		return RADIO_TXPOWER_TXPOWER_Pos6dBm;
426 	}
427 
428 	if (tx_power_lvl >= (int8_t)RADIO_TXPOWER_TXPOWER_Pos5dBm) {
429 		return RADIO_TXPOWER_TXPOWER_Pos5dBm;
430 	}
431 
432 	if (tx_power_lvl >= (int8_t)RADIO_TXPOWER_TXPOWER_Pos4dBm) {
433 		return RADIO_TXPOWER_TXPOWER_Pos4dBm;
434 	}
435 
436 	if (tx_power_lvl >= (int8_t)RADIO_TXPOWER_TXPOWER_Pos3dBm) {
437 		return RADIO_TXPOWER_TXPOWER_Pos3dBm;
438 	}
439 
440 	if (tx_power_lvl >= (int8_t)RADIO_TXPOWER_TXPOWER_Pos2dBm) {
441 		return RADIO_TXPOWER_TXPOWER_Pos2dBm;
442 	}
443 
444 	if (tx_power_lvl >= (int8_t)RADIO_TXPOWER_TXPOWER_0dBm) {
445 		return RADIO_TXPOWER_TXPOWER_0dBm;
446 	}
447 
448 	if (tx_power_lvl >= (int8_t)RADIO_TXPOWER_TXPOWER_Neg4dBm) {
449 		return RADIO_TXPOWER_TXPOWER_Neg4dBm;
450 	}
451 
452 	if (tx_power_lvl >= (int8_t)RADIO_TXPOWER_TXPOWER_Neg8dBm) {
453 		return RADIO_TXPOWER_TXPOWER_Neg8dBm;
454 	}
455 
456 	if (tx_power_lvl >= (int8_t)RADIO_TXPOWER_TXPOWER_Neg12dBm) {
457 		return RADIO_TXPOWER_TXPOWER_Neg12dBm;
458 	}
459 
460 	if (tx_power_lvl >= (int8_t)RADIO_TXPOWER_TXPOWER_Neg16dBm) {
461 		return RADIO_TXPOWER_TXPOWER_Neg16dBm;
462 	}
463 
464 	if (tx_power_lvl >= (int8_t)RADIO_TXPOWER_TXPOWER_Neg20dBm) {
465 		return RADIO_TXPOWER_TXPOWER_Neg20dBm;
466 	}
467 
468 	/* Note: The -30 dBm power level is deprecated so ignore it! */
469 	return RADIO_TXPOWER_TXPOWER_Neg40dBm;
470 }
471 
hal_radio_tx_ready_delay_us_get(uint8_t phy,uint8_t flags)472 static inline uint32_t hal_radio_tx_ready_delay_us_get(uint8_t phy, uint8_t flags)
473 {
474 	ARG_UNUSED(flags);
475 
476 	switch (phy) {
477 	default:
478 	case BIT(0):
479 		return HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_1M_US;
480 	case BIT(1):
481 		return HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_2M_US;
482 
483 #if defined(CONFIG_BT_CTLR_PHY_CODED)
484 	case BIT(2):
485 		if (flags & 0x01) {
486 			return HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_S8_US;
487 		} else {
488 			return HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_S2_US;
489 		}
490 #endif /* CONFIG_BT_CTLR_PHY_CODED */
491 	}
492 }
493 
hal_radio_rx_ready_delay_us_get(uint8_t phy,uint8_t flags)494 static inline uint32_t hal_radio_rx_ready_delay_us_get(uint8_t phy, uint8_t flags)
495 {
496 	ARG_UNUSED(flags);
497 
498 	switch (phy) {
499 	default:
500 	case BIT(0):
501 		return HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_1M_US;
502 	case BIT(1):
503 		return HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_2M_US;
504 
505 #if defined(CONFIG_BT_CTLR_PHY_CODED)
506 	case BIT(2):
507 		if (flags & 0x01) {
508 			return HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_S8_US;
509 		} else {
510 			return HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_S2_US;
511 		}
512 #endif /* CONFIG_BT_CTLR_PHY_CODED */
513 
514 	}
515 }
516 
hal_radio_tx_chain_delay_us_get(uint8_t phy,uint8_t flags)517 static inline uint32_t hal_radio_tx_chain_delay_us_get(uint8_t phy, uint8_t flags)
518 {
519 	ARG_UNUSED(phy);
520 	ARG_UNUSED(flags);
521 
522 	return HAL_RADIO_NRF52833_TX_CHAIN_DELAY_US;
523 }
524 
hal_radio_rx_chain_delay_us_get(uint8_t phy,uint8_t flags)525 static inline uint32_t hal_radio_rx_chain_delay_us_get(uint8_t phy, uint8_t flags)
526 {
527 	ARG_UNUSED(flags);
528 
529 	switch (phy) {
530 	default:
531 	case BIT(0):
532 		return HAL_RADIO_NRF52833_RX_CHAIN_DELAY_1M_US;
533 	case BIT(1):
534 		return HAL_RADIO_NRF52833_RX_CHAIN_DELAY_2M_US;
535 
536 #if defined(CONFIG_BT_CTLR_PHY_CODED)
537 	case BIT(2):
538 		if (flags & 0x01) {
539 			return HAL_RADIO_NRF52833_RX_CHAIN_DELAY_S8_US;
540 		} else {
541 			return HAL_RADIO_NRF52833_RX_CHAIN_DELAY_S2_US;
542 		}
543 #endif /* CONFIG_BT_CTLR_PHY_CODED */
544 	}
545 }
546 
hal_radio_tx_ready_delay_ns_get(uint8_t phy,uint8_t flags)547 static inline uint32_t hal_radio_tx_ready_delay_ns_get(uint8_t phy, uint8_t flags)
548 {
549 	ARG_UNUSED(flags);
550 
551 	switch (phy) {
552 	default:
553 	case BIT(0):
554 		return HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_1M_NS;
555 	case BIT(1):
556 		return HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_2M_NS;
557 
558 #if defined(CONFIG_BT_CTLR_PHY_CODED)
559 	case BIT(2):
560 		if (flags & 0x01) {
561 			return HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_S8_NS;
562 		} else {
563 			return HAL_RADIO_NRF52833_TXEN_TXIDLE_TX_S2_NS;
564 		}
565 #endif /* CONFIG_BT_CTLR_PHY_CODED */
566 	}
567 }
568 
hal_radio_rx_ready_delay_ns_get(uint8_t phy,uint8_t flags)569 static inline uint32_t hal_radio_rx_ready_delay_ns_get(uint8_t phy, uint8_t flags)
570 {
571 	ARG_UNUSED(flags);
572 
573 	switch (phy) {
574 	default:
575 	case BIT(0):
576 		return HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_1M_NS;
577 	case BIT(1):
578 		return HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_2M_NS;
579 #if defined(CONFIG_BT_CTLR_PHY_CODED)
580 	case BIT(2):
581 		if (flags & 0x01) {
582 			return HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_S8_NS;
583 		} else {
584 			return HAL_RADIO_NRF52833_RXEN_RXIDLE_RX_S2_NS;
585 		}
586 #endif /* CONFIG_BT_CTLR_PHY_CODED */
587 	}
588 }
589 
hal_radio_tx_chain_delay_ns_get(uint8_t phy,uint8_t flags)590 static inline uint32_t hal_radio_tx_chain_delay_ns_get(uint8_t phy, uint8_t flags)
591 {
592 	ARG_UNUSED(phy);
593 	ARG_UNUSED(flags);
594 
595 	return HAL_RADIO_NRF52833_TX_CHAIN_DELAY_NS;
596 }
597 
hal_radio_rx_chain_delay_ns_get(uint8_t phy,uint8_t flags)598 static inline uint32_t hal_radio_rx_chain_delay_ns_get(uint8_t phy, uint8_t flags)
599 {
600 	ARG_UNUSED(flags);
601 
602 	switch (phy) {
603 	default:
604 	case BIT(0):
605 		return HAL_RADIO_NRF52833_RX_CHAIN_DELAY_1M_NS;
606 	case BIT(1):
607 		return HAL_RADIO_NRF52833_RX_CHAIN_DELAY_2M_NS;
608 
609 #if defined(CONFIG_BT_CTLR_PHY_CODED)
610 	case BIT(2):
611 		if (flags & 0x01) {
612 			return HAL_RADIO_NRF52833_RX_CHAIN_DELAY_S8_NS;
613 		} else {
614 			return HAL_RADIO_NRF52833_RX_CHAIN_DELAY_S2_NS;
615 		}
616 #endif /* CONFIG_BT_CTLR_PHY_CODED */
617 	}
618 }
619