Chameleon

Chameleon Svn Source Tree

Root/tags/2.0/i386/include/IOKit/IOInterruptController.h

Source at commit 1808 created 12 years 4 months ago.
By blackosx, Revise layout of package installer 'Welcome' file so it looks cleaner. Change the copyright notice to begin from 2009 as seen in the Chameleon 2.0 r431 installer. Should this date be set earlier?
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
36#ifndef _IOKIT_IOINTERRUPTCONTROLLER_H
37#define _IOKIT_IOINTERRUPTCONTROLLER_H
38
39#include <IOKit/IOLocks.h>
40#include <IOKit/IOService.h>
41#include <IOKit/IOInterrupts.h>
42
43
44class IOSharedInterruptController;
45
46struct IOInterruptVector {
47 volatile char interruptActive;
48 volatile char interruptDisabledSoft;
49 volatile char interruptDisabledHard;
50 volatile char interruptRegistered;
51 IOLock * interruptLock;
52 IOService * nub;
53 int source;
54 void * target;
55 IOInterruptHandler handler;
56 void * refCon;
57 IOSharedInterruptController *sharedController;
58};
59
60typedef struct IOInterruptVector IOInterruptVector;
61
62#if __LP64__
63typedef int32_t IOInterruptVectorNumber;
64#else
65typedef long IOInterruptVectorNumber;
66#endif
67
68class IOInterruptController : public IOService
69{
70 OSDeclareAbstractStructors(IOInterruptController);
71
72protected:
73 IOInterruptVector *vectors;
74 IOSimpleLock *controllerLock;
75
76 struct ExpansionData { };
77 ExpansionData *reserved;
78
79public:
80 virtual IOReturn registerInterrupt(IOService *nub, int source,
81 void *target,
82 IOInterruptHandler handler,
83 void *refCon);
84 virtual IOReturn unregisterInterrupt(IOService *nub, int source);
85
86 virtual IOReturn getInterruptType(IOService *nub, int source,
87 int *interruptType);
88
89 virtual IOReturn enableInterrupt(IOService *nub, int source);
90 virtual IOReturn disableInterrupt(IOService *nub, int source);
91 virtual IOReturn causeInterrupt(IOService *nub, int source);
92
93 virtual IOInterruptAction getInterruptHandlerAddress(void);
94 virtual IOReturn handleInterrupt(void *refCon, IOService *nub,
95 int source);
96
97 // Methods to be overridden for simplifed interrupt controller subclasses.
98
99 virtual bool vectorCanBeShared(IOInterruptVectorNumber vectorNumber, IOInterruptVector *vector);
100 virtual void initVector(IOInterruptVectorNumber vectorNumber, IOInterruptVector *vector);
101 virtual int getVectorType(IOInterruptVectorNumber vectorNumber, IOInterruptVector *vector);
102 virtual void disableVectorHard(IOInterruptVectorNumber vectorNumber, IOInterruptVector *vector);
103 virtual void enableVector(IOInterruptVectorNumber vectorNumber, IOInterruptVector *vector);
104 virtual void causeVector(IOInterruptVectorNumber vectorNumber, IOInterruptVector *vector);
105
106 OSMetaClassDeclareReservedUnused(IOInterruptController, 0);
107 OSMetaClassDeclareReservedUnused(IOInterruptController, 1);
108 OSMetaClassDeclareReservedUnused(IOInterruptController, 2);
109 OSMetaClassDeclareReservedUnused(IOInterruptController, 3);
110 OSMetaClassDeclareReservedUnused(IOInterruptController, 4);
111 OSMetaClassDeclareReservedUnused(IOInterruptController, 5);
112};
113
114
115class IOSharedInterruptController : public IOInterruptController
116{
117 OSDeclareDefaultStructors(IOSharedInterruptController);
118
119private:
120 IOService *provider;
121 int numVectors;
122 int vectorsRegistered;
123 int vectorsEnabled;
124 volatile int controllerDisabled;
125 bool sourceIsLevel;
126
127 struct ExpansionData { };
128 ExpansionData *reserved;
129
130public:
131 virtual IOReturn initInterruptController(IOInterruptController *parentController, OSData *parentSource);
132
133 virtual IOReturn registerInterrupt(IOService *nub, int source,
134 void *target,
135 IOInterruptHandler handler,
136 void *refCon);
137 virtual IOReturn unregisterInterrupt(IOService *nub, int source);
138
139 virtual IOReturn getInterruptType(IOService *nub, int source,
140 int *interruptType);
141
142 virtual IOReturn enableInterrupt(IOService *nub, int source);
143 virtual IOReturn disableInterrupt(IOService *nub, int source);
144
145 virtual IOInterruptAction getInterruptHandlerAddress(void);
146 virtual IOReturn handleInterrupt(void *refCon, IOService *nub, int source);
147
148 OSMetaClassDeclareReservedUnused(IOSharedInterruptController, 0);
149 OSMetaClassDeclareReservedUnused(IOSharedInterruptController, 1);
150 OSMetaClassDeclareReservedUnused(IOSharedInterruptController, 2);
151 OSMetaClassDeclareReservedUnused(IOSharedInterruptController, 3);
152};
153
154
155#endif /* ! _IOKIT_IOINTERRUPTCONTROLLER_H */
156

Archive Download this file

Revision: 1808