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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? main.c

?? 三星2410的BOOTLOADER,WINDOESCE5.0版本
?? C
?? 第 1 頁 / 共 3 頁
字號:
//
// 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.
//
//
//
// 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 <windows.h>
#include <bsp.h>
#include <pcireg.h>
#include <ethdbg.h>
#include <fmd.h>
#include "loader.h"


char *inet_ntoa(DWORD dwIP);
DWORD inet_addr( char *pszDottedD );
BOOL EbootInitEtherTransport (EDBG_ADDR *pEdbgAddr, LPDWORD pdwSubnetMask,
                              BOOL *pfJumpImg,
                              DWORD *pdwDHCPLeaseTime,
                              UCHAR VersionMajor, UCHAR VersionMinor,
                              char *szPlatformString, char *szDeviceName,
                              UCHAR CPUId, DWORD dwBootFlags);
BOOL EbootEtherReadData (DWORD cbData, LPBYTE pbData);
EDBG_OS_CONFIG_DATA *EbootWaitForHostConnect (EDBG_ADDR *pDevAddr, EDBG_ADDR *pHostAddr);
// End   ***************************************


// Globals
//
DWORD EdbgDebugZone;
static BOOLEAN g_bWaitForConnect = TRUE;

IMAGE_TYPE     g_ImageType       = IMAGE_OS_BIN;
BOOT_CFG       g_BootConfig;

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.

// External definitions.
//
extern const BYTE ScreenBitmap[];
extern BOOL g_bSmartMediaExist;



/*
    @func   void | SpinForever | Halts execution (used in error conditions).
    @rdesc  
    @comm    
    @xref   
*/
static void SpinForever(void)
{
    EdbgOutputDebugString("SpinForever...\r\n");

    while(1)
    {
        ;
    }
}


