/* * 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 #include #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 */