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

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

?? amd.cpp

?? EP9315開發(fā)板的Wince6.0的BSP包文件
?? CPP
?? 第 1 頁 / 共 3 頁
字號:
//**********************************************************************
//                                                                      
// Filename: amd.cpp
//                                                                      
// Description: FLASH Media Driver Interface for AMD StrataFlash Chip
//
// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF
// ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO
// THE IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
// PARTICULAR PURPOSE.
//
// Use of this source code is subject to the terms of the Cirrus 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 
// EULA.RTF on your install media.
//
// Copyright(c) Cirrus Logic Corporation 2005, All Rights Reserved
//                                                                      
//**********************************************************************

#include <fmd.h>
#include <ceddk.h>
#ifdef READ_FROM_REGISTRY
#include <ddkreg.h>
#endif    // READ_FROM_REGISTRY.
#include <hwdefs.h>
#include "strata.h"

/*----------------------------------------------------------------------------------------------------*/
static BOOL g_bPairedFlash = TRUE;        // Indicates whether or not two flash parts are paired to create a 32-bit data interface.
static BOOL g_bXIPMode = FALSE;
static SysRegionInfo_t    g_FlashRegion[IntelRegionNUM];
/*---------------------------------------------------------------------------------------------------*/
BOOLEAN InitializeFlash(volatile ULONG * pChipBaseAddress, ULONG ChipFlashLength,volatile ULONG * pBaseAddress, ULONG FlashLength);

DWORD DoBufferedWrite(volatile ULONG ulBlockAddress,
                      volatile SECTOR_ADDR physicalSectorAddr,
                      PUCHAR pBuffer,
                      USHORT NumWriteBytes);



BOOL  GetEraseFlashSectorIndex(ULONG dwStartAddr)
{
   DWORD i,j,dwEraseLen;

   dwEraseLen = dwStartAddr;

	if(dwEraseLen==0)
	{
		return TRUE;
	}

	for(i = 0; i <g_FMDInfo.Geometry.NumEraseBlocks; i++) 
	{
		for(j = 0; j< g_FlashRegion[i].blocks; j++) 
		{

			if(dwEraseLen > g_FlashRegion[i].block_size) 
			{
				dwEraseLen = dwEraseLen - g_FlashRegion[i].block_size;
			} 
			else if(dwEraseLen ==g_FlashRegion[i].block_size)
			{
				g_FMDInfo.gdwCurEraseRegion = i;
				g_FMDInfo.gdwCurEraseBlock   = j;
				//RETAILMSG(ZONE_TEST, (TEXT(" = block_size =%x.i=%x,j=%x\r\n"),g_FlashRegion[i].block_size,i,j));
				return TRUE;
			}
			else 
			{
				g_FMDInfo.gdwCurEraseRegion = i;
				g_FMDInfo.gdwCurEraseBlock   = j;
				RETAILMSG(ZONE_TEST, (TEXT(" < block_size =%x.i=%x,j=%x\r\n"),g_FlashRegion[i].block_size,i,j));
				return FALSE;
			}

		}
    }

   return FALSE;

}


/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Function:       FMD_Init()

Description:    Initializes the Flash memory device.

