args.c
来自「SAMSUNG S3C6410 CPU BSP for winmobile6」· C语言 代码 · 共 104 行
C
104 行
#include <bsp.h>
//------------------------------------------------------------------------------
//
// Function: OALArgsQuery
//
// This function is called from other OAL modules to return boot arguments.
// Boot arguments are typically placed in fixed memory location and they are
// filled by boot loader. In case that boot arguments can't be located
// the function should return NULL. The OAL module then must use default
// values.
//
void* OALArgsQuery(UINT32 type)
{
VOID *pData = NULL;
BSP_ARGS *pArgs=(BSP_ARGS*)IMAGE_SHARE_ARGS_UA_START;
static UCHAR deviceId[16] = "";
static UCHAR UUId[16] = "36410001";
OALMSG(OAL_ARGS&&OAL_FUNC, (L"+OALArgsQuery(%d)\r\n", type));
//RETAILMSG(1, (L"+OALArgsQuery(%d)\r\n", type));
//RETAILMSG(1, (L"args[%x,%x,%x].\r\n", pArgs->header.signature, pArgs->header.oalVersion, pArgs->header.bspVersion));
// Check if there is expected signature
if (
pArgs->header.signature != OAL_ARGS_SIGNATURE ||
pArgs->header.oalVersion != OAL_ARGS_VERSION ||
pArgs->header.bspVersion != BSP_ARGS_VERSION
)
{
RETAILMSG(1, (L"Goto Clean up.\r\n"));
goto cleanUp;
}
// Depending on required args
switch (type) {
case OAL_ARGS_QUERY_UPDATEMODE:
pData = &pArgs->fUpdateMode;
break;
case OAL_ARGS_QUERY_KITL:
pData = &pArgs->kitl;
//RETAILMSG(1,(TEXT("OAL_ARGS_QUERY_KITL\r\n")));
break;
case OAL_ARGS_QUERY_DEVID:
if (deviceId[0] == '\0') {
//#if (CPU_REVISION == EVT2)
// S3C6410_SYSCON_REG *v_SYSCONRegs;
//#endif
DWORD count, code;
int j = 0;
UCHAR d;
//RETAILMSG(1,(TEXT("OAL_ARGS_QUERY_DEVID //00 \r\n")));
// Copy prefix
count = sizeof(BSP_DEVICE_PREFIX) - 1; // BSP_DEVICE_PREFIX= "SMDK2440" defined in bsp_cfg.h
if (count > sizeof(deviceId)/2) count = sizeof(deviceId)/2;
memcpy(deviceId, BSP_DEVICE_PREFIX, count);
//RETAILMSG(1,(TEXT("deviceID= %s \r\n"),*deviceId));
// Create unique part of name from SoC ID
//#if (CPU_REVISION == EVT2)
// v_SYSCONRegs = OALPAtoUA(S3C6410_BASE_REG_PA_SYSCON);
// code = v_SYSCONRegs->GSTATUS1; // read ID:0x32440001
//#else
code = 0x36410001; //v_IOPRegs->GSTATUS1; // read ID:0x32440001
//#endif
// Convert it to hexa number
for (j = 28; j >= 0 && count < sizeof(deviceId) - 1; j -= 4) {
d = (UCHAR)((code >> j) & 0xF);
deviceId[count++] = d < 10 ? '0' + d : 'A' + d - 10;
}
//RETAILMSG(1,(TEXT("deviceID= %s \r\n"),*deviceId));
// End string
while (count < sizeof(deviceId)) deviceId[count++] = '\0';
}
pData = deviceId;
//RETAILMSG(1,(TEXT("deviceID= %s \r\n"),*deviceId));
break;
case OAL_ARGS_QUERY_UUID:
//S3C6410_GPIO_REG *v_IOPRegs = OALPAtoUA(S3C6410_BASE_REG_PA_GPIO);
pData = UUId;
break;
}
cleanUp:
//OALMSG(OAL_ARGS&&OAL_FUNC, (L"-OALArgsQuery(pData = 0x%08x)\r\n", pData));
//RETAILMSG(1, (L"-OALArgsQuery(pData = 0x%08x)\r\n", pData));
return pData;
}
//------------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?