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

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

?? ether.c

?? WinCE5.0BSP for Renesas SH7770
?? C
字號:
//
//  Copyright(C) Renesas Technology Corp. 2005. All rights reserved.
//
//  Ethernet Boot Loader for ITS-DS7
//
//  FILE      : ether.c
//  CREATED   : 2005.08.01
//  MODIFIED  : 
//  AUTHOR    : Renesas Technology Corp.
//  HARDWARE  : RENESAS ITS-DS7
//  HISTORY   : 
//              2005.08.01
//              - Created release code.
//                (based on EBOOT for ASPEN for WCE5.0)

//
// 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.
//
//------------------------------------------------------------------------------
//
//  Module: ether.c
//
//  This module provides the interface to the ethernet transport.
//
//------------------------------------------------------------------------------

// Include Files 
#include "boot.h"
#include <ethdbg.h>
#include <pehdr.h>
#include <romldr.h>
#include <oemfw.h>
#include "shx.h"
#include "platform.h"
#include "drv_glob.h"
#include "loader.h"
#include "rev.h"
 
// External Functions

extern  BOOL    ReadEEPROMData  ( DWORD *pdwIP, DWORD *pdwSubnetMask);
extern  BOOL    UpdateEEPROMData( DWORD  dwIP,  DWORD   dwSubnetMask);
extern  void    JumpToOS        ( DWORD dwLaunchAddr );
extern  BOOL    AskUser         ( EDBG_ADDR *pMyAddr, LPDWORD pdwSubnetMask );
extern  void    SpinForever     ( VOID );

// External Variables 
extern BOOL gbStoreSDRAMImageToFlash;
extern BOOL gbJumpToFlash;
extern BOOL gbGotIP;

// Global Variables 

// Defines 

#define pDriverGlobals ((PDRIVER_GLOBALS) DRIVER_GLOBALS_PHYSICAL_MEMORY_START)

#define EDBG_CPUID                  EDBG_CPU_SH4        // CPU Id for Eshell

#define LAST_LAUNCH_ADDR_VALID      (0xBADBEEF6)

#if 1
#define MACADDR0 0x0000
#define MACADDR1 0x0000
#define MACADDR2 0x0000
#else
/* 00:00:E1:0C:50:FF */
#define MACADDR0 0x0000
#define MACADDR1 0xe10c
#define MACADDR2 0x50ff
#endif

// Types
 
// Local Variables 
 
// Local Functions 

// function to ask user for IP/subnetMask

static EDBG_ADDR MyAddr;        // IP address
static DWORD dwSubnetMask;      // subnet mask
static BOOL fNoWait;            // wait for desktop?

//------------------------------------------------------------------------------
//  Function:  EthInit
//
//  Initialize ethernet interface.
//