Returns:        Boolean indicating success.
------------------------------------------------------------------------------*/
PVOID FMD_Init(LPCTSTR lpActiveReg, PPCI_REG_INFO pRegIn, PPCI_REG_INFO pRegOut)
{
    volatile ULONG * pBaseAddress = NULL;
	volatile ULONG * pChipBaseAddress = NULL;
    ULONG FlashLength = 0,ChipFlashLength=0;

    BOOL bLastMode;
	
    RETAILMSG(1, (TEXT("INFO: FMD_Init. amd like\r\n")));
	
#ifdef READ_FROM_REGISTRY
    if (lpActiveReg != NULL)
    {
        DDKWINDOWINFO dwi;
        HKEY hConfig;

        // Get flash information from the registry.
        hConfig = OpenDeviceKey((LPCTSTR)lpActiveReg);        
        if (hConfig == NULL)
        {
            RETAILMSG(ZONE_TEST, (TEXT("ERROR: FMD_Init: OpenDeviceKey failed.\r\n")));
            return(NULL);
        }
        dwi.cbSize = sizeof(dwi);
        if (GetWindowInfo(hConfig, &dwi) != ERROR_SUCCESS)
        {
            RETAILMSG(ZONE_TEST, (TEXT("ERROR: FMD_Init: DDKReg_GetWindowInfo() failed.\r\n")));
            return(NULL);
        }
        // The first memory window contains the base address and length of our flash part.
        if (dwi.dwNumMemWindows)
        {
            pBaseAddress = (volatile ULONG *)(dwi.memWindows[1].dwBase);
            FlashLength  = (ULONG)(dwi.memWindows[1].dwLen);

            pChipBaseAddress = (volatile ULONG *)(dwi.memWindows[0].dwBase);
            ChipFlashLength  = (ULONG)(dwi.memWindows[0].dwLen);
        }
    }
#else
    // Get flash base address and length from caller.
    if (!pRegIn || !pRegIn->MemBase.Num || !pRegIn->MemLen.Num)
    {
        RETAILMSG(ZONE_TEST, (TEXT("ERROR: FMD_Init: invalid flash memory base and/or length specified by caller.\r\n")));
        return(NULL);
    }
    else
    {
        pBaseAddress = (volatile ULONG *)pRegIn->MemBase.Reg[1];
        FlashLength  = pRegIn->MemLen.Reg[1];

        pChipBaseAddress = (volatile ULONG *)pRegIn->MemBase.Reg[0];
        ChipFlashLength  = pRegIn->MemLen.Reg[0];
    }
#endif    // READ_FROM_REGISTRY.

    // Run in kernel mode.
//    bLastMode = SetKMode(TRUE);

//
//resetting the smc interface
//
//	SetSMCInterface();

    // Identify the flash part and collect device information.
    //
	
    if (!InitializeFlash(pChipBaseAddress,ChipFlashLength,pBaseAddress, FlashLength))
    {
        RETAILMSG(ZONE_TEST, (TEXT("ERROR: FMD_Init: Failed to initialize flash.\r\n")));
//        SetKMode(bLastMode);
        return(NULL);
    }

    RETAILMSG(ZONE_TEST, (TEXT("INFO: FMD_Init: Flash Address=0x%x  Length=0x%x.\r\n"), (ULONG)pBaseAddress, FlashLength));

//  SetKMode(bLastMode);
    return((PVOID)pBaseAddress);
}


/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Function:       FMD_ReadSector()

Description:    Reads the requested sector data and/or sector metadata from the
                Flash media.

Notes:          Notice that although each byte of a NOR Flash block is individually
                addressable, the media is still logically broken up into sectors.  
                Thus, for each sector request, we must determine where this data
                resides in the respective Flash block (see note above).

                By default, the NOR Flash is configured in READ ARRAY MODE so there
                is no need to set any control lines to access the media.  The data
                can just be read directly from the media (like RAM).
                
