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

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

?? nand.cpp

?? 6410BSP3
?? CPP
?? 第 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.
//

extern "C"
{
#include <windows.h>
#include <bsp.h>
#include "loader.h"
#include <fmd.h>

extern DWORD        g_ImageType;
extern UCHAR        g_TOC[LB_PAGE_SIZE];
extern const PTOC   g_pTOC;
extern DWORD        g_dwTocEntry;
extern PBOOT_CFG    g_pBootCfg;
extern BOOL         g_bBootMediaExist;
extern MultiBINInfo g_BINRegionInfo;
extern BOOL         g_bWaitForConnect;      // Is there a SmartMedia card on this device?
extern char*        BootDeviceString[];
extern DWORD        g_DefaultBootDevice;

}
BOOL WriteBlock(DWORD dwBlock, LPBYTE pbBlock, PSectorInfo pSectorInfoTable);
BOOL ReadBlock(DWORD dwBlock, LPBYTE pbBlock, PSectorInfo pSectorInfoTable);


extern DWORD        g_dwLastWrittenLoc;                     //  Defined in bootpart.lib
extern PSectorInfo  g_pSectorInfoBuf;
extern FlashInfo    g_FlashInfo;
static UCHAR        toc[LB_PAGE_SIZE];

// Define a dummy SetKMode function to satisfy the NAND FMD.
//
DWORD SetKMode (DWORD fMode)
{
    return(1);
}


void BootConfigPrint(void)
{
    EdbgOutputDebugString( "BootCfg { \r\n");
    EdbgOutputDebugString( "  ConfigFlags: 0x%x\r\n", g_pBootCfg->ConfigFlags);
    EdbgOutputDebugString( "  BootDelay: 0x%x\r\n", g_pBootCfg->BootDelay);
    EdbgOutputDebugString( "  ImageIndex: %d \r\n", g_pBootCfg->ImageIndex);
    EdbgOutputDebugString ("  Boot Device: %s\r\n", BootDeviceString[g_pBootCfg->BootDevice]);
    EdbgOutputDebugString( "  IP: %s\r\n", inet_ntoa(g_pBootCfg->EdbgAddr.dwIP));
    EdbgOutputDebugString( "  MAC Address: %B:%B:%B:%B:%B:%B\r\n",
                           g_pBootCfg->EdbgAddr.wMAC[0] & 0x00FF, g_pBootCfg->EdbgAddr.wMAC[0] >> 8,
                           g_pBootCfg->EdbgAddr.wMAC[1] & 0x00FF, g_pBootCfg->EdbgAddr.wMAC[1] >> 8,
                           g_pBootCfg->EdbgAddr.wMAC[2] & 0x00FF, g_pBootCfg->EdbgAddr.wMAC[2] >> 8);
    EdbgOutputDebugString( "  Port: %s\r\n", inet_ntoa(g_pBootCfg->EdbgAddr.wPort));

    EdbgOutputDebugString( "  SubnetMask: %s\r\n", inet_ntoa(g_pBootCfg->SubnetMask));
    EdbgOutputDebugString( "}\r\n");
}


// Set default boot configuration values
static void BootConfigInit(DWORD dwIndex)
{

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

    g_pBootCfg = &g_pTOC->BootCfg;

    memset(g_pBootCfg, 0, sizeof(BOOT_CFG));

    g_pBootCfg->ImageIndex   = dwIndex;

    g_pBootCfg->BootDevice = g_DefaultBootDevice;

    g_pBootCfg->ConfigFlags  = BOOT_TYPE_MULTISTAGE|BOOT_OPTION_CLEAN;

    g_pBootCfg->BootDelay    = CONFIG_BOOTDELAY_DEFAULT;

    // Setup some defaults so that KITL will work without having to change anything
    g_pBootCfg->ConfigFlags |= CONFIG_FLAGS_KITL | CONFIG_FLAGS_DHCP;
    g_pBootCfg->EdbgAddr.dwIP = inet_addr("169.254.1.101");
    g_pBootCfg->SubnetMask = inet_addr("255.255.255.0");
    g_pBootCfg->EdbgAddr.wMAC[0] = 0x1100;
    g_pBootCfg->EdbgAddr.wMAC[1] = 0x3322;
    g_pBootCfg->EdbgAddr.wMAC[2] = 0x5544;

    EdbgOutputDebugString("-BootConfigInit\r\n");
    return;
}

