/ duct-tape / xnu / iokit / Examples / drvGenericInterruptController / GenericInterruptController.h
GenericInterruptController.h
 1  /*
 2   * Copyright (c) 1998-2000 Apple Computer, Inc. All rights reserved.
 3   *
 4   * @APPLE_OSREFERENCE_LICENSE_HEADER_START@
 5   *
 6   * This file contains Original Code and/or Modifications of Original Code
 7   * as defined in and that are subject to the Apple Public Source License
 8   * Version 2.0 (the 'License'). You may not use this file except in
 9   * compliance with the License. The rights granted to you under the License
10   * may not be used to create, or enable the creation or redistribution of,
11   * unlawful or unlicensed copies of an Apple operating system, or to
12   * circumvent, violate, or enable the circumvention or violation of, any
13   * terms of an Apple operating system software license agreement.
14   *
15   * Please obtain a copy of the License at
16   * http://www.opensource.apple.com/apsl/ and read it before using this file.
17   *
18   * The Original Code and all software distributed under the License are
19   * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
20   * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
21   * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
22   * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
23   * Please see the License for the specific language governing rights and
24   * limitations under the License.
25   *
26   * @APPLE_OSREFERENCE_LICENSE_HEADER_END@
27   */
28  /*
29   * Copyright (c) 1999 Apple Computer, Inc.  All rights reserved.
30   *
31   *  DRI: Josh de Cesare
32   *
33   */
34  
35  #ifndef _IOKIT_GENERICINTERRUPTCONTROLLER_H
36  #define _IOKIT_GENERICINTERRUPTCONTROLLER_H
37  
38  #include <IOKit/IOInterrupts.h>
39  #include <IOKit/IOInterruptController.h>
40  
41  class GenericInterruptController : public IOInterruptController
42  {
43  	IODeclareDefaultStructors(GenericInterruptController);
44  
45  public:
46  // There should be a method to start or init the controller.
47  // Its nature is up to you.
48  	virtual bool start(IOService *provider);
49  
50  // Returns the type of a vector: level or edge.  This will probably get
51  // replaced but a default method and a new method getVectorType.
52  	virtual IOReturn getInterruptType(IOService *nub, int source,
53  	    int *interruptType);
54  
55  // Returns a function pointer for the interrupt handler.
56  // Sadly, egcs prevents this from being done by the base class.
57  	virtual IOInterruptAction getInterruptHandlerAddress(void);
58  
59  // The actual interrupt handler.
60  	virtual IOReturn handleInterrupt(void *refCon,
61  	    IOService *nub, int source);
62  
63  
64  // Should return true if this vector can be shared.
65  // The base class return false, so this method only need to be implemented
66  // if the controller needs to support shared interrupts.
67  // No other work is required to support shared interrupts.
68  	virtual bool vectorCanBeShared(long vectorNumber, IOInterruptVector *vector);
69  
70  // Do any hardware initalization for this vector.  Leave the vector
71  // hard disabled.
72  	virtual void initVector(long vectorNumber, IOInterruptVector *vector);
73  
74  // Disable this vector at the hardware.
75  	virtual void disableVectorHard(long vectorNumber, IOInterruptVector *vector);
76  
77  // Enable this vector at the hardware.
78  	virtual void enableVector(long vectorNumber, IOInterruptVector *vector);
79  
80  // Cause an interrupt on this vector.
81  	virtual void causeVector(long vectorNumber, IOInterruptVector *vector);
82  };
83  
84  #endif /* ! _IOKIT_GENERICINTERRUPTCONTROLLER_H */