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

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

?? main.c

?? WinCE5.0BSP for Renesas SH7770
?? C
?? 第 1 頁(yè) / 共 3 頁(yè)
字號(hào):
	LPDWORD	lpdwToc;	  // toc pointer
	DWORD dwPhysStart;		// image physical starting address
	DWORD dwPhysLen;		// image physical length
	DWORD dwOffset=0;

//	EdbgOutputDebugString( "OEMLaunch: Image=%x length=%x launch=%x\r\n", dwImageStart, dwImageLength, dwLaunchAddr);
	// init RomHdr
	memset((LPVOID)&RomHdr,-1,sizeof(ROMHDR));

    // Execute the transport callout function
	if(gbStoreSDRAMImageToFlash){
	    // Otherwise we should copy image to memory
	    if (!BLFlashDownload(&dwImageStart, &dwImageLength, &dwLaunchAddr)) {
			EdbgOutputDebugString( "ERROR: Failed copy image from flash, spin forever...\r\n" );
	        SpinForever();
	    }
	    pDriverGlobals->eth.etherFlags |= EDBG_FL_CLEANBOOT; // force clean boot
	}

	dwPhysStart = dwImageStart;
	dwPhysLen = dwImageLength;

	// if we are downloading, find pTOC
	if (dwPhysLen > 0)
		{
		// Check for pTOC signature ("CECE") here, after image in place
		if (*(DWORD*)(dwPhysStart - dwOffset + 64) == 0x43454345)
		{
			EdbgOutputDebugString("Found pTOC signature.\n");
			lpdwToc= (LPDWORD)(*(DWORD*)(dwPhysStart - dwOffset + 68));
		}
		else if (*(DWORD*)((dwPhysStart+0x1000) - dwOffset + 64) == 0x43454345)
		{
			EdbgOutputDebugString("Found pTOC signature in XIP.BIN.\n");
			lpdwToc= (LPDWORD)(*(DWORD*)((dwPhysStart+0x1000) - dwOffset + 68));
		}
		else
		{
			EdbgOutputDebugString("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n");
			EdbgOutputDebugString("! ERROR: Did not find pTOC signature.  ABORTING. !\n");
			EdbgOutputDebugString("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n");

			// If no signature, we're going to fail anyway, so loop forever
			while (1);
   		}

		// Copy RomHdr from image
		memcpy((LPVOID)&RomHdr, (LPVOID)lpdwToc, sizeof(ROMHDR));

		EdbgOutputDebugString("ROMHDR at Address %Xh\r\n",lpdwToc);
		EdbgOutputDebugString("RomHdr.ulRAMStart=%Xh RomHdr.physfirst=%Xh.\r\n",RomHdr.ulRAMStart,RomHdr.physfirst);
	}

	if (RomHdr.physfirst != -1) {
	    if (pDriverGlobals->eth.etherFlags & EDBG_FL_CLEANBOOT) {
            
            //
            // Check to see if the bootloader's image overlaps the real image's
            // ram section. If so there might be a problem doing the cleanboot.
            // Of course that means warm boots are never valid for this image/processor.
            //
            //      RomHdr contains the real image's parameters
            //      pTOC contains the bootloader's parameters
            //
            if ((RomHdr.ulRAMStart < pTOC->physlast) && (RomHdr.ulRAMEnd > pTOC->physfirst)) {
                //
                // We have an overlap
                //
                EdbgOutputDebugString("WARNING! : Bootloader detected a possible overlap between the bootloader code\r\n");
                EdbgOutputDebugString("and the image's RAM section. Ignoring the CLEANBOOT request.\r\n");
                EdbgOutputDebugString("        Bootloader image => 0x%X - 0x%X\r\n",pTOC->physfirst,pTOC->physlast);
                EdbgOutputDebugString("        NK RAM           => 0x%X - 0x%X\r\n",RomHdr.ulRAMStart,RomHdr.ulRAMEnd);

            } else {
                EdbgOutputDebugString( "CLEANBOOT Clearing RAM from %Xh-%Xh.\r\n",RomHdr.ulRAMStart,RomHdr.ulRAMEnd);
                memset((LPVOID)RomHdr.ulRAMStart,0,RomHdr.ulRAMEnd-RomHdr.ulRAMStart);
            }
		}
	}

	if(pfnLaunch){
	    pfnLaunch( dwImageStart, dwImageLength, dwLaunchAddr, pRomHdr );
	}

	if(gbJumpToFlash) pDriverGlobals->eth.KitlTransport = KTS_PASSIVE_MODE;

    if( dwLaunchAddr == 0 ){
		dwLaunchAddr = FLASH_IMAGE_START_CACHED;   // Default launch address
	}

    // Launch the OS - never returns
    JumpToOS( dwLaunchAddr );
    SpinForever();
}

