args.c

来自「该BSP是基于PXA270+WINCE的BSP」· C语言 代码 · 共 158 行

C
158
字号
//
// Copyright (c) Microsoft Corporation.  All rights reserved.
//
//
// Use of this source code is subject to the terms of the Microsoft end-user
// license agreement (EULA) under which you licensed this SOFTWARE PRODUCT.
// If you did not accept the terms of the EULA, you are not authorized to use
// this source code. For a copy of the EULA, please see the LICENSE.RTF on your
// install media.
//

#include <bsp.h>

// Pointing to the BSP shared Args area. Must be initialized by calling OALArgsInit().
BSP_ARGS *g_pBSPArgs;

//------------------------------------------------------------------------------
// Called with physical address in IPL
// Called with virtual address in EBOOT
//
VOID OALArgsInit(BSP_ARGS* pArgs)
{
    g_pBSPArgs = pArgs;

    // Check the BSP Args area
    //
    if (pArgs->header.signature  != OAL_ARGS_SIGNATURE ||
        pArgs->header.oalVersion != OAL_ARGS_VERSION   ||
        pArgs->header.bspVersion != BSP_ARGS_VERSION)
    {
      // Zero out the current contents of the structure
      memset(pArgs, 0, sizeof(BSP_ARGS));

      // Setup header
      pArgs->header.signature = OAL_ARGS_SIGNATURE;
      pArgs->header.oalVersion = OAL_ARGS_VERSION;
      pArgs->header.bspVersion = BSP_ARGS_VERSION;

      // Default serial debug port
      pArgs->dbgSerPhysAddr = BULVERDE_BASE_REG_PA_BTUART;
    }

    return;
}


//------------------------------------------------------------------------------
//
//  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 = g_pBSPArgs;

    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
    ) goto cleanUp;

    // Depending on required args
    switch (type) {

#ifdef OAL_ARGS_QUERY_UPDATEMODE
    case OAL_ARGS_QUERY_UPDATEMODE:
        pData = &pArgs->bUpdateMode;
        break;
#endif

    case OAL_ARGS_QUERY_DEVID:
        pData = &pArgs->deviceId;
        break;

    case OAL_ARGS_QUERY_UUID:
        // Implement BSP device specific UUID. If not, the platform base code
        // will generate a UUID from the deviceId and part of a fixed pattern.
        // See platform\common\src\common\ioctl\uuid.c for the implementation.
        // pData = &pArgs->uuid;
        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)(MAINSTONEII_BASE_REG_PA_SMSC_ETHERNET + 0x300);
            pArgs->kitl.devLoc.PhysicalLoc = (PVOID)(MAINSTONEII_BASE_REG_PA_SMSC_ETHERNET);
//---------------------------------
            pArgs->kitl.devLoc.LogicalLoc  = (DWORD)pArgs->kitl.devLoc.PhysicalLoc;
        }

        pData = &pArgs->kitl;
        break;

    case BSP_ARGS_QUERY_DBGSERIAL:
		//---------------------------------------
#if 1
        if ((pArgs->dbgSerPhysAddr != BULVERDE_BASE_REG_PA_BTUART) && (pArgs->dbgSerPhysAddr != BULVERDE_BASE_REG_PA_FFUART))
        {
            pArgs->dbgSerPhysAddr = BULVERDE_BASE_REG_PA_BTUART;
        }
        pData = &pArgs->dbgSerPhysAddr;
#endif
		//---------------------------------------
//		pArgs->dbgSerPhysAddr=NULL;
		//---------------------------------------
        break;

    case BSP_ARGS_QUERY_HIVECLEAN:
        pData = &pArgs->bHiveCleanFlag;
        break;

    case BSP_ARGS_QUERY_CLEANBOOT:
        pData = &pArgs->bCleanBootFlag;
        break;

    case BSP_ARGS_QUERY_FORMATPART:
        pData = &pArgs->bFormatPartFlag;
        break;

    case BSP_ARGS_QUERY_SIGNEDSTATE:
        pData = &pArgs->ImageSignedState;
        break;

    default:
        break;
    }

cleanUp:
    OALMSG(OAL_ARGS&&OAL_FUNC, (L"-OALArgsQuery(pData = 0x%x)\r\n", pData));
    return pData;
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?