📄 drvflash.h
字号:
/*****************************************************************************
* Copyright Statement:
* --------------------
* This software is protected by Copyright and the information contained
* herein is confidential. The software may not be copied and the information
* contained herein may not be used or disclosed except with the written
* permission of MediaTek Inc. (C) 2005
*
* BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND AGREES
* THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK SOFTWARE")
* RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE PROVIDED TO BUYER ON
* AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY DISCLAIMS ANY AND ALL WARRANTIES,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE IMPLIED WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR NONINFRINGEMENT.
* NEITHER DOES MEDIATEK PROVIDE ANY WARRANTY WHATSOEVER WITH RESPECT TO THE
* SOFTWARE OF ANY THIRD PARTY WHICH MAY BE USED BY, INCORPORATED IN, OR
* SUPPLIED WITH THE MEDIATEK SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH
* THIRD PARTY FOR ANY WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO
* NOT BE RESPONSIBLE FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S
* SPECIFICATION OR TO CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
*
* BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
* LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL BE,
* AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT ISSUE,
* OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY BUYER TO
* MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
*
* THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
* WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT OF
* LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING THEREOF AND
* RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN FRANCISCO, CA, UNDER
* THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE (ICC).
*
*****************************************************************************/
/*******************************************************************************
*
* Filename:
* ---------
* FlashConf.C
*
* Project:
* --------
* MAUI
*
* Description:
* ------------
* This file is used to configure flash device for FAT.
*
* Author:
* -------
* -------
*
*==============================================================================
* HISTORY
* Below this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
*------------------------------------------------------------------------------
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
* removed!
*
* removed!
* removed!
*
*------------------------------------------------------------------------------
* Upper this line, this part is controlled by PVCS VM. DO NOT MODIFY!!
*==============================================================================
*******************************************************************************/
#ifndef DRVFLASH_H
#define DRVFLASH_H
#include "flash_opt.h"
#ifdef FLASH_DISKDRV_DEBUG
#define ONE_BYTE_ALIGN_ADS
#endif
// MTD driver
#define REGION_NUM 8
#define NON_BLOCK_STATUS (0x8) //4 bit pattern for version check
//FOR FDM5
#define INVALID_BLOCK_ID 0xffff
#define INVALID_TABLE_ID 0xffff
#define INVALID_LOGICAL_NUM 0xffffff
#define INVALID_NOR_ADDR 0xffffffff
#define INVALID_PHY_PAGE 0xffffffff
#define INVALID_ENTRY 0xffff
//FOR FDM4
#define INVALID_BLOCK_INDEX 0xFFFFFFFF
#define INVALID_SECTOR_INDEX 0xFFFFFFFF
#define INVALID_ERASE_COUNT 0x00FFFFFF // we only have 24 bits
#define MAX_ERASE_COUNT (INVALID_ERASE_COUNT-1)
/* Global defines */
#define SPARE_RESERVED_RATIO (10)
#define MINIMUM_SPARE_AMOUNT (3)
#define SLEEP_MODE_SPARE_AMOUNT (4)
#define GC_THRESHOLD_DIVISION (3)
#define GC_THRESHOLD_GAP (1)
/******** RESULT for Single Bank ************/
#define RESULT_FLASH_DONE (1)
#define RESULT_FLASH_BUSY (0)
#define RESULT_FLASH_FAIL (-1)
#ifndef __MTK_TARGET__
#pragma pack(1)
#endif
typedef ONE_BYTE_ALIGN_ADS struct {
DWORD TotalBlocks;
DWORD BlockSize[REGION_NUM];
#if defined(__SINGLE_BANK_NOR_FLASH_SUPPORT__)
DWORD AvailInRegion[REGION_NUM]; /*empty and the number of blocks in erase queue*/
#endif
UINT RegionBlocks[REGION_NUM];
UINT ActualRegionNum;
} NOR_MTD_FlashInfo;
#ifndef __MTK_TARGET__
#pragma pack()
#endif
typedef struct {
int (* MountDevice) (void * DriveData, void * Info);
int (* ShutDown) (void * DriveData);
void * (* MapWindow) (void * DriveData, DWORD BlockIndex, DWORD WindowIndex);
int (* EraseBlock) (void * DriveData, DWORD BlockIndex);
int (* ProgramData) (void * DriveData, void * Address, void * Data, UINT Length);
int (*NonBlockEraseBlock) (void * DriveData, DWORD BlockIndex); /* Added by Eric */
int (*CheckDeviceReady) (void * DriveData, DWORD BlockIndex); /* Added by Eric */
int (*SuspendErase) (void * DriveData, DWORD BlockIndex); /* Added by Eric */
int (*ResumeErase) (void * DriveData, DWORD BlockIndex); /* Added by Eric */
int (*BlankCheck) (void * DriveData, DWORD BlockIndex);
int (*OTPAccess) (void * DriveData, int accesstype, UINT Offset, void * BufferPtr, UINT Length);
int (*OTPQueryLength) (void * DriveData, UINT *Length);
int (*LockEraseBlkAddr) (void * DriveData, void *Address,UINT Action);
kal_bool (*IsEraseSuspended) (void * DriveData, DWORD BlockIndex);
} NOR_MTD_Driver;
/*LockEraseBlkAddr Action*/
#define ACTION_UNLOCK 0
#define ACTION_LOCK 1
#define ACTION_ERASE 2
// This is the file MTD for testing only
typedef struct {
const char * FileName;
DWORD FileSize;
DWORD BlockSize;
DWORD WindowSize;
HANDLE H;
BYTE * BaseAddr;
void * CurrAddr;
} NORMtdFileData;
// Flash Info
typedef struct {
DWORD BlockSize;
DWORD RegionBlocks;
} FlashRegionInfo;
#define EndRegionInfo {0, 0}
typedef struct {
DWORD BankSize;
DWORD Banks;
} FlashBankInfo;
#define EndBankInfo {0, 0}
// Erase block Info
typedef struct {
DWORD BlockIndex;
DWORD EraseCount;
} NOR_EraseInfo;
#if defined(__SINGLE_BANK_NOR_FLASH_SUPPORT__)
// address look up buffer
#define LOOKUP_TABLE_SIZE (8)
typedef struct {
DWORD BlockIndex;
DWORD BaseAddress;
} NOR_AddrLookup;
#endif
typedef struct {
DWORD Signature;
BYTE * BaseAddr;
FlashRegionInfo * RegionInfo;
BYTE * CurrAddr;
FlashBankInfo *BankInfo;
BYTE * CurrBankAddr;
DWORD CurrBankSize;
BYTE * CurrPollAddr;
#ifndef __MTK_TARGET__
const char *FileName;
void *flash_device;
BYTE *rootMTDcache;
BYTE *MTDcache;
DWORD first;
DWORD last_WinAddr;
DWORD last_region;
#endif
#if defined(__SINGLE_BANK_NOR_FLASH_SUPPORT__)
NOR_AddrLookup lookup_tbl[LOOKUP_TABLE_SIZE][2];
#endif
} NOR_Flash_MTD_Data;
#ifndef __MTK_TARGET__
#ifndef FLASH_DISKDRV_DEBUG
#define MakeMtdFlashData(a, b) 0x0, 0x000000, b, NULL, "..\\..\\fs\\flash_device.img", NULL, NULL, NULL
#else
#define MakeMtdFlashData(a, b) 0x0, 0x000000, b, NULL, "..\\flash_device.img", NULL, NULL, NULL
#endif
#else
#define MakeMtdFlashData(a, b) a, b, NULL
#endif
/* Multi-sector Protection Entry */
#ifndef __MTK_TARGET__
#pragma pack(1)
#endif
#if defined(__SINGLE_BANK_NOR_FLASH_SUPPORT__)
/* Erase queue data structure */
typedef ONE_BYTE_ALIGN_ADS struct {
kal_uint32 head;
kal_uint32 tail;
kal_uint32* queue;
} NOR_EraseQueue;
/* Flash state maintainence */
typedef enum
{
NOR_IN_READY = 0xF0,
NOR_IN_PROGRAM,
NOR_IN_SUSPENDED_PROGRAM,
NOR_IN_ERASE,
NOR_IN_SUSPENDED_ERASE,
NOR_IN_ERROR
} NOR_Flash_State;
extern NOR_Flash_State FlashState;
#define Query_Flash_State(a) \
{\
a = FlashState; \
}
#define Set_Flash_State(a) \
{\
FlashState = a; \
}
#endif /* __SINGLE_BANK_NOR_FLASH_SUPPORT__ */
typedef ONE_BYTE_ALIGN_ADS struct {
DWORD LogicalSectorID;
DWORD PysicalSectorID_new;
} MS_ENTRY;
#define MSTABLE_ENTRY_NUM 16
// Flash driver's data
typedef ONE_BYTE_ALIGN_ADS struct {
DWORD TotalFATSectors;
NOR_MTD_Driver * MTDDriver;
void * MTDData;
WORD *AvailSectorsInBlock;
WORD *ValidSectorsInBlock;
NOR_MTD_FlashInfo FlashInfo;
DWORD HeaderSize[REGION_NUM]; // offset to first sector data in flash block
DWORD SectorsPerBlock[REGION_NUM];
DWORD ActiveBlock;
DWORD ReclaimEraseCount;
DWORD ReclaimBlockID;
DWORD TotalPhysicalSectors;
DWORD PartitionSectors;
#if defined(__SINGLE_BANK_NOR_FLASH_SUPPORT__)
DWORD GCHighThreshold;
DWORD GCMiddleThreshold;
DWORD GCLowThreshold;
DWORD GCBlockSectors;
#else
DWORD GCThreshold;
#endif
DWORD AvailSectors;
DWORD DeletedSectors;
DWORD StartSector;
DWORD Sectors;
DWORD SectorsLeft;
DWORD BLOCKID_OFFSET;
DWORD SECTORIDX_MASK;
DWORD PHY_SECTOR_OFFSET;
DWORD MS_count;
MS_ENTRY MSEntryTable[MSTABLE_ENTRY_NUM];
BYTE *SectorMap;
BYTE *Buffer;
#if defined(__SINGLE_BANK_NOR_FLASH_SUPPORT__)
BYTE BlockInErase;
WORD queueSize;
WORD eraseItems;
NOR_EraseInfo *EraseQueue;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -