diff -r 675a964f4eb5 -r 35751d3474b7 cryptoplugins/cryptospiplugins/test/h4drv/crypto_h4/cryptoh4aes.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cryptoplugins/cryptospiplugins/test/h4drv/crypto_h4/cryptoh4aes.h Thu Sep 10 14:01:51 2009 +0300 @@ -0,0 +1,149 @@ +/* +* 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. +* +* Contributors: +* +* Description: +* +*/ + + +/** + @file + @internalComponent + @released +*/ +#ifndef __CRYPTOH4AES__ +#define __CRYPTOH4AES__ +#include "cryptojobs.h" +#include + +#define FAKE_DMA FakeDma + +//#define TDFC_WRAPPER + +#ifdef TDFC_WRAPPER +class TDfcWrapper : public TDfc + { +public: + TDfcWrapper(const TDfcWrapper &aOrig); + TDfcWrapper(TDfcFn aFunction, TAny* aPtr, TInt aPriority); + void Enque(); +private: + TDfcWrapper &operator=(const TDfcWrapper &aRHS); + void BaseEnque(); + static void DfcWrapperFunc(TAny* aPtr); + TDfcFn iRealFunction; + TAny *iRealPtr; + }; +#endif + +class DCryptoH4Chan; +class DLddChanAes; +class CryptoH4JobAes : public CryptoJobAes + { +public: + CryptoH4JobAes(DLddChanAes &aLddChanAes); + ~CryptoH4JobAes(); + + void SetDfcQ(TDfcQue *aDfcQue); + + virtual TUint8 *GetKeyBuffer(); // Max 32 bytes long (256bits) + virtual TUint8 *GetIVBuffer(); // 16 bytes long + virtual TUint32 MaxBytes() const; + virtual TUint8 *GetIOBuffer(); // MaxBytes() long + + virtual void GetToPddBuffer(TUint8 * &aBuf, TUint32 &aBufLen, TBool &aMore); + virtual void BytesWrittenToPdd(TUint32 aBytes); + + virtual void GetFromPddBuffer(TUint8 * &aBuf, TUint32 &aBufLen, TBool &aMore); + virtual void BytesReadFromPdd(TUint32 aBytes); + + // Must be called after setting the IV (if used) + virtual TInt SetDetails(DCryptoJobScheduler *aJobScheduler, + MCryptoJobCallbacks *aCallbacks, + TBool aEncrypt, + TInt aKeyLength, + RCryptoDriver::TChainingMode aMode); + virtual void NotifyReadRequestLength(TUint32 aReadRequestLength); + virtual void HwPerfCheck(); + +private: + // Implementations of virtual base class methods to support DCryptoJobScheduler + virtual void DoSlice(TBool aFirstSlice); + virtual TBool DoSaveState(); + virtual void DoRestoreState(); + virtual void DoReleaseHw(); + + void MaybeSetupWriteDmaToHw(); +#ifdef FAKE_DMA + void FakeDma(); +#endif + + DLddChanAes &iLddChanAes; + + // Details of job + TBool iEncrypt; + RCryptoDriver::TChainingMode iMode; + + TUint32 iKeyLengthBytes; + TUint32 iKey[8]; // 128, 192 or 256 bits + TUint32 iIV[4]; // 128 bits + TUint32 iSavedState[4]; // Used for CBC chaining + + TUint32 iReadRequestLength; + + // The AES data buffer + // TUint32 iAesBuffer[2*4+4]; // Temporary buffer 8 = 2x16 bytes blocks, +4 space (which never gets used) + TUint32 iAesBuffer[400*4+4]; // Temporary buffer 8 = 2x16 bytes blocks, +4 space (which never gets used) + // There are 4 indexes into the above buffer, and after converting + // all to bytes indexes, and allowing for wrapping the following + // condition should always hold iSwReadIndex <= iHwWriteIndex <= + // iHwReadIndex <= iSwWriteByteOffset + TInt32 iSwWriteByteOffset; + TInt32 iHwReadIndex; + TInt32 iHwWriteIndex; + TInt32 iSwReadByteOffset; + + TBool iHwRunning; + TInt iDmaToHwPending; + TInt iDmaFromHwPending; + +#ifdef FAKE_DMA + TInt iFakeDmaToHwQueued; + TInt iFakeDmaFromHwQueued; +#endif + + void SetupHw(TBool aUseSavedState); + void SetupDma(TUint32 aPtr, TBool aToHw); + void StopHw(); + static void DmaComplete(DDmaRequest::TResult aResult, TAny *aPtr); + + static void DmaToHwCompleteDfc(TAny* aPtr); + void DoDmaToHwCompleteDfc(); +#ifdef TDFC_WRAPPER + TDfcWrapper iDmaToHwCompleteDfc; +#else + TDfc iDmaToHwCompleteDfc; +#endif + + void CheckIndexes() const; + void CompareIndexes(const char *aName, TInt32 aP1, TInt32 aP2) const; + + static void DmaFromHwCompleteDfc(TAny* aPtr); + void DoDmaFromHwCompleteDfc(); +#ifdef TDFC_WRAPPER + TDfcWrapper iDmaFromHwCompleteDfc; +#else + TDfc iDmaFromHwCompleteDfc; +#endif + }; +#endif