/*
    @func   void | main | Samsung bootloader C routine entry point.
    @rdesc  N/A.
    @comm    
    @xref   
*/
void main(void)
{

    // Clear LEDs.
    //   
    OEMWriteDebugLED(0, 0xF);

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

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


/*
    @func   void | InitDisplay | Initializes the LCD controller and displays a splashscreen image.
    @rdesc  N/A.
    @comm    
    @xref   
*/
static void InitDisplay(void)
{
    volatile S3C2410X_IOPORT_REG *s2410IOP = (S3C2410X_IOPORT_REG *)OALPAtoVA(S3C2410X_BASE_REG_PA_IOPORT, FALSE);
    volatile S3C2410X_LCD_REG    *s2410LCD = (S3C2410X_LCD_REG *)OALPAtoVA(S3C2410X_BASE_REG_PA_LCD, FALSE);

    // Set up the LCD controller registers to display a power-on bitmap image.
    //
    s2410IOP->GPCUP     = 0xFFFFFFFF;
    s2410IOP->GPCCON    = 0xAAAAAAAA;
                                    
    s2410IOP->GPDUP     = 0xFFFFFFFF;
    s2410IOP->GPDCON    = 0xAAAAAAAA; 

    s2410LCD->LCDCON1   =  (6           <<  8) |       /* VCLK = HCLK / ((CLKVAL + 1) * 2) -> About 7 Mhz  */
                           (LCD_MVAL   <<  7)  |       /* 0 : Each Frame                                   */
                           (3           <<  5) |       /* TFT LCD Pannel                                   */
                           (12          <<  1) |       /* 16bpp Mode                                       */
                           (0           <<  0) ;       /* Disable LCD Output                               */

    s2410LCD->LCDCON2   =  (LCD_VBPD        << 24) |   /* VBPD          :   1                              */
                           (LCD_LINEVAL_TFT << 14) |   /* Vertical Size : 320 - 1                          */
                           (LCD_VFPD        <<  6) |   /* VFPD          :   2                              */
                           (LCD_VSPW        <<  0) ;   /* VSPW          :   1                              */

    s2410LCD->LCDCON3   =  (LCD_HBPD        << 19) |   /* HBPD          :   6                              */
                           (LCD_HOZVAL_TFT  <<  8) |   /* HOZVAL_TFT    : 240 - 1                          */
                           (LCD_HFPD        <<  0) ;   /* HFPD          :   2                              */


    s2410LCD->LCDCON4   =  (LCD_MVAL        <<  8) |   /* MVAL          :  13                              */
                           (LCD_HSPW        <<  0) ;   /* HSPW          :   4                              */

    s2410LCD->LCDCON5   =  (0           << 12) |       /* BPP24BL       : LSB valid                        */
                           (1           << 11) |       /* FRM565 MODE   : 5:6:5 Format                     */
                           (0           << 10) |       /* INVVCLK       : VCLK Falling Edge                */
                           (1           <<  9) |       /* INVVLINE      : Inverted Polarity                */
                           (1           <<  8) |       /* INVVFRAME     : Inverted Polarity                */
                           (0           <<  7) |       /* INVVD         : Normal                           */
                           (0           <<  6) |       /* INVVDEN       : Normal                           */
                           (0           <<  5) |       /* INVPWREN      : Normal                           */
                           (0           <<  4) |       /* INVENDLINE    : Normal                           */
                           (0           <<  3) |       /* PWREN         : Disable PWREN                    */
                           (0           <<  2) |       /* ENLEND        : Disable LEND signal              */
                           (0           <<  1) |       /* BSWP          : Swap Disable                     */
                           (1           <<  0) ;       /* HWSWP         : Swap Enable                      */

    s2410LCD->LCDSADDR1 = ((IMAGE_FRAMEBUFFER_DMA_BASE >> 22)     << 21) | 
                          ((M5D(IMAGE_FRAMEBUFFER_DMA_BASE >> 1)) <<  0);

    s2410LCD->LCDSADDR2 = M5D((IMAGE_FRAMEBUFFER_DMA_BASE + (LCD_XSIZE_TFT * LCD_YSIZE_TFT * 2)) >> 1);

    s2410LCD->LCDSADDR3 = (((LCD_XSIZE_TFT - LCD_XSIZE_TFT) / 1) << 11) | (LCD_XSIZE_TFT / 1);        

    s2410LCD->LPCSEL   |= 0x3;

    s2410LCD->TPAL      = 0x0;        
    s2410LCD->LCDCON1  |= 1;

    // Display a bitmap image on the LCD...
    //
    memcpy((void *)IMAGE_FRAMEBUFFER_UA_BASE, ScreenBitmap, LCD_ARRAY_SIZE_TFT_16BIT);

}

static void InitRealTimeClock(void)
{
    SYSTEMTIME defaultTime = {1998,1,0,1,12,0,0,0};
    OEMSetRealTime(&defaultTime);
}

/*
    @func   BOOL | WriteBootConfig | Write bootloader settings to flash.
    @rdesc  TRUE = Success, FALSE = Failure.
    @comm    
    @xref   
*/
static BOOL WriteBootConfig(PBOOT_CFG pBootCfg)
{
    BOOL bResult = FALSE;

    OALMSG(OAL_FUNC, (TEXT("+WriteBootConfig.\r\n")));

    if (!pBootCfg)
    {
        goto CleanUp;
    }

    // First, erase the eboot settings area in flash...
    //
    if (!AM29LV800_EraseFlash(EBOOT_CONFIG_OFFSET, sizeof(BOOT_CFG)))
    {
        OALMSG(OAL_ERROR, (TEXT("ERROR: WriteEbootConfig: Flash erase failed.\r\n")));
        goto CleanUp;
    }

    // Write settings to flash...
    //
    if (!AM29LV800_WriteFlash(EBOOT_CONFIG_OFFSET, (PBYTE)pBootCfg, sizeof(BOOT_CFG)))
    {
        OALMSG(OAL_ERROR, (TEXT("ERROR: WriteEbootConfig: Flash write failed.\r\n")));
        goto CleanUp;
    }

    bResult = TRUE;

CleanUp:
    OALMSG(OAL_FUNC, (TEXT("-WriteBootConfig.\r\n")));
    return(bResult);
}


/*
    @func   void | ResetBootConfig | Reset the bootloader settings to their default values.
    @rdesc  N/A.
    @comm    
    @xref   
*/
static void ResetBootConfig(PBOOT_CFG pBootCfg)
{
    // Default eboot configuration values (leave the MAC address field alone)...
    //
    pBootCfg->Signature        = CONFIG_SIGNATURE;
    pBootCfg->VerMajor         = EBOOT_VERSION_MAJOR;
    pBootCfg->VerMinor         = EBOOT_VERSION_MINOR;
    pBootCfg->BootDelay        = CONFIG_AUTOBOOT_DEFAULT_COUNT;
    pBootCfg->ConfigFlags      = CONFIG_FLAGS_DHCP;
    pBootCfg->IPAddr           = 0;
    pBootCfg->SubnetMask       = 0;
    pBootCfg->LoadDeviceOrder  = 0;

    return;
}


/*
    @func   BOOL | ReadBootConfig | Read bootloader settings from flash.
    @rdesc  TRUE = Success, FALSE = Failure.
    @comm    
    @xref   
*/
static BOOL ReadBootConfig(PBOOT_CFG pBootCfg)
{
    BOOLEAN bResult = FALSE;

    OALMSG(OAL_FUNC, (TEXT("+ReadBootConfig.\r\n")));

    // Valid caller buffer?
    if (!pBootCfg)
    {
        OALMSG(OAL_ERROR, (TEXT("ERROR: Bad caller buffer.\r\n")));
        goto CleanUp;
    }

    // Read settings from flash...
    //
    if (!AM29LV800_ReadFlash(EBOOT_CONFIG_OFFSET, (PBYTE)pBootCfg, sizeof(BOOT_CFG)))
    {
        OALMSG(OAL_ERROR, (TEXT("ERROR: Flash read failed.\r\n")));
        goto CleanUp;
    }

    // Check configuration signature...
    //
    if (pBootCfg->Signature != CONFIG_SIGNATURE)
    {
        OALMSG(OAL_WARN, (TEXT("WARNING: Boot configuration signature invalid - choosing defaults...\r\n")));
        ResetBootConfig(pBootCfg);
        WriteBootConfig(pBootCfg);
    }

    bResult = TRUE;

CleanUp:

    OALMSG(OAL_FUNC, (TEXT("-ReadBootConfig.\r\n")));
    return(TRUE);

}


/*
    @func   void | SetIP | Accepts IP address from user input.
    @rdesc  N/A.
    @comm    
    @xref   
*/

static void SetIP(PBOOT_CFG pBootCfg)
{
    CHAR   szDottedD[16];   // The string used to collect the dotted decimal IP address.
    USHORT cwNumChars = 0;
    USHORT InChar = 0;

    EdbgOutputDebugString("\r\nEnter new IP address: ");

    while(!((InChar == 0x0d) || (InChar == 0x0a)))
    {
        InChar = OEMReadDebugByte();
        if (InChar != OEM_DEBUG_COM_ERROR && InChar != OEM_DEBUG_READ_NODATA) 
        {
            // If it's a number or a period, add it to the string.
            //
            if (InChar == '.' || (InChar >= '0' && InChar <= '9')) 
            {
                if (cwNumChars < 16) 
                {
                    szDottedD[cwNumChars++] = (char)InChar;
                    OEMWriteDebugByte((BYTE)InChar);
                }
            }
            // If it's a backspace, back up.
            //
            else if (InChar == 8) 
            {
                if (cwNumChars > 0) 
                {
                    cwNumChars--;
                    OEMWriteDebugByte((BYTE)InChar);
                }
            }
        }
    }

    // If it's a carriage return with an empty string, don't change anything.
    //
    if (cwNumChars) 
    {
        szDottedD[cwNumChars] = '\0';
        pBootCfg->IPAddr = inet_addr(szDottedD);
    }
}


/*
    @func   void | SetMask | Accepts subnet mask from user input.
    @rdesc  N/A.
    @comm    
    @xref   
*/
static void SetMask(PBOOT_CFG pBootCfg)
{
    CHAR szDottedD[16]; // The string used to collect the dotted masks.
    USHORT cwNumChars = 0;
    USHORT InChar = 0;

    EdbgOutputDebugString("\r\nEnter new subnet mask: ");

    while(!((InChar == 0x0d) || (InChar == 0x0a)))
    {
        InChar = OEMReadDebugByte();
        if (InChar != OEM_DEBUG_COM_ERROR && InChar != OEM_DEBUG_READ_NODATA) 
        {
            // If it's a number or a period, add it to the string.
            //
            if (InChar == '.' || (InChar >= '0' && InChar <= '9')) 
            {
                if (cwNumChars < 16) 
                {
                    szDottedD[cwNumChars++] = (char)InChar;
                    OEMWriteDebugByte((BYTE)InChar);
                }
            }
            // If it's a backspace, back up.
            //
            else if (InChar == 8) 
            {
                if (cwNumChars > 0) 
                {
                    cwNumChars--;
                    OEMWriteDebugByte((BYTE)InChar);
                }
            }
        }
    }

    // If it's a carriage return with an empty string, don't change anything.
    //
    if (cwNumChars) 
    {
        szDottedD[cwNumChars] = '\0';
        pBootCfg->SubnetMask = inet_addr(szDottedD);
    }
}


/*
    @func   void | SetDelay | Accepts an autoboot delay value from user input.
    @rdesc  N/A.
    @comm    
    @xref   
*/
static void SetDelay(PBOOT_CFG pBootCfg)
{
    CHAR szCount[16];
    USHORT cwNumChars = 0;
    USHORT InChar = 0;

    EdbgOutputDebugString("\r\nEnter maximum number of seconds to delay [1-255]: ");

    while(!((InChar == 0x0d) || (InChar == 0x0a)))
    {
        InChar = OEMReadDebugByte();
        if (InChar != OEM_DEBUG_COM_ERROR && InChar != OEM_DEBUG_READ_NODATA) 
        {
            // If it's a number or a period, add it to the string.
            //
            if ((InChar >= '0' && InChar <= '9')) 
            {
                if (cwNumChars < 16) 
                {
                    szCount[cwNumChars++] = (char)InChar;
                    OEMWriteDebugByte((BYTE)InChar);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品不卡在线视频| 一本大道久久a久久综合| 在线一区二区三区| 国产农村妇女精品| 成人免费不卡视频| 久久众筹精品私拍模特| 久久久一区二区| 国产福利视频一区二区三区| 精品国产sm最大网站| 国产一区中文字幕| 26uuuu精品一区二区| 日韩成人av影视| 日韩一区二区免费在线电影 | 午夜欧美一区二区三区在线播放| 在线亚洲一区观看| 亚洲在线成人精品| 91在线无精精品入口| 一区二区三区四区乱视频| 日本高清视频一区二区| 日本欧美一区二区| 精品国产乱码久久久久久1区2区 | 99re这里只有精品6| 亚洲你懂的在线视频| 91麻豆精品在线观看| 亚洲人123区| 51午夜精品国产| 日韩av不卡在线观看| 色哟哟一区二区三区| 青青草国产精品97视觉盛宴| 日韩欧美久久一区| av高清不卡在线| 亚洲精品成人精品456| 欧美影院一区二区| 国产一区二区影院| 中文字幕的久久| 欧美男人的天堂一二区| 麻豆精品一区二区三区| 精品国产亚洲一区二区三区在线观看 | 日韩欧美一级精品久久| 成人app下载| 午夜视频一区在线观看| 国产欧美一区二区三区在线老狼| 不卡av在线免费观看| 亚洲一区二三区| 国产午夜亚洲精品不卡| 色哟哟日韩精品| 亚洲激情校园春色| 欧美大白屁股肥臀xxxxxx| 成人深夜视频在线观看| 蜜桃视频在线观看一区| 亚洲国产成人午夜在线一区| 91小视频在线观看| 国产高清成人在线| 亚洲午夜电影网| 中文字幕一区二区5566日韩| 欧美精品日韩一本| 国产精品自拍三区| 亚洲成人av电影| 中文字幕不卡一区| 国产亚洲一区字幕| 91精品国产综合久久久久久久| 99久久国产综合色|国产精品| 日韩影院精彩在线| 亚洲免费高清视频在线| 欧美国产一区在线| 日韩欧美不卡一区| 91麻豆精品国产91久久久久久久久| 国产成人精品午夜视频免费| 午夜精品久久久久久久99樱桃| 亚洲图片你懂的| 国产亚洲一二三区| 久久人人超碰精品| 日韩女同互慰一区二区| 欧美在线视频你懂得| 色欧美88888久久久久久影院| 国产精品69毛片高清亚洲| 麻豆精品国产91久久久久久| 亚洲自拍偷拍欧美| 中文字幕一区二区三区在线观看 | 成人黄色电影在线| 久久99国产精品成人| 免费成人小视频| 亚洲大片在线观看| 中文字幕一区av| 国产精品久久久久久久久搜平片 | 精品一区二区三区免费视频| 婷婷丁香久久五月婷婷| 一区二区视频在线| 亚洲乱码国产乱码精品精小说| 久久久久久一级片| 欧美电影免费观看完整版| 精品福利在线导航| 日韩精品一区二区三区视频播放| 欧美成人一级视频| 欧美日本在线播放| 欧美日韩国产一二三| 色94色欧美sute亚洲线路二| 一本一本大道香蕉久在线精品| 国产一区二区导航在线播放| 久久成人麻豆午夜电影| 亚洲激情在线播放| 日韩成人伦理电影在线观看| 樱花影视一区二区| 亚洲国产成人tv| 午夜精品一区二区三区电影天堂| 看电影不卡的网站| 久久精品国内一区二区三区| 日韩国产高清在线| 久久66热re国产| 国产精品91一区二区| 日本精品一区二区三区高清| 91成人免费网站| 日韩精品最新网址| 国产午夜亚洲精品理论片色戒| 久久综合九色综合97婷婷女人| 国产精品视频观看| 亚洲女同ⅹxx女同tv| 亚洲电影第三页| 美女视频网站黄色亚洲| 国产剧情在线观看一区二区| 成人小视频在线| 欧美日韩精品综合在线| 日韩欧美不卡在线观看视频| 久久精品亚洲乱码伦伦中文 | 国产婷婷色一区二区三区在线| 亚洲欧洲无码一区二区三区| 一区二区三区四区视频精品免费| 一区二区三区电影在线播| 狠狠色狠狠色综合系列| 成人18视频日本| 欧美视频一区二区三区四区 | 青青草成人在线观看| 99久久夜色精品国产网站| 欧美午夜精品久久久久久超碰| 亚洲精品一区二区三区精华液| 国产精品视频九色porn| 一区二区三区不卡视频| 成人听书哪个软件好| 欧美亚洲一区三区| 欧美激情一区二区三区| 午夜不卡av免费| 一本色道久久综合亚洲aⅴ蜜桃| 欧美高清视频不卡网| 国产亚洲制服色| 奇米影视一区二区三区| 麻豆精品精品国产自在97香蕉| 欧美色视频一区| 久久麻豆一区二区| 久久国产精品72免费观看| 一本久久精品一区二区| 欧美国产精品一区二区| 免费日本视频一区| 99久久综合国产精品| 日韩欧美国产午夜精品| 一区二区三区视频在线看| jlzzjlzz国产精品久久| 精品99一区二区三区| 免费视频最近日韩| 在线观看国产精品网站| 中文字幕人成不卡一区| 国产裸体歌舞团一区二区| 欧美图区在线视频| 亚洲午夜精品久久久久久久久| 床上的激情91.| 国产精品免费久久| 久久99精品国产麻豆婷婷| 欧美一区二区三区男人的天堂| 一区二区三区 在线观看视频| 国产精品伊人色| 精品国产一区二区三区久久影院| 亚洲国产精品久久人人爱| 欧美日韩性生活| 亚洲免费观看视频| 欧美日韩一区小说| 一区二区三区免费| 欧美性色欧美a在线播放| 最新热久久免费视频| 九九视频精品免费| 国产亚洲欧洲997久久综合 | 欧美精品一区二区久久婷婷| 亚洲6080在线| 国产精品夜夜爽| 日韩一区二区在线播放| 午夜久久电影网| 欧美老肥妇做.爰bbww| 久久天天做天天爱综合色| 久久99久久99| 欧美不卡一区二区| 国产一区不卡在线| 日韩欧美国产三级| va亚洲va日韩不卡在线观看| 国产精品久久久久毛片软件| 在线观看视频一区| 亚洲网友自拍偷拍| 欧美α欧美αv大片| 精品一区二区三区免费毛片爱| 中文久久乱码一区二区| 99re这里都是精品| 午夜国产精品一区| 精品国产一二三|