//------------------------------------------------------------------------------
//  Function:  JumpToOS
//
//  Jumps to OS - does not return
//

void JumpToOS( DWORD dwLaunchAddr )
{
    EdbgOutputDebugString( "+JumpToOS( 0x%x )\r\n", dwLaunchAddr );
    
    if( dwLaunchAddr==0x80000004 )
    {                               
        // Reset Vector

        EdbgOutputDebugString("Bootloader or Nk.bin has been downloaded. Press Reset button to restart...\n");
        SpinForever();
    };

    dwLaunchAddr |= 0xA0000000;

    EdbgOutputDebugString(
    "INFO: JumpToOS: Jumping to image at %Xh\r\n",dwLaunchAddr);

    EdbgOutputDebugString(
    "INFO: JumpToOS: First instructions=(%Xh,%Xh,%Xh)...\r\n",
    *(LPDWORD)dwLaunchAddr,*(LPDWORD)(dwLaunchAddr+4),*(LPDWORD)(dwLaunchAddr+8) );

    Launch( dwLaunchAddr );

    // why is this in here twice - is this a mistake?

    EdbgOutputDebugString(
    "INFO:JumpToOS: First instructions=(%Xh,%Xh,%Xh)...\r\n",
    *(LPDWORD)dwLaunchAddr,*(LPDWORD)(dwLaunchAddr+4),*(LPDWORD)(dwLaunchAddr+8) );

    Launch( dwLaunchAddr );

    // Some catastrophic error occurred

    EdbgOutputDebugString("ERROR: JumpToOS: Fatal error in Ethernet Bootloader, halting...\n");
    DisplayLED( "DEADDEAD" );
    SpinForever();
}

//------------------------------------------------------------------------------
//  Function:  SpinForever
//
//  Busy wait forever. Used to stall execution until reset.
//

void SpinForever( void )
{
    EdbgOutputDebugString( "\r\n\r\nERROR: <<<<< SPINFOREVER >>>>>\r\n\r\n" );

    while( TRUE ) { ; }
}

//------------------------------------------------------------------------------
//  Function:  ReadEEPROMData
//
//  Read IP address and netmask from serial EEPROM on the SMC board 
//  (stored from the last time we got this info from user or DHCP).
//

BOOL ReadEEPROMData (DWORD *pdwIP, DWORD *pdwSubnetMask)
{
    UINT16 wIPH, wIPL, wSMH, wSML;

    // Compare 

    if( !SMCReadEEPROM(0x23,&wIPL) ||
        !SMCReadEEPROM(0x24,&wIPH) ||
        !SMCReadEEPROM(0x25,&wSML) ||
        !SMCReadEEPROM(0x26,&wSMH) )
    {
        return( FALSE );
    }

    // Update passed in values

    *pdwIP         = ((ULONG)wIPH << 16) | wIPL;
    *pdwSubnetMask = ((ULONG)wSMH << 16) | wSML;

    return( TRUE );
}

//------------------------------------------------------------------------------
//  Function:  WriteEEPROMData
//
//  Write new address info to the serial EEPROM on the SMC board, if 
//  necessary.  Only update data if it is different.
//

