diff -r 000000000000 -r a41df078684a kerneltest/e32test/nkernsa/interrupts.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/kerneltest/e32test/nkernsa/interrupts.h Mon Oct 19 15:55:17 2009 +0100 @@ -0,0 +1,155 @@ +// Copyright (c) 2005-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: +// \e32test\nkernsa\interrupts.h +// +// + +/** + @file + @internalTechnology +*/ + +#ifndef __INTERRUPTS_H__ +#define __INTERRUPTS_H__ +#include + +#undef IMPORT_C +#define IMPORT_C /* */ + +/************************************************* + * Interrupt handling + *************************************************/ +typedef void (*TIsr)(TAny*); + + + + +/** +A class that exports interrupt functionality to device drivers and +other kernel-side code. + +Although Symbian OS defines this class, it does not implement it; +an implementation for each of the functions defined by this class must +be provided by the Variant in the baseport. + +Note that the class only provides the public API for using interrupts, +not for dispatching them. +*/ +class Interrupt + { +public: + + + /** + Associates the specified interrupt service routine (ISR) function with + the specified interrupt Id. + + This is also known as binding the interrupt. + + When the ISR is called, the value aPtr is passed as the argument. + ISR may either be a bare function or a static class member, taking TAny* parameter: + @code + void Isr(TAny* aParam) + @endcode + + Note that you must call Interrupt::Enable() before you can start + receiving interrupts. + + @param anId The interrupt Id. + @param anIsr The address of the ISR function. + @param aPtr 32-bit value that is passed to the ISR. + This is designated a TAny* type as it is usually a pointer to + the owning class or data to be used in the ISR, although + it can be any 32-bit value. + + @return KErrNone, if successful; KErrArgument, if anId is invalid; + KErrInUse, if the ISR is already bound to this interrupt. + */ + IMPORT_C static TInt Bind(TInt anId, TIsr anIsr, TAny* aPtr); + + + /** + Unbinds the interrupt service routine (ISR) function from + the specified interrupt id. + + @param anId The interrupt Id. + + @return KErrNone, if successful; KErrArgument, if anId is invalid; + KErrGeneral, if there is no ISR bound to this interrupt. + */ + IMPORT_C static TInt Unbind(TInt anId); + + + /** + Enables the specified interrupt. + + After enabling the interrupt, the ISR will run if the interrupt signals. + + @param anId The interrupt Id. + + @return KErrNone, if successful; KErrArgument, if anId is invalid; + KErrGeneral, if there is no ISR bound to this interrupt. + */ + IMPORT_C static TInt Enable(TInt anId); + + + /** + Disables the specified interrupt. + + After calling this function, the interrupt source cannot generate + an interrupt to the CPU. + + @param anId The interrupt Id. + + @return KErrNone, if successful; KErrArgument, if anId is invalid; + KErrGeneral, if there is no ISR bound to this interrupt. + */ + IMPORT_C static TInt Disable(TInt anId); + + + /** + Clears any pending signal on the specified interrupt. + + @param anId The interrupt Id. + + @return KErrNone, if successful; KErrArgument, if anId is invalid; + KErrGeneral, if there is no ISR bound to this interrupt. + */ + IMPORT_C static TInt Clear(TInt anId); + + + /** + Changes the priority of the specified interrupt to the new specified value. + + The meaning of the priority value is determined by the baseport. + The function returns KErrNotSupported if the hardware or the baseport + does not support configurable interrupt priorities. + + @param anId The interrupt Id. + @param aPriority The new priority value. + + @return KErrNone, if successful; KErrArgument, if anId is invalid; + KErrNotSuppported, if configurable interrupt priorities + are not supported. + */ + IMPORT_C static TInt SetPriority(TInt anId, TInt aPriority); + }; + +struct SInterruptHandler + { + TAny* iPtr; + TIsr iIsr; + }; + +#endif