亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? main.c

?? i.Mx31 bootloader(for WinCE6.0)
?? C
?? 第 1 頁 / 共 2 頁
字號(hào):
//
// 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.
//
//------------------------------------------------------------------------------
//
//  Copyright (C) 2004-2007, Freescale Semiconductor, Inc. All Rights Reserved.
//  THIS SOURCE CODE, AND ITS USE AND DISTRIBUTION, IS SUBJECT TO THE TERMS
//  AND CONDITIONS OF THE APPLICABLE LICENSE AGREEMENT
//
//------------------------------------------------------------------------------
//
//  File:  main.c
//
//  Common routines for the bootloader.
//
//-----------------------------------------------------------------------------
#include "bsp.h"
#include <ethdbg.h>
#pragma warning(push)
#pragma warning(disable: 4115)
#include <fmd.h>
#pragma warning(pop)
#include "loader.h"


//-----------------------------------------------------------------------------
// External Functions
extern BOOL NANDLoadIPL(VOID);
extern BOOL NANDLoadNK(VOID);
extern BOOL SDHCLoadNK(VOID);
extern BOOL FlashLoadBootCFG(BYTE *pBootCfg, DWORD cbBootCfgSize);
extern BOOL FlashStoreBootCFG(BYTE *pBootCfg, DWORD cbBootCfgSize);
extern void Launch(unsigned int uAddr);
extern BOOL BLMenu();
extern UINT32 OEMGetMagicNumber();

//-----------------------------------------------------------------------------
// External Variables
extern PCSP_PBC_REGS g_pPBC;


//-----------------------------------------------------------------------------
// Defines


//-----------------------------------------------------------------------------
// Types


//-----------------------------------------------------------------------------
// Global Variables
BSP_ARGS *g_pBSPArgs;
IMAGE_TYPE g_ImageType;
IMAGE_MEMORY g_ImageMemory;

BOOT_CFG   g_BootCFG;
BOOL g_DownloadImage = TRUE;
UCHAR *g_DefaultRamAddress;
BOOL g_bNandBootloader;
BOOL g_bNandExist;
BOOL g_bSDHCBootloader;
BOOL g_bSDHCExist;

// Used to save information about downloaded DIO mage
BOOT_BINDIO_CONTEXT g_BinDIO;


//-----------------------------------------------------------------------------
// Local Variables


//------------------------------------------------------------------------------
// Local Functions
//
BOOL LoadBootCFG(BOOT_CFG *BootCFG);
BOOL StoreBootCFG(BOOT_CFG *BootCFG);
void ResetDefaultBootCFG(BOOT_CFG *pBootCFG);
BOOL OEMVerifyMemory(DWORD dwStartAddr, DWORD dwLength);
BOOL OEMReportError (DWORD dwReason, DWORD dwReserved);
void OEMMultiBINNotify(const PMultiBINInfo pInfo);


//------------------------------------------------------------------------------
//
//  Function:  main
//
//  Bootloader main routine.
//
//  Parameters:
//      None.
//
//  Returns:
//      None.
//
//------------------------------------------------------------------------------
void main(void)
{

    // Common boot loader (blcommon) main routine.
    //
    BootloaderMain();

    // Should never get here.
    //
    SpinForever();

}


//------------------------------------------------------------------------------
//
//  Function:  OEMDebugInit
//
//  This function is the first called by the BLCOMMON framework when a boot 
//  loader starts. This function initializes the debug transport, usually just 
//  initializing the debug serial universal asynchronous receiver-transmitter 
//  (UART).
//
//  Parameters:
//      None.
//
//  Returns:
//      TRUE indicates success. FALSE indicates failure.
//
//------------------------------------------------------------------------------
BOOL OEMDebugInit (void)
{
    OEMInitDebugSerial();
    return TRUE;
}