void ID_Print(DWORD i) {
    DWORD j;
    EdbgOutputDebugString("ID[%u] {\r\n", i);
    EdbgOutputDebugString("  dwVersion: 0x%x\r\n",  g_pTOC->id[i].dwVersion);
    EdbgOutputDebugString("  dwSignature: 0x%x\r\n", g_pTOC->id[i].dwSignature);
    EdbgOutputDebugString("  String: '%s'\r\n", g_pTOC->id[i].ucString);
    EdbgOutputDebugString("  dwImageType: 0x%x\r\n", g_pTOC->id[i].dwImageType);
    EdbgOutputDebugString("  dwTtlSectors: 0x%x\r\n", g_pTOC->id[i].dwTtlSectors);
    EdbgOutputDebugString("  dwLoadAddress: 0x%x\r\n", g_pTOC->id[i].dwLoadAddress);
    EdbgOutputDebugString("  dwJumpAddress: 0x%x\r\n", g_pTOC->id[i].dwJumpAddress);
    EdbgOutputDebugString("  dwStoreOffset: 0x%x\r\n", g_pTOC->id[i].dwStoreOffset);
    for (j = 0; j < MAX_SG_SECTORS; j++) {
        if ( !g_pTOC->id[i].sgList[j].dwLength )
            break;
        EdbgOutputDebugString("  sgList[%u].dwSector: 0x%x\r\n", j, g_pTOC->id[i].sgList[j].dwSector);
        EdbgOutputDebugString("  sgList[%u].dwLength: 0x%x\r\n", j, g_pTOC->id[i].sgList[j].dwLength);
    }

    EdbgOutputDebugString("}\r\n");
}

void TOC_Print(void)
{
    int i;

    EdbgOutputDebugString("g_dwTocEntry : %d\r\n", g_dwTocEntry);
    EdbgOutputDebugString("TOC {\r\n");
    EdbgOutputDebugString("dwSignature: 0x%x\r\n", g_pTOC->dwSignature);


    BootConfigPrint( );

    for (i = 0; i < MAX_TOC_DESCRIPTORS; i++) {
        if ( !VALID_IMAGE_DESCRIPTOR(&g_pTOC->id[i]) )
        {
            EdbgOutputDebugString("!!!Invalid Image Descriptor: id[%d]=0x%x\r\n", i, g_pTOC->id[i]);
            break;
        }
        ID_Print(i);
    }

    //  Print out Chain Information
    EdbgOutputDebugString("chainInfo.dwLoadAddress: 0X%X\r\n", g_pTOC->chainInfo.dwLoadAddress);
    EdbgOutputDebugString("chainInfo.dwFlashAddress: 0X%X\r\n", g_pTOC->chainInfo.dwFlashAddress);
    EdbgOutputDebugString("chainInfo.dwLength: 0X%X\r\n", g_pTOC->chainInfo.dwLength);

    EdbgOutputDebugString("}\r\n");
}


