diff -r 0bf4040442f9 -r 46fffbe7b5a7 kernel/eka/include/kernel/kernel.h --- a/kernel/eka/include/kernel/kernel.h Fri Jan 22 11:03:55 2010 +0200 +++ b/kernel/eka/include/kernel/kernel.h Tue Jan 26 13:13:38 2010 +0200 @@ -890,6 +890,7 @@ class DLogicalDevice; class DPhysicalDevice; class TShPoolCreateInfo; +class TKernelMapObject; class Kern /** @@ -912,6 +913,23 @@ ETimeSet_AsyncNotify = 8, /**< Asynchronously trigger change notifiers*/ ETimeSet_Secure = 16 /**< Set the secure clock (implies ETimeSet_SetHwRtc)*/ }; + /** + Attributes that can be set on new kernel mapping objects created via Kern::CreateKernelMapObject(). + + @see Kern::CreateKernelMapObject() + */ + enum TKernelMapAttributes + { + /** + Set this flag to create a read only kernel mapping object. When set DMA + operations to memory mapped by the mapping object must not write to the + memory mapped, i.e. the only DMA operations must be DMA copied into H/W. + Setting this flag may improve the performance if the memory the + kernel mapping object maps is paged out. + */ + EKernelMap_ReadOnly = 1, + EKernelMap_ValidMask = EKernelMap_ReadOnly, /**<@internalComponent*/ + }; public: IMPORT_C static void Printf(const char* aFmt, ...); IMPORT_C static TInt AddHalEntry(TInt aId, THalFunc aFunc, TAny* aPtr); @@ -1155,7 +1173,11 @@ IMPORT_C static TInt PinPhysicalMemory(TPhysicalPinObject* aPinObject, TLinAddr aStart, TUint aSize, TBool aReadOnly, TPhysAddr& aAddress, TPhysAddr* aPages, TUint32& aMapAttr, TUint& aColour, DThread* aThread=NULL); IMPORT_C static TInt UnpinPhysicalMemory(TPhysicalPinObject* aPinObject); // prototype IMPORT_C static TInt DestroyPhysicalPinObject(TPhysicalPinObject*& aPinObject); // prototype - + + IMPORT_C static TInt CreateKernelMapObject(TKernelMapObject*& aMapObject, TUint aMaxReserveSize=0); + IMPORT_C static TInt MapAndPinMemory(TKernelMapObject* aMapObject, DThread* aThread, TLinAddr aStart, TUint aSize, TUint aMapAttributes, TLinAddr& aKernelAddr, TPhysAddr* aPages=NULL); + IMPORT_C static void UnmapAndUnpinMemory(TKernelMapObject* aMapObject); + IMPORT_C static void DestroyKernelMapObject(TKernelMapObject*& aMapObject); IMPORT_C static TInt ShPoolCreate(TShPool*& aPool, TShPoolCreateInfo& aInfo, TBool aMap, TUint aFlags); IMPORT_C static TInt ShPoolOpen(TShPool*& aPool, DThread* aThread, TInt aHandle, TBool aMap, TUint aFlags);