os/kernelhwsrv/kerneltest/e32test/nkernsa/interrupts.h
author sl
Tue, 10 Jun 2014 14:32:02 +0200
changeset 1 260cb5ec6c19
permissions -rw-r--r--
Update contrib.
     1 // Copyright (c) 2005-2009 Nokia Corporation and/or its subsidiary(-ies).
     2 // All rights reserved.
     3 // This component and the accompanying materials are made available
     4 // under the terms of the License "Eclipse Public License v1.0"
     5 // which accompanies this distribution, and is available
     6 // at the URL "http://www.eclipse.org/legal/epl-v10.html".
     7 //
     8 // Initial Contributors:
     9 // Nokia Corporation - initial contribution.
    10 //
    11 // Contributors:
    12 //
    13 // Description:
    14 // \e32test\nkernsa\interrupts.h
    15 // 
    16 //
    17 
    18 /**
    19  @file
    20  @internalTechnology
    21 */
    22 
    23 #ifndef __INTERRUPTS_H__
    24 #define __INTERRUPTS_H__
    25 #include <e32err.h>
    26 
    27 #undef IMPORT_C
    28 #define IMPORT_C /* */
    29 
    30 /*************************************************
    31  * Interrupt handling
    32  *************************************************/
    33 typedef void (*TIsr)(TAny*);
    34 
    35 
    36 
    37 
    38 /**
    39 A class that exports interrupt functionality to device drivers and
    40 other kernel-side code.
    41 
    42 Although Symbian OS defines this class, it does not implement it;
    43 an implementation for each of the functions defined by this class must
    44 be provided by the Variant in the baseport.
    45 
    46 Note that the class only provides the public API for using interrupts,
    47 not for dispatching them.
    48 */
    49 class Interrupt
    50 	{
    51 public:
    52 
    53 
    54     /**
    55     Associates the specified interrupt service routine (ISR) function with
    56     the specified interrupt Id.
    57     
    58     This is also known as binding the interrupt.
    59         
    60     When the ISR is called, the value aPtr is passed as the argument.
    61     ISR may either be a bare function or a static class member, taking TAny* parameter:
    62     @code
    63     void Isr(TAny* aParam)
    64     @endcode
    65 
    66     Note that you must call Interrupt::Enable() before you can start
    67     receiving interrupts.
    68      
    69     @param anId  The interrupt Id.
    70     @param anIsr The address of the ISR function. 
    71     @param aPtr  32-bit value that is passed to the ISR.
    72                  This is designated a TAny* type as it is usually a pointer to
    73                  the owning class or data to be used in the ISR, although
    74                  it can be any 32-bit value.
    75                  
    76     @return 	 KErrNone, if successful; KErrArgument, if anId is invalid;
    77                  KErrInUse, if the ISR is already bound to this interrupt.
    78     */
    79 	IMPORT_C static TInt Bind(TInt anId, TIsr anIsr, TAny* aPtr);
    80 
    81 
    82     /**
    83     Unbinds the interrupt service routine (ISR) function from
    84     the specified interrupt id.
    85     
    86     @param anId The interrupt Id.
    87     
    88     @return 	KErrNone, if successful; KErrArgument, if anId is invalid;
    89                 KErrGeneral, if there is no ISR bound to this interrupt.
    90     */
    91 	IMPORT_C static TInt Unbind(TInt anId);
    92 
    93 
    94     /**
    95     Enables the specified interrupt.
    96     
    97     After enabling the interrupt, the ISR will run if the interrupt signals.
    98     
    99     @param anId The interrupt Id.
   100     
   101     @return 	KErrNone, if successful; KErrArgument, if anId is invalid;
   102                 KErrGeneral, if there is no ISR bound to this interrupt.
   103     */
   104 	IMPORT_C static TInt Enable(TInt anId);
   105 
   106 
   107     /**
   108     Disables the specified interrupt.
   109     
   110     After calling this function, the interrupt source cannot generate
   111     an interrupt to the CPU.
   112     
   113     @param anId The interrupt Id.
   114     
   115     @return 	KErrNone, if successful; KErrArgument, if anId is invalid;
   116                 KErrGeneral, if there is no ISR bound to this interrupt.
   117     */
   118 	IMPORT_C static TInt Disable(TInt anId);
   119 
   120 
   121     /**
   122     Clears any pending signal on the specified interrupt.
   123     
   124     @param anId The interrupt Id.
   125     
   126     @return 	KErrNone, if successful; KErrArgument, if anId is invalid;
   127                 KErrGeneral, if there is no ISR bound to this interrupt.
   128     */
   129 	IMPORT_C static TInt Clear(TInt anId);
   130 
   131 
   132     /**
   133     Changes the priority of the specified interrupt to the new specified value.
   134     
   135     The meaning of the priority value is determined by the baseport.
   136     The function returns KErrNotSupported if the hardware or the baseport
   137     does not support configurable interrupt priorities.
   138 
   139     @param anId      The interrupt Id.
   140     @param aPriority The new priority value.
   141     
   142     @return 	KErrNone, if successful; KErrArgument, if anId is invalid;
   143                 KErrNotSuppported, if configurable interrupt priorities
   144                 are not supported.
   145     */
   146 	IMPORT_C static TInt SetPriority(TInt anId, TInt aPriority);
   147 	};
   148 
   149 struct SInterruptHandler
   150 	{
   151 	TAny* iPtr;
   152 	TIsr iIsr;
   153 	};
   154 
   155 #endif