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