--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/kernel/eka/drivers/usbho/usbdi_utils/zerocopymetadata.h Mon May 03 13:47:38 2010 +0300
@@ -0,0 +1,152 @@
+// Copyright (c) 2007-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.
+//
+// Description:
+//
+
+/**
+ @file
+ @internalComponent
+*/
+
+#ifndef ZEROCOPYMETADATA_H
+#define ZEROCOPYMETADATA_H
+
+#include <e32def.h>
+
+// The type used to represent an address various betwen user and kernel
+// mode. To aid us we use a macro to produce only one definition.
+#ifndef __KERNEL_MODE__
+#define TAddrType TUint8*
+#else // __KERNEL_MODE__
+#define TAddrType TLinAddr
+#endif // __KERNEL_MODE__
+
+
+NONSHARABLE_CLASS(UsbZeroCopyChunkHeaderBase)
+ {
+public:
+ static inline RUsbTransferDescriptor::TTransferType& TransferType(TAddrType aBase, TInt aHeaderOffset);
+protected:
+ enum THeaderBaseSizes
+ {
+ ETransferTypeSize = sizeof(RUsbTransferDescriptor::TTransferType)
+ };
+ enum THeaderBaseLayout
+ {
+ ETransferType = 0,
+ // End of fields
+ EHeaderBaseSize = ETransferType + ETransferTypeSize
+ };
+ };
+
+
+NONSHARABLE_CLASS(UsbZeroCopyBulkIntrChunkHeader) : public UsbZeroCopyChunkHeaderBase
+ {
+public:
+ static inline TInt HeaderSize();
+
+ static inline TInt& DataOffset(TAddrType aBase, TInt aHeaderOffset);
+ static inline TInt& DataLength(TAddrType aBase, TInt aHeaderOffset);
+ static inline TInt& DataMaxLength(TAddrType aBase, TInt aHeaderOffset);
+ static inline RUsbTransferDescriptor::TZlpStatus& ZlpStatus(TAddrType aBase, TInt aHeaderOffset);
+private:
+ enum THeaderSizes
+ {
+ EDataOffsetSize = sizeof(TInt),
+ EDataLengthSize = sizeof(TInt),
+ EDataMaxLengthSize = sizeof(TInt),
+ EZlpStatusSize = sizeof(RUsbTransferDescriptor::TZlpStatus)
+ };
+ enum THeaderLayout
+ {
+ EDataOffset = EHeaderBaseSize,
+ EDataLength = EDataOffset + EDataOffsetSize,
+ EDataMaxLength = EDataLength + EDataLengthSize,
+ EZlpStatus = EDataMaxLength + EDataMaxLengthSize,
+ // End of fields
+ EHeaderSize = EZlpStatus + EZlpStatusSize
+ };
+ };
+
+
+NONSHARABLE_CLASS(UsbZeroCopyIsocChunkHeader) : public UsbZeroCopyChunkHeaderBase
+ {
+public: // Lengths Array constants
+ static const TInt KLengthsElementSize = sizeof(TUint16);
+ static const TInt KResultsElementSize = sizeof(TInt);
+public:
+ static inline TInt HeaderSize();
+
+ static inline TInt& FirstElementOffset(TAddrType aBase, TInt aHeaderOffset);
+ static inline TInt& MaxNumPackets(TAddrType aBase, TInt aHeaderOffset);
+ static inline TInt& MaxPacketSize(TAddrType aBase, TInt aHeaderOffset);
+ static inline TInt& LengthsOffset(TAddrType aBase, TInt aHeaderOffset);
+ static inline TInt& ReqLenOffset(TAddrType aBase, TInt aHeaderOffset);
+ static inline TInt& ResultsOffset(TAddrType aBase, TInt aHeaderOffset);
+private:
+ enum THeaderSizes
+ {
+ EFirstElementOffsetSize = sizeof(TInt),
+ EMaxNumPacketsSize = sizeof(TInt),
+ EMaxPacketSizeSize = sizeof(TInt),
+ ELengthsOffsetSize = sizeof(TInt),
+ EReqLenOffsetSize = sizeof(TInt),
+ EResultsOffsetSize = sizeof(TInt)
+ };
+ enum THeaderLayout
+ {
+ EFirstElementOffset = EHeaderBaseSize,
+ EMaxNumPackets = EFirstElementOffset + EFirstElementOffsetSize,
+ EMaxPacketSize = EMaxNumPackets + EMaxNumPacketsSize,
+ ELengthsOffset = EMaxPacketSize + EMaxPacketSizeSize,
+ EReqLenOffset = ELengthsOffset + ELengthsOffsetSize,
+ EResultsOffset = EReqLenOffset + EReqLenOffsetSize,
+ // End of fields
+ EHeaderSize = EResultsOffset + EResultsOffsetSize
+ };
+ };
+
+
+NONSHARABLE_CLASS(UsbZeroCopyIsocChunkElement)
+ {
+public:
+ // NumOfPackets constants
+ static const TInt KInvalidElement = -1;
+ // NextElementOffset constants
+ static const TInt KEndOfList = -1;
+public:
+ static inline TInt ElementSize();
+
+ static inline TInt& DataOffset(TAddrType aBase, TInt aHeaderOffset);
+ static inline TInt& NumPackets(TAddrType aBase, TInt aHeaderOffset);
+ static inline TInt& NextElementOffset(TAddrType aBase, TInt aHeaderOffset);
+private:
+ enum THeaderSizes
+ {
+ EDataOffsetSize = sizeof(TInt),
+ ENumPacketsSize = sizeof(TInt),
+ ENextElementOffsetSize = sizeof(TInt),
+ };
+ enum THeaderLayout
+ {
+ EDataOffset = 0,
+ ENumPackets = EDataOffset + EDataOffsetSize,
+ ENextElementOffset = ENumPackets + ENumPacketsSize,
+ // End of fields
+ EElementSize = ENextElementOffset + ENextElementOffsetSize
+ };
+ };
+
+#include "zerocopymetadata.inl"
+
+#undef TAddrType // Prevent the macro from leaking outside this header
+
+#endif // ZEROCOPYMETADATA_H