📄 args.c
字号:
// Copyright (c) David Vescovi. All rights reserved.
// Part of Project DrumStix
// Windows Embedded Developers Interest Group (WE-DIG) community project.
// http://www.we-dig.org
// Copyright (c) Microsoft Corporation. All rights reserved.
//------------------------------------------------------------------------------
//
// File: args.c
//
// This file implements boolloader arguments query.
//
//------------------------------------------------------------------------------
#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.
//
static UINT8 g_uuid[16];
VOID* OALArgsQuery(UINT32 type)
{
VOID *pData = NULL;
BSP_ARGS *pArgs = (BSP_ARGS *)IMAGE_SHARE_ARGS_UA_START;
OALMSG(OAL_ARGS&&OAL_FUNC, (L"+OALArgsQuery(%d)\r\n", type));
// 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
)
{
loop:
OALMSG(OAL_ARGS&&OAL_FUNC, (L"Invalid Args signature\r\n"));
OALMSG(1, (L"Mismatched bootloader/BSP version!\r\n"));
goto loop;
}
// Depending on required args
switch (type) {
case OAL_ARGS_QUERY_DEVID:
pData = &pArgs->deviceId;
break;
case OAL_ARGS_QUERY_KITL:
pArgs->kitl.flags |= (OAL_KITL_FLAGS_ENABLED | OAL_KITL_FLAGS_VMINI);
// Has the bootloader provided a non-zero IP address and subnet mask?
// If not, use DHCP to obtain this information.
//
if ((pArgs->kitl.ipAddress == 0) || (pArgs->kitl.ipMask == 0))
{
pArgs->kitl.flags |= OAL_KITL_FLAGS_DHCP;
}
// Has the bootloader provided information about which NIC it was using?
// If not, choose the LAN91C111 as the default.
//
if (pArgs->kitl.devLoc.LogicalLoc == 0)
{
pArgs->kitl.devLoc.IfcType = Internal;
pArgs->kitl.devLoc.BusNumber = 0;
pArgs->kitl.devLoc.PhysicalLoc = (PVOID)(SMSC_ETH1_PA_BASE_REG + 0x300);
pArgs->kitl.devLoc.LogicalLoc = (DWORD)pArgs->kitl.devLoc.PhysicalLoc;
}
pData = &pArgs->kitl;
break;
case OAL_ARGS_QUERY_UUID:
// TBD: make it unique .. its not now
// read Flash serial number and OEM IDs
pData = g_uuid;
break;
case BSP_ARGS_QUERY_DBGSERIAL:
if ((pArgs->dbgSerPhysAddr != PXA255_BASE_REG_PA_FFUART) &&
(pArgs->dbgSerPhysAddr != PXA255_BASE_REG_PA_STUART) &&
(pArgs->dbgSerPhysAddr != PXA255_BASE_REG_PA_BTUART))
{
pArgs->dbgSerPhysAddr = PXA255_BASE_REG_PA_FFUART;
}
pData = &pArgs->dbgSerPhysAddr;
break;
case BSP_ARGS_QUERY_HARDWARE:
pData = &pArgs->platformHardware;
break;
case BSP_ARGS_QUERY_BOOTLOADERVER:
pData = &pArgs->bootloaderVersion;
break;
case BSP_ARGS_QUERY_BOOTFLAGS:
pData = &pArgs->bootFlags;
break;
}
//cleanUp:
OALMSG(OAL_ARGS&&OAL_FUNC, (L"-OALArgsQuery(pData = 0x%08x)\r\n", pData));
return pData;
}
//------------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -