sl@0: // Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies). sl@0: // All rights reserved. sl@0: // This component and the accompanying materials are made available sl@0: // under the terms of the License "Eclipse Public License v1.0" sl@0: // which accompanies this distribution, and is available sl@0: // at the URL "http://www.eclipse.org/legal/epl-v10.html". sl@0: // sl@0: // Initial Contributors: sl@0: // Nokia Corporation - initial contribution. sl@0: // sl@0: // Contributors: sl@0: // sl@0: // Description: sl@0: // e32\include\drivers\crashflashnand.h sl@0: // sl@0: // WARNING: This file contains some APIs which are internal and are subject sl@0: // to change without notice. Such APIs should therefore not be used sl@0: // outside the Kernel and Hardware Services package. sl@0: // sl@0: sl@0: #ifndef __CRASHFLASHNAND_H__ sl@0: #define __CRASHFLASHNAND_H__ sl@0: #include sl@0: sl@0: class TPib; sl@0: class TPibExtension; sl@0: sl@0: /** sl@0: The maximum number of bytes in a nand flash main array sl@0: @internalTechnology sl@0: */ sl@0: const TUint KCFNandMaxBytesMain = 512; sl@0: sl@0: /** sl@0: An implementation of the CrashFlash interface for nand flash. sl@0: @internalTechnology sl@0: */ sl@0: class CrashFlashNand : public CrashFlash sl@0: { sl@0: public: sl@0: //From CrashFlash sl@0: virtual TInt Initialise(); sl@0: virtual void StartTransaction(); sl@0: virtual void EndTransaction(); sl@0: virtual void Write(const TDesC8& aDes); sl@0: virtual void WriteSignature(const TDesC8& aDes); sl@0: virtual void Read(TDes8& aDes); sl@0: virtual void SetReadPos(TUint aPos); sl@0: virtual void SetWritePos(const TUint aPos); sl@0: virtual void EraseLogArea(); sl@0: virtual void EraseFlashBlock(const TUint aBlock); sl@0: virtual TUint BytesWritten(); sl@0: #ifdef _CRASHLOG_COMPR sl@0: virtual TUint GetOutputLimit(void); sl@0: virtual TUint GetLogOffset(void); sl@0: #endif sl@0: sl@0: public: sl@0: /** @publishedPartner sl@0: @released */ sl@0: virtual TInt GetDeviceId(TUint8& aDeviceId, TUint8& aManufacturerId)=0; sl@0: /** @publishedPartner sl@0: @released */ sl@0: virtual TInt DeviceRead(const TUint aPageAddress, TAny* aBuf, const TUint aLength)=0; sl@0: /** @publishedPartner sl@0: @released */ sl@0: virtual TInt DeviceWrite(const TUint aPageAddress, TAny* aBuf, const TUint aLength)=0; sl@0: /** @publishedPartner sl@0: @released */ sl@0: virtual TInt DeviceErase(const TUint aBlockAddress)=0; sl@0: public: sl@0: /** @publishedPartner sl@0: @released */ sl@0: TUint iNumPagesPerBlock; sl@0: /** @publishedPartner sl@0: @released */ sl@0: TUint iNumBytesMain; sl@0: /** @publishedPartner sl@0: @released */ sl@0: TUint iNumBytesSpare; sl@0: /** @publishedPartner sl@0: @released */ sl@0: TUint iNumReservoirBlocks; sl@0: /** @publishedPartner sl@0: @released */ sl@0: TUint iNumBlocks; sl@0: /** @publishedPartner sl@0: @released */ sl@0: TUint iNumBytesPage; sl@0: sl@0: protected: sl@0: /** @publishedPartner sl@0: @released */ sl@0: virtual TInt VariantInitialise()=0; sl@0: sl@0: private: sl@0: TInt InitialiseFlashParameters(const TUint8 aDevId, const TUint8 aManId); sl@0: TInt ReadPib(TPib& aPib, TPibExtension& aPibExtension, TUint& aLastGoodBlock); sl@0: TInt ParsePib(TPib& aPib, TPibExtension& aPibExt); sl@0: void DoWriteRead(); sl@0: void DoWrite(); sl@0: void DoRead(); sl@0: private: sl@0: TBool iIs16Bit; sl@0: TUint8 iLogWordSize; sl@0: sl@0: TUint iCrashLogStartBlock; sl@0: TUint iNumCrashLogBlocks; sl@0: sl@0: TUint iWriteBufIndex; sl@0: TUint iReadBufIndex; sl@0: TUint iWritePageIndex; sl@0: TUint iReadPageIndex; sl@0: TUint iWriteTotal; sl@0: sl@0: TUint8 iWriteBuf[KCFNandMaxBytesMain]; sl@0: TUint8 iReadBuf[KCFNandMaxBytesMain]; sl@0: }; sl@0: sl@0: #endif