// init the EBOOT TOC to defaults
BOOL TOC_Init(DWORD dwEntry, DWORD dwImageType, DWORD dwImageStart, DWORD dwImageLength, DWORD dwLaunchAddr)
{
    DWORD dwSig = 0;

    EdbgOutputDebugString("TOC_Init: dwEntry:%u, dwImageType: 0x%x, dwImageStart: 0x%x, dwImageLength: 0x%x, dwLaunchAddr: 0x%x\r\n",
        dwEntry, dwImageType, dwImageStart, dwImageLength, dwLaunchAddr);

    if (0 == dwEntry) {
        EdbgOutputDebugString("\r\n*** WARNING: TOC_Init blasting Eboot ***\r\n");
        return FALSE;
    }

    switch (dwImageType) {
        case IMAGE_TYPE_LOADER:
            dwSig = IMAGE_EBOOT_SIG;
            break;
        case IMAGE_TYPE_RAMIMAGE:
            dwSig = IMAGE_RAM_SIG;
            break;
        default:
            EdbgOutputDebugString("ERROR: OEMLaunch: unknown image type: 0x%x \r\n", dwImageType);
            return FALSE;
    }

    memset(g_pTOC, 0, sizeof(g_TOC));

    // init boof cfg
    BootConfigInit(dwEntry);

    // update our index
    g_dwTocEntry = dwEntry;

    // debugger enabled?
    g_bWaitForConnect = (g_pBootCfg->ConfigFlags & CONFIG_FLAGS_KITL) ? TRUE : FALSE;

    // init TOC...
    //
    g_pTOC->dwSignature = TOC_SIGNATURE;

    //  init TOC entry for Eboot
    //  Those are hard coded numbers from boot.bib
    g_pTOC->id[0].dwVersion     = (EBOOT_VERSION_MAJOR << 16) | EBOOT_VERSION_MINOR;
    g_pTOC->id[0].dwSignature   = IMAGE_EBOOT_SIG;
    memcpy(g_pTOC->id[0].ucString, "eboot.nb0", sizeof("eboot.nb0")+1);   //  NUll terminate
    g_pTOC->id[0].dwImageType   = IMAGE_TYPE_RAMIMAGE;
    g_pTOC->id[0].dwLoadAddress = EBOOT_RAM_IMAGE_BASE;
    g_pTOC->id[0].dwJumpAddress = EBOOT_RAM_IMAGE_BASE;
    g_pTOC->id[0].dwTtlSectors  = FILE_TO_SECTOR_SIZE(EBOOT_RAM_IMAGE_SIZE);
    // 1 contigious segment
    g_pTOC->id[0].sgList[0].dwSector = BLOCK_TO_SECTOR(EBOOT_BLOCK);
    g_pTOC->id[0].sgList[0].dwLength = g_pTOC->id[0].dwTtlSectors;

    // init the TOC entry
    g_pTOC->id[dwEntry].dwVersion     = 0x001;
    g_pTOC->id[dwEntry].dwSignature   = dwSig;
    memset(g_pTOC->id[dwEntry].ucString, 0, IMAGE_STRING_LEN);
    g_pTOC->id[dwEntry].dwImageType   = dwImageType;
    g_pTOC->id[dwEntry].dwLoadAddress = dwImageStart;
    g_pTOC->id[dwEntry].dwJumpAddress = dwLaunchAddr;
    g_pTOC->id[dwEntry].dwStoreOffset = 0;
    g_pTOC->id[dwEntry].dwTtlSectors  = FILE_TO_SECTOR_SIZE(dwImageLength);
    // 1 contigious segment
    g_pTOC->id[dwEntry].sgList[0].dwSector = BLOCK_TO_SECTOR(IMAGE_START_BLOCK);
    g_pTOC->id[dwEntry].sgList[0].dwLength = g_pTOC->id[dwEntry].dwTtlSectors;

    TOC_Print();

    return TRUE;
}

//
// Retrieve EBOOT TOC from Nand.
//
BOOL TOC_Read(void)
{
    SectorInfo si;

    EdbgOutputDebugString("TOC_Read\r\n");

    if ( !g_bBootMediaExist ) {
        EdbgOutputDebugString("TOC_Read ERROR: no boot media\r\n");
        return FALSE;
    }

    if ( !FMD_ReadSector(TOC_SECTOR, (PUCHAR)g_pTOC, &si, 1) ) {
        EdbgOutputDebugString("TOC_Read ERROR: Unable to read TOC\r\n");
        return FALSE;
    }

    // is it a valid TOC?
    if ( !VALID_TOC(g_pTOC) ) {
        EdbgOutputDebugString("TOC_Read ERROR: INVALID_TOC Signature: 0x%x\r\n", g_pTOC->dwSignature);
        return FALSE;
    }

    // is it an OEM block?
    if ( (si.bBadBlock != BADBLOCKMARK) || (si.bOEMReserved & (OEM_BLOCK_RESERVED | OEM_BLOCK_READONLY)) ) {
        EdbgOutputDebugString("TOC_Read ERROR: SectorInfo verify failed: %x %x %x %x\r\n",
            si.dwReserved1, si.bOEMReserved, si.bBadBlock, si.wReserved2);
        return FALSE;
    }

    // invalidate TOC if Eboot version has been updated
    if (g_pTOC->id[0].dwVersion != ((EBOOT_VERSION_MAJOR << 16) | EBOOT_VERSION_MINOR))    
    {
        EdbgOutputDebugString("TOC_Read WARN: Eboot version mismatch: TOC->dwVersion: 0x%x , Expected: 0x%x\r\n", 
            g_pTOC->id[0].dwVersion, ((EBOOT_VERSION_MAJOR << 16) | EBOOT_VERSION_MINOR));
        EdbgOutputDebugString("Invalidating TOC for re-initializing.\r\n");
        return FALSE;
    }

    // update our boot config
    g_pBootCfg = &g_pTOC->BootCfg;

    // update our index
    g_dwTocEntry = g_pBootCfg->ImageIndex;

    // KITL enabled?
    g_bWaitForConnect = (g_pBootCfg->ConfigFlags & CONFIG_FLAGS_KITL) ? TRUE : FALSE;

    // cache image type
    g_ImageType = g_pTOC->id[g_dwTocEntry].dwImageType;

    EdbgOutputDebugString("-TOC_Read\r\n");

    return TRUE;

}
//
// Store EBOOT TOC to Nand
// BUGBUG: only uses 1 sector for now.
//
BOOL TOC_Write(void)
{
    SectorInfo si, si2;

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

    if ( !g_bBootMediaExist ) {
        EdbgOutputDebugString("TOC_Write WARN: no boot media\r\n");
        return FALSE;
    }

    // is it a valid TOC?
    if ( !VALID_TOC(g_pTOC) ) {
        EdbgOutputDebugString("TOC_Write ERROR: INVALID_TOC Signature: 0x%x\r\n", g_pTOC->dwSignature);

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲午夜三级在线| 欧美极品少妇xxxxⅹ高跟鞋 | 国产精品99精品久久免费| 亚洲一区欧美一区| 亚洲欧美一区二区三区国产精品| 久久美女高清视频| 久久久精品国产免大香伊| 精品国产乱码久久久久久1区2区 | 久久91精品国产91久久小草| 日本成人中文字幕在线视频| 亚洲一级二级三级| 午夜精品一区二区三区电影天堂| 亚洲国产精品影院| 天堂av在线一区| 日韩国产精品大片| 欧美a一区二区| 国产在线播放一区| 成人理论电影网| 色8久久精品久久久久久蜜| 91国在线观看| 欧美一区二区三区播放老司机| 69精品人人人人| 337p粉嫩大胆噜噜噜噜噜91av| 久久毛片高清国产| 亚洲激情六月丁香| 日韩精品视频网站| 国内久久精品视频| 91免费小视频| 日韩欧美国产综合在线一区二区三区| 欧美成人三级电影在线| 国产喷白浆一区二区三区| 亚洲欧美综合色| 日韩黄色片在线观看| 国产精品资源在线看| 色菇凉天天综合网| 日韩欧美高清一区| 亚洲视频免费看| 免费观看一级欧美片| 成人v精品蜜桃久久一区| 欧洲精品一区二区三区在线观看| 日韩欧美资源站| 亚洲人成电影网站色mp4| 日日欢夜夜爽一区| 成人永久aaa| 日韩一区二区免费在线观看| 国产精品国产精品国产专区不片| 日韩主播视频在线| 成人免费视频一区| 日韩亚洲电影在线| 樱桃国产成人精品视频| 国产精品影视天天线| 欧美日韩黄色影视| 亚洲欧洲综合另类| 国产一区二区福利| 91精品久久久久久久99蜜桃| 国产精品久久久久久户外露出| 日本三级韩国三级欧美三级| 99久久精品久久久久久清纯| 亚洲精品一区二区在线观看| 亚洲成人综合视频| 色哟哟一区二区在线观看 | 美女视频黄a大片欧美| 一本色道**综合亚洲精品蜜桃冫| 日韩精品最新网址| 香蕉久久一区二区不卡无毒影院| 国产福利不卡视频| 日韩精品一区二区三区在线观看 | 亚洲天堂中文字幕| 国产精品亚洲一区二区三区在线| 日韩精品中午字幕| 天堂蜜桃91精品| 精品视频一区二区不卡| 亚洲精品久久久蜜桃| 91女人视频在线观看| 一区在线播放视频| www.日韩精品| 中文字幕亚洲成人| 成人丝袜高跟foot| 亚洲天堂网中文字| 91在线云播放| 亚洲综合清纯丝袜自拍| 在线免费视频一区二区| 亚洲午夜免费视频| 欧美日韩免费高清一区色橹橹| 亚洲一卡二卡三卡四卡五卡| 在线视频国内一区二区| 午夜日韩在线观看| 日韩一区二区精品在线观看| 另类的小说在线视频另类成人小视频在线 | 日韩中文字幕亚洲一区二区va在线 | 男男gaygay亚洲| 欧美一级高清大全免费观看| 麻豆精品视频在线观看免费| 久久久久一区二区三区四区| 国产成人免费xxxxxxxx| 亚洲欧洲一区二区三区| 色综合天天在线| 午夜视频在线观看一区二区三区| 日韩欧美你懂的| 成人免费高清视频在线观看| 亚洲黄色在线视频| 91精选在线观看| 国产福利一区在线| 亚洲美腿欧美偷拍| 日韩午夜激情av| 成人小视频免费观看| 一区二区三区鲁丝不卡| 91麻豆精品国产91久久久久久 | 国产精品综合在线视频| 日韩毛片视频在线看| 在线播放欧美女士性生活| 久久国产婷婷国产香蕉| 欧美激情一二三区| 欧美日韩一区二区电影| 国内外成人在线| 亚洲国产精品久久久久婷婷884| 欧美一区二区三级| 波多野结衣视频一区| 日本亚洲一区二区| 亚洲欧美自拍偷拍色图| 91.com在线观看| www.亚洲国产| 精品一区二区三区av| 亚洲日本在线观看| 久久这里只精品最新地址| 欧美性大战久久| 国产91在线|亚洲| 免费欧美在线视频| 一区二区三区波多野结衣在线观看 | 亚洲欧美一区二区在线观看| 日韩免费视频一区| 欧美日韩一级片网站| jvid福利写真一区二区三区| 久久精品理论片| 亚洲mv大片欧洲mv大片精品| 国产精品黄色在线观看| 久久日韩精品一区二区五区| 欧美久久久久久久久| 色诱视频网站一区| www.色综合.com| 成人在线一区二区三区| 国内欧美视频一区二区| 日本成人在线一区| 日韩成人午夜精品| 亚洲国产日韩综合久久精品| **欧美大码日韩| 国产精品色一区二区三区| 精品国产乱码91久久久久久网站| 日韩一区二区三区在线观看| 欧美日韩一区二区在线观看视频| 在线看国产日韩| 在线免费观看不卡av| 一本久久综合亚洲鲁鲁五月天| 成人av集中营| 成人动漫中文字幕| 豆国产96在线|亚洲| 国产成人av电影在线观看| 国产乱码精品一区二区三区五月婷| 日韩高清不卡在线| 免费视频一区二区| 精品一区二区三区久久久| 韩国欧美一区二区| 国产一区二区三区av电影| 国产精品资源在线观看| 国产精品1024| 91色乱码一区二区三区| 日本精品一区二区三区四区的功能| 色猫猫国产区一区二在线视频| 91免费国产在线| 欧美无砖专区一中文字| 91精品国产91久久久久久最新毛片| 91精品国产欧美一区二区| 欧美成人video| 久久蜜桃香蕉精品一区二区三区| 国产欧美一区二区在线观看| 最新国产精品久久精品| 亚洲成a人在线观看| 日本免费在线视频不卡一不卡二| 另类小说综合欧美亚洲| 成人一区在线观看| 日本韩国一区二区| 日韩视频一区二区三区| 欧美国产日韩亚洲一区| 亚洲成在人线免费| 国产精品影视网| 欧美日韩精品二区第二页| 精品国精品自拍自在线| 自拍偷拍国产精品| 老司机精品视频线观看86| 成人av小说网| 91麻豆精品国产91久久久使用方法 | 成人精品小蝌蚪| 欧美日韩在线综合| 久久一日本道色综合| 亚洲精品国产视频| 精品一区二区三区视频在线观看 | 一区二区国产盗摄色噜噜| 蜜桃av一区二区在线观看| proumb性欧美在线观看| 欧美成人一级视频|