IOServicePrivate.h [plain text]
#ifndef _IOKIT_IOSERVICEPRIVATE_H
#define _IOKIT_IOSERVICEPRIVATE_H
enum {
kIONotifyOnce = 0x00000001,
kIOServiceExistingSet = 0x00000002,
kIOServiceChangesOK = 0x00000004,
kIOServiceInternalDone = 0x00000008,
kIOServiceClassDone = 0x00000010,
};
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,
};
enum {
kIOServiceNotifyEnable = 0x00000001,
kIOServiceNotifyWaiter = 0x00000002
};
struct _IOServiceNotifierInvocation
{
IOThread thread;
queue_chain_t link;
};
class _IOServiceNotifier : public IONotifier
{
friend class IOService;
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();
};
class _IOServiceInterestNotifier : public IONotifier
{
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;
};
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;
OSDeclareDefaultStructors(_IOConfigThread)
public:
virtual void free() APPLE_KEXT_OVERRIDE;
static void configThread( void );
static void main( void * arg, wait_result_t result );
};
enum {
kMaxConfigThreads = CONFIG_MAX_THREADS,
};
enum {
kMatchNubJob = 10,
};
class _IOServiceJob : public OSObject
{
friend class IOService;
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 );
};
class IOResources : public IOService
{
friend class IOService;
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;
};
class _IOOpenServiceIterator : public OSIterator
{
friend class IOService;
OSDeclareDefaultStructors(_IOOpenServiceIterator)
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;
};
extern const OSSymbol * gIOConsoleUsersKey;
extern const OSSymbol * gIOConsoleSessionUIDKey;
extern const OSSymbol * gIOConsoleSessionAuditIDKey;
extern const OSSymbol * gIOConsoleSessionOnConsoleKey;
extern const OSSymbol * gIOConsoleSessionSecureInputPIDKey;
#endif