Returns:        Boolean indicating success.
------------------------------------------------------------------------------*/
BOOL  FMD_ReadSector(SECTOR_ADDR startSectorAddr, LPBYTE pSectorBuff, PSectorInfo pSectorInfoBuff, DWORD dwNumSectors)
{
    volatile SECTOR_ADDR  physicalSectorAddr = 0;
    volatile ULONG ulBlockAddress = 0;
    BLOCK_ID blockID = 0;
    DWORD i = 0;
    unsigned int j;
    BOOL bLastMode;

	RETAILMSG(ZONE_TEST, (TEXT("FMD_ReadSector: (startAdd =%x num=%x) sectot_addr=%x,sector_info %x.\r\n"),startSectorAddr,dwNumSectors,
									pSectorBuff,pSectorInfoBuff));
    //----- 1. Check the input parameters -----
    //         NOTE: The FAL insures that the starting sector address is in the allowable range.
    if((dwNumSectors == 0) || ((pSectorBuff == NULL) && (pSectorInfoBuff == NULL)))
    {
        return(FALSE);
    }
    //----- 2. Process the read request(s)... -----
//  bLastMode = SetKMode(TRUE);
    
    for(i = startSectorAddr ; i < (startSectorAddr + dwNumSectors) ; i++)
    {
        //----- Determine the block this physical sector resides in -----
        blockID = (i / g_FMDInfo.SectorsPerBlock);

        //----- Compute the physical address for the requested -----
        // Note we do this differently based on whether the caller wants us to read the sector information structure as well.  Since we're
        // dealing with a NOR flash which is XIP-able, one might want to use this function to read from an XIP region (i.e., no sector information
        // structures in flash).
        //
        if (!g_bXIPMode)
            physicalSectorAddr = g_FMDInfo.BaseAddress + i*(SECTOR_SIZE + sizeof(SectorInfo)) + (blockID * g_FMDInfo.UnusedBytesPerBlock);
        else
            physicalSectorAddr = g_FMDInfo.BaseAddress + (i*SECTOR_SIZE);
		
        ulBlockAddress = (ULONG)(physicalSectorAddr - (physicalSectorAddr % g_FMDInfo.BlockSize));

		if(GetEraseFlashSectorIndex(ulBlockAddress-g_FMDInfo.ChipBaseAddress)==FALSE)
		{
			  RETAILMSG(ZONE_TEST, (TEXT("ERASE Block error,not aligned\r\n")));
			return FALSE;
		}
		
		RETAILMSG(ZONE_TEST, (TEXT("blockID=%x,physicalSectorAddr=%x,g_bXIPMode=%x,ulBlockAddress=%x,g_FMDInfo.gdwCurEraseRegion=%x,gdwCurEraseBlock=%x.\r\n"),
							blockID,physicalSectorAddr,g_bXIPMode,ulBlockAddress,g_FMDInfo.gdwCurEraseRegion,g_FMDInfo.gdwCurEraseBlock));

		if(g_FlashRegion[g_FMDInfo.gdwCurEraseRegion].block_size==g_FMDInfo.BlockSize)
		{  
			RETAILMSG(ZONE_TEST, (TEXT("1 \r\n")));

			WRITE_COMMAND(g_FMDInfo.ChipBaseAddress, AMD_RESET);


			RETAILMSG(ZONE_TEST, (TEXT("2 \r\n")));

			//----- Read the necessary sector data -----
			if(pSectorBuff)
			{
				memcpy(pSectorBuff, (CONST PVOID)physicalSectorAddr, SECTOR_SIZE);
				pSectorBuff += SECTOR_SIZE;
			}
				
			RETAILMSG(ZONE_TEST, (TEXT("3 \r\n")));

			//----- Read the necessary SectorInfo data (metadata) -----
			if(!g_bXIPMode && pSectorInfoBuff)
			{
				// The metadata bytes are read directly into the SectorInfo structure...
				memcpy(pSectorInfoBuff, (CONST PVOID)(physicalSectorAddr+SECTOR_SIZE), sizeof(SectorInfo));
				pSectorInfoBuff += sizeof(SectorInfo);
			}
		
			RETAILMSG(ZONE_TEST, (TEXT("read sector %x\r\n"),physicalSectorAddr,ulBlockAddress));
		}
		else
		{
			for(j = g_FMDInfo.gdwCurEraseBlock; j< g_FlashRegion[g_FMDInfo.gdwCurEraseRegion].blocks; j++) 
			{
				WRITE_COMMAND(g_FMDInfo.ChipBaseAddress, AMD_RESET);
				ulBlockAddress = ulBlockAddress +g_FlashRegion[g_FMDInfo.gdwCurEraseRegion].block_size;
			}

			//----- Read the necessary sector data -----
			if(pSectorBuff)
			{
				memcpy(pSectorBuff, (CONST PVOID)physicalSectorAddr, SECTOR_SIZE);
				pSectorBuff += SECTOR_SIZE;
			}

			//----- Read the necessary SectorInfo data (metadata) -----
			if(!g_bXIPMode && pSectorInfoBuff)
			{
				// The metadata bytes are read directly into the SectorInfo structure...
				memcpy(pSectorInfoBuff, (CONST PVOID)(physicalSectorAddr+SECTOR_SIZE), sizeof(SectorInfo));
				pSectorInfoBuff += sizeof(SectorInfo);
			}
		}
    }
//    SetKMode(bLastMode);

	RETAILMSG(ZONE_TEST, (TEXT("FMD_ReadSector: over.\r\n") ));
    return(TRUE);
}


