/*
- * Copyright (c) 1998-2000 Apple Computer, Inc. All rights reserved.
+ * Copyright (c) 1998-2019 Apple Inc. All rights reserved.
+ *
+ * @APPLE_OSREFERENCE_LICENSE_HEADER_START@
*
- * @APPLE_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
- * compliance with the License. Please obtain a copy of the License at
- * http://www.opensource.apple.com/apsl/ and read it before using this
- * file.
- *
+ * compliance with the License. The rights granted to you under the License
+ * may not be used to create, or enable the creation or redistribution of,
+ * 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,
* 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_LICENSE_HEADER_END@
+ *
+ * @APPLE_OSREFERENCE_LICENSE_HEADER_END@
*/
/*
- * Copyright (c) 1999 Apple Computer, Inc. All rights reserved.
+ * Copyright (c) 1999 Apple Computer, Inc. All rights reserved.
*
* HISTORY
*
// options for getExistingServices()
enum {
- kIONotifyOnce = 0x00000001,
- kIOServiceExistingSet = 0x00000002
+ kIONotifyOnce = 0x00000001,
+ kIOServiceExistingSet = 0x00000002,
+ kIOServiceChangesOK = 0x00000004,
+ kIOServiceInternalDone = 0x00000008,
+ kIOServiceClassDone = 0x00000010,
};
// masks for __state[1]
enum {
- kIOServiceBusyStateMask = 0x000000ff,
- kIOServiceBusyMax = 255,
- kIOServiceNeedConfigState = 0x80000000,
- kIOServiceSynchronousState = 0x40000000,
- kIOServiceModuleStallState = 0x20000000,
- kIOServiceBusyWaiterState = 0x10000000,
-
- kIOServiceSyncPubState = 0x08000000,
- kIOServiceConfigState = 0x04000000,
- kIOServiceTermPhase2State = 0x01000000,
- kIOServiceTermPhase3State = 0x00800000,
-};
-
-// options for terminate()
-enum {
- kIOServiceRecursing = 0x00100000,
+ 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
+ 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;
- IOServiceNotificationHandler handler;
- void * target;
- void * ref;
- SInt32 priority;
- queue_head_t handlerInvocations;
- IOOptionBits state;
-
- virtual void free();
- virtual void remove();
- virtual bool disable();
- virtual void enable( bool was );
- 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);
+
+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;
+};
- OSDeclareDefaultStructors(_IOServiceInterestNotifier)
+class _IOServiceNullNotifier : public IONotifier
+{
+ OSDeclareDefaultStructors(_IOServiceNullNotifier);
public:
- queue_chain_t chain;
-
- IOServiceInterestHandler handler;
- void * target;
- void * ref;
- queue_head_t handlerInvocations;
- IOOptionBits state;
-
- virtual void free();
- virtual void remove();
- virtual bool disable();
- virtual void enable( bool was );
- 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();
-
- static void configThread( void );
- static void main( _IOConfigThread * self );
+ static void configThread( int configThreadId );
+ static void main( void * arg, wait_result_t result );
};
enum {
-#ifdef LESS_THREAD_CREATE
- kMaxConfigThreads = 4,
-#else
- kMaxConfigThreads = 32,
-#endif
+ 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);
+
+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;
+ virtual IOReturn setProperties( OSObject * properties ) APPLE_KEXT_OVERRIDE;
+};
+
+class IOUserResources : public IOService
+{
+ friend class IOService;
- OSDeclareDefaultStructors(IOResources)
+ OSDeclareDefaultStructors(IOUserResources);
public:
- static IOService * resources( void );
- virtual IOWorkLoop * getWorkLoop( ) const;
- virtual bool matchPropertyTable( OSDictionary * table );
- virtual IOReturn setProperties( OSObject * properties );
+ 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();
- virtual void reset();
- virtual bool isValid();
- virtual OSObject * getNextObject();
+ 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 * gIOConsoleSessionOnConsoleKey;
+extern const OSSymbol * gIOConsoleSessionSecureInputPIDKey;
-#endif /* ! _IOKIT_IOSERVICEPRIVATE_H */
+#define _interruptSourcesPrivate(service) \
+ ((IOInterruptSourcePrivate *)(&(service)->_interruptSources[(service)->_numInterruptSources]))
+
+#define sizeofAllIOInterruptSource \
+ (sizeof(IOInterruptSourcePrivate) + sizeof(IOInterruptSource))
+
+#endif /* ! _IOKIT_IOSERVICEPRIVATE_H */