]> git.saurik.com Git - apple/xnu.git/blobdiff - iokit/IOKit/IOCommandPool.h
xnu-6153.11.26.tar.gz
[apple/xnu.git] / iokit / IOKit / IOCommandPool.h
index 811664751a5dc4a79b02b4f3ad57ad0e532a8a47..ee30bb44ea7d634a6fd979f577a29074fe0254a5 100644 (file)
@@ -1,23 +1,29 @@
 /*
- * Copyright (c) 2000 Apple Computer, Inc. All rights reserved.
+ * Copyright (c) 2000-2019 Apple Inc. All rights reserved.
  *
- * @APPLE_LICENSE_HEADER_START@
- * 
- * The contents of this file constitute Original Code as defined in and
- * are subject to the Apple Public Source License Version 1.1 (the
- * "License").  You may not use this file except in compliance with the
- * License.  Please obtain a copy of the License at
- * http://www.apple.com/publicsource and read it before using this file.
- * 
- * This Original Code and all software distributed under the License are
- * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * @APPLE_OSREFERENCE_LICENSE_HEADER_START@
+ *
+ * This file contains Original Code and/or Modifications of Original Code
+ * as defined in and that are subject to the Apple Public Source License
+ * Version 2.0 (the 'License'). You may not use this file except in
+ * compliance with the License. The rights granted to you under the License
+ * may not be used to create, or enable the creation or redistribution of,
+ * unlawful or unlicensed copies of an Apple operating system, or to
+ * circumvent, violate, or enable the circumvention or violation of, any
+ * terms of an Apple operating system software license agreement.
+ *
+ * Please obtain a copy of the License at
+ * http://www.opensource.apple.com/apsl/ and read it before using this file.
+ *
+ * The Original Code and all software distributed under the License are
+ * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
  * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the
- * License for the specific language governing rights and limitations
- * under the License.
- * 
- * @APPLE_LICENSE_HEADER_END@
+ * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
+ * Please see the License for the specific language governing rights and
+ * limitations under the License.
+ *
+ * @APPLE_OSREFERENCE_LICENSE_HEADER_END@
  */
 
 /*
 
 class IOCommandPool : public OSObject
 {
-       
-    OSDeclareDefaultStructors(IOCommandPool)
-    
-    
+       OSDeclareDefaultStructors(IOCommandPool);
+
+
 protected:
 
-    queue_head_t fQueueHead;   /* head of the queue of elements available */
-    UInt32 fSleepers;          /* Count of threads sleeping on this pool */
-    IOCommandGate *fSerializer;        /* command gate used for serializing pool access */
+       queue_head_t fQueueHead; /* head of the queue of elements available */
+       UInt32 fSleepers;       /* Count of threads sleeping on this pool */
+       IOCommandGate *fSerializer; /* command gate used for serializing pool access */
 
 /*! @struct ExpansionData
-    @discussion This structure will be used to expand the capablilties of the IOEventSource in the future.
-    */    
-    struct ExpansionData { };
*   @discussion This structure will be used to expand the capablilties of the IOEventSource in the future.
+ */
+       struct ExpansionData { };
 
 /*! @var reserved
-    Reserved for future use.  (Internal use only)  */
-    ExpansionData *reserved;
-
-    /*!
    * @const kIOCommandPoolDefaultSize
    * @abstract The default size of any command pool.
    * @discussion
    * kIOCommandPoolDefaultSize is the default size of any command pool.
    * The default size was determined to be the smallest size for which
    * a pool makes sense.
    */
-
-    static const UInt32 kIOCommandPoolDefaultSize = 2;
-    
-    /*
    * Free all of this object's outstanding resources.
    */
-
-    virtual void free(void);
-    
-    
*   Reserved for future use.  (Internal use only)  */
+       ExpansionData *reserved;
+
+/*!
+ * @const kIOCommandPoolDefaultSize
+ * @abstract The default size of any command pool.
+ * @discussion
+ * kIOCommandPoolDefaultSize is the default size of any command pool.
+ * The default size was determined to be the smallest size for which
+ * a pool makes sense.
+ */
+
+       static const UInt32 kIOCommandPoolDefaultSize = 2;
+
+/*
+ * Free all of this object's outstanding resources.
+ */
+
+       virtual void free(void) APPLE_KEXT_OVERRIDE;
+
+
 public:
 