BOOL EthInit( void )
{
    EdbgOutputDebugString( "+EthInit\r\n" );

    EdbgOutputDebugString( "INFO: SMC base : 0x%X\r\n", PF_ETHER_BASE);

    if( !SMCInit( (BYTE *) PF_ETHER_BASE, 1, MyAddr.wMAC) )
    {
        EdbgOutputDebugString("ERROR: SMC Ethernet init failed, attempting parallel download...\n");

        pDriverGlobals->eth.etherFlags|=EDBG_FL_CLEANBOOT;
        pDriverGlobals->eth.EbootMagicNum = ~EBOOT_MAGIC_NUM;
        return( FALSE );
    }

#if (MACADDR0 || MACADDR1 || MACADDR2)
	/* Serial EEPROM emulation */
	{
		EdbgOutputDebugString("Set Ethernet Address\r\n");

		MyAddr.wMAC[0] = ((MACADDR0 << 8) & 0xFF00) | ((MACADDR0 >> 8) & 0x00FF);
		MyAddr.wMAC[1] = ((MACADDR1 << 8) & 0xFF00) | ((MACADDR1 >> 8) & 0x00FF);
		MyAddr.wMAC[2] = ((MACADDR2 << 8) & 0xFF00) | ((MACADDR2 >> 8) & 0x00FF);

		WRITE_REGISTER_USHORT(PF_ETHER_BASE + (0x0E * 1),0x3301);
		WRITE_REGISTER_USHORT(PF_ETHER_BASE + (0x04 * 1),MyAddr.wMAC[0]);
		WRITE_REGISTER_USHORT(PF_ETHER_BASE + (0x06 * 1),MyAddr.wMAC[1]);
		WRITE_REGISTER_USHORT(PF_ETHER_BASE + (0x08 * 1),MyAddr.wMAC[2]);

		MyAddr.wMAC[0] = READ_REGISTER_USHORT(PF_ETHER_BASE + (0x04 * 1));
		MyAddr.wMAC[1] = READ_REGISTER_USHORT(PF_ETHER_BASE + (0x06 * 1));
		MyAddr.wMAC[2] = READ_REGISTER_USHORT(PF_ETHER_BASE + (0x08 * 1));

        EdbgOutputDebugString("SMC Ethernet Address: %B:%B:%B:%B:%B:%B\r\n",
                               MyAddr.wMAC[0] & 0x00FF, MyAddr.wMAC[0] >> 8,
                               MyAddr.wMAC[1] & 0x00FF, MyAddr.wMAC[1] >> 8,
                               MyAddr.wMAC[2] & 0x00FF, MyAddr.wMAC[2] >> 8);
	}
#endif

    // Make sure MAC address has been programmed

    if( !MyAddr.wMAC[0] && !MyAddr.wMAC[1] && !MyAddr.wMAC[2] )
    {
        EdbgOutputDebugString( "ERROR: Invalid MAC address.\r\n" );
        return( FALSE );
    }

    // Read IP info in EEPROMs

    EdbgOutputDebugString( "INFO: ReadEEPROMData...\r\n");

    if( !ReadEEPROMData( &MyAddr.dwIP, &dwSubnetMask ) )
    {
        EdbgOutputDebugString(" ERROR: EthInit: ReadEEPROMData failed\r\n" );
        return( FALSE );
    }
    EdbgOutputDebugString("INFO: EEPROM IpAddr %s ", inet_ntoa( MyAddr.dwIP ) );
    EdbgOutputDebugString("netmask %s\r\n", inet_ntoa( dwSubnetMask) );

    // Save our address in driver globals
    memcpy(&pDriverGlobals->eth.PlatformAddr,&MyAddr,sizeof(MyAddr));
    pDriverGlobals->eth.SubnetMask = dwSubnetMask;

    // Indicate status

    EdbgOutputDebugString( "-EthInit(rc=1)\r\n" );
    return( TRUE );
}

//------------------------------------------------------------------------------
//  Function:  EthPreDownload
//
//  
//

DWORD EthPreDownload( void )
{
    BOOL    fGotJumpImg = FALSE;
    DWORD   DHCPLeaseTime = 0;
    DWORD   *pDHCPLeaseTime = &DHCPLeaseTime;

    EdbgOutputDebugString( "+EthPreDownload\r\n" );

    // Polarity is reversed, so this is actually testing the "Off" position

    if( gbJumpToFlash )
    {
        EdbgOutputDebugString( "INFO: Switch 1 on, jumping to flash image...\r\n");
        fNoWait = TRUE;

        return BL_JUMP;
    }

    EdbgOutputDebugString("Using device name: %s%d\n", BSP_DEVICE_PREFIX, ((MyAddr.wMAC[2] & 0x00FF) << 8) | MyAddr.wMAC[2] >> 8);

    // If DIP switch SW2-2 is ON, use already IP address.
	if (gbGotIP) {	// ON
		if (dwSubnetMask) { 
			EdbgOutputDebugString("Switch SW2-2 is ON, use existing IP address.\r\n");
			//bGotIP = TRUE;
		} else {
			EdbgOutputDebugString("Switch SW2-2 is ON, but NOT exist IP address. Enter new IP address.\r\n");
			gbGotIP = FALSE;
		}
	}
	if(gbGotIP){
		// already read EEPROM from static IP(EthInit)
        pDHCPLeaseTime = NULL;          // pDHCPLeaseTime is overloaded - NULL indicates static IP
        pDriverGlobals->eth.EdbgFlags = EDBG_FLAGS_STATIC_IP;
	}
	else{
	    // Ask user if static IP is desired

	    if( AskUser( &MyAddr, &dwSubnetMask) )
	    {
	        pDHCPLeaseTime = NULL;          // pDHCPLeaseTime is overloaded - NULL indicates static IP
	        pDriverGlobals->eth.EdbgFlags = EDBG_FLAGS_STATIC_IP;
	    }
	}

    // Initialize TFTP transport

    if( !EbootInitEtherTransport( &MyAddr, 
                                  &dwSubnetMask, 
                                  &fGotJumpImg, 
                                  pDHCPLeaseTime,
                                  EBOOT_VERSION_MAJOR, 
                                  EBOOT_VERSION_MINOR, 
                                  BSP_DEVICE_PREFIX, 
                                  NULL, 
                                  EDBG_CPUID, 
                                  0) )
    {
        return( BL_ERROR );
    }

    // update DHCP lease time

    pDriverGlobals->eth.DHCPLeaseTime = DHCPLeaseTime;

    return( fGotJumpImg? BL_JUMP : BL_DOWNLOAD );
}

