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

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

?? main.c

?? WinCE 5.0的PXA270Bootloader
?? C
?? 第 1 頁 / 共 2 頁
字號:
//
// 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.
//
//------------------------------------------------------------------------------
//
//  File:  main.c
//
//  Core routines for the Intel Mainstone II bootloader.
//
#include <windows.h>
#include <nkintr.h>
#include <bulverde.h>
#include <mainstoneii.h>
#include <oal_memory.h>
#include <pcireg.h>
#include <fmd.h>
#include <xllp_pccardsocket.h>
#include <bsp.h>
#include "loader.h"

//------------------------------------------------------------------------------
// Local variables.
//
static PCI_REG_INFO g_FlashAddress;
static EBOOT_CFG    g_EbootCFG;
static BOOLEAN      g_DownloadImage = TRUE;

//------------------------------------------------------------------------------
// Global variables.
//
DWORD     EdbgDebugZone;
FlashInfo g_FlashInfo;
BSP_ARGS *g_pBSPArgs = (BSP_ARGS *) IMAGE_SHARE_ARGS_UA_START;
EDBG_ADDR g_DeviceAddr; // NOTE: global used so it remains in scope throughout download process
                        // since eboot library code keeps a global pointer to the variable provided.
XLLP_PCCARDSOCKET_T strEbtPCCardSocketHandle;
IMAGE_TYPE g_ImageType;

//------------------------------------------------------------------------------
// Local function prototypes.
//
static BOOL LoadEBootCFG(EBOOT_CFG *EBootCFG);
static BOOL StoreEBootCFG(EBOOT_CFG *EBootCFG);
static void ResetDefaultEBootCFG(EBOOT_CFG *pEbootCFG);

static void SetIP(EBOOT_CFG *pEbootCFG);
static void SetMask(EBOOT_CFG *pEbootCFG);
static void SetBootMe(EBOOT_CFG *pEbootCFG);
static void SetDelay(EBOOT_CFG *pEbootCFG);

BOOL OEMVerifyMemory(DWORD dwStartAddr, DWORD dwLength);

//------------------------------------------------------------------------------
// External function prorotypes.
//
extern void Launch(unsigned int uAddr);


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

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

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

}

//------------------------------------------------------------------------------
//
//  Function:  OEMDebugInit
//
//  Initialize debug serial UART.
//
BOOL OEMDebugInit(void)
{

    // Initialize the flash interface (needed so we can determine which serial
    // port to use for bootloader and OS debug message output).
    //
    if (!FlashInit((UINT32) OALPAtoVA(MAINSTONEII_BASE_PA_BOOT_FLASH, FALSE), MAINSTONEII_SIZE_BOOT_FLASH))
    {
        // Load default bootloader configuration settings.
        //
        EdbgOutputDebugString("ERROR: flash initialization failed - loading bootloader defaults...\r\n");
        ResetDefaultEBootCFG(&g_EbootCFG);
    }
    else
    {
        // Load the bootloader configuration from flash (menu settings).
        //
        LoadEBootCFG(&g_EbootCFG);
    }

    // Initialize the debug UART.
    //
    InitDebugSerial(g_EbootCFG.dwDbgSerPhysAddr);

    // Clear the hex LEDs.
    //
    OEMWriteDebugLED(0, 0);

    // Set up optional bootloader function pointers.
    //
    g_pOEMVerifyMemory = OEMVerifyMemory;

    return(TRUE);

}