-    /*!
    * @function initWithWorkLoop
    * @abstract Primary initializer for an IOCommandPool object.
    * @discussion Primary initializer for an IOCommandPool.
    * Should probably use IOCommandPool::withWorkLoop() as it is easier to use.
    * @param inWorkLoop
    * The workloop that this command pool should synchronize with.
    * @result Returns true if command pool was successfully initialized.
    */
-    virtual bool initWithWorkLoop(IOWorkLoop *workLoop);
-
-    /*!
    * @function withWorkLoop
    * @abstract Primary factory method for the IOCommandPool class
    * @discussion
    * The withWorkLoop method is what is known as a factory method. It creates
    * a new instance of an IOCommandPool and returns a pointer to that object.
    * @param inWorkLoop
    * The workloop that this command pool should synchronize with.
    * @result
    * Returns a pointer to an instance of IOCommandPool if successful,
    * otherwise NULL.
    */
-
-    static IOCommandPool *withWorkLoop(IOWorkLoop *inWorkLoop);
-
-    /*!
    * @function init
    * @abstract Should never be used, obsolete. See initWithWorkLoop.
    */
-    virtual bool init(IOService *inOwner,
-                      IOWorkLoop *inWorkLoop,
-                      UInt32 inSize = kIOCommandPoolDefaultSize);
-
-    /*!
    * @function withWorkLoop
    * @abstract Should never be used, obsolete. See IOCommandPool::withWorkLoop.
    */
-    static IOCommandPool *commandPool(IOService *inOwner,
-                                        IOWorkLoop *inWorkLoop,
-                                        UInt32 inSize = kIOCommandPoolDefaultSize);
-    
-    
-    /*!
    * @function getCommand
    * @discussion The getCommand method is used to get a pointer to an object of type IOCommand from the pool.
    * @param blockForCommand
    * If the caller would like to have its thread slept until a command is
    * available, it should pass true, else false.
    * @result
    * If the caller passes true in blockForCommand, getCommand guarantees that
    * the result will be a pointer to an IOCommand object from the pool. If
    * the caller passes false, s/he is responsible for checking whether a non-NULL
    * pointer was returned.
    */
-
-    virtual IOCommand *getCommand(bool blockForCommand = true);
-    
-    /*!
    * @function returnCommand
    * @discussion
    * The returnCommand method is used to place an object of type IOCommand
    * into the pool, whether it be the first time, or the 1000th time.
    * @param commmand
    * The command to place in the pool.
    */
-    
-    virtual void returnCommand(IOCommand *command);
-    
+/*!
+ * @function initWithWorkLoop
+ * @abstract Primary initializer for an IOCommandPool object.
+ * @discussion Primary initializer for an IOCommandPool.
+ * Should probably use IOCommandPool::withWorkLoop() as it is easier to use.
* @param workLoop
+ * The workloop that this command pool should synchronize with.
+ * @result Returns true if command pool was successfully initialized.
+ */
+       virtual bool initWithWorkLoop(IOWorkLoop *workLoop);
+
+/*!
+ * @function withWorkLoop
+ * @abstract Primary factory method for the IOCommandPool class
+ * @discussion
+ * The withWorkLoop method is what is known as a factory method. It creates
+ * a new instance of an IOCommandPool and returns a pointer to that object.
+ * @param inWorkLoop
+ * The workloop that this command pool should synchronize with.
+ * @result
+ * Returns a pointer to an instance of IOCommandPool if successful,
+ * otherwise NULL.
+ */
+
+       static IOCommandPool *withWorkLoop(IOWorkLoop *inWorkLoop);
+
+/*!
+ * @function init
+ * @abstract Should never be used, obsolete. See initWithWorkLoop.
+ */
+       virtual bool init(IOService *inOwner,
+           IOWorkLoop *inWorkLoop,
+           UInt32 inSize = kIOCommandPoolDefaultSize);
+
+/*!
+ * @function withWorkLoop
+ * @abstract Should never be used, obsolete. See IOCommandPool::withWorkLoop.
+ */
+       static IOCommandPool *commandPool(IOService *inOwner,
+           IOWorkLoop *inWorkLoop,
+           UInt32 inSize = kIOCommandPoolDefaultSize);
+
+
+/*!
+ * @function getCommand
+ * @discussion The getCommand method is used to get a pointer to an object of type IOCommand from the pool.
+ * @param blockForCommand
+ * If the caller would like to have its thread slept until a command is
+ * available, it should pass true, else false.
+ * @result
+ * If the caller passes true in blockForCommand, getCommand guarantees that
+ * the result will be a pointer to an IOCommand object from the pool. If
+ * the caller passes false, s/he is responsible for checking whether a non-NULL
+ * pointer was returned.
+ */
+
+       virtual IOCommand *getCommand(bool blockForCommand = true);
+
+/*!
+ * @function returnCommand
+ * @discussion
+ * The returnCommand method is used to place an object of type IOCommand
+ * into the pool, whether it be the first time, or the 1000th time.
* @param command
+ * The command to place in the pool.
+ */
+
+       virtual void returnCommand(IOCommand *command);
+
 protected:
