diff -r a179b74831c9 -r c1f20ce4abcf kerneltest/e32test/pci/t_pci.h --- a/kerneltest/e32test/pci/t_pci.h Thu Aug 19 11:14:22 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,254 +0,0 @@ -// Copyright (c) 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: This is the header file for the PCI driver test , so far implemented -// only on the Naviengine platform - -#ifndef __TPCI_TEST_H -#define __TPCI_TEST_H - -#ifndef __KERNEL_MODE__ -#define __E32TEST_EXTENSION__ -#include - #include -#endif // __KERNEL_MODE__ - -_LIT(KPciLdd, "d_pci.ldd"); -_LIT(KPciLddFactory, "PCI_test_factory"); -_LIT(KPciTest, "PCI Test LDD"); - -/** -Test driver op-codes -*/ -enum TPciTestCmd - { - EGetTestInfo, - EAccessConfigSpace, - EAccessMemorySpace, - EOpenPciDChunk, - EOpenPciPlatHwChunk, - EOpenPciMappedChunk, - EOpenPciWindowChunk, - ERunUnitTests - }; - -/** -Identifies a PCI Function (device) on the system -*/ -struct TPciDevice - { - TPciDevice() - :iVendorId(0xFFFFFFFF), iDeviceId(0xFFFFFFFF), iInstance(0) {} - - TPciDevice(TUint aVendorId, TUint aDeviceId, TInt aInstance=0) - :iVendorId(aVendorId), iDeviceId(aDeviceId), iInstance(aInstance) {} - - TUint iVendorId; - TUint iDeviceId; - TInt iInstance; ///< Unit to open (there could be multiple devices on system) - }; - -/** -Used to send chunk size and recieve -PCI address -*/ -struct TPciChunkCreateInfo - { - TPciChunkCreateInfo() - :iSize(0), iPciAddress(NULL) - { - } - - TPciChunkCreateInfo(TInt aSize, TUint& aPciAddress, TRequestStatus* aStatus=NULL) - :iSize(aSize), iPciAddress(&aPciAddress), iStatus(aStatus) - { - } - TInt iSize; - TUint* iPciAddress; - TRequestStatus* iStatus; - }; - -/** -Information about the PSL required by the -user side test -*/ -struct TPciTestInfo - { - TPciDevice iDevice; ///< Probe for this - - /** - Supplies the necessary information to test Read, Write, and - Modify for a word of PCI memory or configuration space - */ - struct TAddrSpaceTest - { - TAddrSpaceTest() - :iOffset(0), iExpectedValue(0), iReadOnlyMask(0) - {} - - TAddrSpaceTest(TUint aOffset, TUint aExpectedValue, TUint aReadOnlyMask) - :iOffset(aOffset), iExpectedValue(aExpectedValue), iReadOnlyMask(aReadOnlyMask) - {} - - /** - Returns a specified sub byte, or word from the whole dword - */ - inline TUint Expected(TInt aBitWidth, TInt aExtraOffset) const - { - //the right shift required to get field to bit 0 - const TInt shift = 8 *((aExtraOffset + iOffset) % 4); - - const TUint mask = 0xFFFFFFFF >> (32-aBitWidth); - return (iExpectedValue >> shift) & mask; - } - - const TUint iOffset; - const TUint iExpectedValue; ///< The initial value of word - const TUint iReadOnlyMask; ///< Mask of unwritable bits - //Future work, memory spaces should state a bar index - }; - - - TAddrSpaceTest iCfgSpaceRead; - TAddrSpaceTest iCfgSpaceWrite; - - TUint iMemSpaceIndex; ///< Memory space to select - TAddrSpaceTest iMemSpaceRead; - TAddrSpaceTest iMemSpaceWrite; - - TInt iNumberOfBars; ///< Number of simultaneous mappings into PCI space - }; - -class RPci; -class TAddrSpace; -/** -This class encapsulates all the various read/write/and modify commands -that can be carried out on a PCI memory space. The command is stored user -side, and then executed on kernel side when KRun() is called. -*/ -class TUserPciSpace - { -public: - TUserPciSpace() - :iPci(NULL), iOperation(EInvalid), iBitWidth(0), iOffset(0), - iWriteValue(0), iClearMask(0), iSetMask(0) - {} - TUserPciSpace(RPci& aPci); - - /** - Perform the encapsulated read/write/or modify - @note Only run on kernel side - */ - TUint KRun(TAddrSpace& aAddrSpace); - - /** - Clone method is required so that multiple threads may - have their own copy of a TUserPciSpace (without knowing - its runtime type) - */ - virtual TUserPciSpace* Clone() const = 0; - - TUint Read(TInt aBitWidth, TUint aOffset) - { - iOffset = aOffset; - iOperation = ERead; - iBitWidth = aBitWidth; - - return Call(); - } - - void Write(TInt aBitWidth, TUint aOffset, TUint aValue) - { - iOffset = aOffset; - iOperation = EWrite; - iBitWidth = aBitWidth; - - iWriteValue = aValue; - Call(); - } - - void Modify(TInt aBitWidth, TUint aOffset, TUint aClearMask, TUint aSetMask) - { - iOffset = aOffset; - iOperation = EModify; - iBitWidth = aBitWidth; - - iClearMask = aClearMask; - iSetMask = aSetMask; - Call(); - } - -protected: - /** - Makes a request to iPci and passes a copy of this object to - the kernel side. - */ - virtual TUint Call() =0; - - enum TOperation {EInvalid, ERead, EWrite, EModify}; - - /** - Pointer to a PCI device handle - */ - RPci* iPci; - - TOperation iOperation; //!< Type of access to perform - TInt iBitWidth; - - TUint iOffset; - TUint32 iWriteValue; - TUint32 iClearMask; - TUint32 iSetMask; - }; - -/** -Grants access to a PCI device's (identified -by aPci) config space from user side -*/ -class TUserConfigSpace : public TUserPciSpace - { -public: - TUserConfigSpace() - :TUserPciSpace() - {} - TUserConfigSpace(RPci& aPci); - - virtual TUserPciSpace* Clone() const; -private: - TUint Call(); - }; - -/** -Grants access to some region of a PCI -device's memory space. A PCI device(or function) -may have up to 8 distinct memory spaces -*/ -class TUserMemorySpace : public TUserPciSpace - { -public: - TUserMemorySpace() - :TUserPciSpace(), iBarIndex(-1) - {} - - TUserMemorySpace(RPci& aPci, TInt aBarIndex); - - virtual TUserPciSpace* Clone() const; - - inline TInt BarIndex() {return iBarIndex;} - -private: - TUint Call(); - - TInt iBarIndex; ///< Each PCI function may have up to 8 memory spaces - }; - -#endif //__TPCI_TEST_H