kernel/eka/include/d32locd.h
changeset 0 a41df078684a
child 33 0173bcd7697c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/kernel/eka/include/d32locd.h	Mon Oct 19 15:55:17 2009 +0100
@@ -0,0 +1,662 @@
+// Copyright (c) 1995-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of the License "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// e32\include\d32locd.h
+// 
+// WARNING: This file contains some APIs which are internal and are subject
+//          to change without notice. Such APIs should therefore not be used
+//          outside the Kernel and Hardware Services package.
+//
+
+#ifndef __D32LOCD_H__
+#define __D32LOCD_H__
+#include <e32cmn.h>
+#include <partitions.h>
+
+
+/**
+@publishedPartner
+@released
+
+Local media IDs.
+
+A media ID is passed to LocDrv::RegisterMediaDevice() when registering
+a media driver with the local media subsystem.
+*/
+enum TMediaDevice { EFixedMedia0, EFixedMedia1, EFixedMedia2, EFixedMedia3,
+					EFixedMedia4, EFixedMedia5, EFixedMedia6, EFixedMedia7,
+					ERemovableMedia0, ERemovableMedia1, ERemovableMedia2, ERemovableMedia3,
+					EInvalidMedia
+				};
+
+#define __IS_REMOVABLE(aDevice) (aDevice>=ERemovableMedia0 && aDevice<=ERemovableMedia3)
+#define __IS_FIXED(aDevice) ((TUint)aDevice<=EFixedMedia7)
+#define MEDIA_DEVICE_IRAM EFixedMedia0
+#define MEDIA_DEVICE_LFFS EFixedMedia1
+#define MEDIA_DEVICE_NAND EFixedMedia2
+#define MEDIA_DEVICE_MMC ERemovableMedia0
+#define MEDIA_DEVICE_PCCARD ERemovableMedia1
+#define MEDIA_DEVICE_CSA ERemovableMedia2
+
+typedef signed int TSocket;
+
+class TLDriveAssignInfo
+/**
+No longer used
+@internalComponent
+@removed
+*/
+	{
+public:
+	TMediaDevice iDevice;
+	TInt iPriority;
+	};
+
+class TMediaDeviceAssignInfo
+/**
+No longer used
+@internalComponent
+@removed
+*/
+	{
+public:
+	TInt iFirstMedia;
+	TInt iLastMedia;	
+	};
+
+class TLocalDriveCaps
+/**
+Drives media capabilities fields
+
+@publishedPartner
+@released
+*/
+	{
+public:
+	IMPORT_C TLocalDriveCaps();
+public:
+	/**
+	Size of drive
+	
+	Note : This is the size of the partition, not the entire media.
+		   The entire media size can be obtained from TLocalDriveCapsV4::MediaSizeInBytes()
+	*/
+	TInt64 iSize;
+	/**
+	Media Type of drive
+	*/
+	TMediaType iType;
+	/**
+	Indicates state of battery if supported
+	*/
+	TBatteryState iBattery;
+	/**
+	Attributes of the drive
+	*/
+	TUint iDriveAtt;
+	/**
+	Attributes of underlying media 
+	*/
+	TUint iMediaAtt;
+	/**
+	Base address of media
+	*/
+    TUint8* iBaseAddress;
+	/**
+	Identity of the file system used for this media
+	*/
+	TUint16 iFileSystemId;
+	/**
+	Partition type of media
+	*/
+	TUint16	iPartitionType;
+	};
+typedef TPckgBuf<TLocalDriveCaps> TLocalDriveCapsBuf;
+//
+class TLocalDriveCapsV2 : public TLocalDriveCaps
+/**
+Extension to Capabilities fields mainly to support Nor flash
+
+@publishedPartner
+@released
+*/
+	{
+public:
+	/**
+	Number of hidden sectors on drive
+	*/
+	TUint iHiddenSectors;
+	/**
+	Size of erase unit on media
+	*/
+	TUint iEraseBlockSize;
+    };
+typedef TPckgBuf<TLocalDriveCapsV2> TLocalDriveCapsV2Buf;
+//
+
+
+
+/**
+This class is used to provide file system-specific parameters for media formatting.
+@see TInt RFormat::Open(RFs &aFs, const TDesC &aName, TUint aFormatMode, TInt &aCount, const TDesC8 &anInfo);"
+
+For example, for FAT file system it is possible to specify FAT type(12/16/32), 
+cluster size, number of FATs and number of reserved sectors. Note that not all 
+combinations of custom parameters can be compatible; some media types, like SD 
+can reject formatting with user-defined parameters.
+
+@publishedPartner
+@released
+
+*/
+class TLDFormatInfo
+	{
+public:
+    inline TLDFormatInfo();
+public:
+
+    TInt64 iCapacity;				///< Format Capacity
+	TUint16 iSectorsPerCluster;		///< Specified sectors per cluster
+	TUint16 iSectorsPerTrack;		///< Specified sectors per track
+	TUint16 iNumberOfSides;			///< Specified number of sides
+
+	enum TFATBits {EFBDontCare, EFB12 = 12, EFB16 = 16, EFB32 = 32};
+	TFATBits iFATBits;				///< Specified bits per fat table entry
+
+	TUint16 iReservedSectors;	///< Reserved sector count, required for SD card compliance
+	
+	// Flags field. Allows the number of FAT tables to be specified: set both bits to zero to use the default.
+	enum TFlags {EOneFatTable = 0x01, ETwoFatTables = 0x02};
+	TUint8 iFlags;
+
+	TUint8 iPad;				///< Padding for offset alignment  between kernel and user code
+
+	};
+typedef TPckgBuf<TLDFormatInfo> TSpecialFormatInfoBuf;
+
+
+//
+class TLocalDriveCapsV3 : public TLocalDriveCapsV2
+/**
+Extension to Capabilities fields mainly to support removable media format specifications
+
+@publishedPartner
+@released
+*/
+	{
+public:
+	/**
+	Format specification
+	*/
+	TLDFormatInfo iFormatInfo;
+	/**
+	Set if iFormatInfo is valid
+	*/
+	TBool iExtraInfo;
+	/**
+	*/
+	TInt iMaxBytesPerFormat;
+    };
+//The following ASSERTs checks for offset of any TInt64 member be a multiple of 8 as per DEF045510
+__ASSERT_COMPILE(_FOFF(TLocalDriveCaps,iSize)%8 == 0);
+__ASSERT_COMPILE(_FOFF(TLocalDriveCapsV3,iFormatInfo.iCapacity) % 8 == 0);
+
+
+typedef TPckgBuf<TLocalDriveCapsV3> TLocalDriveCapsV3Buf;
+//
+class TLocalDriveCapsV4 : public TLocalDriveCapsV3
+/**
+Extension to Capabilities fields mainly to support Nand flash
+
+@publishedPartner
+@released
+*/
+	{
+public:
+	union
+		{
+		/**
+		Number of blocks (for NAND flash)
+		 - The entire capacity of NAND media can be calculated using:
+		   capacity = iNumOfBlocks * iNumPagesPerBlock * iNumBytesMain
+		*/
+		TInt iNumOfBlocks;
+		/**
+		Number of sectors (for other types of media)
+		 - The entire capacity of sector based media can be calculated using:
+		   capacity = iNumberOfSectors * iSectorSizeInBytes
+		*/
+		TUint32 iNumberOfSectors;
+		};
+
+	/**
+	Number of pages per block
+	*/
+	TInt iNumPagesPerBlock;
+
+	union
+		{
+		/**
+		Number of Bytes in the main array (for NAND flash)
+		 - The entire capacity of NAND media can be calculated using:
+		   capacity = iNumOfBlocks * iNumPagesPerBlock * iNumBytesMain
+		*/
+		TInt iNumBytesMain;
+		/**
+		Number of Bytes in a sector (for other types of media)
+		 - The entire capacity of sector based media can be calculated using:
+		   capacity = iNumberOfSectors * iSectorSizeInBytes
+		*/
+		TUint32 iSectorSizeInBytes;
+		};
+
+	/**
+	Number of Bytes in the spare array
+	*/
+	TInt iNumBytesSpare;
+	/**
+	Effective usable blocks
+	*/
+	TInt iEffectiveBlks;
+	/**
+	Start page of drive
+	*/
+	TInt iStartPage;
+public:
+	inline TInt64 MediaSizeInBytes();
+    };
+typedef TPckgBuf<TLocalDriveCapsV4> TLocalDriveCapsV4Buf;
+//
+#define KMaxSerialNumLength 64
+typedef TBuf8<KMaxSerialNumLength> TMediaSerialNumber;
+class TLocalDriveCapsV5 : public TLocalDriveCapsV4
+/**
+Add serial number support for certain media.
+
+@publishedPartner
+@released
+*/
+	{
+public:
+	/**
+    Serial number buffer length, 0 if not supported
+	*/
+    TUint iSerialNumLength;
+	/**
+    Serial number buffer
+	*/
+	TUint8 iSerialNum[KMaxSerialNumLength];
+	};
+typedef TPckgBuf<TLocalDriveCapsV5> TLocalDriveCapsV5Buf;
+
+//
+/**
+Extension to Capabilities fields mainly to support reporting block size 
+information of underlying media.
+    
+@publishedPartner
+@released
+*/
+class TLocalDriveCapsV6 : public TLocalDriveCapsV5
+	{
+public:
+	/**
+	Block size information of underlying media is required to assist in chosing 
+	efficient size of buffers for reading and writing.
+	This information can also be accessed through the function
+	- RFs::VolumeIOParam
+
+	These functions retrieve this blocksize information by calling the media
+	driver's Caps() function.
+	*/
+    TUint 	iBlockSize;
+    
+private:
+    /**
+    Reserved space for future use.
+    */
+    TUint32	iSpare[4];
+	};
+typedef TPckgBuf<TLocalDriveCapsV6> TLocalDriveCapsV6Buf;
+
+
+class TLocalDriveCapsV7 : public TLocalDriveCapsV6
+/**
+Add control mode, object mode, partition size for M18 NOR Flash.
+*/
+	{
+public:
+    TUint32 iWriteBufferSize;
+	TUint32 iPartitionSize;
+    TUint32 iControlModeSize;
+    TUint32 iObjectModeSize;
+	};
+
+typedef TPckgBuf<TLocalDriveCapsV7> TLocalDriveCapsV7Buf;
+
+//
+class TFormatInfo
+/**
+Format information class
+
+@publishedPartner
+@released
+*/
+	{
+public:
+	IMPORT_C TFormatInfo();
+public:
+	TBool iFormatIsCurrent;
+	TInt i512ByteSectorsFormatted; 
+	TInt iMaxBytesPerFormat;
+	};
+//
+class TErrorInfo
+/**
+@internalTechnology
+  */
+	{
+public:
+	enum TReasonCode
+		{
+		ENoError=0,			//No error
+		EBadSector=1,	//Error due to corrupt sector
+		};
+public:
+    TReasonCode iReasonCode;
+	union
+		{
+		// holds position error occurred for KErrCorrupt
+		// It numerically equals number of bytes succesfully read/written during
+		// last disk operation.
+		TInt64 iErrorPos;
+        TInt iOtherInfo;
+		};
+    };
+typedef TPckgBuf<TErrorInfo> TErrorInfoBuf;
+//
+class TLocalDriveMessageData
+/**
+@internalTechnology
+*/
+	{
+public:
+	inline TLocalDriveMessageData()
+		{}
+	inline TLocalDriveMessageData(TInt64 aPos, TInt aLength, const TAny* aPtr, TInt aHandle, TInt anOffset, TInt aFlags)
+		: iPos(aPos), iLength(aLength), iPtr(aPtr), iHandle(aHandle), iOffset(anOffset), iFlags(aFlags)
+		{}
+public:
+	TInt64 iPos;
+	TInt iLength;
+	const TAny* iPtr;
+	TInt iHandle;
+	TInt iOffset;
+	TInt iFlags;
+	};
+
+class TLocalDriveControlIOData
+/**
+Control IO data class
+
+@internalTechnology
+*/
+	{
+public:
+	inline TLocalDriveControlIOData()
+		{}
+	inline TLocalDriveControlIOData(TInt aCommand, TAny* aParam1, TAny* aParam2, TInt aHandle)
+		: iCommand(aCommand), iParam1(aParam1), iParam2(aParam2), iHandle(aHandle)
+		{}
+	inline TLocalDriveControlIOData(TInt aCommand, TUint8* aBuf, TInt aParam, TInt aLength)
+		: iCommand(aCommand), iParam1(aBuf), iParam2((TAny*) aParam), iHandle(aLength)
+		{}
+public:
+	TInt iCommand;
+	TAny* iParam1;
+	TAny* iParam2;
+	TInt iHandle;
+	};
+
+class TLocalDrivePasswordData
+/**
+Password store for password protected media
+
+@internalTechnology
+*/
+	{
+public:
+	TLocalDrivePasswordData(const TDesC8& aOldPasswd, const TDesC8& aNewPasswd, TBool aStorePasswd)
+		: iOldPasswd(&aOldPasswd), iNewPasswd(&aNewPasswd), iStorePasswd(aStorePasswd)
+		{}
+	TLocalDrivePasswordData()
+		: iOldPasswd(&KNullDesC8), iNewPasswd(&KNullDesC8), iStorePasswd(EFalse)
+		{}
+public:
+	const TDesC8 *iOldPasswd;
+	const TDesC8 *iNewPasswd;
+	TBool iStorePasswd;
+	};
+typedef TPckgBuf<TLocalDrivePasswordData> TLocalDrivePasswordDataPckg;
+
+
+class TPasswordStore
+/**
+@internalTechnology
+*/
+	{
+public:
+	virtual TInt Init()=0;
+	virtual TInt ReadPasswordData(TDes8 &aBuf)=0;
+	virtual TInt WritePasswordData(TDesC8 &aBuf)=0;
+	virtual TInt PasswordStoreLengthInBytes()=0;
+	enum {EMaxPasswordLength=1024}; /**< Size of the password store write buffer, which may contain multiple password mappings */
+	};
+
+class TMountInfoData
+/**
+@internalTechnology
+*/
+	{
+public:
+	TDesC8* iInfo;
+	TAny* iThread;
+	};
+
+
+const TInt KLocalDriveMajorVersion=1;
+const TInt KLocalDriveMinorVersion=0;
+const TInt KLocalDriveBuildVersion=160;
+_LIT(KLitLocalDriveLddName,"LocDrv");
+
+const TInt KLocalMessageHandle=-1;
+
+
+enum TMediaPagingStats
+	{
+	EMediaPagingStatsAll,
+	EMediaPagingStatsRomAndCode = EMediaPagingStatsAll,	// @deprecated - use EMediaPagingStatsAll instead
+	EMediaPagingStatsRom,
+	EMediaPagingStatsCode,
+	EMediaPagingStatsDataIn,
+	EMediaPagingStatsDataOut,
+	};
+
+/**
+Paging media details - for testing purposes only
+This is a structure used to communicate paging-related information
+from the paging media driver to an application.
+
+@internalTechnology
+@prototype
+*/
+class TPageDeviceInfo
+	{
+public:
+	TInt	iReservoirBlockCount;	// number of blocks in replacement reservoir (used & unused)
+	TInt	iBadBlockCount;			// numer of bad blocks
+	};
+typedef TPckgBuf<TPageDeviceInfo> TPageDeviceInfoBuf;
+
+class RLocalDrive : public RBusLogicalChannel
+/**
+Interface class to local media
+
+@internalTechnology
+*/
+	{
+public:
+	enum TControl
+		{
+		EControlRead=0,							/**< Read request */
+		EControlWrite=1,						/**< Write request */
+		EControlCaps=2,							/**< Caps request */
+		EControlFormat=3,						/**< Format request */
+		EControlEnlarge=4,						/**< Enlarge drive request */
+		EControlReduce=5,						/**< Reduce Drive  request */
+		EControlForceMediaChange=6,				/**< Force media change request */
+		EControlMediaDevice=7,					/**< Return the media device request */
+		EControlPasswordLock=8,					/**< Password lock media request */
+		EControlPasswordUnlock=9,				/**< Password unlock media request */
+		EControlPasswordClear=10,				/**< Password clear request */
+		EControlNotifyChange=11,				/**< Notify change request */
+		EControlNotifyChangeCancel=12,			/**< Notify change cancel request */
+		EControlReadPasswordStore=13,			/**< Read password request */
+		EControlWritePasswordStore=14,			/**< Write password request */
+		EControlPasswordStoreLengthInBytes=15,	/**< Password request */
+		EControlIsRemovable=16,					/**< Query removable request */
+		EControlSetMountInfo=17,				/**< Set mount info request */
+		EControlControlIO=18,					/**< Control IO request */
+		EControlPasswordErase=19,				/**< Password erase media request */
+		EControlDeleteNotify=20,				/**< Delete notification */
+		EControlGetLastErrorInfo=21,			/**< Get last error info request */
+		EControlQueryDevice=22,					/**< Query device  request*/
+		};
+
+	enum TRemountFlags
+		{
+		ELocDrvRemountNotifyChange	   = 0,		/**< Notify clients of media change but don't remount */
+		ELocDrvRemountForceMediaChange = 1,		/**< Notify clients of media change and remount	*/
+		};
+
+	enum TReadWriteFlags
+		{
+		ELocDrvMetaData					= 0x80000000,	/**< Set if read/write request is for metadata */
+		ELocDrvWholeMedia				= 0x40000000	/**< Set to access whole media, rather than partition */
+		};
+
+	enum TQueryDevice
+		{ 
+		// Symbian publishedPartner range
+		EQuerySymbianPublishedPartnerFirst	= 0x0000,
+		EQuerySymbianPublishedPartnerLast	= 0x3FFF,
+		
+		// Symbian test range
+		EQuerySymbianTestFirst				= 0x4000,
+		EQuerySymbianTestLast				= 0x7FFF,
+		
+		// Licensee range
+		EQueryLicenseeFirst					= 0x8000,
+		EQueryLicenseeLast					= 0xBFFF,
+		
+		EQueryPageDeviceInfo = EQuerySymbianTestFirst,	/**< @see TPageDeviceInfo */
+		};
+public:
+	inline TVersion VersionRequired() const;
+	inline TInt Connect(TInt aDriveNumber, TBool& aChangedFlag);
+	inline TInt Enlarge(TInt aLength);
+	inline TInt Reduce(TInt aPos, TInt aLength);
+	inline TInt Read(TInt64 aPos, TInt aLength, const TAny* aTrg, TInt aMessageHandle, TInt aOffset, TInt aFlags);
+	inline TInt Read(TInt64 aPos, TInt aLength, const TAny* aTrg, TInt aMessageHandle, TInt anOffset);
+	inline TInt Read(TInt64 aPos, TInt aLength, TDes8& aTrg);
+	inline TInt Write(TInt64 aPos, TInt aLength, const TAny* aSrc, TInt aMessageHandle, TInt aOffset, TInt aFlags);
+	inline TInt Write(TInt64 aPos, TInt aLength, const TAny* aSrc, TInt aMessageHandle, TInt anOffset);
+	inline TInt Write(TInt64 aPos, const TDesC8& aSrc);
+	inline TInt Caps(TDes8& anInfo);
+	inline TInt Format(TInt64 aPos, TInt aLength);
+	inline TInt ForceMediaChange(TInt aMode=0);
+	inline void NotifyChange(TRequestStatus* aStatus);
+	inline void NotifyChangeCancel();
+	inline TInt SetMountInfo(const TDesC8* aInfo,TInt aMessageHandle);
+	inline TMediaDevice MediaDevice();
+	inline TInt IsRemovable(TInt& aSocketNum);
+	inline TInt ControlIO(TInt aCommand, TAny* aParam1, TAny* aParam2);
+	inline TInt ControlIO(TInt aCommand, TDes8& aBuf, TInt aParam);
+	inline TInt ControlIO(TInt aCommand, TDesC8& aBuf, TInt aParam);
+	inline TInt ControlIO(TInt aCommand, TInt aParam1, TInt aParam2);
+	inline TInt Unlock(const TDesC8& aPassword, TBool aStorePassword);
+	inline TInt SetPassword(const TDesC8& aOldPassword, const TDesC8& aNewPassword, TBool aStorePassword);
+	inline TInt Clear(const TDesC8& aPassword);
+	inline TInt ErasePassword();
+	inline TInt ReadPasswordData(TDesC8& aStoreData);
+	inline TInt WritePasswordData(const TDesC8& aStoreData);
+	inline TInt PasswordStoreLengthInBytes();
+	inline TInt DeleteNotify(TInt64 aPos, TInt aLength);
+	inline TInt GetLastErrorInfo(TDesC8& aErrorInfo);
+	inline TInt QueryDevice(TQueryDevice aQueryDevice, TDes8 &aBuf);
+	};
+//
+#ifndef __KERNEL_MODE__
+class TBusLocalDrive : public RLocalDrive
+/**
+@internalTechnology
+*/
+	{
+public:
+	IMPORT_C TBusLocalDrive();
+	IMPORT_C TInt Connect(TInt aDriveNumber, TBool& aChangedFlag);
+	IMPORT_C void Disconnect();
+	IMPORT_C TInt Enlarge(TInt aLength);
+	IMPORT_C TInt ReduceSize(TInt aPos, TInt aLength);
+	IMPORT_C TInt Read(TInt64 aPos,TInt aLength,const TAny* aTrg,TInt aMessageHandle,TInt aOffset,TInt aFlags);
+	IMPORT_C TInt Read(TInt64 aPos,TInt aLength,const TAny* aTrg,TInt aMessageHandle,TInt anOffset);
+	IMPORT_C TInt Read(TInt64 aPos,TInt aLength,TDes8& aTrg);
+	IMPORT_C TInt Write(TInt64 aPos,TInt aLength,const TAny* aSrc,TInt aMessageHandle,TInt aOffset,TInt aFlags);
+	IMPORT_C TInt Write(TInt64 aPos,TInt aLength,const TAny* aSrc,TInt aMessageHandle,TInt anOffset);
+	IMPORT_C TInt Write(TInt64 aPos,const TDesC8& aSrc);
+	IMPORT_C TInt Caps(TDes8& anInfo);
+	IMPORT_C TInt Format(TFormatInfo& anInfo);
+	IMPORT_C TInt Format(TInt64 aPos,TInt aLength);
+	IMPORT_C TInt SetMountInfo(const TDesC8* aMountInfo,TInt aMessageHandle);
+	IMPORT_C TInt ForceRemount(TUint aFlags=0);
+	IMPORT_C TInt ControlIO(TInt aCommand, TAny* aParam1, TAny* aParam2);
+	IMPORT_C TInt ControlIO(TInt aCommand, TDes8& aBuf, TInt aParam);
+	IMPORT_C TInt ControlIO(TInt aCommand, TDesC8& aBuf, TInt aParam);
+	IMPORT_C TInt ControlIO(TInt aCommand, TInt aParam1, TInt aParam2);
+
+	IMPORT_C TInt Unlock(const TDesC8& aPassword, TBool aStorePassword);
+	IMPORT_C TInt SetPassword(const TDesC8& aOldPassword, const TDesC8& aNewPassword, TBool aStorePassword);
+	IMPORT_C TInt Clear(const TDesC8& aPassword);
+	IMPORT_C TInt ErasePassword();
+	IMPORT_C TInt ReadPasswordData(TDes8 &aBuf);
+	IMPORT_C TInt WritePasswordData(const TDesC8 &aBuf);
+	IMPORT_C TInt PasswordStoreLengthInBytes();
+	IMPORT_C TInt DeleteNotify(TInt64 aPos, TInt aLength);
+	IMPORT_C TInt GetLastErrorInfo(TDes8& aErrorInfo);
+
+	IMPORT_C TInt QueryDevice(TQueryDevice aQueryDevice, TDes8 &aBuf);
+
+public:
+	inline TInt& Status() {return(iStatus);}
+private:
+	TInt CheckMount();
+private:
+	TInt iStatus;
+	};
+#endif
+
+#define _LOCKABLE_MEDIA
+
+#include <d32locd.inl>
+#endif
+