xref: /xnu-8020.140.41/iokit/IOKit/IONotifier.h (revision 27b03b360a988dfd3dfdf34262bb0042026747cc)
1*27b03b36SApple OSS Distributions /*
2*27b03b36SApple OSS Distributions  * Copyright (c) 1998-2019 Apple Inc. All rights reserved.
3*27b03b36SApple OSS Distributions  *
4*27b03b36SApple OSS Distributions  * @APPLE_OSREFERENCE_LICENSE_HEADER_START@
5*27b03b36SApple OSS Distributions  *
6*27b03b36SApple OSS Distributions  * This file contains Original Code and/or Modifications of Original Code
7*27b03b36SApple OSS Distributions  * as defined in and that are subject to the Apple Public Source License
8*27b03b36SApple OSS Distributions  * Version 2.0 (the 'License'). You may not use this file except in
9*27b03b36SApple OSS Distributions  * compliance with the License. The rights granted to you under the License
10*27b03b36SApple OSS Distributions  * may not be used to create, or enable the creation or redistribution of,
11*27b03b36SApple OSS Distributions  * unlawful or unlicensed copies of an Apple operating system, or to
12*27b03b36SApple OSS Distributions  * circumvent, violate, or enable the circumvention or violation of, any
13*27b03b36SApple OSS Distributions  * terms of an Apple operating system software license agreement.
14*27b03b36SApple OSS Distributions  *
15*27b03b36SApple OSS Distributions  * Please obtain a copy of the License at
16*27b03b36SApple OSS Distributions  * http://www.opensource.apple.com/apsl/ and read it before using this file.
17*27b03b36SApple OSS Distributions  *
18*27b03b36SApple OSS Distributions  * The Original Code and all software distributed under the License are
19*27b03b36SApple OSS Distributions  * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
20*27b03b36SApple OSS Distributions  * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
21*27b03b36SApple OSS Distributions  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
22*27b03b36SApple OSS Distributions  * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
23*27b03b36SApple OSS Distributions  * Please see the License for the specific language governing rights and
24*27b03b36SApple OSS Distributions  * limitations under the License.
25*27b03b36SApple OSS Distributions  *
26*27b03b36SApple OSS Distributions  * @APPLE_OSREFERENCE_LICENSE_HEADER_END@
27*27b03b36SApple OSS Distributions  */
28*27b03b36SApple OSS Distributions /*
29*27b03b36SApple OSS Distributions  * Copyright (c) 1999 Apple Computer, Inc.  All rights reserved.
30*27b03b36SApple OSS Distributions  *
31*27b03b36SApple OSS Distributions  * HISTORY
32*27b03b36SApple OSS Distributions  *
33*27b03b36SApple OSS Distributions  */
34*27b03b36SApple OSS Distributions 
35*27b03b36SApple OSS Distributions #ifndef _IOKIT_IONOTIFIER_H
36*27b03b36SApple OSS Distributions #define _IOKIT_IONOTIFIER_H
37*27b03b36SApple OSS Distributions 
38*27b03b36SApple OSS Distributions #include <libkern/c++/OSObject.h>
39*27b03b36SApple OSS Distributions 
40*27b03b36SApple OSS Distributions /*! @class IONotifier : public OSObject
41*27b03b36SApple OSS Distributions  *   @abstract An abstract base class defining common methods for controlling a notification request.
42*27b03b36SApple OSS Distributions  *   @discussion IOService notification requests are represented as implementations of the IONotifier object. It defines methods to enable, disable and remove notification requests. These actions are synchronized with invocations of the notification handler, so removing a notification request will guarantee the handler is not being executed. */
43*27b03b36SApple OSS Distributions 
44*27b03b36SApple OSS Distributions class IONotifier : public OSObject
45*27b03b36SApple OSS Distributions {
46*27b03b36SApple OSS Distributions 	OSDeclareAbstractStructors(IONotifier);
47*27b03b36SApple OSS Distributions 
48*27b03b36SApple OSS Distributions public:
49*27b03b36SApple OSS Distributions 
50*27b03b36SApple OSS Distributions /*! @function remove
51*27b03b36SApple OSS Distributions  *   @abstract Removes the notification request and releases it.
52*27b03b36SApple OSS Distributions  *   @discussion Removes the notification request and release it. Since creating an IONotifier instance will leave it with a retain count of one, creating an IONotifier and then removing it will destroy it. This method is synchronous with any handler invocations, so when this method returns its guaranteed the handler will not be in entered. */
53*27b03b36SApple OSS Distributions 
54*27b03b36SApple OSS Distributions 	virtual void remove() = 0;
55*27b03b36SApple OSS Distributions 
56*27b03b36SApple OSS Distributions /*! @function disable
57*27b03b36SApple OSS Distributions  *   @abstract Disables the notification request.
58*27b03b36SApple OSS Distributions  *   @discussion Disables the notification request. This method is synchronous with any handler invocations, so when this method returns its guaranteed the handler will not be in entered.
59*27b03b36SApple OSS Distributions  *   @result Returns the previous enable state of the IONotifier. */
60*27b03b36SApple OSS Distributions 
61*27b03b36SApple OSS Distributions 	virtual bool disable() = 0;
62*27b03b36SApple OSS Distributions 
63*27b03b36SApple OSS Distributions /*! @function enable
64*27b03b36SApple OSS Distributions  *   @abstract Sets the enable state of the notification request.
65*27b03b36SApple OSS Distributions  *   @discussion Restores the enable state of the notification request, given the previous state passed in.
66*27b03b36SApple OSS Distributions  *   @param was The enable state of the notifier to restore. */
67*27b03b36SApple OSS Distributions 
68*27b03b36SApple OSS Distributions 	virtual void enable( bool was ) = 0;
69*27b03b36SApple OSS Distributions };
70*27b03b36SApple OSS Distributions 
71*27b03b36SApple OSS Distributions #endif /* ! _IOKIT_IONOTIFIER_H */
72