1*4d495c6eSApple OSS Distributions #ifndef _IOKIT_TESTIOSERVICEUSERNOTIFICATION_H_ 2*4d495c6eSApple OSS Distributions #define _IOKIT_TESTIOSERVICEUSERNOTIFICATION_H_ 3*4d495c6eSApple OSS Distributions 4*4d495c6eSApple OSS Distributions #include <IOKit/IOService.h> 5*4d495c6eSApple OSS Distributions #include <IOKit/IOUserClient.h> 6*4d495c6eSApple OSS Distributions 7*4d495c6eSApple OSS Distributions #if DEVELOPMENT || DEBUG 8*4d495c6eSApple OSS Distributions 9*4d495c6eSApple OSS Distributions class TestIOServiceUserNotification : public IOService { 10*4d495c6eSApple OSS Distributions OSDeclareDefaultStructors(TestIOServiceUserNotification); 11*4d495c6eSApple OSS Distributions 12*4d495c6eSApple OSS Distributions public: 13*4d495c6eSApple OSS Distributions virtual bool start(IOService *provider) override; 14*4d495c6eSApple OSS Distributions virtual void free() override; 15*4d495c6eSApple OSS Distributions 16*4d495c6eSApple OSS Distributions void registerUserNotification(OSObject * notification); 17*4d495c6eSApple OSS Distributions void trimUserNotificationsLocked(void); 18*4d495c6eSApple OSS Distributions size_t getUserNotificationLeakCount(void); 19*4d495c6eSApple OSS Distributions 20*4d495c6eSApple OSS Distributions private: 21*4d495c6eSApple OSS Distributions OSArray * fUserNotifications; 22*4d495c6eSApple OSS Distributions IOLock * fLock; 23*4d495c6eSApple OSS Distributions }; 24*4d495c6eSApple OSS Distributions 25*4d495c6eSApple OSS Distributions class TestIOServiceUserNotificationUserClient : public IOUserClient { 26*4d495c6eSApple OSS Distributions OSDeclareDefaultStructors(TestIOServiceUserNotificationUserClient); 27*4d495c6eSApple OSS Distributions 28*4d495c6eSApple OSS Distributions public: 29*4d495c6eSApple OSS Distributions bool start(IOService * provider) override; 30*4d495c6eSApple OSS Distributions IONotifier * registerInterest(const OSSymbol * typeOfInterest, 31*4d495c6eSApple OSS Distributions IOServiceInterestHandler handler, 32*4d495c6eSApple OSS Distributions void * target, void * ref = NULL) override; 33*4d495c6eSApple OSS Distributions virtual IOReturn clientClose() override; 34*4d495c6eSApple OSS Distributions IOReturn externalMethod(uint32_t selector, IOExternalMethodArguments * args, 35*4d495c6eSApple OSS Distributions IOExternalMethodDispatch * dispatch, OSObject * target, void * reference) override; 36*4d495c6eSApple OSS Distributions private: 37*4d495c6eSApple OSS Distributions TestIOServiceUserNotification * fProvider; 38*4d495c6eSApple OSS Distributions }; 39*4d495c6eSApple OSS Distributions 40*4d495c6eSApple OSS Distributions #endif /* DEVELOPMENT || DEBUG */ 41*4d495c6eSApple OSS Distributions 42*4d495c6eSApple OSS Distributions #endif /* _IOKIT_TESTIOSERVICEUSERNOTIFICATION_H_ */ 43