X-Git-Url: https://git.saurik.com/apple/xnu.git/blobdiff_plain/d9a64523371fa019c4575bb400cbbc3a50ac9903..c6bf4f310a33a9262d455ea4d3f0630b1255e3fe:/iokit/Kernel/IOServicePrivate.h diff --git a/iokit/Kernel/IOServicePrivate.h b/iokit/Kernel/IOServicePrivate.h index 5b420452e..4ae23be1b 100644 --- a/iokit/Kernel/IOServicePrivate.h +++ b/iokit/Kernel/IOServicePrivate.h @@ -1,8 +1,8 @@ /* - * Copyright (c) 1998-2000 Apple Computer, Inc. All rights reserved. + * Copyright (c) 1998-2019 Apple Inc. All rights reserved. * * @APPLE_OSREFERENCE_LICENSE_HEADER_START@ - * + * * This file contains Original Code and/or Modifications of Original Code * as defined in and that are subject to the Apple Public Source License * Version 2.0 (the 'License'). You may not use this file except in @@ -11,10 +11,10 @@ * unlawful or unlicensed copies of an Apple operating system, or to * circumvent, violate, or enable the circumvention or violation of, any * terms of an Apple operating system software license agreement. - * + * * Please obtain a copy of the License at * http://www.opensource.apple.com/apsl/ and read it before using this file. - * + * * The Original Code and all software distributed under the License are * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, @@ -22,11 +22,11 @@ * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. * Please see the License for the specific language governing rights and * limitations under the License. - * + * * @APPLE_OSREFERENCE_LICENSE_HEADER_END@ */ /* - * Copyright (c) 1999 Apple Computer, Inc. All rights reserved. + * Copyright (c) 1999 Apple Computer, Inc. All rights reserved. * * HISTORY * @@ -38,191 +38,203 @@ // options for getExistingServices() enum { - kIONotifyOnce = 0x00000001, - kIOServiceExistingSet = 0x00000002, - kIOServiceChangesOK = 0x00000004, - kIOServiceInternalDone = 0x00000008, - kIOServiceClassDone = 0x00000010, + kIONotifyOnce = 0x00000001, + kIOServiceExistingSet = 0x00000002, + kIOServiceChangesOK = 0x00000004, + kIOServiceInternalDone = 0x00000008, + kIOServiceClassDone = 0x00000010, }; // masks for __state[1] enum { - kIOServiceBusyStateMask = 0x000003ff, - kIOServiceBusyMax = 1023, - kIOServiceNeedConfigState = 0x80000000, - kIOServiceSynchronousState = 0x40000000, - kIOServiceModuleStallState = 0x20000000, - kIOServiceBusyWaiterState = 0x10000000, - - kIOServiceSyncPubState = 0x08000000, - kIOServiceConfigState = 0x04000000, - kIOServiceStartState = 0x02000000, - kIOServiceTermPhase2State = 0x01000000, - kIOServiceTermPhase3State = 0x00800000, - kIOServiceTermPhase1State = 0x00400000, - kIOServiceTerm1WaiterState = 0x00200000, - kIOServiceRecursing = 0x00100000, - kIOServiceNeedWillTerminate = 0x00080000, - kIOServiceWaitDetachState = 0x00040000, - kIOServiceConfigRunning = 0x00020000, - kIOServiceFinalized = 0x00010000, + kIOServiceBusyStateMask = 0x000003ff, + kIOServiceBusyMax = 1023, + kIOServiceNeedConfigState = 0x80000000, + kIOServiceSynchronousState = 0x40000000, + kIOServiceModuleStallState = 0x20000000, + kIOServiceBusyWaiterState = 0x10000000, + + kIOServiceSyncPubState = 0x08000000, + kIOServiceConfigState = 0x04000000, + kIOServiceStartState = 0x02000000, + kIOServiceTermPhase2State = 0x01000000, + kIOServiceTermPhase3State = 0x00800000, + kIOServiceTermPhase1State = 0x00400000, + kIOServiceTerm1WaiterState = 0x00200000, + kIOServiceRecursing = 0x00100000, + kIOServiceNeedWillTerminate = 0x00080000, + kIOServiceWaitDetachState = 0x00040000, + kIOServiceConfigRunning = 0x00020000, + kIOServiceFinalized = 0x00010000, }; // notify state enum { - kIOServiceNotifyEnable = 0x00000001, - kIOServiceNotifyWaiter = 0x00000002, - kIOServiceNotifyBlock = 0x00000004 + kIOServiceNotifyEnable = 0x00000001, + kIOServiceNotifyWaiter = 0x00000002, + kIOServiceNotifyBlock = 0x00000004 }; -struct _IOServiceNotifierInvocation -{ - IOThread thread; - queue_chain_t link; +struct _IOServiceNotifierInvocation { + IOThread thread; + queue_chain_t link; }; class _IOServiceNotifier : public IONotifier { - friend class IOService; + friend class IOService; - OSDeclareDefaultStructors(_IOServiceNotifier) + OSDeclareDefaultStructors(_IOServiceNotifier); public: - OSOrderedSet * whence; - - OSDictionary * matching; - const OSSymbol * type; - IOServiceMatchingNotificationHandler handler; - IOServiceNotificationHandler compatHandler; - void * target; - void * ref; - SInt32 priority; - queue_head_t handlerInvocations; - IOOptionBits state; - - virtual void free() APPLE_KEXT_OVERRIDE; - virtual void remove() APPLE_KEXT_OVERRIDE; - virtual bool disable() APPLE_KEXT_OVERRIDE; - virtual void enable( bool was ) APPLE_KEXT_OVERRIDE; - virtual void wait(); + OSOrderedSet * whence; + + OSDictionary * matching; + const OSSymbol * type; + IOServiceMatchingNotificationHandler handler; + IOServiceNotificationHandler compatHandler; + void * target; + void * ref; + SInt32 priority; + queue_head_t handlerInvocations; + IOOptionBits state; + + virtual void free() APPLE_KEXT_OVERRIDE; + virtual void remove() APPLE_KEXT_OVERRIDE; + virtual bool disable() APPLE_KEXT_OVERRIDE; + virtual void enable( bool was ) APPLE_KEXT_OVERRIDE; + virtual void wait(); }; class _IOServiceInterestNotifier : public IONotifier { - friend class IOService; + friend class IOService; - OSDeclareDefaultStructors(_IOServiceInterestNotifier) + OSDeclareDefaultStructors(_IOServiceInterestNotifier); public: - queue_chain_t chain; - - IOServiceInterestHandler handler; - void * target; - void * ref; - queue_head_t handlerInvocations; - IOOptionBits state; - - virtual void free() APPLE_KEXT_OVERRIDE; - virtual void remove() APPLE_KEXT_OVERRIDE; - virtual bool disable() APPLE_KEXT_OVERRIDE; - virtual void enable( bool was ) APPLE_KEXT_OVERRIDE; - virtual void wait(); - virtual bool init() APPLE_KEXT_OVERRIDE; + queue_chain_t chain; + + IOServiceInterestHandler handler; + void * target; + void * ref; + queue_head_t handlerInvocations; + IOOptionBits state; + + virtual void free() APPLE_KEXT_OVERRIDE; + virtual void remove() APPLE_KEXT_OVERRIDE; + virtual bool disable() APPLE_KEXT_OVERRIDE; + virtual void enable( bool was ) APPLE_KEXT_OVERRIDE; + virtual void wait(); + virtual bool init() APPLE_KEXT_OVERRIDE; }; class _IOServiceNullNotifier : public IONotifier { - OSDeclareDefaultStructors(_IOServiceNullNotifier) + OSDeclareDefaultStructors(_IOServiceNullNotifier); public: - virtual void taggedRetain(const void *tag) const APPLE_KEXT_OVERRIDE; - virtual void taggedRelease(const void *tag, const int when) const APPLE_KEXT_OVERRIDE; - virtual void free() APPLE_KEXT_OVERRIDE; - virtual void remove() APPLE_KEXT_OVERRIDE; - virtual bool disable() APPLE_KEXT_OVERRIDE; - virtual void enable( bool was ) APPLE_KEXT_OVERRIDE; - virtual void wait(); + virtual void taggedRetain(const void *tag) const APPLE_KEXT_OVERRIDE; + virtual void taggedRelease(const void *tag, const int when) const APPLE_KEXT_OVERRIDE; + virtual void free() APPLE_KEXT_OVERRIDE; + virtual void remove() APPLE_KEXT_OVERRIDE; + virtual bool disable() APPLE_KEXT_OVERRIDE; + virtual void enable( bool was ) APPLE_KEXT_OVERRIDE; + virtual void wait(); }; class _IOConfigThread : public OSObject { - friend class IOService; + friend class IOService; - OSDeclareDefaultStructors(_IOConfigThread) + OSDeclareDefaultStructors(_IOConfigThread); public: - virtual void free() APPLE_KEXT_OVERRIDE; - - static void configThread( void ); - static void main( void * arg, wait_result_t result ); + static void configThread( int configThreadId ); + static void main( void * arg, wait_result_t result ); }; enum { - kMaxConfigThreads = CONFIG_MAX_THREADS, + kMaxConfigThreads = CONFIG_MAX_THREADS, }; enum { - kMatchNubJob = 10, + kMatchNubJob = 10, }; class _IOServiceJob : public OSObject { - friend class IOService; + friend class IOService; - OSDeclareDefaultStructors(_IOServiceJob) + OSDeclareDefaultStructors(_IOServiceJob); public: - int type; - IOService * nub; - IOOptionBits options; - - static _IOServiceJob * startJob( IOService * nub, int type, - IOOptionBits options = 0 ); - static void pingConfig( class _IOServiceJob * job ); + int type; + IOService * nub; + IOOptionBits options; + static _IOServiceJob * startJob( IOService * nub, int type, + IOOptionBits options = 0 ); + static void pingConfig( class _IOServiceJob * job ); }; class IOResources : public IOService { - friend class IOService; + friend class IOService; - OSDeclareDefaultStructors(IOResources) + OSDeclareDefaultStructors(IOResources); public: - static IOService * resources( void ); - virtual bool init( OSDictionary * dictionary = 0 ) APPLE_KEXT_OVERRIDE; - virtual IOReturn newUserClient(task_t owningTask, void * securityID, - UInt32 type, OSDictionary * properties, - IOUserClient ** handler) APPLE_KEXT_OVERRIDE; - virtual IOWorkLoop * getWorkLoop( ) const APPLE_KEXT_OVERRIDE; - virtual bool matchPropertyTable( OSDictionary * table ) APPLE_KEXT_OVERRIDE; - virtual IOReturn setProperties( OSObject * properties ) APPLE_KEXT_OVERRIDE; + static IOService * resources( void ); + virtual bool init( OSDictionary * dictionary = NULL ) APPLE_KEXT_OVERRIDE; + virtual IOReturn newUserClient(task_t owningTask, void * securityID, + UInt32 type, OSDictionary * properties, + IOUserClient ** handler) APPLE_KEXT_OVERRIDE; + virtual IOWorkLoop * getWorkLoop() const APPLE_KEXT_OVERRIDE; + virtual bool matchPropertyTable( OSDictionary * table ) APPLE_KEXT_OVERRIDE; + virtual IOReturn setProperties( OSObject * properties ) APPLE_KEXT_OVERRIDE; +}; + +class IOUserResources : public IOService +{ + friend class IOService; + + OSDeclareDefaultStructors(IOUserResources); + +public: + static IOService * resources( void ); + virtual bool init( OSDictionary * dictionary = NULL ) APPLE_KEXT_OVERRIDE; + virtual IOReturn newUserClient(task_t owningTask, void * securityID, + UInt32 type, OSDictionary * properties, + IOUserClient ** handler) APPLE_KEXT_OVERRIDE; + virtual IOWorkLoop * getWorkLoop() const APPLE_KEXT_OVERRIDE; + virtual bool matchPropertyTable( OSDictionary * table ) APPLE_KEXT_OVERRIDE; }; class _IOOpenServiceIterator : public OSIterator { - friend class IOService; + friend class IOService; - OSDeclareDefaultStructors(_IOOpenServiceIterator) + OSDeclareDefaultStructors(_IOOpenServiceIterator); - OSIterator * iter; - const IOService * client; - const IOService * provider; - IOService * last; + OSIterator * iter; + const IOService * client; + const IOService * provider; + IOService * last; public: - static OSIterator * iterator( OSIterator * _iter, - const IOService * client, - const IOService * provider ); - virtual void free() APPLE_KEXT_OVERRIDE; - virtual void reset() APPLE_KEXT_OVERRIDE; - virtual bool isValid() APPLE_KEXT_OVERRIDE; - virtual OSObject * getNextObject() APPLE_KEXT_OVERRIDE; + static OSIterator * iterator(LIBKERN_CONSUMED OSIterator * _iter, + const IOService * client, + const IOService * provider ); + virtual void free() APPLE_KEXT_OVERRIDE; + virtual void reset() APPLE_KEXT_OVERRIDE; + virtual bool isValid() APPLE_KEXT_OVERRIDE; + virtual OSObject * getNextObject() APPLE_KEXT_OVERRIDE; }; extern const OSSymbol * gIOConsoleUsersKey; extern const OSSymbol * gIOConsoleSessionUIDKey; -extern const OSSymbol * gIOConsoleSessionAuditIDKey; +extern const OSSymbol * gIOConsoleSessionAuditIDKey; extern const OSSymbol * gIOConsoleSessionOnConsoleKey; extern const OSSymbol * gIOConsoleSessionSecureInputPIDKey; @@ -234,4 +246,3 @@ extern const OSSymbol * gIOConsoleSessionSecureInputPIDKey; (sizeof(IOInterruptSourcePrivate) + sizeof(IOInterruptSource)) #endif /* ! _IOKIT_IOSERVICEPRIVATE_H */ -