//------------------------------------------------------------------------------
//
//  Function:  OEMPlatformInit
//
//  This function initializes the platform and is called by the BLCOMMON 
//  framework.
//
//  Parameters:
//      None.
//
//  Returns:
//      TRUE indicates success. FALSE indicates failure.
//------------------------------------------------------------------------------
BOOL OEMPlatformInit (void)
{
    PCSP_CCM_REGS pCCM;
    UINT32 rcsr;

    OEMBootInit ();

    // Get reset status from CCM
    pCCM = (PCSP_CCM_REGS) OALPAtoUA(CSP_BASE_REG_PA_CCM);
    rcsr = INREG32(&pCCM->RCSR);

    // Determine boot mode
    switch(CSP_BITFEXT(rcsr, CCM_RCSR_BTP))
    {
        // BOOT[4:0] configured for NAND boot
        case 0x01:
        case 0x02:
        case 0x03:
        case 0x04:
        case 0x10:
        case 0x11:
        case 0x12:
        case 0x13:
            g_bNandBootloader = TRUE;
            KITLOutputDebugString("INFO:  Bootloader launched from NAND\r\n");
            break;

        // Otherwise assume NOR bootloader
        default:
            KITLOutputDebugString("INFO:  Bootloader launched from NOR\r\n");
            g_bNandBootloader = FALSE;
            break;
    }

    // Check for image reflash flag from RVD
    if (CSP_BITFEXT(rcsr, CCM_RCSR_GPF) == 0xF)
    {        
        KITLOutputDebugString("Reflash request detected!\r\n");

        // Write out the image previously downloaded into SDRAM
        // by RVD
        OEMWriteFlash((DWORD) OALPAtoCA(IMAGE_BOOT_NORDEV_NOR_PA_START), IMAGE_BOOT_NORDEV_NOR_SIZE);

        // EBOOT download is unnecessary since RVD downloaded image via JTAG
        g_DownloadImage = FALSE;
            
        // Jump to OS image
        OEMLaunch(0, 0, (DWORD) OALPAtoCA(IMAGE_BOOT_NKIMAGE_NOR_PA_START), NULL);
    }

    // Initialize the BSP args structure.
    //
    g_pBSPArgs = (BSP_ARGS *) IMAGE_SHARE_ARGS_UA_START;
    if ((g_pBSPArgs->header.signature != OAL_ARGS_SIGNATURE) || 
        (g_pBSPArgs->header.oalVersion != OAL_ARGS_VERSION) || 
        (g_pBSPArgs->header.bspVersion != BSP_ARGS_VERSION))
    {
        memset((LPVOID)g_pBSPArgs, 0, sizeof(BSP_ARGS));
        g_pBSPArgs->header.signature  = OAL_ARGS_SIGNATURE;
        g_pBSPArgs->header.oalVersion = OAL_ARGS_VERSION;
        g_pBSPArgs->header.bspVersion = BSP_ARGS_VERSION;
        g_pBSPArgs->kitl.flags             = (OAL_KITL_FLAGS_ENABLED | OAL_KITL_FLAGS_VMINI);
        g_pBSPArgs->kitl.devLoc.IfcType    = Internal;
        g_pBSPArgs->kitl.devLoc.BusNumber  = 0;
        g_pBSPArgs->kitl.devLoc.LogicalLoc = BSP_BASE_REG_PA_CS8900A_IOBASE;
		g_pBSPArgs->kitl.devLoc.PhysicalLoc = (PVOID)(BSP_BASE_REG_PA_CS8900A_IOBASE);
        g_pBSPArgs->updateMode = FALSE;
    }
    
    // Update global BSP args struct with user switches on ADS board
    OALBspArgsInit(g_pBSPArgs);

    // Attempt to initialize the NAND flash driver
    if (!FMD_Init(NULL, NULL, NULL))
    {
        KITLOutputDebugString("WARNING: OEMPlatformInit: Failed to initialize NAND flash device.\r\n");
        g_bNandExist = FALSE;
    }
    else
    {
        KITLOutputDebugString("INFO: OEMPlatformInit: Initialized NAND flash device.\r\n");
        g_bNandExist = TRUE;
    }

    // Load eboot configuration
    //
    if (!LoadBootCFG(&g_BootCFG)) 
    {

        // Load default bootloader configuration settings.
        KITLOutputDebugString("ERROR: flash initialization failed - loading bootloader defaults...\r\n");
        ResetDefaultBootCFG(&g_BootCFG);
    }

    // Set up optional bootloader function pointers.
    //
    g_pOEMMultiBINNotify = OEMMultiBINNotify;
    g_pOEMVerifyMemory = OEMVerifyMemory;
    g_pOEMReportError = OEMReportError;
        
    return TRUE;
}