BOOL UpdateEEPROMData(DWORD dwIP, DWORD dwSubnetMask)
{
    DWORD dwPrevIP, dwPrevSubnetMask;

    if( !ReadEEPROMData(&dwPrevIP, &dwPrevSubnetMask) )
    {
        return FALSE;
    }

    if( dwPrevIP != dwIP )
    {
        EdbgOutputDebugString( "Writing EEPROM 0x23 with new IP\r\n" );
        if( !SMCWriteEEPROM( 0x23, (WORD)(dwIP) ) )
        {
            return FALSE;
        }

        EdbgOutputDebugString( "Writing EEPROM 0x24 with new IP\r\n" );
        if( !SMCWriteEEPROM( 0x24, (WORD)(dwIP >> 16) ) )
        {
            return FALSE;
        }
    }

    if( dwPrevSubnetMask != dwSubnetMask )
    {
        EdbgOutputDebugString( "Writing EEPROM 0x25 with new netmask\r\n" );
        if( !SMCWriteEEPROM( 0x25, (WORD)(dwSubnetMask) ) )
        {
            return FALSE;
        }

        EdbgOutputDebugString( "Writing EEPROM 0x26 with new netmask\r\n" );
        if( !SMCWriteEEPROM( 0x26, (WORD)(dwSubnetMask >> 16) ) )
        {
            return FALSE;
        }
    }

    return( TRUE );
}

//------------------------------------------------------------------------------
//
//  Function:  OEMVerifyMemory
//
//  Verifies passed in address is within defined ranges.
//
static BOOL OEMVerifyMemory( DWORD dwStartAddr, DWORD dwLength )
{
    BOOL    rc;                 // return code
    DWORD   Addr1;              // starting address
    DWORD   Addr2;              // ending   address

    // Select cached address

    dwStartAddr &= ~CACHED_TO_UNCACHED_OFFSET;

    // Setup address range for comparison

    Addr1 = dwStartAddr;
    Addr2 = Addr1 + (dwLength - 1);

    EdbgOutputDebugString( "****** OEMVerifyMemory Checking Range [ 0x%x ==> 0x%x ]\r\n", Addr1, Addr2 );

    // Validate each range

    if( (Addr1 >= RAM_START_CACHED) && (Addr2 <= RAM_END_CACHED) )
    {
        EdbgOutputDebugString("****** RAM address ****** \r\n");

        rc = TRUE;
    }
    else if( (Addr1 >= FLASH_START_CACHED) && (Addr2 <= FLASH_END_CACHED) )
    {
        EdbgOutputDebugString("****** FLASH address ****** \r\n");

        rc = TRUE;
    }
    else
    {
        EdbgOutputDebugString("****** OEMVerifyMemory FAILED - Invalid Memory Area ****** \r\n");

        rc = FALSE;
    }

	IsFlash(dwStartAddr, dwLength);

	if(gbStoreSDRAMImageToFlash){
        if ((dwStartAddr & 0x1C000000) == AREA_0
            || (dwStartAddr & 0x1C000000) == AREA_1) {
            EdbgOutputDebugString("This isn't a SDRAM image.\r\n" );
            PrintLED("BadImage");
	        rc = FALSE;
        }

		Addr1 = FLASH_IMAGE_START_UNCACHED; // top of image stored blocks
		Addr2 = Addr1 + (dwLength - 1);

	    EdbgOutputDebugString( "****** OEMVerifyMemory Checking Range [ 0x%x ==> 0x%x ]\r\n", Addr1, Addr2 );

	    // Validate each range
	    if( (Addr1 >= FLASH_START_UNCACHED) && (Addr2 <= FLASH_END_UNCACHED) )
	    {
	        EdbgOutputDebugString("****** FLASH address ****** \r\n");

	        rc = TRUE;
	    }
	    else
	    {
	        EdbgOutputDebugString("****** OEMVerifyMemory FAILED - Invalid Memory Area ****** \r\n");

	        rc = FALSE;
	    }
		IsFlash(Addr1, dwLength);
	}

    // Indicate status

    return( rc );
}