//------------------------------------------------------------------------------
//  Function:  EthLaunch
//
//  
//
void EthLaunch( DWORD dwImageStart, 
                DWORD dwImageLength, 
                DWORD dwLaunchAddr, 
                const ROMHDR *pRomHdr )
{
    EDBG_OS_CONFIG_DATA *pCfgData = NULL;    
    EDBG_ADDR EshellHostAddr;

    EdbgOutputDebugString("+EthLaunch( 0x%x, 0x%x, 0x%x, 0x%x )\r\n",
        dwImageStart, dwImageLength, dwLaunchAddr, pRomHdr );

    // Wait for the jump command from PB unless user specify jump directly

    if( !fNoWait )
    {
        EdbgOutputDebugString ("Download successful! Jumping to image at %Xh...\r\n", dwLaunchAddr);

        if( !(pCfgData = EbootWaitForHostConnect( &MyAddr, &EshellHostAddr )) )
        {
            EdbgOutputDebugString ("ERROR: EthLaunch: EbootWaitForHostConenct failed\r\n");
            SpinForever();

            // Should never get here. Also cleans up a prefast error...
            return;
        }

        // Update service information

        if( pCfgData->Flags & EDBG_FL_DBGMSG )
        {
            EdbgOutputDebugString("Enabling debug messages over Ethernet, IP: %s, port:%u\n",
                                  inet_ntoa(pCfgData->DbgMsgIPAddr),ntohs(pCfgData->DbgMsgPort));
            memcpy(&pDriverGlobals->eth.DbgHostAddr.wMAC,&EshellHostAddr.wMAC,6);
            pDriverGlobals->eth.DbgHostAddr.dwIP  = pCfgData->DbgMsgIPAddr;
            pDriverGlobals->eth.DbgHostAddr.wPort = pCfgData->DbgMsgPort;
        }

        if( pCfgData->Flags & EDBG_FL_PPSH )
        {
            EdbgOutputDebugString("Enabling CESH over Ethernet,           IP: %s, port:%u\n",
                                  inet_ntoa(pCfgData->PpshIPAddr),ntohs(pCfgData->PpshPort));
            memcpy(&pDriverGlobals->eth.PpshHostAddr.wMAC,&EshellHostAddr.wMAC,6);
            pDriverGlobals->eth.PpshHostAddr.dwIP  = pCfgData->PpshIPAddr;
            pDriverGlobals->eth.PpshHostAddr.wPort = pCfgData->PpshPort;
        }

        if( pCfgData->Flags & EDBG_FL_KDBG )
        {
            EdbgOutputDebugString("Enabling KDBG over Ethernet,           IP: %s, port:%u\n",
                                  inet_ntoa(pCfgData->KdbgIPAddr),ntohs(pCfgData->KdbgPort));
            memcpy(&pDriverGlobals->eth.KdbgHostAddr.wMAC,&EshellHostAddr.wMAC,6);
            pDriverGlobals->eth.KdbgHostAddr.dwIP  = pCfgData->KdbgIPAddr;
            pDriverGlobals->eth.KdbgHostAddr.wPort = pCfgData->KdbgPort;
        }
        pDriverGlobals->eth.etherFlags = pCfgData->Flags;
        memcpy( &pDriverGlobals->eth.DownloadHostAddr,&EshellHostAddr,sizeof(EDBG_ADDR) );
    }

    // Update address info, in driver globals, and in EEPROM if necessary

    pDriverGlobals->eth.EbootMagicNum = EBOOT_MAGIC_NUM;
    if(pCfgData) pDriverGlobals->eth.KitlTransport = pCfgData->KitlTransport;
    memcpy( &pDriverGlobals->eth.PlatformAddr, &MyAddr, sizeof(MyAddr) );
    pDriverGlobals->eth.SubnetMask = dwSubnetMask;

    // Update EEPROM IP/subnet information

    UpdateEEPROMData( MyAddr.dwIP, dwSubnetMask );

    if( dwLaunchAddr == 0 )
    {
        if( pDriverGlobals->dwLastLaunchAddrValid == LAST_LAUNCH_ADDR_VALID )
        {
            EdbgOutputDebugString("Using previous launch address\n");
            dwLaunchAddr = pDriverGlobals->dwLastLaunchAddr;
        }
        else
        {
            if( pRomHdr && pRomHdr->physfirst != -1 )
            {
                dwLaunchAddr= pRomHdr->physfirst;
            }
            else
            {
				dwLaunchAddr = FLASH_IMAGE_START_CACHED;   // Default launch address
            }
        }
    }
    else
    {
        pDriverGlobals->dwLastLaunchAddrValid = LAST_LAUNCH_ADDR_VALID;
        pDriverGlobals->dwLastLaunchAddr=dwLaunchAddr;
    }

    EdbgOutputDebugString("\r\nJumping to existing image at %Xh...\r\n",dwLaunchAddr);

    // Launch the OS - never returns

    JumpToOS( dwLaunchAddr );
    SpinForever();
}