//------------------------------------------------------------------------------
//
//  Function:  OEMPreDownload
//
//  This function is called by the BLCOMMON framework prior to download and can
//  be customized to prompt for user feedback, such as obtaining a static IP 
//  address or skipping the download and jumping to a flash-resident run-time 
//  image.
//
//  Parameters:        
//      None.
//
//  Returns:
//      Possible return values for OEMPreDownload:
//      
//      Value               Description 
//      -----               -----------
//      BL_DOWNLOAD = 0     Download the OS image from the host machine. 
//      BL_JUMP = 1         Skip the download and jump to a resident OS image. 
//      BL_ERROR = -1       Image download is unsuccessful. 
//------------------------------------------------------------------------------
DWORD OEMPreDownload(void)
{
    UINT32 rc = (DWORD)BL_ERROR;
    BOOL  fGotJumpImg = FALSE;

    // User menu code...
    //
    if (!BLMenu())
    {
        return rc;
    }

    // Create device name based on Ethernet address (this is how Platform Builder identifies this device).
    //
    OALKitlCreateName(BSP_DEVICE_PREFIX, g_pBSPArgs->kitl.mac, (CHAR *)g_pBSPArgs->deviceId);
    KITLOutputDebugString("INFO: Using device name: '%s'\n", g_pBSPArgs->deviceId);

    fGotJumpImg = GetPreDownloadInfo (&g_BootCFG);
     
    if (!g_DownloadImage || // this gets set in the BLMenu() function
        fGotJumpImg)        // this gets set in EbootInitEtherTransport
    {
        switch(g_BootCFG.autoDownloadImage)
        {
        case BOOT_CFG_AUTODOWNLOAD_NK_NOR:
            rc = BL_JUMP;
            break;

        case BOOT_CFG_AUTODOWNLOAD_NK_NAND:
            if (NANDLoadNK())
            {
                rc = BL_JUMP;
            }
            else
            {
                KITLOutputDebugString("ERROR: Failed to load OS image from NAND.\r\n");
            }
            break;
            
        case BOOT_CFG_AUTODOWNLOAD_IPL_NAND:
            if (NANDLoadIPL())
            {
                rc = BL_JUMP;
            }
            else
            {
                KITLOutputDebugString("ERROR: Failed to load IPL image from NAND.\r\n");
            }
            break;
        }

        // Set the clean boot flag so that OAL will let the kernel know that
        // it needs a clean boot
        //
        // g_pBSPArgs->bCleanBootFlag = TRUE;
    }
    else if (g_DownloadImage)
    {
        rc = BL_DOWNLOAD;
    }

    return(rc);
}


