sl@0: /* sl@0: * Copyright (c) 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 "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: Contains TDmaCapability and associated definitions. sl@0: * These are used by the DMA tests in test_cases.cpp to express dependancies sl@0: * on various DMA controller/channel capabilities sl@0: * sl@0: */ sl@0: #ifndef __CAP_REQS_H__ sl@0: #define __CAP_REQS_H__ sl@0: sl@0: #include sl@0: sl@0: /** sl@0: The various types of requirement on a sl@0: value that can be specified by a TDmaCapability sl@0: */ sl@0: enum TCapsReqType sl@0: { sl@0: EEqual, EGTE /* >= */, ELTE /* <= */, EBitsSet, EBitsClear sl@0: }; sl@0: sl@0: /** sl@0: Enumerates all the various DMA channel capabilities sl@0: */ sl@0: enum TCapsReq sl@0: { sl@0: ENone, sl@0: EChannelPriorities, sl@0: EChannelPauseAndResume, sl@0: EAddrAlignedToElementSize, sl@0: E1DAddressing, sl@0: E2DAddressing, sl@0: ESynchronizationTypes, sl@0: EBurstTransactions, sl@0: EDescriptorInterrupt, sl@0: EFrameInterrupt, sl@0: ELinkedListPausedInterrupt, sl@0: EEndiannessConversion, sl@0: EGraphicsOps, sl@0: ERepeatingTransfers, sl@0: EChannelLinking, sl@0: EHwDescriptors, sl@0: ESrcDstAsymmetry, sl@0: EAsymHwDescriptors, sl@0: EBalancedAsymSegments, sl@0: EAsymCompletionInterrupt, sl@0: EAsymDescriptorInterrupt, sl@0: EAsymFrameInterrupt, sl@0: EPilVersion, sl@0: }; sl@0: sl@0: enum TResult {ERun=0, ESkip=1, EFail=2}; //The ordering of these should not be changed sl@0: sl@0: struct SDmacCaps; sl@0: struct TDmacTestCaps; sl@0: sl@0: /** sl@0: Represents a requirement for some DMA capability sl@0: to be either present or not present, less than, equal to, or sl@0: greater than some value, or to have certain bits in a mask sl@0: set or unset. sl@0: */ sl@0: struct TDmaCapability sl@0: { sl@0: TDmaCapability() sl@0: :iCapsReq(ENone), iCapsReqType(EEqual), iValue(ETrue), iFail(EFalse) sl@0: {} sl@0: sl@0: TDmaCapability(TCapsReq aReq, TCapsReqType aReqType, TUint aValue, TBool aFail) sl@0: :iCapsReq(aReq), iCapsReqType(aReqType), iValue(aValue), iFail(aFail) sl@0: {} sl@0: sl@0: static void SelfTest(); sl@0: sl@0: /** sl@0: Compares the requirements held in the struct sl@0: against those described in aChannelCaps and makes a decision sl@0: as to whether this test case should be run, skipped, or failed. sl@0: */ sl@0: TResult CompareToDmaCaps(const SDmacCaps& aChannelCaps) const; sl@0: TResult CompareToDmaCaps(const TDmacTestCaps& aChannelCaps) const; sl@0: sl@0: private: sl@0: TBool RequirementSatisfied(const SDmacCaps& aChannelCaps) const; sl@0: TBool RequirementSatisfied(const TDmacTestCaps& aChannelCaps) const; sl@0: sl@0: TBool TestValue(TUint aValue) const; sl@0: sl@0: public: sl@0: TCapsReq iCapsReq; sl@0: TCapsReqType iCapsReqType; sl@0: TUint iValue; sl@0: // if HW capability is not available:- sl@0: // ETrue - Fail the test sl@0: // EFalse - Skip the test sl@0: TBool iFail; sl@0: }; sl@0: sl@0: //A set of DMA capability requirements sl@0: const TDmaCapability none(ENone, EEqual, 0, ETrue); sl@0: sl@0: const TDmaCapability pauseRequired(EChannelPauseAndResume, EEqual, ETrue, ETrue); sl@0: const TDmaCapability pauseRequired_skip(EChannelPauseAndResume, EEqual, ETrue, EFalse); sl@0: const TDmaCapability pauseNotWanted(EChannelPauseAndResume, EEqual, EFalse, ETrue); sl@0: sl@0: const TDmaCapability hwDesNotWanted(EHwDescriptors, EEqual, EFalse, ETrue); sl@0: const TDmaCapability hwDesNotWanted_skip(EHwDescriptors, EEqual, EFalse, EFalse); sl@0: const TDmaCapability hwDesWanted(EHwDescriptors, EEqual, ETrue, ETrue); sl@0: const TDmaCapability hwDesWanted_skip(EHwDescriptors, EEqual, ETrue, EFalse); sl@0: sl@0: const TDmaCapability cap_2DRequired(E2DAddressing, EEqual, ETrue, EFalse); sl@0: sl@0: const TDmaCapability capEqualV1(EPilVersion, EEqual, 1, EFalse); sl@0: const TDmaCapability capEqualV2(EPilVersion, EEqual, 2, EFalse); sl@0: const TDmaCapability capEqualV2Fatal(EPilVersion, EEqual, 2, ETrue); sl@0: sl@0: const TDmaCapability capAboveV1(EPilVersion, EGTE, 2, EFalse); sl@0: const TDmaCapability capBelowV2(EPilVersion, ELTE, 1, EFalse); sl@0: #endif // #ifdef __CAP_REQS_H__