| /* |
| * OS Dependent Functions for FatFs |
| * |
| * Copyright (c) 2023 Husqvarna AB |
| * |
| * SPDX-License-Identifier: Apache-2.0 |
| */ |
| /* The file is based on template file by (C)ChaN, 2022, as |
| * available from FAT FS module source: |
| * https://github.com/zephyrproject-rtos/fatfs/blob/master/option/ffsystem.c |
| */ |
| |
| #include <zephyr/kernel.h> |
| |
| #include <ff.h> |
| |
| #if FF_USE_LFN == 3 /* Dynamic memory allocation */ |
| /* Allocate a memory block */ |
| void *ff_memalloc(UINT msize) |
| { |
| return k_malloc(msize); |
| } |
| |
| /* Free a memory block */ |
| void ff_memfree(void *mblock) |
| { |
| k_free(mblock); |
| } |
| #endif /* FF_USE_LFN == 3 */ |
| |
| #if FF_FS_REENTRANT /* Mutual exclusion */ |
| /* Table of Zephyr mutex. One for each volume and an extra one for the ff system. |
| * See also the template file used as reference. Link is available in the header of this file. |
| */ |
| static struct k_mutex fs_reentrant_mutex[FF_VOLUMES + 1]; |
| |
| /* Create a Mutex |
| * Mutex ID vol: Volume mutex (0 to FF_VOLUMES - 1) or system mutex (FF_VOLUMES) |
| * Returns 1: Succeeded or 0: Could not create the mutex |
| */ |
| int ff_mutex_create(int vol) |
| { |
| return (int)(k_mutex_init(&fs_reentrant_mutex[vol]) == 0); |
| } |
| |
| /* Delete a Mutex |
| * Mutex ID vol: Volume mutex (0 to FF_VOLUMES - 1) or system mutex (FF_VOLUMES) |
| */ |
| void ff_mutex_delete(int vol) |
| { |
| /* (nothing to do) */ |
| (void)vol; |
| } |
| |
| /* Request Grant to Access the Volume |
| * Mutex ID vol: Volume mutex (0 to FF_VOLUMES - 1) or system mutex (FF_VOLUMES) |
| * Returns 1: Succeeded or 0: Timeout |
| */ |
| int ff_mutex_take(int vol) |
| { |
| return (int)(k_mutex_lock(&fs_reentrant_mutex[vol], FF_FS_TIMEOUT) == 0); |
| } |
| |
| /* Release Grant to Access the Volume |
| * Mutex ID vol: Volume mutex (0 to FF_VOLUMES - 1) or system mutex (FF_VOLUMES) |
| */ |
| void ff_mutex_give(int vol) |
| { |
| k_mutex_unlock(&fs_reentrant_mutex[vol]); |
| } |
| #endif /* FF_FS_REENTRANT */ |