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

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

?? main.c

?? MagicARM2410的BSP包,增加了AD,CAN,PCCARD驅動,串口驅動3個
?? 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一区二区三区免费野_久草精品视频
亚洲国产成人av网| 亚洲成人av中文| 午夜天堂影视香蕉久久| 精品一区二区三区蜜桃| 国产精品亲子乱子伦xxxx裸| 欧洲精品一区二区三区在线观看| 亚洲bdsm女犯bdsm网站| 久久久久国产免费免费| 欧美日韩国产一二三| 国产东北露脸精品视频| 天天影视涩香欲综合网| 日韩三级av在线播放| 欧美一区二区三区免费大片| 日韩国产一区二| www.日韩av| 26uuu精品一区二区三区四区在线 26uuu精品一区二区在线观看 | 91欧美激情一区二区三区成人| 国产精品女主播av| 国产自产v一区二区三区c| 综合久久给合久久狠狠狠97色| 日韩精品电影在线观看| 欧美电影一区二区三区| 视频一区在线播放| 亚洲精品在线三区| 免费成人av在线播放| 色素色在线综合| 亚洲成人先锋电影| 久久精品亚洲精品国产欧美| 色婷婷综合久久久中文一区二区| 中文字幕综合网| 国产一区二区三区香蕉| 中文字幕亚洲精品在线观看| 欧美日本在线播放| 欧美日韩一级片在线观看| 色哟哟在线观看一区二区三区| 大白屁股一区二区视频| 成人18精品视频| 91美女片黄在线观看91美女| 色综合中文字幕国产 | 美国av一区二区| 国产精品不卡一区二区三区| 欧美不卡激情三级在线观看| 在线免费观看日本欧美| 成人av在线播放网址| 国产美女精品人人做人人爽| 日本vs亚洲vs韩国一区三区| 亚洲久草在线视频| 1024成人网色www| 亚洲日本成人在线观看| 《视频一区视频二区| 亚洲欧洲成人av每日更新| 久久精品综合网| 国产欧美va欧美不卡在线| 国产区在线观看成人精品| 精品少妇一区二区三区在线播放| 日韩一级高清毛片| 久久久久成人黄色影片| 国产精品传媒入口麻豆| 蜜臀av性久久久久av蜜臀妖精 | 久久国产精品72免费观看| 日韩天堂在线观看| 99re这里只有精品6| 国产一区二区三区四| 免费av网站大全久久| 国产精品久久夜| 亚洲精品欧美在线| 亚洲一区二区中文在线| 日韩精品欧美精品| 成人一道本在线| 欧美亚洲综合一区| 国产亚洲欧美日韩俺去了| 亚洲人成人一区二区在线观看| 亚洲午夜久久久久久久久电影网| 日本女人一区二区三区| 粉嫩一区二区三区性色av| 欧美性受xxxx黑人xyx性爽| 精品国产免费人成在线观看| 一区二区三区中文在线| 国产精品18久久久久久久久| 欧美日韩精品一区视频| 亚洲国产成人一区二区三区| 日本一区中文字幕| 色欧美88888久久久久久影院| 欧美成人bangbros| 亚洲欧美日韩综合aⅴ视频| 国产精品麻豆久久久| 欧美一级精品在线| 激情综合网天天干| 韩国女主播一区二区三区| 国产激情精品久久久第一区二区 | 亚洲aⅴ怡春院| 成人黄色综合网站| 久久伊人蜜桃av一区二区| 亚洲v中文字幕| 在线视频你懂得一区| 中文字幕一区二区三区在线不卡| 美女在线视频一区| 欧美日韩一区二区三区四区五区 | 午夜久久久影院| 首页综合国产亚洲丝袜| 日韩av中文在线观看| 亚洲综合精品久久| 麻豆国产欧美一区二区三区| 一本色道**综合亚洲精品蜜桃冫| 精品乱码亚洲一区二区不卡| 国产清纯白嫩初高生在线观看91| 激情综合网av| 欧美成人艳星乳罩| 国产毛片精品国产一区二区三区| 国产女同互慰高潮91漫画| 国产一区二区视频在线播放| 久久新电视剧免费观看| 成人看片黄a免费看在线| 亚洲欧美日韩一区| 欧美巨大另类极品videosbest| 秋霞av亚洲一区二区三| 国产亚洲精久久久久久| 色拍拍在线精品视频8848| 三级成人在线视频| 国产亚洲欧美在线| 91久久香蕉国产日韩欧美9色| 亚洲va国产va欧美va观看| 久久欧美中文字幕| 色婷婷综合久色| 国产99久久久国产精品潘金 | 91精品国产入口在线| 国产精品影音先锋| 艳妇臀荡乳欲伦亚洲一区| 日韩精品一区二| 在线视频一区二区三区| 国产一区二区三区免费看| 亚洲一线二线三线久久久| 精品国产成人系列| 欧美精三区欧美精三区| zzijzzij亚洲日本少妇熟睡| 精品亚洲成a人| 午夜av区久久| 亚洲第一久久影院| 亚洲色图视频免费播放| 欧美激情一区不卡| 欧美第一区第二区| 欧美一区二区视频在线观看2020| 99精品欧美一区二区三区小说| 国产美女av一区二区三区| 日产精品久久久久久久性色| 亚洲自拍偷拍av| 一区二区三区精品在线观看| 日韩国产一区二| 亚洲一级二级三级| 亚洲成人手机在线| 性做久久久久久久免费看| 伊人色综合久久天天| 亚洲一区二区三区四区中文字幕| 亚洲精品乱码久久久久久久久| 国产精品美女久久久久高潮| 国产欧美一区二区三区在线看蜜臀| 久久综合九色综合欧美亚洲| 国产三级一区二区| 中文字幕免费不卡| 中文字幕在线不卡视频| 国产三级欧美三级| 玉米视频成人免费看| 午夜视频久久久久久| 日产精品久久久久久久性色| 国产乱人伦精品一区二区在线观看| 国产成人鲁色资源国产91色综| 成人精品免费看| 91免费在线视频观看| 欧美系列在线观看| 精品国产乱子伦一区| 综合在线观看色| 久久国产人妖系列| 日本精品免费观看高清观看| 日韩一区二区三区av| 亚洲色图视频网站| 国产精品中文字幕欧美| 91黄色激情网站| 精品三级在线看| 亚洲欧美一区二区三区孕妇| 国产精品乱码一区二区三区软件| 亚洲欧洲精品一区二区精品久久久| 午夜精品久久久久久久久久| 北岛玲一区二区三区四区| 欧美成人伊人久久综合网| 亚洲美女屁股眼交| 国产凹凸在线观看一区二区| 欧美一区二区三区系列电影| 日韩美女啊v在线免费观看| 国产综合一区二区| 日韩欧美国产系列| 图片区日韩欧美亚洲| 91精彩视频在线观看| 国产精品乱人伦一区二区| 精品夜夜嗨av一区二区三区| 亚洲女人的天堂| 日本中文字幕一区| 欧美婷婷六月丁香综合色| 18欧美乱大交hd1984| 99久久99久久精品免费观看| 日本一区二区久久|