sl@0: /* sl@0: * Copyright (c) 2007-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: * sl@0: */ sl@0: sl@0: sl@0: /** sl@0: @file sl@0: @internalComponent sl@0: @released sl@0: */ sl@0: #ifndef __CRYPTOH4RNG__ sl@0: #define __CRYPTOH4RNG__ sl@0: #include "cryptojobs.h" sl@0: sl@0: class DCryptoH4Chan; sl@0: class DLddChanRandom; sl@0: class CryptoH4JobRandom : public CryptoJobRandom sl@0: { sl@0: public: sl@0: CryptoH4JobRandom(DLddChanRandom &aLddChanRandom); sl@0: virtual ~CryptoH4JobRandom(); sl@0: sl@0: virtual void SetDfcQ(TDfcQue *aDfcQue); sl@0: sl@0: virtual void SetDetails(DCryptoJobScheduler *aJobScheduler, MCryptoJobCallbacks *aCallbacks, sl@0: TUint32 aNumOfBytes); sl@0: sl@0: virtual void GetToPddBuffer(TUint8 * &aBuf, TUint32 &aBufLen, TBool &aMore); sl@0: virtual void BytesWrittenToPdd(TUint32 aBytes); sl@0: sl@0: virtual void GetFromPddBuffer(TUint8 * &aBuf, TUint32 &aBufLen, TBool &aMore); sl@0: virtual void BytesReadFromPdd(TUint32 aBytes); sl@0: sl@0: sl@0: private: sl@0: // Implementations of virtual base class methods to support DCryptoJobScheduler sl@0: virtual void DoSlice(TBool aFirstSlice); sl@0: virtual TBool DoSaveState(); sl@0: virtual void DoRestoreState(); sl@0: virtual void DoReleaseHw(); sl@0: sl@0: TInt BytesAvailable() const; sl@0: void RegionsAvailable(TUint8 * &aPtr1, TInt &aLen1, sl@0: TUint8 * &aPtr2, TInt &aLen2) const; sl@0: sl@0: DLddChanRandom &iLddChanRandom; sl@0: sl@0: // Details of job sl@0: TUint32 iRandomBuffer[64]; // Temporary buffer for PDD to write into sl@0: TInt iJobSizeInBytes; sl@0: TInt iSwReadByteOffset; sl@0: TInt iHw32Index; sl@0: sl@0: // Hook/enable unhook/disable ISR in top level OMAP h/w sl@0: // Done at job scheduling level sl@0: TBool iIsrHooked; sl@0: void HookIsr(); sl@0: void UnHookIsr(); sl@0: sl@0: // Enable/disable RNG ISR in Mask register sl@0: // Done for each byte of data. sl@0: inline void EnableIsr(); sl@0: inline void DisableIsr(); sl@0: sl@0: static void Isr(TAny *aPtr); sl@0: sl@0: static void RandomDfc(TAny* aPtr); sl@0: void DoRandomDfc(); sl@0: TDfc iRandomDfc; sl@0: }; sl@0: #endif