//------------------------------------------------------------------------------
//
//  Function:  OEMPlatformInit
//
//  Initialize the Mainstone II platform.
//
BOOL OEMPlatformInit(void)
{
    UINT32 AutoBootDelay = 0;
    BOOLEAN bXIPMode     = TRUE;
    BOOLEAN bCFGChanged  = FALSE;
    SYSTEMTIME SysTime;
    UINT32 StartTime, CurrTime, PrevTime;
    UINT32 Selection;
    UINT32 EthDevice;


    // This table describes the boot order for a given configuration.
    //
    ETH_DEVICE_TYPE BootOrder[] = { ETH_DEVICE_SMSC, ETH_DEVICE_PCMCIA0, ETH_DEVICE_PCMCIA1,    // pEbootCFG->bootDeviceOrder = 0.
                                    ETH_DEVICE_SMSC, ETH_DEVICE_PCMCIA1, ETH_DEVICE_PCMCIA0,    // pEbootCFG->bootDeviceOrder = 1.
                                    ETH_DEVICE_PCMCIA0, ETH_DEVICE_PCMCIA1, ETH_DEVICE_SMSC,    // pEbootCFG->bootDeviceOrder = 2.
                                    ETH_DEVICE_PCMCIA0, ETH_DEVICE_SMSC, ETH_DEVICE_PCMCIA1,    // pEbootCFG->bootDeviceOrder = 3.
                                    ETH_DEVICE_PCMCIA1, ETH_DEVICE_SMSC, ETH_DEVICE_PCMCIA0,    // pEbootCFG->bootDeviceOrder = 4.
                                    ETH_DEVICE_PCMCIA1, ETH_DEVICE_PCMCIA0, ETH_DEVICE_SMSC };  // pEbootCFG->bootDeviceOrder = 5.


    EdbgOutputDebugString("Microsoft Windows CE Ethernet Bootloader %d.%d for the Intel MainstoneII Development Platform Built %s\r\n", \
                          EBOOT_VERSION_MAJOR, EBOOT_VERSION_MINOR, __DATE__);

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

    // Initialize the global XLLP device handle for the PC Card interface.
    //
    memset((void *) &strEbtPCCardSocketHandle, 0, sizeof(XLLP_PCCARDSOCKET_T));
    strEbtPCCardSocketHandle.pstrGpioRegsHandle = (XLLP_GPIO_T *) OALPAtoVA(BULVERDE_BASE_REG_PA_GPIO, FALSE);
    XllpPCCardConfigureGPIOs(&strEbtPCCardSocketHandle);

    // Read the current wall-clock time.
    // NOTE: At reset, the RTC value is set to 1/1/1980 at 0:0:0.
    //
    OEMGetRealTime(&SysTime);

    // User menu code...
    //
    AutoBootDelay = g_EbootCFG.delay;
    if (g_EbootCFG.autoDownloadImage)
    {
        g_DownloadImage = TRUE;
        EdbgOutputDebugString ( "\r\nPress [ENTER] to download now or [SPACE] to cancel.\r\n");
        EdbgOutputDebugString ( "\r\nInitiating image download in %d seconds. ", AutoBootDelay--);
    }
    else
    {
        g_DownloadImage = FALSE;
        EdbgOutputDebugString ( "\r\nPress [ENTER] to launch image stored in flash or [SPACE] to cancel.\r\n");
        EdbgOutputDebugString ( "\r\nInitiating image launch in %d seconds. ", AutoBootDelay--);
    }

    // Get a snapshot of the RTC seconds count.
    //
    StartTime     = OEMEthGetSecs();
    PrevTime      = StartTime;
    CurrTime      = StartTime;
    Selection     = 0;

    // Allow the user an amount of time to halt the auto boot/download process.
    // Count down to 0 before proceeding with default operation.
    //
    while ((CurrTime - StartTime) < g_EbootCFG.delay)
    {
        UINT8 i=0;
        UINT8 j;
        UINT8 x,y,z;

        Selection = OEMReadDebugByte(); 
        if ((Selection == 0x20) || (Selection == 0x0d))
        {
            break;
        }
        CurrTime = OEMEthGetSecs();   
        if (CurrTime > PrevTime)
        {
            PrevTime = CurrTime;
            if (AutoBootDelay < 9)
                i = 11;
            else if (AutoBootDelay < 99)
                i = 12;
            else if (AutoBootDelay < 999)
                i = 13;

            for (j = 0; j < i; j++)
            {
                OEMWriteDebugByte((BYTE)0x08); // print back space
            }
            x = AutoBootDelay / 100;
            y = (AutoBootDelay % 100) / 10;
            z = ((AutoBootDelay % 100) % 10);
            OEMWriteDebugLED(0, ((x << 8) | (y << 4) | (z)));
            EdbgOutputDebugString ( "%d seconds. ", AutoBootDelay--);
        }

    }

    switch (Selection)
    {
    case 0x00: // fall through if nothing typed
    case 0x0d: // user canceled wait
        {
            if (g_EbootCFG.autoDownloadImage)
            {
                EdbgOutputDebugString ( "\r\nStarting auto download ... \r\n");
            }
            else
            {
                EdbgOutputDebugString ( "\r\nLaunching flash image  ... \r\n");
            }
            break;
        }
    case 0x20:
        {
            Selection = 0;
            while (1)
            {
                // Show menu
                EdbgOutputDebugString ( "\r\n\r\nEthernet Boot Loader Configuration:\r\n\r\n");
                EdbgOutputDebugString ( "0) IP address: %s\r\n",inet_ntoa(g_EbootCFG.IP));
                EdbgOutputDebugString ( "1) Subnet mask: %s\r\n", inet_ntoa(g_EbootCFG.subnetMask));
                EdbgOutputDebugString ( "2) Boot delay: %d seconds\r\n", g_EbootCFG.delay);
                EdbgOutputDebugString ( "3) DHCP: %s\r\n", (g_EbootCFG.DHCPEnable == TRUE?"(Enabled)":"(Disabled)"));
                EdbgOutputDebugString ( "4) Reset to factory default configuration\r\n");
                EdbgOutputDebugString ( "5) %s image at startup\r\n", g_EbootCFG.autoDownloadImage?"Download new":"Launch existing flash resident");
                EdbgOutputDebugString ( "6) Boot device order: ");

                switch (g_EbootCFG.bootDeviceOrder)
                {
                case 0:
                    EdbgOutputDebugString ( "SMSC -> PCMCIA0 -> PCMCIA1\r\n");
                    break;
                case 1:
                    EdbgOutputDebugString ( "SMSC -> PCMCIA1 -> PCMCIA0\r\n");
                    break;
                case 2:
                    EdbgOutputDebugString ( "PCMCIA0 -> PCMCIA1 -> SMSC\r\n");
                    break;
                case 3:
                    EdbgOutputDebugString ( "PCMCIA0 -> SMSC -> PCMCIA1\r\n");
                    break;
                case 4:
                    EdbgOutputDebugString ( "PCMCIA1 -> SMSC -> PCMCIA0\r\n");
                    break;
                case 5:
                    EdbgOutputDebugString ( "PCMCIA1 -> PCMCIA0 -> SMSC\r\n");
                    break;
                default:
                    EdbgOutputDebugString ( "SMSC -> PCMCIA0 -> PCMCIA1\r\n");
                    g_EbootCFG.bootDeviceOrder = 0;
                    break;
                }
                EdbgOutputDebugString ( "7) Debug serial port: ");
                switch (g_EbootCFG.dwDbgSerPhysAddr)
                {
                case BULVERDE_BASE_REG_PA_FFUART:
                    EdbgOutputDebugString ( "FFUART\r\n");
                    break;
                case BULVERDE_BASE_REG_PA_BTUART:
                default:
                    EdbgOutputDebugString ( "BTUART\r\n");
                    break;
                }
                EdbgOutputDebugString ( "D) Download image now\r\n");
                EdbgOutputDebugString ( "L) Launch existing flash resident image now\r\n");
                EdbgOutputDebugString ( "\r\n\r\nEnter your selection: ");
                Selection = 0;
                while (! ( ( (Selection >= '0') && (Selection <= '7') ) || 
                           ( (Selection == 'D') || (Selection == 'd') ) || 
                           ( (Selection == 'L') || (Selection == 'l') ) ))
                {
                    Selection = OEMReadDebugByte();
                }
                EdbgOutputDebugString ( "%c\r\n", Selection);
                switch (Selection)
                {
                case '0':
                    SetIP(&g_EbootCFG);
                    bCFGChanged=TRUE;
                    break;
                case '1':
                    SetMask(&g_EbootCFG);
                    bCFGChanged=TRUE;
                    break;
                case '2':
                    SetDelay(&g_EbootCFG);
                    bCFGChanged=TRUE;
                    break;
                case '3':
                    if (g_EbootCFG.DHCPEnable == TRUE)
                        g_EbootCFG.DHCPEnable = FALSE;
                    else
                        g_EbootCFG.DHCPEnable = TRUE;
                    bCFGChanged=TRUE;
                    break;
                case '4':
                    ResetDefaultEBootCFG(&g_EbootCFG);
                    bCFGChanged=TRUE;
                    break;
                case '5':
                    if (g_EbootCFG.autoDownloadImage == TRUE)
                        g_EbootCFG.autoDownloadImage = FALSE;
                    else
                        g_EbootCFG.autoDownloadImage = TRUE;
                    bCFGChanged=TRUE;
                    break;
                case '6':
                    g_EbootCFG.bootDeviceOrder++;
                    if (g_EbootCFG.bootDeviceOrder > 5)
                        g_EbootCFG.bootDeviceOrder = 0;
                    bCFGChanged=TRUE;
                    break;
                case '7':
                    if ((g_EbootCFG.dwDbgSerPhysAddr == 0) || (g_EbootCFG.dwDbgSerPhysAddr == BULVERDE_BASE_REG_PA_BTUART))
                    {
                        g_EbootCFG.dwDbgSerPhysAddr = BULVERDE_BASE_REG_PA_FFUART;
                    }
                    else
                    {
                        g_EbootCFG.dwDbgSerPhysAddr = BULVERDE_BASE_REG_PA_BTUART;
                    }
                    bCFGChanged=TRUE;
                    break;
                case 'D':
                case 'd':
                    if (bCFGChanged == TRUE)
                    {
                        StoreEBootCFG(&g_EbootCFG);
                    }
                    g_DownloadImage = TRUE;
                    goto CONTINUE;
                case 'L':
                case 'l':
                    if (bCFGChanged == TRUE)
                    {
                        StoreEBootCFG(&g_EbootCFG);
                    }
                    g_DownloadImage = FALSE;
                    goto CONTINUE;

                default:
                    break;
                }
            }
        }
    }

  CONTINUE:

    // Provide the chosen debug serial port address to the OS image for debug output messages.
    //
    g_pBSPArgs->dbgSerPhysAddr = g_EbootCFG.dwDbgSerPhysAddr;

    // If we need to download an image, locate and initialize an Ethernet controller.
    //
    if (g_DownloadImage)
    {
        // Try each of the boot devices in the specified order (until one succeeds or they all fail).
        //
        EthDevice = InitSpecifiedEthDevice(&g_pBSPArgs->kitl, BootOrder[(g_EbootCFG.bootDeviceOrder * 3)]);
        if (EthDevice == -1)
        {
            EthDevice = InitSpecifiedEthDevice(&g_pBSPArgs->kitl, BootOrder[(g_EbootCFG.bootDeviceOrder * 3) + 1]);
            if (EthDevice == -1)
            {
                EthDevice = InitSpecifiedEthDevice(&g_pBSPArgs->kitl, BootOrder[(g_EbootCFG.bootDeviceOrder * 3) + 2]);
            }
        }

        // No device was found ... 
        //
        if (EthDevice == -1)
        {
            EdbgOutputDebugString("ERROR: Failed to detect and initialize Ethernet controller.\r\n");
            return(FALSE);
        }

        // Make sure MAC address has been programmed.
        //
        if (!g_pBSPArgs->kitl.mac[0] && !g_pBSPArgs->kitl.mac[1] && !g_pBSPArgs->kitl.mac[2])
        {
            EdbgOutputDebugString("ERROR: Invalid Ethernet address read from Ethernet controller.\n");
            return(FALSE);
        }
        else
        {
            EdbgOutputDebugString("INFO: MAC address: %x-%x-%x-%x-%x-%x\r\n",
                  g_pBSPArgs->kitl.mac[0] & 0x00FF, g_pBSPArgs->kitl.mac[0] >> 8,
                  g_pBSPArgs->kitl.mac[1] & 0x00FF, g_pBSPArgs->kitl.mac[1] >> 8,
                  g_pBSPArgs->kitl.mac[2] & 0x00FF, g_pBSPArgs->kitl.mac[2] >> 8);
        }
    }

    return(TRUE);

}


