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