📄 args.c
字号:
#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] = "32440001";
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') {
//OMAP730_CONFIG_REGS *pConfigRegs;
S3C2440X_IOPORT_REG *v_IOPRegs;
DWORD count, code, j;
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
//pConfigRegs = OALPAtoUA(OMAP730_CONFIG_REGS_PA);
//code = INREG32(&pConfigRegs->MPU_DIE_ID0);
//code ^= INREG32(&pConfigRegs->MPU_DIE_ID1);
v_IOPRegs = OALPAtoUA(S3C2440X_BASE_REG_PA_IOPORT);
code = v_IOPRegs->GSTATUS1; // read ID:0x32440001
// 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:
//S3C2440X_IOPORT_REG *v_IOPRegs = OALPAtoUA(S3C2440X_BASE_REG_PA_IOPORT);
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 + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -