@@ -202,53 +202,66 @@ static void zep_shim_qspi_cpy_to(void *priv, unsigned long addr, const void *src
202202}
203203#endif /* !CONFIG_NRF71_ON_IPC */
204204
205+ struct zep_shim_spinlock {
206+ struct k_spinlock lock ;
207+ k_spinlock_key_t key ;
208+ };
209+
205210static void * zep_shim_spinlock_alloc (void )
206211{
207- struct k_mutex * lock = NULL ;
208-
209- lock = zep_shim_mem_zalloc (sizeof (* lock ));
212+ struct zep_shim_spinlock * slock = NULL ;
210213
211- if (!lock ) {
214+ slock = k_calloc (sizeof (* slock ), sizeof (char ));
215+ if (!slock ) {
212216 LOG_ERR ("%s: Unable to allocate memory for spinlock" , __func__ );
213217 }
214218
215- return lock ;
219+ return slock ;
216220}
217221
218222static void zep_shim_spinlock_free (void * lock )
219223{
220224#if defined(CONFIG_NRF_WIFI_GLOBAL_HEAP )
221225 k_free (lock );
222- #else /* CONFIG_NRF_WIFI_GLOBAL_HEAP */
226+ #else
223227 k_heap_free (& wifi_drv_ctrl_mem_pool , lock );
224- #endif /* CONFIG_NRF_WIFI_GLOBAL_HEAP */
228+ #endif
225229}
226230
227231static void zep_shim_spinlock_init (void * lock )
228232{
229- k_mutex_init (lock );
233+ /* No explicit initialization needed for k_spinlock_t */
234+ ARG_UNUSED (lock );
230235}
231236
232237static void zep_shim_spinlock_take (void * lock )
233238{
234- k_mutex_lock (lock , K_FOREVER );
239+ struct zep_shim_spinlock * slock = (struct zep_shim_spinlock * )lock ;
240+
241+ slock -> key = k_spin_lock (& slock -> lock );
235242}
236243
237244static void zep_shim_spinlock_rel (void * lock )
238245{
239- k_mutex_unlock (lock );
246+ struct zep_shim_spinlock * slock = (struct zep_shim_spinlock * )lock ;
247+
248+ k_spin_unlock (& slock -> lock , slock -> key );
240249}
241250
242251static void zep_shim_spinlock_irq_take (void * lock , unsigned long * flags )
243252{
253+ struct zep_shim_spinlock * slock = (struct zep_shim_spinlock * )lock ;
254+
244255 ARG_UNUSED (flags );
245- k_mutex_lock ( lock , K_FOREVER );
256+ slock -> key = k_spin_lock ( & slock -> lock );
246257}
247258
248259static void zep_shim_spinlock_irq_rel (void * lock , unsigned long * flags )
249260{
261+ struct zep_shim_spinlock * slock = (struct zep_shim_spinlock * )lock ;
262+
250263 ARG_UNUSED (flags );
251- k_mutex_unlock ( lock );
264+ k_spin_unlock ( & slock -> lock , slock -> key );
252265}
253266
254267static int zep_shim_pr_dbg (const char * fmt , va_list args )
0 commit comments