//------------------------------------------------------------------------------
//
//  Function:  OEMLaunch
//
//  This function launches the run-time image. It is the last one called by 
//  the BLCOMMON framework.
//
//  Parameters:        
//      dwImageStart 
//          [in] Starting address of OS image. 
//
//      dwImageLength 
//          [in] Length, in bytes, of the OS image. 
//
//      dwLaunchAddr 
//          [in] First instruction of the OS image.
//
//      pRomHdr 
//          [out] Pointer to the ROM header structure.
//
//  Returns:
//      None.
//------------------------------------------------------------------------------
void OEMLaunch (DWORD dwImageStart, DWORD dwImageLength, DWORD dwLaunchAddr, const ROMHDR *pRomHdr)
{
    UINT32 PhysAddress;

    // Remove-W4: Warning C4100 workaround
    UNREFERENCED_PARAMETER(pRomHdr);

    switch(g_BootCFG.autoDownloadImage)
    {
    case BOOT_CFG_AUTODOWNLOAD_NK_NOR:
        // Set launch address for NOR OS image.  OS executes-in-place from NOR.
        PhysAddress = IMAGE_BOOT_NKIMAGE_NOR_PA_START;
        break;

    case BOOT_CFG_AUTODOWNLOAD_NK_NAND:

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产激情一区二区三区| 日韩一区二区三区观看| 高清成人在线观看| 精品一区二区三区视频| 精品一区二区免费在线观看| 日韩在线一区二区| 日韩经典中文字幕一区| 天天色天天操综合| 日韩不卡一区二区三区| 另类小说综合欧美亚洲| 蜜臀a∨国产成人精品| 免费一级片91| 激情图片小说一区| 国产一本一道久久香蕉| 国产成人精品亚洲午夜麻豆| 国产成a人无v码亚洲福利| av在线播放不卡| 91福利精品视频| 制服丝袜成人动漫| 欧美精品一区二区三区视频| 久久久另类综合| 国产精品天天摸av网| 亚洲久本草在线中文字幕| 亚洲国产欧美日韩另类综合 | 中文字幕一区二| 亚洲欧洲在线观看av| 亚洲精品久久久久久国产精华液| 亚洲午夜久久久久| 蜜臀a∨国产成人精品| 国产成人啪免费观看软件| 91蜜桃免费观看视频| 欧美性受xxxx黑人xyx性爽| 777午夜精品免费视频| 国产亚洲欧美色| 亚洲男帅同性gay1069| 婷婷激情综合网| 国产一区91精品张津瑜| 色呦呦国产精品| 91精品一区二区三区久久久久久| 2017欧美狠狠色| 亚洲精选一二三| 久久不见久久见免费视频7| 成人毛片视频在线观看| 欧美亚洲另类激情小说| 精品国产成人在线影院| 综合亚洲深深色噜噜狠狠网站| 婷婷开心激情综合| 成人午夜看片网址| 欧美日韩精品综合在线| 久久久亚洲国产美女国产盗摄 | 亚洲国产精品久久久男人的天堂| 九九久久精品视频| 在线免费亚洲电影| 精品欧美一区二区久久| 亚洲欧美日韩中文播放| 美女视频一区二区| 91在线观看高清| 欧美电视剧免费观看| 亚洲日本欧美天堂| 精品制服美女丁香| 欧洲一区在线观看| 欧美国产精品专区| 麻豆精品在线视频| 日本精品免费观看高清观看| 久久久精品一品道一区| 日韩中文字幕av电影| 白白色 亚洲乱淫| 日韩美女一区二区三区四区| 亚洲人成网站精品片在线观看| 久久精品久久99精品久久| 欧美视频在线一区二区三区| 欧美国产综合一区二区| 久久av老司机精品网站导航| 欧美在线一区二区| 国产精品乱人伦中文| 精品一区二区三区欧美| 欧美日韩国产在线播放网站| 国产女人18毛片水真多成人如厕 | 国产一区二区在线影院| 欧美情侣在线播放| 亚洲日本韩国一区| 成人午夜激情片| 久久无码av三级| 日本伊人色综合网| 欧洲精品在线观看| 中文字幕一区二区三区四区| 国内精品写真在线观看| 日韩一本二本av| 亚洲午夜久久久久久久久电影院| 91日韩一区二区三区| 欧美国产97人人爽人人喊| 国产综合色视频| 日韩免费观看高清完整版| 免费成人你懂的| 欧美精三区欧美精三区| 亚洲一区二区三区免费视频| 91女神在线视频| 成人免费一区二区三区视频| 成人午夜免费视频| 国产精品理论片在线观看| 国产91综合网| 欧美激情一区不卡| av亚洲产国偷v产偷v自拍| 国产精品灌醉下药二区| 国产精品一级在线| 国产午夜亚洲精品羞羞网站| 国产精品白丝jk白祙喷水网站 | 久久成人综合网| 日韩欧美黄色影院| 狠狠色狠狠色综合| 久久综合视频网| 国产一区二区三区免费看| 久久婷婷色综合| 国产精品原创巨作av| 国产日韩成人精品| 成人免费视频免费观看| 专区另类欧美日韩| 欧美在线免费播放| 五月天视频一区| 精品少妇一区二区三区| 国产成人免费视频精品含羞草妖精| 久久久综合激的五月天| www..com久久爱| 一区二区三区国产精华| 欧美日本国产视频| 久久国产成人午夜av影院| 亚洲精品在线电影| 成人福利视频在线| 亚洲激情自拍偷拍| 91精品国产日韩91久久久久久| 奇米影视一区二区三区小说| 久久久美女毛片| 99精品国产视频| 日韩有码一区二区三区| 精品国产99国产精品| 福利一区二区在线观看| 亚洲激情图片一区| 欧美一区二区三区电影| 成人晚上爱看视频| 亚洲一区在线视频| 精品福利av导航| 99久久免费国产| 无码av中文一区二区三区桃花岛| 欧美mv日韩mv国产网站app| 国产91丝袜在线18| 亚洲香肠在线观看| 久久新电视剧免费观看| 91欧美一区二区| 美女视频黄 久久| 中文字幕av不卡| 欧美日韩国产a| 国产精品一二三区在线| 亚洲综合丁香婷婷六月香| 2014亚洲片线观看视频免费| 色婷婷综合久久久久中文| 精品亚洲免费视频| 一二三区精品福利视频| 26uuu久久天堂性欧美| 在线精品视频一区二区三四| 国产一区二区视频在线| 亚洲国产精品尤物yw在线观看| 久久婷婷色综合| 欧美另类一区二区三区| 成人免费不卡视频| 天天综合天天综合色| 中文字幕欧美激情| 日韩欧美一级二级三级| 97se亚洲国产综合在线| 国产一区二区三区综合| 天天综合天天做天天综合| 综合久久国产九一剧情麻豆| 日韩欧美一二区| 欧美在线视频你懂得| 国产丶欧美丶日本不卡视频| 天堂成人国产精品一区| 亚洲色图在线播放| 26uuu久久综合| 日韩一级二级三级| 欧美日韩高清一区二区不卡| 91网站在线播放| 成人激情文学综合网| 日本不卡123| 洋洋成人永久网站入口| 国产精品盗摄一区二区三区| 久久新电视剧免费观看| 日韩久久精品一区| 欧美日韩三级一区| 色综合一区二区| 国产91精品一区二区麻豆亚洲| 日本一区中文字幕| 亚洲成人av一区| 亚洲欧美日韩在线| 亚洲天堂成人在线观看| 国产人成一区二区三区影院| 日韩一区二区精品在线观看| 欧美二区三区的天堂| 欧美剧情电影在线观看完整版免费励志电影 | xfplay精品久久| 日韩午夜在线播放| 欧美精品xxxxbbbb|