148 lines
2.6 KiB
C
148 lines
2.6 KiB
C
#include "WMRConfig.h"
|
|
#include "ANDTypes.h"
|
|
#include "WMROAM.h"
|
|
|
|
#include <stdio.h>
|
|
#include <lib/heap.h>
|
|
#include <sys.h>
|
|
#include <sys/task.h>
|
|
#include <platform.h>
|
|
#include <platform/soc/hwclocks.h>
|
|
#include <platform/timer.h>
|
|
|
|
void *
|
|
WMR_MALLOC(UInt32 nSize)
|
|
{
|
|
void *p;
|
|
|
|
p = memalign(nSize, CPU_CACHELINE_SIZE);
|
|
WMR_MEMSET(p, 0, nSize);
|
|
return p;
|
|
}
|
|
|
|
BOOL32
|
|
OAM_Init(void)
|
|
{
|
|
return TRUE32;
|
|
}
|
|
|
|
void OAM_Beep(UInt32 dwMs)
|
|
{
|
|
}
|
|
|
|
void WMR_FREE(void * ptr, UInt32 size)
|
|
{
|
|
free(ptr);
|
|
}
|
|
|
|
BOOL32 WMR_CHECK_BUFFER(const void * buffer, UInt32 length)
|
|
{
|
|
return (((UInt32) buffer % CPU_CACHELINE_SIZE) == 0) ? TRUE32 : FALSE32;
|
|
}
|
|
|
|
BOOL32
|
|
WMR_FILL_STRUCT(void *pDstBuff, UInt32 *pdwDstBuffSize, const void *pSrcBuff, UInt32 dwSrcBuffSize)
|
|
{
|
|
BOOL32 boolRes = TRUE32;
|
|
|
|
if (!pDstBuff && pdwDstBuffSize)
|
|
{
|
|
// Just return the buffer size
|
|
*pdwDstBuffSize = dwSrcBuffSize;
|
|
}
|
|
else if (!pdwDstBuffSize || (*pdwDstBuffSize < dwSrcBuffSize))
|
|
{
|
|
// Supplied buffer is too small
|
|
UInt32 dwPrintedSize = pdwDstBuffSize ? *pdwDstBuffSize : (UInt32) ~0;
|
|
WMR_PRINT(ERROR,"IOCtl on buffer of size %d with %d bytes of src data!\n",
|
|
dwPrintedSize, dwSrcBuffSize);
|
|
boolRes = FALSE32;
|
|
}
|
|
else
|
|
{
|
|
// We have a valid buffer pointer and buffer size
|
|
WMR_MEMCPY(pDstBuff, pSrcBuff, dwSrcBuffSize);
|
|
*pdwDstBuffSize = dwSrcBuffSize;
|
|
}
|
|
|
|
return boolRes;
|
|
}
|
|
|
|
void _WMR_PRINT(const char * format, ...)
|
|
{
|
|
va_list args;
|
|
|
|
// retrieve the variable arguments
|
|
va_start(args, format);
|
|
|
|
vprintf(format, args);
|
|
|
|
va_end(args);
|
|
}
|
|
|
|
void
|
|
WMR_BEEP(UInt32 milliseconds)
|
|
{
|
|
printf("WMR_BEEP\n");
|
|
}
|
|
|
|
const char * WMR_GETVERSION(void)
|
|
{
|
|
static char version[] = "version string";
|
|
|
|
return version;
|
|
}
|
|
|
|
BOOL32
|
|
WMR_I_CAN_HAZ_DEBUGGER(void)
|
|
{
|
|
return FALSE32;
|
|
}
|
|
|
|
void WMR_WAIT_US(UInt64 microseconds)
|
|
{
|
|
spin(microseconds);
|
|
}
|
|
|
|
void WMR_SLEEP_US(UInt32 microseconds)
|
|
{
|
|
task_sleep(microseconds);
|
|
}
|
|
|
|
void WMR_YIELD(void)
|
|
{
|
|
// Task yield is not available to libraries, so can't build it into Whimory
|
|
task_yield();
|
|
}
|
|
|
|
void
|
|
WMR_DEADLOOP(void)
|
|
{
|
|
volatile int i = 1;
|
|
while (i)
|
|
{
|
|
(void) 0;
|
|
}
|
|
}
|
|
|
|
void
|
|
WMR_CLOCK_RESET_DEVICE(UInt32 device)
|
|
{
|
|
int clock;
|
|
|
|
if( device == 0 )
|
|
{
|
|
clock = CLK_FMI0;
|
|
}
|
|
else if( device == 1 )
|
|
{
|
|
clock = CLK_FMI1;
|
|
}
|
|
else
|
|
{
|
|
panic("invalid WMR_CLOCK_RESET_DEVICE");
|
|
}
|
|
|
|
clock_reset_device(clock);
|
|
}
|