1 /*
2  * Copyright (c) 2024 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 #if !defined(CONFIG_BT_CTLR_NRF_GRTC)
9 #define NRF_RTC NRF_RTC10
10 #endif /* !CONFIG_BT_CTLR_NRF_GRTC */
11 
12 #undef EVENT_TIMER_ID
13 #define EVENT_TIMER_ID 10
14 
15 #undef EVENT_TIMER
16 #define EVENT_TIMER _CONCAT(NRF_TIMER, EVENT_TIMER_ID)
17 
18 #if !defined(CONFIG_BT_CTLR_TIFS_HW)
19 #undef SW_SWITCH_TIMER
20 #if defined(CONFIG_BT_CTLR_SW_SWITCH_SINGLE_TIMER)
21 #define SW_SWITCH_TIMER EVENT_TIMER
22 #else  /* !CONFIG_BT_CTLR_SW_SWITCH_SINGLE_TIMER */
23 /* TODO: Using NRF_TIMER from another domain needs DPPIC and PPIB setup */
24 #error "SW tIFS switching using dedicated second timer not supported yet."
25 #endif  /* !CONFIG_BT_CTLR_SW_SWITCH_SINGLE_TIMER */
26 #endif /* !CONFIG_BT_CTLR_TIFS_HW */
27 
28 /* HAL abstraction of event timer prescaler value */
29 #define HAL_EVENT_TIMER_PRESCALER_VALUE 5U
30 
31 /* NRF Radio HW timing constants
32  * - provided in US and NS (for higher granularity)
33  * - based on the timings configured in the HW models, which are based
34  *   on the old 52832 product specification
35  */
36 
37 /* TXEN->TXIDLE + TXIDLE->TX (with fast Radio ramp-up mode)
38  * in microseconds for LE 1M PHY.
39  */
40 #define HAL_RADIO_NRF54LX_TXEN_TXIDLE_TX_1M_FAST_NS 41000
41 #define HAL_RADIO_NRF54LX_TXEN_TXIDLE_TX_1M_FAST_US \
42 	HAL_RADIO_NS2US_ROUND(HAL_RADIO_NRF54LX_TXEN_TXIDLE_TX_1M_FAST_NS)
43 
44 /* TXEN->TXIDLE + TXIDLE->TX (with default Radio ramp-up mode)
45  * in microseconds for LE 1M PHY.
46  */
47 #define HAL_RADIO_NRF54LX_TXEN_TXIDLE_TX_1M_DEFAULT_NS 141000
48 #define HAL_RADIO_NRF54LX_TXEN_TXIDLE_TX_1M_DEFAULT_US \
49 	HAL_RADIO_NS2US_ROUND(HAL_RADIO_NRF54LX_TXEN_TXIDLE_TX_1M_DEFAULT_NS)
50 
51 /* TXEN->TXIDLE + TXIDLE->TX (with default Radio ramp-up mode
52  * and no HW TIFS auto-switch) in microseconds for LE 1M PHY.
53  */
54  /* 129.5 + 0.8 */
55 #define HAL_RADIO_NRF54LX_TXEN_TXIDLE_TX_1M_DEFAULT_NO_HW_TIFS_NS 130000
56 #define HAL_RADIO_NRF54LX_TXEN_TXIDLE_TX_1M_DEFAULT_NO_HW_TIFS_US \
57 	HAL_RADIO_NS2US_ROUND( \
58 		HAL_RADIO_NRF54LX_TXEN_TXIDLE_TX_1M_DEFAULT_NO_HW_TIFS_NS)
59 
60 /* TXEN->TXIDLE + TXIDLE->TX (with fast Radio ramp-up mode)
61  * in microseconds for LE 2M PHY.
62  */
63 #define HAL_RADIO_NRF54LX_TXEN_TXIDLE_TX_2M_FAST_NS 40000
64 #define HAL_RADIO_NRF54LX_TXEN_TXIDLE_TX_2M_FAST_US \
65 	HAL_RADIO_NS2US_ROUND(HAL_RADIO_NRF54LX_TXEN_TXIDLE_TX_2M_FAST_NS)
66 
67 /* TXEN->TXIDLE + TXIDLE->TX (with default Radio ramp-up mode)
68  * in microseconds for LE 2M PHY.
69  */
70 #define HAL_RADIO_NRF54LX_TXEN_TXIDLE_TX_2M_DEFAULT_NS 140000
71 #define HAL_RADIO_NRF54LX_TXEN_TXIDLE_TX_2M_DEFAULT_US \
72 	HAL_RADIO_NS2US_ROUND(HAL_RADIO_NRF54LX_TXEN_TXIDLE_TX_2M_DEFAULT_NS)
73 
74 /* TXEN->TXIDLE + TXIDLE->TX (with default Radio ramp-up mode and
75  * no HW TIFS auto-switch) in microseconds for LE 2M PHY.
76  */
77 /* 129.5 - 0.1 */
78 #define HAL_RADIO_NRF54LX_TXEN_TXIDLE_TX_2M_DEFAULT_NO_HW_TIFS_NS 129000
79 #define HAL_RADIO_NRF54LX_TXEN_TXIDLE_TX_2M_DEFAULT_NO_HW_TIFS_US \
80 	HAL_RADIO_NS2US_ROUND( \
81 		HAL_RADIO_NRF54LX_TXEN_TXIDLE_TX_2M_DEFAULT_NO_HW_TIFS_NS)
82 
83 /* TXEN->TXIDLE + TXIDLE->TX (with fast Radio ramp-up mode)
84  * in microseconds for LE CODED PHY [S2].
85  */
86 #define HAL_RADIO_NRF54LX_TXEN_TXIDLE_TX_S2_FAST_NS 42000
87 #define HAL_RADIO_NRF54LX_TXEN_TXIDLE_TX_S2_FAST_US \
88 	HAL_RADIO_NS2US_ROUND(HAL_RADIO_NRF54LX_TXEN_TXIDLE_TX_S2_FAST_NS)
89 
90 /* TXEN->TXIDLE + TXIDLE->TX (with default Radio ramp-up mode)
91  * in microseconds for LE 2M PHY [S2].
92  */
93 #define HAL_RADIO_NRF54LX_TXEN_TXIDLE_TX_S2_DEFAULT_NS 132000
94 #define HAL_RADIO_NRF54LX_TXEN_TXIDLE_TX_S2_DEFAULT_US \
95 	HAL_RADIO_NS2US_ROUND(HAL_RADIO_NRF54LX_TXEN_TXIDLE_TX_S2_DEFAULT_NS)
96 
97 /* TXEN->TXIDLE + TXIDLE->TX (with default Radio ramp-up mode and
98  * no HW TIFS auto-switch) in microseconds for LE 2M PHY [S2].
99  */
100 /* 129.5 + 2.2 */
101 #define HAL_RADIO_NRF54LX_TXEN_TXIDLE_TX_S2_DEFAULT_NO_HW_TIFS_NS 132000
102 #define HAL_RADIO_NRF54LX_TXEN_TXIDLE_TX_S2_DEFAULT_NO_HW_TIFS_US \
103 	HAL_RADIO_NS2US_ROUND( \
104 		HAL_RADIO_NRF54LX_TXEN_TXIDLE_TX_S2_DEFAULT_NO_HW_TIFS_NS)
105 
106 /* TXEN->TXIDLE + TXIDLE->TX (with fast Radio ramp-up mode)
107  * in microseconds for LE CODED PHY [S8].
108  */
109 #define HAL_RADIO_NRF54LX_TXEN_TXIDLE_TX_S8_FAST_NS 42000
110 #define HAL_RADIO_NRF54LX_TXEN_TXIDLE_TX_S8_FAST_US \
111 	HAL_RADIO_NS2US_ROUND(HAL_RADIO_NRF54LX_TXEN_TXIDLE_TX_S8_FAST_NS)
112 /* TXEN->TXIDLE + TXIDLE->TX (with default Radio ramp-up mode)
113  * in microseconds for LE 2M PHY [S8].
114  */
115 #define HAL_RADIO_NRF54LX_TXEN_TXIDLE_TX_S8_DEFAULT_NS 122000
116 #define HAL_RADIO_NRF54LX_TXEN_TXIDLE_TX_S8_DEFAULT_US \
117 	HAL_RADIO_NS2US_ROUND(HAL_RADIO_NRF54LX_TXEN_TXIDLE_TX_S8_DEFAULT_NS)
118 
119 /* TXEN->TXIDLE + TXIDLE->TX (with default Radio ramp-up mode and
120  * no HW TIFS auto-switch) in microseconds for LE 2M PHY [S8].
121  */
122  /* 129.5 + 2.2 */
123 #define HAL_RADIO_NRF54LX_TXEN_TXIDLE_TX_S8_DEFAULT_NO_HW_TIFS_NS 132000
124 #define HAL_RADIO_NRF54LX_TXEN_TXIDLE_TX_S8_DEFAULT_NO_HW_TIFS_US \
125 	HAL_RADIO_NS2US_ROUND( \
126 		HAL_RADIO_NRF54LX_TXEN_TXIDLE_TX_S8_DEFAULT_NO_HW_TIFS_NS)
127 
128 /* RXEN->RXIDLE + RXIDLE->RX (with fast Radio ramp-up mode)
129  * in microseconds for LE 1M PHY.
130  */
131 #define HAL_RADIO_NRF54LX_RXEN_RXIDLE_RX_1M_FAST_NS 40000
132 #define HAL_RADIO_NRF54LX_RXEN_RXIDLE_RX_1M_FAST_US \
133 	HAL_RADIO_NS2US_CEIL(HAL_RADIO_NRF54LX_RXEN_RXIDLE_RX_1M_FAST_NS)
134 
135 /* RXEN->RXIDLE + RXIDLE->RX (with default Radio ramp-up mode)
136  * in microseconds for LE 1M PHY.
137  */
138 #define HAL_RADIO_NRF54LX_RXEN_RXIDLE_RX_1M_DEFAULT_NS 140000
139 #define HAL_RADIO_NRF54LX_RXEN_RXIDLE_RX_1M_DEFAULT_US \
140 	HAL_RADIO_NS2US_CEIL(HAL_RADIO_NRF54LX_RXEN_RXIDLE_RX_1M_DEFAULT_NS)
141 
142 /* RXEN->RXIDLE + RXIDLE->RX (with default Radio ramp-up mode and
143  * no HW TIFS auto-switch) in microseconds for LE 1M PHY.
144  */
145 /* 129.5 + 0.2 */
146 #define HAL_RADIO_NRF54LX_RXEN_RXIDLE_RX_1M_DEFAULT_NO_HW_TIFS_NS 129000
147 #define HAL_RADIO_NRF54LX_RXEN_RXIDLE_RX_1M_DEFAULT_NO_HW_TIFS_US \
148 	HAL_RADIO_NS2US_CEIL( \
149 		HAL_RADIO_NRF54LX_RXEN_RXIDLE_RX_1M_DEFAULT_NO_HW_TIFS_NS)
150 
151 /* RXEN->RXIDLE + RXIDLE->RX (with fast Radio ramp-up mode)
152  * in microseconds for LE 2M PHY.
153  */
154 #define HAL_RADIO_NRF54LX_RXEN_RXIDLE_RX_2M_FAST_NS 40000
155 #define HAL_RADIO_NRF54LX_RXEN_RXIDLE_RX_2M_FAST_US \
156 	HAL_RADIO_NS2US_CEIL(HAL_RADIO_NRF54LX_RXEN_RXIDLE_RX_2M_FAST_NS)
157 
158 /* RXEN->RXIDLE + RXIDLE->RX (with default Radio ramp-up mode)
159  * in microseconds for LE 2M PHY.
160  */
161 #define HAL_RADIO_NRF54LX_RXEN_RXIDLE_RX_2M_DEFAULT_NS 140000
162 #define HAL_RADIO_NRF54LX_RXEN_RXIDLE_RX_2M_DEFAULT_US \
163 	HAL_RADIO_NS2US_CEIL(HAL_RADIO_NRF54LX_RXEN_RXIDLE_RX_2M_DEFAULT_NS)
164 
165 /* RXEN->RXIDLE + RXIDLE->RX (with default Radio ramp-up mode and
166  * no HW TIFS auto-switch) in microseconds for LE 2M PHY.
167  */
168 #define HAL_RADIO_NRF54LX_RXEN_RXIDLE_RX_2M_DEFAULT_NO_HW_TIFS_NS 129000
169 #define HAL_RADIO_NRF54LX_RXEN_RXIDLE_RX_2M_DEFAULT_NO_HW_TIFS_US \
170 	HAL_RADIO_NS2US_CEIL( \
171 		HAL_RADIO_NRF54LX_RXEN_RXIDLE_RX_2M_DEFAULT_NO_HW_TIFS_NS)
172 
173 /* RXEN->RXIDLE + RXIDLE->RX (with fast Radio ramp-up mode)
174  * in microseconds for LE Coded PHY [S2].
175  */
176 #define HAL_RADIO_NRF54LX_RXEN_RXIDLE_RX_S2_FAST_NS 40000
177 #define HAL_RADIO_NRF54LX_RXEN_RXIDLE_RX_S2_FAST_US \
178 	HAL_RADIO_NS2US_CEIL(HAL_RADIO_NRF54LX_RXEN_RXIDLE_RX_S2_FAST_NS)
179 
180 /* RXEN->RXIDLE + RXIDLE->RX (with default Radio ramp-up mode)
181  * in microseconds for LE Coded PHY [S2].
182  */
183 #define HAL_RADIO_NRF54LX_RXEN_RXIDLE_RX_S2_DEFAULT_NS 120000
184 #define HAL_RADIO_NRF54LX_RXEN_RXIDLE_RX_S2_DEFAULT_US \
185 	HAL_RADIO_NS2US_CEIL(HAL_RADIO_NRF54LX_RXEN_RXIDLE_RX_S2_DEFAULT_NS)
186 
187 /* RXEN->RXIDLE + RXIDLE->RX (with default Radio ramp-up mode
188  * and no HW TIFS auto-switch) in microseconds for LE Coded PHY [S2].
189  */
190 /* 129.5 + 0.2 */
191 #define HAL_RADIO_NRF54LX_RXEN_RXIDLE_RX_S2_DEFAULT_NO_HW_TIFS_NS 130000
192 #define HAL_RADIO_NRF54LX_RXEN_RXIDLE_RX_S2_DEFAULT_NO_HW_TIFS_US \
193 	HAL_RADIO_NS2US_CEIL( \
194 		HAL_RADIO_NRF54LX_RXEN_RXIDLE_RX_S2_DEFAULT_NO_HW_TIFS_NS)
195 
196 /* RXEN->RXIDLE + RXIDLE->RX (with fast Radio ramp-up mode)
197  * in microseconds for LE Coded PHY [S8].
198  */
199 #define HAL_RADIO_NRF54LX_RXEN_RXIDLE_RX_S8_FAST_NS 40000
200 #define HAL_RADIO_NRF54LX_RXEN_RXIDLE_RX_S8_FAST_US \
201 	HAL_RADIO_NS2US_CEIL(HAL_RADIO_NRF54LX_RXEN_RXIDLE_RX_S8_FAST_NS)
202 
203 /* RXEN->RXIDLE + RXIDLE->RX (with default Radio ramp-up mode)
204  * in microseconds for LE Coded PHY [S8].
205  */
206 #define HAL_RADIO_NRF54LX_RXEN_RXIDLE_RX_S8_DEFAULT_NS 120000
207 #define HAL_RADIO_NRF54LX_RXEN_RXIDLE_RX_S8_DEFAULT_US \
208 	HAL_RADIO_NS2US_CEIL(HAL_RADIO_NRF54LX_RXEN_RXIDLE_RX_S8_DEFAULT_NS)
209 
210 /* RXEN->RXIDLE + RXIDLE->RX (with default Radio ramp-up mode and
211  * no HW TIFS auto-switch) in microseconds for LE Coded PHY [S8].
212  */
213 /* 129.5 + 0.2 */
214 #define HAL_RADIO_NRF54LX_RXEN_RXIDLE_RX_S8_DEFAULT_NO_HW_TIFS_NS 130000
215 #define HAL_RADIO_NRF54LX_RXEN_RXIDLE_RX_S8_DEFAULT_NO_HW_TIFS_US \
216 	HAL_RADIO_NS2US_CEIL( \
217 		HAL_RADIO_NRF54LX_RXEN_RXIDLE_RX_S8_DEFAULT_NO_HW_TIFS_NS)
218 
219 #define HAL_RADIO_NRF54LX_TX_CHAIN_DELAY_US  1
220 #define HAL_RADIO_NRF54LX_TX_CHAIN_DELAY_NS  1000
221 
222 #define HAL_RADIO_NRF54LX_RX_CHAIN_DELAY_1M_US  9
223 #define HAL_RADIO_NRF54LX_RX_CHAIN_DELAY_1M_NS  9000
224 #define HAL_RADIO_NRF54LX_RX_CHAIN_DELAY_2M_US  5
225 #define HAL_RADIO_NRF54LX_RX_CHAIN_DELAY_2M_NS  5000
226 #define HAL_RADIO_NRF54LX_RX_CHAIN_DELAY_S2_US  30
227 #define HAL_RADIO_NRF54LX_RX_CHAIN_DELAY_S2_NS  30000
228 #define HAL_RADIO_NRF54LX_RX_CHAIN_DELAY_S8_US  30
229 #define HAL_RADIO_NRF54LX_RX_CHAIN_DELAY_S8_NS  30000
230 
231 #if defined(CONFIG_BT_CTLR_RADIO_ENABLE_FAST)
232 #define HAL_RADIO_NRF54LX_TXEN_TXIDLE_TX_1M_US \
233 	HAL_RADIO_NRF54LX_TXEN_TXIDLE_TX_1M_FAST_US
234 #define HAL_RADIO_NRF54LX_TXEN_TXIDLE_TX_1M_NS \
235 	HAL_RADIO_NRF54LX_TXEN_TXIDLE_TX_1M_FAST_NS
236 
237 #define HAL_RADIO_NRF54LX_TXEN_TXIDLE_TX_2M_US \
238 	HAL_RADIO_NRF54LX_TXEN_TXIDLE_TX_2M_FAST_US
239 #define HAL_RADIO_NRF54LX_TXEN_TXIDLE_TX_2M_NS \
240 	HAL_RADIO_NRF54LX_TXEN_TXIDLE_TX_2M_FAST_NS
241 
242 #define HAL_RADIO_NRF54LX_TXEN_TXIDLE_TX_S2_US \
243 	HAL_RADIO_NRF54LX_TXEN_TXIDLE_TX_S2_FAST_US
244 #define HAL_RADIO_NRF54LX_TXEN_TXIDLE_TX_S2_NS \
245 	HAL_RADIO_NRF54LX_TXEN_TXIDLE_TX_S2_FAST_NS
246 
247 #define HAL_RADIO_NRF54LX_TXEN_TXIDLE_TX_S8_US \
248 	HAL_RADIO_NRF54LX_TXEN_TXIDLE_TX_S8_FAST_US
249 #define HAL_RADIO_NRF54LX_TXEN_TXIDLE_TX_S8_NS \
250 	HAL_RADIO_NRF54LX_TXEN_TXIDLE_TX_S8_FAST_NS
251 
252 #define HAL_RADIO_NRF54LX_RXEN_RXIDLE_RX_1M_US \
253 	HAL_RADIO_NRF54LX_RXEN_RXIDLE_RX_1M_FAST_US
254 #define HAL_RADIO_NRF54LX_RXEN_RXIDLE_RX_1M_NS \
255 	HAL_RADIO_NRF54LX_RXEN_RXIDLE_RX_1M_FAST_NS
256 
257 #define HAL_RADIO_NRF54LX_RXEN_RXIDLE_RX_2M_US \
258 	HAL_RADIO_NRF54LX_RXEN_RXIDLE_RX_2M_FAST_US
259 #define HAL_RADIO_NRF54LX_RXEN_RXIDLE_RX_2M_NS \
260 	HAL_RADIO_NRF54LX_RXEN_RXIDLE_RX_2M_FAST_NS
261 
262 #define HAL_RADIO_NRF54LX_RXEN_RXIDLE_RX_S2_US \
263 	HAL_RADIO_NRF54LX_RXEN_RXIDLE_RX_S2_FAST_US
264 #define HAL_RADIO_NRF54LX_RXEN_RXIDLE_RX_S2_NS \
265 	HAL_RADIO_NRF54LX_RXEN_RXIDLE_RX_S2_FAST_NS
266 
267 #define HAL_RADIO_NRF54LX_RXEN_RXIDLE_RX_S8_US \
268 	HAL_RADIO_NRF54LX_RXEN_RXIDLE_RX_S8_FAST_US
269 #define HAL_RADIO_NRF54LX_RXEN_RXIDLE_RX_S8_NS \
270 	HAL_RADIO_NRF54LX_RXEN_RXIDLE_RX_S8_FAST_NS
271 
272 #else /* !CONFIG_BT_CTLR_RADIO_ENABLE_FAST */
273 #if defined(CONFIG_BT_CTLR_TIFS_HW)
274 #define HAL_RADIO_NRF54LX_TXEN_TXIDLE_TX_1M_US \
275 	HAL_RADIO_NRF54LX_TXEN_TXIDLE_TX_1M_DEFAULT_US
276 #define HAL_RADIO_NRF54LX_TXEN_TXIDLE_TX_1M_NS \
277 	HAL_RADIO_NRF54LX_TXEN_TXIDLE_TX_1M_DEFAULT_NS
278 
279 #define HAL_RADIO_NRF54LX_TXEN_TXIDLE_TX_2M_US \
280 	HAL_RADIO_NRF54LX_TXEN_TXIDLE_TX_2M_DEFAULT_US
281 #define HAL_RADIO_NRF54LX_TXEN_TXIDLE_TX_2M_NS \
282 	HAL_RADIO_NRF54LX_TXEN_TXIDLE_TX_2M_DEFAULT_NS
283 
284 #define HAL_RADIO_NRF54LX_TXEN_TXIDLE_TX_S2_US \
285 	HAL_RADIO_NRF54LX_TXEN_TXIDLE_TX_S2_DEFAULT_US
286 #define HAL_RADIO_NRF54LX_TXEN_TXIDLE_TX_S2_NS \
287 	HAL_RADIO_NRF54LX_TXEN_TXIDLE_TX_S2_DEFAULT_NS
288 
289 #define HAL_RADIO_NRF54LX_TXEN_TXIDLE_TX_S8_US \
290 	HAL_RADIO_NRF54LX_TXEN_TXIDLE_TX_S8_DEFAULT_US
291 #define HAL_RADIO_NRF54LX_TXEN_TXIDLE_TX_S8_NS \
292 	HAL_RADIO_NRF54LX_TXEN_TXIDLE_TX_S8_DEFAULT_NS
293 
294 #define HAL_RADIO_NRF54LX_RXEN_RXIDLE_RX_1M_US \
295 	HAL_RADIO_NRF54LX_RXEN_RXIDLE_RX_1M_DEFAULT_US
296 #define HAL_RADIO_NRF54LX_RXEN_RXIDLE_RX_1M_NS \
297 	HAL_RADIO_NRF54LX_RXEN_RXIDLE_RX_1M_DEFAULT_NS
298 
299 #define HAL_RADIO_NRF54LX_RXEN_RXIDLE_RX_2M_US \
300 	HAL_RADIO_NRF54LX_RXEN_RXIDLE_RX_2M_DEFAULT_US
301 #define HAL_RADIO_NRF54LX_RXEN_RXIDLE_RX_2M_NS \
302 	HAL_RADIO_NRF54LX_RXEN_RXIDLE_RX_2M_DEFAULT_NS
303 
304 #define HAL_RADIO_NRF54LX_RXEN_RXIDLE_RX_S2_US \
305 	HAL_RADIO_NRF54LX_RXEN_RXIDLE_RX_S2_DEFAULT_US
306 #define HAL_RADIO_NRF54LX_RXEN_RXIDLE_RX_S2_NS \
307 	HAL_RADIO_NRF54LX_RXEN_RXIDLE_RX_S2_DEFAULT_NS
308 
309 #define HAL_RADIO_NRF54LX_RXEN_RXIDLE_RX_S8_US \
310 	HAL_RADIO_NRF54LX_RXEN_RXIDLE_RX_S8_DEFAULT_US
311 #define HAL_RADIO_NRF54LX_RXEN_RXIDLE_RX_S8_NS \
312 	HAL_RADIO_NRF54LX_RXEN_RXIDLE_RX_S8_DEFAULT_NS
313 
314 #else /* !CONFIG_BT_CTLR_TIFS_HW */
315 #define HAL_RADIO_NRF54LX_TXEN_TXIDLE_TX_1M_US \
316 	HAL_RADIO_NRF54LX_TXEN_TXIDLE_TX_1M_DEFAULT_NO_HW_TIFS_US
317 #define HAL_RADIO_NRF54LX_TXEN_TXIDLE_TX_1M_NS \
318 	HAL_RADIO_NRF54LX_TXEN_TXIDLE_TX_1M_DEFAULT_NO_HW_TIFS_NS
319 
320 #define HAL_RADIO_NRF54LX_TXEN_TXIDLE_TX_2M_US \
321 	HAL_RADIO_NRF54LX_TXEN_TXIDLE_TX_2M_DEFAULT_NO_HW_TIFS_US
322 #define HAL_RADIO_NRF54LX_TXEN_TXIDLE_TX_2M_NS \
323 	HAL_RADIO_NRF54LX_TXEN_TXIDLE_TX_2M_DEFAULT_NO_HW_TIFS_NS
324 
325 #define HAL_RADIO_NRF54LX_TXEN_TXIDLE_TX_S2_US \
326 	HAL_RADIO_NRF54LX_TXEN_TXIDLE_TX_S2_DEFAULT_NO_HW_TIFS_US
327 #define HAL_RADIO_NRF54LX_TXEN_TXIDLE_TX_S2_NS \
328 	HAL_RADIO_NRF54LX_TXEN_TXIDLE_TX_S2_DEFAULT_NO_HW_TIFS_NS
329 
330 #define HAL_RADIO_NRF54LX_TXEN_TXIDLE_TX_S8_US \
331 	HAL_RADIO_NRF54LX_TXEN_TXIDLE_TX_S8_DEFAULT_NO_HW_TIFS_US
332 #define HAL_RADIO_NRF54LX_TXEN_TXIDLE_TX_S8_NS \
333 	HAL_RADIO_NRF54LX_TXEN_TXIDLE_TX_S8_DEFAULT_NO_HW_TIFS_NS
334 
335 #define HAL_RADIO_NRF54LX_RXEN_RXIDLE_RX_1M_US \
336 	HAL_RADIO_NRF54LX_RXEN_RXIDLE_RX_1M_DEFAULT_NO_HW_TIFS_US
337 #define HAL_RADIO_NRF54LX_RXEN_RXIDLE_RX_1M_NS \
338 	HAL_RADIO_NRF54LX_RXEN_RXIDLE_RX_1M_DEFAULT_NO_HW_TIFS_NS
339 
340 #define HAL_RADIO_NRF54LX_RXEN_RXIDLE_RX_2M_US \
341 	HAL_RADIO_NRF54LX_RXEN_RXIDLE_RX_2M_DEFAULT_NO_HW_TIFS_US
342 #define HAL_RADIO_NRF54LX_RXEN_RXIDLE_RX_2M_NS \
343 	HAL_RADIO_NRF54LX_RXEN_RXIDLE_RX_2M_DEFAULT_NO_HW_TIFS_NS
344 
345 #define HAL_RADIO_NRF54LX_RXEN_RXIDLE_RX_S2_US \
346 	HAL_RADIO_NRF54LX_RXEN_RXIDLE_RX_S2_DEFAULT_NO_HW_TIFS_US
347 #define HAL_RADIO_NRF54LX_RXEN_RXIDLE_RX_S2_NS \
348 	HAL_RADIO_NRF54LX_RXEN_RXIDLE_RX_S2_DEFAULT_NO_HW_TIFS_NS
349 
350 #define HAL_RADIO_NRF54LX_RXEN_RXIDLE_RX_S8_US \
351 	HAL_RADIO_NRF54LX_RXEN_RXIDLE_RX_S8_DEFAULT_NO_HW_TIFS_US
352 #define HAL_RADIO_NRF54LX_RXEN_RXIDLE_RX_S8_NS \
353 	HAL_RADIO_NRF54LX_RXEN_RXIDLE_RX_S8_DEFAULT_NO_HW_TIFS_NS
354 #endif /* !CONFIG_BT_CTLR_TIFS_HW */
355 #endif /* !CONFIG_BT_CTLR_RADIO_ENABLE_FAST */
356 
357 /* HAL abstraction of Radio bitfields */
358 #define HAL_NRF_RADIO_EVENT_END                   NRF_RADIO_EVENT_END
359 #define HAL_RADIO_EVENTS_END                      EVENTS_END
360 #define HAL_RADIO_PUBLISH_END                     PUBLISH_END
361 #define HAL_NRF_RADIO_EVENT_PHYEND                NRF_RADIO_EVENT_PHYEND
362 #define HAL_RADIO_EVENTS_PHYEND                   EVENTS_PHYEND
363 #define HAL_RADIO_PUBLISH_PHYEND                  PUBLISH_PHYEND
364 #define HAL_RADIO_INTENSET_DISABLED_Msk           RADIO_INTENSET00_DISABLED_Msk
365 #define HAL_RADIO_SHORTS_TRX_END_DISABLE_Msk      RADIO_SHORTS_PHYEND_DISABLE_Msk
366 #define HAL_RADIO_SHORTS_TRX_PHYEND_DISABLE_Msk   RADIO_SHORTS_PHYEND_DISABLE_Msk
367 #define HAL_RADIO_CLEARPATTERN_CLEARPATTERN_Clear (1UL)
368 
369 /* HAL abstraction of Radio IRQ number */
370 #define HAL_RADIO_IRQn                          RADIO_0_IRQn
371 
372 /* SoC specific NRF_RADIO power-on reset value. Refer to Product Specification,
373  * RADIO Registers section for the documented reset values.
374  *
375  * NOTE: Only implementation used values defined here.
376  *       In the future if MDK or nRFx header include these, use them instead.
377  */
378 #define HAL_RADIO_RESET_VALUE_DFEMODE       0x00000000UL
379 #define HAL_RADIO_RESET_VALUE_CTEINLINECONF 0x00002800UL
380 #define HAL_RADIO_RESET_VALUE_DATAWHITE     0x00890040UL
381 
382 /* HAL abstraction of CCM h/w */
383 #define NRF_CCM                               NRF_CCM00
384 #define NRF_CCM_TASK_CRYPT                    NRF_CCM_TASK_START
385 #define EVENTS_ENDCRYPT                       EVENTS_END
386 #define INPTR                                 IN.PTR
387 #define OUTPTR                                OUT.PTR
388 #define MICSTATUS                             MACSTATUS
389 #define CCM_INTENSET_ENDCRYPT_Msk             CCM_INTENSET_END_Msk
390 #define CCM_INTENCLR_ENDCRYPT_Msk             CCM_INTENCLR_END_Msk
391 #define CCM_MODE_DATARATE_125Kbps             CCM_MODE_DATARATE_125Kbit
392 #define CCM_MODE_DATARATE_500Kbps             CCM_MODE_DATARATE_500Kbit
393 #define CCM_RATEOVERRIDE_RATEOVERRIDE_500Kbps CCM_RATEOVERRIDE_RATEOVERRIDE_500Kbit
394 
hal_radio_reset(void)395 static inline void hal_radio_reset(void)
396 {
397 	/* TODO: Add any required setup for each radio event
398 	 */
399 }
400 
hal_radio_stop(void)401 static inline void hal_radio_stop(void)
402 {
403 	/* TODO: Add any required cleanup of actions taken in hal_radio_reset()
404 	 */
405 }
406 
hal_radio_ram_prio_setup(void)407 static inline void hal_radio_ram_prio_setup(void)
408 {
409 	/* TODO */
410 }
411 
hal_radio_phy_mode_get(uint8_t phy,uint8_t flags)412 static inline uint32_t hal_radio_phy_mode_get(uint8_t phy, uint8_t flags)
413 {
414 	uint32_t mode;
415 
416 	switch (phy) {
417 	case BIT(0):
418 	default:
419 		mode = RADIO_MODE_MODE_Ble_1Mbit;
420 		break;
421 
422 	case BIT(1):
423 		mode = RADIO_MODE_MODE_Ble_2Mbit;
424 		break;
425 
426 #if defined(CONFIG_BT_CTLR_PHY_CODED)
427 	case BIT(2):
428 		if (flags & 0x01) {
429 			mode = RADIO_MODE_MODE_Ble_LR125Kbit;
430 		} else {
431 			mode = RADIO_MODE_MODE_Ble_LR500Kbit;
432 		}
433 		break;
434 #endif /* CONFIG_BT_CTLR_PHY_CODED */
435 	}
436 
437 	return mode;
438 }
439 
hal_radio_tx_power_max_get(void)440 static inline int8_t hal_radio_tx_power_max_get(void)
441 {
442 	return 8; /* +8 dBm */
443 }
444 
hal_radio_tx_power_min_get(void)445 static inline int8_t hal_radio_tx_power_min_get(void)
446 {
447 	return -46; /* -46 dBm */
448 }
449 
hal_radio_tx_power_floor(int8_t tx_power_lvl)450 static inline int8_t hal_radio_tx_power_floor(int8_t tx_power_lvl)
451 {
452 	if (tx_power_lvl >= 8) {
453 		return 8;
454 	}
455 
456 	if (tx_power_lvl >= 7) {
457 		return 7;
458 	}
459 
460 	if (tx_power_lvl >= 6) {
461 		return 6;
462 	}
463 
464 	if (tx_power_lvl >= 5) {
465 		return 5;
466 	}
467 
468 	if (tx_power_lvl >= 4) {
469 		return 4;
470 	}
471 
472 	if (tx_power_lvl >= 3) {
473 		return 3;
474 	}
475 
476 	if (tx_power_lvl >= 2) {
477 		return 2;
478 	}
479 
480 	if (tx_power_lvl >= 1) {
481 		return 1;
482 	}
483 
484 	if (tx_power_lvl >= 0) {
485 		return 0;
486 	}
487 
488 	if (tx_power_lvl >= -1) {
489 		return -1;
490 	}
491 
492 	if (tx_power_lvl >= -2) {
493 		return -2;
494 	}
495 
496 	if (tx_power_lvl >= -3) {
497 		return -3;
498 	}
499 
500 	if (tx_power_lvl >= -4) {
501 		return -4;
502 	}
503 
504 	if (tx_power_lvl >= -5) {
505 		return -5;
506 	}
507 
508 	if (tx_power_lvl >= -6) {
509 		return -6;
510 	}
511 
512 	if (tx_power_lvl >= -7) {
513 		return -7;
514 	}
515 
516 	if (tx_power_lvl >= -8) {
517 		return -8;
518 	}
519 
520 	if (tx_power_lvl >= -9) {
521 		return -9;
522 	}
523 
524 	if (tx_power_lvl >= -10) {
525 		return -10;
526 	}
527 
528 	if (tx_power_lvl >= -12) {
529 		return -12;
530 	}
531 
532 	if (tx_power_lvl >= -14) {
533 		return -14;
534 	}
535 
536 	if (tx_power_lvl >= -16) {
537 		return -16;
538 	}
539 
540 	if (tx_power_lvl >= -20) {
541 		return -20;
542 	}
543 
544 	if (tx_power_lvl >= -26) {
545 		return -26;
546 	}
547 
548 	if (tx_power_lvl >= -40) {
549 		return -40;
550 	}
551 
552 	return -46;
553 }
554 
hal_radio_tx_power_value(int8_t tx_power_lvl)555 static inline uint32_t hal_radio_tx_power_value(int8_t tx_power_lvl)
556 {
557 	if (tx_power_lvl >= 8) {
558 		return RADIO_TXPOWER_TXPOWER_Pos8dBm;
559 	}
560 
561 	if (tx_power_lvl >= 7) {
562 		return RADIO_TXPOWER_TXPOWER_Pos7dBm;
563 	}
564 
565 	if (tx_power_lvl >= 6) {
566 		return RADIO_TXPOWER_TXPOWER_Pos6dBm;
567 	}
568 
569 	if (tx_power_lvl >= 5) {
570 		return RADIO_TXPOWER_TXPOWER_Pos5dBm;
571 	}
572 
573 	if (tx_power_lvl >= 4) {
574 		return RADIO_TXPOWER_TXPOWER_Pos4dBm;
575 	}
576 
577 	if (tx_power_lvl >= 3) {
578 		return RADIO_TXPOWER_TXPOWER_Pos3dBm;
579 	}
580 
581 	if (tx_power_lvl >= 2) {
582 		return RADIO_TXPOWER_TXPOWER_Pos2dBm;
583 	}
584 
585 	if (tx_power_lvl >= 1) {
586 		return RADIO_TXPOWER_TXPOWER_Pos1dBm;
587 	}
588 
589 	if (tx_power_lvl >= 0) {
590 		return RADIO_TXPOWER_TXPOWER_0dBm;
591 	}
592 
593 	if (tx_power_lvl >= -1) {
594 		return RADIO_TXPOWER_TXPOWER_Neg1dBm;
595 	}
596 
597 	if (tx_power_lvl >= -2) {
598 		return RADIO_TXPOWER_TXPOWER_Neg2dBm;
599 	}
600 
601 	if (tx_power_lvl >= -3) {
602 		return RADIO_TXPOWER_TXPOWER_Neg3dBm;
603 	}
604 
605 	if (tx_power_lvl >= -4) {
606 		return RADIO_TXPOWER_TXPOWER_Neg4dBm;
607 	}
608 
609 	if (tx_power_lvl >= -5) {
610 		return RADIO_TXPOWER_TXPOWER_Neg5dBm;
611 	}
612 
613 	if (tx_power_lvl >= -6) {
614 		return RADIO_TXPOWER_TXPOWER_Neg6dBm;
615 	}
616 
617 	if (tx_power_lvl >= -7) {
618 		return RADIO_TXPOWER_TXPOWER_Neg7dBm;
619 	}
620 
621 	if (tx_power_lvl >= -8) {
622 		return RADIO_TXPOWER_TXPOWER_Neg8dBm;
623 	}
624 
625 	if (tx_power_lvl >= -9) {
626 		return RADIO_TXPOWER_TXPOWER_Neg9dBm;
627 	}
628 
629 	if (tx_power_lvl >= -10) {
630 		return RADIO_TXPOWER_TXPOWER_Neg10dBm;
631 	}
632 
633 	if (tx_power_lvl >= -12) {
634 		return RADIO_TXPOWER_TXPOWER_Neg12dBm;
635 	}
636 
637 	if (tx_power_lvl >= -14) {
638 		return RADIO_TXPOWER_TXPOWER_Neg14dBm;
639 	}
640 
641 	if (tx_power_lvl >= -16) {
642 		return RADIO_TXPOWER_TXPOWER_Neg16dBm;
643 	}
644 
645 	if (tx_power_lvl >= -20) {
646 		return RADIO_TXPOWER_TXPOWER_Neg20dBm;
647 	}
648 
649 #if defined(RADIO_TXPOWER_TXPOWER_Neg26dBm)
650 	if (tx_power_lvl >= -26) {
651 		return RADIO_TXPOWER_TXPOWER_Neg26dBm;
652 	}
653 #endif
654 
655 #if defined(RADIO_TXPOWER_TXPOWER_Neg28dBm)
656 	if (tx_power_lvl >= -28) {
657 		return RADIO_TXPOWER_TXPOWER_Neg28dBm;
658 	}
659 #endif
660 
661 	if (tx_power_lvl >= -40) {
662 		return RADIO_TXPOWER_TXPOWER_Neg40dBm;
663 	}
664 
665 	return RADIO_TXPOWER_TXPOWER_Neg46dBm;
666 }
667 
hal_radio_tx_ready_delay_us_get(uint8_t phy,uint8_t flags)668 static inline uint32_t hal_radio_tx_ready_delay_us_get(uint8_t phy, uint8_t flags)
669 {
670 	switch (phy) {
671 	default:
672 	case BIT(0):
673 		return HAL_RADIO_NRF54LX_TXEN_TXIDLE_TX_1M_US;
674 	case BIT(1):
675 		return HAL_RADIO_NRF54LX_TXEN_TXIDLE_TX_2M_US;
676 
677 #if defined(CONFIG_BT_CTLR_PHY_CODED)
678 	case BIT(2):
679 		if (flags & 0x01) {
680 			return HAL_RADIO_NRF54LX_TXEN_TXIDLE_TX_S8_US;
681 		} else {
682 			return HAL_RADIO_NRF54LX_TXEN_TXIDLE_TX_S2_US;
683 		}
684 #endif /* CONFIG_BT_CTLR_PHY_CODED */
685 	}
686 }
687 
hal_radio_rx_ready_delay_us_get(uint8_t phy,uint8_t flags)688 static inline uint32_t hal_radio_rx_ready_delay_us_get(uint8_t phy, uint8_t flags)
689 {
690 	switch (phy) {
691 	default:
692 	case BIT(0):
693 		return HAL_RADIO_NRF54LX_RXEN_RXIDLE_RX_1M_US;
694 	case BIT(1):
695 		return HAL_RADIO_NRF54LX_RXEN_RXIDLE_RX_2M_US;
696 
697 #if defined(CONFIG_BT_CTLR_PHY_CODED)
698 	case BIT(2):
699 		if (flags & 0x01) {
700 			return HAL_RADIO_NRF54LX_RXEN_RXIDLE_RX_S8_US;
701 		} else {
702 			return HAL_RADIO_NRF54LX_RXEN_RXIDLE_RX_S2_US;
703 		}
704 #endif /* CONFIG_BT_CTLR_PHY_CODED */
705 	}
706 }
707 
hal_radio_tx_chain_delay_us_get(uint8_t phy,uint8_t flags)708 static inline uint32_t hal_radio_tx_chain_delay_us_get(uint8_t phy, uint8_t flags)
709 {
710 	ARG_UNUSED(phy);
711 	ARG_UNUSED(flags);
712 	return HAL_RADIO_NRF54LX_TX_CHAIN_DELAY_US;
713 }
714 
hal_radio_rx_chain_delay_us_get(uint8_t phy,uint8_t flags)715 static inline uint32_t hal_radio_rx_chain_delay_us_get(uint8_t phy, uint8_t flags)
716 {
717 	switch (phy) {
718 	default:
719 	case BIT(0):
720 		return HAL_RADIO_NRF54LX_RX_CHAIN_DELAY_1M_US;
721 	case BIT(1):
722 		return HAL_RADIO_NRF54LX_RX_CHAIN_DELAY_2M_US;
723 
724 #if defined(CONFIG_BT_CTLR_PHY_CODED)
725 	case BIT(2):
726 		if (flags & 0x01) {
727 			return HAL_RADIO_NRF54LX_RX_CHAIN_DELAY_S8_US;
728 		} else {
729 			return HAL_RADIO_NRF54LX_RX_CHAIN_DELAY_S2_US;
730 		}
731 #endif /* CONFIG_BT_CTLR_PHY_CODED */
732 	}
733 }
734 
hal_radio_tx_ready_delay_ns_get(uint8_t phy,uint8_t flags)735 static inline uint32_t hal_radio_tx_ready_delay_ns_get(uint8_t phy, uint8_t flags)
736 {
737 	switch (phy) {
738 	default:
739 	case BIT(0):
740 		return HAL_RADIO_NRF54LX_TXEN_TXIDLE_TX_1M_NS;
741 	case BIT(1):
742 		return HAL_RADIO_NRF54LX_TXEN_TXIDLE_TX_2M_NS;
743 
744 #if defined(CONFIG_BT_CTLR_PHY_CODED)
745 	case BIT(2):
746 		if (flags & 0x01) {
747 			return HAL_RADIO_NRF54LX_TXEN_TXIDLE_TX_S8_NS;
748 		} else {
749 			return HAL_RADIO_NRF54LX_TXEN_TXIDLE_TX_S2_NS;
750 		}
751 #endif /* CONFIG_BT_CTLR_PHY_CODED */
752 	}
753 }
754 
hal_radio_rx_ready_delay_ns_get(uint8_t phy,uint8_t flags)755 static inline uint32_t hal_radio_rx_ready_delay_ns_get(uint8_t phy, uint8_t flags)
756 {
757 	switch (phy) {
758 	default:
759 	case BIT(0):
760 		return HAL_RADIO_NRF54LX_RXEN_RXIDLE_RX_1M_NS;
761 	case BIT(1):
762 		return HAL_RADIO_NRF54LX_RXEN_RXIDLE_RX_2M_NS;
763 
764 #if defined(CONFIG_BT_CTLR_PHY_CODED)
765 	case BIT(2):
766 		if (flags & 0x01) {
767 			return HAL_RADIO_NRF54LX_RXEN_RXIDLE_RX_S8_NS;
768 		} else {
769 			return HAL_RADIO_NRF54LX_RXEN_RXIDLE_RX_S2_NS;
770 		}
771 #endif /* CONFIG_BT_CTLR_PHY_CODED */
772 	}
773 }
774 
hal_radio_tx_chain_delay_ns_get(uint8_t phy,uint8_t flags)775 static inline uint32_t hal_radio_tx_chain_delay_ns_get(uint8_t phy, uint8_t flags)
776 {
777 	ARG_UNUSED(phy);
778 	ARG_UNUSED(flags);
779 	return HAL_RADIO_NRF54LX_TX_CHAIN_DELAY_NS;
780 }
781 
hal_radio_rx_chain_delay_ns_get(uint8_t phy,uint8_t flags)782 static inline uint32_t hal_radio_rx_chain_delay_ns_get(uint8_t phy, uint8_t flags)
783 {
784 	switch (phy) {
785 	default:
786 	case BIT(0):
787 		return HAL_RADIO_NRF54LX_RX_CHAIN_DELAY_1M_NS;
788 	case BIT(1):
789 		return HAL_RADIO_NRF54LX_RX_CHAIN_DELAY_2M_NS;
790 
791 #if defined(CONFIG_BT_CTLR_PHY_CODED)
792 	case BIT(2):
793 		if (flags & 0x01) {
794 			return HAL_RADIO_NRF54LX_RX_CHAIN_DELAY_S8_NS;
795 		} else {
796 			return HAL_RADIO_NRF54LX_RX_CHAIN_DELAY_S2_NS;
797 		}
798 #endif /* CONFIG_BT_CTLR_PHY_CODED */
799 	}
800 }
801