1 /* 2 * Copyright (c) 1998-2000 Apple Computer, Inc. All rights reserved. 3 * 4 * @APPLE_LICENSE_HEADER_START@ 5 * 6 * The contents of this file constitute Original Code as defined in and 7 * are subject to the Apple Public Source License Version 1.1 (the 8 * "License"). You may not use this file except in compliance with the 9 * License. Please obtain a copy of the License at 10 * http://www.apple.com/publicsource and read it before using this file. 11 * 12 * This Original Code and all software distributed under the License are 13 * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER 14 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, 15 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, 16 * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the 17 * License for the specific language governing rights and limitations 18 * under the License. 19 * 20 * @APPLE_LICENSE_HEADER_END@ 21 */ 22 /* 23 Copyright (c) 1998 Apple Computer, Inc. All rights reserved. 24 25 HISTORY 26 1998-7-13 Godfrey van der Linden(gvdl) 27 Created. 28 ]*/ 29 #include <IOKit/IOLib.h> 30 31 #include <IOKit/IOEventSource.h> 32 #include <IOKit/IOWorkLoop.h> 33 34 #define super OSObject 35 36 OSDefineMetaClassAndAbstractStructors(IOEventSource, OSObject) 37 OSMetaClassDefineReservedUnused(IOEventSource, 0); 38 OSMetaClassDefineReservedUnused(IOEventSource, 1); 39 OSMetaClassDefineReservedUnused(IOEventSource, 2); 40 OSMetaClassDefineReservedUnused(IOEventSource, 3); 41 OSMetaClassDefineReservedUnused(IOEventSource, 4); 42 OSMetaClassDefineReservedUnused(IOEventSource, 5); 43 OSMetaClassDefineReservedUnused(IOEventSource, 6); 44 OSMetaClassDefineReservedUnused(IOEventSource, 7); 45 46 /* inline function implementations */ 47 void IOEventSource::signalWorkAvailable() { workLoop->signalWorkAvailable(); } 48 void IOEventSource::openGate() { workLoop->openGate(); } 49 void IOEventSource::closeGate() { workLoop->closeGate(); } 50 bool IOEventSource::tryCloseGate() { return workLoop->tryCloseGate(); } 51 int IOEventSource::sleepGate(void *event, UInt32 type) 52 { return workLoop->sleepGate(event, type); } 53 void IOEventSource::wakeupGate(void *event, bool oneThread) 54 { workLoop->wakeupGate(event, oneThread); } 55 56 bool IOEventSource::init(OSObject *inOwner, 57 Action inAction = 0) 58 { 59 if (!inOwner) 60 return false; 61 62 owner = inOwner; 63 64 if ( !super::init() ) 65 return false; 66 67 (void) setAction(inAction); 68 enabled = true; 69 70 return true; 71 } 72 73 IOEventSource::Action IOEventSource::getAction () const { return action; }; 74 75 void IOEventSource::setAction(Action inAction) 76 { 77 action = inAction; 78 } 79 80 IOEventSource *IOEventSource::getNext() const { return eventChainNext; }; 81 82 void IOEventSource::setNext(IOEventSource *inNext) 83 { 84 eventChainNext = inNext; 85 } 86 87 void IOEventSource::enable() 88 { 89 enabled = true; 90 if (workLoop) 91 return signalWorkAvailable(); 92 } 93 94 void IOEventSource::disable() 95 { 96 enabled = false; 97 } 98 99 bool IOEventSource::isEnabled() const 100 { 101 return enabled; 102 } 103 104 void IOEventSource::setWorkLoop(IOWorkLoop *inWorkLoop) 105 { 106 if ( !inWorkLoop ) 107 disable(); 108 workLoop = inWorkLoop; 109 } 110 111 IOWorkLoop *IOEventSource::getWorkLoop() const 112 { 113 return workLoop; 114 } 115 116 bool IOEventSource::onThread() const 117 { 118 return (workLoop != 0) && workLoop->onThread(); 119 } 120