X-Git-Url: https://git.saurik.com/apple/xnu.git/blobdiff_plain/fe8ab488e9161c46dd9885d58fc52996dc0249ff..c6bf4f310a33a9262d455ea4d3f0630b1255e3fe:/iokit/Kernel/IOServicePrivate.h?ds=sidebyside

diff --git a/iokit/Kernel/IOServicePrivate.h b/iokit/Kernel/IOServicePrivate.h
index 465b8261a..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,171 +38,211 @@
 
 // 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	= 0x000000ff,
-    kIOServiceBusyMax		= 255,
-    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,
+	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;
-    IOServiceMatchingNotificationHandler handler;
-    IOServiceNotificationHandler	compatHandler;
-    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)
+	OSDeclareDefaultStructors(_IOServiceInterestNotifier);
 
 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 bool init();
+	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);
+
+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();
 };
 
 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( 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 );
-    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;
+	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();
-    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 * 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 */