void OEMMultiBINNotify(const PMultiBINInfo pInfo)
{
    BYTE nCount;

    if (!pInfo || !pInfo->dwNumRegions)
    {
        EdbgOutputDebugString("WARNING: OEMMultiBINNotify: Invalid BIN region descriptor(s).\r\n");
        return;
    }

    g_dwMinImageStart = pInfo->Region[0].dwRegionStart;

    EdbgOutputDebugString("\r\nDownload BIN file information:\r\n");
    EdbgOutputDebugString("-----------------------------------------------------\r\n");
    for (nCount = 0 ; nCount < pInfo->dwNumRegions ; nCount++)
    {
        EdbgOutputDebugString("[%d]: Base Address=0x%x  Length=0x%x\r\n" , nCount, pInfo->Region[nCount].dwRegionStart, pInfo->Region[nCount].dwRegionLength);
        if (pInfo->Region[nCount].dwRegionStart < g_dwMinImageStart)
        {
            g_dwMinImageStart = pInfo->Region[nCount].dwRegionStart;

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲精品综合在线| 亚洲码国产岛国毛片在线| 欧美在线观看视频在线| 国产91精品欧美| 国产一区二区三区| 蜜桃av一区二区三区| 青青草国产成人av片免费| 亚洲图片一区二区| 一区二区久久久久| 中文字幕制服丝袜成人av| 日本一区二区三区在线不卡| 国产女同性恋一区二区| 久久久久青草大香线综合精品| 日韩欧美亚洲另类制服综合在线| 9191国产精品| 欧美大片免费久久精品三p| 在线不卡中文字幕| 日韩欧美国产不卡| 日韩午夜中文字幕| 久久精品一区蜜桃臀影院| 欧美激情综合在线| 亚洲精品成人悠悠色影视| 日韩在线一区二区三区| 日本不卡一二三| 国产精品1区2区3区在线观看| 成人av先锋影音| 欧美理论电影在线| 国产色婷婷亚洲99精品小说| 亚洲精品一区二区三区福利| 亚洲精品日日夜夜| 五月天激情小说综合| 激情亚洲综合在线| 91福利在线播放| 日韩欧美成人午夜| 国产一区二区视频在线| 欧美性生活大片视频| 日韩精品影音先锋| 一区av在线播放| 国产一区久久久| 欧美二区乱c少妇| 国产精品另类一区| 琪琪久久久久日韩精品| 色哟哟一区二区三区| 精品国产污污免费网站入口| 亚洲免费资源在线播放| 免费一级片91| 色呦呦国产精品| 国产日韩欧美电影| 久久福利资源站| 欧美日韩国产天堂| 中文字幕在线不卡国产视频| 精品一区二区日韩| 欧美精品tushy高清| 亚洲国产成人精品视频| 99视频在线观看一区三区| 亚洲精品在线观看视频| 琪琪一区二区三区| 337p亚洲精品色噜噜| 日韩影院精彩在线| 欧美一级爆毛片| 欧美在线免费观看视频| 东方aⅴ免费观看久久av| 久久精品夜色噜噜亚洲aⅴ| 日韩电影在线观看一区| 欧美一区二区三区四区视频| 日韩在线一区二区| 日韩精品专区在线影院观看 | 国产一区二区三区免费看| 日韩欧美一区二区不卡| 偷窥国产亚洲免费视频 | 91福利在线免费观看| 一区二区三区日韩精品| 色婷婷综合激情| 亚洲国产视频一区二区| 91成人免费电影| 日韩不卡一二三区| 2021国产精品久久精品| 国产91精品精华液一区二区三区 | 久久久久综合网| 99久久精品免费看国产免费软件| 亚洲乱码国产乱码精品精小说| av亚洲精华国产精华精| 亚洲男人的天堂一区二区| 91精品欧美综合在线观看最新| 国产乱码精品一区二区三| 亚洲欧美色综合| 欧美成人一区二区| 成人黄色网址在线观看| 日韩综合小视频| 亚洲视频 欧洲视频| 日韩视频一区在线观看| 99久久久国产精品免费蜜臀| 免费观看在线综合| 国产精品福利一区| 久久久久九九视频| 欧美三区在线观看| 色婷婷久久99综合精品jk白丝| 国产在线播放一区| 香港成人在线视频| 亚洲人成7777| 中文字幕免费在线观看视频一区| 精品视频一区二区不卡| 91色婷婷久久久久合中文| 精品在线一区二区| 久久国产精品色| 亚洲成av人片| 亚洲高清在线视频| 18成人在线观看| 国产精品电影一区二区| 中文字幕乱码日本亚洲一区二区| 精品国产91洋老外米糕| 精品国产一区二区三区久久久蜜月 | 欧美成人女星排行榜| 欧美肥妇毛茸茸| 欧美乱妇20p| 欧美精品少妇一区二区三区| 在线免费精品视频| 欧美色手机在线观看| 欧美日韩一区二区三区不卡| 91传媒视频在线播放| 色婷婷一区二区三区四区| 色综合久久久网| 欧美日韩久久一区二区| 欧美丰满美乳xxx高潮www| 91精品国产综合久久香蕉麻豆 | 色偷偷久久人人79超碰人人澡| 色久优优欧美色久优优| 91黄色免费网站| 欧美一级艳片视频免费观看| 久久综合色播五月| 国产三级精品视频| 亚洲免费成人av| 日本网站在线观看一区二区三区 | 亚洲午夜在线视频| 国产精品中文欧美| 91污在线观看| 日韩欧美国产一区二区在线播放| 精品久久人人做人人爱| 国产精品久久看| 亚洲愉拍自拍另类高清精品| 美女视频网站黄色亚洲| 99re66热这里只有精品3直播| 色婷婷综合久久久久中文一区二区 | 在线不卡中文字幕播放| 久久久高清一区二区三区| 夜夜嗨av一区二区三区中文字幕 | 亚洲电影中文字幕在线观看| 麻豆91在线播放免费| 一本久久a久久精品亚洲| 久久久久久久久久久久久久久99| 亚洲一区二区三区中文字幕| 国内精品免费**视频| 欧美三级中文字| 日韩理论片网站| 成人激情免费电影网址| 日韩欧美国产一区二区在线播放| 一区二区激情小说| 91啦中文在线观看| 成人欧美一区二区三区视频网页| 国产麻豆视频一区| www一区二区| 国产精品综合网| 国产日韩欧美精品一区| 国产一区二区三区免费看| 欧美精品一区二区三区蜜臀| 麻豆中文一区二区| 欧美一区二区成人| 美女久久久精品| 欧美mv和日韩mv的网站| 国产综合色产在线精品| 久久精品日产第一区二区三区高清版| 九九精品一区二区| 国产三级精品视频| 波多野结衣一区二区三区| 中文字幕一区在线| 91无套直看片红桃| 亚州成人在线电影| 久久久激情视频| 色www精品视频在线观看| 一区二区三区不卡视频| 欧美日韩你懂得| 国产麻豆精品视频| 亚洲日本中文字幕区| 欧美人成免费网站| 国产高清亚洲一区| 亚洲男女一区二区三区| 日韩美女天天操| 95精品视频在线| 麻豆精品一区二区综合av| 国产欧美日韩视频在线观看| 欧美午夜片在线看| 精品在线亚洲视频| 亚洲精品视频一区| 亚洲精品在线免费播放| 在线观看亚洲一区| 国产美女一区二区| 亚洲va韩国va欧美va| 久久久久久久久久久久久女国产乱 | 日韩欧美国产精品| 91国产视频在线观看|