/*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Function:       FMD_WriteSector()

Description:    Writes the requested sector data and/or sector metadata to the
                Flash media.

Notes:          Notice that although each byte of a NOR Flash block is individually
                addressable, the media is still logically broken up into sectors.
                Thus, for each sector request, we must determine where to put the
                data in each respective Flash block (see note above).

                By default, the NOR Flash is configured in READ ARRAY MODE we need
                to set some control lines to prepare for the WRITE operation.

Returns:        Boolean indicating success.
------------------------------------------------------------------------------*/
BOOL  FMD_WriteSector(SECTOR_ADDR startSectorAddr, LPBYTE pSectorBuff, PSectorInfo pSectorInfoBuff, DWORD dwNumSectors)
{
    volatile SECTOR_ADDR physicalSectorAddr = 0;
    BLOCK_ID blockID = 0;
    DWORD i = 0;
    DWORD j = 0;
    DWORD k = 0;
    volatile ULONG ulBlockAddress = 0;
    BOOL bLastMode;
    DWORD dwBusWidth = g_bPairedFlash ? sizeof(ULONG) : sizeof(USHORT);
    LPBYTE pBuffer = pSectorBuff;
    USHORT usBufferSize = g_bPairedFlash ? (1 << g_FMDInfo.Geometry.WriteBuffSize) * 2 : (1 << g_FMDInfo.Geometry.WriteBuffSize);
    BOOL fRet = FALSE;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产成人午夜高潮毛片| 欧美三片在线视频观看| 欧美三级乱人伦电影| 2020国产精品自拍| 亚洲成av人片一区二区梦乃| 国产91精品精华液一区二区三区 | 欧美吻胸吃奶大尺度电影| 精品成人一区二区三区| 亚洲综合视频在线| 99久久久无码国产精品| 国产人妖乱国产精品人妖| 美洲天堂一区二卡三卡四卡视频| 91久久精品一区二区三区| 国产精品美女一区二区三区| 久久福利视频一区二区| 欧美一级一区二区| 日韩制服丝袜先锋影音| 欧美日韩精品久久久| 一区二区三区在线观看国产| 99久久精品国产毛片| 国产精品久久二区二区| 国产成+人+日韩+欧美+亚洲| 国产亚洲短视频| 国产精选一区二区三区| 国产亚洲精品bt天堂精选| 国产一区二区三区精品视频| 精品国产一区久久| 极品少妇一区二区| 久久人人超碰精品| 国产精品一区二区三区四区 | 国产精品二三区| av男人天堂一区| 亚洲欧美aⅴ...| 欧美亚洲国产一区在线观看网站| 亚洲午夜视频在线观看| 欧美二区三区91| 蜜桃av一区二区| 精品99久久久久久| 粉嫩嫩av羞羞动漫久久久| 国产精品久久久久久妇女6080 | 国产成人福利片| 国产精品欧美一级免费| 91视频xxxx| 天天做天天摸天天爽国产一区| 在线看一区二区| 日韩精品欧美精品| 久久嫩草精品久久久久| 99re成人精品视频| 亚洲成人7777| 精品国产乱码久久久久久浪潮| 成人亚洲一区二区一| 亚洲综合色噜噜狠狠| 日韩一区二区三区高清免费看看| 国产精品综合久久| 亚洲免费观看高清| 日韩欧美国产综合在线一区二区三区 | 久久99久久99精品免视看婷婷| 久久精品人人做人人爽97| 99在线精品视频| 日本三级亚洲精品| 国产精品久久网站| 国产三级精品在线| 色94色欧美sute亚洲线路二| 日本成人超碰在线观看| 国产精品久久久久aaaa樱花| 欧美日韩久久一区| 国产69精品久久久久777| 一区二区三区四区蜜桃| 精品国产乱码久久久久久免费 | 欧美va亚洲va在线观看蝴蝶网| 日本道免费精品一区二区三区| 蜜臀精品久久久久久蜜臀| 中文字幕av资源一区| 欧美久久久一区| 成年人网站91| 激情欧美一区二区| 亚洲国产成人av| 国产精品乱人伦| 精品国产区一区| 精品婷婷伊人一区三区三| 成人免费三级在线| 激情深爱一区二区| 日韩高清在线电影| 亚洲黄色小视频| 国产精品蜜臀在线观看| 欧美大白屁股肥臀xxxxxx| 色哦色哦哦色天天综合| 成人午夜免费av| 久久精品国产亚洲a| 亚洲不卡在线观看| 一级日本不卡的影视| 中文字幕制服丝袜一区二区三区| 精品动漫一区二区三区在线观看 | 91蜜桃免费观看视频| 九色综合国产一区二区三区| 视频一区视频二区在线观看| 一区二区三区免费| 亚洲品质自拍视频| 自拍偷拍国产亚洲| 国产精品白丝在线| 成人欧美一区二区三区白人 | 99久久精品免费观看| 国产传媒久久文化传媒| 韩国欧美一区二区| 久久99国产精品尤物| 九九**精品视频免费播放| 日本欧美一区二区三区乱码| 午夜精品久久久久久久久久久 | 国产成人自拍高清视频在线免费播放| 日本大胆欧美人术艺术动态| 久久99国产精品麻豆| 视频一区二区欧美| 免费成人av资源网| 久久99久久精品| 国产高清亚洲一区| 大胆欧美人体老妇| 99久久伊人网影院| 在线区一区二视频| 欧美日韩一区二区三区免费看 | 麻豆精品视频在线观看免费| 秋霞影院一区二区| 精品午夜一区二区三区在线观看 | 欧美三级在线播放| 欧美精品乱码久久久久久按摩| 欧美乱妇20p| 26uuu精品一区二区| 国产蜜臀av在线一区二区三区| 国产精品黄色在线观看| 亚洲男人天堂一区| 日韩福利电影在线观看| 国产麻豆一精品一av一免费 | 精品99999| 国产女人aaa级久久久级| 综合久久一区二区三区| 亚洲va欧美va人人爽| 久久成人麻豆午夜电影| 豆国产96在线|亚洲| 欧美日韩中文字幕一区二区| 日韩一区二区精品在线观看| 国产网红主播福利一区二区| 亚洲精品ww久久久久久p站| 美腿丝袜亚洲三区| 成人av网在线| 欧美一卡二卡在线| 国产精品久久久久久久久免费丝袜 | 欧美极品xxx| 香蕉av福利精品导航| 九色综合狠狠综合久久| 色国产精品一区在线观看| 日韩一区二区三区视频| 综合久久久久久| 久久精品国产精品亚洲综合| 一本大道久久a久久精二百| 日韩精品一区二区三区中文精品| 国产精品久久99| 美国毛片一区二区三区| 99vv1com这只有精品| 日韩午夜在线影院| 亚洲女人小视频在线观看| 精品一区二区三区在线观看国产| 91精彩视频在线观看| 国产视频亚洲色图| 日韩av网站免费在线| 一本色道久久综合亚洲aⅴ蜜桃 | 最新成人av在线| 韩国女主播一区二区三区| 欧美性大战久久久久久久 | 91欧美激情一区二区三区成人| 日韩欧美中文字幕一区| 亚洲激情综合网| av电影天堂一区二区在线| 欧美v日韩v国产v| 日韩中文字幕麻豆| 日本高清不卡一区| 亚洲欧洲av在线| 成人一区二区三区在线观看| 日韩欧美国产一二三区| 日韩精品视频网站| 欧美日韩另类国产亚洲欧美一级| 亚洲私人黄色宅男| 成人国产视频在线观看| 久久久久亚洲综合| 久久国产生活片100| 日韩一区二区麻豆国产| 日本欧美韩国一区三区| 欧美日韩亚洲丝袜制服| 亚洲制服丝袜在线| 在线看国产一区| 一二三四社区欧美黄| 欧美亚洲免费在线一区| 亚洲一区二区欧美激情| 日本韩国精品一区二区在线观看| 亚洲欧洲美洲综合色网| av不卡免费电影| 亚洲区小说区图片区qvod| 91视频一区二区三区| 伊人一区二区三区| 欧美人体做爰大胆视频| 日韩成人精品在线观看| 精品久久久久久久久久久久久久久久久|