-    
-    /*!
-     * @function gatedGetCommand
-     * @discussion
-     * The gatedGetCommand method is used to serialize the extraction of a 
-     * command from the pool behind a command gate, runAction-ed by getCommand.
-     * @param vCommand
-     * A pointer to a pointer to an IOCommand object where the returned
-     * command will be stored.
-     * @param vBlock
-     * A bool that indicates whether to block the request until a command
-     * becomes available.
-     * @result
-     * Returns kIOReturnNoResources if no command is available and the client
-     * doesn't wish to block until one does become available.
-     * kIOReturnSuccess if the vCommand argument is valid.
-     */
-    virtual IOReturn gatedGetCommand(IOCommand **command, bool blockForCommand);
-    
-    /*!
-     * @function gatedReturnCommand
-     * @discussion
-     * The gatedReturnCommand method is used to serialize the return of a 
-     * command to the pool behind a command gate, runAction-ed by returnCommand.
-     * @param vCommand
-     * A pointer to the IOCommand object to be returned to the pool.
-     * @result
-     * Always returns kIOReturnSuccess if the vCommand argument is valid.
-     */
-    virtual IOReturn gatedReturnCommand(IOCommand *command);
+
+/*!
+ * @function gatedGetCommand
+ * @discussion
+ * The gatedGetCommand method is used to serialize the extraction of a
+ * command from the pool behind a command gate, runAction-ed by getCommand.
+ * @param command
+ * A pointer to a pointer to an IOCommand object where the returned
+ * command will be stored.
+ * @param blockForCommand
+ * A bool that indicates whether to block the request until a command
+ * becomes available.
+ * @result
+ * Returns kIOReturnNoResources if no command is available and the client
+ * doesn't wish to block until one does become available.
+ * kIOReturnSuccess if the vCommand argument is valid.
+ */
+       virtual IOReturn gatedGetCommand(
+               LIBKERN_RETURNS_NOT_RETAINED IOCommand **command, bool blockForCommand);
+
+/*!
+ * @function gatedReturnCommand
+ * @discussion
+ * The gatedReturnCommand method is used to serialize the return of a
+ * command to the pool behind a command gate, runAction-ed by returnCommand.
+ * @param command
+ * A pointer to the IOCommand object to be returned to the pool.
+ * @result
+ * Always returns kIOReturnSuccess if the vCommand argument is valid.
+ */
+       virtual IOReturn gatedReturnCommand(IOCommand *command);
 
 private:
-    OSMetaClassDeclareReservedUnused(IOCommandPool, 0);
-    OSMetaClassDeclareReservedUnused(IOCommandPool, 1);
-    OSMetaClassDeclareReservedUnused(IOCommandPool, 2);
-    OSMetaClassDeclareReservedUnused(IOCommandPool, 3);
-    OSMetaClassDeclareReservedUnused(IOCommandPool, 4);
-    OSMetaClassDeclareReservedUnused(IOCommandPool, 5);
-    OSMetaClassDeclareReservedUnused(IOCommandPool, 6);
-    OSMetaClassDeclareReservedUnused(IOCommandPool, 7);
+       OSMetaClassDeclareReservedUnused(IOCommandPool, 0);
+       OSMetaClassDeclareReservedUnused(IOCommandPool, 1);
+       OSMetaClassDeclareReservedUnused(IOCommandPool, 2);
+       OSMetaClassDeclareReservedUnused(IOCommandPool, 3);
+       OSMetaClassDeclareReservedUnused(IOCommandPool, 4);
+       OSMetaClassDeclareReservedUnused(IOCommandPool, 5);
+       OSMetaClassDeclareReservedUnused(IOCommandPool, 6);
+       OSMetaClassDeclareReservedUnused(IOCommandPool, 7);
 };
 
-#endif /* defined(KERNEL) && defined(__cplusplus) */
+#endif  /* defined(KERNEL) && defined(__cplusplus) */
 
-#endif /* _IOKIT_IO_COMMAND_POOL_H_ */
+#endif  /* _IOKIT_IO_COMMAND_POOL_H_ */