]> git.saurik.com Git - apple/xnu.git/blobdiff - iokit/IOKit/IOUserServer.h
xnu-7195.101.1.tar.gz
[apple/xnu.git] / iokit / IOKit / IOUserServer.h
index 0741ed4cb761f45e44e970a633de3a1495b4f1a0..a9c8d122f1c2afc5d5734c4734dcc846dc76878d 100644 (file)
@@ -73,7 +73,7 @@ struct OSObject_Instantiate_Rpl_Content {
        kern_return_t __result;
        uint32_t      __pad;
        uint64_t      flags;
-       char          classname[64];
+       char          classname[128];
        uint64_t      methods[0];
 };
 
@@ -101,6 +101,7 @@ typedef uint64_t IOTrapMessageBuffer[256];
 #include <IOKit/IOService.h>
 #include <IOKit/IOUserClient.h>
 #include <DriverKit/IOUserServer.h>
+#include <libkern/c++/OSPtr.h>
 #include <libkern/c++/OSKext.h>
 
 class IOUserServer;
@@ -109,6 +110,7 @@ class IODispatchQueue;
 class IODispatchSource;
 class IOInterruptDispatchSource;
 class IOTimerDispatchSource;
+class IOUserServerCheckInToken;
 struct IOPStrings;
 
 struct OSObjectUserVars {
@@ -116,6 +118,8 @@ struct OSObjectUserVars {
        IODispatchQueue ** queueArray;
        OSUserMetaClass  * userMeta;
        OSArray          * openProviders;
+       IOService        * controllingDriver;
+       unsigned long      willPowerState;
        bool               willTerminate;
        bool               didTerminate;
        bool               serverDied;
@@ -137,6 +141,8 @@ namespace IOServicePH
 void serverAdd(IOUserServer * server);
 void serverRemove(IOUserServer * server);
 void serverAck(IOUserServer * server);
+bool serverSlept(void);
+void systemHalt(void);
 };
 
 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
@@ -157,6 +163,7 @@ class IOUserServer : public IOUserClient
        uint8_t               fRootNotifier;
        uint8_t               fSystemPowerAck;
        uint8_t               fSystemOff;
+       IOUserServerCheckInToken * fCheckInToken;
 
 public:
 
@@ -182,18 +189,23 @@ public:
        static void            serviceDidStop(IOService * client, IOService * provider);
        IOReturn               serviceOpen(IOService * provider, IOService * client);
        IOReturn               serviceClose(IOService * provider, IOService * client);
+       IOReturn               serviceSetPowerState(IOService * controllingDriver, IOService * service, IOPMPowerFlags flags, IOPMPowerStateIndex powerState);
        IOReturn               serviceNewUserClient(IOService * service, task_t owningTask, void * securityID,
            uint32_t type, OSDictionary * properties, IOUserClient ** handler);
+       IOReturn               serviceNewUserClient(IOService * service, task_t owningTask, void * securityID,
+           uint32_t type, OSDictionary * properties, OSSharedPtr<IOUserClient>& handler);
        IOReturn               exit(const char * reason);
 
-       bool                   serviceMatchesCDHash(IOService *service);
+       bool                   serviceMatchesCheckInToken(IOUserServerCheckInToken *token);
        bool                   checkEntitlements(IOService * provider, IOService * dext);
        bool                   checkEntitlements(OSDictionary * entitlements, OSObject * prop,
            IOService * provider, IOService * dext);
 
        void                   setTaskLoadTag(OSKext *kext);
        void                   setDriverKitUUID(OSKext *kext);
+       void                   setCheckInToken(IOUserServerCheckInToken *token);
        void                   systemPower(bool powerOff);
+       void                               systemHalt(void);
        IOReturn                                setPowerState(unsigned long state, IOService * service) APPLE_KEXT_OVERRIDE;
        IOReturn                                powerStateWillChangeTo(IOPMPowerFlags flags, unsigned long state, IOService * service) APPLE_KEXT_OVERRIDE;
        IOReturn                                powerStateDidChangeTo(IOPMPowerFlags flags, unsigned long state, IOService * service) APPLE_KEXT_OVERRIDE;
@@ -201,6 +213,7 @@ public:
        IOPStrings *           copyInStringArray(const char * string, uint32_t userSize);
        uint32_t               stringArrayIndex(IOPStrings * array, const char * look);
        IOReturn               registerClass(OSClassDescription * desc, uint32_t size, OSUserMetaClass ** cls);
+       IOReturn               registerClass(OSClassDescription * desc, uint32_t size, OSSharedPtr<OSUserMetaClass>& cls);
        IOReturn               setRootQueue(IODispatchQueue * queue);
 
        OSObjectUserVars     * varsForObject(OSObject * obj);
@@ -225,6 +238,21 @@ public:
        kern_return_t          waitInterruptTrap(void * p1, void * p2, void * p3, void * p4, void * p5, void * p6);
 };
 
+typedef void (*IOUserServerCheckInNotificationHandler)(class IOUserServerCheckInToken*, void*);
+
+class IOUserServerCheckInToken : public OSObject
+{
+       OSDeclareDefaultStructors(IOUserServerCheckInToken);
+public:
+       static IOUserServerCheckInToken * create();
+       void setNoSendersNotification(IOUserServerCheckInNotificationHandler handler, void *handlerArgs);
+       void clearNotification();
+       static void notifyNoSenders(IOUserServerCheckInToken * token);
+private:
+       IOUserServerCheckInNotificationHandler handler;
+       void *handlerArgs;
+};
+
 extern "C" kern_return_t
 IOUserServerUEXTTrap(OSObject * object, void * p1, void * p2, void * p3, void * p4, void * p5, void * p6);