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