//------------------------------------------------------------------------------
//  Function: OEMEthGetFrame
//
//  Receives a buffer from NIC driver. Returns TRUE if frame 
//  has been received, FALSE if not.
//

BOOL OEMEthGetFrame( BYTE *pData, UINT16 *pwLength )     
{
    return( SMCGetFrame(pData, pwLength) );
}

//------------------------------------------------------------------------------
//  Function: OEMEthSendFrame
//
//  Send Ethernet frame. Returns TRUE if frame successfully 
//  sent, FALSE otherwise.
//

BOOL OEMEthSendFrame( BYTE *pData, DWORD dwLength )
{
    int retries = 0;

    // Let's be persistant here

    while( retries++ < 4 )
    {
        if( !SMCSendFrame(pData, dwLength) )
        {
            return TRUE;
        }
        else
        {
            EdbgOutputDebugString("ERROR: OEMEthSendFrame: Failed - retries %u\n",retries);
        }
    }
    return FALSE;
}

//------------------------------------------------------------------------------
//  Function: OEMEthGetSecs
//
//  Return a count of seconds from some arbitrary time (the absolute value 
//  is not important, so long as it increments appropriately).
//

DWORD OEMEthGetSecs( void ) 
{
    SYSTEMTIME st;

    OEMGetRealTime( &st );
    return((60UL * (60UL * (24UL * (31UL * st.wMonth + st.wDay) + st.wHour) + st.wMinute)) + st.wSecond);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲一区二区五区| 久久久国产午夜精品 | 综合久久给合久久狠狠狠97色 | 欧美伊人精品成人久久综合97| 欧美少妇性性性| 日韩免费成人网| 国产精品无码永久免费888| 一区二区三区高清在线| 美女爽到高潮91| www.亚洲在线| 制服丝袜在线91| 亚洲国产成人一区二区三区| 亚洲一区二区三区四区五区黄 | 久久一区二区三区国产精品| 亚洲女与黑人做爰| 久久99蜜桃精品| 99视频在线精品| 91精品视频网| 国产精品高潮呻吟| 美腿丝袜亚洲三区| 日本黄色一区二区| 久久久精品日韩欧美| 亚洲国产一区二区在线播放| 国产成人综合精品三级| 欧美日本在线观看| 国产精品理论片| 麻豆国产一区二区| 欧美三级中文字幕| 欧美国产激情二区三区| 美女诱惑一区二区| 欧美三级中文字| 国产精品美女久久久久久 | 久久久蜜桃精品| 天天操天天干天天综合网| 99精品欧美一区二区蜜桃免费| 精品国产精品网麻豆系列| 亚洲综合图片区| 成人动漫av在线| 久久综合色天天久久综合图片| 午夜精品视频一区| 色综合天天综合网国产成人综合天| 久久影音资源网| 日韩精品亚洲专区| 欧美日韩精品一区二区三区蜜桃| 国产精品电影院| 国产69精品久久777的优势| 日韩美女一区二区三区四区| 亚洲电影在线播放| 色综合天天综合在线视频| 欧美激情在线一区二区三区| 激情五月激情综合网| 日韩视频中午一区| 青青国产91久久久久久| 欧美日本在线播放| 石原莉奈在线亚洲三区| 日本一区二区三区电影| 奇米精品一区二区三区在线观看 | 日韩精品视频网| 在线观看亚洲专区| 亚洲乱码国产乱码精品精98午夜| 成人免费精品视频| 国产清纯白嫩初高生在线观看91| 激情综合色播五月| 精品国产一区二区三区不卡| 久色婷婷小香蕉久久| 精品日产卡一卡二卡麻豆| 美女高潮久久久| 日韩天堂在线观看| 久久99国产精品免费网站| 精品国产一区a| 狠狠久久亚洲欧美| 国产欧美一区二区三区在线老狼| 国产精品白丝av| 日本一区二区免费在线观看视频 | 亚洲视频免费观看| 一本到一区二区三区| 一区二区三区四区高清精品免费观看 | 欧美高清精品3d| 天天综合网 天天综合色| 日韩色在线观看| 精彩视频一区二区三区| 久久综合久久综合久久| 国产综合色在线| 中文字幕精品一区二区三区精品| 波多野结衣中文字幕一区| 一区在线播放视频| 欧美在线免费观看视频| 天天亚洲美女在线视频| 精品久久一区二区三区| 国产99久久久久久免费看农村| 国产精品麻豆欧美日韩ww| 91一区二区在线| 亚洲国产美女搞黄色| 欧美一级黄色大片| 国产精品一区二区视频| 国产精品国产自产拍在线| av在线不卡电影| 午夜精品视频在线观看| 久久久蜜桃精品| 91丨九色丨尤物| 午夜久久电影网| 久久久久久久久99精品| 91麻豆国产自产在线观看| 午夜精品久久久久久久蜜桃app| 精品久久人人做人人爰| 99re热这里只有精品免费视频 | 51午夜精品国产| 国产自产v一区二区三区c| 中文字幕一区二区三区在线不卡 | av激情综合网| 亚洲大片在线观看| 国产午夜精品理论片a级大结局| 一本大道久久a久久综合| 午夜电影网亚洲视频| 精品va天堂亚洲国产| 97se亚洲国产综合自在线不卡| 午夜精品久久久久久久久久| 国产日产欧美一区二区三区| 欧美三级电影网站| 国产高清成人在线| 水野朝阳av一区二区三区| 国产欧美一区二区精品性色| 欧美日韩一区二区电影| 国产91综合网| 日韩精品亚洲一区| 亚洲色图.com| 精品国产91久久久久久久妲己| 91国模大尺度私拍在线视频| 国产一区二区伦理| 亚洲成人激情综合网| 中文文精品字幕一区二区| 欧美精品在线视频| 成人开心网精品视频| 另类人妖一区二区av| 一区二区三区美女| 国产丝袜美腿一区二区三区| 制服丝袜亚洲网站| 91久久国产最好的精华液| 国产99久久久国产精品| 日韩av中文在线观看| 一区二区三区欧美| 国产精品久久影院| 日韩免费在线观看| 欧美日韩dvd在线观看| 91影院在线免费观看| 国产传媒欧美日韩成人| 久久爱另类一区二区小说| 午夜欧美视频在线观看| 亚洲青青青在线视频| 欧美激情在线看| 欧美va天堂va视频va在线| 777午夜精品免费视频| 欧美最猛黑人xxxxx猛交| 成人理论电影网| 国产精品18久久久久久久网站| 蜜臀91精品一区二区三区| 亚洲综合在线五月| 亚洲男女毛片无遮挡| 国产精品第四页| 中文字幕免费不卡在线| 国产亚洲短视频| 久久综合一区二区| 欧美精品一区二区三区高清aⅴ| 7777精品伊人久久久大香线蕉超级流畅| av成人免费在线观看| 成人爱爱电影网址| 成人福利视频网站| 国产·精品毛片| 大白屁股一区二区视频| 国产成人精品午夜视频免费| 国产在线播精品第三| 另类小说图片综合网| 美国精品在线观看| 麻豆国产欧美一区二区三区| 免费观看一级特黄欧美大片| 奇米影视在线99精品| 91丨porny丨蝌蚪视频| 91社区在线播放| 99久久婷婷国产综合精品电影 | 尤物在线观看一区| 一区二区三区四区视频精品免费| 一区二区三区四区高清精品免费观看| 日韩美女精品在线| 亚洲女性喷水在线观看一区| 玉足女爽爽91| 亚洲不卡av一区二区三区| 日韩国产欧美视频| 蜜臀91精品一区二区三区 | 中文字幕在线一区免费| 亚洲美女视频在线观看| 亚洲一区二区三区激情| 亚洲一区二区三区四区在线免费观看 | 国产乱子伦视频一区二区三区| 久久99这里只有精品| 国产一区二区剧情av在线| 丰满白嫩尤物一区二区| 91在线一区二区三区| 欧美图区在线视频| 日韩午夜激情视频| 国产亚洲欧洲997久久综合|