[Feature]add MT2731_MP2_MR2_SVN388 baseline version

Change-Id: Ief04314834b31e27effab435d3ca8ba33b499059
diff --git a/src/bsp/lk/lib/ffs/option/syscall.c b/src/bsp/lk/lib/ffs/option/syscall.c
new file mode 100644
index 0000000..e231c51
--- /dev/null
+++ b/src/bsp/lk/lib/ffs/option/syscall.c
@@ -0,0 +1,151 @@
+/*------------------------------------------------------------------------*/

+/* Sample code of OS dependent controls for FatFs R0.08b                  */

+/* (C)ChaN, 2011                                                          */

+/*------------------------------------------------------------------------*/

+

+#include <stdlib.h>		/* ANSI memory controls */

+#include <malloc.h>		/* ANSI memory controls */

+

+#include "../ff.h"

+

+

+#if _FS_REENTRANT

+/*------------------------------------------------------------------------*/

+/* Create a Synchronization Object

+/*------------------------------------------------------------------------*/

+/* This function is called in f_mount function to create a new

+/  synchronization object, such as semaphore and mutex. When a zero is

+/  returned, the f_mount function fails with FR_INT_ERR.

+*/

+

+int ff_cre_syncobj (	/* TRUE:Function succeeded, FALSE:Could not create due to any error */

+	BYTE vol,			/* Corresponding logical drive being processed */

+	_SYNC_t *sobj		/* Pointer to return the created sync object */

+)

+{

+	int ret;

+

+	*sobj = CreateMutex(NULL, FALSE, NULL);	/* Win32 */

+	ret = (*sobj != INVALID_HANDLE_VALUE);

+

+//	*sobj = SyncObjects[vol];	/* uITRON (give a static sync object) */

+//	ret = 1;					/* The initial value of the semaphore must be 1. */

+

+//	*sobj = OSMutexCreate(0, &err);			/* uC/OS-II */

+//	ret = (err == OS_NO_ERR);

+

+//	*sobj = xSemaphoreCreateMutex();		/* FreeRTOS */

+//	ret = (*sobj != NULL);

+

+	return ret;

+}

+

+

+

+/*------------------------------------------------------------------------*/

+/* Delete a Synchronization Object                                        */

+/*------------------------------------------------------------------------*/

+/* This function is called in f_mount function to delete a synchronization

+/  object that created with ff_cre_syncobj function. When a zero is

+/  returned, the f_mount function fails with FR_INT_ERR.

+*/

+

+int ff_del_syncobj (	/* TRUE:Function succeeded, FALSE:Could not delete due to any error */

+	_SYNC_t sobj		/* Sync object tied to the logical drive to be deleted */

+)

+{

+	BOOL ret;

+

+	ret = CloseHandle(sobj);	/* Win32 */

+

+//	ret = 1;					/* uITRON (nothing to do) */

+

+//	OSMutexDel(sobj, OS_DEL_ALWAYS, &err);	/* uC/OS-II */

+//	ret = (err == OS_NO_ERR);

+

+//	ret = 1;					/* FreeRTOS (nothing to do) */

+

+	return ret;

+}

+

+

+

+/*------------------------------------------------------------------------*/

+/* Request Grant to Access the Volume                                     */

+/*------------------------------------------------------------------------*/

+/* This function is called on entering file functions to lock the volume.

+/  When a zero is returned, the file function fails with FR_TIMEOUT.

+*/

+

+int ff_req_grant (	/* TRUE:Got a grant to access the volume, FALSE:Could not get a grant */

+	_SYNC_t sobj	/* Sync object to wait */

+)

+{

+	int ret;

+

+	ret = (WaitForSingleObject(sobj, _FS_TIMEOUT) == WAIT_OBJECT_0);	/* Win32 */

+

+//	ret = (wai_sem(sobj) == E_OK);	/* uITRON */

+

+//	OSMutexPend(sobj, _FS_TIMEOUT, &err));			/* uC/OS-II */

+//	ret = (err == OS_NO_ERR);

+

+//	ret = (xSemaphoreTake(sobj, _FS_TIMEOUT) == pdTRUE);	/* FreeRTOS */

+

+	return ret;

+}

+

+

+

+/*------------------------------------------------------------------------*/

+/* Release Grant to Access the Volume                                     */

+/*------------------------------------------------------------------------*/

+/* This function is called on leaving file functions to unlock the volume.

+*/

+

+void ff_rel_grant (

+	_SYNC_t sobj	/* Sync object to be signaled */

+)

+{

+	ReleaseMutex(sobj);		/* Win32 */

+

+//	sig_sem(sobj);			/* uITRON */

+

+//	OSMutexPost(sobj);		/* uC/OS-II */

+

+//	xSemaphoreGive(sobj);	/* FreeRTOS */

+

+}

+

+#endif

+

+

+

+

+#if _USE_LFN == 3	/* LFN with a working buffer on the heap */

+/*------------------------------------------------------------------------*/

+/* Allocate a memory block                                                */

+/*------------------------------------------------------------------------*/

+/* If a NULL is returned, the file function fails with FR_NOT_ENOUGH_CORE.

+*/

+

+void* ff_memalloc (	/* Returns pointer to the allocated memory block */

+	UINT size		/* Number of bytes to allocate */

+)

+{

+	return malloc(size);

+}

+

+

+/*------------------------------------------------------------------------*/

+/* Free a memory block                                                    */

+/*------------------------------------------------------------------------*/

+

+void ff_memfree(

+	void* mblock	/* Pointer to the memory block to free */

+)

+{

+	free(mblock);

+}

+

+#endif