You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
71 lines
1.8 KiB
71 lines
1.8 KiB
/* |
|
* 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 */
|
|
|