iBoot/drivers/flash_nand/OAM/EmbeddedIOP/WMROAM.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);
}