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