xref: /xnu-12377.61.12/iokit/Tests/TestServices/TestIOServiceUserNotification.h (revision 4d495c6e23c53686cf65f45067f79024cf5dcee8)
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