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

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

?? main.c

?? i.Mx31 bootloader(for WinCE6.0)
?? C
?? 第 1 頁(yè) / 共 2 頁(yè)
字號(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:

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲一本大道在线| 欧美精三区欧美精三区| 国产福利精品导航| 美腿丝袜亚洲综合| 日韩av在线播放中文字幕| 亚洲成人在线网站| 亚洲国产精品自拍| 香蕉乱码成人久久天堂爱免费| 一区二区三区国产| 亚洲国产精品久久人人爱| 亚洲精品国产精华液| 亚洲精品中文在线| 亚洲一区二区影院| 日韩国产一二三区| 男男成人高潮片免费网站| 美腿丝袜在线亚洲一区| 久久99国产乱子伦精品免费| 韩国成人福利片在线播放| 国产一二三精品| 丁香婷婷综合激情五月色| 波多野结衣在线aⅴ中文字幕不卡| jiyouzz国产精品久久| 一本色道久久加勒比精品 | 成人免费av资源| 不卡欧美aaaaa| 99久久99久久精品国产片果冻 | 欧美一区二区精美| 精品粉嫩超白一线天av| 国产日韩亚洲欧美综合| 国产精品电影一区二区| 午夜精品久久久久久久99樱桃| 免费观看成人鲁鲁鲁鲁鲁视频| 国产自产视频一区二区三区| av电影在线观看一区| 欧美性大战久久| 欧美哺乳videos| 国产精品第一页第二页第三页| 亚洲国产你懂的| 精品一区二区三区免费视频| 成人丝袜18视频在线观看| 在线观看日韩国产| 亚洲精品一区二区三区精华液 | 久久综合国产精品| 国产精品成人免费精品自在线观看| 亚洲另类在线一区| 青娱乐精品在线视频| 国产xxx精品视频大全| 在线亚洲+欧美+日本专区| 精品国产乱码久久久久久久| 亚洲丝袜精品丝袜在线| 人人超碰91尤物精品国产| 成人一区在线观看| 欧美精品v国产精品v日韩精品 | 日韩午夜三级在线| 中文字幕在线观看一区二区| 国产在线观看一区二区| 午夜精品免费在线| 国产福利一区在线| 在线免费一区三区| 久久久国产精华| 日韩精品成人一区二区三区| 成人激情免费电影网址| 欧美丰满少妇xxxxx高潮对白| 欧美国产国产综合| 日韩经典中文字幕一区| 北条麻妃国产九九精品视频| 精品国产一区a| 亚洲图片欧美视频| 成人免费电影视频| www亚洲一区| 日韩激情av在线| 色av成人天堂桃色av| 久久久亚洲精品一区二区三区 | 国产白丝精品91爽爽久久 | 亚洲国产成人tv| av在线不卡免费看| 久久精品视频一区二区| 日韩高清一区在线| 在线视频你懂得一区| 国产欧美一区二区精品性| 人人精品人人爱| 欧美丝袜丝交足nylons图片| 国产精品乱码一区二三区小蝌蚪| 美国三级日本三级久久99| 日本精品视频一区二区三区| 国产精品久久久久久久久动漫| 另类小说综合欧美亚洲| 欧美男同性恋视频网站| 亚洲精品成人精品456| 成人av电影在线观看| 久久嫩草精品久久久久| 日韩成人精品视频| 欧美日韩欧美一区二区| 亚洲一区在线看| 色偷偷久久一区二区三区| 国产精品卡一卡二卡三| 高清国产一区二区| 国产亚洲短视频| 国产美女久久久久| 国产日韩综合av| 国产成人小视频| 久久亚洲一区二区三区四区| 精品亚洲国产成人av制服丝袜 | 中文字幕精品一区| 国产精品影视网| 久久精品视频免费| 国产精品亚洲视频| 国产欧美视频在线观看| 国产高清无密码一区二区三区| 久久噜噜亚洲综合| 国产成人99久久亚洲综合精品| 精品粉嫩超白一线天av| 国产自产2019最新不卡| 久久嫩草精品久久久精品| 国产一区二区女| 欧美激情一二三区| 成人av动漫网站| 一二三四社区欧美黄| 欧美视频在线不卡| 天堂午夜影视日韩欧美一区二区| 51久久夜色精品国产麻豆| 青青国产91久久久久久| 欧美大肚乱孕交hd孕妇| 国产精品66部| 亚洲欧洲成人av每日更新| 一本一本大道香蕉久在线精品| 亚洲成av人片一区二区| 日韩一区二区不卡| 国产69精品久久久久777| 欧美国产精品专区| 91成人网在线| 久久精品噜噜噜成人av农村| 久久久精品日韩欧美| 成人av网在线| 天天免费综合色| 国产欧美日本一区视频| 一本色道久久综合狠狠躁的推荐| 午夜精品福利久久久| 日韩欧美在线综合网| 国产成人a级片| 亚洲自拍欧美精品| 日韩美女主播在线视频一区二区三区 | 亚洲欧洲韩国日本视频| 欧美三区免费完整视频在线观看| 免费av网站大全久久| 久久精品一区二区三区四区| 99精品视频中文字幕| 日韩精品亚洲一区二区三区免费| 欧美精品一区二区三区蜜臀| www.亚洲色图| 蜜桃视频一区二区| 国产精品麻豆欧美日韩ww| 在线电影一区二区三区| 国产乱码精品一品二品| 一区二区三区视频在线看| 日韩丝袜情趣美女图片| 成人97人人超碰人人99| 亚洲18色成人| 国产偷国产偷亚洲高清人白洁| 在线一区二区三区四区| 国产另类ts人妖一区二区| 亚洲与欧洲av电影| 亚洲国产精品ⅴa在线观看| 欧美日韩mp4| 国产成人精品在线看| 亚洲成av人片观看| 亚洲欧美在线aaa| 欧美一区二区三区思思人| 91一区二区在线| 国产乱码精品一区二区三| 亚洲妇女屁股眼交7| 国产精品丝袜在线| 亚洲精品一区二区三区在线观看 | 精品欧美乱码久久久久久| 色综合激情五月| 国产高清精品在线| 麻豆成人久久精品二区三区小说| 亚洲激情图片一区| 欧美极品aⅴ影院| 26uuu另类欧美亚洲曰本| 国产欧美一区二区精品秋霞影院| 欧美一级在线免费| 色菇凉天天综合网| 一本到高清视频免费精品| 国产大陆精品国产| 黑人巨大精品欧美黑白配亚洲| 亚洲五月六月丁香激情| 中文字幕日本不卡| 久久久蜜桃精品| 欧美成人伊人久久综合网| 欧美色图12p| 色吊一区二区三区| 91亚洲国产成人精品一区二三 | 制服丝袜中文字幕一区| 色就色 综合激情| 99精品国产热久久91蜜凸| 成人美女在线视频| 波多野结衣亚洲| thepron国产精品| www.欧美亚洲|