//------------------------------------------------------------------------------
//
//  Function:  OEMPreDownload
//
//  Pre-download initialization routine.
//
DWORD OEMPreDownload(void)
{
    UINT32 SubnetMask;
    BOOL  fGotJumpImg = FALSE, fGotIP = FALSE;
    UINT32 DHCPLeaseTime = 0;

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
26uuu另类欧美亚洲曰本| 色综合色狠狠综合色| 日韩一区二区精品在线观看| 天堂蜜桃一区二区三区| 日韩视频免费观看高清完整版| 免费高清视频精品| 26uuu久久天堂性欧美| 国产成人精品亚洲午夜麻豆| 中文字幕一区二区三区在线观看| 日本电影亚洲天堂一区| 日韩专区一卡二卡| 久久九九久精品国产免费直播| 成人妖精视频yjsp地址| 一区二区三区在线免费视频| 精品污污网站免费看| 麻豆成人免费电影| 亚洲国产高清aⅴ视频| 日本精品一区二区三区四区的功能| 亚洲国产一二三| 26uuu国产日韩综合| bt7086福利一区国产| 午夜精品福利在线| 国产午夜精品一区二区三区嫩草| 91亚洲精品乱码久久久久久蜜桃 | 国产精品久久久久一区二区三区| 在线观看欧美日本| 激情图片小说一区| 亚洲在线视频免费观看| 欧美xxxx老人做受| 色婷婷综合久久久久中文| 蜜桃视频在线一区| 国产精品免费视频观看| 日韩一区二区三区电影| 91猫先生在线| 久久99国产精品麻豆| 亚洲免费在线视频一区 二区| 6080亚洲精品一区二区| eeuss国产一区二区三区| 久久福利资源站| 亚洲免费视频中文字幕| 久久先锋影音av鲁色资源网| 欧美亚洲禁片免费| 成人午夜视频网站| 精品一区二区国语对白| 亚洲电影视频在线| 国产精品高清亚洲| 国产拍欧美日韩视频二区| 欧美日韩中文字幕一区| 99久久免费精品| 国产夫妻精品视频| 久久99国产精品尤物| 水蜜桃久久夜色精品一区的特点| 亚洲视频图片小说| 日本一二三不卡| 精品久久久久av影院| 91精品中文字幕一区二区三区| 色综合天天综合网天天狠天天| 极品少妇一区二区| 日本午夜精品一区二区三区电影| 亚洲影院久久精品| 亚洲男帅同性gay1069| 中文字幕中文字幕中文字幕亚洲无线| 精品国产乱码久久久久久影片| 欧美精品乱码久久久久久| 色欧美片视频在线观看在线视频| 不卡一卡二卡三乱码免费网站| 国产精品系列在线观看| 国产精选一区二区三区| 国模大尺度一区二区三区| 久久精品噜噜噜成人av农村| 五月婷婷久久丁香| 天堂av在线一区| 日产欧产美韩系列久久99| 日本在线观看不卡视频| 日韩成人精品在线观看| 蜜桃av一区二区三区| 久久精品噜噜噜成人av农村| 美女网站在线免费欧美精品| 免费成人小视频| 精品一区二区在线看| 极品美女销魂一区二区三区免费| 精品亚洲免费视频| 国产一区欧美二区| 成人激情文学综合网| eeuss鲁片一区二区三区在线看| 99久久免费视频.com| 一本到高清视频免费精品| 在线一区二区观看| 欧美精品久久一区| 欧美sm极限捆绑bd| 国产午夜精品一区二区| **网站欧美大片在线观看| 一区二区三区资源| 日本91福利区| 国产电影一区二区三区| 91原创在线视频| 欧美日韩国产中文| 日韩女优av电影在线观看| 国产三级精品视频| 亚洲日本va在线观看| 亚洲444eee在线观看| 经典三级视频一区| av欧美精品.com| 欧美日韩一区精品| 久久久亚洲综合| 中文字幕一区二区日韩精品绯色| 亚洲国产成人porn| 老汉av免费一区二区三区| 久久se这里有精品| 91精品国产高清一区二区三区蜜臀| 欧美老肥妇做.爰bbww视频| 欧美成人bangbros| 中文字幕在线免费不卡| 三级在线观看一区二区| 高清在线成人网| 欧美妇女性影城| 国产三级精品视频| 午夜激情综合网| 成人精品小蝌蚪| 日韩欧美综合在线| 一区二区三区免费看视频| 精品一区二区三区av| 欧美性色综合网| 欧美国产一区视频在线观看| 婷婷一区二区三区| 99久久精品国产精品久久| 日韩精品在线一区| 午夜精品爽啪视频| 本田岬高潮一区二区三区| 欧美一级日韩一级| 伊人夜夜躁av伊人久久| 国模大尺度一区二区三区| 欧美色偷偷大香| 日韩理论片在线| 国产成人免费在线观看不卡| 欧美精品99久久久**| 亚洲蜜臀av乱码久久精品蜜桃| 国产精品自拍毛片| 日韩一区二区不卡| 亚洲午夜精品17c| 99久久精品情趣| 国产免费成人在线视频| 久久激情五月激情| 欧美精品乱人伦久久久久久| 亚洲最大色网站| 91免费看片在线观看| 日本一区二区免费在线观看视频 | 国产成人av电影在线播放| 欧美日韩黄色一区二区| 亚洲日本护士毛茸茸| 国产99久久久国产精品潘金| 日韩欧美黄色影院| 日本午夜精品一区二区三区电影| 在线观看视频91| 一区二区三区精品| 日本高清视频一区二区| 亚洲男女一区二区三区| 99精品国产热久久91蜜凸| 久久久久久久综合狠狠综合| 激情综合色丁香一区二区| 日韩视频一区二区三区在线播放 | 亚洲色图欧洲色图| 国产xxx精品视频大全| 欧美大胆一级视频| 六月婷婷色综合| 日韩欧美国产一区二区在线播放| 日本欧美久久久久免费播放网| 欧美久久久久久蜜桃| 丝袜a∨在线一区二区三区不卡| 欧美日韩一区高清| 日韩av一级电影| 日韩精品一区二区三区老鸭窝 | 精品成人一区二区三区| 韩国三级中文字幕hd久久精品| 日韩欧美你懂的| 欧美色图免费看| 奇米888四色在线精品| 日韩美女视频一区二区在线观看| 久久爱另类一区二区小说| 26uuu精品一区二区三区四区在线| 国产一区二三区好的| 国产区在线观看成人精品| 北岛玲一区二区三区四区| 亚洲欧美日韩国产综合在线 | 欧美一区欧美二区| 蜜桃免费网站一区二区三区| 26uuu亚洲| av一区二区三区黑人| 亚洲国产精品一区二区www| 欧美丰满少妇xxxbbb| 国内精品嫩模私拍在线| 国产精品久久久久久福利一牛影视 | 国产激情一区二区三区| 国产精品网曝门| 欧美亚洲一区二区三区四区| 免费观看30秒视频久久| 国产亚洲欧美在线| 欧美在线视频全部完| 麻豆久久一区二区| 亚洲欧洲av色图|