]> 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 91069f3d309ea8dbab4ccaf3ef972f887b769c8d..ee30bb44ea7d634a6fd979f577a29074fe0254a5 100644 (file)
@@ -1,8 +1,8 @@
 /*
- * Copyright (c) 2000 Apple Computer, Inc. All rights reserved.
+ * Copyright (c) 2000-2019 Apple Inc. All rights reserved.
  *
  * @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
  * 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,
@@ -22,7 +22,7 @@
  * 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_ */