--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">\r
+<html>\r
+<head>\r
+<link rel="stylesheet" href="../robodoc.css" type="text/css">\r
+<title>./inc_doc/complib/cl_async_proc_h.html</title>\r
+<!-- Source: ./inc/complib/cl_async_proc.h -->\r
+<!-- Generated with ROBODoc Version 4.99.22 (Mar 6 2006) -->\r
+</head>\r
+<body bgcolor="#FFFFFF">\r
+<a name="robo_top_of_doc">Generated from ./inc/complib/cl_async_proc.h</a> with <a href="http://sourceforge.net/projects/robodoc/">ROBODoc</a> v4.99.22 on Sun Apr 16 2006 17:39:25\r
+<br />\r
+<hr />\r
+\r
+<h2><a name="robo6">[Modules]<a name="Component20Library2fAsynchronous20Processor">\r
+Component Library/Asynchronous Processor</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_modules.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> Asynchronous Processor\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The asynchronous processor provides threads for executing queued callbacks.\r
+\r
+ The threads in the asynchronous processor wait for callbacks to be queued.\r
+\r
+ The asynchronous processor functions operate on a <a href="#robo271">cl_async_proc_t</a> structure\r
+ which should be treated as opaque and manipulated only through the provided\r
+ functions.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Structures:\r
+ <a href="#robo271">cl_async_proc_t</a>, <a href="#robo269">cl_async_proc_item_t</a>\r
+\r
+ Initialization:\r
+ <a href="#robo266">cl_async_proc_construct</a>, <a href="#robo268">cl_async_proc_init</a>, <a href="#robo267">cl_async_proc_destroy</a>\r
+\r
+ Manipulation:\r
+ <a href="#robo270">cl_async_proc_queue</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo266">[Functions]<a name="Component20Library3a20Asynchronous20Processor2fcl5fasync5fproc5fconstruct">\r
+Component Library: Asynchronous Processor/cl_async_proc_construct</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_async_proc_construct</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_async_proc_construct</strong> function initializes the state of a\r
+ thread pool.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT void CL_API\r
+<strong>cl_async_proc_construct</strong>(\r
+ IN <a href="#robo271">cl_async_proc_t</a>* const p_async_proc );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_async_proc\r
+ [in] Pointer to an asynchronous processor structure.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> This function does not return a value.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> Allows calling <a href="#robo267">cl_async_proc_destroy</a> without first calling\r
+ <a href="#robo268">cl_async_proc_init</a>.\r
+\r
+ Calling <strong>cl_async_proc_construct</strong> is a prerequisite to calling any other\r
+ thread pool function except <a href="#robo268">cl_async_proc_init</a>.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Asynchronous Processor, <a href="#robo268">cl_async_proc_init</a>, <a href="#robo267">cl_async_proc_destroy</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo267">[Functions]<a name="Component20Library3a20Asynchronous20Processor2fcl5fasync5fproc5fdestroy">\r
+Component Library: Asynchronous Processor/cl_async_proc_destroy</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_async_proc_destroy</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_async_proc_destroy</strong> function performs any necessary cleanup\r
+ for a thread pool.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT void CL_API\r
+<strong>cl_async_proc_destroy</strong>(\r
+ IN <a href="#robo271">cl_async_proc_t</a>* const p_async_proc );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_async_proc\r
+ [in] Pointer to an asynchronous processor structure to destroy.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> This function does not return a value.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This function blocks until all threads exit, and must therefore not\r
+ be called from any of the asynchronous processor's threads. Because of\r
+ its blocking nature, callers of <strong>cl_async_proc_destroy</strong> must ensure that\r
+ entering a wait state is valid from the calling thread context.\r
+\r
+ This function should only be called after a call to\r
+ <a href="#robo266">cl_async_proc_construct</a> or <a href="#robo268">cl_async_proc_init</a>.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Asynchronous Processor, <a href="#robo266">cl_async_proc_construct</a>, <a href="#robo268">cl_async_proc_init</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo268">[Functions]<a name="Component20Library3a20Asynchronous20Processor2fcl5fasync5fproc5finit">\r
+Component Library: Asynchronous Processor/cl_async_proc_init</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_async_proc_init</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_async_proc_init</strong> function initialized an asynchronous processor\r
+ for use.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT <a href="./cl_types_h.html#robo304">cl_status_t</a> CL_API\r
+<strong>cl_async_proc_init</strong>(\r
+ IN <a href="#robo271">cl_async_proc_t</a>* const p_async_proc,\r
+ IN const uint32_t thread_count,\r
+ IN const char* const name );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_async_proc\r
+ [in] Pointer to an asynchronous processor structure to initialize.\r
+\r
+ thread_count\r
+ [in] Number of threads to be managed by the asynchronous processor.\r
+\r
+ name\r
+ [in] Name to associate with the threads. The name may be up to 16\r
+ characters, including a terminating null character. All threads\r
+ created in the asynchronous processor have the same name.\r
+\r
+ RETURN VALUES\r
+ CL_SUCCESS if the asynchronous processor creation succeeded.\r
+\r
+ CL_INSUFFICIENT_MEMORY if there was not enough memory to inititalize\r
+ the asynchronous processor.\r
+\r
+ CL_ERROR if the threads could not be created.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> <strong>cl_async_proc_init</strong> creates and starts the specified number of threads.\r
+ If thread_count is zero, the asynchronous processor creates as many\r
+ threads as there are processors in the system.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Asynchronous Processor, <a href="#robo266">cl_async_proc_construct</a>, <a href="#robo267">cl_async_proc_destroy</a>,\r
+ <a href="#robo270">cl_async_proc_queue</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo269">[Structures]<a name="Component20Library3a20Asynchronous20Processor2fcl5fasync5fproc5fitem5ft">\r
+Component Library: Asynchronous Processor/cl_async_proc_item_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_async_proc_item_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Asynchronous processor item structure passed to the <a href="#robo270">cl_async_proc_queue</a>\r
+ function to queue a callback for execution.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef struct _cl_async_proc_item\r
+{\r
+ <a href="./cl_qcomppool_h.html#robo542">cl_pool_item_t</a> pool_item;\r
+ <a href="#robo272">cl_pfn_async_proc_cb_t</a> pfn_callback;\r
+\r
+} <strong>cl_async_proc_item_t</strong>;\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> pool_item\r
+ <a href="./cl_pool_h.html#robo24">Pool</a> item for queuing the item to be invoked by the asynchronous\r
+ processor's threads. This field is defined as a pool item to\r
+ allow items to be managed by a pool.\r
+\r
+ pfn_callback\r
+ Pointer to a callback function to invoke when the item is dequeued.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Asynchronous Processor, <a href="#robo270">cl_async_proc_queue</a>, <a href="#robo272">cl_pfn_async_proc_cb_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo270">[Functions]<a name="Component20Library3a20Asynchronous20Processor2fcl5fasync5fproc5fqueue">\r
+Component Library: Asynchronous Processor/cl_async_proc_queue</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_async_proc_queue</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_async_proc_queue</strong> function queues a callback to an asynchronous\r
+ processor.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT void CL_API\r
+<strong>cl_async_proc_queue</strong>(\r
+ IN <a href="#robo271">cl_async_proc_t</a>* const p_async_proc,\r
+ IN <a href="#robo269">cl_async_proc_item_t</a>* const p_item );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_async_proc\r
+ [in] Pointer to an asynchronous processor structure to initialize.\r
+\r
+ p_item\r
+ [in] Pointer to an asynchronous processor item to queue for execution.\r
+ The callback and context fields of the item must be valid.\r
+\r
+ RETURN VALUES\r
+ This function does not return a value.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Asynchronous Processor, <a href="#robo268">cl_async_proc_init</a>, <a href="#robo272">cl_pfn_async_proc_cb_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo271">[Structures]<a name="Component20Library3a20Asynchronous20Processor2fcl5fasync5fproc5ft">\r
+Component Library: Asynchronous Processor/cl_async_proc_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_async_proc_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Asynchronous processor structure.\r
+\r
+ The <strong>cl_async_proc_t</strong> structure should be treated as opaque, and should be\r
+ manipulated only through the provided functions.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef struct _cl_async_proc\r
+{\r
+ <a href="./cl_threadpool_h.html#robo662">cl_thread_pool_t</a> thread_pool;\r
+ <a href="./cl_qlist_h.html#robo584">cl_qlist_t</a> item_queue;\r
+ cl_spinlock_t lock;\r
+ cl_state_t state;\r
+\r
+} <strong>cl_async_proc_t</strong>;\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> item_pool\r
+ <a href="./cl_pool_h.html#robo24">Pool</a> of items storing the callback function and contexts to be invoked\r
+ by the asynchronous processor's threads.\r
+\r
+ thread_pool\r
+ Thread pool that will invoke the callbacks.\r
+\r
+ item_queue\r
+ Queue of items that the threads should process.\r
+\r
+ lock\r
+ Lock used to synchronize access to the item pool and queue.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Asynchronous Processor\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo272">[Definitions]<a name="Component20Library3a20Asynchronous20Processor2fcl5fpfn5fasync5fproc5fcb5ft">\r
+Component Library: Asynchronous Processor/cl_pfn_async_proc_cb_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_pfn_async_proc_cb_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_pfn_async_proc_cb_t</strong> function type defines the prototype for\r
+ callbacks queued to and invoked by the asynchronous processor.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef void\r
+(CL_API *<strong>cl_pfn_async_proc_cb_t</strong>)(\r
+ IN struct _cl_async_proc_item *p_item );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_item\r
+ Pointer to the <a href="#robo269">cl_async_proc_item_t</a> structure that was queued in\r
+ a call to <a href="#robo270">cl_async_proc_queue</a>.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This function type is provided as function prototype reference for the\r
+ function provided by users as a parameter to the <a href="#robo270">cl_async_proc_queue</a>\r
+ function.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Asynchronous Processor, <a href="#robo269">cl_async_proc_item_t</a>\r
+</pre>\r
+</span>\r
+</body>\r
+</html>\r
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">\r
+<html>\r
+<head>\r
+<link rel="stylesheet" href="../robodoc.css" type="text/css">\r
+<title>./inc_doc/complib/cl_atomic_h.html</title>\r
+<!-- Source: ./inc/complib/cl_atomic.h -->\r
+<!-- Generated with ROBODoc Version 4.99.22 (Mar 6 2006) -->\r
+</head>\r
+<body bgcolor="#FFFFFF">\r
+<a name="robo_top_of_doc">Generated from ./inc/complib/cl_atomic.h</a> with <a href="http://sourceforge.net/projects/robodoc/">ROBODoc</a> v4.99.22 on Sun Apr 16 2006 17:39:25\r
+<br />\r
+<hr />\r
+\r
+<h2><a name="robo7">[Modules]<a name="Component20Library2fAtomic20Operations">\r
+Component Library/Atomic Operations</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_modules.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> Atomic Operations\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The Atomic Operations functions allow callers to operate on\r
+ 32-bit signed integers in an atomic fashion.\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo273">[Functions]<a name="Component20Library3a20Atomic20Operations2fcl5fatomic5fadd">\r
+Component Library: Atomic Operations/cl_atomic_add</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_atomic_add</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_atomic_add</strong> function atomically adds a value to a\r
+ 32-bit signed integer and returns the resulting value.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT int32_t CL_API\r
+<strong>cl_atomic_add</strong>(\r
+ IN atomic32_t* const p_value,\r
+ IN const int32_t increment );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_value\r
+ [in] Pointer to a 32-bit integer that will be added to.\r
+\r
+ increment\r
+ [in] Value by which to increment the integer pointed to by p_value.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> Returns the value pointed to by p_value after the addition.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> The provided increment is added to the value and the result returned in\r
+ one atomic operation.\r
+\r
+ <strong>cl_atomic_add</strong> maintains data consistency without requiring additional\r
+ synchronization mechanisms in multi-threaded environments.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Atomic Operations, <a href="#robo276">cl_atomic_inc</a>, <a href="#robo275">cl_atomic_dec</a>, <a href="#robo277">cl_atomic_sub</a>,\r
+ <a href="#robo278">cl_atomic_xchg</a>, <a href="#robo274">cl_atomic_comp_xchg</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo274">[Functions]<a name="Component20Library3a20Atomic20Operations2fcl5fatomic5fcomp5fxchg">\r
+Component Library: Atomic Operations/cl_atomic_comp_xchg</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_atomic_comp_xchg</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_atomic_comp_xchg</strong> function atomically compares a 32-bit signed\r
+ integer to a desired value, sets that integer to the\r
+ specified value if equal, and returns the initial value.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT int32_t CL_API\r
+<strong>cl_atomic_comp_xchg</strong>(\r
+ IN atomic32_t* const p_value,\r
+ IN const int32_t compare,\r
+ IN const int32_t new_value );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_value\r
+ [in] Pointer to a 32-bit integer to exchange with new_value.\r
+\r
+ compare\r
+ [in] Value to compare to the value pointed to by p_value.\r
+\r
+ new_value\r
+ [in] Value to assign if the value pointed to by p_value is equal to\r
+ the value specified by the compare parameter.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> Returns the initial value of the variable pointed to by p_value.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> The value pointed to by p_value is compared to the value specified by the\r
+ compare parameter. If the two values are equal, the p_value variable is\r
+ set to new_value. The initial value pointed to by p_value is returned.\r
+\r
+ <strong>cl_atomic_comp_xchg</strong> maintains data consistency without requiring additional\r
+ synchronization mechanisms in multi-threaded environments.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Atomic Operations, <a href="#robo276">cl_atomic_inc</a>, <a href="#robo275">cl_atomic_dec</a>, <a href="#robo273">cl_atomic_add</a>,\r
+ <a href="#robo277">cl_atomic_sub</a>, <a href="#robo278">cl_atomic_xchg</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo275">[Functions]<a name="Component20Library3a20Atomic20Operations2fcl5fatomic5fdec">\r
+Component Library: Atomic Operations/cl_atomic_dec</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_atomic_dec</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_atomic_dec</strong> function atomically decrements a 32-bit signed\r
+ integer and returns the decremented value.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT int32_t CL_API\r
+<strong>cl_atomic_dec</strong>(\r
+ IN atomic32_t* const p_value );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_value\r
+ [in] Pointer to a 32-bit integer to decrement.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> Returns the decremented value pointed to by p_value.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> The provided value is decremented and its value returned in one atomic\r
+ operation.\r
+\r
+ <strong>cl_atomic_dec</strong> maintains data consistency without requiring additional\r
+ synchronization mechanisms in multi-threaded environments.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Atomic Operations, <a href="#robo276">cl_atomic_inc</a>, <a href="#robo273">cl_atomic_add</a>, <a href="#robo277">cl_atomic_sub</a>,\r
+ <a href="#robo278">cl_atomic_xchg</a>, <a href="#robo274">cl_atomic_comp_xchg</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo276">[Functions]<a name="Component20Library3a20Atomic20Operations2fcl5fatomic5finc">\r
+Component Library: Atomic Operations/cl_atomic_inc</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_atomic_inc</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_atomic_inc</strong> function atomically increments a 32-bit signed\r
+ integer and returns the incremented value.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT int32_t CL_API\r
+<strong>cl_atomic_inc</strong>(\r
+ IN atomic32_t* const p_value );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_value\r
+ [in] Pointer to a 32-bit integer to increment.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> Returns the incremented value pointed to by p_value.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> The provided value is incremented and its value returned in one atomic\r
+ operation.\r
+\r
+ <strong>cl_atomic_inc</strong> maintains data consistency without requiring additional\r
+ synchronization mechanisms in multi-threaded environments.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Atomic Operations, <a href="#robo275">cl_atomic_dec</a>, <a href="#robo273">cl_atomic_add</a>, <a href="#robo277">cl_atomic_sub</a>,\r
+ <a href="#robo278">cl_atomic_xchg</a>, <a href="#robo274">cl_atomic_comp_xchg</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo277">[Functions]<a name="Component20Library3a20Atomic20Operations2fcl5fatomic5fsub">\r
+Component Library: Atomic Operations/cl_atomic_sub</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_atomic_sub</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_atomic_sub</strong> function atomically subtracts a value from a\r
+ 32-bit signed integer and returns the resulting value.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT int32_t CL_API\r
+<strong>cl_atomic_sub</strong>(\r
+ IN atomic32_t* const p_value,\r
+ IN const int32_t decrement );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_value\r
+ [in] Pointer to a 32-bit integer that will be subtracted from.\r
+\r
+ decrement\r
+ [in] Value by which to decrement the integer pointed to by p_value.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> Returns the value pointed to by p_value after the subtraction.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> The provided decrement is subtracted from the value and the result\r
+ returned in one atomic operation.\r
+\r
+ <strong>cl_atomic_sub</strong> maintains data consistency without requiring additional\r
+ synchronization mechanisms in multi-threaded environments.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Atomic Operations, <a href="#robo276">cl_atomic_inc</a>, <a href="#robo275">cl_atomic_dec</a>, <a href="#robo273">cl_atomic_add</a>,\r
+ <a href="#robo278">cl_atomic_xchg</a>, <a href="#robo274">cl_atomic_comp_xchg</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo278">[Functions]<a name="Component20Library3a20Atomic20Operations2fcl5fatomic5fxchg">\r
+Component Library: Atomic Operations/cl_atomic_xchg</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_atomic_xchg</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_atomic_xchg</strong> function atomically sets a value of a\r
+ 32-bit signed integer and returns the initial value.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT int32_t CL_API\r
+<strong>cl_atomic_xchg</strong>(\r
+ IN atomic32_t* const p_value,\r
+ IN const int32_t new_value );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_value\r
+ [in] Pointer to a 32-bit integer to exchange with new_value.\r
+\r
+ new_value\r
+ [in] Value to assign.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> Returns the initial value pointed to by p_value.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> The provided value is exchanged with new_value and its initial value\r
+ returned in one atomic operation.\r
+\r
+ <strong>cl_atomic_xchg</strong> maintains data consistency without requiring additional\r
+ synchronization mechanisms in multi-threaded environments.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Atomic Operations, <a href="#robo276">cl_atomic_inc</a>, <a href="#robo275">cl_atomic_dec</a>, <a href="#robo273">cl_atomic_add</a>,\r
+ <a href="#robo277">cl_atomic_sub</a>, <a href="#robo274">cl_atomic_comp_xchg</a>\r
+</pre>\r
+</span>\r
+</body>\r
+</html>\r
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">\r
+<html>\r
+<head>\r
+<link rel="stylesheet" href="../robodoc.css" type="text/css">\r
+<title>./inc_doc/complib/cl_byteswap_h.html</title>\r
+<!-- Source: ./inc/complib/cl_byteswap.h -->\r
+<!-- Generated with ROBODoc Version 4.99.22 (Mar 6 2006) -->\r
+</head>\r
+<body bgcolor="#FFFFFF">\r
+<a name="robo_top_of_doc">Generated from ./inc/complib/cl_byteswap.h</a> with <a href="http://sourceforge.net/projects/robodoc/">ROBODoc</a> v4.99.22 on Sun Apr 16 2006 17:39:25\r
+<br />\r
+<hr />\r
+\r
+<h2><a name="robo8">[Modules]<a name="Component20Library2fByte20Swapping">\r
+Component Library/Byte Swapping</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_modules.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> Byte Swapping\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The byte swapping functions and macros allow swapping bytes from network\r
+ byte order to host byte order.\r
+\r
+ All data transmitted between systems should be in network byte order.\r
+ In order to utilize such data, it must be converted to host byte order\r
+ before use.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Functions:\r
+ <a href="#robo287">cl_ntoh16</a>, <a href="#robo280">cl_hton16</a>, <a href="#robo288">cl_ntoh32</a>, <a href="#robo281">cl_hton32</a>, <a href="#robo291">cl_ntoh64</a>, <a href="#robo284">cl_hton64</a>,\r
+ <a href="#robo285">cl_ntoh</a>\r
+\r
+ Macros:\r
+ <a href="#robo286">CL_NTOH16</a>, <a href="#robo279">CL_HTON16</a>, <a href="#robo289">CL_NTOH32</a>, <a href="#robo282">CL_HTON32</a>, <a href="#robo290">CL_NTOH64</a>, <a href="#robo283">CL_HTON64</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo279">[Definitions]<a name="Component20Library3a20Byte20Swapping2fCL5fHTON16">\r
+Component Library: Byte Swapping/CL_HTON16</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>CL_HTON16</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>CL_HTON16</strong> macro converts a 16-bit value from host byte order to\r
+ network byte order. The <strong>CL_HTON16</strong> macro will cause constant values to be\r
+ swapped by the pre-processor. For variables, <strong>CL_HTON16</strong> is less efficient\r
+ than the <a href="#robo280">cl_hton16</a> function.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>* <strong>CL_HTON16</strong>( val );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> val\r
+ [in] 16-bit value to swap from host byte order to network byte order.\r
+</pre>\r
+</span><p><strong>RESULT</strong></p>\r
+<span class="RESULT"><pre> Value of val converted to network byte order.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This macro is analogous to <a href="#robo286">CL_NTOH16</a>.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Byte Swapping, <a href="#robo286">CL_NTOH16</a>, <a href="#robo282">CL_HTON32</a>, <a href="#robo283">CL_HTON64</a>,\r
+ <a href="#robo280">cl_hton16</a>, <a href="#robo281">cl_hton32</a>, <a href="#robo284">cl_hton64</a>, <a href="#robo285">cl_ntoh</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo280">[Functions]<a name="Component20Library3a20Byte20Swapping2fcl5fhton16">\r
+Component Library: Byte Swapping/cl_hton16</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_hton16</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_hton16</strong> function converts a 16-bit value from host byte order to\r
+ network byte order.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>* uint16_t\r
+* <strong>cl_hton16</strong>(\r
+* IN const uint16_t val );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> val\r
+ [in] Value to swap from host byte order to network byte order .\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> Value of val converted to network byte order.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This function is analogous to <a href="#robo287">cl_ntoh16</a>.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Byte Swapping, <a href="#robo287">cl_ntoh16</a>, <a href="#robo281">cl_hton32</a>, <a href="#robo284">cl_hton64</a>, <a href="#robo285">cl_ntoh</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo282">[Definitions]<a name="Component20Library3a20Byte20Swapping2fCL5fHTON32">\r
+Component Library: Byte Swapping/CL_HTON32</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>CL_HTON32</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>CL_HTON32</strong> macro converts a 32-bit value from host byte order to\r
+ network byte order. The <strong>CL_HTON32</strong> macro will cause constant values to be\r
+ swapped by the pre-processor. For variables, <strong>CL_HTON32</strong> is less efficient\r
+ than the <a href="#robo281">cl_hton32</a> function.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>* <strong>CL_HTON32</strong>( val );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> val\r
+ [in] 32-bit value to swap from host byte order to network byte order.\r
+</pre>\r
+</span><p><strong>RESULT</strong></p>\r
+<span class="RESULT"><pre> Value of val converted to network byte order.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This macro is analogous to <a href="#robo289">CL_NTOH32</a>.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Byte Swapping, <a href="#robo289">CL_NTOH32</a>, <a href="#robo279">CL_HTON16</a>, <a href="#robo283">CL_HTON64</a>,\r
+ <a href="#robo280">cl_hton16</a>, <a href="#robo281">cl_hton32</a>, <a href="#robo284">cl_hton64</a>, <a href="#robo285">cl_ntoh</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo281">[Functions]<a name="Component20Library3a20Byte20Swapping2fcl5fhton32">\r
+Component Library: Byte Swapping/cl_hton32</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_hton32</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_hton32</strong> function converts a 32-bit value from host byte order to\r
+ network byte order.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>* uint32_t\r
+* <strong>cl_hton32</strong>(\r
+* IN const uint32_t val );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> val\r
+ [in] Value to swap from host byte order to network byte order .\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> Value of val converted to network byte order.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This function is analogous to <a href="#robo288">cl_ntoh32</a>.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Byte Swapping, <a href="#robo288">cl_ntoh32</a>, <a href="#robo280">cl_hton16</a>, <a href="#robo284">cl_hton64</a>, <a href="#robo285">cl_ntoh</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo283">[Definitions]<a name="Component20Library3a20Byte20Swapping2fCL5fHTON64">\r
+Component Library: Byte Swapping/CL_HTON64</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>CL_HTON64</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>CL_HTON64</strong> macro converts a 64-bit value from host byte order to\r
+ network byte order. The <strong>CL_HTON64</strong> macro will cause constant values to be\r
+ swapped by the pre-processor. For variables, <strong>CL_HTON64</strong> is less efficient\r
+ than the <a href="#robo284">cl_hton64</a> function.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>* <strong>CL_HTON64</strong>( val );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> val\r
+ [in] 64-bit value to swap from host byte order to network byte order.\r
+</pre>\r
+</span><p><strong>RESULT</strong></p>\r
+<span class="RESULT"><pre> Value of val converted to network byte order.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This macro is analogous to <a href="#robo290">CL_NTOH64</a>.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Byte Swapping, <a href="#robo290">CL_NTOH64</a>, <a href="#robo279">CL_HTON16</a>, <a href="#robo282">CL_HTON32</a>,\r
+ <a href="#robo280">cl_hton16</a>, <a href="#robo281">cl_hton32</a>, <a href="#robo284">cl_hton64</a>, <a href="#robo285">cl_ntoh</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo284">[Functions]<a name="Component20Library3a20Byte20Swapping2fcl5fhton64">\r
+Component Library: Byte Swapping/cl_hton64</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_hton64</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_hton64</strong> function converts a 64-bit value from host byte order to\r
+ network byte order.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>* uint64_t\r
+* <strong>cl_hton64</strong>(\r
+* IN const uint64_t val );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> val\r
+ [in] Value to swap from host byte order to network byte order .\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> Value of val converted to network byte order.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This function is analogous to <a href="#robo291">cl_ntoh64</a>.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Byte Swapping, <a href="#robo291">cl_ntoh64</a>, <a href="#robo280">cl_hton16</a>, <a href="#robo281">cl_hton32</a>, <a href="#robo285">cl_ntoh</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo285">[Functions]<a name="Component20Library3a20Byte20Swapping2fcl5fntoh">\r
+Component Library: Byte Swapping/cl_ntoh</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_ntoh</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_ntoh</strong> function converts a value from network byte order to\r
+ host byte order.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_INLINE void CL_API\r
+<strong>cl_ntoh</strong>(\r
+ OUT char* const p_dest,\r
+ IN const char* const p_src,\r
+ IN const uint8_t size )\r
+{\r
+#if CPU_LE\r
+ uint8_t i;\r
+ char temp;\r
+\r
+ if( p_src == p_dest )\r
+ {\r
+ /* Swap in place if source and destination are the same. */\r
+ for( i = 0; i < size / 2; i++ )\r
+ {\r
+ temp = p_dest[i];\r
+ p_dest[i] = p_src[size - 1 - i];\r
+ p_dest[size - 1 - i] = temp;\r
+ }\r
+ }\r
+ else\r
+ {\r
+ for( i = 0; i < size; i++ )\r
+ p_dest[i] = p_src[size - 1 - i];\r
+ }\r
+#else\r
+ /*\r
+ * If the source and destination are not the same, copy the source to\r
+ * the destination.\r
+ */\r
+ if( p_src != p_dest )\r
+ <a href="./cl_memory_h.html#robo431">cl_memcpy</a>( p_dest, p_src, size );\r
+#endif\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_dest\r
+ [in] Pointer to a byte array to contain the converted value of p_src.\r
+\r
+ p_src\r
+ [in] Pointer to a byte array to be converted from network byte\r
+ ordering.\r
+\r
+ size\r
+ [in] Number of bytes to swap.p_dest\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> This function does not return a value.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> <strong>cl_ntoh</strong> can perform in place swapping if both p_src and p_dest point to\r
+ the same buffer.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Byte Swapping, <a href="#robo287">cl_ntoh16</a>, <a href="#robo288">cl_ntoh32</a>, <a href="#robo291">cl_ntoh64</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo286">[Definitions]<a name="Component20Library3a20Byte20Swapping2fCL5fNTOH16">\r
+Component Library: Byte Swapping/CL_NTOH16</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>CL_NTOH16</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>CL_NTOH16</strong> macro converts a 16-bit value from network byte order to\r
+ host byte order. The <strong>CL_NTOH16</strong> macro will cause constant values to be\r
+ swapped by the pre-processor. For variables, <strong>CL_NTOH16</strong> is less efficient\r
+ than the <a href="#robo287">cl_ntoh16</a> function.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>* <strong>CL_NTOH16</strong>( val );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> val\r
+ [in] 16-bit value to swap from network byte order to host byte order.\r
+</pre>\r
+</span><p><strong>RESULT</strong></p>\r
+<span class="RESULT"><pre> Value of val converted to host byte order.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This macro is analogous to <a href="#robo279">CL_HTON16</a>.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Byte Swapping, <a href="#robo279">CL_HTON16</a>, <a href="#robo289">CL_NTOH32</a>, <a href="#robo290">CL_NTOH64</a>,\r
+ <a href="#robo287">cl_ntoh16</a>, <a href="#robo288">cl_ntoh32</a>, <a href="#robo291">cl_ntoh64</a>, <a href="#robo285">cl_ntoh</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo287">[Functions]<a name="Component20Library3a20Byte20Swapping2fcl5fntoh16">\r
+Component Library: Byte Swapping/cl_ntoh16</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_ntoh16</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_ntoh16</strong> function converts a 16-bit value from network byte order to\r
+ host byte order.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>* uint16_t\r
+* <strong>cl_ntoh16</strong>(\r
+* IN const uint16_t val );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> val\r
+ [in] Value to swap from network byte order to host byte order.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> Value of val converted to host byte order.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This function is analogous to <a href="#robo280">cl_hton16</a>.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Byte Swapping, <a href="#robo280">cl_hton16</a>, <a href="#robo288">cl_ntoh32</a>, <a href="#robo291">cl_ntoh64</a>, <a href="#robo285">cl_ntoh</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo288">[Functions]<a name="Component20Library3a20Byte20Swapping2fcl5fntoh32">\r
+Component Library: Byte Swapping/cl_ntoh32</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_ntoh32</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_ntoh32</strong> function converts a 32-bit value from network byte order to\r
+ host byte order.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>* uint32_t\r
+* <strong>cl_ntoh32</strong>(\r
+* IN const uint32_t val );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> val\r
+ [in] Value to swap from network byte order to host byte order.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> Value of val converted in host byte order.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This function is analogous to <a href="#robo281">cl_hton32</a>.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Byte Swapping, <a href="#robo281">cl_hton32</a>, <a href="#robo287">cl_ntoh16</a>, <a href="#robo291">cl_ntoh64</a>, <a href="#robo285">cl_ntoh</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo289">[Definitions]<a name="Component20Library3a20Byte20Swapping2fCL5fNTOH32">\r
+Component Library: Byte Swapping/CL_NTOH32</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>CL_NTOH32</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>CL_NTOH32</strong> macro converts a 32-bit value from network byte order to\r
+ host byte order. The <strong>CL_NTOH32</strong> macro will cause constant values to be\r
+ swapped by the pre-processor. For variables, <strong>CL_NTOH32</strong> is less efficient\r
+ than the <a href="#robo288">cl_ntoh32</a> function.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>* <strong>CL_NTOH32</strong>( val );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> val\r
+ [in] 32-bit value to swap from network byte order to host byte order.\r
+</pre>\r
+</span><p><strong>RESULT</strong></p>\r
+<span class="RESULT"><pre> Value of val converted to host byte order.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This macro is analogous to <a href="#robo282">CL_HTON32</a>.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Byte Swapping, <a href="#robo282">CL_HTON32</a>, <a href="#robo286">CL_NTOH16</a>, <a href="#robo290">CL_NTOH64</a>,\r
+ <a href="#robo287">cl_ntoh16</a>, <a href="#robo288">cl_ntoh32</a>, <a href="#robo291">cl_ntoh64</a>, <a href="#robo285">cl_ntoh</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo290">[Definitions]<a name="Component20Library3a20Byte20Swapping2fCL5fNTOH64">\r
+Component Library: Byte Swapping/CL_NTOH64</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>CL_NTOH64</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>CL_NTOH64</strong> macro converts a 64-bit value from network byte order to\r
+ host byte order. The <strong>CL_NTOH64</strong> macro will cause constant values to be\r
+ swapped by the pre-processor. For variables, <strong>CL_NTOH64</strong> is less efficient\r
+ than the <a href="#robo291">cl_ntoh64</a> function.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>* <strong>CL_NTOH64</strong>( val );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> val\r
+ [in] 64-bit value to swap from network byte order to host byte order.\r
+</pre>\r
+</span><p><strong>RESULT</strong></p>\r
+<span class="RESULT"><pre> Value of val converted to host byte order.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This macro is analogous to <a href="#robo283">CL_HTON64</a>.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Byte Swapping, <a href="#robo283">CL_HTON64</a>, <a href="#robo286">CL_NTOH16</a>, <a href="#robo289">CL_NTOH32</a>,\r
+ <a href="#robo287">cl_ntoh16</a>, <a href="#robo288">cl_ntoh32</a>, <a href="#robo291">cl_ntoh64</a>, <a href="#robo285">cl_ntoh</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo291">[Functions]<a name="Component20Library3a20Byte20Swapping2fcl5fntoh64">\r
+Component Library: Byte Swapping/cl_ntoh64</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_ntoh64</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_ntoh64</strong> function converts a 64-bit value from network byte order to\r
+ host byte order.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>* uint64_t\r
+* <strong>cl_ntoh64</strong>(\r
+* IN const uint64_t val );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> val\r
+ [in] Value to swap from network byte order to host byte order.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> Value of val converted in host byte order.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This function is analogous to <a href="#robo284">cl_hton64</a>.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Byte Swapping, <a href="#robo284">cl_hton64</a>, <a href="#robo287">cl_ntoh16</a>, <a href="#robo288">cl_ntoh32</a>, <a href="#robo285">cl_ntoh</a>\r
+</pre>\r
+</span>\r
+</body>\r
+</html>\r
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">\r
+<html>\r
+<head>\r
+<link rel="stylesheet" href="../robodoc.css" type="text/css">\r
+<title>./inc_doc/complib/cl_comppool_h.html</title>\r
+<!-- Source: ./inc/complib/cl_comppool.h -->\r
+<!-- Generated with ROBODoc Version 4.99.22 (Mar 6 2006) -->\r
+</head>\r
+<body bgcolor="#FFFFFF">\r
+<a name="robo_top_of_doc">Generated from ./inc/complib/cl_comppool.h</a> with <a href="http://sourceforge.net/projects/robodoc/">ROBODoc</a> v4.99.22 on Sun Apr 16 2006 17:39:25\r
+<br />\r
+<hr />\r
+\r
+<h2><a name="robo9">[Modules]<a name="Component20Library2fComposite20Pool">\r
+Component Library/Composite Pool</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_modules.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> Composite <a href="./cl_pool_h.html#robo24">Pool</a>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The Composite <a href="./cl_pool_h.html#robo24">Pool</a> provides a self-contained and self-sustaining pool of\r
+ user defined composite objects.\r
+\r
+ A composite object is an object that is composed of one or more\r
+ sub-objects, each of which needs to be treated separately for\r
+ initialization. Objects can be retrieved from the pool as long as there\r
+ is memory in the system.\r
+\r
+ To aid in object oriented design, the composite pool provides the user\r
+ the ability to specify callbacks that are invoked for each object for\r
+ construction, initialization, and destruction. Constructor and destructor\r
+ callback functions may not fail.\r
+\r
+ A composite pool does not return memory to the system as the user returns\r
+ objects to the pool. The only method of returning memory to the system is\r
+ to destroy the pool.\r
+\r
+ The composite pool functions operates on a <a href="#robo299">cl_cpool_t</a> structure which\r
+ should be treated as opaque and should be manipulated only through the\r
+ provided functions.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Structures:\r
+ <a href="#robo299">cl_cpool_t</a>\r
+\r
+ Callbacks:\r
+ <a href="#robo302">cl_pfn_cpool_init_t</a>, <a href="#robo301">cl_pfn_cpool_dtor_t</a>\r
+\r
+ Initialization/Destruction:\r
+ <a href="#robo292">cl_cpool_construct</a>, <a href="#robo297">cl_cpool_init</a>, <a href="#robo294">cl_cpool_destroy</a>\r
+\r
+ Manipulation:\r
+ <a href="#robo295">cl_cpool_get</a>, <a href="#robo298">cl_cpool_put</a>, <a href="#robo296">cl_cpool_grow</a>\r
+\r
+ Attributes:\r
+ <a href="#robo300">cl_is_cpool_inited</a>, <a href="#robo293">cl_cpool_count</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo292">[Functions]<a name="Component20Library3a20Composite20Pool2fcl5fcpool5fconstruct">\r
+Component Library: Composite Pool/cl_cpool_construct</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_cpool_construct</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_cpool_construct</strong> function constructs a composite pool.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT void CL_API\r
+<strong>cl_cpool_construct</strong>(\r
+ IN <a href="#robo299">cl_cpool_t</a>* const p_pool );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_pool\r
+ [in] Pointer to a <a href="#robo299">cl_cpool_t</a> structure whose state to initialize.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> This function does not return a value.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> Allows calling <a href="./cl_pool_h.html#robo536">cl_pool_init</a>, <a href="#robo294">cl_cpool_destroy</a>, <a href="#robo300">cl_is_cpool_inited</a>.\r
+\r
+ Calling <strong>cl_cpool_construct</strong> is a prerequisite to calling any other\r
+ composite pool function except <a href="#robo297">cl_cpool_init</a>.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Composite <a href="./cl_pool_h.html#robo24">Pool</a>, <a href="#robo297">cl_cpool_init</a>, <a href="#robo294">cl_cpool_destroy</a>, <a href="#robo300">cl_is_cpool_inited</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo293">[Functions]<a name="Component20Library3a20Composite20Pool2fcl5fcpool5fcount">\r
+Component Library: Composite Pool/cl_cpool_count</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_cpool_count</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_cpool_count</strong> function returns the number of available objects\r
+ in a composite pool.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_INLINE size_t CL_API\r
+<strong>cl_cpool_count</strong>(\r
+ IN <a href="#robo299">cl_cpool_t</a>* const p_pool )\r
+{\r
+ CL_ASSERT( p_pool );\r
+ return( <a href="./cl_qcomppool_h.html#robo544">cl_qcpool_count</a>( &p_pool->qcpool ) );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_pool\r
+ [in] Pointer to a <a href="#robo299">cl_cpool_t</a> structure for which the number of\r
+ available objects is requested.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> Returns the number of objects available in the specified\r
+ composite pool.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Composite <a href="./cl_pool_h.html#robo24">Pool</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo294">[Functions]<a name="Component20Library3a20Composite20Pool2fcl5fcpool5fdestroy">\r
+Component Library: Composite Pool/cl_cpool_destroy</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_cpool_destroy</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_cpool_destroy</strong> function destroys a composite pool.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_INLINE void CL_API\r
+<strong>cl_cpool_destroy</strong>(\r
+ IN <a href="#robo299">cl_cpool_t</a>* const p_pool )\r
+{\r
+ CL_ASSERT( p_pool );\r
+\r
+ <a href="./cl_qcomppool_h.html#robo545">cl_qcpool_destroy</a>( &p_pool->qcpool );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_pool\r
+ [in] Pointer to a <a href="#robo299">cl_cpool_t</a> structure to destroy.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> This function does not return a value.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> All memory allocated for composite objects is freed. The destructor\r
+ callback, if any, will be invoked for every allocated object. Further\r
+ operations on the composite pool should not be attempted after\r
+ <strong>cl_cpool_destroy</strong> is invoked.\r
+\r
+ This function should only be called after a call to <a href="#robo292">cl_cpool_construct</a>.\r
+\r
+ In a debug build, <strong>cl_cpool_destroy</strong> asserts that all objects are in\r
+ the pool.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Composite <a href="./cl_pool_h.html#robo24">Pool</a>, <a href="#robo292">cl_cpool_construct</a>, <a href="#robo297">cl_cpool_init</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo295">[Functions]<a name="Component20Library3a20Composite20Pool2fcl5fcpool5fget">\r
+Component Library: Composite Pool/cl_cpool_get</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_cpool_get</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_cpool_get</strong> function retrieves an object from a\r
+ composite pool.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_INLINE void* CL_API\r
+<strong>cl_cpool_get</strong>(\r
+ IN <a href="#robo299">cl_cpool_t</a>* const p_pool )\r
+{\r
+ cl_pool_obj_t *p_pool_obj;\r
+\r
+ CL_ASSERT( p_pool );\r
+\r
+ p_pool_obj = (cl_pool_obj_t*)<a href="./cl_qcomppool_h.html#robo546">cl_qcpool_get</a>( &p_pool->qcpool );\r
+ if( !p_pool_obj )\r
+ return( NULL );\r
+\r
+ CL_ASSERT( p_pool_obj->list_obj.p_object );\r
+ return( (void*)p_pool_obj->list_obj.p_object );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_pool\r
+ [in] Pointer to a <a href="#robo299">cl_cpool_t</a> structure from which to retrieve\r
+ an object.\r
+\r
+ RETURN VALUES\r
+ Returns a pointer to the first component of a composite object.\r
+\r
+ Returns NULL if the pool is empty and can not be grown automatically.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> <strong>cl_cpool_get</strong> returns the object at the head of the pool. If the pool is\r
+ empty, it is automatically grown to accommodate this request unless the\r
+ grow_size parameter passed to the <a href="#robo297">cl_cpool_init</a> function was zero.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Composite <a href="./cl_pool_h.html#robo24">Pool</a>, cl_cpool_get_tail, <a href="#robo298">cl_cpool_put</a>, <a href="#robo296">cl_cpool_grow</a>,\r
+ <a href="#robo293">cl_cpool_count</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo296">[Functions]<a name="Component20Library3a20Composite20Pool2fcl5fcpool5fgrow">\r
+Component Library: Composite Pool/cl_cpool_grow</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_cpool_grow</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_cpool_grow</strong> function grows a composite pool by\r
+ the specified number of objects.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_INLINE <a href="./cl_types_h.html#robo304">cl_status_t</a> CL_API\r
+<strong>cl_cpool_grow</strong>(\r
+ IN <a href="#robo299">cl_cpool_t</a>* const p_pool,\r
+ IN const size_t obj_count )\r
+{\r
+ CL_ASSERT( p_pool );\r
+ return( <a href="./cl_qcomppool_h.html#robo547">cl_qcpool_grow</a>( &p_pool->qcpool, obj_count ) );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_pool\r
+ [in] Pointer to a <a href="#robo299">cl_cpool_t</a> structure whose capacity to grow.\r
+\r
+ obj_count\r
+ [in] Number of objects by which to grow the pool.\r
+\r
+ RETURN VALUES\r
+ CL_SUCCESS if the composite pool grew successfully.\r
+\r
+ CL_INSUFFICIENT_MEMORY if there was not enough memory to grow the\r
+ composite pool.\r
+\r
+ <a href="./cl_types_h.html#robo304">cl_status_t</a> value returned by optional initialization callback function\r
+ specified by the pfn_initializer parameter passed to the\r
+ <a href="#robo297">cl_cpool_init</a> function.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> It is not necessary to call <strong>cl_cpool_grow</strong> if the pool is\r
+ configured to grow automatically.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Composite <a href="./cl_pool_h.html#robo24">Pool</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo297">[Functions]<a name="Component20Library3a20Composite20Pool2fcl5fcpool5finit">\r
+Component Library: Composite Pool/cl_cpool_init</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_cpool_init</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_cpool_init</strong> function initializes a composite pool for use.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT <a href="./cl_types_h.html#robo304">cl_status_t</a> CL_API\r
+<strong>cl_cpool_init</strong>(\r
+ IN <a href="#robo299">cl_cpool_t</a>* const p_pool,\r
+ IN const size_t min_size,\r
+ IN const size_t max_size,\r
+ IN const size_t grow_size,\r
+ IN size_t* const component_sizes,\r
+ IN const uint32_t num_components,\r
+ IN <a href="#robo302">cl_pfn_cpool_init_t</a> pfn_initializer OPTIONAL,\r
+ IN <a href="#robo301">cl_pfn_cpool_dtor_t</a> pfn_destructor OPTIONAL,\r
+ IN const void* const context );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_pool\r
+ [in] Pointer to a <a href="#robo299">cl_cpool_t</a> structure to initialize.\r
+\r
+ min_size\r
+ [in] Minimum number of objects that the pool should support. All\r
+ necessary allocations to allow storing the minimum number of items\r
+ are performed at initialization time, and all necessary callbacks\r
+ successfully invoked.\r
+\r
+ max_size\r
+ [in] Maximum number of objects to which the pool is allowed to grow.\r
+ A value of zero specifies no maximum.\r
+\r
+ grow_size\r
+ [in] Number of objects to allocate when incrementally growing the pool.\r
+ A value of zero disables automatic growth.\r
+\r
+ component_sizes\r
+ [in] Pointer to the first entry in an array of sizes describing,\r
+ in order, the sizes of the components that make up a composite object.\r
+\r
+ num_components\r
+ [in] Number of components that make up a composite object.\r
+\r
+ pfn_initializer\r
+ [in] Initialization callback to invoke for every new object when\r
+ growing the pool. This parameter may be NULL only if the objects\r
+ stored in the composite pool consist of only one component.\r
+ See the cl_pfn_cpool_init function type declaration for details\r
+ about the callback function.\r
+\r
+ pfn_destructor\r
+ [in] Destructor callback to invoke for every object before memory for\r
+ that object is freed. This parameter is optional and may be NULL.\r
+ See the cl_pfn_cpool_dtor function type declaration for details\r
+ about the callback function.\r
+\r
+ context\r
+ [in] Value to pass to the callback functions to provide context.\r
+\r
+ RETURN VALUES\r
+ CL_SUCCESS if the composite pool was initialized successfully.\r
+\r
+ CL_INSUFFICIENT_MEMORY if there was not enough memory to initialize the\r
+ composite pool.\r
+\r
+ CL_INVALID_SETTING if a NULL constructor was provided for composite objects\r
+ consisting of more than one component. Also returns CL_INVALID_SETTING if\r
+ the maximum size is non-zero and less than the minimum size.\r
+\r
+ Other <a href="./cl_types_h.html#robo304">cl_status_t</a> value returned by optional initialization callback function\r
+ specified by the pfn_initializer parameter.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> <strong>cl_cpool_init</strong> initializes, and if necessary, grows the pool to\r
+ the capacity desired.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Composite <a href="./cl_pool_h.html#robo24">Pool</a>, <a href="#robo292">cl_cpool_construct</a>, <a href="#robo294">cl_cpool_destroy</a>,\r
+ <a href="#robo295">cl_cpool_get</a>, <a href="#robo298">cl_cpool_put</a>, <a href="#robo296">cl_cpool_grow</a>,\r
+ <a href="#robo293">cl_cpool_count</a>, cl_pfn_cpool_ctor_t, <a href="#robo302">cl_pfn_cpool_init_t</a>,\r
+ <a href="#robo301">cl_pfn_cpool_dtor_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo298">[Functions]<a name="Component20Library3a20Composite20Pool2fcl5fcpool5fput">\r
+Component Library: Composite Pool/cl_cpool_put</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_cpool_put</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_cpool_put</strong> function returns an object to a composite pool.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_INLINE void CL_API\r
+<strong>cl_cpool_put</strong>(\r
+ IN <a href="#robo299">cl_cpool_t</a>* const p_pool,\r
+ IN void* const p_object )\r
+{\r
+ cl_pool_obj_t *p_pool_obj;\r
+\r
+ CL_ASSERT( p_pool );\r
+ CL_ASSERT( p_object );\r
+\r
+ /* Calculate the offset to the list object representing this object. */\r
+ p_pool_obj = (cl_pool_obj_t*)\r
+ (((uint8_t*)p_object) - sizeof(cl_pool_obj_t));\r
+\r
+ /* good sanity check */\r
+ CL_ASSERT( p_pool_obj->list_obj.p_object == p_object );\r
+\r
+ <a href="./cl_qcomppool_h.html#robo549">cl_qcpool_put</a>( &p_pool->qcpool, (<a href="./cl_qcomppool_h.html#robo542">cl_pool_item_t</a>*)p_pool_obj );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_pool\r
+ [in] Pointer to a <a href="#robo299">cl_cpool_t</a> structure to which to return\r
+ an object.\r
+\r
+ p_object\r
+ [in] Pointer to the first component of an object to return to the pool.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> This function does not return a value.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> <strong>cl_cpool_put</strong> places the returned object at the head of the pool.\r
+\r
+ The object specified by the p_object parameter must have been\r
+ retrieved from the pool by a previous call to <a href="#robo295">cl_cpool_get</a>.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Composite <a href="./cl_pool_h.html#robo24">Pool</a>, cl_cpool_put_tail, <a href="#robo295">cl_cpool_get</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo299">[Structures]<a name="Component20Library3a20Composite20Pool2fcl5fcpool5ft">\r
+Component Library: Composite Pool/cl_cpool_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_cpool_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Composite pool structure.\r
+\r
+ The <strong>cl_cpool_t</strong> structure should be treated as opaque and should be\r
+ manipulated only through the provided functions.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef struct _cl_cpool\r
+{\r
+ <a href="./cl_qcomppool_h.html#robo551">cl_qcpool_t</a> qcpool;\r
+ <a href="#robo302">cl_pfn_cpool_init_t</a> pfn_init;\r
+ <a href="#robo301">cl_pfn_cpool_dtor_t</a> pfn_dtor;\r
+ const void *context;\r
+\r
+} <strong>cl_cpool_t</strong>;\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> qcpool\r
+ Quick composite pool that manages all objects.\r
+\r
+ pfn_init\r
+ Pointer to the user's initializer callback, used by the pool\r
+ to translate the quick composite pool's initializer callback to\r
+ a composite pool initializer callback.\r
+\r
+ pfn_dtor\r
+ Pointer to the user's destructor callback, used by the pool\r
+ to translate the quick composite pool's destructor callback to\r
+ a composite pool destructor callback.\r
+\r
+ context\r
+ User's provided context for callback functions, used by the pool\r
+ to when invoking callbacks.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Composite <a href="./cl_pool_h.html#robo24">Pool</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo300">[Functions]<a name="Component20Library3a20Composite20Pool2fcl5fis5fcpool5finited">\r
+Component Library: Composite Pool/cl_is_cpool_inited</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_is_cpool_inited</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_is_cpool_inited</strong> function returns whether a composite pool was\r
+ successfully initialized.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_INLINE boolean_t CL_API\r
+<strong>cl_is_cpool_inited</strong>(\r
+ IN const <a href="#robo299">cl_cpool_t</a>* const p_pool )\r
+{\r
+ /* CL_ASSERT that a non-null pointer is provided. */\r
+ CL_ASSERT( p_pool );\r
+ return( <a href="./cl_qcomppool_h.html#robo539">cl_is_qcpool_inited</a>( &p_pool->qcpool ) );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_pool\r
+ [in] Pointer to a <a href="#robo299">cl_cpool_t</a> structure whose initialization state\r
+ to check.\r
+\r
+ RETURN VALUES\r
+ TRUE if the composite pool was initialized successfully.\r
+\r
+ FALSE otherwise.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> Allows checking the state of a composite pool to determine if invoking\r
+ member functions is appropriate.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Composite <a href="./cl_pool_h.html#robo24">Pool</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo301">[Definitions]<a name="Component20Library3a20Composite20Pool2fcl5fpfn5fcpool5fdtor5ft">\r
+Component Library: Composite Pool/cl_pfn_cpool_dtor_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_pfn_cpool_dtor_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_pfn_cpool_dtor_t</strong> function type defines the prototype for\r
+ functions used as destructor for objects being deallocated by a\r
+ composite pool.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef void\r
+(CL_API *<strong>cl_pfn_cpool_dtor_t</strong>)(\r
+ IN void* const p_object,\r
+ IN void* context );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_object\r
+ [in] Pointer to an object to destruct.\r
+\r
+ context\r
+ [in] Context provided in the call to <a href="#robo297">cl_cpool_init</a>.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> This function does not return a value.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This function type is provided as function prototype reference for\r
+ the function provided by the user as an optional parameter to the\r
+ <a href="#robo297">cl_cpool_init</a> function.\r
+\r
+ The destructor is invoked once per allocated object, allowing the user\r
+ to perform any necessary cleanup. Users should not attempt to deallocate\r
+ the memory for the composite object, as the composite pool manages\r
+ object allocation and deallocation.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Composite <a href="./cl_pool_h.html#robo24">Pool</a>, <a href="#robo297">cl_cpool_init</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo302">[Definitions]<a name="Component20Library3a20Composite20Pool2fcl5fpfn5fcpool5finit5ft">\r
+Component Library: Composite Pool/cl_pfn_cpool_init_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_pfn_cpool_init_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_pfn_cpool_init_t</strong> function type defines the prototype for\r
+ functions used as initializers for objects being allocated by a\r
+ composite pool.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef <a href="./cl_types_h.html#robo304">cl_status_t</a>\r
+(CL_API *<strong>cl_pfn_cpool_init_t</strong>)(\r
+ IN void** const p_comp_array,\r
+ IN const uint32_t num_components,\r
+ IN void* context );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_object\r
+ [in] Pointer to an object to initialize.\r
+\r
+ context\r
+ [in] Context provided in a call to <a href="#robo297">cl_cpool_init</a>.\r
+\r
+ RETURN VALUES\r
+ Return CL_SUCCESS to indicates that initialization of the object\r
+ was successful and that initialization of further objects may continue.\r
+\r
+ Other <a href="./cl_types_h.html#robo304">cl_status_t</a> values will be returned by <a href="#robo297">cl_cpool_init</a>\r
+ and <a href="#robo296">cl_cpool_grow</a>.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This function type is provided as function prototype reference for\r
+ the function provided by the user as an optional parameter to the\r
+ <a href="#robo297">cl_cpool_init</a> function.\r
+\r
+ The initializer is invoked once per allocated object, allowing the user\r
+ to chain components to form a composite object and perform any necessary\r
+ initialization. Returning a status other than CL_SUCCESS aborts a grow\r
+ operation, initiated either through <a href="#robo297">cl_cpool_init</a> or <a href="#robo296">cl_cpool_grow</a>, and\r
+ causes the initiating function to fail. Any non-CL_SUCCESS status will\r
+ be returned by the function that initiated the grow operation.\r
+\r
+ All memory for the requested number of components is pre-allocated.\r
+\r
+ When later performing a <a href="#robo295">cl_cpool_get</a> call, the return value is a pointer\r
+ to the first component.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Composite <a href="./cl_pool_h.html#robo24">Pool</a>, <a href="#robo297">cl_cpool_init</a>, <a href="#robo296">cl_cpool_grow</a>\r
+</pre>\r
+</span>\r
+</body>\r
+</html>\r
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">\r
+<html>\r
+<head>\r
+<link rel="stylesheet" href="../robodoc.css" type="text/css">\r
+<title>./inc_doc/complib/cl_debug_h.html</title>\r
+<!-- Source: ./inc/complib/cl_debug.h -->\r
+<!-- Generated with ROBODoc Version 4.99.22 (Mar 6 2006) -->\r
+</head>\r
+<body bgcolor="#FFFFFF">\r
+<a name="robo_top_of_doc">Generated from ./inc/complib/cl_debug.h</a> with <a href="http://sourceforge.net/projects/robodoc/">ROBODoc</a> v4.99.22 on Sun Apr 16 2006 17:39:25\r
+<br />\r
+<hr />\r
+\r
+<h2><a name="robo10">[Modules]<a name="Component20Library2fDebug20Output">\r
+Component Library/Debug Output</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_modules.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> Debug Output\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The debug output functions and macros send debug messages to the current\r
+ debug target.\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo305">[Definitions]<a name="Component20Library3a20Debug20Output2f642dbit20Print20Format">\r
+Component Library: Debug Output/64-bit Print Format</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> 64-bit Print Format\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The 64-bit print keywords allow users to use 64-bit values in debug or\r
+ console output.\r
+\r
+ Different platforms define 64-bit print formats differently. The 64-bit\r
+ print formats exposed by the component library are supported in all\r
+ platforms.\r
+</pre>\r
+</span><p><strong>VALUES</strong></p>\r
+<span class="VALUES"><pre> PRId64\r
+ Print a 64-bit integer in signed decimal format.\r
+ PRIx64\r
+ Print a 64-bit integer in hexadecimal format.\r
+ PRIo64\r
+ Print a 64-bit integer in octal format.\r
+ PRIu64\r
+ Print a 64-bit integer in unsigned decimal format.\r
+</pre>\r
+</span><p><strong>EXAMPLE</strong></p>\r
+<span class="EXAMPLE"><pre> uint64 MyVal = 2;\r
+ // Print a 64-bit integer in hexadecimal format.\r
+ <a href="#robo307">cl_dbg_out</a>( "MyVal: 0x%" PRIx64 "\n", MyVal );\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> Standard print flags to specify padding and precision can still be used\r
+ following the '%' sign in the string preceding the 64-bit print keyword.\r
+\r
+ The above keywords are strings and make use of compilers' string\r
+ concatenation ability.\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo306">[Functions]<a name="Component20Library3a20Debug20Output2fcl5fbreak">\r
+Component Library: Debug Output/cl_break</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_break</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_break</strong> function halts execution.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>* void\r
+* <strong>cl_break</strong>();\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> This function does not return a value.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> In a release build, <strong>cl_break</strong> has no effect.\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo307">[Functions]<a name="Component20Library3a20Debug20Output2fcl5fdbg5fout">\r
+Component Library: Debug Output/cl_dbg_out</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_dbg_out</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_dbg_out</strong> function sends a debug message to the debug target in\r
+ debug builds only.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT void\r
+<strong>cl_dbg_out</strong>(\r
+ IN const char* const debug_message,\r
+ IN ... );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> debug_message\r
+ [in] ANSI string formatted identically as for a call to the standard C\r
+ function printf.\r
+\r
+ ...\r
+ [in] Extra parameters for string formatting, as defined for the\r
+ standard C function printf.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> This function does not return a value.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> In a release build, <strong>cl_dbg_out</strong> has no effect.\r
+\r
+ The formatting of the debug_message string is the same as for printf\r
+\r
+ <strong>cl_dbg_out</strong> sends the debug message to the current debug target.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Debug Output, <a href="#robo310">cl_msg_out</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo308">[Definitions]<a name="Component20Library3a20Debug20Output2fCL5fENTER">\r
+Component Library: Debug Output/CL_ENTER</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>CL_ENTER</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>CL_ENTER</strong> macro marks the entrance into a function by sending a\r
+ string to the current debug target if the requested debug level matches\r
+ the current debug level.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>* <strong>CL_ENTER</strong>( DBG_LVL, CHK_LVL );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> DBG_LVL\r
+ [in] Debug level for the string to output\r
+\r
+ CHK_LVL\r
+ [in] Current debug level against which to check DBG_LVL\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> This macro does not return a value.\r
+</pre>\r
+</span><p><strong>EXAMPLE</strong></p>\r
+<span class="EXAMPLE"><pre> #define __MODULE__ "my_module"\r
+ #define MY_FUNC_DBG_LVL 1\r
+\r
+ uint32_t my_dbg_lvl = CL_DBG_ALL;\r
+\r
+ void\r
+ my_func()\r
+ {\r
+ <strong>CL_ENTER</strong>( MY_FUNC_DBG_LVL, my_dbg_lvl );\r
+ <a href="#robo309">CL_EXIT</a>( MY_FUNC_DBG_LVL, my_dbg_lvl );\r
+ }\r
+</pre>\r
+</span><p><strong>RESULT</strong></p>\r
+<span class="RESULT"><pre> my_module:my_func() [\r
+ my_module:my_func() ]\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> The function entrance notification is printed only if all bits set\r
+ in DBG_LVL are also set in CHK_LVL. CHK_LVL may have additional bits set.\r
+\r
+ If the __MODULE__ preprocessor keyword is defined, that keyword will be\r
+ prepended to the function name, separated with a colon.\r
+\r
+ In multi-processor environments where the current processor can be\r
+ determined, the zero-based number of the processor on which the output\r
+ is generated is prepended to the output.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Debug Output, Debug Levels, <a href="#robo311">CL_PRINT</a>, <a href="#robo309">CL_EXIT</a>, <a href="#robo312">CL_TRACE</a>, <a href="#robo313">CL_TRACE_EXIT</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo309">[Definitions]<a name="Component20Library3a20Debug20Output2fCL5fEXIT">\r
+Component Library: Debug Output/CL_EXIT</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>CL_EXIT</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>CL_EXIT</strong> macro marks the exit from a function by sending a string\r
+ to the current debug target if the requested debug level matches the\r
+ current debug level.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>* <strong>CL_EXIT</strong>( DBG_LVL, CHK_LVL );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> DBG_LVL\r
+ [in] Debug level for the string to output\r
+\r
+ CHK_LVL\r
+ [in] Current debug level against which to check DBG_LVL\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> This macro does not return a value.\r
+</pre>\r
+</span><p><strong>EXAMPLE</strong></p>\r
+<span class="EXAMPLE"><pre> #define __MODULE__ "my_module"\r
+ #define MY_FUNC_DBG_LVL 1\r
+\r
+ uint32_t my_dbg_lvl = CL_DBG_ALL;\r
+\r
+ void\r
+ my_func()\r
+ {\r
+ <a href="#robo308">CL_ENTER</a>( MY_FUNC_DBG_LVL, my_dbg_lvl );\r
+ <strong>CL_EXIT</strong>( MY_FUNC_DBG_LVL, my_dbg_lvl );\r
+ }\r
+</pre>\r
+</span><p><strong>RESULT</strong></p>\r
+<span class="RESULT"><pre> my_module:my_func() [\r
+ my_module:my_func() ]\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> The exit notification is printed only if all bits set in DBG_LVL are also\r
+ set in CHK_LVL. CHK_LVL may have additional bits set.\r
+\r
+ The <strong>CL_EXIT</strong> macro must only be used after the CL_ENTRY macro as it\r
+ depends on that macro's implementation.\r
+\r
+ If the __MODULE__ preprocessor keyword is defined, that keyword will be\r
+ prepended to the function name, separated with a colon.\r
+\r
+ In multi-processor environments where the current processor can be\r
+ determined, the zero-based number of the processor on which the output\r
+ is generated is prepended to the output.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Debug Output, Debug Levels, <a href="#robo311">CL_PRINT</a>, <a href="#robo308">CL_ENTER</a>, <a href="#robo312">CL_TRACE</a>, <a href="#robo313">CL_TRACE_EXIT</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo310">[Functions]<a name="Component20Library3a20Debug20Output2fcl5fmsg5fout">\r
+Component Library: Debug Output/cl_msg_out</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_msg_out</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_msg_out</strong> function sends a debug message to the message log target.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT void\r
+<strong>cl_msg_out</strong>(\r
+ IN const char* const message,\r
+ IN ... );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> message\r
+ [in] ANSI string formatted identically as for a call to the standard C\r
+ function printf.\r
+\r
+ ...\r
+ [in] Extra parameters for string formatting, as defined for the\r
+ standard C function printf.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> This function does not return a value.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> <strong>cl_msg_out</strong> is available in both debug and release builds.\r
+\r
+ The formatting of the message string is the same as for printf\r
+\r
+ <strong>cl_msg_out</strong> sends the message to the current message logging target.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Debug Output, <a href="#robo307">cl_dbg_out</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo311">[Definitions]<a name="Component20Library3a20Debug20Output2fCL5fPRINT">\r
+Component Library: Debug Output/CL_PRINT</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>CL_PRINT</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>CL_PRINT</strong> macro sends a string to the current debug target if\r
+ the requested debug level matches the current debug level.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>* <strong>CL_PRINT</strong>( DBG_LVL, CHK_LVL, STRING );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> DBG_LVL\r
+ [in] Debug level for the string to output\r
+\r
+ CHK_LVL\r
+ [in] Current debug level against which to check DBG_LVL\r
+\r
+ STRING\r
+ [in] String to send to the current debug target. The string includes\r
+ parentheses in order to allow additional parameters.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> This macro does not return a value.\r
+</pre>\r
+</span><p><strong>EXAMPLE</strong></p>\r
+<span class="EXAMPLE"><pre> #define MY_FUNC_DBG_LVL 1\r
+\r
+ uint32_t my_dbg_lvl = CL_DBG_ALL;\r
+\r
+ void\r
+ my_func()\r
+ {\r
+ <strong>CL_PRINT</strong>( MY_FUNC_DBG_LVL, my_dbg_lvl, ("Hello %s!\n", "world") );\r
+ }\r
+</pre>\r
+</span><p><strong>RESULT</strong></p>\r
+<span class="RESULT"><pre> Hello world!\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> The requested string is printed only if all bits set in DBG_LVL are also\r
+ set in CHK_LVL unless the most significant bit is set (indicating an\r
+ error), in which case the lower bits are ignored. CHK_LVL may have\r
+ additional bits set.\r
+\r
+ In multi-processor environments where the current processor can be\r
+ determined, the zero-based number of the processor on which the output\r
+ is generated is prepended to the output.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Debug Output, Debug Levels, <a href="#robo308">CL_ENTER</a>, <a href="#robo309">CL_EXIT</a>, <a href="#robo312">CL_TRACE</a>, <a href="#robo313">CL_TRACE_EXIT</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo312">[Definitions]<a name="Component20Library3a20Debug20Output2fCL5fTRACE">\r
+Component Library: Debug Output/CL_TRACE</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>CL_TRACE</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>CL_TRACE</strong> macro sends a string to the current debug target if\r
+ the requested debug level matches the current debug level. The\r
+ output is prepended with the function name and, depending on the\r
+ debug level requested, an indication of the severity of the message.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>* <strong>CL_TRACE</strong>( DBG_LVL, CHK_LVL, STRING );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> DBG_LVL\r
+ [in] Debug level for the string to output\r
+\r
+ CHK_LVL\r
+ [in] Current debug level against which to check DBG_LVL\r
+\r
+ STRING\r
+ [in] String to send to the current debug target. The string includes\r
+ parentheses in order to allow additional parameters.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> This macro does not return a value.\r
+</pre>\r
+</span><p><strong>EXAMPLE</strong></p>\r
+<span class="EXAMPLE"><pre> #define __MODULE__ "my_module"\r
+ #define MY_FUNC_DBG_LVL 1\r
+\r
+ uint32_t my_dbg_lvl = CL_DBG_ALL;\r
+\r
+ void\r
+ my_func()\r
+ {\r
+ <a href="#robo308">CL_ENTER</a>( MY_FUNC_DBG_LVL, my_dbg_lvl );\r
+ <strong>CL_TRACE</strong>( MY_FUNC_DBG_LVL, my_dbg_lvl, ("Hello %s!\n", "world") );\r
+ <a href="#robo309">CL_EXIT</a>( MY_FUNC_DBG_LVL, my_dbg_lvl );\r
+ }\r
+</pre>\r
+</span><p><strong>RESULT</strong></p>\r
+<span class="RESULT"><pre> my_module:my_func() [\r
+ my_module:my_func(): Hello world!\r
+ my_module:my_func() ]\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> The requested string is printed only if all bits set in DBG_LVL are also\r
+ set in CHK_LVL. CHK_LVL may have additional bits set.\r
+\r
+ The <strong>CL_TRACE</strong> macro must only be used after the CL_ENTRY macro as it\r
+ depends on that macro's implementation.\r
+\r
+ If the DBG_LVL has the upper bit set, the output will contain\r
+ an "!ERROR!" statement between the function name and STRING.\r
+\r
+ If the __MODULE__ preprocessor keyword is defined, that keyword will be\r
+ prepended to the function name, separated with a colon.\r
+\r
+ In multi-processor environments where the current processor can be\r
+ determined, the zero-based number of the processor on which the output\r
+ is generated is prepended to the output.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Debug Output, Debug Levels, <a href="#robo311">CL_PRINT</a>, <a href="#robo308">CL_ENTER</a>, <a href="#robo309">CL_EXIT</a>, <a href="#robo313">CL_TRACE_EXIT</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo313">[Definitions]<a name="Component20Library3a20Debug20Output2fCL5fTRACE5fEXIT">\r
+Component Library: Debug Output/CL_TRACE_EXIT</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>CL_TRACE_EXIT</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>CL_TRACE_EXIT</strong> macro combines the functionality of the <a href="#robo312">CL_TRACE</a> and\r
+ <a href="#robo309">CL_EXIT</a> macros, in that order.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>* <strong>CL_TRACE_EXIT</strong>( DBG_LVL, CHK_LVL, STRING );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> DBG_LVL\r
+ [in] Debug level for the string to output\r
+\r
+ CHK_LVL\r
+ [in] Current debug level against which to check DBG_LVL\r
+\r
+ STRING\r
+ [in] String to send to the current debug target. The string includes\r
+ parentheses in order to allow additional parameters.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> This macro does not return a value.\r
+</pre>\r
+</span><p><strong>EXAMPLE</strong></p>\r
+<span class="EXAMPLE"><pre> #define __MODULE__ "my_module"\r
+ #define MY_FUNC_DBG_LVL 1\r
+\r
+ uint32_t my_dbg_lvl = CL_DBG_ALL;\r
+\r
+ void\r
+ my_func()\r
+ {\r
+ <a href="#robo308">CL_ENTER</a>( MY_FUNC_DBG_LVL, my_dbg_lvl );\r
+ <strong>CL_TRACE_EXIT</strong>( MY_FUNC_DBG_LVL, my_dbg_lvl, ("Hello %s!\n", "world") );\r
+ }\r
+</pre>\r
+</span><p><strong>RESULT</strong></p>\r
+<span class="RESULT"><pre> my_module:my_func() [\r
+ my_module:my_func(): Hello world!\r
+ my_module:my_func() ]\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> The requested string is printed only if all bits set in DBG_LVL are also\r
+ set in CHK_LVL. CHK_LVL may have additional bits set.\r
+\r
+ The <strong>CL_TRACE_EXIT</strong> macro must only be used after the CL_ENTRY macro as it\r
+ depends on that macro's implementation.\r
+\r
+ If the DBG_LVL has the upper bit set, the output will contain\r
+ an "!ERROR!" statement between the function name and STRING.\r
+\r
+ If the __MODULE__ preprocessor keyword is defined, that keyword will be\r
+ prepended to the function name, separated with a colon.\r
+\r
+ In multi-processor environments where the current processor can be\r
+ determined, the zero-based number of the processor on which the output\r
+ is generated is prepended to the output.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Debug Output, Debug Levels, <a href="#robo311">CL_PRINT</a>, <a href="#robo308">CL_ENTER</a>, <a href="#robo309">CL_EXIT</a>, <a href="#robo312">CL_TRACE</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo314">[Definitions]<a name="Component20Library3a20Debug20Output2fDebug20Levels">\r
+Component Library: Debug Output/Debug Levels</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> Debug Levels\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The debug output macros reserve the upper bit of the debug level to\r
+ convey an error.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>#define CL_DBG_DISABLE 0\r
+#define CL_DBG_ERROR 0x80000000\r
+#define CL_DBG_ALL 0xFFFFFFFF\r
+</pre>\r
+</span><p><strong>VALUES</strong></p>\r
+<span class="VALUES"><pre> CL_DBG_DISABLE\r
+ Disable all debug output, including errors.\r
+\r
+ CL_DBG_ERROR\r
+ Enable error debug output.\r
+\r
+ CL_DBG_ALL\r
+ Enbale all debug output.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> Users can define custom debug levels using the lower 31 bits of their\r
+ debug level to control non-error debug output. Error messages are\r
+ always displayed, regardless of the lower bit definition.\r
+\r
+ When specifying the debug output desired for non-error messages\r
+ (the CHK_LVL parameter in the debug output macros), users must define\r
+ all bits whose output they are interested in.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Debug Output, <a href="#robo311">CL_PRINT</a>, <a href="#robo308">CL_ENTER</a>, <a href="#robo309">CL_EXIT</a>, <a href="#robo312">CL_TRACE</a>, <a href="#robo313">CL_TRACE_EXIT</a>\r
+</pre>\r
+</span>\r
+</body>\r
+</html>\r
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">\r
+<html>\r
+<head>\r
+<link rel="stylesheet" href="../robodoc.css" type="text/css">\r
+<title>./inc_doc/complib/cl_event_h.html</title>\r
+<!-- Source: ./inc/complib/cl_event.h -->\r
+<!-- Generated with ROBODoc Version 4.99.22 (Mar 6 2006) -->\r
+</head>\r
+<body bgcolor="#FFFFFF">\r
+<a name="robo_top_of_doc">Generated from ./inc/complib/cl_event.h</a> with <a href="http://sourceforge.net/projects/robodoc/">ROBODoc</a> v4.99.22 on Sun Apr 16 2006 17:39:25\r
+<br />\r
+<hr />\r
+\r
+<h2><a name="robo11">[Modules]<a name="Component20Library2fEvent">\r
+Component Library/Event</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_modules.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>Event</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>Event</strong> provides the ability to suspend and wakeup a thread.\r
+\r
+ The event functions operates on a cl_event_t structure which should be\r
+ treated as opaque and should be manipulated only through the provided\r
+ functions.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Structures:\r
+ cl_event_t\r
+\r
+ Initialization/Destruction:\r
+ <a href="#robo316">cl_event_construct</a>, <a href="#robo318">cl_event_init</a>, <a href="#robo317">cl_event_destroy</a>\r
+\r
+ Manipulation:\r
+ <a href="#robo320">cl_event_signal</a>, <a href="#robo319">cl_event_reset</a>, <a href="#robo321">cl_event_wait_on</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo316">[Functions]<a name="Component20Library3a20Event2fcl5fevent5fconstruct">\r
+Component Library: Event/cl_event_construct</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_event_construct</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_event_construct</strong> function constructs an event.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT void CL_API\r
+<strong>cl_event_construct</strong>(\r
+ IN cl_event_t* const p_event );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_event\r
+ [in] Pointer to an cl_event_t structure to construct.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> This function does not return a value.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> Allows calling <a href="#robo317">cl_event_destroy</a> without first calling <a href="#robo318">cl_event_init</a>.\r
+\r
+ Calling <strong>cl_event_construct</strong> is a prerequisite to calling any other event\r
+ function except <a href="#robo318">cl_event_init</a>.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo11">Event</a>, <a href="#robo318">cl_event_init</a>, <a href="#robo317">cl_event_destroy</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo317">[Functions]<a name="Component20Library3a20Event2fcl5fevent5fdestroy">\r
+Component Library: Event/cl_event_destroy</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_event_destroy</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_event_destroy</strong> function performs any necessary cleanup of an event.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT void CL_API\r
+<strong>cl_event_destroy</strong>(\r
+ IN cl_event_t* const p_event );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_event\r
+ [in] Pointer to an cl_event_t structure to destroy.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> This function does not return a value.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This function should only be called after a call to <a href="#robo316">cl_event_construct</a>\r
+ or <a href="#robo318">cl_event_init</a>.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo11">Event</a>, <a href="#robo316">cl_event_construct</a>, <a href="#robo318">cl_event_init</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo318">[Functions]<a name="Component20Library3a20Event2fcl5fevent5finit">\r
+Component Library: Event/cl_event_init</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_event_init</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_event_init</strong> function initializes an event for use.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT <a href="./cl_types_h.html#robo304">cl_status_t</a> CL_API\r
+<strong>cl_event_init</strong>(\r
+ IN cl_event_t* const p_event,\r
+ IN const boolean_t manual_reset );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_event\r
+ [in] Pointer to an cl_event_t structure to initialize.\r
+\r
+ manual_reset\r
+ [in] If FALSE, indicates that the event resets itself after releasing\r
+ a single waiter. If TRUE, the event remains in the signalled state\r
+ until explicitly reset by a call to <a href="#robo319">cl_event_reset</a>.\r
+\r
+ RETURN VALUES\r
+ CL_SUCCESS if event initialization succeeded.\r
+\r
+ CL_ERROR otherwise.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> Allows calling event manipulation functions, such as <a href="#robo320">cl_event_signal</a>,\r
+ <a href="#robo319">cl_event_reset</a>, and <a href="#robo321">cl_event_wait_on</a>.\r
+\r
+ The event is initially in a reset state.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo11">Event</a>, <a href="#robo316">cl_event_construct</a>, <a href="#robo317">cl_event_destroy</a>, <a href="#robo320">cl_event_signal</a>,\r
+ <a href="#robo319">cl_event_reset</a>, <a href="#robo321">cl_event_wait_on</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo319">[Functions]<a name="Component20Library3a20Event2fcl5fevent5freset">\r
+Component Library: Event/cl_event_reset</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_event_reset</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_event_reset</strong> function sets an event to the non-signalled state.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT <a href="./cl_types_h.html#robo304">cl_status_t</a> CL_API\r
+<strong>cl_event_reset</strong>(\r
+ IN cl_event_t* const p_event );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_event\r
+ [in] Pointer to an cl_event_t structure to reset.\r
+\r
+ RETURN VALUES\r
+ CL_SUCCESS if the event was successfully reset.\r
+\r
+ CL_ERROR otherwise.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo11">Event</a>, <a href="#robo320">cl_event_signal</a>, <a href="#robo321">cl_event_wait_on</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo320">[Functions]<a name="Component20Library3a20Event2fcl5fevent5fsignal">\r
+Component Library: Event/cl_event_signal</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_event_signal</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_event_signal</strong> function sets an event to the signalled state and\r
+ releases one or more waiting threads.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT <a href="./cl_types_h.html#robo304">cl_status_t</a> CL_API\r
+<strong>cl_event_signal</strong>(\r
+ IN cl_event_t* const p_event );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_event\r
+ [in] Pointer to an cl_event_t structure to set.\r
+\r
+ RETURN VALUES\r
+ CL_SUCCESS if the event was successfully signalled.\r
+\r
+ CL_ERROR otherwise.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> For auto-reset events, the event is reset automatically once a wait\r
+ operation is satisfied.\r
+\r
+ Triggering the event multiple times does not guarantee that the same\r
+ number of wait operations are satisfied. This is because events are\r
+ either in a signalled on non-signalled state, and triggering an event\r
+ that is already in the signalled state has no effect.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo11">Event</a>, <a href="#robo319">cl_event_reset</a>, <a href="#robo321">cl_event_wait_on</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo321">[Functions]<a name="Component20Library3a20Event2fcl5fevent5fwait5fon">\r
+Component Library: Event/cl_event_wait_on</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_event_wait_on</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_event_wait_on</strong> function waits for the specified event to be\r
+ triggered for a minimum amount of time.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT <a href="./cl_types_h.html#robo304">cl_status_t</a> CL_API\r
+<strong>cl_event_wait_on</strong>(\r
+ IN cl_event_t* const p_event,\r
+ IN const uint32_t wait_us,\r
+ IN const boolean_t interruptible );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_event\r
+ [in] Pointer to an cl_event_t structure on which to wait.\r
+\r
+ wait_us\r
+ [in] Number of microseconds to wait.\r
+\r
+ interruptible\r
+ [in] Indicates whether the wait operation can be interrupted\r
+ by external signals.\r
+\r
+ RETURN VALUES\r
+ CL_SUCCESS if the wait operation succeeded in response to the event\r
+ being set.\r
+\r
+ CL_TIMEOUT if the specified time period elapses.\r
+\r
+ CL_NOT_DONE if the wait was interrupted by an external signal.\r
+\r
+ CL_ERROR if the wait operation failed.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> If wait_us is set to EVENT_NO_TIMEOUT, the function will wait until the\r
+ event is triggered and never timeout.\r
+\r
+ If the timeout value is zero, this function simply tests the state of\r
+ the event.\r
+\r
+ If the event is already in the signalled state at the time of the call\r
+ to <strong>cl_event_wait_on</strong>, the call completes immediately with CL_SUCCESS.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo11">Event</a>, <a href="#robo320">cl_event_signal</a>, <a href="#robo319">cl_event_reset</a>\r
+</pre>\r
+</span>\r
+</body>\r
+</html>\r
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">\r
+<html>\r
+<head>\r
+<link rel="stylesheet" href="../robodoc.css" type="text/css">\r
+<title>./inc_doc/complib/cl_fleximap_h.html</title>\r
+<!-- Source: ./inc/complib/cl_fleximap.h -->\r
+<!-- Generated with ROBODoc Version 4.99.22 (Mar 6 2006) -->\r
+</head>\r
+<body bgcolor="#FFFFFF">\r
+<a name="robo_top_of_doc">Generated from ./inc/complib/cl_fleximap.h</a> with <a href="http://sourceforge.net/projects/robodoc/">ROBODoc</a> v4.99.22 on Sun Apr 16 2006 17:39:25\r
+<br />\r
+<hr />\r
+\r
+<h2><a name="robo12">[Modules]<a name="Component20Library2fFlexi20Map">\r
+Component Library/Flexi Map</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_modules.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> Flexi <a href="./cl_map_h.html#robo17">Map</a>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Flexi map implements a binary tree that stores user provided <a href="#robo331">cl_fmap_item_t</a>\r
+ structures. Each item stored in a flexi map has a unique user defined key\r
+ (duplicates are not allowed). Flexi map provides the ability to\r
+ efficiently search for an item given a key. Flexi map allows user defined\r
+ keys of any size. Storage for keys and a comparisson function are provided\r
+ by users to allow flexi map to store items with arbitrary key values.\r
+\r
+ Flexi map does not allocate any memory, and can therefore not fail\r
+ any operations due to insufficient memory. Flexi map can thus be useful\r
+ in minimizing the error paths in code.\r
+\r
+ Flexi map is not thread safe, and users must provide serialization when\r
+ adding and removing items from the map.\r
+\r
+ The flexi map functions operate on a <a href="#robo339">cl_fmap_t</a> structure which should\r
+ be treated as opaque and should be manipulated only through the provided\r
+ functions.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Structures:\r
+ <a href="#robo339">cl_fmap_t</a>, <a href="#robo331">cl_fmap_item_t</a>\r
+\r
+ Callbacks:\r
+ <a href="#robo342">cl_pfn_fmap_apply_t</a>\r
+\r
+ Item Manipulation:\r
+ <a href="#robo332">cl_fmap_key</a>\r
+\r
+ Initialization:\r
+ <a href="#robo329">cl_fmap_init</a>\r
+\r
+ Iteration:\r
+ <a href="#robo326">cl_fmap_end</a>, <a href="#robo328">cl_fmap_head</a>, <a href="#robo340">cl_fmap_tail</a>, <a href="#robo334">cl_fmap_next</a>, <a href="#robo335">cl_fmap_prev</a>\r
+\r
+ Manipulation:\r
+ <a href="#robo330">cl_fmap_insert</a>, <a href="#robo327">cl_fmap_get</a>, <a href="#robo338">cl_fmap_remove_item</a>, <a href="#robo336">cl_fmap_remove</a>,\r
+ <a href="#robo337">cl_fmap_remove_all</a>, <a href="#robo333">cl_fmap_merge</a>, <a href="#robo325">cl_fmap_delta</a>\r
+\r
+ Search:\r
+ <a href="#robo323">cl_fmap_apply_func</a>\r
+\r
+ Attributes:\r
+ <a href="#robo324">cl_fmap_count</a>, <a href="#robo341">cl_is_fmap_empty</a>,\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo323">[Functions]<a name="Component20Library3a20Flexi20Map2fcl5ffmap5fapply5ffunc">\r
+Component Library: Flexi Map/cl_fmap_apply_func</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_fmap_apply_func</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_fmap_apply_func</strong> function executes a specified function\r
+ for every item stored in a flexi map.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT void CL_API\r
+<strong>cl_fmap_apply_func</strong>(\r
+ IN const <a href="#robo339">cl_fmap_t</a>* const p_map,\r
+ IN <a href="#robo342">cl_pfn_fmap_apply_t</a> pfn_func,\r
+ IN const void* const context );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_map\r
+ [in] Pointer to a <a href="#robo339">cl_fmap_t</a> structure.\r
+\r
+ pfn_func\r
+ [in] Function invoked for every item in the flexi map.\r
+ See the <a href="#robo342">cl_pfn_fmap_apply_t</a> function type declaration for details\r
+ about the callback function.\r
+\r
+ context\r
+ [in] Value to pass to the callback functions to provide context.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> This function does not return a value.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> The function provided must not perform any map operations, as these\r
+ would corrupt the flexi map.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Flexi <a href="./cl_map_h.html#robo17">Map</a>, <a href="#robo342">cl_pfn_fmap_apply_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo324">[Functions]<a name="Component20Library3a20Flexi20Map2fcl5ffmap5fcount">\r
+Component Library: Flexi Map/cl_fmap_count</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_fmap_count</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_fmap_count</strong> function returns the number of items stored\r
+ in a flexi map.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_INLINE size_t CL_API\r
+<strong>cl_fmap_count</strong>(\r
+ IN const <a href="#robo339">cl_fmap_t</a>* const p_map )\r
+{\r
+ CL_ASSERT( p_map );\r
+ CL_ASSERT( p_map->state == CL_INITIALIZED );\r
+ return( p_map->count );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_map\r
+ [in] Pointer to a <a href="#robo339">cl_fmap_t</a> structure whose item count to return.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> Returns the number of items stored in the map.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Flexi <a href="./cl_map_h.html#robo17">Map</a>, <a href="#robo341">cl_is_fmap_empty</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo325">[Functions]<a name="Component20Library3a20Flexi20Map2fcl5ffmap5fdelta">\r
+Component Library: Flexi Map/cl_fmap_delta</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_fmap_delta</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_fmap_delta</strong> function computes the differences between two maps.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT void CL_API\r
+<strong>cl_fmap_delta</strong>(\r
+ IN OUT <a href="#robo339">cl_fmap_t</a>* const p_map1,\r
+ IN OUT <a href="#robo339">cl_fmap_t</a>* const p_map2,\r
+ OUT <a href="#robo339">cl_fmap_t</a>* const p_new,\r
+ OUT <a href="#robo339">cl_fmap_t</a>* const p_old );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_map1\r
+ [in/out] Pointer to the first of two <a href="#robo339">cl_fmap_t</a> structures whose\r
+ differences to compute.\r
+\r
+ p_map2\r
+ [in/out] Pointer to the second of two <a href="#robo339">cl_fmap_t</a> structures whose\r
+ differences to compute.\r
+\r
+ p_new\r
+ [out] Pointer to an empty <a href="#robo339">cl_fmap_t</a> structure that contains the items\r
+ unique to p_map2 upon return from the function.\r
+\r
+ p_old\r
+ [out] Pointer to an empty <a href="#robo339">cl_fmap_t</a> structure that contains the items\r
+ unique to p_map1 upon return from the function.\r
+\r
+ RETURN VALUES\r
+ This function does not return a value.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> Items are evaluated based on their keys. Items that exist in both\r
+ p_map1 and p_map2 remain in their respective maps. Items that\r
+ exist only p_map1 are moved to p_old. Likewise, items that exist only\r
+ in p_map2 are moved to p_new. This function can be usefull in evaluating\r
+ changes between two maps.\r
+\r
+ Both maps pointed to by p_new and p_old must be empty on input. This\r
+ requirement removes the possibility of failures.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Flexi <a href="./cl_map_h.html#robo17">Map</a>, <a href="#robo333">cl_fmap_merge</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo326">[Functions]<a name="Component20Library3a20Flexi20Map2fcl5ffmap5fend">\r
+Component Library: Flexi Map/cl_fmap_end</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_fmap_end</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_fmap_end</strong> function returns the end of a flexi map.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_INLINE const <a href="#robo331">cl_fmap_item_t</a>* const CL_API\r
+<strong>cl_fmap_end</strong>(\r
+ IN const <a href="#robo339">cl_fmap_t</a>* const p_map )\r
+{\r
+ CL_ASSERT( p_map );\r
+ CL_ASSERT( p_map->state == CL_INITIALIZED );\r
+ /* Nil is the end of the map. */\r
+ return( &p_map->nil );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_map\r
+ [in] Pointer to a <a href="#robo339">cl_fmap_t</a> structure whose end to return.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> Pointer to the end of the map.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> <strong>cl_fmap_end</strong> is useful for determining the validity of map items returned\r
+ by <a href="#robo328">cl_fmap_head</a>, <a href="#robo340">cl_fmap_tail</a>, <a href="#robo334">cl_fmap_next</a>, or <a href="#robo335">cl_fmap_prev</a>. If the map\r
+ item pointer returned by any of these functions compares to the end, the\r
+ end of the map was encoutered.\r
+ When using <a href="#robo328">cl_fmap_head</a> or <a href="#robo340">cl_fmap_tail</a>, this condition indicates that\r
+ the map is empty.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Flexi <a href="./cl_map_h.html#robo17">Map</a>, <a href="#robo328">cl_fmap_head</a>, <a href="#robo340">cl_fmap_tail</a>, <a href="#robo334">cl_fmap_next</a>, <a href="#robo335">cl_fmap_prev</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo327">[Functions]<a name="Component20Library3a20Flexi20Map2fcl5ffmap5fget">\r
+Component Library: Flexi Map/cl_fmap_get</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_fmap_get</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_fmap_get</strong> function returns the map item associated with a key.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT <a href="#robo331">cl_fmap_item_t</a>* CL_API\r
+<strong>cl_fmap_get</strong>(\r
+ IN const <a href="#robo339">cl_fmap_t</a>* const p_map,\r
+ IN const void* const p_key );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_map\r
+ [in] Pointer to a <a href="#robo339">cl_fmap_t</a> structure from which to retrieve the\r
+ item with the specified key.\r
+\r
+ p_key\r
+ [in] Pointer to a key value used to search for the desired map item.\r
+\r
+ RETURN VALUES\r
+ Pointer to the map item with the desired key value.\r
+\r
+ Pointer to the map end if there was no item with the desired key value\r
+ stored in the flexi map.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> <strong>cl_fmap_get</strong> does not remove the item from the flexi map.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Flexi <a href="./cl_map_h.html#robo17">Map</a>, <a href="#robo336">cl_fmap_remove</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo328">[Functions]<a name="Component20Library3a20Flexi20Map2fcl5ffmap5fhead">\r
+Component Library: Flexi Map/cl_fmap_head</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_fmap_head</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_fmap_head</strong> function returns the map item with the lowest key\r
+ value stored in a flexi map.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_INLINE <a href="#robo331">cl_fmap_item_t</a>* CL_API\r
+<strong>cl_fmap_head</strong>(\r
+ IN const <a href="#robo339">cl_fmap_t</a>* const p_map )\r
+{\r
+ CL_ASSERT( p_map );\r
+ CL_ASSERT( p_map->state == CL_INITIALIZED );\r
+ return( (<a href="#robo331">cl_fmap_item_t</a>*)p_map->nil.pool_item.list_item.p_next );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_map\r
+ [in] Pointer to a <a href="#robo339">cl_fmap_t</a> structure whose item with the lowest key\r
+ is returned.\r
+\r
+ RETURN VALUES\r
+ Pointer to the map item with the lowest key in the flexi map.\r
+\r
+ Pointer to the map end if the flexi map was empty.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> <strong>cl_fmap_head</strong> does not remove the item from the map.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Flexi <a href="./cl_map_h.html#robo17">Map</a>, <a href="#robo340">cl_fmap_tail</a>, <a href="#robo334">cl_fmap_next</a>, <a href="#robo335">cl_fmap_prev</a>, <a href="#robo326">cl_fmap_end</a>,\r
+ <a href="#robo331">cl_fmap_item_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo329">[Functions]<a name="Component20Library3a20Flexi20Map2fcl5ffmap5finit">\r
+Component Library: Flexi Map/cl_fmap_init</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_fmap_init</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_fmap_init</strong> function initialized a flexi map for use.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT void CL_API\r
+<strong>cl_fmap_init</strong>(\r
+ IN <a href="#robo339">cl_fmap_t</a>* const p_map,\r
+ IN <a href="#robo343">cl_pfn_fmap_cmp_t</a> pfn_compare );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_map\r
+ [in] Pointer to a <a href="#robo339">cl_fmap_t</a> structure to initialize.\r
+\r
+ pfn_compare\r
+ [in] Pointer to the compare function used to compare keys.\r
+ See the <a href="#robo343">cl_pfn_fmap_cmp_t</a> function type declaration for details\r
+ about the callback function.\r
+\r
+ RETURN VALUES\r
+ This function does not return a value.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> Allows calling flexi map manipulation functions.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Flexi <a href="./cl_map_h.html#robo17">Map</a>, <a href="#robo330">cl_fmap_insert</a>, <a href="#robo336">cl_fmap_remove</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo330">[Functions]<a name="Component20Library3a20Flexi20Map2fcl5ffmap5finsert">\r
+Component Library: Flexi Map/cl_fmap_insert</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_fmap_insert</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_fmap_insert</strong> function inserts a map item into a flexi map.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT <a href="#robo331">cl_fmap_item_t</a>* CL_API\r
+<strong>cl_fmap_insert</strong>(\r
+ IN <a href="#robo339">cl_fmap_t</a>* const p_map,\r
+ IN const void* const p_key,\r
+ IN <a href="#robo331">cl_fmap_item_t</a>* const p_item );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_map\r
+ [in] Pointer to a <a href="#robo339">cl_fmap_t</a> structure into which to add the item.\r
+\r
+ p_key\r
+ [in] Pointer to the key value to assign to the item. Storage for\r
+ the key must be persistant, as only the pointer is stored. Users\r
+ are responsible for maintaining the validity of key pointers while\r
+ they are in use.\r
+\r
+ p_item\r
+ [in] Pointer to a <a href="#robo331">cl_fmap_item_t</a> stucture to insert into the flexi map.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> Pointer to the item in the map with the specified key. If insertion\r
+ was successful, this is the pointer to the item. If an item with the\r
+ specified key already exists in the map, the pointer to that item is\r
+ returned.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> Insertion operations may cause the flexi map to rebalance.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Flexi <a href="./cl_map_h.html#robo17">Map</a>, <a href="#robo336">cl_fmap_remove</a>, <a href="#robo331">cl_fmap_item_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo331">[Structures]<a name="Component20Library3a20Flexi20Map2fcl5ffmap5fitem5ft">\r
+Component Library: Flexi Map/cl_fmap_item_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_fmap_item_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_fmap_item_t</strong> structure is used by maps to store objects.\r
+\r
+ The <strong>cl_fmap_item_t</strong> structure should be treated as opaque and should\r
+ be manipulated only through the provided functions.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef struct _cl_fmap_item\r
+{\r
+ /* Must be first to allow casting. */\r
+ <a href="./cl_qcomppool_h.html#robo542">cl_pool_item_t</a> pool_item;\r
+ struct _cl_fmap_item *p_left;\r
+ struct _cl_fmap_item *p_right;\r
+ struct _cl_fmap_item *p_up;\r
+ cl_map_color_t color;\r
+ const void* __ptr64 p_key;\r
+#ifdef _DEBUG_\r
+ struct _cl_fmap *p_map;\r
+#endif\r
+\r
+} <strong>cl_fmap_item_t</strong>;\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> pool_item\r
+ Used to store the item in a doubly linked list, allowing more\r
+ efficient map traversal.\r
+\r
+ p_left\r
+ Pointer to the map item that is a child to the left of the node.\r
+\r
+ p_right\r
+ Pointer to the map item that is a child to the right of the node.\r
+\r
+ p_up\r
+ Pointer to the map item that is the parent of the node.\r
+\r
+ p_nil\r
+ Pointer to the map's NIL item, used as a terminator for leaves.\r
+ The NIL sentinel is in the <a href="#robo339">cl_fmap_t</a> structure.\r
+\r
+ color\r
+ Indicates whether a node is red or black in the map.\r
+\r
+ p_key\r
+ Pointer to the value that uniquely represents a node in a map. This\r
+ pointer is set by calling <a href="#robo330">cl_fmap_insert</a> and can be retrieved by\r
+ calling <a href="#robo332">cl_fmap_key</a>.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> None of the fields of this structure should be manipulated by users, as\r
+ they are crititcal to the proper operation of the map in which they\r
+ are stored.\r
+\r
+ To allow storing items in either a quick list, a quick pool, or a flexi\r
+ map, the map implementation guarantees that the map item can be safely\r
+ cast to a pool item used for storing an object in a quick pool, or cast to\r
+ a list item used for storing an object in a quick list. This removes the\r
+ need to embed a flexi map item, a list item, and a pool item in objects\r
+ that need to be stored in a quick list, a quick pool, and a flexi map.\r
+\r
+ The flexi map item is defined to be identical in layout as a map item.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Flexi <a href="./cl_map_h.html#robo17">Map</a>, <a href="#robo330">cl_fmap_insert</a>, <a href="#robo332">cl_fmap_key</a>, <a href="./cl_qcomppool_h.html#robo542">cl_pool_item_t</a>, <a href="./cl_qlist_h.html#robo554">cl_list_item_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo332">[Functions]<a name="Component20Library3a20Flexi20Map2fcl5ffmap5fkey">\r
+Component Library: Flexi Map/cl_fmap_key</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_fmap_key</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_fmap_key</strong> function retrieves the key value of a map item.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>#pragma warning (push)\r
+#pragma warning (disable :4244)\r
+CL_INLINE const void* CL_API\r
+<strong>cl_fmap_key</strong>(\r
+ IN const <a href="#robo331">cl_fmap_item_t</a>* const p_item )\r
+{\r
+ CL_ASSERT( p_item );\r
+ return( p_item->p_key );\r
+}\r
+#pragma warning (pop )\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_item\r
+ [in] Pointer to a map item whose key value to return.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> Returns the a pointer to the key value for the specified map item.\r
+ The key value should not be modified to insure proper flexi map operation.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> The key value is set in a call to <a href="#robo330">cl_fmap_insert</a>.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Flexi <a href="./cl_map_h.html#robo17">Map</a>, <a href="#robo330">cl_fmap_insert</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo333">[Functions]<a name="Component20Library3a20Flexi20Map2fcl5ffmap5fmerge">\r
+Component Library: Flexi Map/cl_fmap_merge</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_fmap_merge</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_fmap_merge</strong> function moves all items from one map to another,\r
+ excluding duplicates.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT void CL_API\r
+<strong>cl_fmap_merge</strong>(\r
+ OUT <a href="#robo339">cl_fmap_t</a>* const p_dest_map,\r
+ IN OUT <a href="#robo339">cl_fmap_t</a>* const p_src_map );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_dest_map\r
+ [out] Pointer to a <a href="#robo339">cl_fmap_t</a> structure to which items should be added.\r
+\r
+ p_src_map\r
+ [in/out] Pointer to a <a href="#robo339">cl_fmap_t</a> structure whose items to add\r
+ to p_dest_map.\r
+\r
+ RETURN VALUES\r
+ This function does not return a value.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> Items are evaluated based on their keys only.\r
+\r
+ Upon return from <strong>cl_fmap_merge</strong>, the flexi map referenced by p_src_map\r
+ contains all duplicate items.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Flexi <a href="./cl_map_h.html#robo17">Map</a>, <a href="#robo325">cl_fmap_delta</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo334">[Functions]<a name="Component20Library3a20Flexi20Map2fcl5ffmap5fnext">\r
+Component Library: Flexi Map/cl_fmap_next</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_fmap_next</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_fmap_next</strong> function returns the map item with the next higher\r
+ key value than a specified map item.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_INLINE <a href="#robo331">cl_fmap_item_t</a>* CL_API\r
+<strong>cl_fmap_next</strong>(\r
+ IN const <a href="#robo331">cl_fmap_item_t</a>* const p_item )\r
+{\r
+ CL_ASSERT( p_item );\r
+ return( (<a href="#robo331">cl_fmap_item_t</a>*)p_item->pool_item.list_item.p_next );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_item\r
+ [in] Pointer to a map item whose successor to return.\r
+\r
+ RETURN VALUES\r
+ Pointer to the map item with the next higher key value in a flexi map.\r
+\r
+ Pointer to the map end if the specified item was the last item in\r
+ the flexi map.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Flexi <a href="./cl_map_h.html#robo17">Map</a>, <a href="#robo328">cl_fmap_head</a>, <a href="#robo340">cl_fmap_tail</a>, <a href="#robo335">cl_fmap_prev</a>, <a href="#robo326">cl_fmap_end</a>,\r
+ <a href="#robo331">cl_fmap_item_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo335">[Functions]<a name="Component20Library3a20Flexi20Map2fcl5ffmap5fprev">\r
+Component Library: Flexi Map/cl_fmap_prev</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_fmap_prev</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_fmap_prev</strong> function returns the map item with the next lower\r
+ key value than a precified map item.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_INLINE <a href="#robo331">cl_fmap_item_t</a>* CL_API\r
+<strong>cl_fmap_prev</strong>(\r
+ IN const <a href="#robo331">cl_fmap_item_t</a>* const p_item )\r
+{\r
+ CL_ASSERT( p_item );\r
+ return( (<a href="#robo331">cl_fmap_item_t</a>*)p_item->pool_item.list_item.p_prev );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_item\r
+ [in] Pointer to a map item whose predecessor to return.\r
+\r
+ RETURN VALUES\r
+ Pointer to the map item with the next lower key value in a flexi map.\r
+\r
+ Pointer to the map end if the specifid item was the first item in\r
+ the flexi map.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Flexi <a href="./cl_map_h.html#robo17">Map</a>, <a href="#robo328">cl_fmap_head</a>, <a href="#robo340">cl_fmap_tail</a>, <a href="#robo334">cl_fmap_next</a>, <a href="#robo326">cl_fmap_end</a>,\r
+ <a href="#robo331">cl_fmap_item_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo336">[Functions]<a name="Component20Library3a20Flexi20Map2fcl5ffmap5fremove">\r
+Component Library: Flexi Map/cl_fmap_remove</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_fmap_remove</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_fmap_remove</strong> function removes the map item with the specified key\r
+ from a flexi map.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT <a href="#robo331">cl_fmap_item_t</a>* CL_API\r
+<strong>cl_fmap_remove</strong>(\r
+ IN <a href="#robo339">cl_fmap_t</a>* const p_map,\r
+ IN const void* const p_key );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_map\r
+ [in] Pointer to a <a href="#robo339">cl_fmap_t</a> structure from which to remove the item\r
+ with the specified key.\r
+\r
+ p_key\r
+ [in] Pointer to the key value used to search for the map item\r
+ to remove.\r
+\r
+ RETURN VALUES\r
+ Pointer to the removed map item if it was found.\r
+\r
+ Pointer to the map end if no item with the specified key exists in the\r
+ flexi map.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Flexi <a href="./cl_map_h.html#robo17">Map</a>, <a href="#robo338">cl_fmap_remove_item</a>, <a href="#robo337">cl_fmap_remove_all</a>, <a href="#robo330">cl_fmap_insert</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo337">[Functions]<a name="Component20Library3a20Flexi20Map2fcl5ffmap5fremove5fall">\r
+Component Library: Flexi Map/cl_fmap_remove_all</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_fmap_remove_all</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_fmap_remove_all</strong> function removes all items in a flexi map,\r
+ leaving it empty.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_INLINE void CL_API\r
+<strong>cl_fmap_remove_all</strong>(\r
+ IN <a href="#robo339">cl_fmap_t</a>* const p_map )\r
+{\r
+ CL_ASSERT( p_map );\r
+ CL_ASSERT( p_map->state == CL_INITIALIZED );\r
+\r
+ p_map->root.p_left = &p_map->nil;\r
+ p_map->nil.pool_item.list_item.p_next = &p_map->nil.pool_item.list_item;\r
+ p_map->nil.pool_item.list_item.p_prev = &p_map->nil.pool_item.list_item;\r
+ p_map->count = 0;\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_map\r
+ [in] Pointer to a <a href="#robo339">cl_fmap_t</a> structure to empty.\r
+\r
+ RETURN VALUES\r
+ This function does not return a value.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Flexi <a href="./cl_map_h.html#robo17">Map</a>, <a href="#robo336">cl_fmap_remove</a>, <a href="#robo338">cl_fmap_remove_item</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo338">[Functions]<a name="Component20Library3a20Flexi20Map2fcl5ffmap5fremove5fitem">\r
+Component Library: Flexi Map/cl_fmap_remove_item</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_fmap_remove_item</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_fmap_remove_item</strong> function removes the specified map item\r
+ from a flexi map.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT void CL_API\r
+<strong>cl_fmap_remove_item</strong>(\r
+ IN <a href="#robo339">cl_fmap_t</a>* const p_map,\r
+ IN <a href="#robo331">cl_fmap_item_t</a>* const p_item );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_item\r
+ [in] Pointer to a map item to remove from its flexi map.\r
+\r
+ RETURN VALUES\r
+ This function does not return a value.\r
+\r
+ In a debug build, <strong>cl_fmap_remove_item</strong> asserts that the item being removed\r
+ is in the specified map.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> Removes the map item pointed to by p_item from its flexi map.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Flexi <a href="./cl_map_h.html#robo17">Map</a>, <a href="#robo336">cl_fmap_remove</a>, <a href="#robo337">cl_fmap_remove_all</a>, <a href="#robo330">cl_fmap_insert</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo339">[Structures]<a name="Component20Library3a20Flexi20Map2fcl5ffmap5ft">\r
+Component Library: Flexi Map/cl_fmap_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_fmap_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Flexi map structure.\r
+\r
+ The <strong>cl_fmap_t</strong> structure should be treated as opaque and should\r
+ be manipulated only through the provided functions.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef struct _cl_fmap\r
+{\r
+ <a href="#robo331">cl_fmap_item_t</a> root;\r
+ <a href="#robo331">cl_fmap_item_t</a> nil;\r
+ cl_state_t state;\r
+ size_t count;\r
+ <a href="#robo343">cl_pfn_fmap_cmp_t</a> pfn_compare;\r
+\r
+} <strong>cl_fmap_t</strong>;\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> root\r
+ <a href="./cl_map_h.html#robo17">Map</a> item that serves as root of the map. The root is set up to\r
+ always have itself as parent. The left pointer is set to point to\r
+ the item at the root.\r
+\r
+ nil\r
+ <a href="./cl_map_h.html#robo17">Map</a> item that serves as terminator for all leaves, as well as providing\r
+ the list item used as quick list for storing map items in a list for\r
+ faster traversal.\r
+\r
+ state\r
+ State of the map, used to verify that operations are permitted.\r
+\r
+ count\r
+ Number of items in the map.\r
+\r
+ pfn_compare\r
+ Pointer to a compare function to invoke to compare the keys of\r
+ items in the map.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Flexi <a href="./cl_map_h.html#robo17">Map</a>, <a href="#robo343">cl_pfn_fmap_cmp_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo340">[Functions]<a name="Component20Library3a20Flexi20Map2fcl5ffmap5ftail">\r
+Component Library: Flexi Map/cl_fmap_tail</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_fmap_tail</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_fmap_tail</strong> function returns the map item with the highest key\r
+ value stored in a flexi map.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_INLINE <a href="#robo331">cl_fmap_item_t</a>* CL_API\r
+<strong>cl_fmap_tail</strong>(\r
+ IN const <a href="#robo339">cl_fmap_t</a>* const p_map )\r
+{\r
+ CL_ASSERT( p_map );\r
+ CL_ASSERT( p_map->state == CL_INITIALIZED );\r
+ return( (<a href="#robo331">cl_fmap_item_t</a>*)p_map->nil.pool_item.list_item.p_prev );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_map\r
+ [in] Pointer to a <a href="#robo339">cl_fmap_t</a> structure whose item with the highest key\r
+ is returned.\r
+\r
+ RETURN VALUES\r
+ Pointer to the map item with the highest key in the flexi map.\r
+\r
+ Pointer to the map end if the flexi map was empty.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> <a href="#robo326">cl_fmap_end</a> does not remove the item from the map.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Flexi <a href="./cl_map_h.html#robo17">Map</a>, <a href="#robo328">cl_fmap_head</a>, <a href="#robo334">cl_fmap_next</a>, <a href="#robo335">cl_fmap_prev</a>, <a href="#robo326">cl_fmap_end</a>,\r
+ <a href="#robo331">cl_fmap_item_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo341">[Functions]<a name="Component20Library3a20Flexi20Map2fcl5fis5ffmap5fempty">\r
+Component Library: Flexi Map/cl_is_fmap_empty</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_is_fmap_empty</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_is_fmap_empty</strong> function returns whether a flexi map is empty.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_INLINE boolean_t CL_API\r
+<strong>cl_is_fmap_empty</strong>(\r
+ IN const <a href="#robo339">cl_fmap_t</a>* const p_map )\r
+{\r
+ CL_ASSERT( p_map );\r
+ CL_ASSERT( p_map->state == CL_INITIALIZED );\r
+\r
+ return( p_map->count == 0 );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_map\r
+ [in] Pointer to a <a href="#robo339">cl_fmap_t</a> structure to test for emptiness.\r
+\r
+ RETURN VALUES\r
+ TRUE if the flexi map is empty.\r
+\r
+ FALSE otherwise.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Flexi <a href="./cl_map_h.html#robo17">Map</a>, <a href="#robo324">cl_fmap_count</a>, <a href="#robo337">cl_fmap_remove_all</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo342">[Definitions]<a name="Component20Library3a20Flexi20Map2fcl5fpfn5ffmap5fapply5ft">\r
+Component Library: Flexi Map/cl_pfn_fmap_apply_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_pfn_fmap_apply_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_pfn_fmap_apply_t</strong> function type defines the prototype for functions\r
+ used to iterate items in a flexi map.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef void\r
+(CL_API *<strong>cl_pfn_fmap_apply_t</strong>)(\r
+ IN <a href="#robo331">cl_fmap_item_t</a>* const p_map_item,\r
+ IN void* context );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_map_item\r
+ [in] Pointer to a <a href="#robo331">cl_fmap_item_t</a> structure.\r
+\r
+ context\r
+ [in] Value passed to the callback function.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> This function does not return a value.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This function type is provided as function prototype reference for the\r
+ function provided by users as a parameter to the <a href="#robo323">cl_fmap_apply_func</a>\r
+ function.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Flexi <a href="./cl_map_h.html#robo17">Map</a>, <a href="#robo323">cl_fmap_apply_func</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo343">[Definitions]<a name="Component20Library3a20Flexi20Map2fcl5fpfn5ffmap5fcmp5ft">\r
+Component Library: Flexi Map/cl_pfn_fmap_cmp_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_pfn_fmap_cmp_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_pfn_fmap_cmp_t</strong> function type defines the prototype for functions\r
+ used to compare item keys in a flexi map.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef intn_t\r
+(CL_API *<strong>cl_pfn_fmap_cmp_t</strong>)(\r
+ IN const void* const p_key1,\r
+ IN const void* const p_key2 );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_key1\r
+ [in] Pointer to the first of two keys to compare.\r
+\r
+ p_key2\r
+ [in] Pointer to the second of two keys to compare.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> Returns 0 if the keys match.\r
+ Returns less than 0 if p_key1 is less than p_key2.\r
+ Returns greater than 0 if p_key1 is greater than p_key2.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This function type is provided as function prototype reference for the\r
+ function provided by users as a parameter to the <a href="#robo329">cl_fmap_init</a> function.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Flexi <a href="./cl_map_h.html#robo17">Map</a>, <a href="#robo329">cl_fmap_init</a>\r
+</pre>\r
+</span>\r
+</body>\r
+</html>\r
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">\r
+<html>\r
+<head>\r
+<link rel="stylesheet" href="../robodoc.css" type="text/css">\r
+<title>./inc_doc/complib/cl_ioctl_h.html</title>\r
+<!-- Source: ./inc/complib/cl_ioctl.h -->\r
+<!-- Generated with ROBODoc Version 4.99.22 (Mar 6 2006) -->\r
+</head>\r
+<body bgcolor="#FFFFFF">\r
+<a name="robo_top_of_doc">Generated from ./inc/complib/cl_ioctl.h</a> with <a href="http://sourceforge.net/projects/robodoc/">ROBODoc</a> v4.99.22 on Sun Apr 16 2006 17:39:25\r
+<br />\r
+<hr />\r
+\r
+<h2><a name="robo13">[Modules]<a name="Component20Library2fIOCTL20Object">\r
+Component Library/IOCTL Object</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_modules.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> IOCTL <a href="./cl_obj_h.html#robo18">Object</a>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The IOCTL object provides functionality for handling IOCTL requests.\r
+\r
+ The IOCTL object is only available in kernel mode and provides\r
+ functionality for accessing information about IO requests initiated\r
+ by a user-mode application. The <a href="#robo357">IOCTL_CODE</a> macro is used in both\r
+ user and kernel mode to initiate and dispatch IOCTL requests, respectively.\r
+\r
+ In Linux, in order for the IOCTL object to be used, requests must be\r
+ initiated and handled using the Device Framework abstraction.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Structures:\r
+ <a href="#robo347">cl_ioctl_handle_t</a>\r
+\r
+ Callbacks:\r
+ <a href="#robo356">cl_pfn_ioctl_handler_t</a>\r
+\r
+ Control Code Generation\r
+ <a href="#robo357">IOCTL_CODE</a>\r
+\r
+ Kernel Mode Access\r
+ <a href="#robo352">cl_ioctl_process</a>\r
+ <a href="#robo345">cl_ioctl_complete</a>\r
+ <a href="#robo355">cl_ioctl_type</a>\r
+ <a href="#robo344">cl_ioctl_cmd</a>\r
+ <a href="#robo346">cl_ioctl_ctl_code</a>\r
+ <a href="#robo348">cl_ioctl_in_buf</a>\r
+ <a href="#robo349">cl_ioctl_in_size</a>\r
+ <a href="#robo350">cl_ioctl_out_buf</a>\r
+ <a href="#robo351">cl_ioctl_out_size</a>\r
+\r
+ User Mode Access\r
+ <a href="#robo353">cl_ioctl_request</a>\r
+ <a href="#robo354">cl_ioctl_result</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo344">[Functions]<a name="Component20Library3a20IOCTL20Object2fcl5fioctl5fcmd">\r
+Component Library: IOCTL Object/cl_ioctl_cmd</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_ioctl_cmd</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Returns the command of an IOCTL\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT uint16_t CL_API\r
+<strong>cl_ioctl_cmd</strong>(\r
+ IN <a href="#robo347">cl_ioctl_handle_t</a> h_ioctl );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_ioctl\r
+ [in] Handle to an IOCTL\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> Returns the command of the specified IOCTL request, as defined using\r
+ the IOCTL_CMD macro.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> The <strong>cl_ioctl_cmd</strong> function is only available in the kernel.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> IOCTL <a href="./cl_obj_h.html#robo18">Object</a>, <a href="#robo347">cl_ioctl_handle_t</a>, <a href="#robo355">cl_ioctl_type</a>, <a href="#robo346">cl_ioctl_ctl_code</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo345">[Functions]<a name="Component20Library3a20IOCTL20Object2fcl5fioctl5fcomplete">\r
+Component Library: IOCTL Object/cl_ioctl_complete</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_ioctl_complete</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Fills in completion information for an IOCTL and releases the IOCTL request\r
+ for completion.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT void CL_API\r
+<strong>cl_ioctl_complete</strong>(\r
+ IN <a href="#robo347">cl_ioctl_handle_t</a> h_ioctl,\r
+ IN <a href="./cl_types_h.html#robo304">cl_status_t</a> io_status,\r
+ IN size_t ret_bytes );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_ioctl\r
+ Handle to the IOCTL being completed. This handle was provided to\r
+ the IOCTL handler.\r
+\r
+ io_status\r
+ Status of the IOCTL request.\r
+\r
+ ret_bytes\r
+ Number of bytes written to the output buffer.\r
+\r
+ RETURN VALUES\r
+ This function does not return a value.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> IOCTL <a href="./cl_obj_h.html#robo18">Object</a>, <a href="#robo347">cl_ioctl_handle_t</a>, <a href="#robo352">cl_ioctl_process</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo346">[Functions]<a name="Component20Library3a20IOCTL20Object2fcl5fioctl5fctl5fcode">\r
+Component Library: IOCTL Object/cl_ioctl_ctl_code</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_ioctl_ctl_code</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Returns the 32-bit control code of an IOCTL\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT uint32_t CL_API\r
+<strong>cl_ioctl_ctl_code</strong>(\r
+ IN <a href="#robo347">cl_ioctl_handle_t</a> h_ioctl );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_ioctl\r
+ [in] Handle to an IOCTL\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> Returns the 32-bit control code of the specified IOCTL request,\r
+ as defined using the IOCTL_CMD macro.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> The <strong>cl_ioctl_ctl_code</strong> function is only available in the kernel.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> IOCTL <a href="./cl_obj_h.html#robo18">Object</a>, <a href="#robo347">cl_ioctl_handle_t</a>, <a href="#robo355">cl_ioctl_type</a>, <a href="#robo344">cl_ioctl_cmd</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo347">[Definitions]<a name="Component20Library3a20IOCTL20Object2fcl5fioctl5fhandle5ft">\r
+Component Library: IOCTL Object/cl_ioctl_handle_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_ioctl_handle_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Opaque handle representing an IO request.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> The <strong>cl_ioctl_handle_t</strong> type is only available in the kernel.\r
+ The <strong>cl_ioctl_handle_t</strong> type should be treated as opaque, as it\r
+ varies from environment to environment.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> IOCTL <a href="./cl_obj_h.html#robo18">Object</a>, <a href="#robo355">cl_ioctl_type</a>, <a href="#robo344">cl_ioctl_cmd</a>, <a href="#robo348">cl_ioctl_in_buf</a>,\r
+ <a href="#robo349">cl_ioctl_in_size</a>, <a href="#robo350">cl_ioctl_out_buf</a>, <a href="#robo351">cl_ioctl_out_size</a>,\r
+ cl_ioctl_set_status, cl_ioctl_set_ret_bytes\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo348">[Functions]<a name="Component20Library3a20IOCTL20Object2fcl5fioctl5fin5fbuf">\r
+Component Library: IOCTL Object/cl_ioctl_in_buf</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_ioctl_in_buf</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Returns a pointer to the input buffer of an IOCTL.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT void* CL_API\r
+<strong>cl_ioctl_in_buf</strong>(\r
+ IN <a href="#robo347">cl_ioctl_handle_t</a> h_ioctl );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_ioctl\r
+ [in] Handle to an IOCTL\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> Returns the input buffer of the specified IOCTL request.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> The <strong>cl_ioctl_in_buf</strong> function is only available in the kernel.\r
+\r
+ In Windows, for IOCTL operations defined as METHOD_IN_DIRECT, the\r
+ returned pointer points to the MDL describing the input buffer.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> IOCTL <a href="./cl_obj_h.html#robo18">Object</a>, <a href="#robo347">cl_ioctl_handle_t</a>, <a href="#robo349">cl_ioctl_in_size</a>,\r
+ <a href="#robo350">cl_ioctl_out_buf</a>, <a href="#robo351">cl_ioctl_out_size</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo349">[Functions]<a name="Component20Library3a20IOCTL20Object2fcl5fioctl5fin5fsize">\r
+Component Library: IOCTL Object/cl_ioctl_in_size</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_ioctl_in_size</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Returns the size of the input buffer of an IOCTL.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT size_t CL_API\r
+<strong>cl_ioctl_in_size</strong>(\r
+ IN <a href="#robo347">cl_ioctl_handle_t</a> h_ioctl );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_ioctl\r
+ [in] Handle to an IOCTL\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> Returns the size, in bytes, of the input buffer of the specified\r
+ IOCTL request.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> The <strong>cl_ioctl_in_size</strong> function is only available in the kernel.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> IOCTL <a href="./cl_obj_h.html#robo18">Object</a>, <a href="#robo347">cl_ioctl_handle_t</a>, <a href="#robo348">cl_ioctl_in_buf</a>,\r
+ <a href="#robo350">cl_ioctl_out_buf</a>, <a href="#robo351">cl_ioctl_out_size</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo350">[Functions]<a name="Component20Library3a20IOCTL20Object2fcl5fioctl5fout5fbuf">\r
+Component Library: IOCTL Object/cl_ioctl_out_buf</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_ioctl_out_buf</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Returns a pointer to the output buffer of an IOCTL.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT void* CL_API\r
+<strong>cl_ioctl_out_buf</strong>(\r
+ IN <a href="#robo347">cl_ioctl_handle_t</a> h_ioctl );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_ioctl\r
+ [in] Handle to an IOCTL\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> Returns a pointer to the output buffer of the specified IOCTL request.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> The <strong>cl_ioctl_out_buf</strong> function is only available in the kernel.\r
+\r
+ In Windows, for IOCTL operations defined as METHOD_IN_DIRECT or\r
+ METHOD_OUT_DIRECT, the returned pointer points to the MDL describing\r
+ the input buffer.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> IOCTL <a href="./cl_obj_h.html#robo18">Object</a>, <a href="#robo347">cl_ioctl_handle_t</a>, <a href="#robo351">cl_ioctl_out_size</a>,\r
+ <a href="#robo348">cl_ioctl_in_buf</a>, <a href="#robo349">cl_ioctl_in_size</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo351">[Functions]<a name="Component20Library3a20IOCTL20Object2fcl5fioctl5fout5fsize">\r
+Component Library: IOCTL Object/cl_ioctl_out_size</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_ioctl_out_size</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Returns the size of the output buffer of an IOCTL.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT size_t CL_API\r
+<strong>cl_ioctl_out_size</strong>(\r
+ IN <a href="#robo347">cl_ioctl_handle_t</a> h_ioctl );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_ioctl\r
+ [in] Handle to an IOCTL\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> Returns the size, in bytes, of the input buffer of the specified\r
+ IOCTL request.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> The <strong>cl_ioctl_out_size</strong> function is only available in the kernel.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> IOCTL <a href="./cl_obj_h.html#robo18">Object</a>, <a href="#robo347">cl_ioctl_handle_t</a>, <a href="#robo350">cl_ioctl_out_buf</a>,\r
+ <a href="#robo348">cl_ioctl_in_buf</a>, <a href="#robo349">cl_ioctl_in_size</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo352">[Functions]<a name="Component20Library3a20IOCTL20Object2fcl5fioctl5fprocess">\r
+Component Library: IOCTL Object/cl_ioctl_process</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_ioctl_process</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_ioctl_process</strong> function unpacks information initiated by a call to\r
+ <a href="#robo353">cl_ioctl_request</a> function and invokes a user-supplied callback.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT <a href="./cl_types_h.html#robo304">cl_status_t</a> CL_API\r
+<strong>cl_ioctl_process</strong>(\r
+ IN void *p_ioctl,\r
+ IN <a href="#robo356">cl_pfn_ioctl_handler_t</a> pfn_ioctl_handler,\r
+ IN void *context_1,\r
+ IN void *context_2 );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_ioctl\r
+ [in] Pointer to an OS specific IOCTL information. In Linux,\r
+ this parameter depends on whether the IOCTL is handled synchronously\r
+ or asynchronously. See the notes for further detail.\r
+ In Windows, this is a pointer to an IRP.\r
+\r
+ pfn_ioctl_handler\r
+ [in] Pointer to the callback function to invoke for handling the IOCTL.\r
+ This callback is independent of the IOCTL command.\r
+\r
+ context_1\r
+ [in] First of two context parameters to pass to the handler.\r
+\r
+ context_2\r
+ [in] Second of two context parameters to pass to the handler.\r
+\r
+ RETURN VALUES\r
+ CL_SUCCESS if the IOCTL was processed successfully.\r
+\r
+ Other values to indicate various failures.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> Users must call <a href="#robo345">cl_ioctl_complete</a> from within the handler if completing\r
+ the IOCTL request synchronously. If the IOCTL request's control code is\r
+ invalid, the handler should return CL_INVALID_REQUEST.\r
+\r
+ In Linux, the p_ioctl parameter is a copy of the argp parameter on input,\r
+ and on output points to the IOCTL request object passed to the IOCTL\r
+ handler if and only if the IOCTL handler returned CL_PENDING.\r
+ This allows the user to cancel the request by passing the same\r
+ handle to the cancel routine that was passed to the IOCTL handler.\r
+ If all IOCTLs are handled synchronously, it is acceptable to pass the argp\r
+ parameter of the IOCTL entry point instead of a copy.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> IOCTL <a href="./cl_obj_h.html#robo18">Object</a>, <a href="#robo347">cl_ioctl_handle_t</a>, <a href="#robo356">cl_pfn_ioctl_handler_t</a>, <a href="#robo345">cl_ioctl_complete</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo353">[Functions]<a name="Component20Library3a20IOCTL20Object2fcl5fioctl5frequest">\r
+Component Library: IOCTL Object/cl_ioctl_request</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_ioctl_request</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_ioctl_request</strong> is used by user-mode clients to initiate IOCTL\r
+ requests to a device.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT <a href="./cl_types_h.html#robo304">cl_status_t</a> CL_API\r
+<strong>cl_ioctl_request</strong>(\r
+ IN void *h_dev,\r
+ IN uint32_t ioctl_code,\r
+ IN void *p_in_buf,\r
+ IN size_t in_size,\r
+ OUT void *p_out_buf,\r
+ IN size_t out_size,\r
+ OUT size_t *p_ret_bytes OPTIONAL,\r
+ IN void *p_async_info OPTIONAL );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_dev\r
+ [in] Handle to the device to which the IOCTL request is targetted.\r
+ In Linux, this is a file descriptor. In Windows, this is a file\r
+ handle.\r
+\r
+ ioctl_code\r
+ [in] Control code for the IOCTL request.\r
+\r
+ p_in_buf\r
+ [in] Pointer to the input buffer.\r
+\r
+ in_size\r
+ [in] Size, in bytes, of the input buffer.\r
+\r
+ p_out_buf\r
+ [out] Pointer to the output buffer.\r
+\r
+ out_size\r
+ [in] Size, in bytes, of the output buffer.\r
+\r
+ p_ret_bytes\r
+ [out] Number of bytes written to the output buffer. This parameter is\r
+ mutually exclusive of the p_async_info parameter.\r
+\r
+ p_async_info\r
+ [in] For platforms that support asynchronous I/O, supplies a pointer\r
+ to that platform's async I/O structure, if any. For Windows, this\r
+ is a pointer to an OVERLAPPED structure. This parameter is mutually\r
+ exclusive of the p_ret_bytes parameter.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> IOCTL <a href="./cl_obj_h.html#robo18">Object</a>, <a href="#robo354">cl_ioctl_result</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo354">[Functions]<a name="Component20Library3a20IOCTL20Object2fcl5fioctl5fresult">\r
+Component Library: IOCTL Object/cl_ioctl_result</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_ioctl_result</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Checks the status of an asynchronous IOCTL request.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT <a href="./cl_types_h.html#robo304">cl_status_t</a> CL_API\r
+<strong>cl_ioctl_result</strong>(\r
+ IN void *h_dev,\r
+ IN void *p_async_info,\r
+ OUT size_t *p_ret_bytes,\r
+ IN boolean_t blocking );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_dev\r
+ [in] Handle to the device to which the IOCTL request is targetted.\r
+ In Linux, this is a file descriptor. In Windows, this is a file\r
+ handle.\r
+\r
+ p_async_info\r
+ [in] For platforms that support asynchronous I/O, supplies a pointer\r
+ to that platform's async I/O structure, if any. For Windows, this\r
+ is a pointer to an OVERLAPPED structure. This must be the same\r
+ as that provided in the <a href="#robo353">cl_ioctl_request</a> function.\r
+\r
+ p_ret_bytes\r
+ [out] Number of bytes written to the output buffer.\r
+\r
+ blocking\r
+ [in] If TRUE, indicates that the call should wait until the\r
+ specified IOCTL request is complete.\r
+\r
+ RETURN VALUES\r
+ CL_SUCCESS if the IOCTL request was successful. p_ret_bytes contains\r
+ the number bytes written to the output buffer.\r
+\r
+ CL_PENDING if the IOCTL request is not yet complete.\r
+\r
+ Other status values to indicate errors.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> IOCTL <a href="./cl_obj_h.html#robo18">Object</a>, <a href="#robo353">cl_ioctl_request</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo355">[Functions]<a name="Component20Library3a20IOCTL20Object2fcl5fioctl5ftype">\r
+Component Library: IOCTL Object/cl_ioctl_type</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_ioctl_type</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Returns the type of an IOCTL.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT uint16_t CL_API\r
+<strong>cl_ioctl_type</strong>(\r
+ IN <a href="#robo347">cl_ioctl_handle_t</a> h_ioctl );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_ioctl\r
+ [in] Handle to an IOCTL\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> Returns the type of the specified IOCTL request, as defined using\r
+ the IOCTL_CMD macro.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> The <strong>cl_ioctl_type</strong> function is only available in the kernel.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> IOCTL <a href="./cl_obj_h.html#robo18">Object</a>, <a href="#robo347">cl_ioctl_handle_t</a>, <a href="#robo344">cl_ioctl_cmd</a>, <a href="#robo346">cl_ioctl_ctl_code</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo356">[Definitions]<a name="Component20Library3a20IOCTL20Object2fcl5fpfn5fioctl5fhandler5ft">\r
+Component Library: IOCTL Object/cl_pfn_ioctl_handler_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_pfn_ioctl_handler_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_pfn_ioctl_handler_t</strong> function type defines the prototype for\r
+ IOCTL handlers used when handling IOCTL requests initiated by\r
+ <a href="#robo353">cl_ioctl_request</a>.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef <a href="./cl_types_h.html#robo304">cl_status_t</a>\r
+(CL_API *<strong>cl_pfn_ioctl_handler_t</strong>)(\r
+ IN <a href="#robo347">cl_ioctl_handle_t</a> h_ioctl,\r
+ IN void *context_1,\r
+ IN void *context_2 );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_ioctl\r
+ [in] Handle to the IOCTL request.\r
+\r
+ context_1\r
+ [in] First context parameters, as provided to <a href="#robo352">cl_ioctl_process</a>.\r
+\r
+ context_2\r
+ [in] Second context parameters, as provided to <a href="#robo352">cl_ioctl_process</a>.\r
+\r
+ RETURN VALUES\r
+ CL_SUCCESS if the IOCTL was completed successfully.\r
+\r
+ CL_PENDING if the IOCTL is being processed asynchronously.\r
+\r
+ Other return values in case of errors.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> It is acceptable to complete the IOCTL successfully to report an error\r
+ status in the output buffer.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> IOCTL <a href="./cl_obj_h.html#robo18">Object</a>, <a href="#robo347">cl_ioctl_handle_t</a>, <a href="#robo352">cl_ioctl_process</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo357">[Definitions]<a name="Component20Library3a20IOCTL20Object2fIOCTL5fCODE">\r
+Component Library: IOCTL Object/IOCTL_CODE</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>IOCTL_CODE</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Macro for defining IO control command codes.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>* uint32_t <strong>IOCTL_CODE</strong>( uint16_t type, uint16_t cmd )\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> type\r
+ [in] user-defined type representing the type of command. For Linux,\r
+ the type is truncated to 8-bits. For Windows, the type is a 16-bit\r
+ value, as described in "Specifying Device Types" in the DDK docs.\r
+\r
+ cmd\r
+ [in] User-defined command. For Linux, the command field is truncated\r
+ to 8-bits. For Windows, the command can be 12-bits, with values\r
+ below 0x800 reserved by Microsoft for system defined commands.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> A 32-bit control code. User-mode clients use the control code to initiate\r
+ requests. Kernel-mode clients use the control code to distinguish between\r
+ different requests.\r
+</pre>\r
+</span><p><strong>NOTE</strong></p>\r
+<span class="NOTE"><pre> In Windows, all IOCTL command codes defined with the <strong>IOCTL_CODE</strong> command\r
+ result in FILE_ANY_ACCESS and METHOD_BUFFERED being specified.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> IOCTL <a href="./cl_obj_h.html#robo18">Object</a>, cl_dev_ioctl, <a href="#robo355">cl_ioctl_type</a>, <a href="#robo344">cl_ioctl_cmd</a>\r
+</pre>\r
+</span>\r
+</body>\r
+</html>\r
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">\r
+<html>\r
+<head>\r
+<link rel="stylesheet" href="../robodoc.css" type="text/css">\r
+<title>./inc_doc/complib/cl_irqlock_h.html</title>\r
+<!-- Source: ./inc/complib/cl_irqlock.h -->\r
+<!-- Generated with ROBODoc Version 4.99.22 (Mar 6 2006) -->\r
+</head>\r
+<body bgcolor="#FFFFFF">\r
+<a name="robo_top_of_doc">Generated from ./inc/complib/cl_irqlock.h</a> with <a href="http://sourceforge.net/projects/robodoc/">ROBODoc</a> v4.99.22 on Sun Apr 16 2006 17:39:25\r
+<br />\r
+<hr />\r
+\r
+<h2><a name="robo14">[Modules]<a name="Component20Library2fIrqlock">\r
+Component Library/Irqlock</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_modules.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>Irqlock</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> <strong>Irqlock</strong> provides synchronization at interrupt level between threads for \r
+ exclusive access to a resource.\r
+\r
+ The irqlock functions manipulate a cl_irqlock_t structure which should \r
+ be treated as opaque and should be manipulated only through the provided \r
+ functions.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Structures:\r
+ cl_irqlock_t\r
+\r
+ Initialization:\r
+ <a href="#robo359">cl_irqlock_construct</a>, <a href="#robo361">cl_irqlock_init</a>, <a href="#robo360">cl_irqlock_destroy</a>\r
+\r
+ Manipulation\r
+ <a href="#robo358">cl_irqlock_acquire</a>, <a href="#robo362">cl_irqlock_release</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo358">[Functions]<a name="Component20Library3a20Irqlock2fcl5firqlock5facquire">\r
+Component Library: Irqlock/cl_irqlock_acquire</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_irqlock_acquire</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_irqlock_acquire</strong> function acquires a IRQ lock.\r
+ This version of lock does not prevent an interrupt from \r
+ occuring on the processor on which the code is being\r
+ executed. To protect from an interrupt level resource\r
+ use the cl_irqlock_acquire_irq function.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT void CL_API\r
+<strong>cl_irqlock_acquire</strong>( \r
+ IN cl_irqlock_t* const p_irqlock );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_irqlock \r
+ [in] Pointer to a IRQ lock structure to acquire.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> This function does not return a value.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo14">Irqlock</a>, <a href="#robo362">cl_irqlock_release</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo359">[Functions]<a name="Component20Library3a20Irqlock2fcl5firqlock5fconstruct">\r
+Component Library: Irqlock/cl_irqlock_construct</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_irqlock_construct</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_irqlock_construct</strong> function initializes the state of a \r
+ IRQ lock.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT void CL_API\r
+<strong>cl_irqlock_construct</strong>( \r
+ IN cl_irqlock_t* const p_irqlock );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_irqlock \r
+ [in] Pointer to a IRQ lock structure whose state to initialize.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> This function does not return a value.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> Allows calling <a href="#robo360">cl_irqlock_destroy</a> without first calling \r
+ <a href="#robo361">cl_irqlock_init</a>.\r
+\r
+ Calling <strong>cl_irqlock_construct</strong> is a prerequisite to calling any other\r
+ IRQ lock function except <a href="#robo361">cl_irqlock_init</a>.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo14">Irqlock</a>, <a href="#robo361">cl_irqlock_init</a>, <a href="#robo360">cl_irqlock_destroy</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo360">[Functions]<a name="Component20Library3a20Irqlock2fcl5firqlock5fdestroy">\r
+Component Library: Irqlock/cl_irqlock_destroy</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_irqlock_destroy</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_irqlock_destroy</strong> function performs all necessary cleanup of a \r
+ IRQ lock.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT void CL_API\r
+<strong>cl_irqlock_destroy</strong>( \r
+ IN cl_irqlock_t* const p_irqlock );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_irqlock \r
+ [in] Pointer to a IRQ lock structure to destroy.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> This function does not return a value.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> Performs any necessary cleanup of a IRQ lock. This function must only \r
+ be called if either <a href="#robo359">cl_irqlock_construct</a> or <a href="#robo361">cl_irqlock_init</a> has been \r
+ called.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo14">Irqlock</a>, <a href="#robo359">cl_irqlock_construct</a>, <a href="#robo361">cl_irqlock_init</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo361">[Functions]<a name="Component20Library3a20Irqlock2fcl5firqlock5finit">\r
+Component Library: Irqlock/cl_irqlock_init</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_irqlock_init</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_irqlock_init</strong> function initializes a IRQ lock for use.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT <a href="./cl_types_h.html#robo304">cl_status_t</a> CL_API\r
+<strong>cl_irqlock_init</strong>( \r
+ IN cl_irqlock_t* const p_irqlock,\r
+ IN cl_interrupt_t* const p_interrupt );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_irqlock \r
+ [in] Pointer to a IRQ lock structure to initialize.\r
+\r
+ p_interrupt\r
+ [in] Platform specific pointer conveying information about the\r
+ interrupt vector and level with which to synchronize.\r
+\r
+ RETURN VALUES\r
+ CL_SUCCESS if initialization succeeded.\r
+\r
+ CL_ERROR if initialization failed. Callers should call \r
+ <a href="#robo360">cl_irqlock_destroy</a> to clean up any resources allocated during \r
+ initialization.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> Initialize the IRQ lock structure. Allows calling cl_irqlock_aquire \r
+ and <a href="#robo362">cl_irqlock_release</a>.\r
+\r
+ In Linux, the p_interrupt parameter is currently ignored.\r
+\r
+ In Windows, the p_interrupt parameter is a pointer to a KINTERRUPT object,\r
+ the value of which is supplied by a call to IoConnectInterrupt.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo14">Irqlock</a>, <a href="#robo359">cl_irqlock_construct</a>, <a href="#robo360">cl_irqlock_destroy</a>, \r
+ <a href="#robo358">cl_irqlock_acquire</a>, <a href="#robo362">cl_irqlock_release</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo362">[Functions]<a name="Component20Library3a20Irqlock2fcl5firqlock5frelease">\r
+Component Library: Irqlock/cl_irqlock_release</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_irqlock_release</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_irqlock_release</strong> function releases a IRQ lock object.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT void CL_API\r
+<strong>cl_irqlock_release</strong>(\r
+ IN cl_irqlock_t* const p_irqlock );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_irqlock \r
+ [in] Pointer to a IRQ lock structure to release.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> This function does not return a value.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> Releases a IRQ lock after a call to <a href="#robo358">cl_irqlock_acquire</a>.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo14">Irqlock</a>, <a href="#robo358">cl_irqlock_acquire</a>\r
+</pre>\r
+</span>\r
+</body>\r
+</html>\r
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">\r
+<html>\r
+<head>\r
+<link rel="stylesheet" href="../robodoc.css" type="text/css">\r
+<title>./inc_doc/complib/cl_list_h.html</title>\r
+<!-- Source: ./inc/complib/cl_list.h -->\r
+<!-- Generated with ROBODoc Version 4.99.22 (Mar 6 2006) -->\r
+</head>\r
+<body bgcolor="#FFFFFF">\r
+<a name="robo_top_of_doc">Generated from ./inc/complib/cl_list.h</a> with <a href="http://sourceforge.net/projects/robodoc/">ROBODoc</a> v4.99.22 on Sun Apr 16 2006 17:39:25\r
+<br />\r
+<hr />\r
+\r
+<h2><a name="robo15">[Modules]<a name="Component20Library2fList">\r
+Component Library/List</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_modules.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>List</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> <strong>List</strong> stores objects in a doubly linked list.\r
+\r
+ Unlike quick list, users pass pointers to the object being stored, rather\r
+ than to a <a href="./cl_qlist_h.html#robo554">cl_list_item_t</a> structure. Insertion operations on a list can\r
+ fail, and callers should trap for such failures.\r
+\r
+ Use quick list in situations where insertion failures cannot be tolerated.\r
+\r
+ <strong>List</strong> is not thread safe, and users must provide serialization.\r
+\r
+ The list functions operates on a <a href="#robo390">cl_list_t</a> structure which should be\r
+ treated as opaque and should be manipulated only through the provided\r
+ functions.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Types:\r
+ <a href="#robo381">cl_list_iterator_t</a>\r
+\r
+ Structures:\r
+ <a href="#robo390">cl_list_t</a>\r
+\r
+ Callbacks:\r
+ <a href="#robo392">cl_pfn_list_apply_t</a>, <a href="#robo393">cl_pfn_list_find_t</a>\r
+\r
+ Initialization/Destruction:\r
+ <a href="#robo367">cl_list_construct</a>, <a href="#robo374">cl_list_init</a>, <a href="#robo369">cl_list_destroy</a>\r
+\r
+ Iteration:\r
+ <a href="#robo382">cl_list_next</a>, <a href="#robo384">cl_list_prev</a>, <a href="#robo373">cl_list_head</a>, <a href="#robo391">cl_list_tail</a>,\r
+ <a href="#robo370">cl_list_end</a>\r
+\r
+ Manipulation:\r
+ <a href="#robo377">cl_list_insert_head</a>, <a href="#robo380">cl_list_insert_tail</a>,\r
+ <a href="#robo375">cl_list_insert_array_head</a>, <a href="#robo376">cl_list_insert_array_tail</a>,\r
+ <a href="#robo379">cl_list_insert_prev</a>, <a href="#robo378">cl_list_insert_next</a>,\r
+ <a href="#robo386">cl_list_remove_head</a>, <a href="#robo389">cl_list_remove_tail</a>,\r
+ <a href="#robo388">cl_list_remove_object</a>, <a href="#robo387">cl_list_remove_item</a>, <a href="#robo385">cl_list_remove_all</a>\r
+\r
+ Search:\r
+ <a href="#robo365">cl_is_object_in_list</a>, <a href="#robo371">cl_list_find_from_head</a>, <a href="#robo372">cl_list_find_from_tail</a>,\r
+ <a href="#robo366">cl_list_apply_func</a>\r
+\r
+ Attributes:\r
+ <a href="#robo368">cl_list_count</a>, <a href="#robo363">cl_is_list_empty</a>, <a href="#robo364">cl_is_list_inited</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo363">[Functions]<a name="Component20Library3a20List2fcl5fis5flist5fempty">\r
+Component Library: List/cl_is_list_empty</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_is_list_empty</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_is_list_empty</strong> function returns whether a list is empty.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_INLINE boolean_t CL_API\r
+<strong>cl_is_list_empty</strong>(\r
+ IN const <a href="#robo390">cl_list_t</a>* const p_list )\r
+{\r
+ CL_ASSERT( p_list );\r
+ CL_ASSERT( <a href="./cl_qpool_h.html#robo615">cl_is_qpool_inited</a>( &p_list->list_item_pool ) );\r
+ return( <a href="./cl_qlist_h.html#robo553">cl_is_qlist_empty</a>( &p_list->list ) );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_list\r
+ [in] Pointer to a <a href="#robo390">cl_list_t</a> structure.\r
+\r
+ RETURN VALUES\r
+ TRUE if the specified list is empty.\r
+\r
+ FALSE otherwise.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo15">List</a>, <a href="#robo368">cl_list_count</a>, <a href="#robo385">cl_list_remove_all</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo364">[Functions]<a name="Component20Library3a20List2fcl5fis5flist5finited">\r
+Component Library: List/cl_is_list_inited</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_is_list_inited</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_is_list_inited</strong> function returns whether a list was\r
+ initialized successfully.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_INLINE boolean_t CL_API\r
+<strong>cl_is_list_inited</strong>(\r
+ IN const <a href="#robo390">cl_list_t</a>* const p_list )\r
+{\r
+ /* CL_ASSERT that a non-null pointer is provided. */\r
+ CL_ASSERT( p_list );\r
+ /*\r
+ * The pool is the last thing initialized. If it is initialized, the\r
+ * list is initialized too.\r
+ */\r
+ return( <a href="./cl_qpool_h.html#robo615">cl_is_qpool_inited</a>( &p_list->list_item_pool ) );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_list\r
+ [in] Pointer to a <a href="#robo390">cl_list_t</a> structure whose initilization state\r
+ to check.\r
+\r
+ RETURN VALUES\r
+ TRUE if the list was initialized successfully.\r
+\r
+ FALSE otherwise.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> Allows checking the state of a list to determine if invoking\r
+ member functions is appropriate.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo15">List</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo365">[Functions]<a name="Component20Library3a20List2fcl5fis5fobject5fin5flist">\r
+Component Library: List/cl_is_object_in_list</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_is_object_in_list</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_is_object_in_list</strong> function returns whether an object\r
+ is stored in a list.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT boolean_t CL_API\r
+<strong>cl_is_object_in_list</strong>(\r
+ IN const <a href="#robo390">cl_list_t</a>* const p_list,\r
+ IN const void* const p_object );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_list\r
+ [in] Pointer to a <a href="#robo390">cl_list_t</a> structure in which to look for the object.\r
+\r
+ p_object\r
+ [in] Pointer to an object stored in a list.\r
+\r
+ RETURN VALUES\r
+ TRUE if p_object was found in the list.\r
+\r
+ FALSE otherwise.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo15">List</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo366">[Functions]<a name="Component20Library3a20List2fcl5flist5fapply5ffunc">\r
+Component Library: List/cl_list_apply_func</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_list_apply_func</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_list_apply_func</strong> function executes a specified function for every\r
+ object stored in a list.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT void CL_API\r
+<strong>cl_list_apply_func</strong>(\r
+ IN const <a href="#robo390">cl_list_t</a>* const p_list,\r
+ IN <a href="#robo392">cl_pfn_list_apply_t</a> pfn_func,\r
+ IN const void* const context );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_list\r
+ [in] Pointer to a <a href="#robo390">cl_list_t</a> structure to iterate.\r
+\r
+ pfn_func\r
+ [in] Function invoked for every item in a list.\r
+ See the <a href="#robo392">cl_pfn_list_apply_t</a> function type declaration for details\r
+ about the callback function.\r
+\r
+ context\r
+ [in] Value to pass to the callback functions to provide context.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> This function does not return a value.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> <strong>cl_list_apply_func</strong> invokes the specified callback function for every\r
+ object stored in the list, starting from the head. The function specified\r
+ by the pfn_func parameter must not perform any list operations as these\r
+ would corrupt the list.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo15">List</a>, <a href="#robo371">cl_list_find_from_head</a>, <a href="#robo372">cl_list_find_from_tail</a>,\r
+ <a href="#robo392">cl_pfn_list_apply_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo367">[Functions]<a name="Component20Library3a20List2fcl5flist5fconstruct">\r
+Component Library: List/cl_list_construct</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_list_construct</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_list_construct</strong> function constructs a list.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT void CL_API\r
+<strong>cl_list_construct</strong>(\r
+ IN <a href="#robo390">cl_list_t</a>* const p_list );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_list\r
+ [in] Pointer to <a href="#robo390">cl_list_t</a> object whose state to initialize.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> This function does not return a value.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> Allows calling <a href="#robo374">cl_list_init</a>, <a href="#robo369">cl_list_destroy</a> and <a href="#robo364">cl_is_list_inited</a>.\r
+\r
+ Calling <strong>cl_list_construct</strong> is a prerequisite to calling any other\r
+ list function except <a href="#robo374">cl_list_init</a>.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo15">List</a>, <a href="#robo374">cl_list_init</a>, <a href="#robo369">cl_list_destroy</a>, <a href="#robo364">cl_is_list_inited</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo368">[Functions]<a name="Component20Library3a20List2fcl5flist5fcount">\r
+Component Library: List/cl_list_count</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_list_count</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_list_count</strong> function returns the number of objects stored in a list.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_INLINE size_t CL_API\r
+<strong>cl_list_count</strong>(\r
+ IN const <a href="#robo390">cl_list_t</a>* const p_list )\r
+{\r
+ CL_ASSERT( p_list );\r
+ CL_ASSERT( <a href="./cl_qpool_h.html#robo615">cl_is_qpool_inited</a>( &p_list->list_item_pool ) );\r
+\r
+ return( <a href="./cl_qlist_h.html#robo559">cl_qlist_count</a>( &p_list->list ) );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_list\r
+ [in] Pointer to a <a href="#robo390">cl_list_t</a> structure whose object to count.\r
+\r
+ RETURN VALUES\r
+ Number of objects stored in the specified list.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo15">List</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo369">[Functions]<a name="Component20Library3a20List2fcl5flist5fdestroy">\r
+Component Library: List/cl_list_destroy</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_list_destroy</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_list_destroy</strong> function destroys a list.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT void CL_API\r
+<strong>cl_list_destroy</strong>(\r
+ IN <a href="#robo390">cl_list_t</a>* const p_list );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_list\r
+ [in] Pointer to <a href="#robo390">cl_list_t</a> structure to destroy.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> This function does not return a value.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> <strong>cl_list_destroy</strong> does not affect any of the objects stored in the list,\r
+ but does release all memory allocated internally. Further operations\r
+ should not be attempted on the list after <strong>cl_list_destroy</strong> is invoked.\r
+\r
+ This function should only be called after a call to <a href="#robo367">cl_list_construct</a>\r
+ or <a href="#robo374">cl_list_init</a>.\r
+\r
+ In debug builds, <strong>cl_list_destroy</strong> asserts if the list is not empty.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo15">List</a>, <a href="#robo367">cl_list_construct</a>, <a href="#robo374">cl_list_init</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo370">[Functions]<a name="Component20Library3a20List2fcl5flist5fend">\r
+Component Library: List/cl_list_end</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_list_end</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_list_end</strong> function returns returns the list iterator for\r
+ the end of a list.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_INLINE const <a href="#robo381">cl_list_iterator_t</a> CL_API\r
+<strong>cl_list_end</strong>(\r
+ IN const <a href="#robo390">cl_list_t</a>* const p_list )\r
+{\r
+ CL_ASSERT( p_list );\r
+ CL_ASSERT( <a href="./cl_qpool_h.html#robo615">cl_is_qpool_inited</a>( &p_list->list_item_pool ) );\r
+\r
+ return( <a href="./cl_qlist_h.html#robo560">cl_qlist_end</a>( &p_list->list ) );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_list\r
+ [in] Pointer to a <a href="#robo390">cl_list_t</a> structure for which the iterator for the\r
+ object at the head is to be returned.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> <a href="#robo381">cl_list_iterator_t</a> for the end of the list.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> Use <a href="#robo383">cl_list_obj</a> to retrieve the object associated with the\r
+ returned <a href="#robo381">cl_list_iterator_t</a>.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo15">List</a>, <a href="#robo373">cl_list_head</a>, <a href="#robo391">cl_list_tail</a>, <a href="#robo382">cl_list_next</a>, <a href="#robo384">cl_list_prev</a>,\r
+ <a href="#robo383">cl_list_obj</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo371">[Functions]<a name="Component20Library3a20List2fcl5flist5ffind5ffrom5fhead">\r
+Component Library: List/cl_list_find_from_head</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_list_find_from_head</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_list_find_from_head</strong> function uses a specified function\r
+ to search for an object starting from the head of a list.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT const <a href="#robo381">cl_list_iterator_t</a> CL_API\r
+<strong>cl_list_find_from_head</strong>(\r
+ IN const <a href="#robo390">cl_list_t</a>* const p_list,\r
+ IN <a href="#robo393">cl_pfn_list_find_t</a> pfn_func,\r
+ IN const void* const context );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_list\r
+ [in] Pointer to a <a href="#robo390">cl_list_t</a> structure to search.\r
+\r
+ pfn_func\r
+ [in] Function invoked to determine if a match was found.\r
+ See the <a href="#robo393">cl_pfn_list_find_t</a> function type declaration for details\r
+ about the callback function.\r
+\r
+ context\r
+ [in] Value to pass to the callback functions to provide context.\r
+\r
+ RETURN VALUES\r
+ Returns the iterator for the object if found.\r
+\r
+ Returns the iterator for the list end otherwise.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> <strong>cl_list_find_from_head</strong> does not remove the found object from\r
+ the list. The iterator for the object is returned when the function\r
+ provided by the pfn_func parameter returns CL_SUCCESS. The function\r
+ specified by the pfn_func parameter must not perform any list\r
+ operations as these would corrupt the list.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo15">List</a>, <a href="#robo372">cl_list_find_from_tail</a>, <a href="#robo366">cl_list_apply_func</a>,\r
+ <a href="#robo393">cl_pfn_list_find_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo372">[Functions]<a name="Component20Library3a20List2fcl5flist5ffind5ffrom5ftail">\r
+Component Library: List/cl_list_find_from_tail</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_list_find_from_tail</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_list_find_from_tail</strong> function uses a specified function\r
+ to search for an object starting from the tail of a list.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT const <a href="#robo381">cl_list_iterator_t</a> CL_API\r
+<strong>cl_list_find_from_tail</strong>(\r
+ IN const <a href="#robo390">cl_list_t</a>* const p_list,\r
+ IN <a href="#robo393">cl_pfn_list_find_t</a> pfn_func,\r
+ IN const void* const context );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_list\r
+ [in] Pointer to a <a href="#robo390">cl_list_t</a> structure to search.\r
+\r
+ pfn_func\r
+ [in] Function invoked to determine if a match was found.\r
+ See the <a href="#robo393">cl_pfn_list_find_t</a> function type declaration for details\r
+ about the callback function.\r
+\r
+ context\r
+ [in] Value to pass to the callback functions to provide context.\r
+\r
+ RETURN VALUES\r
+ Returns the iterator for the object if found.\r
+\r
+ Returns the iterator for the list end otherwise.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> <strong>cl_list_find_from_tail</strong> does not remove the found object from\r
+ the list. The iterator for the object is returned when the function\r
+ provided by the pfn_func parameter returns CL_SUCCESS. The function\r
+ specified by the pfn_func parameter must not perform any list\r
+ operations as these would corrupt the list.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo15">List</a>, <a href="#robo371">cl_list_find_from_head</a>, <a href="#robo366">cl_list_apply_func</a>,\r
+ <a href="#robo393">cl_pfn_list_find_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo373">[Functions]<a name="Component20Library3a20List2fcl5flist5fhead">\r
+Component Library: List/cl_list_head</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_list_head</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_list_head</strong> function returns returns a list iterator for\r
+ the head of a list.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_INLINE const <a href="#robo381">cl_list_iterator_t</a> CL_API\r
+<strong>cl_list_head</strong>(\r
+ IN const <a href="#robo390">cl_list_t</a>* const p_list )\r
+{\r
+ CL_ASSERT( p_list );\r
+ CL_ASSERT( <a href="./cl_qpool_h.html#robo615">cl_is_qpool_inited</a>( &p_list->list_item_pool ) );\r
+\r
+ return( <a href="./cl_qlist_h.html#robo565">cl_qlist_head</a>( &p_list->list ) );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_list\r
+ [in] Pointer to a <a href="#robo390">cl_list_t</a> structure for which the iterator for the\r
+ object at the head is to be returned.\r
+\r
+ RETURN VALUES\r
+ <a href="#robo381">cl_list_iterator_t</a> for the head of the list.\r
+\r
+ <a href="#robo381">cl_list_iterator_t</a> for the end of the list if the list is empty.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> Use <a href="#robo383">cl_list_obj</a> to retrieve the object associated with the\r
+ returned <a href="#robo381">cl_list_iterator_t</a>.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo15">List</a>, <a href="#robo391">cl_list_tail</a>, <a href="#robo382">cl_list_next</a>, <a href="#robo384">cl_list_prev</a>, <a href="#robo370">cl_list_end</a>,\r
+ <a href="#robo383">cl_list_obj</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo374">[Functions]<a name="Component20Library3a20List2fcl5flist5finit">\r
+Component Library: List/cl_list_init</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_list_init</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_list_init</strong> function initializes a list for use.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT <a href="./cl_types_h.html#robo304">cl_status_t</a> CL_API\r
+<strong>cl_list_init</strong>(\r
+ IN <a href="#robo390">cl_list_t</a>* const p_list,\r
+ IN const size_t min_items );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_list\r
+ [in] Pointer to <a href="#robo390">cl_list_t</a> structure to initialize.\r
+\r
+ min_items\r
+ [in] Minimum number of items that can be stored. All necessary\r
+ allocations to allow storing the minimum number of items is performed\r
+ at initialization time.\r
+\r
+ RETURN VALUES\r
+ CL_SUCCESS if the list was initialized successfully.\r
+\r
+ CL_INSUFFICIENT_MEMORY if there was not enough memory for initialization.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> The list will always be able to store at least as many items as specified\r
+ by the min_items parameter.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo15">List</a>, <a href="#robo367">cl_list_construct</a>, <a href="#robo369">cl_list_destroy</a>, <a href="#robo377">cl_list_insert_head</a>,\r
+ <a href="#robo380">cl_list_insert_tail</a>, <a href="#robo386">cl_list_remove_head</a>, <a href="#robo389">cl_list_remove_tail</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo375">[Functions]<a name="Component20Library3a20List2fcl5flist5finsert5farray5fhead">\r
+Component Library: List/cl_list_insert_array_head</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_list_insert_array_head</strong>\r
+\r
+ DESCRIPTION:\r
+ The <strong>cl_list_insert_array_head</strong> function inserts an array of objects\r
+ at the head of a list.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT <a href="./cl_types_h.html#robo304">cl_status_t</a> CL_API\r
+<strong>cl_list_insert_array_head</strong>(\r
+ IN <a href="#robo390">cl_list_t</a>* const p_list,\r
+ IN const void* const p_array,\r
+ IN uint32_t item_count,\r
+ IN const uint32_t item_size );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_list\r
+ [in] Pointer to a <a href="#robo390">cl_list_t</a> structure into which to insert the objects.\r
+\r
+ p_array\r
+ [in] Pointer to the first object in an array.\r
+\r
+ item_count\r
+ [in] Number of objects in the array.\r
+\r
+ item_size\r
+ [in] Size of the objects added to the list. This is the stride in the\r
+ array from one object to the next.\r
+\r
+ RETURN VALUES\r
+ CL_SUCCESS if the insertion was successful.\r
+\r
+ CL_INSUFFICIENT_MEMORY if there was not enough memory for the insertion.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> Inserts all objects in the array to the head of the list, preserving the\r
+ ordering of the objects. If not successful, no items are added.\r
+ <a href="#robo15">List</a> insertion operations are guaranteed to work for the minimum number\r
+ of items as specified in <a href="#robo374">cl_list_init</a> by the min_items parameter.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo15">List</a>, <a href="#robo376">cl_list_insert_array_tail</a>, <a href="#robo377">cl_list_insert_head</a>, <a href="#robo380">cl_list_insert_tail</a>,\r
+ <a href="#robo379">cl_list_insert_prev</a>, <a href="#robo378">cl_list_insert_next</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo376">[Functions]<a name="Component20Library3a20List2fcl5flist5finsert5farray5ftail">\r
+Component Library: List/cl_list_insert_array_tail</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_list_insert_array_tail</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_list_insert_array_tail</strong> function inserts an array of objects\r
+ at the tail of a list.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT <a href="./cl_types_h.html#robo304">cl_status_t</a> CL_API\r
+<strong>cl_list_insert_array_tail</strong>(\r
+ IN <a href="#robo390">cl_list_t</a>* const p_list,\r
+ IN const void* const p_array,\r
+ IN uint32_t item_count,\r
+ IN const uint32_t item_size);\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_list\r
+ [in] Pointer to a <a href="#robo390">cl_list_t</a> structure into which to insert the objects.\r
+\r
+ p_array\r
+ [in] Pointer to the first object in an array.\r
+\r
+ item_count\r
+ [in] Number of objects in the array.\r
+\r
+ item_size\r
+ [in] Size of the objects added to the list. This is the stride in the\r
+ array from one object to the next.\r
+\r
+ RETURN VALUES\r
+ CL_SUCCESS if the insertion was successful.\r
+\r
+ CL_INSUFFICIENT_MEMORY if there was not enough memory for the insertion.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> Inserts all objects in the array to the tail of the list, preserving the\r
+ ordering of the objects. If not successful, no items are added.\r
+ <a href="#robo15">List</a> insertion operations are guaranteed to work for the minimum number\r
+ of items as specified in <a href="#robo374">cl_list_init</a> by the min_items parameter.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo15">List</a>, <a href="#robo375">cl_list_insert_array_head</a>, <a href="#robo377">cl_list_insert_head</a>, <a href="#robo380">cl_list_insert_tail</a>,\r
+ <a href="#robo379">cl_list_insert_prev</a>, <a href="#robo378">cl_list_insert_next</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo377">[Functions]<a name="Component20Library3a20List2fcl5flist5finsert5fhead">\r
+Component Library: List/cl_list_insert_head</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_list_insert_head</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_list_insert_head</strong> function inserts an object at the head of a list.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_INLINE <a href="./cl_types_h.html#robo304">cl_status_t</a> CL_API\r
+<strong>cl_list_insert_head</strong>(\r
+ IN <a href="#robo390">cl_list_t</a>* const p_list,\r
+ IN const void* const p_object )\r
+{\r
+ cl_pool_obj_t *p_pool_obj;\r
+\r
+ CL_ASSERT( p_list );\r
+ CL_ASSERT( <a href="./cl_qpool_h.html#robo615">cl_is_qpool_inited</a>( &p_list->list_item_pool ) );\r
+\r
+ /* Get a list item to add to the list. */\r
+ p_pool_obj = (cl_pool_obj_t*)<a href="./cl_qpool_h.html#robo621">cl_qpool_get</a>( &p_list->list_item_pool );\r
+ if( !p_pool_obj )\r
+ return( CL_INSUFFICIENT_MEMORY );\r
+\r
+ p_pool_obj->list_obj.p_object = p_object;\r
+ <a href="./cl_qlist_h.html#robo569">cl_qlist_insert_head</a>( &p_list->list, &p_pool_obj->list_obj.list_item );\r
+ return( CL_SUCCESS );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_list\r
+ [in] Pointer to a <a href="#robo390">cl_list_t</a> structure into which to insert the object.\r
+\r
+ p_object\r
+ [in] Pointer to an object to insert into the list.\r
+\r
+ RETURN VALUES\r
+ CL_SUCCESS if the insertion was successful.\r
+\r
+ CL_INSUFFICIENT_MEMORY if there was not enough memory for the insertion.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> Inserts the specified object at the head of the list. <a href="#robo15">List</a> insertion\r
+ operations are guaranteed to work for the minimum number of items as\r
+ specified in <a href="#robo374">cl_list_init</a> by the min_items parameter.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo15">List</a>, <a href="#robo380">cl_list_insert_tail</a>, <a href="#robo375">cl_list_insert_array_head</a>,\r
+ <a href="#robo376">cl_list_insert_array_tail</a>, <a href="#robo379">cl_list_insert_prev</a>, <a href="#robo378">cl_list_insert_next</a>,\r
+ <a href="#robo386">cl_list_remove_head</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo378">[Functions]<a name="Component20Library3a20List2fcl5flist5finsert5fnext">\r
+Component Library: List/cl_list_insert_next</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_list_insert_next</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_list_insert_next</strong> function inserts an object in a list after\r
+ the object associated with a given iterator.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_INLINE <a href="./cl_types_h.html#robo304">cl_status_t</a> CL_API\r
+<strong>cl_list_insert_next</strong>(\r
+ IN <a href="#robo390">cl_list_t</a>* const p_list,\r
+ IN const <a href="#robo381">cl_list_iterator_t</a> iterator,\r
+ IN const void* const p_object )\r
+{\r
+ cl_pool_obj_t *p_pool_obj;\r
+\r
+ CL_ASSERT( p_list );\r
+ CL_ASSERT( <a href="./cl_qpool_h.html#robo615">cl_is_qpool_inited</a>( &p_list->list_item_pool ) );\r
+\r
+ /* Get a list item to add to the list. */\r
+ p_pool_obj = (cl_pool_obj_t*)<a href="./cl_qpool_h.html#robo621">cl_qpool_get</a>( &p_list->list_item_pool );\r
+ if( !p_pool_obj )\r
+ return( CL_INSUFFICIENT_MEMORY );\r
+\r
+ p_pool_obj->list_obj.p_object = p_object;\r
+ <a href="./cl_qlist_h.html#robo572">cl_qlist_insert_next</a>( &p_list->list, (<a href="./cl_qlist_h.html#robo554">cl_list_item_t</a>*)iterator,\r
+ &p_pool_obj->list_obj.list_item );\r
+ return( CL_SUCCESS );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_list\r
+ [in] Pointer to a <a href="#robo390">cl_list_t</a> structure into which to insert the object.\r
+\r
+ iterator\r
+ [in] <a href="#robo381">cl_list_iterator_t</a> returned by a previous call to <a href="#robo373">cl_list_head</a>,\r
+ <a href="#robo391">cl_list_tail</a>, <a href="#robo382">cl_list_next</a>, or <a href="#robo384">cl_list_prev</a>.\r
+\r
+ p_object\r
+ [in] Pointer to an object to insert into the list.\r
+\r
+ RETURN VALUES\r
+ CL_SUCCESS if the insertion was successful.\r
+\r
+ CL_INSUFFICIENT_MEMORY if there was not enough memory for the insertion.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo15">List</a>, <a href="#robo379">cl_list_insert_prev</a>, <a href="#robo377">cl_list_insert_head</a>, <a href="#robo380">cl_list_insert_tail</a>,\r
+ <a href="#robo375">cl_list_insert_array_head</a>, <a href="#robo376">cl_list_insert_array_tail</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo379">[Functions]<a name="Component20Library3a20List2fcl5flist5finsert5fprev">\r
+Component Library: List/cl_list_insert_prev</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_list_insert_prev</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_list_insert_prev</strong> function inserts an object in a list before\r
+ the object associated with a given iterator.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_INLINE <a href="./cl_types_h.html#robo304">cl_status_t</a> CL_API\r
+<strong>cl_list_insert_prev</strong>(\r
+ IN <a href="#robo390">cl_list_t</a>* const p_list,\r
+ IN const <a href="#robo381">cl_list_iterator_t</a> iterator,\r
+ IN const void* const p_object )\r
+{\r
+ cl_pool_obj_t *p_pool_obj;\r
+\r
+ CL_ASSERT( p_list );\r
+ CL_ASSERT( <a href="./cl_qpool_h.html#robo615">cl_is_qpool_inited</a>( &p_list->list_item_pool ) );\r
+\r
+ /* Get a list item to add to the list. */\r
+ p_pool_obj = (cl_pool_obj_t*)<a href="./cl_qpool_h.html#robo621">cl_qpool_get</a>( &p_list->list_item_pool );\r
+ if( !p_pool_obj )\r
+ return( CL_INSUFFICIENT_MEMORY );\r
+\r
+ p_pool_obj->list_obj.p_object = p_object;\r
+ <a href="./cl_qlist_h.html#robo573">cl_qlist_insert_prev</a>( &p_list->list, (<a href="./cl_qlist_h.html#robo554">cl_list_item_t</a>*)iterator,\r
+ &p_pool_obj->list_obj.list_item );\r
+ return( CL_SUCCESS );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_list\r
+ [in] Pointer to a <a href="#robo390">cl_list_t</a> structure into which to insert the object.\r
+\r
+ iterator\r
+ [in] <a href="#robo381">cl_list_iterator_t</a> returned by a previous call to <a href="#robo373">cl_list_head</a>,\r
+ <a href="#robo391">cl_list_tail</a>, <a href="#robo382">cl_list_next</a>, or <a href="#robo384">cl_list_prev</a>.\r
+\r
+ p_object\r
+ [in] Pointer to an object to insert into the list.\r
+\r
+ RETURN VALUES\r
+ CL_SUCCESS if the insertion was successful.\r
+\r
+ CL_INSUFFICIENT_MEMORY if there was not enough memory for the insertion.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo15">List</a>, <a href="#robo378">cl_list_insert_next</a>, <a href="#robo377">cl_list_insert_head</a>, <a href="#robo380">cl_list_insert_tail</a>,\r
+ <a href="#robo375">cl_list_insert_array_head</a>, <a href="#robo376">cl_list_insert_array_tail</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo380">[Functions]<a name="Component20Library3a20List2fcl5flist5finsert5ftail">\r
+Component Library: List/cl_list_insert_tail</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_list_insert_tail</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_list_insert_tail</strong> function inserts an object at the head of a list.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_INLINE <a href="./cl_types_h.html#robo304">cl_status_t</a> CL_API\r
+<strong>cl_list_insert_tail</strong>(\r
+ IN <a href="#robo390">cl_list_t</a>* const p_list,\r
+ IN const void* const p_object )\r
+{\r
+ cl_pool_obj_t *p_pool_obj;\r
+\r
+ CL_ASSERT( p_list );\r
+ CL_ASSERT( <a href="./cl_qpool_h.html#robo615">cl_is_qpool_inited</a>( &p_list->list_item_pool ) );\r
+\r
+ /* Get a list item to add to the list. */\r
+ p_pool_obj = (cl_pool_obj_t*)<a href="./cl_qpool_h.html#robo621">cl_qpool_get</a>( &p_list->list_item_pool );\r
+ if( !p_pool_obj )\r
+ return( CL_INSUFFICIENT_MEMORY );\r
+\r
+ p_pool_obj->list_obj.p_object = p_object;\r
+ <a href="./cl_qlist_h.html#robo574">cl_qlist_insert_tail</a>( &p_list->list, &p_pool_obj->list_obj.list_item );\r
+ return( CL_SUCCESS );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_list\r
+ [in] Pointer to a <a href="#robo390">cl_list_t</a> structure into which to insert the object.\r
+\r
+ p_object\r
+ [in] Pointer to an object to insert into the list.\r
+\r
+ RETURN VALUES\r
+ CL_SUCCESS if the insertion was successful.\r
+\r
+ CL_INSUFFICIENT_MEMORY if there was not enough memory for the insertion.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> Inserts the specified object at the tail of the list. <a href="#robo15">List</a> insertion\r
+ operations are guaranteed to work for the minimum number of items as\r
+ specified in <a href="#robo374">cl_list_init</a> by the min_items parameter.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo15">List</a>, <a href="#robo377">cl_list_insert_head</a>, <a href="#robo375">cl_list_insert_array_head</a>,\r
+ <a href="#robo376">cl_list_insert_array_tail</a>, <a href="#robo379">cl_list_insert_prev</a>, <a href="#robo378">cl_list_insert_next</a>,\r
+ <a href="#robo389">cl_list_remove_tail</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo381">[Definitions]<a name="Component20Library3a20List2fcl5flist5fiterator5ft">\r
+Component Library: List/cl_list_iterator_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_list_iterator_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Iterator type used to walk a list.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef const <a href="./cl_qlist_h.html#robo554">cl_list_item_t</a> *<strong>cl_list_iterator_t</strong>;\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> The iterator should be treated as opaque to prevent corrupting the list.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo15">List</a>, <a href="#robo373">cl_list_head</a>, <a href="#robo391">cl_list_tail</a>, <a href="#robo382">cl_list_next</a>, <a href="#robo384">cl_list_prev</a>,\r
+ <a href="#robo383">cl_list_obj</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo382">[Functions]<a name="Component20Library3a20List2fcl5flist5fnext">\r
+Component Library: List/cl_list_next</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_list_next</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_list_next</strong> function returns a list iterator for the object stored\r
+ in a list after the object associated with a given list iterator.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_INLINE const <a href="#robo381">cl_list_iterator_t</a> CL_API\r
+<strong>cl_list_next</strong>(\r
+ IN const <a href="#robo381">cl_list_iterator_t</a> iterator )\r
+{\r
+ CL_ASSERT( iterator );\r
+\r
+ return( <a href="./cl_qlist_h.html#robo576">cl_qlist_next</a>( iterator ) );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_list\r
+ [in] Pointer to a <a href="#robo390">cl_list_t</a> structure for which the iterator for the\r
+ next object is to be returned.\r
+\r
+ iterator\r
+ [in] <a href="#robo381">cl_list_iterator_t</a> returned by a previous call to <a href="#robo373">cl_list_head</a>,\r
+ <a href="#robo391">cl_list_tail</a>, <strong>cl_list_next</strong>, or <a href="#robo384">cl_list_prev</a>.\r
+\r
+ RETURN VALUES\r
+ <a href="#robo381">cl_list_iterator_t</a> for the object following the object associated with\r
+ the list iterator specified by the iterator parameter.\r
+\r
+ <a href="#robo381">cl_list_iterator_t</a> for the end of the list if the list is empty.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> Use <a href="#robo383">cl_list_obj</a> to retrieve the object associated with the\r
+ returned <a href="#robo381">cl_list_iterator_t</a>.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo15">List</a>, <a href="#robo384">cl_list_prev</a>, <a href="#robo373">cl_list_head</a>, <a href="#robo391">cl_list_tail</a>, <a href="#robo370">cl_list_end</a>,\r
+ <a href="#robo383">cl_list_obj</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo383">[Functions]<a name="Component20Library3a20List2fcl5flist5fobj">\r
+Component Library: List/cl_list_obj</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_list_obj</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_list_obj</strong> function returns the object associated\r
+ with a list iterator.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_INLINE void* CL_API\r
+<strong>cl_list_obj</strong>(\r
+ IN const <a href="#robo381">cl_list_iterator_t</a> iterator )\r
+{\r
+ CL_ASSERT( iterator );\r
+\r
+ return( (void*)((cl_pool_obj_t*)iterator)->list_obj.p_object );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> iterator\r
+ [in] <a href="#robo381">cl_list_iterator_t</a> returned by a previous call to <a href="#robo373">cl_list_head</a>,\r
+ <a href="#robo391">cl_list_tail</a>, <a href="#robo382">cl_list_next</a>, or <a href="#robo384">cl_list_prev</a> whose object is requested.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> Pointer to the object associated with the list iterator specified\r
+ by the iterator parameter.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo15">List</a>, <a href="#robo373">cl_list_head</a>, <a href="#robo391">cl_list_tail</a>, <a href="#robo382">cl_list_next</a>, <a href="#robo384">cl_list_prev</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo384">[Functions]<a name="Component20Library3a20List2fcl5flist5fprev">\r
+Component Library: List/cl_list_prev</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_list_prev</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_list_prev</strong> function returns a list iterator for the object stored\r
+ in a list before the object associated with a given list iterator.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_INLINE const <a href="#robo381">cl_list_iterator_t</a> CL_API\r
+<strong>cl_list_prev</strong>(\r
+ IN const <a href="#robo381">cl_list_iterator_t</a> iterator )\r
+{\r
+ CL_ASSERT( iterator );\r
+\r
+ return( <a href="./cl_qlist_h.html#robo578">cl_qlist_prev</a>( iterator ) );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_list\r
+ [in] Pointer to a <a href="#robo390">cl_list_t</a> structure for which the iterator for the\r
+ next object is to be returned.\r
+\r
+ iterator\r
+ [in] <a href="#robo381">cl_list_iterator_t</a> returned by a previous call to <a href="#robo373">cl_list_head</a>,\r
+ <a href="#robo391">cl_list_tail</a>, <a href="#robo382">cl_list_next</a>, or <strong>cl_list_prev</strong>.\r
+\r
+ RETURN VALUES\r
+ <a href="#robo381">cl_list_iterator_t</a> for the object preceding the object associated with\r
+ the list iterator specified by the iterator parameter.\r
+\r
+ <a href="#robo381">cl_list_iterator_t</a> for the end of the list if the list is empty.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> Use <a href="#robo383">cl_list_obj</a> to retrieve the object associated with the\r
+ returned <a href="#robo381">cl_list_iterator_t</a>.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo15">List</a>, <a href="#robo382">cl_list_next</a>, <a href="#robo373">cl_list_head</a>, <a href="#robo391">cl_list_tail</a>, <a href="#robo370">cl_list_end</a>,\r
+ <a href="#robo383">cl_list_obj</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo385">[Functions]<a name="Component20Library3a20List2fcl5flist5fremove5fall">\r
+Component Library: List/cl_list_remove_all</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_list_remove_all</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_list_remove_all</strong> function removes all objects from a list,\r
+ leaving it empty.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_INLINE void CL_API\r
+<strong>cl_list_remove_all</strong>(\r
+ IN <a href="#robo390">cl_list_t</a>* const p_list )\r
+{\r
+ CL_ASSERT( p_list );\r
+ CL_ASSERT( <a href="./cl_qpool_h.html#robo615">cl_is_qpool_inited</a>( &p_list->list_item_pool ) );\r
+\r
+ /* Return all the list items to the pool. */\r
+ <a href="./cl_qpool_h.html#robo625">cl_qpool_put_list</a>( &p_list->list_item_pool, &p_list->list );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_list\r
+ [in] Pointer to a <a href="#robo390">cl_list_t</a> structure from which to remove all objects.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> This function does not return a value.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo15">List</a>, <a href="#robo386">cl_list_remove_head</a>, <a href="#robo389">cl_list_remove_tail</a>, <a href="#robo388">cl_list_remove_object</a>,\r
+ <a href="#robo387">cl_list_remove_item</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo386">[Functions]<a name="Component20Library3a20List2fcl5flist5fremove5fhead">\r
+Component Library: List/cl_list_remove_head</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_list_remove_head</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_list_remove_head</strong> function removes an object from the head of a list.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_INLINE void* CL_API\r
+<strong>cl_list_remove_head</strong>(\r
+ IN <a href="#robo390">cl_list_t</a>* const p_list )\r
+{\r
+ cl_pool_obj_t *p_pool_obj;\r
+\r
+ CL_ASSERT( p_list );\r
+ CL_ASSERT( <a href="./cl_qpool_h.html#robo615">cl_is_qpool_inited</a>( &p_list->list_item_pool ) );\r
+\r
+ /* See if the list is empty. */\r
+ if( <a href="./cl_qlist_h.html#robo553">cl_is_qlist_empty</a>( &p_list->list ) )\r
+ return( NULL );\r
+\r
+ /* Get the item at the head of the list. */\r
+ p_pool_obj = (cl_pool_obj_t*)<a href="./cl_qlist_h.html#robo580">cl_qlist_remove_head</a>( &p_list->list );\r
+\r
+ /* Place the pool item back into the pool. */\r
+ <a href="./cl_qpool_h.html#robo624">cl_qpool_put</a>( &p_list->list_item_pool, (<a href="./cl_qcomppool_h.html#robo542">cl_pool_item_t</a>*)p_pool_obj );\r
+\r
+ return( (void*)p_pool_obj->list_obj.p_object );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_list\r
+ [in] Pointer to a <a href="#robo390">cl_list_t</a> structure from which to remove an object.\r
+\r
+ RETURN VALUES\r
+ Returns the pointer to the object formerly at the head of the list.\r
+\r
+ NULL if the list was empty.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo15">List</a>, <a href="#robo389">cl_list_remove_tail</a>, <a href="#robo385">cl_list_remove_all</a>, <a href="#robo388">cl_list_remove_object</a>,\r
+ <a href="#robo387">cl_list_remove_item</a>, <a href="#robo377">cl_list_insert_head</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo387">[Functions]<a name="Component20Library3a20List2fcl5flist5fremove5fitem">\r
+Component Library: List/cl_list_remove_item</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_list_remove_item</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_list_remove_item</strong> function removes an object from the head of a list.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_INLINE void CL_API\r
+<strong>cl_list_remove_item</strong>(\r
+ IN <a href="#robo390">cl_list_t</a>* const p_list,\r
+ IN const <a href="#robo381">cl_list_iterator_t</a> iterator )\r
+{\r
+ CL_ASSERT( p_list );\r
+ CL_ASSERT( <a href="./cl_qpool_h.html#robo615">cl_is_qpool_inited</a>( &p_list->list_item_pool ) );\r
+\r
+ <a href="./cl_qlist_h.html#robo581">cl_qlist_remove_item</a>( &p_list->list, (<a href="./cl_qlist_h.html#robo554">cl_list_item_t</a>*)iterator );\r
+\r
+ /* Place the list item back into the pool. */\r
+ <a href="./cl_qpool_h.html#robo624">cl_qpool_put</a>( &p_list->list_item_pool, (<a href="./cl_qcomppool_h.html#robo542">cl_pool_item_t</a>*)iterator );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_list\r
+ [in] Pointer to a <a href="#robo390">cl_list_t</a> structure from which to remove the item.\r
+\r
+ iterator\r
+ [in] <a href="#robo381">cl_list_iterator_t</a> returned by a previous call to <a href="#robo373">cl_list_head</a>,\r
+ <a href="#robo391">cl_list_tail</a>, <a href="#robo382">cl_list_next</a>, or <a href="#robo384">cl_list_prev</a>.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> This function does not return a value.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo15">List</a>, <a href="#robo388">cl_list_remove_object</a>, <a href="#robo386">cl_list_remove_head</a>, <a href="#robo389">cl_list_remove_tail</a>,\r
+ <a href="#robo385">cl_list_remove_all</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo388">[Functions]<a name="Component20Library3a20List2fcl5flist5fremove5fobject">\r
+Component Library: List/cl_list_remove_object</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_list_remove_object</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_list_remove_object</strong> function removes a specific object from a list.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT <a href="./cl_types_h.html#robo304">cl_status_t</a> CL_API\r
+<strong>cl_list_remove_object</strong>(\r
+ IN <a href="#robo390">cl_list_t</a>* const p_list,\r
+ IN const void* const p_object );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_list\r
+ [in] Pointer to a <a href="#robo390">cl_list_t</a> structure from which to remove the object.\r
+\r
+ p_object\r
+ [in] Pointer to an object to remove from the list.\r
+\r
+ RETURN VALUES\r
+ CL_SUCCESS if the object was removed.\r
+\r
+ CL_NOT_FOUND if the object was not found in the list.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> Removes the first occurrence of an object from a list.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo15">List</a>, <a href="#robo387">cl_list_remove_item</a>, <a href="#robo386">cl_list_remove_head</a>, <a href="#robo389">cl_list_remove_tail</a>,\r
+ <a href="#robo385">cl_list_remove_all</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo389">[Functions]<a name="Component20Library3a20List2fcl5flist5fremove5ftail">\r
+Component Library: List/cl_list_remove_tail</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_list_remove_tail</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_list_remove_tail</strong> function removes an object from the tail of a list.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_INLINE void* CL_API\r
+<strong>cl_list_remove_tail</strong>(\r
+ IN <a href="#robo390">cl_list_t</a>* const p_list )\r
+{\r
+ cl_pool_obj_t *p_pool_obj;\r
+\r
+ CL_ASSERT( p_list );\r
+ CL_ASSERT( <a href="./cl_qpool_h.html#robo615">cl_is_qpool_inited</a>( &p_list->list_item_pool ) );\r
+\r
+ /* See if the list is empty. */\r
+ if( <a href="./cl_qlist_h.html#robo553">cl_is_qlist_empty</a>( &p_list->list ) )\r
+ return( NULL );\r
+\r
+ /* Get the item at the head of the list. */\r
+ p_pool_obj = (cl_pool_obj_t*)<a href="./cl_qlist_h.html#robo582">cl_qlist_remove_tail</a>( &p_list->list );\r
+\r
+ /* Place the list item back into the pool. */\r
+ <a href="./cl_qpool_h.html#robo624">cl_qpool_put</a>( &p_list->list_item_pool, (<a href="./cl_qcomppool_h.html#robo542">cl_pool_item_t</a>*)p_pool_obj );\r
+\r
+ return( (void*)p_pool_obj->list_obj.p_object );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_list\r
+ [in] Pointer to a <a href="#robo390">cl_list_t</a> structure from which to remove an object.\r
+\r
+ RETURN VALUES\r
+ Returns the pointer to the object formerly at the tail of the list.\r
+\r
+ NULL if the list was empty.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo15">List</a>, <a href="#robo386">cl_list_remove_head</a>, <a href="#robo385">cl_list_remove_all</a>, <a href="#robo388">cl_list_remove_object</a>,\r
+ <a href="#robo387">cl_list_remove_item</a>, <a href="#robo377">cl_list_insert_head</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo390">[Structures]<a name="Component20Library3a20List2fcl5flist5ft">\r
+Component Library: List/cl_list_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_list_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> <a href="#robo15">List</a> structure.\r
+\r
+ The <strong>cl_list_t</strong> structure should be treated as opaque and should be\r
+ manipulated only through the provided functions.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef struct _cl_list\r
+{\r
+ <a href="./cl_qlist_h.html#robo584">cl_qlist_t</a> list;\r
+ <a href="./cl_qpool_h.html#robo626">cl_qpool_t</a> list_item_pool;\r
+\r
+} <strong>cl_list_t</strong>;\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> list\r
+ Quick list of items stored in the list.\r
+\r
+ list_item_pool\r
+ Quick pool of list objects for storing objects in the quick list.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo15">List</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo391">[Functions]<a name="Component20Library3a20List2fcl5flist5ftail">\r
+Component Library: List/cl_list_tail</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_list_tail</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_list_tail</strong> function returns returns a list iterator for\r
+ the tail of a list.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_INLINE const <a href="#robo381">cl_list_iterator_t</a> CL_API\r
+<strong>cl_list_tail</strong>(\r
+ IN const <a href="#robo390">cl_list_t</a>* const p_list )\r
+{\r
+ CL_ASSERT( p_list );\r
+ CL_ASSERT( <a href="./cl_qpool_h.html#robo615">cl_is_qpool_inited</a>( &p_list->list_item_pool ) );\r
+\r
+ return( <a href="./cl_qlist_h.html#robo585">cl_qlist_tail</a>( &p_list->list ) );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_list\r
+ [in] Pointer to a <a href="#robo390">cl_list_t</a> structure for which the iterator for the\r
+ object at the tail is to be returned.\r
+\r
+ RETURN VALUES\r
+ <a href="#robo381">cl_list_iterator_t</a> for the tail of the list.\r
+\r
+ <a href="#robo381">cl_list_iterator_t</a> for the end of the list if the list is empty.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> Use <a href="#robo383">cl_list_obj</a> to retrieve the object associated with the\r
+\r
+ returned <a href="#robo381">cl_list_iterator_t</a>.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo15">List</a>, <a href="#robo373">cl_list_head</a>, <a href="#robo382">cl_list_next</a>, <a href="#robo384">cl_list_prev</a>, <a href="#robo370">cl_list_end</a>,\r
+ <a href="#robo383">cl_list_obj</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo392">[Definitions]<a name="Component20Library3a20List2fcl5fpfn5flist5fapply5ft">\r
+Component Library: List/cl_pfn_list_apply_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_pfn_list_apply_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_pfn_list_apply_t</strong> function type defines the prototype for functions\r
+ used to iterate objects in a list.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef void\r
+(CL_API *<strong>cl_pfn_list_apply_t</strong>)(\r
+ IN void* const p_object,\r
+ IN void* context );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_object\r
+ [in] Pointer to an object stored in a list.\r
+\r
+ context\r
+ [in] Context provided in a call to <a href="#robo366">cl_list_apply_func</a>.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> This function does not return a value.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This function type is provided as function prototype reference for the\r
+ function provided by users as a parameter to the <a href="#robo366">cl_list_apply_func</a>\r
+ function.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo15">List</a>, <a href="#robo366">cl_list_apply_func</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo393">[Definitions]<a name="Component20Library3a20List2fcl5fpfn5flist5ffind5ft">\r
+Component Library: List/cl_pfn_list_find_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_pfn_list_find_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_pfn_list_find_t</strong> function type defines the prototype for functions\r
+ used to find objects in a list.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef <a href="./cl_types_h.html#robo304">cl_status_t</a>\r
+(CL_API *<strong>cl_pfn_list_find_t</strong>)(\r
+ IN const void* const p_object,\r
+ IN void* context );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_object\r
+ [in] Pointer to an object stored in a list.\r
+\r
+ context\r
+ [in] Context provided in a call to ListFindFromHead or ListFindFromTail.\r
+\r
+ RETURN VALUES\r
+ Return CL_SUCCESS if the desired item was found. This stops list iteration.\r
+\r
+ Return CL_NOT_FOUND to continue the list iteration.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This function type is provided as function prototype reference for the\r
+ function provided by users as a parameter to the <a href="#robo371">cl_list_find_from_head</a>\r
+ and <a href="#robo372">cl_list_find_from_tail</a> functions.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo15">List</a>, <a href="#robo371">cl_list_find_from_head</a>, <a href="#robo372">cl_list_find_from_tail</a>\r
+</pre>\r
+</span>\r
+</body>\r
+</html>\r
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">\r
+<html>\r
+<head>\r
+<link rel="stylesheet" href="../robodoc.css" type="text/css">\r
+<title>./inc_doc/complib/cl_log_h.html</title>\r
+<!-- Source: ./inc/complib/cl_log.h -->\r
+<!-- Generated with ROBODoc Version 4.99.22 (Mar 6 2006) -->\r
+</head>\r
+<body bgcolor="#FFFFFF">\r
+<a name="robo_top_of_doc">Generated from ./inc/complib/cl_log.h</a> with <a href="http://sourceforge.net/projects/robodoc/">ROBODoc</a> v4.99.22 on Sun Apr 16 2006 17:39:25\r
+<br />\r
+<hr />\r
+\r
+<h2><a name="robo16">[Modules]<a name="Component20Library2fLog20Provider">\r
+Component Library/Log Provider</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_modules.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> Log Provider\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The log provider allows users to log information in a system log instead of\r
+ the console or debugger target.\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo394">[Functions]<a name="Component20Library3a20Log20Provider2fcl5flog5fevent">\r
+Component Library: Log Provider/cl_log_event</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_log_event</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_log_event</strong> function adds a new entry to the system log.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT void CL_API\r
+<strong>cl_log_event</strong>(\r
+ IN const char* const name,\r
+ IN const <a href="#robo395">cl_log_type_t</a> type,\r
+ IN const char* const message,\r
+ IN const void* const p_data OPTIONAL,\r
+ IN const uint32_t data_len );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> name\r
+ [in] Pointer to an ANSI string containing the name of the source for\r
+ the log entry.\r
+\r
+ type\r
+ [in] Defines the type of log entry to add to the system log.\r
+ See the definition of <a href="#robo395">cl_log_type_t</a> for acceptable values.\r
+\r
+ message\r
+ [in] Pointer to an ANSI string containing the text for the log entry.\r
+ The message should not be terminated with a new line, as the log\r
+ provider appends a new line to all log entries.\r
+\r
+ p_data\r
+ [in] Optional pointer to data providing context for the log entry.\r
+ At most 256 bytes of data can be successfully logged.\r
+\r
+ data_len\r
+ [in] Length of the buffer pointed to by the p_data parameter. Ignored\r
+ if p_data is NULL.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> This function does not return a value.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> If the data length exceeds the maximum supported, the event is logged\r
+ without its accompanying data.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Log Provider, <a href="#robo395">cl_log_type_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo395">[Definitions]<a name="Component20Library3a20Log20Provider2fcl5flog5ftype5ft">\r
+Component Library: Log Provider/cl_log_type_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_log_type_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_log_type_t</strong> enumerated type is used to differentiate between\r
+ different types of log entries.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef enum _cl_log_type\r
+{\r
+ CL_LOG_INFO,\r
+ CL_LOG_WARN,\r
+ CL_LOG_ERROR\r
+\r
+} <strong>cl_log_type_t</strong>;\r
+</pre>\r
+</span><p><strong>VALUES</strong></p>\r
+<span class="VALUES"><pre> CL_LOG_INFO\r
+ Indicates a log entry is purely informational.\r
+\r
+ CL_LOG_WARN\r
+ Indicates a log entry is a warning but non-fatal.\r
+\r
+ CL_LOG_ERROR\r
+ Indicates a log entry is a fatal error.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Log Provider, <a href="#robo394">cl_log_event</a>\r
+</pre>\r
+</span>\r
+</body>\r
+</html>\r
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">\r
+<html>\r
+<head>\r
+<link rel="stylesheet" href="../robodoc.css" type="text/css">\r
+<title>./inc_doc/complib/cl_map_h.html</title>\r
+<!-- Source: ./inc/complib/cl_map.h -->\r
+<!-- Generated with ROBODoc Version 4.99.22 (Mar 6 2006) -->\r
+</head>\r
+<body bgcolor="#FFFFFF">\r
+<a name="robo_top_of_doc">Generated from ./inc/complib/cl_map.h</a> with <a href="http://sourceforge.net/projects/robodoc/">ROBODoc</a> v4.99.22 on Sun Apr 16 2006 17:39:25\r
+<br />\r
+<hr />\r
+\r
+<h2><a name="robo17">[Modules]<a name="Component20Library2fMap">\r
+Component Library/Map</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_modules.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>Map</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> <strong>Map</strong> implements a binary tree that stores user objects. Each item stored\r
+ in a map has a unique 64-bit key (duplicates are not allowed). <strong>Map</strong>\r
+ provides the ability to efficiently search for an item given a key.\r
+\r
+ <strong>Map</strong> may allocate memory when inserting objects, and can therefore fail\r
+ operations due to insufficient memory. Use quick map in situations where\r
+ such insertion failures cannot be tolerated.\r
+\r
+ <strong>Map</strong> is not thread safe, and users must provide serialization when adding\r
+ and removing items from the map.\r
+\r
+ The map functions operates on a <a href="#robo415">cl_map_t</a> structure which should be treated\r
+ as opaque and should be manipulated only through the provided functions.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Types:\r
+ <a href="#robo406">cl_map_iterator_t</a>\r
+\r
+ Structures:\r
+ <a href="#robo415">cl_map_t</a>, <a href="./cl_qmap_h.html#robo593">cl_map_item_t</a>, <a href="./cl_qmap_h.html#robo594">cl_map_obj_t</a>\r
+\r
+ Item Manipulation:\r
+ <a href="#robo410">cl_map_obj</a>, <a href="#robo407">cl_map_key</a>\r
+\r
+ Initialization:\r
+ <a href="#robo397">cl_map_construct</a>, <a href="#robo404">cl_map_init</a>, <a href="#robo400">cl_map_destroy</a>\r
+\r
+ Iteration:\r
+ <a href="#robo401">cl_map_end</a>, <a href="#robo403">cl_map_head</a>, <a href="#robo416">cl_map_tail</a>, <a href="#robo409">cl_map_next</a>, <a href="#robo411">cl_map_prev</a>\r
+\r
+ Manipulation\r
+ <a href="#robo405">cl_map_insert</a>, <a href="#robo402">cl_map_get</a>, <a href="#robo414">cl_map_remove_item</a>, <a href="#robo412">cl_map_remove</a>,\r
+ <a href="#robo413">cl_map_remove_all</a>, <a href="#robo408">cl_map_merge</a>, <a href="#robo399">cl_map_delta</a>\r
+\r
+ Attributes:\r
+ <a href="#robo398">cl_map_count</a>, <a href="#robo396">cl_is_map_empty</a>, <a href="#robo322">cl_is_map_inited</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo322">[Functions]<a name="Component20Library3a20Event2fcl5fis5fmap5finited">\r
+Component Library: Event/cl_is_map_inited</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_is_map_inited</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_is_map_inited</strong> function returns whether a map was\r
+ successfully initialized.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_INLINE boolean_t CL_API\r
+<strong>cl_is_map_inited</strong>(\r
+ IN const <a href="#robo415">cl_map_t</a>* const p_map )\r
+{\r
+ /*\r
+ * The map's pool of map items is the last thing initialized.\r
+ * We can therefore use it to test for initialization.\r
+ */\r
+ return( <a href="./cl_qpool_h.html#robo615">cl_is_qpool_inited</a>( &p_map->pool ) );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_map\r
+ [in] Pointer to a <a href="#robo415">cl_map_t</a> structure whose initialization state\r
+ to check.\r
+\r
+ RETURN VALUES\r
+ TRUE if the map was initialized successfully.\r
+\r
+ FALSE otherwise.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> Allows checking the state of a map to determine if invoking\r
+ member functions is appropriate.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo17">Map</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo396">[Functions]<a name="Component20Library3a20Map2fcl5fis5fmap5fempty">\r
+Component Library: Map/cl_is_map_empty</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_is_map_empty</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_is_map_empty</strong> function returns whether a map is empty.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_INLINE boolean_t CL_API\r
+<strong>cl_is_map_empty</strong>(\r
+ IN const <a href="#robo415">cl_map_t</a>* const p_map )\r
+{\r
+ CL_ASSERT( p_map );\r
+ return( <a href="./cl_qmap_h.html#robo592">cl_is_qmap_empty</a>( &p_map->qmap ) );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_map\r
+ [in] Pointer to a map to test for emptiness.\r
+\r
+ RETURN VALUES\r
+ TRUE if the map is empty.\r
+\r
+ FALSE otherwise.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo17">Map</a>, <a href="#robo398">cl_map_count</a>, <a href="#robo413">cl_map_remove_all</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo397">[Functions]<a name="Component20Library3a20Map2fcl5fmap5fconstruct">\r
+Component Library: Map/cl_map_construct</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_map_construct</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_map_construct</strong> function constructs a map.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT void CL_API\r
+<strong>cl_map_construct</strong>(\r
+ IN <a href="#robo415">cl_map_t</a>* const p_map );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_map\r
+ [in] Pointer to a <a href="#robo415">cl_map_t</a> structure to construct.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> This function does not return a value.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> Allows calling <a href="#robo404">cl_map_init</a>, <a href="#robo400">cl_map_destroy</a>, and <a href="#robo322">cl_is_map_inited</a>.\r
+\r
+ Calling <strong>cl_map_construct</strong> is a prerequisite to calling any other\r
+ map function except <a href="#robo404">cl_map_init</a>.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo17">Map</a>, <a href="#robo404">cl_map_init</a>, <a href="#robo400">cl_map_destroy</a>, <a href="#robo322">cl_is_map_inited</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo398">[Functions]<a name="Component20Library3a20Map2fcl5fmap5fcount">\r
+Component Library: Map/cl_map_count</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_map_count</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_map_count</strong> function returns the number of items stored\r
+ in a map.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_INLINE size_t CL_API\r
+<strong>cl_map_count</strong>(\r
+ IN const <a href="#robo415">cl_map_t</a>* const p_map )\r
+{\r
+ CL_ASSERT( p_map );\r
+ return( <a href="./cl_qmap_h.html#robo597">cl_qmap_count</a>( &p_map->qmap ) );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_map\r
+ [in] Pointer to a map whose item count to return.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> Returns the number of items stored in the map.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo17">Map</a>, <a href="#robo396">cl_is_map_empty</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo399">[Functions]<a name="Component20Library3a20Map2fcl5fmap5fdelta">\r
+Component Library: Map/cl_map_delta</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_map_delta</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_map_delta</strong> function computes the differences between two maps.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT <a href="./cl_types_h.html#robo304">cl_status_t</a> CL_API\r
+<strong>cl_map_delta</strong>(\r
+ IN OUT <a href="#robo415">cl_map_t</a>* const p_map1,\r
+ IN OUT <a href="#robo415">cl_map_t</a>* const p_map2,\r
+ OUT <a href="#robo415">cl_map_t</a>* const p_new,\r
+ OUT <a href="#robo415">cl_map_t</a>* const p_old );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_map1\r
+ [in/out] Pointer to the first of two <a href="#robo415">cl_map_t</a> structures whose\r
+ differences to compute.\r
+\r
+ p_map2\r
+ [in/out] Pointer to the second of two <a href="#robo415">cl_map_t</a> structures whose\r
+ differences to compute.\r
+\r
+ p_new\r
+ [out] Pointer to an empty <a href="#robo415">cl_map_t</a> structure that contains the items\r
+ unique to p_map2 upon return from the function.\r
+\r
+ p_old\r
+ [out] Pointer to an empty <a href="#robo415">cl_map_t</a> structure that contains the items\r
+ unique to p_map1 upon return from the function.\r
+\r
+ RETURN VALUES\r
+ CL_SUCCESS if the operation succeeded.\r
+\r
+ CL_INSUFFICIENT_MEMORY if there was not enough memory for the operation\r
+ to succeed.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> Items are evaluated based on their keys. Items that exist in both\r
+ p_map1 and p_map2 remain in their respective maps. Items that\r
+ exist only p_map1 are moved to p_old. Likewise, items that exist only\r
+ in p_map2 are moved to p_new. This function can be usefull in evaluating\r
+ changes between two maps.\r
+\r
+ Both maps pointed to by p_new and p_old must be empty on input.\r
+\r
+ Upon failure, all input maps are restored to their original state.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo17">Map</a>, <a href="#robo408">cl_map_merge</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo400">[Functions]<a name="Component20Library3a20Map2fcl5fmap5fdestroy">\r
+Component Library: Map/cl_map_destroy</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_map_destroy</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_map_destroy</strong> function destroys a map.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT void CL_API\r
+<strong>cl_map_destroy</strong>(\r
+ IN <a href="#robo415">cl_map_t</a>* const p_map );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_map\r
+ [in] Pointer to a map to destroy.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> This function does not return a value.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> Performs any necessary cleanup of the specified map. Further\r
+ operations should not be attempted on the map. <strong>cl_map_destroy</strong> does\r
+ not affect any of the objects stored in the map.\r
+ This function should only be called after a call to <a href="#robo397">cl_map_construct</a>.\r
+\r
+ In debug builds, <strong>cl_map_destroy</strong> asserts that the map is empty.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo17">Map</a>, <a href="#robo397">cl_map_construct</a>, <a href="#robo404">cl_map_init</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo401">[Functions]<a name="Component20Library3a20Map2fcl5fmap5fend">\r
+Component Library: Map/cl_map_end</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_map_end</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_map_end</strong> function returns the iterator for the end of a map.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_INLINE const <a href="#robo406">cl_map_iterator_t</a> CL_API\r
+<strong>cl_map_end</strong>(\r
+ IN const <a href="#robo415">cl_map_t</a>* const p_map )\r
+{\r
+ CL_ASSERT( p_map );\r
+ return( <a href="./cl_qmap_h.html#robo599">cl_qmap_end</a>( &p_map->qmap ) );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_map\r
+ [in] Pointer to a <a href="#robo415">cl_map_t</a> structure whose end to return.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> Iterator for the end of the map.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> <strong>cl_map_end</strong> is useful for determining the validity of map items returned\r
+ by <a href="#robo403">cl_map_head</a>, <a href="#robo416">cl_map_tail</a>, <a href="#robo409">cl_map_next</a>, <a href="#robo411">cl_map_prev</a>. If the iterator\r
+ by any of these functions compares to the end, the end of the map was\r
+ encoutered.\r
+ When using <a href="#robo403">cl_map_head</a> or <a href="#robo416">cl_map_tail</a>, this condition indicates that\r
+ the map is empty.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo17">Map</a>, <a href="./cl_qmap_h.html#robo601">cl_qmap_head</a>, <a href="./cl_qmap_h.html#robo614">cl_qmap_tail</a>, <a href="./cl_qmap_h.html#robo606">cl_qmap_next</a>, <a href="./cl_qmap_h.html#robo608">cl_qmap_prev</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo402">[Functions]<a name="Component20Library3a20Map2fcl5fmap5fget">\r
+Component Library: Map/cl_map_get</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_map_get</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_map_get</strong> function returns the object associated with a key.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT void* CL_API\r
+<strong>cl_map_get</strong>(\r
+ IN const <a href="#robo415">cl_map_t</a>* const p_map,\r
+ IN const uint64_t key );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_map\r
+ [in] Pointer to a map from which to retrieve the object with\r
+ the specified key.\r
+\r
+ key\r
+ [in] Key value used to search for the desired object.\r
+\r
+ RETURN VALUES\r
+ Pointer to the object with the desired key value.\r
+\r
+ NULL if there was no item with the desired key value stored in\r
+ the map.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> <strong>cl_map_get</strong> does not remove the item from the map.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo17">Map</a>, <a href="#robo412">cl_map_remove</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo403">[Functions]<a name="Component20Library3a20Map2fcl5fmap5fhead">\r
+Component Library: Map/cl_map_head</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_map_head</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_map_head</strong> function returns the map item with the lowest key\r
+ value stored in a map.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_INLINE <a href="#robo406">cl_map_iterator_t</a> CL_API\r
+<strong>cl_map_head</strong>(\r
+ IN const <a href="#robo415">cl_map_t</a>* const p_map )\r
+{\r
+ CL_ASSERT( p_map );\r
+ return( <a href="./cl_qmap_h.html#robo601">cl_qmap_head</a>( &p_map->qmap ) );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_map\r
+ [in] Pointer to a map whose item with the lowest key is returned.\r
+\r
+ RETURN VALUES\r
+ Iterator for the object with the lowest key in the map.\r
+\r
+ Iterator for the map end if the map was empty.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> <strong>cl_map_head</strong> does not remove the object from the map.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo17">Map</a>, <a href="#robo416">cl_map_tail</a>, <a href="#robo409">cl_map_next</a>, <a href="#robo411">cl_map_prev</a>, <a href="#robo401">cl_map_end</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo404">[Functions]<a name="Component20Library3a20Map2fcl5fmap5finit">\r
+Component Library: Map/cl_map_init</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_map_init</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_map_init</strong> function initialized a map for use.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT <a href="./cl_types_h.html#robo304">cl_status_t</a> CL_API\r
+<strong>cl_map_init</strong>(\r
+ IN <a href="#robo415">cl_map_t</a>* const p_map,\r
+ IN const size_t min_items );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_map\r
+ [in] Pointer to a <a href="#robo415">cl_map_t</a> structure to initialize.\r
+\r
+ min_items\r
+ [in] Minimum number of items that can be stored. All necessary\r
+ allocations to allow storing the minimum number of items is performed\r
+ at initialization time.\r
+\r
+ RETURN VALUES\r
+ CL_SUCCESS if the map was initialized successfully.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> Allows calling map manipulation functions.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo17">Map</a>, <a href="#robo400">cl_map_destroy</a>, <a href="#robo405">cl_map_insert</a>, <a href="#robo412">cl_map_remove</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo405">[Functions]<a name="Component20Library3a20Map2fcl5fmap5finsert">\r
+Component Library: Map/cl_map_insert</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_map_insert</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_map_insert</strong> function inserts a map item into a map.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT void* CL_API\r
+<strong>cl_map_insert</strong>(\r
+ IN <a href="#robo415">cl_map_t</a>* const p_map,\r
+ IN const uint64_t key,\r
+ IN const void* const p_object );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_map\r
+ [in] Pointer to a map into which to add the item.\r
+\r
+ key\r
+ [in] Value to associate with the object.\r
+\r
+ p_object\r
+ [in] Pointer to an object to insert into the map.\r
+\r
+ RETURN VALUES\r
+ Pointer to the object in the map with the specified key after the call\r
+ completes.\r
+\r
+ NULL if there was not enough memory to insert the desired item.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> Insertion operations may cause the map to rebalance.\r
+\r
+ If the map already contains an object already with the specified key,\r
+ that object will not be replaced and the pointer to that object is\r
+ returned.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo17">Map</a>, <a href="#robo412">cl_map_remove</a>, <a href="./cl_qmap_h.html#robo593">cl_map_item_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo406">[Definitions]<a name="Component20Library3a20Map2fcl5fmap5fiterator5ft">\r
+Component Library: Map/cl_map_iterator_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_map_iterator_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Iterator type used to walk a map.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef const <a href="./cl_qmap_h.html#robo593">cl_map_item_t</a> *<strong>cl_map_iterator_t</strong>;\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> The iterator should be treated as opaque to prevent corrupting the map.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo17">Map</a>, <a href="#robo403">cl_map_head</a>, <a href="#robo416">cl_map_tail</a>, <a href="#robo409">cl_map_next</a>, <a href="#robo411">cl_map_prev</a>, <a href="#robo407">cl_map_key</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo407">[Functions]<a name="Component20Library3a20Map2fcl5fmap5fkey">\r
+Component Library: Map/cl_map_key</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_map_key</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_map_key</strong> function retrieves the key value of a map item.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_INLINE uint64_t CL_API\r
+<strong>cl_map_key</strong>(\r
+ IN const <a href="#robo406">cl_map_iterator_t</a> itor )\r
+{\r
+ return( <a href="./cl_qmap_h.html#robo604">cl_qmap_key</a>( itor ) );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> itor\r
+ [in] Iterator for the item whose key to return.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> Returns the 64-bit key value for the specified iterator.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> The iterator specified by the itor parameter must have been retrived by\r
+ a previous call to <a href="#robo403">cl_map_head</a>, <a href="#robo416">cl_map_tail</a>, <a href="#robo409">cl_map_next</a>, or <a href="#robo411">cl_map_prev</a>.\r
+\r
+ The key value is set in a call to <a href="#robo405">cl_map_insert</a>.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo17">Map</a>, <a href="#robo405">cl_map_insert</a>, <a href="#robo403">cl_map_head</a>, <a href="#robo416">cl_map_tail</a>, <a href="#robo409">cl_map_next</a>, <a href="#robo411">cl_map_prev</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo408">[Functions]<a name="Component20Library3a20Map2fcl5fmap5fmerge">\r
+Component Library: Map/cl_map_merge</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_map_merge</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_map_merge</strong> function moves all items from one map to another,\r
+ excluding duplicates.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT <a href="./cl_types_h.html#robo304">cl_status_t</a> CL_API\r
+<strong>cl_map_merge</strong>(\r
+ OUT <a href="#robo415">cl_map_t</a>* const p_dest_map,\r
+ IN OUT <a href="#robo415">cl_map_t</a>* const p_src_map );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_dest_map\r
+ [out] Pointer to a <a href="#robo415">cl_map_t</a> structure to which items should be added.\r
+\r
+ p_src_map\r
+ [in/out] Pointer to a <a href="#robo415">cl_map_t</a> structure whose items to add\r
+ to p_dest_map.\r
+\r
+ RETURN VALUES\r
+ CL_SUCCESS if the operation succeeded.\r
+\r
+ CL_INSUFFICIENT_MEMORY if there was not enough memory for the operation\r
+ to succeed.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> Items are evaluated based on their keys only.\r
+\r
+ Upon return from <strong>cl_map_merge</strong>, the map referenced by p_src_map contains\r
+ all duplicate items.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo17">Map</a>, <a href="#robo399">cl_map_delta</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo409">[Functions]<a name="Component20Library3a20Map2fcl5fmap5fnext">\r
+Component Library: Map/cl_map_next</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_map_next</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_map_next</strong> function returns the map item with the next higher\r
+ key value than a specified map item.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_INLINE <a href="#robo406">cl_map_iterator_t</a> CL_API\r
+<strong>cl_map_next</strong>(\r
+ IN const <a href="#robo406">cl_map_iterator_t</a> itor )\r
+{\r
+ CL_ASSERT( itor );\r
+ return( <a href="./cl_qmap_h.html#robo606">cl_qmap_next</a>( itor ) );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> itor\r
+ [in] Iterator for an object in a map whose successor to return.\r
+\r
+ RETURN VALUES\r
+ Iterator for the object with the next higher key value in a map.\r
+\r
+ Iterator for the map end if the specified object was the last item in\r
+ the map.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> The iterator must have been retrieved by a previous call to <a href="#robo403">cl_map_head</a>,\r
+ <a href="#robo416">cl_map_tail</a>, <strong>cl_map_next</strong>, or <a href="#robo411">cl_map_prev</a>.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo17">Map</a>, <a href="#robo403">cl_map_head</a>, <a href="#robo416">cl_map_tail</a>, <a href="#robo411">cl_map_prev</a>, <a href="#robo401">cl_map_end</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo410">[Functions]<a name="Component20Library3a20Map2fcl5fmap5fobj">\r
+Component Library: Map/cl_map_obj</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_map_obj</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_map_obj</strong> function returns the object associated with an iterator.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_INLINE void* CL_API\r
+<strong>cl_map_obj</strong>(\r
+ IN const <a href="#robo406">cl_map_iterator_t</a> itor )\r
+{\r
+ return( <a href="./cl_qmap_h.html#robo607">cl_qmap_obj</a>( <a href="./cl_types_h.html#robo508">PARENT_STRUCT</a>( itor, <a href="./cl_qmap_h.html#robo594">cl_map_obj_t</a>, item ) ) );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> itor\r
+ [in] Iterator whose object to return.\r
+\r
+ RETURN VALUES\r
+ Returns the value of the object pointer associated with the iterator.\r
+\r
+ The iterator must have been retrieved by a previous call to <a href="#robo403">cl_map_head</a>,\r
+ <a href="#robo416">cl_map_tail</a>, <a href="#robo409">cl_map_next</a>, or <a href="#robo411">cl_map_prev</a>.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo17">Map</a>, <a href="#robo403">cl_map_head</a>, <a href="#robo416">cl_map_tail</a>, <a href="#robo409">cl_map_next</a>, <a href="#robo411">cl_map_prev</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo411">[Functions]<a name="Component20Library3a20Map2fcl5fmap5fprev">\r
+Component Library: Map/cl_map_prev</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_map_prev</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_map_prev</strong> function returns the map item with the next lower\r
+ key value than a precified map item.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_INLINE <a href="#robo406">cl_map_iterator_t</a> CL_API\r
+<strong>cl_map_prev</strong>(\r
+ IN const <a href="#robo406">cl_map_iterator_t</a> itor )\r
+{\r
+ CL_ASSERT( itor );\r
+ return( <a href="./cl_qmap_h.html#robo608">cl_qmap_prev</a>( itor ) );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> itor\r
+ [in] Iterator for an object in a map whose predecessor to return.\r
+\r
+ RETURN VALUES\r
+ Iterator for the object with the next lower key value in a map.\r
+\r
+ Iterator for the map end if the specified object was the first item in\r
+ the map.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> The iterator must have been retrieved by a previous call to <a href="#robo403">cl_map_head</a>,\r
+ <a href="#robo416">cl_map_tail</a>, <a href="#robo409">cl_map_next</a>, or <strong>cl_map_prev</strong>.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo17">Map</a>, <a href="#robo403">cl_map_head</a>, <a href="#robo416">cl_map_tail</a>, <a href="#robo409">cl_map_next</a>, <a href="#robo401">cl_map_end</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo412">[Functions]<a name="Component20Library3a20Map2fcl5fmap5fremove">\r
+Component Library: Map/cl_map_remove</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_map_remove</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_map_remove</strong> function removes the map item with the specified key\r
+ from a map.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT void* CL_API\r
+<strong>cl_map_remove</strong>(\r
+ IN <a href="#robo415">cl_map_t</a>* const p_map,\r
+ IN const uint64_t key );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_map\r
+ [in] Pointer to a <a href="#robo415">cl_map_t</a> structure from which to remove the item\r
+ with the specified key.\r
+\r
+ key\r
+ [in] Key value used to search for the object to remove.\r
+\r
+ RETURN VALUES\r
+ Pointer to the object associated with the specified key if\r
+ it was found and removed.\r
+\r
+ NULL if no object with the specified key exists in the map.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo17">Map</a>, <a href="#robo414">cl_map_remove_item</a>, <a href="#robo413">cl_map_remove_all</a>, <a href="#robo405">cl_map_insert</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo413">[Functions]<a name="Component20Library3a20Map2fcl5fmap5fremove5fall">\r
+Component Library: Map/cl_map_remove_all</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_map_remove_all</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_map_remove_all</strong> function removes all objects from a map,\r
+ leaving it empty.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT void CL_API\r
+<strong>cl_map_remove_all</strong>(\r
+ IN <a href="#robo415">cl_map_t</a>* const p_map );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_map\r
+ [in] Pointer to a map to empty.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> This function does not return a value.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo17">Map</a>, <a href="#robo412">cl_map_remove</a>, <a href="#robo414">cl_map_remove_item</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo414">[Functions]<a name="Component20Library3a20Map2fcl5fmap5fremove5fitem">\r
+Component Library: Map/cl_map_remove_item</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_map_remove_item</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_map_remove_item</strong> function removes the specified map item\r
+ from a map.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT void CL_API\r
+<strong>cl_map_remove_item</strong>(\r
+ IN <a href="#robo415">cl_map_t</a>* const p_map,\r
+ IN const <a href="#robo406">cl_map_iterator_t</a> itor );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_map\r
+ [in] Pointer to a map from which to remove the object associated with\r
+ the specified iterator.\r
+\r
+ itor\r
+ [in] Iterator for an object to remove from its map.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> This function does not return a value.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> Removes the object associated with the specifid iterator from its map.\r
+\r
+ The specified iterator is no longer valid after the call completes.\r
+\r
+ The iterator must have been retrieved by a previous call to <a href="#robo403">cl_map_head</a>,\r
+ <a href="#robo416">cl_map_tail</a>, <a href="#robo409">cl_map_next</a>, or <a href="#robo411">cl_map_prev</a>.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo17">Map</a>, <a href="#robo412">cl_map_remove</a>, <a href="#robo413">cl_map_remove_all</a>, <a href="#robo405">cl_map_insert</a>, <a href="#robo403">cl_map_head</a>,\r
+ <a href="#robo416">cl_map_tail</a>, <a href="#robo409">cl_map_next</a>, <a href="#robo411">cl_map_prev</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo415">[Structures]<a name="Component20Library3a20Map2fcl5fmap5ft">\r
+Component Library: Map/cl_map_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_map_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Quick map structure.\r
+\r
+ The <strong>cl_map_t</strong> structure should be treated as opaque and should\r
+ be manipulated only through the provided functions.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef struct _cl_map\r
+{\r
+ <a href="./cl_qmap_h.html#robo613">cl_qmap_t</a> qmap;\r
+ <a href="./cl_qpool_h.html#robo626">cl_qpool_t</a> pool;\r
+\r
+} <strong>cl_map_t</strong>;\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> qmap\r
+ Quick map object that maintains the map.\r
+\r
+ pool\r
+ <a href="./cl_pool_h.html#robo24">Pool</a> of <a href="./cl_qmap_h.html#robo594">cl_map_obj_t</a> structures used to store user objects\r
+ in the map.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo17">Map</a>, <a href="./cl_qmap_h.html#robo594">cl_map_obj_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo416">[Functions]<a name="Component20Library3a20Map2fcl5fmap5ftail">\r
+Component Library: Map/cl_map_tail</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_map_tail</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_map_tail</strong> function returns the map item with the highest key\r
+ value stored in a map.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_INLINE <a href="#robo406">cl_map_iterator_t</a> CL_API\r
+<strong>cl_map_tail</strong>(\r
+ IN const <a href="#robo415">cl_map_t</a>* const p_map )\r
+{\r
+ CL_ASSERT( p_map );\r
+ return( <a href="./cl_qmap_h.html#robo614">cl_qmap_tail</a>( &p_map->qmap ) );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_map\r
+ [in] Pointer to a map whose item with the highest key\r
+ is returned.\r
+\r
+ RETURN VALUES\r
+ Iterator for the object with the highest key in the map.\r
+\r
+ Iterator for the map end if the map was empty.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> <a href="#robo401">cl_map_end</a> does no remove the object from the map.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo17">Map</a>, <a href="#robo403">cl_map_head</a>, <a href="#robo409">cl_map_next</a>, <a href="#robo411">cl_map_prev</a>, <a href="#robo401">cl_map_end</a>\r
+</pre>\r
+</span>\r
+</body>\r
+</html>\r
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">\r
+<html>\r
+<head>\r
+<link rel="stylesheet" href="../robodoc.css" type="text/css">\r
+<title>./inc_doc/complib/cl_math_h.html</title>\r
+<!-- Source: ./inc/complib/cl_math.h -->\r
+<!-- Generated with ROBODoc Version 4.99.22 (Mar 6 2006) -->\r
+</head>\r
+<body bgcolor="#FFFFFF">\r
+<a name="robo_top_of_doc">Generated from ./inc/complib/cl_math.h</a> with <a href="http://sourceforge.net/projects/robodoc/">ROBODoc</a> v4.99.22 on Sun Apr 16 2006 17:39:25\r
+<br />\r
+<hr />\r
+\r
+<h2><a name="robo417">[Definitions]<a name="Component20Library3a20Math2fMAX">\r
+Component Library: Math/MAX</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>MAX</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>MAX</strong> macro returns the greater of two values.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>* <strong>MAX</strong>( x, y );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> x\r
+ [in] First of two values to compare.\r
+\r
+ y\r
+ [in] Second of two values to compare.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> Returns the greater of the x and y parameters.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo418">MIN</a>, <a href="#robo419">ROUNDUP</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo418">[Definitions]<a name="Component20Library3a20Math2fMIN">\r
+Component Library: Math/MIN</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>MIN</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>MIN</strong> macro returns the greater of two values.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>* <strong>MIN</strong>( x, y );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> x\r
+ [in] First of two values to compare.\r
+\r
+ y\r
+ [in] Second of two values to compare.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> Returns the lesser of the x and y parameters.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo417">MAX</a>, <a href="#robo419">ROUNDUP</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo419">[Definitions]<a name="Component20Library3a20Math2fROUNDUP">\r
+Component Library: Math/ROUNDUP</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ROUNDUP</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>ROUNDUP</strong> macro rounds a value up to a given multiple.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>* <strong>ROUNDUP</strong>( val, align );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> val\r
+ [in] Value that is to be rounded up. The type of the value is\r
+ indeterminate, but must be at most the size of a natural integer\r
+ for the platform.\r
+\r
+ align\r
+ [in] Multiple to which the val parameter must be rounded up.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> Returns a value that is the input value specified by val rounded up to\r
+ the nearest multiple of align.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> The value provided must be of a type at most the size of a natural integer.\r
+</pre>\r
+</span>\r
+</body>\r
+</html>\r
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">\r
+<html>\r
+<head>\r
+<link rel="stylesheet" href="../robodoc.css" type="text/css">\r
+<title>./inc_doc/complib/cl_memory_h.html</title>\r
+<!-- Source: ./inc/complib/cl_memory.h -->\r
+<!-- Generated with ROBODoc Version 4.99.22 (Mar 6 2006) -->\r
+</head>\r
+<body bgcolor="#FFFFFF">\r
+<a name="robo_top_of_doc">Generated from ./inc/complib/cl_memory.h</a> with <a href="http://sourceforge.net/projects/robodoc/">ROBODoc</a> v4.99.22 on Sun Apr 16 2006 17:39:25\r
+<br />\r
+<hr />\r
+\r
+<h2><a name="robo42">[Modules]<a name="Public2fMemory20Management">\r
+Public/Memory Management</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_modules.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> Memory Management\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The memory management functionality provides memory manipulation\r
+ functions as well as powerful debugging tools.\r
+\r
+ The Allocation Tracking functionality provides a means for tracking memory\r
+ allocations in order to detect memory leaks.\r
+\r
+ Memory allocation tracking stores the file name and line number where\r
+ allocations occur. Gathering this information does have an adverse impact\r
+ on performance, and memory tracking should therefore not be enabled in\r
+ release builds of software.\r
+\r
+ Memory tracking is compiled into the debug version of the library,\r
+ and can be enabled for the release version as well. To Enable memory\r
+ tracking in a release build of the public layer, users should define\r
+ the MEM_TRACK_ON keyword for compilation.\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo420">[Functions]<a name="Component20Library3a20Memory20Management2fcl5fcheck5ffor5fread">\r
+Component Library: Memory Management/cl_check_for_read</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_check_for_read</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Checks a user-mode virtual address for read access.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT <a href="./cl_types_h.html#robo304">cl_status_t</a> CL_API\r
+<strong>cl_check_for_read</strong>(\r
+ IN const void* const vaddr,\r
+ IN const size_t count );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> vaddr\r
+ [in] Virtual address to check for read access.\r
+\r
+ count\r
+ [in] Number of bytes of the buffer at the specified address\r
+ to validate.\r
+\r
+ RETURN VALUES\r
+ CL_SUCCESS if the virtual address is valid for a read of the specified\r
+ size.\r
+\r
+ CL_INVALID_PERMISSION if the virtual address or the size is not valid.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This call is only available in the kernel. The buffer can only be accessed\r
+ in the context of the application thread (i.e. in the path of an IOCTL\r
+ request). Callers cannot be holding a spinlock when calling this function.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Memory Management, <a href="#robo421">cl_check_for_write</a>, <a href="#robo423">cl_copy_to_user</a>, <a href="#robo422">cl_copy_from_user</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo421">[Functions]<a name="Component20Library3a20Memory20Management2fcl5fcheck5ffor5fwrite">\r
+Component Library: Memory Management/cl_check_for_write</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_check_for_write</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Checks a user-mode virtual address for write access.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT <a href="./cl_types_h.html#robo304">cl_status_t</a> CL_API\r
+<strong>cl_check_for_write</strong>(\r
+ IN void* const vaddr,\r
+ IN const size_t count );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> vaddr\r
+ [in] Virtual address to check for write access.\r
+\r
+ count\r
+ [in] Number of bytes of the buffer at the specified\r
+ address to validate.\r
+\r
+ RETURN VALUES\r
+ CL_SUCCESS if the virtual address is valid for a write of the specified\r
+ size.\r
+\r
+ CL_INVALID_PERMISSION if the virtual address or the size is not valid.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This call is only available in the kernel. The buffer can only be accessed\r
+ in the context of the application thread (i.e. in the path of an IOCTL\r
+ request). Callers cannot be holding a spinlock when calling this function.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Memory Management, <a href="#robo420">cl_check_for_read</a>, <a href="#robo423">cl_copy_to_user</a>, <a href="#robo422">cl_copy_from_user</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo422">[Functions]<a name="Component20Library3a20Memory20Management2fcl5fcopy5ffrom5fuser">\r
+Component Library: Memory Management/cl_copy_from_user</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_copy_from_user</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Copies data from a user-mode buffer, performing access checks.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT <a href="./cl_types_h.html#robo304">cl_status_t</a> CL_API\r
+<strong>cl_copy_from_user</strong>(\r
+ IN void* const p_dest,\r
+ IN const void* const p_src,\r
+ IN const size_t count );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_dest\r
+ [in] Pointer to the buffer being copied to.\r
+\r
+ p_src\r
+ [in] User-mode virtual address from which to copy data.\r
+\r
+ count\r
+ [in] Number of bytes to copy from the source buffer to the\r
+ destination buffer.\r
+\r
+ RETURN VALUES\r
+ CL_SUCCESS if the user-mode buffer virtual address is valid as the\r
+ source of the copy.\r
+\r
+ CL_INVALID_PERMISSION if the virtual address or the count is not valid.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This call is only available in the kernel. The buffer can only be accessed\r
+ in the context of the application thread (i.e. in the path of an IOCTL\r
+ request). Callers cannot be holding a spinlock when calling this function.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Memory Management, <a href="#robo420">cl_check_for_read</a>, <a href="#robo421">cl_check_for_write</a>, <a href="#robo423">cl_copy_to_user</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo423">[Functions]<a name="Component20Library3a20Memory20Management2fcl5fcopy5fto5fuser">\r
+Component Library: Memory Management/cl_copy_to_user</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_copy_to_user</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Copies data into a user-mode buffer, performing access checks.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT <a href="./cl_types_h.html#robo304">cl_status_t</a> CL_API\r
+<strong>cl_copy_to_user</strong>(\r
+ IN void* const p_dest,\r
+ IN const void* const p_src,\r
+ IN const size_t count );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_dest\r
+ [in] User-mode virtual address to which to copy data.\r
+\r
+ p_src\r
+ [in] Pointer to the buffer being copied from.\r
+\r
+ count\r
+ [in] Number of bytes to copy from the source buffer to the\r
+ destination buffer.\r
+\r
+ RETURN VALUES\r
+ CL_SUCCESS if the user-mode buffer virtual address is valid as the\r
+ destination of the copy.\r
+\r
+ CL_INVALID_PERMISSION if the virtual address or the count is not valid.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This call is only available in the kernel. The buffer can only be accessed\r
+ in the context of the application thread (i.e. in the path of an IOCTL\r
+ request). Callers cannot be holding a spinlock when calling this function.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Memory Management, <a href="#robo420">cl_check_for_read</a>, <a href="#robo421">cl_check_for_write</a>, <a href="#robo422">cl_copy_from_user</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo424">[Functions]<a name="Component20Library3a20Memory20Management2fcl5ffree">\r
+Component Library: Memory Management/cl_free</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_free</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_free</strong> function deallocates a block of memory.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>void\r
+<strong>cl_free</strong>(\r
+ IN void* const p_memory );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_memory\r
+ [in] Pointer to a memory block.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> This function does not return a value.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> The p_memory parameter is the pointer returned by a previous call to\r
+ <a href="#robo427">cl_malloc</a>, or <a href="#robo435">cl_zalloc</a>.\r
+\r
+ <strong>cl_free</strong> has no effect if p_memory is NULL.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Memory Management, cl_alloc, <a href="#robo435">cl_zalloc</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo425">[Functions]<a name="Component20Library3a20Memory20Management2fcl5fget5fpagesize">\r
+Component Library: Memory Management/cl_get_pagesize</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_get_pagesize</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Returns the number of bytes in a OS defined page.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT uint32_t CL_API\r
+<strong>cl_get_pagesize</strong>( void );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> NONE\r
+\r
+ RETURN VALUES\r
+ Returns the number of bytes in a page as defined by the Operating\r
+ System.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Memory Management\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo426">[Functions]<a name="Component20Library3a20Memory20Management2fcl5fget5fphysaddr">\r
+Component Library: Memory Management/cl_get_physaddr</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_get_physaddr</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Returns the Physical address for a kernel virtual address.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT uint64_t CL_API\r
+<strong>cl_get_physaddr</strong>(\r
+ IN void *vaddr );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_addr\r
+ [in] Pointer to virtual to which the physical address is required.\r
+\r
+ RETURN VALUES\r
+ Returns the physical address for a virtual address.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This call is only available in kernel mode.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Memory Management\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo427">[Functions]<a name="Component20Library3a20Memory20Management2fcl5fmalloc">\r
+Component Library: Memory Management/cl_malloc</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_malloc</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_malloc</strong> function allocates a block of memory.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>void*\r
+<strong>cl_malloc</strong>(\r
+ IN const size_t size );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> size\r
+ [in] Size of the requested allocation.\r
+\r
+ RETURN VALUES\r
+ Pointer to allocated memory if successful.\r
+\r
+ NULL otherwise.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> Allocated memory follows alignment rules specific to the different\r
+ environments.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Memory Management, <a href="#robo424">cl_free</a>, <a href="#robo435">cl_zalloc</a>, <a href="#robo433">cl_palloc</a>, <a href="#robo434">cl_pzalloc</a>,\r
+ <a href="#robo432">cl_memset</a>, <a href="#robo429">cl_memclr</a>, <a href="#robo431">cl_memcpy</a>, <a href="#robo430">cl_memcmp</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo428">[Functions]<a name="Component20Library3a20Memory20Management2fcl5fmem5fdisplay">\r
+Component Library: Memory Management/cl_mem_display</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_mem_display</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_mem_display</strong> function displays all tracked memory allocations to\r
+ the applicable debugger.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT void CL_API\r
+<strong>cl_mem_display</strong>( void );\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> This function does not return a value.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> Each tracked memory allocation is displayed along with the file name and\r
+ line number that allocated it.\r
+\r
+ Output is sent to the platform's debugging target, which may be the\r
+ system log file.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Memory Management\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo429">[Functions]<a name="Component20Library3a20Memory20Management2fcl5fmemclr">\r
+Component Library: Memory Management/cl_memclr</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_memclr</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_memclr</strong> function sets every byte in a memory range to zero.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_INLINE void CL_API\r
+<strong>cl_memclr</strong>(\r
+ IN void* const p_memory,\r
+ IN const size_t count )\r
+{\r
+ <a href="#robo432">cl_memset</a>( p_memory, 0, count );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_memory\r
+ [in] Pointer to a memory block.\r
+\r
+ count\r
+ [in] Number of bytes to set.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> This function does not return a value.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Memory Management, <a href="#robo432">cl_memset</a>, <a href="#robo431">cl_memcpy</a>, <a href="#robo430">cl_memcmp</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo430">[Functions]<a name="Component20Library3a20Memory20Management2fcl5fmemcmp">\r
+Component Library: Memory Management/cl_memcmp</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_memcmp</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_memcmp</strong> function compares two memory buffers.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT int32_t CL_API\r
+<strong>cl_memcmp</strong>(\r
+ IN const void* const p_mem,\r
+ IN const void* const p_ref,\r
+ IN const size_t count );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_mem\r
+ [in] Pointer to a memory block being compared.\r
+\r
+ p_ref\r
+ [in] Pointer to the reference memory block to compare against.\r
+\r
+ count\r
+ [in] Number of bytes to compare.\r
+\r
+ RETURN VALUES\r
+ Returns less than zero if p_mem is less than p_ref.\r
+\r
+ Returns greater than zero if p_mem is greater than p_ref.\r
+\r
+ Returns zero if the two memory regions are the identical.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Memory Management, <a href="#robo432">cl_memset</a>, <a href="#robo429">cl_memclr</a>, <a href="#robo431">cl_memcpy</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo431">[Functions]<a name="Component20Library3a20Memory20Management2fcl5fmemcpy">\r
+Component Library: Memory Management/cl_memcpy</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_memcpy</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_memcpy</strong> function copies a given number of bytes from\r
+ one buffer to another.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT void* CL_API\r
+<strong>cl_memcpy</strong>(\r
+ IN void* const p_dest,\r
+ IN const void* const p_src,\r
+ IN const size_t count );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_dest\r
+ [in] Pointer to the buffer being copied to.\r
+\r
+ p_src\r
+ [in] Pointer to the buffer being copied from.\r
+\r
+ count\r
+ [in] Number of bytes to copy from the source buffer to the\r
+ destination buffer.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> Returns a pointer to the destination buffer.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Memory Management, <a href="#robo432">cl_memset</a>, <a href="#robo429">cl_memclr</a>, <a href="#robo430">cl_memcmp</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo432">[Functions]<a name="Component20Library3a20Memory20Management2fcl5fmemset">\r
+Component Library: Memory Management/cl_memset</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_memset</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_memset</strong> function sets every byte in a memory range to a given value.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT void CL_API\r
+<strong>cl_memset</strong>(\r
+ IN void* const p_memory,\r
+ IN const uint8_t fill,\r
+ IN const size_t count );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_memory\r
+ [in] Pointer to a memory block.\r
+\r
+ fill\r
+ [in] Byte value with which to fill the memory.\r
+\r
+ count\r
+ [in] Number of bytes to set.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> This function does not return a value.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Memory Management, <a href="#robo429">cl_memclr</a>, <a href="#robo431">cl_memcpy</a>, <a href="#robo430">cl_memcmp</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo433">[Functions]<a name="Component20Library3a20Memory20Management2fcl5fpalloc">\r
+Component Library: Memory Management/cl_palloc</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_palloc</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_palloc</strong> function allocates a block of memory from paged pool if the\r
+ operating system supports it. If the operating system does not distinguish\r
+ between pool types, <strong>cl_palloc</strong> is identical to <a href="#robo427">cl_malloc</a>.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>void*\r
+<strong>cl_palloc</strong>(\r
+ IN const size_t size );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> size\r
+ [in] Size of the requested allocation.\r
+\r
+ RETURN VALUES\r
+ Pointer to allocated memory if successful.\r
+\r
+ NULL otherwise.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> Allocated memory follows alignment rules specific to the different\r
+ environments.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Memory Management, <a href="#robo424">cl_free</a>, <a href="#robo427">cl_malloc</a>, <a href="#robo435">cl_zalloc</a>, <a href="#robo434">cl_pzalloc</a>,\r
+ <a href="#robo432">cl_memset</a>, <a href="#robo429">cl_memclr</a>, <a href="#robo431">cl_memcpy</a>, <a href="#robo430">cl_memcmp</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo434">[Functions]<a name="Component20Library3a20Memory20Management2fcl5fpzalloc">\r
+Component Library: Memory Management/cl_pzalloc</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_pzalloc</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_pzalloc</strong> function allocates a block of memory from paged pool if the\r
+ operating system supports it and initializes it to zero. If the operating\r
+ system does not distinguish between pool types, <strong>cl_pzalloc</strong> is identical\r
+ to <a href="#robo435">cl_zalloc</a>.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>void*\r
+<strong>cl_pzalloc</strong>(\r
+ IN const size_t size );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> size\r
+ [in] Size of the requested allocation.\r
+\r
+ RETURN VALUES\r
+ Pointer to allocated memory if successful.\r
+\r
+ NULL otherwise.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> Allocated memory follows alignment rules specific to the different\r
+ environments.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Memory Management, <a href="#robo424">cl_free</a>, <a href="#robo427">cl_malloc</a>, <a href="#robo435">cl_zalloc</a>, <a href="#robo433">cl_palloc</a>,\r
+ <a href="#robo432">cl_memset</a>, <a href="#robo429">cl_memclr</a>, <a href="#robo431">cl_memcpy</a>, <a href="#robo430">cl_memcmp</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo435">[Functions]<a name="Component20Library3a20Memory20Management2fcl5fzalloc">\r
+Component Library: Memory Management/cl_zalloc</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_zalloc</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_zalloc</strong> function allocates a block of memory initialized to zero.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>void*\r
+<strong>cl_zalloc</strong>(\r
+ IN const size_t size );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> size\r
+ [in] Size of the requested allocation.\r
+\r
+ RETURN VALUES\r
+ Pointer to allocated memory if successful.\r
+\r
+ NULL otherwise.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> Allocated memory follows alignment rules specific to the different\r
+ environments.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Memory Management, <a href="#robo424">cl_free</a>, <a href="#robo427">cl_malloc</a>, <a href="#robo433">cl_palloc</a>, <a href="#robo434">cl_pzalloc</a>,\r
+ <a href="#robo432">cl_memset</a>, <a href="#robo429">cl_memclr</a>, <a href="#robo431">cl_memcpy</a>, <a href="#robo430">cl_memcmp</a>\r
+</pre>\r
+</span>\r
+</body>\r
+</html>\r
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">\r
+<html>\r
+<head>\r
+<link rel="stylesheet" href="../robodoc.css" type="text/css">\r
+<title>./inc_doc/complib/cl_mutex_h.html</title>\r
+<!-- Source: ./inc/complib/cl_mutex.h -->\r
+<!-- Generated with ROBODoc Version 4.99.22 (Mar 6 2006) -->\r
+</head>\r
+<body bgcolor="#FFFFFF">\r
+<a name="robo_top_of_doc">Generated from ./inc/complib/cl_mutex.h</a> with <a href="http://sourceforge.net/projects/robodoc/">ROBODoc</a> v4.99.22 on Sun Apr 16 2006 17:39:24\r
+<br />\r
+<hr />\r
+\r
+<h2><a name="robo5">[Modules]<a name="complib2fMutex">\r
+complib/Mutex</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_modules.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>Mutex</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> <strong>Mutex</strong> provides synchronization between threads for exclusive access to\r
+ a resource.\r
+\r
+ The <strong>Mutex</strong> functions manipulate a cl_mutex_t structure which should\r
+ be treated as opaque and should be manipulated only through the provided\r
+ functions.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Structures:\r
+ cl_mutex_t\r
+\r
+ Initialization:\r
+ <a href="#robo437">cl_mutex_construct</a>, <a href="#robo439">cl_mutex_init</a>, <a href="#robo438">cl_mutex_destroy</a>\r
+\r
+ Manipulation\r
+ <a href="#robo436">cl_mutex_acquire</a>, <a href="#robo440">cl_mutex_release</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo436">[Functions]<a name="Component20Library3a20Mutex2fcl5fmutex5facquire">\r
+Component Library: Mutex/cl_mutex_acquire</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_mutex_acquire</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_mutex_acquire</strong> function acquires a mutex.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT void CL_API\r
+<strong>cl_mutex_acquire</strong>(\r
+ IN cl_mutex_t* const p_mutex );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_mutex\r
+ [in] Pointer to a mutex structure to acquire.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> This function does not return a value.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo5">Mutex</a>, <a href="#robo440">cl_mutex_release</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo437">[Functions]<a name="Component20Library3a20Mutex2fcl5fmutex5fconstruct">\r
+Component Library: Mutex/cl_mutex_construct</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_mutex_construct</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_mutex_construct</strong> function initializes the state of a\r
+ mutex.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT void CL_API\r
+<strong>cl_mutex_construct</strong>(\r
+ IN cl_mutex_t* const p_mutex );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_mutex\r
+ [in] Pointer to a mutex structure whose state to initialize.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> This function does not return a value.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> Allows calling cl_semphore_destroy without first calling\r
+ <a href="#robo439">cl_mutex_init</a>.\r
+\r
+ Calling <strong>cl_mutex_construct</strong> is a prerequisite to calling any other\r
+ mutex function except <a href="#robo439">cl_mutex_init</a>.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo5">Mutex</a>, cl_semphore_init <a href="#robo438">cl_mutex_destroy</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo438">[Functions]<a name="Component20Library3a20Mutex2fcl5fmutex5fdestroy">\r
+Component Library: Mutex/cl_mutex_destroy</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_mutex_destroy</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_mutex_destroy</strong> function performs all necessary cleanup of a\r
+ mutex.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT void CL_API\r
+<strong>cl_mutex_destroy</strong>(\r
+ IN cl_mutex_t* const p_mutex );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_mutex\r
+ [in] Pointer to a mutex structure to destroy.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> This function does not return a value.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> Performs any necessary cleanup of a mutex. This function must only\r
+ be called if either <a href="#robo437">cl_mutex_construct</a> or <a href="#robo439">cl_mutex_init</a> has been\r
+ called.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo5">Mutex</a>, <a href="#robo437">cl_mutex_construct</a>, <a href="#robo439">cl_mutex_init</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo439">[Functions]<a name="Component20Library3a20Mutex2fcl5fmutex5finit">\r
+Component Library: Mutex/cl_mutex_init</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_mutex_init</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_mutex_init</strong> function initializes a mutex for use.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT <a href="./cl_types_h.html#robo304">cl_status_t</a> CL_API\r
+<strong>cl_mutex_init</strong>(\r
+ IN cl_mutex_t* const p_mutex );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_mutex\r
+ [in] Pointer to a mutex structure to initialize.\r
+\r
+ RETURN VALUES\r
+ CL_SUCCESS if initialization succeeded.\r
+\r
+ CL_ERROR if initialization failed. Callers should call\r
+ <a href="#robo438">cl_mutex_destroy</a> to clean up any resources allocated during\r
+ initialization.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> Initializes the mutex structure. Allows calling cl_mutex_aquire\r
+ and <a href="#robo440">cl_mutex_release</a>. The cl_mutex is always created in the unlocked state.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo5">Mutex</a>, <a href="#robo437">cl_mutex_construct</a>, <a href="#robo438">cl_mutex_destroy</a>,\r
+ <a href="#robo436">cl_mutex_acquire</a>, <a href="#robo440">cl_mutex_release</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo440">[Functions]<a name="Component20Library3a20Mutex2fcl5fmutex5frelease">\r
+Component Library: Mutex/cl_mutex_release</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_mutex_release</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_mutex_release</strong> function releases a mutex object.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT void CL_API\r
+<strong>cl_mutex_release</strong>(\r
+ IN cl_mutex_t* const p_mutex );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_mutex\r
+ [in] Pointer to a mutex structure to release.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> This function does not return a value.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> Releases a mutex after a call to <a href="#robo436">cl_mutex_acquire</a>.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo5">Mutex</a>, <a href="#robo436">cl_mutex_acquire</a>\r
+</pre>\r
+</span>\r
+</body>\r
+</html>\r
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">\r
+<html>\r
+<head>\r
+<link rel="stylesheet" href="../robodoc.css" type="text/css">\r
+<title>./inc_doc/complib/cl_obj_h.html</title>\r
+<!-- Source: ./inc/complib/cl_obj.h -->\r
+<!-- Generated with ROBODoc Version 4.99.22 (Mar 6 2006) -->\r
+</head>\r
+<body bgcolor="#FFFFFF">\r
+<a name="robo_top_of_doc">Generated from ./inc/complib/cl_obj.h</a> with <a href="http://sourceforge.net/projects/robodoc/">ROBODoc</a> v4.99.22 on Sun Apr 16 2006 17:39:24\r
+<br />\r
+<hr />\r
+\r
+<h2><a name="robo18">[Modules]<a name="Component20Library2fObject">\r
+Component Library/Object</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_modules.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>Object</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> <strong>Object</strong> describes a basic class that can be used to track accesses to an\r
+ object and provides automatic cleanup of an object that is dependent\r
+ on another object.\r
+\r
+ Dependencies between objects are described using a relationship. A\r
+ child object is considered dependent on a parent object. Destruction of\r
+ a parent object automatically results in the destruction of any child\r
+ objects associated with the parent.\r
+\r
+ The relationship between parent and child objects is many to many.\r
+ Parents can have multiple child objects, and a child can be dependent on\r
+ multiple parent objects. In the latter case, destruction of any parent\r
+ object results in the destruction of the child object.\r
+\r
+ Other relationships between objects are described using references. An\r
+ object that takes a reference on a second object prevents the second object\r
+ from being deallocated as long as the reference is held.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Types\r
+ <a href="#robo442">cl_destroy_type_t</a>\r
+\r
+ Structures:\r
+ <a href="#robo458">cl_obj_t</a>, <a href="#robo455">cl_obj_rel_t</a>\r
+\r
+ Callbacks:\r
+ <a href="#robo461">cl_pfn_obj_call_t</a>\r
+\r
+ Initialization/Destruction:\r
+ <a href="#robo451">cl_obj_mgr_create</a>, <a href="#robo452">cl_obj_mgr_destroy</a>,\r
+ <a href="#robo443">cl_obj_construct</a>, <a href="#robo447">cl_obj_init</a>, <a href="#robo446">cl_obj_destroy</a>, <a href="#robo444">cl_obj_deinit</a>\r
+\r
+ <strong>Object</strong> Relationships:\r
+ <a href="#robo454">cl_obj_ref</a>, <a href="#robo445">cl_obj_deref</a>,\r
+ <a href="#robo462">cl_rel_alloc</a>, <a href="#robo463">cl_rel_free</a>, <a href="#robo448">cl_obj_insert_rel</a>, <a href="#robo456">cl_obj_remove_rel</a>\r
+\r
+ <strong>Object</strong> Manipulation:\r
+ <a href="#robo457">cl_obj_reset</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo442">[Definitions]<a name="Component20Library3a20Object2fcl5fdestroy5ftype5ft">\r
+Component Library: Object/cl_destroy_type_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_destroy_type_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Indicates the type of destruction to perform on an object.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef enum _cl_destroy_type\r
+{\r
+ CL_DESTROY_ASYNC,\r
+ CL_DESTROY_SYNC\r
+\r
+} <strong>cl_destroy_type_t</strong>;\r
+</pre>\r
+</span><p><strong>VALUES</strong></p>\r
+<span class="VALUES"><pre> CL_DESTROY_ASYNC\r
+ Indicates that the object should be destroyed asynchronously. Objects\r
+ destroyed asynchronously complete initial destruction processing, then\r
+ return the calling thread. Once their reference count goes to zero,\r
+ they are queue onto an asynchronous thread to complete destruction\r
+ processing.\r
+\r
+ CL_DESTROY_SYNC\r
+ Indicates that the object should be destroyed synchronously. Objects\r
+ destroyed synchronously wait (block) until their reference count goes\r
+ to zero. Once their reference count goes to zero, destruction\r
+ processing is completed by the calling thread.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo18">Object</a>, <a href="#robo447">cl_obj_init</a>, <a href="#robo446">cl_obj_destroy</a>, <a href="#robo444">cl_obj_deinit</a>, <a href="#robo458">cl_obj_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo443">[Functions]<a name="Component20Library3a20Object2fcl5fobj5fconstruct">\r
+Component Library: Object/cl_obj_construct</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_obj_construct</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> This routine prepares an object for use. The object must be successfully\r
+ initialized before being used.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT void CL_API\r
+<strong>cl_obj_construct</strong>(\r
+ IN <a href="#robo458">cl_obj_t</a> * const p_obj,\r
+ IN const uint32_t obj_type );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_obj\r
+ [in] A pointer to the object to construct.\r
+\r
+ obj_type\r
+ [in] A user-specified type associated with the object. This type\r
+ is recorded by the object for debugging purposes and may be accessed\r
+ by the user.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> None.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This call must succeed before invoking any other function on an object.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo18">Object</a>, <a href="#robo447">cl_obj_init</a>, <a href="#robo446">cl_obj_destroy</a>, <a href="#robo444">cl_obj_deinit</a>.\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo444">[Functions]<a name="Component20Library3a20Object2fcl5fobj5fdeinit">\r
+Component Library: Object/cl_obj_deinit</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_obj_deinit</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Release all resources allocated by an object. This routine should\r
+ typically be called from a user's pfn_free routine.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT void CL_API\r
+<strong>cl_obj_deinit</strong>(\r
+ IN <a href="#robo458">cl_obj_t</a> * const p_obj );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_obj\r
+ [in] A pointer to the object to free.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> None.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This call must be invoked to release the object from the global object\r
+ manager.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo18">Object</a>, <a href="#robo443">cl_obj_construct</a>, <a href="#robo447">cl_obj_init</a>, <a href="#robo446">cl_obj_destroy</a>, <a href="#robo458">cl_obj_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo445">[Functions]<a name="Component20Library3a20Object2fcl5fobj5fderef">\r
+Component Library: Object/cl_obj_deref</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_obj_deref</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Decrements the reference count on an object and returns the updated count.\r
+ This routine is thread safe, but results in locking the object.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT int32_t CL_API\r
+<strong>cl_obj_deref</strong>(\r
+ IN <a href="#robo458">cl_obj_t</a> * const p_obj );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_obj\r
+ [in] A pointer to the object to dereference.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> The updated reference count.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo18">Object</a>, <a href="#robo458">cl_obj_t</a>, <a href="#robo454">cl_obj_ref</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo446">[Functions]<a name="Component20Library3a20Object2fcl5fobj5fdestroy">\r
+Component Library: Object/cl_obj_destroy</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_obj_destroy</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> This routine destroys the specified object.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT void CL_API\r
+<strong>cl_obj_destroy</strong>(\r
+ IN <a href="#robo458">cl_obj_t</a> * p_obj );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_obj\r
+ [in] A pointer to the object to destroy.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> None.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This routine starts the destruction process for the specified object. For\r
+ additional information regarding destruction callbacks, see the following\r
+ fields in <a href="#robo458">cl_obj_t</a> and parameters in <a href="#robo447">cl_obj_init</a>: pfn_destroying,\r
+ pfn_cleanup, and pfn_free.\r
+\r
+ In most cases, after calling this routine, users should call <a href="#robo444">cl_obj_deinit</a>\r
+ from within their pfn_free callback routine.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo18">Object</a>, <a href="#robo443">cl_obj_construct</a>, <a href="#robo447">cl_obj_init</a>, <a href="#robo444">cl_obj_deinit</a>,\r
+ <a href="#robo458">cl_obj_t</a>, <a href="#robo442">cl_destroy_type_t</a>, <a href="#robo461">cl_pfn_obj_call_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo447">[Functions]<a name="Component20Library3a20Object2fcl5fobj5finit">\r
+Component Library: Object/cl_obj_init</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_obj_init</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> This routine initializes an object for use. Upon the successful completion\r
+ of this call, the object is ready for use.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT <a href="./cl_types_h.html#robo304">cl_status_t</a> CL_API\r
+<strong>cl_obj_init</strong>(\r
+ IN <a href="#robo458">cl_obj_t</a> * const p_obj,\r
+ IN <a href="#robo442">cl_destroy_type_t</a> destroy_type,\r
+ IN const <a href="#robo461">cl_pfn_obj_call_t</a> pfn_destroying OPTIONAL,\r
+ IN const <a href="#robo461">cl_pfn_obj_call_t</a> pfn_cleanup OPTIONAL,\r
+ IN const <a href="#robo461">cl_pfn_obj_call_t</a> pfn_free );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_obj\r
+ [in] A pointer to the object to initialize.\r
+\r
+ destroy_type\r
+ [in] Specifies the destruction model used by this object.\r
+\r
+ pfn_destroying\r
+ [in] User-specified callback invoked to notify a user that an object has\r
+ been marked for destruction. This callback is invoked directly from\r
+ the thread destroying the object and is used to notify a user that\r
+ a parent object has invoked a child object's destructor.\r
+\r
+ pfn_cleanup\r
+ [in] User-specified callback invoked to an object is undergoing\r
+ destruction. For object's destroyed asynchronously, this callback\r
+ is invoked from the context of the asynchronous destruction thread.\r
+ Users may block in the context of this thread; however, further\r
+ destruction processing will not continue until this callback returns.\r
+\r
+ pfn_free\r
+ [in] User-specified callback invoked to notify a user that an object has\r
+ been destroyed and is ready for deallocation. Users should either\r
+ call <a href="#robo444">cl_obj_deinit</a> or <a href="#robo457">cl_obj_reset</a> from within this callback.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> CL_SUCCESS\r
+ The object was successfully initialized.\r
+\r
+ CL_INSUFFICIENT_MEMORY\r
+ The object could not allocate the necessary memory resources to\r
+ complete initialization.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> The three destruction callbacks are used to notify the user of the progress\r
+ of the destruction, permitting the user to perform an additional processing.\r
+ Pfn_destroying is used to notify the user that the object is being\r
+ destroyed. It is called after an object has removed itself from\r
+ relationships with its parents, but before it destroys any child objects\r
+ that it might have.\r
+\r
+ Pfn_cleanup is invoked after all child objects have been destroyed, and\r
+ there are no more references on the object itself. For objects destroyed\r
+ asynchronously, pfn_cleanup is invoked from an asynchronous destruction\r
+ thread.\r
+\r
+ Pfn_free is called to notify the user that the destruction of the object has\r
+ completed. All relationships have been removed, and all child objects have\r
+ been destroyed. Relationship items (<a href="#robo455">cl_obj_rel_t</a>) that were used to\r
+ identify parent objects are returned to the user through the p_parent_list\r
+ field of the <a href="#robo458">cl_obj_t</a> structure.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo18">Object</a>, <a href="#robo443">cl_obj_construct</a>, <a href="#robo446">cl_obj_destroy</a>, <a href="#robo444">cl_obj_deinit</a>,\r
+ <a href="#robo458">cl_obj_t</a>, <a href="#robo442">cl_destroy_type_t</a>, <a href="#robo461">cl_pfn_obj_call_t</a>,\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo448">[Functions]<a name="Component20Library3a20Object2fcl5fobj5finsert5frel">\r
+Component Library: Object/cl_obj_insert_rel</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_obj_insert_rel</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Forms a relationship between two objects, with the existence of the child\r
+ object dependent on the parent.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT void CL_API\r
+<strong>cl_obj_insert_rel</strong>(\r
+ IN <a href="#robo455">cl_obj_rel_t</a> * const p_rel,\r
+ IN <a href="#robo458">cl_obj_t</a> * const p_parent_obj,\r
+ IN <a href="#robo458">cl_obj_t</a> * const p_child_obj );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_rel\r
+ [in] A reference to an unused relationship item.\r
+\r
+ p_parent_obj\r
+ [in] A reference to the parent object.\r
+\r
+ p_child_obj\r
+ [in] A reference to the child object.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> None.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This call inserts a relationship between the parent and child object.\r
+ The relationship allows for the automatic destruction of the child object\r
+ if the parent is destroyed.\r
+\r
+ A given object can have multiple parent and child objects, but the\r
+ relationships must form into an object tree. That is, there cannot be any\r
+ cycles formed through the parent-child relationships. (For example, an\r
+ object cannot be both the parent and a child of a second object.)\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo18">Object</a>, <a href="#robo462">cl_rel_alloc</a>, <a href="#robo463">cl_rel_free</a>, <a href="#robo456">cl_obj_remove_rel</a>, <a href="#robo446">cl_obj_destroy</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo449">[Functions]<a name="Component20Library3a20Object2fcl5fobj5finsert5frel5fparent5flocked">\r
+Component Library: Object/cl_obj_insert_rel_parent_locked</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_obj_insert_rel_parent_locked</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Forms a relationship between two objects, with the existence of the child\r
+ object dependent on the parent. The parent's object lock is held.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT void CL_API\r
+<strong>cl_obj_insert_rel_parent_locked</strong>(\r
+ IN <a href="#robo455">cl_obj_rel_t</a> * const p_rel,\r
+ IN <a href="#robo458">cl_obj_t</a> * const p_parent_obj,\r
+ IN <a href="#robo458">cl_obj_t</a> * const p_child_obj );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_rel\r
+ [in] A reference to an unused relationship item.\r
+\r
+ p_parent_obj\r
+ [in] A reference to the parent object.\r
+\r
+ p_child_obj\r
+ [in] A reference to the child object.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> None.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This call inserts a relationship between the parent and child object.\r
+ The relationship allows for the automatic destruction of the child object\r
+ if the parent is destroyed.\r
+\r
+ A given object can have multiple parent and child objects, but the\r
+ relationships must form into an object tree. That is, there cannot be any\r
+ cycles formed through the parent-child relationships. (For example, an\r
+ object cannot be both the parent and a child of a second object.)\r
+\r
+ This call requires the caller to already hold the parent object's lock.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo18">Object</a>, <a href="#robo462">cl_rel_alloc</a>, <a href="#robo463">cl_rel_free</a>, <a href="#robo456">cl_obj_remove_rel</a>, <a href="#robo446">cl_obj_destroy</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo450">[Functions]<a name="Component20Library3a20Object2fcl5fobj5flock">\r
+Component Library: Object/cl_obj_lock</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_obj_lock</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Acquires an object's lock.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_INLINE void CL_API\r
+<strong>cl_obj_lock</strong>(\r
+ IN <a href="#robo458">cl_obj_t</a> * const p_obj )\r
+{\r
+ CL_ASSERT( p_obj->state == CL_INITIALIZED ||\r
+ p_obj->state == CL_DESTROYING );\r
+ <a href="./cl_spinlock_h.html#robo648">cl_spinlock_acquire</a>( &p_obj->lock );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_obj\r
+ [in] A pointer to the object whose lock to acquire.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> This function does not return a value.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo18">Object</a>, <a href="#robo458">cl_obj_t</a>, <a href="#robo460">cl_obj_unlock</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo451">[Functions]<a name="Component20Library3a20Object2fcl5fobj5fmgr5fcreate">\r
+Component Library: Object/cl_obj_mgr_create</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_obj_mgr_create</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> This routine creates an object manager used to track all objects by\r
+ the user. The object manager assists with debugging efforts by identifying\r
+ objects that are not destroyed properly.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT <a href="./cl_types_h.html#robo304">cl_status_t</a> CL_API\r
+<strong>cl_obj_mgr_create</strong>(void);\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> None.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> CL_SUCCESS\r
+ The object manager was succesfully created.\r
+\r
+ CL_INSUFFICIENT_MEMORY\r
+ The object manager could not be allocated.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This call must succeed before invoking any other object-related function.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo18">Object</a>, <a href="#robo452">cl_obj_mgr_destroy</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo452">[Functions]<a name="Component20Library3a20Object2fcl5fobj5fmgr5fdestroy">\r
+Component Library: Object/cl_obj_mgr_destroy</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_obj_mgr_destroy</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> This routine destroys the object manager created through <a href="#robo451">cl_obj_mgr_create</a>.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT void CL_API\r
+<strong>cl_obj_mgr_destroy</strong>(void);\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> None.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> None.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> When the object manager is destroyed, it will display information about all\r
+ objects that have not yet been destroyed.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo18">Object</a>, <a href="#robo451">cl_obj_mgr_create</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo453">[Structures]<a name="Component20Library3a20Object2fcl5fobj5fmgr5ft">\r
+Component Library: Object/cl_obj_mgr_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_obj_mgr_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The global object manager.\r
+\r
+ The manager must be created before constructing any other objects, and all\r
+ objects must be destroyed before the object manager is destroyed.\r
+\r
+ The manager is used to maintain the list of all objects currently active\r
+ in the system. It provides a pool of relationship items used to\r
+ describe parent-child, or dependent, relationships between two objects.\r
+ The manager contains an asynchronous processing thread that is used to\r
+ support asynchronous object destruction.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef struct _cl_obj_mgr\r
+{\r
+ <a href="./cl_qlist_h.html#robo584">cl_qlist_t</a> obj_list;\r
+ cl_spinlock_t lock;\r
+\r
+ <a href="./cl_async_proc_h.html#robo271">cl_async_proc_t</a> async_proc_mgr;\r
+\r
+ <a href="./cl_qpool_h.html#robo626">cl_qpool_t</a> rel_pool;\r
+\r
+} <strong>cl_obj_mgr_t</strong>;\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> obj_list\r
+ <a href="./cl_list_h.html#robo15">List</a> of all object's in the system. <a href="#robo18">Object</a>'s are inserted into this\r
+ list when constructed and removed when freed.\r
+\r
+ lock\r
+ A lock used by the object manager for synchronization to the obj_list.\r
+\r
+ async_proc_mgr\r
+ An asynchronous processing manager used to process asynchronous\r
+ destruction requests. Users wishing to synchronize the execution of\r
+ specific routines with object destruction may queue work requests to\r
+ this processing manager.\r
+\r
+ rel_pool\r
+ <a href="./cl_pool_h.html#robo24">Pool</a> of items used to describe dependent relationships. Users may\r
+ obtain relationship objects from this pool when forming relationships,\r
+ but are not required to do so.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo18">Object</a>, <a href="#robo451">cl_obj_mgr_create</a>, <a href="#robo452">cl_obj_mgr_destroy</a>,\r
+ <a href="#robo443">cl_obj_construct</a>, <a href="#robo444">cl_obj_deinit</a>,\r
+ <a href="./cl_qlist_h.html#robo584">cl_qlist_t</a>, cl_spinlock_t, <a href="./cl_async_proc_h.html#robo271">cl_async_proc_t</a>, <a href="./cl_qpool_h.html#robo626">cl_qpool_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo454">[Functions]<a name="Component20Library3a20Object2fcl5fobj5fref">\r
+Component Library: Object/cl_obj_ref</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_obj_ref</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Increments the reference count on an object and returns the updated count.\r
+ This routine is thread safe, but does not result in locking the object.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT int32_t CL_API\r
+<strong>cl_obj_ref</strong>(\r
+ IN <a href="#robo458">cl_obj_t</a> * const p_obj );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_obj\r
+ [in] A pointer to the object to reference.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> The updated reference count.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo18">Object</a>, <a href="#robo458">cl_obj_t</a>, <a href="#robo445">cl_obj_deref</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo455">[Structures]<a name="Component20Library3a20Object2fcl5fobj5frel5ft">\r
+Component Library: Object/cl_obj_rel_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_obj_rel_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Identifies a dependent relationship between two objects.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef struct _cl_obj_rel\r
+{\r
+ <a href="./cl_qcomppool_h.html#robo542">cl_pool_item_t</a> pool_item; /* Must be first. */\r
+ struct _cl_obj *p_parent_obj;\r
+\r
+ <a href="./cl_qlist_h.html#robo554">cl_list_item_t</a> list_item;\r
+ struct _cl_obj *p_child_obj;\r
+\r
+} <strong>cl_obj_rel_t</strong>;\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> pool_item\r
+ An item used to store the relationship in a free pool maintained\r
+ by the object manager. This field is also used by the parent object\r
+ to store the relationship in its child_list.\r
+\r
+ p_parent_obj\r
+ A reference to the parent object for the relationship.\r
+\r
+ list_item\r
+ This field is used by the child object to store the relationship in\r
+ its parent_list.\r
+\r
+ p_child_obj\r
+ A reference to the child object for the relationship.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This structure is used to define all dependent relationships. Dependent\r
+ relationships are those where the destruction of a parent object result in\r
+ the destruction of child objects. For other types of relationships, simple\r
+ references between objects may be used.\r
+\r
+ Relationship items are stored in lists maintained by both the parent\r
+ and child objects. References to both objects exist while the\r
+ relationship is maintained. Typically, relationships are defined by\r
+ the user by calling <a href="#robo448">cl_obj_insert_rel</a>, but are destroyed automatically\r
+ via an object's destruction process.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo18">Object</a>, <a href="#robo462">cl_rel_alloc</a>, <a href="#robo463">cl_rel_free</a>, <a href="#robo448">cl_obj_insert_rel</a>, <a href="#robo456">cl_obj_remove_rel</a>,\r
+ <a href="#robo446">cl_obj_destroy</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo456">[Functions]<a name="Component20Library3a20Object2fcl5fobj5fremove5frel">\r
+Component Library: Object/cl_obj_remove_rel</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_obj_remove_rel</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Manually removes a relationship between two objects.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT void CL_API\r
+<strong>cl_obj_remove_rel</strong>(\r
+ IN <a href="#robo455">cl_obj_rel_t</a> * const p_rel );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_rel\r
+ [in] A reference to the relationship to remove.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> None.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This routine permits a user to manually remove a dependent relationship\r
+ between two objects. When removing a relationship using this call, the\r
+ user must ensure that objects referenced by the relationship are not\r
+ destroyed, either directly or indirectly via a parent.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo18">Object</a>, <a href="#robo462">cl_rel_alloc</a>, <a href="#robo463">cl_rel_free</a>, <a href="#robo448">cl_obj_insert_rel</a>, <a href="#robo446">cl_obj_destroy</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo457">[Functions]<a name="Component20Library3a20Object2fcl5fobj5freset">\r
+Component Library: Object/cl_obj_reset</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_obj_reset</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Reset an object's state. This is called after <a href="#robo446">cl_obj_destroy</a> has\r
+ been called on a object, but before <a href="#robo444">cl_obj_deinit</a> has been invoked.\r
+ After an object has been reset, it is ready for re-use.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT void CL_API\r
+<strong>cl_obj_reset</strong>(\r
+ IN <a href="#robo458">cl_obj_t</a> * const p_obj );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_obj\r
+ [in] A pointer to the object to reset.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> None.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This routine allows an object to be initialized once, then destroyed\r
+ and re-used multiple times. This permits the user to allocate and\r
+ maintain a pool of objects. The objects may be reset and returned to\r
+ the pool, rather than freed, after being destroyed. The objects would\r
+ not be freed until the pool itself was destroyed.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo18">Object</a>, <a href="#robo446">cl_obj_destroy</a>, cl_obj_free, <a href="#robo458">cl_obj_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo458">[Structures]<a name="Component20Library3a20Object2fcl5fobj5ft">\r
+Component Library: Object/cl_obj_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_obj_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> <a href="#robo18">Object</a> structure.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef struct _cl_obj\r
+{\r
+ <a href="./cl_qcomppool_h.html#robo542">cl_pool_item_t</a> pool_item; /* Must be first. */\r
+ uint32_t type;\r
+ cl_state_t state;\r
+ <a href="#robo442">cl_destroy_type_t</a> destroy_type;\r
+\r
+ <a href="./cl_async_proc_h.html#robo269">cl_async_proc_item_t</a> async_item;\r
+ cl_event_t event;\r
+\r
+ <a href="#robo461">cl_pfn_obj_call_t</a> pfn_destroying;\r
+ <a href="#robo461">cl_pfn_obj_call_t</a> pfn_cleanup;\r
+ <a href="#robo461">cl_pfn_obj_call_t</a> pfn_free;\r
+\r
+ cl_spinlock_t lock;\r
+\r
+ <a href="./cl_qlist_h.html#robo584">cl_qlist_t</a> parent_list;\r
+ <a href="./cl_qlist_h.html#robo584">cl_qlist_t</a> child_list;\r
+\r
+ atomic32_t ref_cnt;\r
+\r
+} <strong>cl_obj_t</strong>;\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> pool_item\r
+ Used to track the object with the global object manager. We use\r
+ a pool item, rather than a list item, to let users store the object\r
+ in a pool.\r
+\r
+ type\r
+ Stores a user-specified object type.\r
+\r
+ state\r
+ Records the current state of the object, such as initialized,\r
+ destroying, etc.\r
+\r
+ destroy_type\r
+ Specifies the type of destruction, synchronous or asynchronous, to\r
+ perform on this object.\r
+\r
+ async_item\r
+ Asynchronous item used when destroying the object asynchronously.\r
+ This item is queued to an asynchronous thread to complete destruction\r
+ processing.\r
+\r
+ event\r
+ <a href="./cl_event_h.html#robo11">Event</a> used when destroying the object synchronously. A call to destroy\r
+ the object will wait on this event until the destruction has completed.\r
+\r
+ pfn_destroying\r
+ User-specified callback invoked to notify a user that an object has\r
+ been marked for destruction. This callback is invoked directly from\r
+ the thread destroying the object and is used to notify a user that\r
+ a parent object has invoked a child object's destructor.\r
+\r
+ pfn_cleanup\r
+ User-specified callback invoked as an object is undergoing destruction.\r
+ For object's destroyed asynchronously, this callback is invoked from\r
+ the context of the asynchronous destruction thread. Users may block\r
+ in the context of this thread; however, further destruction processing\r
+ will not continue until this callback returns.\r
+\r
+ pfn_free\r
+ User-specified callback invoked to notify a user that an object has\r
+ been destroyed and is ready for deallocation. Users should either\r
+ call <a href="#robo444">cl_obj_deinit</a> or <a href="#robo457">cl_obj_reset</a> from within this callback.\r
+\r
+ lock\r
+ A lock provided by the object.\r
+\r
+ parent_list\r
+ A list of relationships to parent objects that an object is dependent\r
+ on.\r
+\r
+ child_list\r
+ A list of all child objects that are dependent on this object.\r
+ Destroying this object will result in all related objects maintained\r
+ in the child list also being destroyed.\r
+\r
+ ref_cnt\r
+ A count of the number of objects still referencing this object.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo18">Object</a>, <a href="#robo443">cl_obj_construct</a>, <a href="#robo447">cl_obj_init</a>, <a href="#robo446">cl_obj_destroy</a>,\r
+ <a href="#robo444">cl_obj_deinit</a>, <a href="#robo461">cl_pfn_obj_call_t</a>, <a href="#robo442">cl_destroy_type_t</a>,\r
+ <a href="./cl_qcomppool_h.html#robo542">cl_pool_item_t</a>, cl_state_t, <a href="./cl_async_proc_h.html#robo269">cl_async_proc_item_t</a>,\r
+ cl_event_t, cl_spinlock_t, <a href="./cl_qlist_h.html#robo584">cl_qlist_t</a>, atomic32_t\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo459">[Functions]<a name="Component20Library3a20Object2fcl5fobj5ftype">\r
+Component Library: Object/cl_obj_type</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_obj_type</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Returns the type of an object.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_INLINE uint32_t CL_API\r
+<strong>cl_obj_type</strong>(\r
+ IN <a href="#robo458">cl_obj_t</a> * const p_obj )\r
+{\r
+ return p_obj->type;\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_obj\r
+ [in] A pointer to the object whose type to return.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> The type of the object, as specified in the call to <a href="#robo447">cl_obj_init</a>.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo18">Object</a>, <a href="#robo458">cl_obj_t</a>, <a href="#robo447">cl_obj_init</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo460">[Functions]<a name="Component20Library3a20Object2fcl5fobj5funlock">\r
+Component Library: Object/cl_obj_unlock</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_obj_unlock</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Releases an object's lock previously acquired by a call to <a href="#robo450">cl_obj_lock</a>.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_INLINE void CL_API\r
+<strong>cl_obj_unlock</strong>(\r
+ IN <a href="#robo458">cl_obj_t</a> * const p_obj )\r
+{\r
+ CL_ASSERT( p_obj->state == CL_INITIALIZED ||\r
+ p_obj->state == CL_DESTROYING );\r
+ <a href="./cl_spinlock_h.html#robo652">cl_spinlock_release</a>( &p_obj->lock );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_obj\r
+ [in] A pointer to the object whose lock to release.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> This function does not return a value.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo18">Object</a>, <a href="#robo458">cl_obj_t</a>, <a href="#robo450">cl_obj_lock</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo461">[Definitions]<a name="Component20Library3a20Object2fcl5fpfn5fobj5fcall5ft">\r
+Component Library: Object/cl_pfn_obj_call_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_pfn_obj_call_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_pfn_obj_call_t</strong> function type defines the prototype for functions\r
+ used to return objects to the user.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef void\r
+(CL_API *<strong>cl_pfn_obj_call_t</strong>)(\r
+ IN struct _cl_obj *p_obj );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_obj\r
+ [in] Pointer to a <a href="#robo458">cl_obj_t</a>. This is the object being returned to\r
+ the user.\r
+\r
+ RETURN VALUES\r
+ None.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This function type is provided as a prototype for functions provided\r
+ by users as parameters to the <a href="#robo447">cl_obj_init</a> function.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo18">Object</a>, <a href="#robo447">cl_obj_init</a>, <a href="#robo458">cl_obj_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo462">[Functions]<a name="Component20Library3a20Object2fcl5frel5falloc">\r
+Component Library: Object/cl_rel_alloc</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_rel_alloc</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Retrieves an object relationship item from the object manager.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT <a href="#robo455">cl_obj_rel_t</a>* CL_API\r
+<strong>cl_rel_alloc</strong>(void);\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> None.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> A reference to an allocated relationship object, or NULL if no relationship\r
+ object could be allocated.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This routine retrieves a <a href="#robo455">cl_obj_rel_t</a> structure from a pool maintained\r
+ by the object manager. The pool automatically grows as needed.\r
+\r
+ Relationship items are used to describe a dependent relationship between\r
+ a parent and child object. In cases where a child has a fixed number of\r
+ relationships, the user may be able to allocate and manage the <a href="#robo455">cl_obj_rel_t</a>\r
+ structures more efficiently than obtaining the structures through this call.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo18">Object</a>, <a href="#robo463">cl_rel_free</a>, <a href="#robo448">cl_obj_insert_rel</a>, <a href="#robo456">cl_obj_remove_rel</a>, <a href="#robo446">cl_obj_destroy</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo463">[Functions]<a name="Component20Library3a20Object2fcl5frel5ffree">\r
+Component Library: Object/cl_rel_free</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_rel_free</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Return a relationship object to the global object manager.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT void CL_API\r
+<strong>cl_rel_free</strong>(\r
+ IN <a href="#robo455">cl_obj_rel_t</a> * const p_rel );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_rel\r
+ [in] A reference to the relationship item to free.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> None.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> Relationship items must not be freed until both the parent and child\r
+ object have removed their references to one another. Relationship items\r
+ may be freed after calling <a href="#robo456">cl_obj_remove_rel</a> or after the associated\r
+ child object's free callback has been invoked. In the latter case, the\r
+ invalid relationship items are referenced by the child object's parent_list.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo18">Object</a>, <a href="#robo462">cl_rel_alloc</a>, <a href="#robo448">cl_obj_insert_rel</a>, <a href="#robo456">cl_obj_remove_rel</a>, <a href="#robo446">cl_obj_destroy</a>\r
+</pre>\r
+</span>\r
+</body>\r
+</html>\r
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">\r
+<html>\r
+<head>\r
+<link rel="stylesheet" href="../robodoc.css" type="text/css">\r
+<title>./inc_doc/complib/cl_passivelock_h.html</title>\r
+<!-- Source: ./inc/complib/cl_passivelock.h -->\r
+<!-- Generated with ROBODoc Version 4.99.22 (Mar 6 2006) -->\r
+</head>\r
+<body bgcolor="#FFFFFF">\r
+<a name="robo_top_of_doc">Generated from ./inc/complib/cl_passivelock.h</a> with <a href="http://sourceforge.net/projects/robodoc/">ROBODoc</a> v4.99.22 on Sun Apr 16 2006 17:39:24\r
+<br />\r
+<hr />\r
+\r
+<h2><a name="robo20">[Modules]<a name="Component20Library2fPassive20Lock">\r
+Component Library/Passive Lock</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_modules.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> Passive Lock\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The Passive Lock provides synchronization between multiple threads that\r
+ are sharing the lock with a single thread holding the lock exclusively.\r
+\r
+ Passive lock works exclusively between threads and cannot be used in\r
+ situations where the caller cannot be put into a waiting state.\r
+\r
+ The passive lock functions operate a <a href="#robo470">cl_plock_t</a> structure which should\r
+ be treated as opaque and should be manipulated only through the provided\r
+ functions.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Structures:\r
+ <a href="#robo470">cl_plock_t</a>\r
+\r
+ Initialization:\r
+ <a href="#robo465">cl_plock_construct</a>, <a href="#robo468">cl_plock_init</a>, <a href="#robo466">cl_plock_destroy</a>\r
+\r
+ Manipulation\r
+ <a href="#robo464">cl_plock_acquire</a>, <a href="#robo467">cl_plock_excl_acquire</a>, <a href="#robo469">cl_plock_release</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo464">[Functions]<a name="Component20Library3a20Passive20Lock2fcl5fplock5facquire">\r
+Component Library: Passive Lock/cl_plock_acquire</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_plock_acquire</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_plock_acquire</strong> function acquires a passive lock for\r
+ shared access.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_INLINE void CL_API\r
+<strong>cl_plock_acquire</strong>(\r
+ IN <a href="#robo470">cl_plock_t</a>* const p_lock )\r
+{\r
+ <a href="./cl_types_h.html#robo304">cl_status_t</a> status;\r
+\r
+ CL_ASSERT( p_lock );\r
+\r
+ status =\r
+ <a href="./cl_event_h.html#robo321">cl_event_wait_on</a>( &p_lock->reader_event, EVENT_NO_TIMEOUT, FALSE );\r
+ CL_ASSERT( status == CL_SUCCESS );\r
+\r
+ /*\r
+ * Increment the reader count to block a thread trying for exclusive\r
+ * access.\r
+ */\r
+ <a href="./cl_atomic_h.html#robo276">cl_atomic_inc</a>( &p_lock->reader_count );\r
+#ifdef DBG_PASSIVE_LOCKS\r
+ <a href="./cl_debug_h.html#robo307">cl_dbg_out</a>( "<strong>cl_plock_acquire</strong>: ReaderCount = %u\n",\r
+ p_lock->reader_count );\r
+#endif\r
+ /*\r
+ * Release the reader event to satisfy the wait of another reader\r
+ * or a writer.\r
+ */\r
+ <a href="./cl_event_h.html#robo320">cl_event_signal</a>( &p_lock->reader_event );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_lock\r
+ [in] Pointer to a <a href="#robo470">cl_plock_t</a> structure to acquire.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> This function does not return a value.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Passive Lock, <a href="#robo469">cl_plock_release</a>, <a href="#robo467">cl_plock_excl_acquire</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo465">[Functions]<a name="Component20Library3a20Passive20Lock2fcl5fplock5fconstruct">\r
+Component Library: Passive Lock/cl_plock_construct</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_plock_construct</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_plock_construct</strong> function initializes the state of a\r
+ passive lock.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_INLINE void CL_API\r
+<strong>cl_plock_construct</strong>(\r
+ IN <a href="#robo470">cl_plock_t</a>* const p_lock )\r
+{\r
+ CL_ASSERT( p_lock );\r
+\r
+ p_lock->reader_count = 0;\r
+ <a href="./cl_event_h.html#robo316">cl_event_construct</a>( &p_lock->reader_event );\r
+ <a href="./cl_event_h.html#robo316">cl_event_construct</a>( &p_lock->writer_event );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_lock\r
+ [in] Pointer to a <a href="#robo470">cl_plock_t</a> structure whose state to initialize.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> This function does not return a value.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> Allows calling <a href="#robo466">cl_plock_destroy</a> without first calling <a href="#robo468">cl_plock_init</a>.\r
+\r
+ Calling <strong>cl_plock_construct</strong> is a prerequisite to calling any other\r
+ passive lock function except <a href="#robo468">cl_plock_init</a>.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Passive Lock, <a href="#robo468">cl_plock_init</a>, <a href="#robo466">cl_plock_destroy</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo466">[Functions]<a name="Component20Library3a20Passive20Lock2fcl5fplock5fdestroy">\r
+Component Library: Passive Lock/cl_plock_destroy</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_plock_destroy</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_plock_destroy</strong> function performs any necessary cleanup\r
+ of a passive lock.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_INLINE void CL_API\r
+<strong>cl_plock_destroy</strong>(\r
+ IN <a href="#robo470">cl_plock_t</a>* const p_lock )\r
+{\r
+ CL_ASSERT( p_lock );\r
+ CL_ASSERT( p_lock->reader_count == 0 );\r
+\r
+ <a href="./cl_event_h.html#robo317">cl_event_destroy</a>( &p_lock->writer_event );\r
+ <a href="./cl_event_h.html#robo317">cl_event_destroy</a>( &p_lock->reader_event );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_lock\r
+ [in] Pointer to a <a href="#robo470">cl_plock_t</a> structure whose state to initialize.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> This function does not return a value.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> <strong>cl_plock_destroy</strong> performs any necessary cleanup of the specified\r
+ passive lock.\r
+\r
+ This function must only be called if <a href="#robo465">cl_plock_construct</a> or\r
+ <a href="#robo468">cl_plock_init</a> has been called. The passive lock must not be held\r
+ when calling this function.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Passive Lock, <a href="#robo465">cl_plock_construct</a>, <a href="#robo468">cl_plock_init</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo467">[Functions]<a name="Component20Library3a20Passive20Lock2fcl5fplock5fexcl5facquire">\r
+Component Library: Passive Lock/cl_plock_excl_acquire</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_plock_excl_acquire</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_plock_excl_acquire</strong> function acquires exclusive access\r
+ to a passive lock.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_INLINE void CL_API\r
+<strong>cl_plock_excl_acquire</strong>(\r
+ IN <a href="#robo470">cl_plock_t</a>* const p_lock )\r
+{\r
+ <a href="./cl_types_h.html#robo304">cl_status_t</a> status;\r
+\r
+ CL_ASSERT( p_lock );\r
+\r
+ /* Acquire the reader event. This will block new readers. */\r
+ status =\r
+ <a href="./cl_event_h.html#robo321">cl_event_wait_on</a>( &p_lock->reader_event, EVENT_NO_TIMEOUT, FALSE );\r
+ CL_ASSERT( status == CL_SUCCESS );\r
+\r
+ /* Wait for the writer event until all readers have exited. */\r
+ while( p_lock->reader_count )\r
+ {\r
+#ifdef DBG_PASSIVE_LOCKS\r
+ <a href="./cl_debug_h.html#robo307">cl_dbg_out</a>( "<strong>cl_plock_excl_acquire</strong>: ReaderCount = %u\n",\r
+ p_lock->reader_count );\r
+#endif\r
+ status =\r
+ <a href="./cl_event_h.html#robo321">cl_event_wait_on</a>( &p_lock->writer_event, EVENT_NO_TIMEOUT, FALSE );\r
+ CL_ASSERT( status == CL_SUCCESS );\r
+ }\r
+\r
+#ifdef DBG_PASSIVE_LOCKS\r
+ <a href="./cl_debug_h.html#robo307">cl_dbg_out</a>( "<strong>cl_plock_excl_acquire</strong>: Exit\n" );\r
+#endif\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_lock\r
+ [in] Pointer to a <a href="#robo470">cl_plock_t</a> structure to acquire exclusively.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> This function does not return a value.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Passive Lock, <a href="#robo469">cl_plock_release</a>, <a href="#robo464">cl_plock_acquire</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo468">[Functions]<a name="Component20Library3a20Passive20Lock2fcl5fplock5finit">\r
+Component Library: Passive Lock/cl_plock_init</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_plock_init</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_plock_init</strong> function initializes a passive lock.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_INLINE <a href="./cl_types_h.html#robo304">cl_status_t</a> CL_API\r
+<strong>cl_plock_init</strong>(\r
+ IN <a href="#robo470">cl_plock_t</a>* const p_lock )\r
+{\r
+ <a href="./cl_types_h.html#robo304">cl_status_t</a> status;\r
+\r
+ CL_ASSERT( p_lock );\r
+\r
+ <a href="#robo465">cl_plock_construct</a>( p_lock );\r
+\r
+ status = <a href="./cl_event_h.html#robo318">cl_event_init</a>( &p_lock->writer_event, FALSE );\r
+ if( status != CL_SUCCESS )\r
+ {\r
+ <a href="#robo466">cl_plock_destroy</a>( p_lock );\r
+ return( status );\r
+ }\r
+\r
+ status = <a href="./cl_event_h.html#robo318">cl_event_init</a>( &p_lock->reader_event, FALSE );\r
+ if( status != CL_SUCCESS )\r
+ {\r
+ <a href="#robo466">cl_plock_destroy</a>( p_lock );\r
+ return( status );\r
+ }\r
+\r
+ /*\r
+ * Set the writer event to signalled so that the first\r
+ * wait operation succeeds.\r
+ */\r
+ status = <a href="./cl_event_h.html#robo320">cl_event_signal</a>( &p_lock->writer_event );\r
+ if( status != CL_SUCCESS )\r
+ {\r
+ <a href="#robo466">cl_plock_destroy</a>( p_lock );\r
+ return( status );\r
+ }\r
+\r
+ /*\r
+ * Set the reader event to signalled so that the first\r
+ * wait operation succeeds.\r
+ */\r
+ status = <a href="./cl_event_h.html#robo320">cl_event_signal</a>( &p_lock->reader_event );\r
+ if( status != CL_SUCCESS )\r
+ {\r
+ <a href="#robo466">cl_plock_destroy</a>( p_lock );\r
+ return( status );\r
+ }\r
+\r
+ return( CL_SUCCESS );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_lock\r
+ [in] Pointer to a <a href="#robo470">cl_plock_t</a> structure to initialize.\r
+\r
+ RETURN VALUES\r
+ CL_SUCCESS if the passive lock was initialized successfully.\r
+\r
+ CL_ERROR otherwise.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> Allows calling <a href="#robo464">cl_plock_acquire</a>, <a href="#robo469">cl_plock_release</a>,\r
+ <a href="#robo467">cl_plock_excl_acquire</a>, and cl_plock_excl_release.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Passive Lock, <a href="#robo465">cl_plock_construct</a>, <a href="#robo466">cl_plock_destroy</a>,\r
+ <a href="#robo467">cl_plock_excl_acquire</a>, cl_plock_excl_release,\r
+ <a href="#robo464">cl_plock_acquire</a>, <a href="#robo469">cl_plock_release</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo469">[Functions]<a name="Component20Library3a20Passive20Lock2fcl5fplock5frelease">\r
+Component Library: Passive Lock/cl_plock_release</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_plock_release</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_plock_release</strong> function releases a passive lock from\r
+ shared or exclusive access.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_INLINE void CL_API\r
+<strong>cl_plock_release</strong>(\r
+ IN <a href="#robo470">cl_plock_t</a>* const p_lock )\r
+{\r
+ CL_ASSERT( p_lock );\r
+\r
+ if( p_lock->reader_count )\r
+ {\r
+\r
+ /*\r
+ * Decrement the count to allow a thread waiting for exclusive\r
+ * access to continue.\r
+ */\r
+ <a href="./cl_atomic_h.html#robo275">cl_atomic_dec</a>( &p_lock->reader_count );\r
+\r
+ #ifdef DBG_PASSIVE_LOCKS\r
+ <a href="./cl_debug_h.html#robo307">cl_dbg_out</a>( "<strong>cl_plock_release</strong>: ReaderCount = %u\n",\r
+ p_lock->reader_count );\r
+ #endif\r
+\r
+ /* Release a writer, if any. */\r
+ <a href="./cl_event_h.html#robo320">cl_event_signal</a>( &p_lock->writer_event );\r
+ }\r
+ else\r
+ {\r
+ /* Release threads waiting to acquire the lock. */\r
+ <a href="./cl_event_h.html#robo320">cl_event_signal</a>( &p_lock->reader_event );\r
+ <a href="./cl_event_h.html#robo320">cl_event_signal</a>( &p_lock->writer_event );\r
+\r
+ #ifdef DBG_PASSIVE_LOCKS\r
+ <a href="./cl_debug_h.html#robo307">cl_dbg_out</a>( "<strong>cl_plock_release</strong>: Exit\n" );\r
+ #endif\r
+ }\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_lock\r
+ [in] Pointer to a <a href="#robo470">cl_plock_t</a> structure to release.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> This function does not return a value.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Passive Lock, <a href="#robo464">cl_plock_acquire</a>, <a href="#robo467">cl_plock_excl_acquire</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo470">[Structures]<a name="Component20Library3a20Passive20Lock2fcl5fplock5ft">\r
+Component Library: Passive Lock/cl_plock_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_plock_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Passive Lock structure.\r
+\r
+ The <strong>cl_plock_t</strong> structure should be treated as opaque and should\r
+ be manipulated only through the provided functions.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef struct _cl_plock\r
+{\r
+ cl_event_t reader_event;\r
+ cl_event_t writer_event;\r
+ atomic32_t reader_count;\r
+\r
+} <strong>cl_plock_t</strong>;\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> reader_event\r
+ <a href="./cl_event_h.html#robo11">Event</a> used to synchronize shared access to the lock.\r
+\r
+ writer_event\r
+ <a href="./cl_event_h.html#robo11">Event</a> used to synchronize exclusive access to the lock.\r
+\r
+ reader_count\r
+ Number of threads holding the lock for shared access.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Passive Lock\r
+</pre>\r
+</span>\r
+</body>\r
+</html>\r
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">\r
+<html>\r
+<head>\r
+<link rel="stylesheet" href="../robodoc.css" type="text/css">\r
+<title>./inc_doc/complib/cl_perf_h.html</title>\r
+<!-- Source: ./inc/complib/cl_perf.h -->\r
+<!-- Generated with ROBODoc Version 4.99.22 (Mar 6 2006) -->\r
+</head>\r
+<body bgcolor="#FFFFFF">\r
+<a name="robo_top_of_doc">Generated from ./inc/complib/cl_perf.h</a> with <a href="http://sourceforge.net/projects/robodoc/">ROBODoc</a> v4.99.22 on Sun Apr 16 2006 17:39:24\r
+<br />\r
+<hr />\r
+\r
+<h2><a name="robo21">[Modules]<a name="Component20Library2fPerformance20Counters">\r
+Component Library/Performance Counters</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_modules.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> Performance Counters\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The performance counters allows timing operations to benchmark\r
+ software performance and help identify potential bottlenecks.\r
+\r
+ All performance counters are NULL macros when disabled, preventing them\r
+ from adversly affecting performance in builds where the counters are not\r
+ used.\r
+\r
+ Each counter records elapsed time in micro-seconds, minimum time elapsed,\r
+ and total number of samples.\r
+\r
+ Each counter is independently protected by a spinlock, allowing use of\r
+ the counters in multi-processor environments.\r
+\r
+ The impact of serializing access to performance counters is measured,\r
+ allowing measurements to be corrected as necessary.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> Performance counters do impact performance, and should only be enabled\r
+ when gathering data. Counters can be enabled or disabled on a per-user\r
+ basis at compile time. To enable the counters, users should define\r
+ the PERF_TRACK_ON keyword before including the <a href="#robo_top_of_doc">cl_perf.h</a> file.\r
+ Undefining the PERF_TRACK_ON keyword disables the performance counters.\r
+ When disabled, all performance tracking calls resolve to no-ops.\r
+\r
+ When using performance counters, it is the user's responsibility to\r
+ maintain the counter indexes. It is recomended that users define an\r
+ enumerated type to use for counter indexes. It improves readability\r
+ and simplifies maintenance by reducing the work necessary in managing\r
+ the counter indexes.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Structures:\r
+ cl_perf_t\r
+\r
+ Initialization:\r
+ <a href="#robo472">cl_perf_construct</a>, <a href="#robo476">cl_perf_init</a>, <a href="#robo473">cl_perf_destroy</a>\r
+\r
+ Manipulation\r
+ <a href="#robo478">cl_perf_reset</a>, <a href="#robo474">cl_perf_display</a>, <a href="#robo479">cl_perf_start</a>, <a href="#robo481">cl_perf_update</a>,\r
+ <a href="#robo477">cl_perf_log</a>, <a href="#robo480">cl_perf_stop</a>\r
+\r
+ Macros:\r
+ <a href="#robo483">PERF_DECLARE</a>, <a href="#robo484">PERF_DECLARE_START</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo471">[Definitions]<a name="Component20Library3a20Performance20Counters2fcl5fperf5fclr">\r
+Component Library: Performance Counters/cl_perf_clr</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_perf_clr</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_perf_clr</strong> macro clears a counter variable.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>void\r
+<a href="#robo475">cl_perf_inc</a>(\r
+ IN const uintn_t index );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> index\r
+ [in] Index of the performance counter to set.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This macro has no effect when performance counters are disabled.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Performance Counters, <a href="#robo483">PERF_DECLARE</a>, <a href="#robo484">PERF_DECLARE_START</a>, <a href="#robo477">cl_perf_log</a>,\r
+ <a href="#robo481">cl_perf_update</a>, <a href="#robo480">cl_perf_stop</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo472">[Functions]<a name="Component20Library3a20Performance20Counters2fcl5fperf5fconstruct">\r
+Component Library: Performance Counters/cl_perf_construct</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_perf_construct</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_perf_construct</strong> macro constructs a performance\r
+ tracking container.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>void\r
+<strong>cl_perf_construct</strong>(\r
+ IN cl_perf_t* const p_perf );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_perf\r
+ [in] Pointer to a performance counter container to construct.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> This function does not return a value.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> <strong>cl_perf_construct</strong> allows calling <a href="#robo473">cl_perf_destroy</a> without first calling\r
+ <a href="#robo476">cl_perf_init</a>.\r
+\r
+ Calling <strong>cl_perf_construct</strong> is a prerequisite to calling any other\r
+ perfromance counter function except <a href="#robo476">cl_perf_init</a>.\r
+\r
+ This function is implemented as a macro and has no effect when\r
+ performance counters are disabled.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Performance Counters, <a href="#robo476">cl_perf_init</a>, <a href="#robo473">cl_perf_destroy</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo473">[Functions]<a name="Component20Library3a20Performance20Counters2fcl5fperf5fdestroy">\r
+Component Library: Performance Counters/cl_perf_destroy</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_perf_destroy</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_perf_destroy</strong> function destroys a performance tracking container.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>void\r
+<strong>cl_perf_destroy</strong>(\r
+ IN cl_perf_t* const p_perf,\r
+ IN const boolean_t display );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_perf\r
+ [in] Pointer to a performance counter container to destroy.\r
+\r
+ display\r
+ [in] If TRUE, causes the performance counters to be displayed.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> This function does not return a value.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> <strong>cl_perf_destroy</strong> frees all resources allocated in a call to <a href="#robo476">cl_perf_init</a>.\r
+ If the display parameter is set to TRUE, displays all counter values\r
+ before deallocating resources.\r
+\r
+ This function should only be called after a call to <a href="#robo472">cl_perf_construct</a>\r
+ or <a href="#robo476">cl_perf_init</a>.\r
+\r
+ This function is implemented as a macro and has no effect when\r
+ performance counters are disabled.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Performance Counters, <a href="#robo472">cl_perf_construct</a>, <a href="#robo476">cl_perf_init</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo474">[Functions]<a name="Component20Library3a20Performance20Counters2fcl5fperf5fdisplay">\r
+Component Library: Performance Counters/cl_perf_display</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_perf_display</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_perf_display</strong> function displays the current performance\r
+ counter values.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>void\r
+<strong>cl_perf_display</strong>(\r
+ IN const cl_perf_t* const p_perf );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_perf\r
+ [in] Pointer to a performance counter container whose counter\r
+ values to display.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> This function does not return a value.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This function is implemented as a macro and has no effect when\r
+ performance counters are disabled.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Performance Counters, <a href="#robo476">cl_perf_init</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo475">[Definitions]<a name="Component20Library3a20Performance20Counters2fcl5fperf5finc">\r
+Component Library: Performance Counters/cl_perf_inc</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_perf_inc</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_perf_inc</strong> macro increments a counter variable by one.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>void\r
+<strong>cl_perf_inc</strong>(\r
+ IN const uintn_t index );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> index\r
+ [in] Index of the performance counter to set.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This macro has no effect when performance counters are disabled.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Performance Counters, <a href="#robo483">PERF_DECLARE</a>, <a href="#robo484">PERF_DECLARE_START</a>, <a href="#robo477">cl_perf_log</a>,\r
+ <a href="#robo481">cl_perf_update</a>, <a href="#robo480">cl_perf_stop</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo476">[Functions]<a name="Component20Library3a20Performance20Counters2fcl5fperf5finit">\r
+Component Library: Performance Counters/cl_perf_init</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_perf_init</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_perf_init</strong> function initializes a performance counter container\r
+ for use.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre><a href="./cl_types_h.html#robo304">cl_status_t</a>\r
+<strong>cl_perf_init</strong>(\r
+ IN cl_perf_t* const p_perf,\r
+ IN const uintn_t num_counters );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_perf\r
+ [in] Pointer to a performance counter container to initalize.\r
+\r
+ num_cntrs\r
+ [in] Number of counters to allocate in the container.\r
+\r
+ RETURN VALUES\r
+ CL_SUCCESS if initialization was successful.\r
+\r
+ CL_INSUFFICIENT_MEMORY if there was not enough memory to initialize\r
+ the container.\r
+\r
+ CL_ERROR if an error was encountered initializing the locks for the\r
+ performance counters.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This function allocates all memory required for the requested number of\r
+ counters and initializes all locks protecting those counters. After a\r
+ successful initialization, <strong>cl_perf_init</strong> calibrates the counters and\r
+ resets their value.\r
+\r
+ This function is implemented as a macro and has no effect when\r
+ performance counters are disabled.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Performance Counters, <a href="#robo472">cl_perf_construct</a>, <a href="#robo473">cl_perf_destroy</a>, <a href="#robo474">cl_perf_display</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo477">[Definitions]<a name="Component20Library3a20Performance20Counters2fcl5fperf5flog">\r
+Component Library: Performance Counters/cl_perf_log</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_perf_log</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_perf_log</strong> macro adds a given timing sample to a\r
+ counter in a performance counter container.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>void\r
+<strong>cl_perf_log</strong>(\r
+ IN cl_perf_t* const p_perf,\r
+ IN const uintn_t index,\r
+ IN const uint64_t pc_total_time );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_perf\r
+ [in] Pointer to a performance counter container to whose counter\r
+ the sample should be added.\r
+\r
+ index\r
+ [in] Number of the performance counter to update with a new sample.\r
+\r
+ pc_total_time\r
+ [in] Total elapsed time for the sample being added.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> This function does not return a value.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This macro has no effect when performance counters are disabled.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Performance Counters, <a href="#robo483">PERF_DECLARE</a>, <a href="#robo484">PERF_DECLARE_START</a>, <a href="#robo479">cl_perf_start</a>,\r
+ <a href="#robo481">cl_perf_update</a>, <a href="#robo480">cl_perf_stop</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo478">[Functions]<a name="Component20Library3a20Performance20Counters2fcl5fperf5freset">\r
+Component Library: Performance Counters/cl_perf_reset</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_perf_reset</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_perf_reset</strong> function resets the counters contained in\r
+ a performance tracking container.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>void\r
+<strong>cl_perf_reset</strong>(\r
+ IN cl_perf_t* const p_perf );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_perf\r
+ [in] Pointer to a performance counter container whose counters\r
+ to reset.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> This function does not return a value.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This function is implemented as a macro and has no effect when\r
+ performance counters are disabled.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Performance Counters\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo479">[Definitions]<a name="Component20Library3a20Performance20Counters2fcl5fperf5fstart">\r
+Component Library: Performance Counters/cl_perf_start</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_perf_start</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_perf_start</strong> macro sets the starting value of a timed sequence.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>void\r
+<strong>cl_perf_start</strong>(\r
+ IN const uintn_t index );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> index\r
+ [in] Index of the performance counter to set.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This macro has no effect when performance counters are disabled.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Performance Counters, <a href="#robo483">PERF_DECLARE</a>, <a href="#robo484">PERF_DECLARE_START</a>, <a href="#robo477">cl_perf_log</a>,\r
+ <a href="#robo481">cl_perf_update</a>, <a href="#robo480">cl_perf_stop</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo480">[Definitions]<a name="Component20Library3a20Performance20Counters2fcl5fperf5fstop">\r
+Component Library: Performance Counters/cl_perf_stop</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_perf_stop</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <a href="#robo477">cl_perf_log</a> macro updates a counter in a performance counter\r
+ container with a new timing sample.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>void\r
+<strong>cl_perf_stop</strong>(\r
+ IN cl_perf_t* const p_perf,\r
+ IN const uintn_t index );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_perf\r
+ [in] Pointer to a performance counter container to whose counter\r
+ a sample should be added.\r
+\r
+ index\r
+ [in] Number of the performance counter to update with a new sample.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> This function does not return a value.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> The ending time stamp is taken and elapsed time calculated before updating\r
+ the specified counter.\r
+\r
+ This macro has no effect when performance counters are disabled.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Performance Counters, <a href="#robo483">PERF_DECLARE</a>, <a href="#robo484">PERF_DECLARE_START</a>, <a href="#robo479">cl_perf_start</a>,\r
+ <a href="#robo477">cl_perf_log</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo481">[Definitions]<a name="Component20Library3a20Performance20Counters2fcl5fperf5fupdate">\r
+Component Library: Performance Counters/cl_perf_update</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_perf_update</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_perf_update</strong> macro adds a timing sample based on a provided start\r
+ time to a counter in a performance counter container.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>void\r
+<strong>cl_perf_update</strong>(\r
+ IN cl_perf_t* const p_perf,\r
+ IN const uintn_t index,\r
+ IN const uint64_t start_time );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_perf\r
+ [in] Pointer to a performance counter container to whose counter\r
+ the sample should be added.\r
+\r
+ index\r
+ [in] Number of the performance counter to update with a new sample.\r
+\r
+ start_time\r
+ [in] Timestamp to use as the start time for the timing sample.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> This function does not return a value.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This macro has no effect when performance counters are disabled.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Performance Counters, <a href="#robo483">PERF_DECLARE</a>, <a href="#robo484">PERF_DECLARE_START</a>, <a href="#robo479">cl_perf_start</a>,\r
+ cl_perf_lob, <a href="#robo480">cl_perf_stop</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo482">[Definitions]<a name="Component20Library3a20Performance20Counters2fcl5fperf5fupdate5fctr">\r
+Component Library: Performance Counters/cl_perf_update_ctr</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_perf_update_ctr</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_perf_update_ctr</strong> macro updates a counter in a performance\r
+ counter container.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>void\r
+<strong>cl_perf_update_ctr</strong>(\r
+ IN cl_perf_t* const p_perf,\r
+ IN const uintn_t index );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_perf\r
+ [in] Pointer to a performance counter container to whose counter\r
+ the sample should be added.\r
+\r
+ index\r
+ [in] Number of the performance counter to update with a new sample.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> This function does not return a value.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This macro has no effect when performance counters are disabled.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Performance Counters, <a href="#robo483">PERF_DECLARE</a>, <a href="#robo484">PERF_DECLARE_START</a>, <a href="#robo479">cl_perf_start</a>,\r
+ cl_perf_lob, <a href="#robo480">cl_perf_stop</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo483">[Definitions]<a name="Component20Library3a20Performance20Counters2fPERF5fDECLARE">\r
+Component Library: Performance Counters/PERF_DECLARE</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>PERF_DECLARE</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>PERF_DECLARE</strong> macro declares a performance counter variable used\r
+ to store the starting time of a timing sequence.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>* <strong>PERF_DECLARE</strong>( index )\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> index\r
+ [in] Index of the performance counter for which to use this\r
+ variable.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> Variables should generally be declared on the stack to support\r
+ multi-threading. In cases where a counter needs to be used to\r
+ time operations accross multiple functions, care must be taken to\r
+ ensure that the start time stored in this variable is not overwritten\r
+ before the related performance counter has been updated.\r
+\r
+ This macro has no effect when performance counters are disabled.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Performance Counters, <a href="#robo484">PERF_DECLARE_START</a>, <a href="#robo479">cl_perf_start</a>, <a href="#robo477">cl_perf_log</a>,\r
+ <a href="#robo480">cl_perf_stop</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo484">[Definitions]<a name="Component20Library3a20Performance20Counters2fPERF5fDECLARE5fSTART">\r
+Component Library: Performance Counters/PERF_DECLARE_START</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>PERF_DECLARE_START</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>PERF_DECLARE_START</strong> macro declares a performance counter variable\r
+ and sets it to the starting time of a timed sequence.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>* <strong>PERF_DECLARE_START</strong>( index )\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> index\r
+ [in] Index of the performance counter for which to use this\r
+ variable.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> Variables should generally be declared on the stack to support\r
+ multi-threading.\r
+\r
+ This macro has no effect when performance counters are disabled.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Performance Counters, <a href="#robo483">PERF_DECLARE</a>, <a href="#robo479">cl_perf_start</a>, <a href="#robo477">cl_perf_log</a>,\r
+ <a href="#robo480">cl_perf_stop</a>\r
+</pre>\r
+</span>\r
+</body>\r
+</html>\r
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">\r
+<html>\r
+<head>\r
+<link rel="stylesheet" href="../robodoc.css" type="text/css">\r
+<title>./inc_doc/complib/cl_pool_h.html</title>\r
+<!-- Source: ./inc/complib/cl_pool.h -->\r
+<!-- Generated with ROBODoc Version 4.99.22 (Mar 6 2006) -->\r
+</head>\r
+<body bgcolor="#FFFFFF">\r
+<a name="robo_top_of_doc">Generated from ./inc/complib/cl_pool.h</a> with <a href="http://sourceforge.net/projects/robodoc/">ROBODoc</a> v4.99.22 on Sun Apr 16 2006 17:39:24\r
+<br />\r
+<hr />\r
+\r
+<h2><a name="robo24">[Modules]<a name="Component20Library2fPool">\r
+Component Library/Pool</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_modules.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>Pool</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The pool provides a self-contained and self-sustaining pool\r
+ of user defined objects.\r
+\r
+ To aid in object oriented design, the pool provides the user\r
+ the ability to specify callbacks that are invoked for each object for\r
+ construction, initialization, and destruction. Constructor and destructor\r
+ callback functions may not fail.\r
+\r
+ A pool does not return memory to the system as the user returns\r
+ objects to the pool. The only method of returning memory to the system is\r
+ to destroy the pool.\r
+\r
+ The <strong>Pool</strong> functions operate on a <a href="#robo538">cl_pool_t</a> structure which should be treated\r
+ as opaque and should be manipulated only through the provided functions.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Structures:\r
+ <a href="#robo538">cl_pool_t</a>\r
+\r
+ Callbacks:\r
+ <a href="#robo530">cl_pfn_pool_init_t</a>, <a href="#robo529">cl_pfn_pool_dtor_t</a>\r
+\r
+ Initialization/Destruction:\r
+ <a href="#robo531">cl_pool_construct</a>, <a href="#robo536">cl_pool_init</a>, <a href="#robo533">cl_pool_destroy</a>\r
+\r
+ Manipulation:\r
+ <a href="#robo534">cl_pool_get</a>, <a href="#robo537">cl_pool_put</a>, <a href="#robo535">cl_pool_grow</a>\r
+\r
+ Attributes:\r
+ <a href="#robo528">cl_is_pool_inited</a>, <a href="#robo532">cl_pool_count</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo528">[Functions]<a name="Component20Library3a20Pool2fcl5fis5fpool5finited">\r
+Component Library: Pool/cl_is_pool_inited</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_is_pool_inited</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_is_pool_inited</strong> function returns whether a pool was successfully\r
+ initialized.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_INLINE uint32_t CL_API\r
+<strong>cl_is_pool_inited</strong>(\r
+ IN const <a href="#robo538">cl_pool_t</a>* const p_pool )\r
+{\r
+ /* CL_ASSERT that a non-null pointer is provided. */\r
+ CL_ASSERT( p_pool );\r
+ return( <a href="./cl_qcomppool_h.html#robo539">cl_is_qcpool_inited</a>( &p_pool->qcpool ) );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_pool\r
+ [in] Pointer to a <a href="#robo538">cl_pool_t</a> structure whose initialization state\r
+ to check.\r
+\r
+ RETURN VALUES\r
+ TRUE if the pool was initialized successfully.\r
+\r
+ FALSE otherwise.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> Allows checking the state of a pool to determine if invoking member\r
+ functions is appropriate.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo24">Pool</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo529">[Definitions]<a name="Component20Library3a20Pool2fcl5fpfn5fpool5fdtor5ft">\r
+Component Library: Pool/cl_pfn_pool_dtor_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_pfn_pool_dtor_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_pfn_pool_dtor_t</strong> function type defines the prototype for\r
+ functions used as destructor for objects being deallocated by a\r
+ pool.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef void\r
+(CL_API *<strong>cl_pfn_pool_dtor_t</strong>)(\r
+ IN void* const p_object,\r
+ IN void* context );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_object\r
+ [in] Pointer to an object to destruct.\r
+\r
+ context\r
+ [in] Context provided in the call to <a href="#robo536">cl_pool_init</a>.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> This function does not return a value.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This function type is provided as function prototype reference for\r
+ the function provided by the user as an optional parameter to the\r
+ <a href="#robo536">cl_pool_init</a> function.\r
+\r
+ The destructor is invoked once per allocated object, allowing the user\r
+ to perform any necessary cleanup. Users should not attempt to deallocate\r
+ the memory for the object, as the pool manages object\r
+ allocation and deallocation.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo24">Pool</a>, <a href="#robo536">cl_pool_init</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo530">[Definitions]<a name="Component20Library3a20Pool2fcl5fpfn5fpool5finit5ft">\r
+Component Library: Pool/cl_pfn_pool_init_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_pfn_pool_init_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_pfn_pool_init_t</strong> function type defines the prototype for\r
+ functions used as initializers for objects being allocated by a\r
+ pool.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef <a href="./cl_types_h.html#robo304">cl_status_t</a>\r
+(CL_API *<strong>cl_pfn_pool_init_t</strong>)(\r
+ IN void* const p_object,\r
+ IN void* context );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_object\r
+ [in] Pointer to an object to initialize.\r
+\r
+ context\r
+ [in] Context provided in a call to <a href="#robo536">cl_pool_init</a>.\r
+\r
+ RETURN VALUES\r
+ Return CL_SUCCESS to indicates that initialization of the object\r
+ was successful and initialization of further objects may continue.\r
+\r
+ Other <a href="./cl_types_h.html#robo304">cl_status_t</a> values will be returned by <a href="#robo536">cl_pool_init</a>\r
+ and <a href="#robo535">cl_pool_grow</a>.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This function type is provided as function prototype reference for\r
+ the function provided by the user as an optional parameter to the\r
+ <a href="#robo536">cl_pool_init</a> function.\r
+\r
+ The initializer is invoked once per allocated object, allowing the user\r
+ to trap initialization failures. Returning a status other than CL_SUCCESS\r
+ aborts a grow operation, initiated either through <a href="#robo536">cl_pool_init</a> or\r
+ <a href="#robo535">cl_pool_grow</a>, and causes the initiating function to fail.\r
+ Any non-CL_SUCCESS status will be returned by the function that initiated\r
+ the grow operation.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo24">Pool</a>, <a href="#robo536">cl_pool_init</a>, <a href="#robo535">cl_pool_grow</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo531">[Functions]<a name="Component20Library3a20Pool2fcl5fpool5fconstruct">\r
+Component Library: Pool/cl_pool_construct</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_pool_construct</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_pool_construct</strong> function constructs a pool.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT void CL_API\r
+<strong>cl_pool_construct</strong>(\r
+ IN <a href="#robo538">cl_pool_t</a>* const p_pool );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_pool\r
+ [in] Pointer to a <a href="#robo538">cl_pool_t</a> structure whose state to initialize.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> This function does not return a value.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> Allows calling <a href="#robo536">cl_pool_init</a>, <a href="#robo533">cl_pool_destroy</a>, and <a href="#robo528">cl_is_pool_inited</a>.\r
+\r
+ Calling <strong>cl_pool_construct</strong> is a prerequisite to calling any other\r
+ pool function except <a href="#robo536">cl_pool_init</a>.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo24">Pool</a>, <a href="#robo536">cl_pool_init</a>, <a href="#robo533">cl_pool_destroy</a>, <a href="#robo528">cl_is_pool_inited</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo532">[Functions]<a name="Component20Library3a20Pool2fcl5fpool5fcount">\r
+Component Library: Pool/cl_pool_count</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_pool_count</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_pool_count</strong> function returns the number of available objects\r
+ in a pool.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_INLINE size_t CL_API\r
+<strong>cl_pool_count</strong>(\r
+ IN <a href="#robo538">cl_pool_t</a>* const p_pool )\r
+{\r
+ CL_ASSERT( p_pool );\r
+ return( <a href="./cl_qcomppool_h.html#robo544">cl_qcpool_count</a>( &p_pool->qcpool ) );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_pool\r
+ [in] Pointer to a <a href="#robo538">cl_pool_t</a> structure for which the number of\r
+ available objects is requested.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> Returns the number of objects available in the specified pool.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo24">Pool</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo533">[Functions]<a name="Component20Library3a20Pool2fcl5fpool5fdestroy">\r
+Component Library: Pool/cl_pool_destroy</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_pool_destroy</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_pool_destroy</strong> function destroys a pool.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_INLINE void CL_API\r
+<strong>cl_pool_destroy</strong>(\r
+ IN <a href="#robo538">cl_pool_t</a>* const p_pool )\r
+{\r
+ CL_ASSERT( p_pool );\r
+ <a href="./cl_qcomppool_h.html#robo545">cl_qcpool_destroy</a>( &p_pool->qcpool );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_pool\r
+ [in] Pointer to a <a href="#robo538">cl_pool_t</a> structure to destroy.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> This function does not return a value.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> All memory allocated for objects is freed. The destructor callback,\r
+ if any, will be invoked for every allocated object. Further operations\r
+ on the pool should not be attempted after <strong>cl_pool_destroy</strong>\r
+ is invoked.\r
+\r
+ This function should only be called after a call to\r
+ <a href="#robo531">cl_pool_construct</a> or <a href="#robo536">cl_pool_init</a>.\r
+\r
+ In a debug build, <strong>cl_pool_destroy</strong> asserts that all objects are in\r
+ the pool.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo24">Pool</a>, <a href="#robo531">cl_pool_construct</a>, <a href="#robo536">cl_pool_init</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo534">[Functions]<a name="Component20Library3a20Pool2fcl5fpool5fget">\r
+Component Library: Pool/cl_pool_get</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_pool_get</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_pool_get</strong> function retrieves an object from a pool.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_INLINE void* CL_API\r
+<strong>cl_pool_get</strong>(\r
+ IN <a href="#robo538">cl_pool_t</a>* const p_pool )\r
+{\r
+ cl_pool_obj_t *p_pool_obj;\r
+\r
+ CL_ASSERT( p_pool );\r
+\r
+ p_pool_obj = (cl_pool_obj_t*)<a href="./cl_qcomppool_h.html#robo546">cl_qcpool_get</a>( &p_pool->qcpool );\r
+ if( !p_pool_obj )\r
+ return( NULL );\r
+\r
+ CL_ASSERT( p_pool_obj->list_obj.p_object );\r
+ return( (void*)p_pool_obj->list_obj.p_object );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_pool\r
+ [in] Pointer to a <a href="#robo538">cl_pool_t</a> structure from which to retrieve\r
+ an object.\r
+\r
+ RETURN VALUES\r
+ Returns a pointer to an object.\r
+\r
+ Returns NULL if the pool is empty and can not be grown automatically.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> <strong>cl_pool_get</strong> returns the object at the head of the pool. If the pool is\r
+ empty, it is automatically grown to accommodate this request unless the\r
+ grow_size parameter passed to the <a href="#robo536">cl_pool_init</a> function was zero.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo24">Pool</a>, cl_pool_get_tail, <a href="#robo537">cl_pool_put</a>, <a href="#robo535">cl_pool_grow</a>, <a href="#robo532">cl_pool_count</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo535">[Functions]<a name="Component20Library3a20Pool2fcl5fpool5fgrow">\r
+Component Library: Pool/cl_pool_grow</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_pool_grow</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_pool_grow</strong> function grows a pool by\r
+ the specified number of objects.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_INLINE <a href="./cl_types_h.html#robo304">cl_status_t</a> CL_API\r
+<strong>cl_pool_grow</strong>(\r
+ IN <a href="#robo538">cl_pool_t</a>* const p_pool,\r
+ IN const size_t obj_count )\r
+{\r
+ CL_ASSERT( p_pool );\r
+ return( <a href="./cl_qcomppool_h.html#robo547">cl_qcpool_grow</a>( &p_pool->qcpool, obj_count ) );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_pool\r
+ [in] Pointer to a <a href="#robo538">cl_pool_t</a> structure whose capacity to grow.\r
+\r
+ obj_count\r
+ [in] Number of objects by which to grow the pool.\r
+\r
+ RETURN VALUES\r
+ CL_SUCCESS if the pool grew successfully.\r
+\r
+ CL_INSUFFICIENT_MEMORY if there was not enough memory to grow the\r
+ pool.\r
+\r
+ <a href="./cl_types_h.html#robo304">cl_status_t</a> value returned by optional initialization callback function\r
+ specified by the pfn_initializer parameter passed to the\r
+ <a href="#robo536">cl_pool_init</a> function.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> It is not necessary to call <strong>cl_pool_grow</strong> if the pool is\r
+ configured to grow automatically.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo24">Pool</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo536">[Functions]<a name="Component20Library3a20Pool2fcl5fpool5finit">\r
+Component Library: Pool/cl_pool_init</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_pool_init</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_pool_init</strong> function initializes a pool for use.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT <a href="./cl_types_h.html#robo304">cl_status_t</a> CL_API\r
+<strong>cl_pool_init</strong>(\r
+ IN <a href="#robo538">cl_pool_t</a>* const p_pool,\r
+ IN const size_t min_count,\r
+ IN const size_t max_count,\r
+ IN const size_t grow_size,\r
+ IN const size_t object_size,\r
+ IN <a href="#robo530">cl_pfn_pool_init_t</a> pfn_initializer OPTIONAL,\r
+ IN <a href="#robo529">cl_pfn_pool_dtor_t</a> pfn_destructor OPTIONAL,\r
+ IN const void* const context );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_pool\r
+ [in] Pointer to a <a href="#robo538">cl_pool_t</a> structure to initialize.\r
+\r
+ min_count\r
+ [in] Minimum number of objects that the pool should support. All\r
+ necessary allocations to allow storing the minimum number of items\r
+ are performed at initialization time, and all necessary callbacks\r
+ invoked.\r
+\r
+ max_count\r
+ [in] Maximum number of objects to which the pool is allowed to grow.\r
+ A value of zero specifies no maximum.\r
+\r
+ grow_size\r
+ [in] Number of objects to allocate when incrementally growing the pool.\r
+ A value of zero disables automatic growth.\r
+\r
+ object_size\r
+ [in] Size, in bytes, of each object.\r
+\r
+ pfn_initializer\r
+ [in] Initialization callback to invoke for every new object when\r
+ growing the pool. This parameter is optional and may be NULL.\r
+ See the <a href="#robo530">cl_pfn_pool_init_t</a> function type declaration for details\r
+ about the callback function.\r
+\r
+ pfn_destructor\r
+ [in] Destructor callback to invoke for every object before memory for\r
+ that object is freed. This parameter is optional and may be NULL.\r
+ See the <a href="#robo529">cl_pfn_pool_dtor_t</a> function type declaration for details\r
+ about the callback function.\r
+\r
+ context\r
+ [in] Value to pass to the callback functions to provide context.\r
+\r
+ RETURN VALUES\r
+ CL_SUCCESS if the pool was initialized successfully.\r
+\r
+ CL_INSUFFICIENT_MEMORY if there was not enough memory to initialize the\r
+ pool.\r
+\r
+ CL_INVALID_SETTING if a the maximum size is non-zero and less than the\r
+ minimum size.\r
+\r
+ Other <a href="./cl_types_h.html#robo304">cl_status_t</a> value returned by optional initialization callback function\r
+ specified by the pfn_initializer parameter.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> <strong>cl_pool_init</strong> initializes, and if necessary, grows the pool to\r
+ the capacity desired.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo24">Pool</a>, <a href="#robo531">cl_pool_construct</a>, <a href="#robo533">cl_pool_destroy</a>,\r
+ <a href="#robo534">cl_pool_get</a>, <a href="#robo537">cl_pool_put</a>, <a href="#robo535">cl_pool_grow</a>,\r
+ <a href="#robo532">cl_pool_count</a>, <a href="#robo530">cl_pfn_pool_init_t</a>, <a href="#robo529">cl_pfn_pool_dtor_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo537">[Functions]<a name="Component20Library3a20Pool2fcl5fpool5fput">\r
+Component Library: Pool/cl_pool_put</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_pool_put</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_pool_put</strong> function returns an object to a pool.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_INLINE void CL_API\r
+<strong>cl_pool_put</strong>(\r
+ IN <a href="#robo538">cl_pool_t</a>* const p_pool,\r
+ IN void* const p_object )\r
+{\r
+ cl_pool_obj_t *p_pool_obj;\r
+\r
+ CL_ASSERT( p_pool );\r
+ CL_ASSERT( p_object );\r
+\r
+ /* Calculate the offset to the list object representing this object. */\r
+ p_pool_obj = (cl_pool_obj_t*)\r
+ (((uint8_t*)p_object) - sizeof(cl_pool_obj_t));\r
+\r
+ /* good sanity check */\r
+ CL_ASSERT( p_pool_obj->list_obj.p_object == p_object );\r
+\r
+ <a href="./cl_qcomppool_h.html#robo549">cl_qcpool_put</a>( &p_pool->qcpool, (<a href="./cl_qcomppool_h.html#robo542">cl_pool_item_t</a>*)p_pool_obj );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_pool\r
+ [in] Pointer to a <a href="#robo538">cl_pool_t</a> structure to which to return\r
+ an object.\r
+\r
+ p_object\r
+ [in] Pointer to an object to return to the pool.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> This function does not return a value.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> <strong>cl_pool_put</strong> places the returned object at the head of the pool.\r
+\r
+ The object specified by the p_object parameter must have been\r
+ retrieved from the pool by a previous call to <a href="#robo534">cl_pool_get</a>.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo24">Pool</a>, cl_pool_put_tail, <a href="#robo534">cl_pool_get</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo538">[Structures]<a name="Component20Library3a20Pool2fcl5fpool5ft">\r
+Component Library: Pool/cl_pool_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_pool_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> pool structure.\r
+\r
+ The <strong>cl_pool_t</strong> structure should be treated as opaque and should be\r
+ manipulated only through the provided functions.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef struct _cl_pool\r
+{\r
+ <a href="./cl_qcomppool_h.html#robo551">cl_qcpool_t</a> qcpool;\r
+ <a href="#robo530">cl_pfn_pool_init_t</a> pfn_init;\r
+ <a href="#robo529">cl_pfn_pool_dtor_t</a> pfn_dtor;\r
+ const void *context;\r
+\r
+} <strong>cl_pool_t</strong>;\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> qcpool\r
+ Quick composite pool that manages all objects.\r
+\r
+ pfn_init\r
+ Pointer to the user's initializer callback, used by the pool\r
+ to translate the quick composite pool's initializer callback to\r
+ a pool initializer callback.\r
+\r
+ pfn_dtor\r
+ Pointer to the user's destructor callback, used by the pool\r
+ to translate the quick composite pool's destructor callback to\r
+ a pool destructor callback.\r
+\r
+ context\r
+ User's provided context for callback functions, used by the pool\r
+ to when invoking callbacks.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo24">Pool</a>\r
+</pre>\r
+</span>\r
+</body>\r
+</html>\r
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">\r
+<html>\r
+<head>\r
+<link rel="stylesheet" href="../robodoc.css" type="text/css">\r
+<title>./inc_doc/complib/cl_ptr_vector_h.html</title>\r
+<!-- Source: ./inc/complib/cl_ptr_vector.h -->\r
+<!-- Generated with ROBODoc Version 4.99.22 (Mar 6 2006) -->\r
+</head>\r
+<body bgcolor="#FFFFFF">\r
+<a name="robo_top_of_doc">Generated from ./inc/complib/cl_ptr_vector.h</a> with <a href="http://sourceforge.net/projects/robodoc/">ROBODoc</a> v4.99.22 on Sun Apr 16 2006 17:39:24\r
+<br />\r
+<hr />\r
+\r
+<h2><a name="robo23">[Modules]<a name="Component20Library2fPointer20Vector">\r
+Component Library/Pointer Vector</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_modules.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> Pointer <a href="./cl_vector_h.html#robo36">Vector</a>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The Pointer <a href="./cl_vector_h.html#robo36">Vector</a> is a self-sizing array of pointers. Like a traditonal\r
+ array, a pointer vector allows efficient constant time access to elements\r
+ with a specified index. A pointer vector grows transparently as the\r
+ user adds elements to the array.\r
+\r
+ The cl_pointer vector_t structure should be treated as opaque and should be\r
+ manipulated only through the provided functions.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Structures:\r
+ <a href="#robo527">cl_ptr_vector_t</a>\r
+\r
+ Callbacks:\r
+ <a href="#robo509">cl_pfn_ptr_vec_apply_t</a>, <a href="#robo510">cl_pfn_ptr_vec_find_t</a>\r
+\r
+ Item Manipulation:\r
+ cl_ptr_vector_set_obj, cl_ptr_vector_obj\r
+\r
+ Initialization:\r
+ <a href="#robo513">cl_ptr_vector_construct</a>, <a href="#robo520">cl_ptr_vector_init</a>, <a href="#robo514">cl_ptr_vector_destroy</a>\r
+\r
+ Manipulation:\r
+ <a href="#robo518">cl_ptr_vector_get_capacity</a>, <a href="#robo524">cl_ptr_vector_set_capacity</a>,\r
+ <a href="#robo519">cl_ptr_vector_get_size</a>, <a href="#robo526">cl_ptr_vector_set_size</a>, <a href="#robo525">cl_ptr_vector_set_min_size</a>\r
+ cl_ptr_vector_get_ptr, <a href="#robo517">cl_ptr_vector_get</a>, <a href="#robo512">cl_ptr_vector_at</a>, <a href="#robo523">cl_ptr_vector_set</a>\r
+\r
+ Search:\r
+ <a href="#robo516">cl_ptr_vector_find_from_start</a>, <a href="#robo515">cl_ptr_vector_find_from_end</a>\r
+ <a href="#robo511">cl_ptr_vector_apply_func</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo509">[Definitions]<a name="Component20Library3a20Pointer20Vector2fcl5fpfn5fptr5fvec5fapply5ft">\r
+Component Library: Pointer Vector/cl_pfn_ptr_vec_apply_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_pfn_ptr_vec_apply_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_pfn_ptr_vec_apply_t</strong> function type defines the prototype for\r
+ functions used to iterate elements in a pointer vector.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef void\r
+(CL_API *<strong>cl_pfn_ptr_vec_apply_t</strong>)(\r
+ IN const size_t index,\r
+ IN void* const element,\r
+ IN void* context );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> index\r
+ [in] Index of the element.\r
+\r
+ p_element\r
+ [in] Pointer to an element at the specified index in the pointer vector.\r
+\r
+ context\r
+ [in] Context provided in a call to <a href="#robo511">cl_ptr_vector_apply_func</a>.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> This function does not return a value.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This function type is provided as function prototype reference for\r
+ the function passed by users as a parameter to the <a href="#robo511">cl_ptr_vector_apply_func</a>\r
+ function.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Pointer <a href="./cl_vector_h.html#robo36">Vector</a>, <a href="#robo511">cl_ptr_vector_apply_func</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo510">[Definitions]<a name="Component20Library3a20Pointer20Vector2fcl5fpfn5fptr5fvec5ffind5ft">\r
+Component Library: Pointer Vector/cl_pfn_ptr_vec_find_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_pfn_ptr_vec_find_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_pfn_ptr_vec_find_t</strong> function type defines the prototype for\r
+ functions used to find elements in a pointer vector.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef <a href="./cl_types_h.html#robo304">cl_status_t</a>\r
+(CL_API *<strong>cl_pfn_ptr_vec_find_t</strong>)(\r
+ IN const size_t index,\r
+ IN const void* const element,\r
+ IN void* context );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> index\r
+ [in] Index of the element.\r
+\r
+ p_element\r
+ [in] Pointer to an element at the specified index in the\r
+ pointer vector.\r
+\r
+ context\r
+ [in] Context provided in a call to <a href="#robo516">cl_ptr_vector_find_from_start</a> or\r
+ <a href="#robo515">cl_ptr_vector_find_from_end</a>.\r
+\r
+ RETURN VALUES\r
+ Return CL_SUCCESS if the element was found. This stops pointer vector\r
+ iteration.\r
+\r
+ CL_NOT_FOUND to continue the pointer vector iteration.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This function type is provided as function prototype reference for the\r
+ function provided by users as a parameter to the\r
+ <a href="#robo516">cl_ptr_vector_find_from_start</a> and <a href="#robo515">cl_ptr_vector_find_from_end</a> functions.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Pointer <a href="./cl_vector_h.html#robo36">Vector</a>, <a href="#robo516">cl_ptr_vector_find_from_start</a>, <a href="#robo515">cl_ptr_vector_find_from_end</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo511">[Functions]<a name="Component20Library3a20Pointer20Vector2fcl5fptr5fvector5fapply5ffunc">\r
+Component Library: Pointer Vector/cl_ptr_vector_apply_func</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_ptr_vector_apply_func</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_ptr_vector_apply_func</strong> function invokes a specified function for\r
+ every element in a pointer vector.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT void CL_API\r
+<strong>cl_ptr_vector_apply_func</strong>(\r
+ IN const <a href="#robo527">cl_ptr_vector_t</a>* const p_vector,\r
+ IN <a href="#robo509">cl_pfn_ptr_vec_apply_t</a> pfn_callback,\r
+ IN const void* const context );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_vector\r
+ [in] Pointer to a <a href="#robo527">cl_ptr_vector_t</a> structure whose elements to iterate.\r
+\r
+ pfn_callback\r
+ [in] Function invoked for every element in the array.\r
+ See the <a href="#robo509">cl_pfn_ptr_vec_apply_t</a> function type declaration for details\r
+ about the callback function.\r
+\r
+ context\r
+ [in] Value to pass to the callback function.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> This function does not return a value.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> <strong>cl_ptr_vector_apply_func</strong> invokes the specified function for every element\r
+ in the pointer vector, starting from the beginning of the pointer vector.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Pointer <a href="./cl_vector_h.html#robo36">Vector</a>, <a href="#robo516">cl_ptr_vector_find_from_start</a>, <a href="#robo515">cl_ptr_vector_find_from_end</a>,\r
+ <a href="#robo509">cl_pfn_ptr_vec_apply_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo512">[Functions]<a name="Component20Library3a20Pointer20Vector2fcl5fptr5fvector5fat">\r
+Component Library: Pointer Vector/cl_ptr_vector_at</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_ptr_vector_at</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_ptr_vector_at</strong> function copies an element stored in a pointer\r
+ vector at a specified index, performing boundary checks.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT <a href="./cl_types_h.html#robo304">cl_status_t</a> CL_API\r
+<strong>cl_ptr_vector_at</strong>(\r
+ IN const <a href="#robo527">cl_ptr_vector_t</a>* const p_vector,\r
+ IN const size_t index,\r
+ OUT void** const p_element );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_vector\r
+ [in] Pointer to a <a href="#robo527">cl_ptr_vector_t</a> structure from which to get a copy of\r
+ an element.\r
+\r
+ index\r
+ [in] Index of the element.\r
+\r
+ p_element\r
+ [out] Pointer to storage for the pointer element. Contains a copy of\r
+ the desired pointer upon successful completion of the call.\r
+\r
+ RETURN VALUES\r
+ CL_SUCCESS if an element was found at the specified index.\r
+\r
+ CL_INVALID_SETTING if the index was out of range.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> <strong>cl_ptr_vector_at</strong> provides constant time access regardless of\r
+ the index, and performs boundary checking on the pointer vector.\r
+\r
+ Upon success, the p_element parameter contains a copy of the\r
+ desired element.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Pointer <a href="./cl_vector_h.html#robo36">Vector</a>, <a href="#robo517">cl_ptr_vector_get</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo513">[Functions]<a name="Component20Library3a20Pointer20Vector2fcl5fptr5fvector5fconstruct">\r
+Component Library: Pointer Vector/cl_ptr_vector_construct</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_ptr_vector_construct</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_ptr_vector_construct</strong> function constructs a pointer vector.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT void CL_API\r
+<strong>cl_ptr_vector_construct</strong>(\r
+ IN <a href="#robo527">cl_ptr_vector_t</a>* const p_vector );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_vector\r
+ [in] Pointer to a <a href="#robo527">cl_ptr_vector_t</a> structure to construct.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> This function does not return a value.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> Allows calling <a href="#robo514">cl_ptr_vector_destroy</a> without first calling\r
+ <a href="#robo520">cl_ptr_vector_init</a>.\r
+\r
+ Calling <strong>cl_ptr_vector_construct</strong> is a prerequisite to calling any other\r
+ pointer vector function except <a href="#robo520">cl_ptr_vector_init</a>.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Pointer <a href="./cl_vector_h.html#robo36">Vector</a>, <a href="#robo520">cl_ptr_vector_init</a>, <a href="#robo514">cl_ptr_vector_destroy</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo514">[Functions]<a name="Component20Library3a20Pointer20Vector2fcl5fptr5fvector5fdestroy">\r
+Component Library: Pointer Vector/cl_ptr_vector_destroy</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_ptr_vector_destroy</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_ptr_vector_destroy</strong> function destroys a pointer vector.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT void CL_API\r
+<strong>cl_ptr_vector_destroy</strong>(\r
+ IN <a href="#robo527">cl_ptr_vector_t</a>* const p_vector );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_vector\r
+ [in] Pointer to a <a href="#robo527">cl_ptr_vector_t</a> structure to destroy.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> This function does not return a value.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> <strong>cl_ptr_vector_destroy</strong> frees all memory allocated for the pointer vector.\r
+\r
+ This function should only be called after a call to <a href="#robo513">cl_ptr_vector_construct</a>\r
+ or <a href="#robo520">cl_ptr_vector_init</a>.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Pointer <a href="./cl_vector_h.html#robo36">Vector</a>, <a href="#robo513">cl_ptr_vector_construct</a>, <a href="#robo520">cl_ptr_vector_init</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo515">[Functions]<a name="Component20Library3a20Pointer20Vector2fcl5fptr5fvector5ffind5ffrom5fend">\r
+Component Library: Pointer Vector/cl_ptr_vector_find_from_end</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_ptr_vector_find_from_end</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_ptr_vector_find_from_end</strong> function uses a specified function to\r
+ search for elements in a pointer vector starting from the highest index.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT size_t CL_API\r
+<strong>cl_ptr_vector_find_from_end</strong>(\r
+ IN const <a href="#robo527">cl_ptr_vector_t</a>* const p_vector,\r
+ IN <a href="#robo510">cl_pfn_ptr_vec_find_t</a> pfn_callback,\r
+ IN const void* const context );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_vector\r
+ [in] Pointer to a <a href="#robo527">cl_ptr_vector_t</a> structure to inititalize.\r
+\r
+ pfn_callback\r
+ [in] Function invoked to determine if a match was found.\r
+ See the <a href="#robo510">cl_pfn_ptr_vec_find_t</a> function type declaration for details\r
+ about the callback function.\r
+\r
+ context\r
+ [in] Value to pass to the callback function.\r
+\r
+ RETURN VALUES\r
+ Index of the element, if found.\r
+\r
+ Size of the pointer vector if the element was not found.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> <strong>cl_ptr_vector_find_from_end</strong> does not remove the found element from\r
+ the pointer vector. The index of the element is returned when the function\r
+ provided by the pfn_callback parameter returns CL_SUCCESS.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Pointer <a href="./cl_vector_h.html#robo36">Vector</a>, <a href="#robo516">cl_ptr_vector_find_from_start</a>, <a href="#robo511">cl_ptr_vector_apply_func</a>,\r
+ <a href="#robo510">cl_pfn_ptr_vec_find_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo516">[Functions]<a name="Component20Library3a20Pointer20Vector2fcl5fptr5fvector5ffind5ffrom5fstart">\r
+Component Library: Pointer Vector/cl_ptr_vector_find_from_start</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_ptr_vector_find_from_start</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_ptr_vector_find_from_start</strong> function uses a specified function to\r
+ search for elements in a pointer vector starting from the lowest index.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT size_t CL_API\r
+<strong>cl_ptr_vector_find_from_start</strong>(\r
+ IN const <a href="#robo527">cl_ptr_vector_t</a>* const p_vector,\r
+ IN <a href="#robo510">cl_pfn_ptr_vec_find_t</a> pfn_callback,\r
+ IN const void* const context );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_vector\r
+ [in] Pointer to a <a href="#robo527">cl_ptr_vector_t</a> structure to inititalize.\r
+\r
+ pfn_callback\r
+ [in] Function invoked to determine if a match was found.\r
+ See the <a href="#robo510">cl_pfn_ptr_vec_find_t</a> function type declaration for details\r
+ about the callback function.\r
+\r
+ context\r
+ [in] Value to pass to the callback function.\r
+\r
+ RETURN VALUES\r
+ Index of the element, if found.\r
+\r
+ Size of the pointer vector if the element was not found.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> <strong>cl_ptr_vector_find_from_start</strong> does not remove the found element from\r
+ the pointer vector. The index of the element is returned when the function\r
+ provided by the pfn_callback parameter returns CL_SUCCESS.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Pointer <a href="./cl_vector_h.html#robo36">Vector</a>, <a href="#robo515">cl_ptr_vector_find_from_end</a>, <a href="#robo511">cl_ptr_vector_apply_func</a>,\r
+ <a href="#robo510">cl_pfn_ptr_vec_find_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo517">[Functions]<a name="Component20Library3a20Pointer20Vector2fcl5fptr5fvector5fget">\r
+Component Library: Pointer Vector/cl_ptr_vector_get</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_ptr_vector_get</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_ptr_vector_get</strong> function returns the pointer stored in a\r
+ pointer vector at a specified index.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_INLINE void* CL_API\r
+<strong>cl_ptr_vector_get</strong>(\r
+ IN const <a href="#robo527">cl_ptr_vector_t</a>* const p_vector,\r
+ IN const size_t index )\r
+{\r
+ CL_ASSERT( p_vector );\r
+ CL_ASSERT( p_vector->state == CL_INITIALIZED );\r
+ CL_ASSERT( p_vector->size > index );\r
+\r
+ return( (void*)p_vector->p_ptr_array[index] );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_vector\r
+ [in] Pointer to a <a href="#robo527">cl_ptr_vector_t</a> structure from which to get an\r
+ element.\r
+\r
+ index\r
+ [in] Index of the element.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> Value of the pointer stored at the specified index.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> <strong>cl_ptr_vector_get</strong> provides constant access times regardless of the index.\r
+\r
+ <strong>cl_ptr_vector_get</strong> does not perform boundary checking. Callers are\r
+ responsible for providing an index that is within the range of the pointer\r
+ vector.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Pointer <a href="./cl_vector_h.html#robo36">Vector</a>, <a href="#robo512">cl_ptr_vector_at</a>, <a href="#robo523">cl_ptr_vector_set</a>, <a href="#robo519">cl_ptr_vector_get_size</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo518">[Functions]<a name="Component20Library3a20Pointer20Vector2fcl5fptr5fvector5fget5fcapacity">\r
+Component Library: Pointer Vector/cl_ptr_vector_get_capacity</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_ptr_vector_get_capacity</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_ptr_vector_get_capacity</strong> function returns the capacity of\r
+ a pointer vector.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_INLINE size_t CL_API\r
+<strong>cl_ptr_vector_get_capacity</strong>(\r
+ IN const <a href="#robo527">cl_ptr_vector_t</a>* const p_vector )\r
+{\r
+ CL_ASSERT( p_vector );\r
+ CL_ASSERT( p_vector->state == CL_INITIALIZED );\r
+\r
+ return( p_vector->capacity );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_vector\r
+ [in] Pointer to a <a href="#robo527">cl_ptr_vector_t</a> structure whose capacity to return.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> Capacity, in elements, of the pointer vector.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> The capacity is the number of elements that the pointer vector can store,\r
+ and can be greater than the number of elements stored. To get the number\r
+ of elements stored in the pointer vector, use <a href="#robo519">cl_ptr_vector_get_size</a>.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Pointer <a href="./cl_vector_h.html#robo36">Vector</a>, <a href="#robo524">cl_ptr_vector_set_capacity</a>, <a href="#robo519">cl_ptr_vector_get_size</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo519">[Functions]<a name="Component20Library3a20Pointer20Vector2fcl5fptr5fvector5fget5fsize">\r
+Component Library: Pointer Vector/cl_ptr_vector_get_size</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_ptr_vector_get_size</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_ptr_vector_get_size</strong> function returns the size of a pointer vector.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_INLINE size_t CL_API\r
+<strong>cl_ptr_vector_get_size</strong>(\r
+ IN const <a href="#robo527">cl_ptr_vector_t</a>* const p_vector )\r
+{\r
+ CL_ASSERT( p_vector );\r
+ CL_ASSERT( p_vector->state == CL_UNINITIALIZED ||\r
+ p_vector->state == CL_INITIALIZED );\r
+\r
+ return( p_vector->size );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_vector\r
+ [in] Pointer to a <a href="#robo527">cl_ptr_vector_t</a> structure whose size to return.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> Size, in elements, of the pointer vector.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Pointer <a href="./cl_vector_h.html#robo36">Vector</a>, <a href="#robo526">cl_ptr_vector_set_size</a>, <a href="#robo518">cl_ptr_vector_get_capacity</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo520">[Functions]<a name="Component20Library3a20Pointer20Vector2fcl5fptr5fvector5finit">\r
+Component Library: Pointer Vector/cl_ptr_vector_init</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_ptr_vector_init</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_ptr_vector_init</strong> function initializes a pointer vector for use.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT <a href="./cl_types_h.html#robo304">cl_status_t</a> CL_API\r
+<strong>cl_ptr_vector_init</strong>(\r
+ IN <a href="#robo527">cl_ptr_vector_t</a>* const p_vector,\r
+ IN const size_t min_cap,\r
+ IN const size_t grow_size );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_vector\r
+ [in] Pointer to a <a href="#robo527">cl_ptr_vector_t</a> structure to inititalize.\r
+\r
+ min_cap\r
+ [in] Initial number of elements the vector will support.\r
+ The vector is always initialized with a size of zero.\r
+\r
+ grow_size\r
+ [in] Number of elements to allocate when incrementally growing\r
+ the pointer vector. A value of zero disables automatic growth.\r
+\r
+ RETURN VALUES\r
+ CL_SUCCESS if the pointer vector was initialized successfully.\r
+\r
+ CL_INSUFFICIENT_MEMORY if the initialization failed.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Pointer <a href="./cl_vector_h.html#robo36">Vector</a>, <a href="#robo513">cl_ptr_vector_construct</a>, <a href="#robo514">cl_ptr_vector_destroy</a>,\r
+ <a href="#robo523">cl_ptr_vector_set</a>, <a href="#robo517">cl_ptr_vector_get</a>, <a href="#robo512">cl_ptr_vector_at</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo521">[Functions]<a name="Component20Library3a20Pointer20Vector2fcl5fptr5fvector5finsert">\r
+Component Library: Pointer Vector/cl_ptr_vector_insert</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_ptr_vector_insert</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_ptr_vector_insert</strong> function inserts an element into a pointer vector.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_INLINE <a href="./cl_types_h.html#robo304">cl_status_t</a> CL_API\r
+<strong>cl_ptr_vector_insert</strong>(\r
+ IN <a href="#robo527">cl_ptr_vector_t</a>* const p_vector,\r
+ IN const void* const element,\r
+ OUT size_t* const p_index OPTIONAL )\r
+{\r
+ <a href="./cl_types_h.html#robo304">cl_status_t</a> status;\r
+\r
+ CL_ASSERT( p_vector );\r
+ CL_ASSERT( p_vector->state == CL_INITIALIZED );\r
+\r
+ status = <a href="#robo523">cl_ptr_vector_set</a>( p_vector, p_vector->size, element );\r
+ if( status == CL_SUCCESS && p_index )\r
+ *p_index = p_vector->size - 1;\r
+\r
+ return( status );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_vector\r
+ [in] Pointer to a <a href="#robo527">cl_ptr_vector_t</a> structure into which to store\r
+ an element.\r
+\r
+ element\r
+ [in] Pointer to store in the pointer vector.\r
+\r
+ p_index\r
+ [out] Pointer to the index of the element. Valid only if\r
+ insertion was successful.\r
+\r
+ RETURN VALUES\r
+ CL_SUCCESS if the element was successfully inserted.\r
+\r
+ CL_INSUFFICIENT_MEMORY if the pointer vector could not be resized to\r
+ accommodate the new element.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> <strong>cl_ptr_vector_insert</strong> places the new element at the end of\r
+ the pointer vector.\r
+\r
+ <strong>cl_ptr_vector_insert</strong> grows the pointer vector as needed to accommodate\r
+ the new element, unless the grow_size parameter passed into the\r
+ <a href="#robo520">cl_ptr_vector_init</a> function was zero.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Pointer <a href="./cl_vector_h.html#robo36">Vector</a>, <a href="#robo522">cl_ptr_vector_remove</a>, <a href="#robo523">cl_ptr_vector_set</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo522">[Functions]<a name="Component20Library3a20Pointer20Vector2fcl5fptr5fvector5fremove">\r
+Component Library: Pointer Vector/cl_ptr_vector_remove</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_ptr_vector_remove</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_ptr_vector_remove</strong> function removes and returns the pointer stored\r
+ in a pointer vector at a specified index. Items beyond the removed item\r
+ are shifted down and the size of the pointer vector is decremented.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT void* CL_API\r
+<strong>cl_ptr_vector_remove</strong>(\r
+ IN <a href="#robo527">cl_ptr_vector_t</a>* const p_vector,\r
+ IN const size_t index );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_vector\r
+ [in] Pointer to a <a href="#robo527">cl_ptr_vector_t</a> structure from which to get an\r
+ element.\r
+\r
+ index\r
+ [in] Index of the element.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> Value of the pointer stored at the specified index.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> <a href="#robo517">cl_ptr_vector_get</a> does not perform boundary checking. Callers are\r
+ responsible for providing an index that is within the range of the pointer\r
+ vector.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Pointer <a href="./cl_vector_h.html#robo36">Vector</a>, <a href="#robo521">cl_ptr_vector_insert</a>, <a href="#robo519">cl_ptr_vector_get_size</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo523">[Functions]<a name="Component20Library3a20Pointer20Vector2fcl5fptr5fvector5fset">\r
+Component Library: Pointer Vector/cl_ptr_vector_set</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_ptr_vector_set</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_ptr_vector_set</strong> function sets the element at the specified index.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT <a href="./cl_types_h.html#robo304">cl_status_t</a> CL_API\r
+<strong>cl_ptr_vector_set</strong>(\r
+ IN <a href="#robo527">cl_ptr_vector_t</a>* const p_vector,\r
+ IN const size_t index,\r
+ IN const void* const element );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_vector\r
+ [in] Pointer to a <a href="#robo527">cl_ptr_vector_t</a> structure into which to store\r
+ an element.\r
+\r
+ index\r
+ [in] Index of the element.\r
+\r
+ element\r
+ [in] Pointer to store in the pointer vector.\r
+\r
+ RETURN VALUES\r
+ CL_SUCCESS if the element was successfully set.\r
+\r
+ CL_INSUFFICIENT_MEMORY if the pointer vector could not be resized to\r
+ accommodate the new element.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> <strong>cl_ptr_vector_set</strong> grows the pointer vector as needed to accommodate\r
+ the new element, unless the grow_size parameter passed into the\r
+ <a href="#robo520">cl_ptr_vector_init</a> function was zero.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Pointer <a href="./cl_vector_h.html#robo36">Vector</a>, <a href="#robo517">cl_ptr_vector_get</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo524">[Functions]<a name="Component20Library3a20Pointer20Vector2fcl5fptr5fvector5fset5fcapacity">\r
+Component Library: Pointer Vector/cl_ptr_vector_set_capacity</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_ptr_vector_set_capacity</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_ptr_vector_set_capacity</strong> function reserves memory in a\r
+ pointer vector for a specified number of pointers.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT <a href="./cl_types_h.html#robo304">cl_status_t</a> CL_API\r
+<strong>cl_ptr_vector_set_capacity</strong>(\r
+ IN <a href="#robo527">cl_ptr_vector_t</a>* const p_vector,\r
+ IN const size_t new_capacity );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_vector\r
+ [in] Pointer to a <a href="#robo527">cl_ptr_vector_t</a> structure whose capacity to set.\r
+\r
+ new_capacity\r
+ [in] Total number of elements for which the pointer vector should\r
+ allocate memory.\r
+\r
+ RETURN VALUES\r
+ CL_SUCCESS if the capacity was successfully set.\r
+\r
+ CL_INSUFFICIENT_MEMORY if there was not enough memory to satisfy the\r
+ operation. The pointer vector is left unchanged.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> <strong>cl_ptr_vector_set_capacity</strong> increases the capacity of the pointer vector.\r
+ It does not change the size of the pointer vector. If the requested\r
+ capacity is less than the current capacity, the pointer vector is left\r
+ unchanged.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Pointer <a href="./cl_vector_h.html#robo36">Vector</a>, <a href="#robo518">cl_ptr_vector_get_capacity</a>, <a href="#robo526">cl_ptr_vector_set_size</a>,\r
+ <a href="#robo525">cl_ptr_vector_set_min_size</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo525">[Functions]<a name="Component20Library3a20Pointer20Vector2fcl5fptr5fvector5fset5fmin5fsize">\r
+Component Library: Pointer Vector/cl_ptr_vector_set_min_size</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_ptr_vector_set_min_size</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_ptr_vector_set_min_size</strong> function resizes a pointer vector to a\r
+ specified size if the pointer vector is smaller than the specified size.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT <a href="./cl_types_h.html#robo304">cl_status_t</a> CL_API\r
+<strong>cl_ptr_vector_set_min_size</strong>(\r
+ IN <a href="#robo527">cl_ptr_vector_t</a>* const p_vector,\r
+ IN const size_t min_size );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_vector\r
+ [in] Pointer to a <a href="#robo527">cl_ptr_vector_t</a> structure whose minimum size to set.\r
+\r
+ min_size\r
+ [in] Minimum number of elements that the pointer vector should contain.\r
+\r
+ RETURN VALUES\r
+ CL_SUCCESS if the pointer vector size is greater than or equal to min_size.\r
+ This could indicate that the pointer vector's capacity was increased to\r
+ min_size or that the pointer vector was already of sufficient size.\r
+\r
+ CL_INSUFFICIENT_MEMORY if there was not enough memory to resize the\r
+ pointer vector. The pointer vector is left unchanged.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> If min_size is smaller than the current size of the pointer vector,\r
+ the pointer vector is unchanged. The pointer vector is unchanged if the\r
+ size could not be changed due to insufficient memory being available to\r
+ perform the operation.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Pointer <a href="./cl_vector_h.html#robo36">Vector</a>, <a href="#robo519">cl_ptr_vector_get_size</a>, <a href="#robo526">cl_ptr_vector_set_size</a>,\r
+ <a href="#robo524">cl_ptr_vector_set_capacity</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo526">[Functions]<a name="Component20Library3a20Pointer20Vector2fcl5fptr5fvector5fset5fsize">\r
+Component Library: Pointer Vector/cl_ptr_vector_set_size</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_ptr_vector_set_size</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_ptr_vector_set_size</strong> function resizes a pointer vector, either\r
+ increasing or decreasing its size.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT <a href="./cl_types_h.html#robo304">cl_status_t</a> CL_API\r
+<strong>cl_ptr_vector_set_size</strong>(\r
+ IN <a href="#robo527">cl_ptr_vector_t</a>* const p_vector,\r
+ IN const size_t size );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_vector\r
+ [in] Pointer to a <a href="#robo527">cl_ptr_vector_t</a> structure whose size to set.\r
+\r
+ size\r
+ [in] Number of elements desired in the pointer vector.\r
+\r
+ RETURN VALUES\r
+ CL_SUCCESS if the size of the pointer vector was set successfully.\r
+\r
+ CL_INSUFFICIENT_MEMORY if there was not enough memory to complete the\r
+ operation. The pointer vector is left unchanged.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> <strong>cl_ptr_vector_set_size</strong> sets the pointer vector to the specified size.\r
+ If size is smaller than the current size of the pointer vector, the size\r
+ is reduced.\r
+\r
+ This function can only fail if size is larger than the current capacity.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Pointer <a href="./cl_vector_h.html#robo36">Vector</a>, <a href="#robo519">cl_ptr_vector_get_size</a>, <a href="#robo525">cl_ptr_vector_set_min_size</a>,\r
+ <a href="#robo524">cl_ptr_vector_set_capacity</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo527">[Structures]<a name="Component20Library3a20Pointer20Vector2fcl5fptr5fvector5ft">\r
+Component Library: Pointer Vector/cl_ptr_vector_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_ptr_vector_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Pointer <a href="./cl_vector_h.html#robo36">Vector</a> structure.\r
+\r
+ The <strong>cl_ptr_vector_t</strong> structure should be treated as opaque and should be\r
+ manipulated only through the provided functions.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef struct _cl_ptr_vector\r
+{\r
+ size_t size;\r
+ size_t grow_size;\r
+ size_t capacity;\r
+ const void **p_ptr_array;\r
+ cl_state_t state;\r
+\r
+} <strong>cl_ptr_vector_t</strong>;\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> size\r
+ Number of elements successfully initialized in the pointer vector.\r
+\r
+ grow_size\r
+ Number of elements to allocate when growing.\r
+\r
+ capacity\r
+ total # of elements allocated.\r
+\r
+ alloc_list\r
+ <a href="./cl_list_h.html#robo15">List</a> of allocations.\r
+\r
+ p_ptr_array\r
+ Internal array of pointers to elements.\r
+\r
+ state\r
+ State of the pointer vector.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Pointer <a href="./cl_vector_h.html#robo36">Vector</a>\r
+</pre>\r
+</span>\r
+</body>\r
+</html>\r
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">\r
+<html>\r
+<head>\r
+<link rel="stylesheet" href="../robodoc.css" type="text/css">\r
+<title>./inc_doc/complib/cl_qcomppool_h.html</title>\r
+<!-- Source: ./inc/complib/cl_qcomppool.h -->\r
+<!-- Generated with ROBODoc Version 4.99.22 (Mar 6 2006) -->\r
+</head>\r
+<body bgcolor="#FFFFFF">\r
+<a name="robo_top_of_doc">Generated from ./inc/complib/cl_qcomppool.h</a> with <a href="http://sourceforge.net/projects/robodoc/">ROBODoc</a> v4.99.22 on Sun Apr 16 2006 17:39:24\r
+<br />\r
+<hr />\r
+\r
+<h2><a name="robo25">[Modules]<a name="Component20Library2fQuick20Composite20Pool">\r
+Component Library/Quick Composite Pool</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_modules.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> Quick Composite <a href="./cl_pool_h.html#robo24">Pool</a>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The Quick Composite <a href="./cl_pool_h.html#robo24">Pool</a> provides a self-contained and self-sustaining\r
+ pool of user defined composite objects.\r
+\r
+ A composite object is an object that is composed of one or more\r
+ sub-objects, each of which needs to be treated separately for\r
+ initialization. Objects can be retrieved from the pool as long as there\r
+ is memory in the system.\r
+\r
+ To aid in object oriented design, the Quick Composite <a href="./cl_pool_h.html#robo24">Pool</a> provides users\r
+ the ability to specify callbacks that are invoked for each object for\r
+ construction, initialization, and destruction. Constructor and destructor\r
+ callback functions may not fail.\r
+\r
+ A Quick Composite <a href="./cl_pool_h.html#robo24">Pool</a> does not return memory to the system as the user\r
+ returns objects to the pool. The only method of returning memory to the\r
+ system is to destroy the pool.\r
+\r
+ The Quick Composite <a href="./cl_pool_h.html#robo24">Pool</a> operates on <a href="#robo542">cl_pool_item_t</a> structures that\r
+ describe composite objects. This provides for more efficient memory use.\r
+ If using a <a href="#robo542">cl_pool_item_t</a> is not desired, the Composite <a href="./cl_pool_h.html#robo24">Pool</a> provides\r
+ similar functionality but operates on opaque objects.\r
+\r
+ The Quick Composit <a href="./cl_pool_h.html#robo24">Pool</a> functions operate on a <a href="#robo551">cl_qcpool_t</a> structure\r
+ which should be treated as opaque and should be manipulated only through\r
+ the provided functions.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Structures:\r
+ <a href="#robo551">cl_qcpool_t</a>, <a href="#robo542">cl_pool_item_t</a>\r
+\r
+ Callbacks:\r
+ <a href="#robo541">cl_pfn_qcpool_init_t</a>, <a href="#robo540">cl_pfn_qcpool_dtor_t</a>\r
+\r
+ Initialization/Destruction:\r
+ <a href="#robo543">cl_qcpool_construct</a>, <a href="#robo548">cl_qcpool_init</a>, <a href="#robo545">cl_qcpool_destroy</a>\r
+\r
+ Manipulation:\r
+ <a href="#robo546">cl_qcpool_get</a>, <a href="#robo549">cl_qcpool_put</a>, <a href="#robo550">cl_qcpool_put_list</a>, <a href="#robo547">cl_qcpool_grow</a>\r
+\r
+ Attributes:\r
+ <a href="#robo539">cl_is_qcpool_inited</a>, <a href="#robo544">cl_qcpool_count</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo539">[Functions]<a name="Component20Library3a20Quick20Composite20Pool2fcl5fis5fqcpool5finited">\r
+Component Library: Quick Composite Pool/cl_is_qcpool_inited</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_is_qcpool_inited</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_is_qcpool_inited</strong> function returns whether a quick composite pool was\r
+ successfully initialized.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_INLINE uint32_t CL_API\r
+<strong>cl_is_qcpool_inited</strong>(\r
+ IN const <a href="#robo551">cl_qcpool_t</a>* const p_pool )\r
+{\r
+ /* CL_ASSERT that a non-null pointer is provided. */\r
+ CL_ASSERT( p_pool );\r
+ /* CL_ASSERT that the pool is not in some invalid state. */\r
+ CL_ASSERT( <a href="./cl_types_h.html#robo441">cl_is_state_valid</a>( p_pool->state ) );\r
+\r
+ return( p_pool->state == CL_INITIALIZED );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_pool\r
+ [in] Pointer to a <a href="#robo551">cl_qcpool_t</a> structure to check.\r
+\r
+ RETURN VALUES\r
+ TRUE if the quick composite pool was initialized successfully.\r
+\r
+ FALSE otherwise.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> Allows checking the state of a quick composite pool to determine if\r
+ invoking member functions is appropriate.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Quick Composite <a href="./cl_pool_h.html#robo24">Pool</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo540">[Definitions]<a name="Component20Library3a20Quick20Composite20Pool2fcl5fpfn5fqcpool5fdtor5ft">\r
+Component Library: Quick Composite Pool/cl_pfn_qcpool_dtor_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_pfn_qcpool_dtor_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_pfn_qcpool_dtor_t</strong> function type defines the prototype for\r
+ functions used as destructor for objects being deallocated by a\r
+ quick composite pool.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef void\r
+(CL_API *<strong>cl_pfn_qcpool_dtor_t</strong>)(\r
+ IN const <a href="#robo542">cl_pool_item_t</a>* const p_pool_item,\r
+ IN void* context );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_pool_item\r
+ [in] Pointer to a <a href="#robo542">cl_pool_item_t</a> structure representing an object.\r
+\r
+ context\r
+ [in] Context provided in a call to <a href="#robo548">cl_qcpool_init</a>.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> This function does not return a value.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This function type is provided as function prototype reference for\r
+ the function provided by the user as an optional parameter to the\r
+ <a href="#robo548">cl_qcpool_init</a> function.\r
+\r
+ The destructor is invoked once per allocated object, allowing the user\r
+ to perform any necessary cleanup. Users should not attempt to deallocate\r
+ the memory for the composite object, as the quick composite pool manages\r
+ object allocation and deallocation.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Quick Composite <a href="./cl_pool_h.html#robo24">Pool</a>, <a href="#robo548">cl_qcpool_init</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo541">[Definitions]<a name="Component20Library3a20Quick20Composite20Pool2fcl5fpfn5fqcpool5finit5ft">\r
+Component Library: Quick Composite Pool/cl_pfn_qcpool_init_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_pfn_qcpool_init_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_pfn_qcpool_init_t</strong> function type defines the prototype for\r
+ functions used as initializer for objects being allocated by a\r
+ quick composite pool.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef <a href="./cl_types_h.html#robo304">cl_status_t</a>\r
+(CL_API *<strong>cl_pfn_qcpool_init_t</strong>)(\r
+ IN void** const p_comp_array,\r
+ IN const uint32_t num_components,\r
+ IN void* context,\r
+ OUT <a href="#robo542">cl_pool_item_t</a>** const pp_pool_item );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_comp_array\r
+ [in] Pointer to the first entry in an array of pointers, each of\r
+ which points to a component that makes up a composite object.\r
+\r
+ num_components\r
+ [in] Number of components that in the component array.\r
+\r
+ context\r
+ [in] Context provided in a call to <a href="#robo548">cl_qcpool_init</a>.\r
+\r
+ pp_pool_item\r
+ [out] Users should set this pointer to reference the <a href="#robo542">cl_pool_item_t</a>\r
+ structure that represents the composite object. This pointer must\r
+ not be NULL if the function returns CL_SUCCESS.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> Return CL_SUCCESS to indicate that initialization of the object\r
+ was successful and that initialization of further objects may continue.\r
+\r
+ Other <a href="./cl_types_h.html#robo304">cl_status_t</a> values will be returned by <a href="#robo548">cl_qcpool_init</a>\r
+ and <a href="#robo547">cl_qcpool_grow</a>.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This function type is provided as function prototype reference for\r
+ the function provided by the user as a parameter to the\r
+ <a href="#robo548">cl_qcpool_init</a> function.\r
+\r
+ The initializer is invoked once per allocated object, allowing the user\r
+ to chain components to form a composite object and perform any necessary\r
+ initialization. Returning a status other than CL_SUCCESS aborts a grow\r
+ operation, initiated either through <a href="#robo548">cl_qcpool_init</a> or <a href="#robo547">cl_qcpool_grow</a>,\r
+ and causes the initiating function to fail. Any non-CL_SUCCESS status\r
+ will be returned by the function that initiated the grow operation.\r
+\r
+ All memory for the requested number of components is pre-allocated. Users\r
+ should include space in one of their components for the <a href="#robo542">cl_pool_item_t</a>\r
+ structure that will represent the composite object to avoid having to\r
+ allocate that structure in the initialization callback. Alternatively,\r
+ users may specify an additional component for the <a href="#robo542">cl_pool_item_t</a> structure.\r
+\r
+ When later performing a <a href="#robo546">cl_qcpool_get</a> call, the return value is a pointer\r
+ to the <a href="#robo542">cl_pool_item_t</a> returned by this function in the pp_pool_item\r
+ parameter. Users must set pp_pool_item to a valid pointer to the\r
+ <a href="#robo542">cl_pool_item_t</a> representing the object if they return CL_SUCCESS.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Quick Composite <a href="./cl_pool_h.html#robo24">Pool</a>, <a href="#robo548">cl_qcpool_init</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo542">[Structures]<a name="Component20Library3a20Quick20Composite20Pool2fcl5fpool5fitem5ft">\r
+Component Library: Quick Composite Pool/cl_pool_item_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_pool_item_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_pool_item_t</strong> structure is used by pools to store objects.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef struct _cl_pool_item\r
+{\r
+ <a href="./cl_qlist_h.html#robo554">cl_list_item_t</a> list_item;\r
+#ifdef _DEBUG_\r
+ /* Pad to make the cl_pool_obj structure line up properly */\r
+ void *pad;\r
+ /* Pointer to the owner pool used for sanity checks. */\r
+ struct _cl_qcpool *p_pool;\r
+#endif\r
+\r
+} <strong>cl_pool_item_t</strong>;\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> list_item\r
+ Used internally by the pool. Users should not use this field.\r
+\r
+ p_pool\r
+ Used internally by the pool in debug builds to check for consistency.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> The pool item structure is defined in such a way as to safely allow\r
+ users to cast from a pool item to a list item for storing items\r
+ retrieved from a quick pool in a quick list.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Quick Composite <a href="./cl_pool_h.html#robo24">Pool</a>, <a href="./cl_qlist_h.html#robo554">cl_list_item_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo543">[Functions]<a name="Component20Library3a20Quick20Composite20Pool2fcl5fqcpool5fconstruct">\r
+Component Library: Quick Composite Pool/cl_qcpool_construct</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_qcpool_construct</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_qcpool_construct</strong> function constructs a quick composite pool.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT void CL_API\r
+<strong>cl_qcpool_construct</strong>(\r
+ IN <a href="#robo551">cl_qcpool_t</a>* const p_pool );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_pool\r
+ [in] Pointer to a <a href="#robo551">cl_qcpool_t</a> structure whose state to initialize.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> This function does not return a value.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> Allows calling <a href="#robo548">cl_qcpool_init</a>, <a href="#robo545">cl_qcpool_destroy</a>, <a href="#robo539">cl_is_qcpool_inited</a>.\r
+\r
+ Calling <strong>cl_qcpool_construct</strong> is a prerequisite to calling any other\r
+ quick composite pool function except <a href="#robo548">cl_qcpool_init</a>.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Quick Composite <a href="./cl_pool_h.html#robo24">Pool</a>, <a href="#robo548">cl_qcpool_init</a>, <a href="#robo545">cl_qcpool_destroy</a>,\r
+ <a href="#robo539">cl_is_qcpool_inited</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo544">[Functions]<a name="Component20Library3a20Quick20Composite20Pool2fcl5fqcpool5fcount">\r
+Component Library: Quick Composite Pool/cl_qcpool_count</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_qcpool_count</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_qcpool_count</strong> function returns the number of available objects\r
+ in a quick composite pool.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_INLINE size_t CL_API\r
+<strong>cl_qcpool_count</strong>(\r
+ IN <a href="#robo551">cl_qcpool_t</a>* const p_pool )\r
+{\r
+ CL_ASSERT( p_pool );\r
+ CL_ASSERT( p_pool->state == CL_INITIALIZED );\r
+\r
+ return( <a href="./cl_qlist_h.html#robo559">cl_qlist_count</a>( &p_pool->free_list ) );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_pool\r
+ [in] Pointer to a <a href="#robo551">cl_qcpool_t</a> structure for which the number of\r
+ available objects is requested.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> Returns the number of objects available in the specified\r
+ quick composite pool.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Quick Composite <a href="./cl_pool_h.html#robo24">Pool</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo545">[Functions]<a name="Component20Library3a20Quick20Composite20Pool2fcl5fqcpool5fdestroy">\r
+Component Library: Quick Composite Pool/cl_qcpool_destroy</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_qcpool_destroy</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_qcpool_destroy</strong> function destroys a quick composite pool.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT void CL_API\r
+<strong>cl_qcpool_destroy</strong>(\r
+ IN <a href="#robo551">cl_qcpool_t</a>* const p_pool );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_pool\r
+ [in] Pointer to a <a href="#robo551">cl_qcpool_t</a> structure to destroy.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> This function does not return a value.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> All memory allocated for composite objects is freed. The destructor\r
+ callback, if any, will be invoked for every allocated object. Further\r
+ operations on the composite pool should not be attempted after\r
+ <strong>cl_qcpool_destroy</strong> is invoked.\r
+\r
+ This function should only be called after a call to\r
+ <a href="#robo543">cl_qcpool_construct</a> or <a href="#robo548">cl_qcpool_init</a>.\r
+\r
+ In a debug build, <strong>cl_qcpool_destroy</strong> asserts that all objects are in\r
+ the pool.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Quick Composite <a href="./cl_pool_h.html#robo24">Pool</a>, <a href="#robo543">cl_qcpool_construct</a>, <a href="#robo548">cl_qcpool_init</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo546">[Functions]<a name="Component20Library3a20Quick20Composite20Pool2fcl5fqcpool5fget">\r
+Component Library: Quick Composite Pool/cl_qcpool_get</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_qcpool_get</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_qcpool_get</strong> function retrieves an object from a\r
+ quick composite pool.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT <a href="#robo542">cl_pool_item_t</a>* CL_API\r
+<strong>cl_qcpool_get</strong>(\r
+ IN <a href="#robo551">cl_qcpool_t</a>* const p_pool );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_pool\r
+ [in] Pointer to a <a href="#robo551">cl_qcpool_t</a> structure from which to retrieve\r
+ an object.\r
+\r
+ RETURN VALUES\r
+ Returns a pointer to a <a href="#robo542">cl_pool_item_t</a> for a composite object.\r
+\r
+ Returns NULL if the pool is empty and can not be grown automatically.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> <strong>cl_qcpool_get</strong> returns the object at the head of the pool. If the pool is\r
+ empty, it is automatically grown to accommodate this request unless the\r
+ grow_size parameter passed to the <a href="#robo548">cl_qcpool_init</a> function was zero.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Quick Composite <a href="./cl_pool_h.html#robo24">Pool</a>, cl_qcpool_get_tail, <a href="#robo549">cl_qcpool_put</a>,\r
+ <a href="#robo547">cl_qcpool_grow</a>, <a href="#robo544">cl_qcpool_count</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo547">[Functions]<a name="Component20Library3a20Quick20Composite20Pool2fcl5fqcpool5fgrow">\r
+Component Library: Quick Composite Pool/cl_qcpool_grow</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_qcpool_grow</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_qcpool_grow</strong> function grows a quick composite pool by\r
+ the specified number of objects.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT <a href="./cl_types_h.html#robo304">cl_status_t</a> CL_API\r
+<strong>cl_qcpool_grow</strong>(\r
+ IN <a href="#robo551">cl_qcpool_t</a>* const p_pool,\r
+ IN size_t obj_count );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_pool\r
+ [in] Pointer to a <a href="#robo551">cl_qcpool_t</a> structure whose capacity to grow.\r
+\r
+ obj_count\r
+ [in] Number of objects by which to grow the pool.\r
+\r
+ RETURN VALUES\r
+ CL_SUCCESS if the quick composite pool grew successfully.\r
+\r
+ CL_INSUFFICIENT_MEMORY if there was not enough memory to grow the\r
+ quick composite pool.\r
+\r
+ <a href="./cl_types_h.html#robo304">cl_status_t</a> value returned by optional initialization callback function\r
+ specified by the pfn_initializer parameter passed to the\r
+ <a href="#robo548">cl_qcpool_init</a> function.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> It is not necessary to call <strong>cl_qcpool_grow</strong> if the pool is\r
+ configured to grow automatically.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Quick Composite <a href="./cl_pool_h.html#robo24">Pool</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo548">[Functions]<a name="Component20Library3a20Quick20Composite20Pool2fcl5fqcpool5finit">\r
+Component Library: Quick Composite Pool/cl_qcpool_init</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_qcpool_init</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_qcpool_init</strong> function initializes a quick composite pool for use.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT <a href="./cl_types_h.html#robo304">cl_status_t</a> CL_API\r
+<strong>cl_qcpool_init</strong>(\r
+ IN <a href="#robo551">cl_qcpool_t</a>* const p_pool,\r
+ IN const size_t min_size,\r
+ IN const size_t max_size,\r
+ IN const size_t grow_size,\r
+ IN const size_t* const component_sizes,\r
+ IN const uint32_t num_components,\r
+ IN <a href="#robo541">cl_pfn_qcpool_init_t</a> pfn_initializer OPTIONAL,\r
+ IN <a href="#robo540">cl_pfn_qcpool_dtor_t</a> pfn_destructor OPTIONAL,\r
+ IN const void* const context );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_pool\r
+ [in] Pointer to a <a href="#robo551">cl_qcpool_t</a> structure to initialize.\r
+\r
+ min_size\r
+ [in] Minimum number of objects that the pool should support. All\r
+ necessary allocations to allow storing the minimum number of items\r
+ are performed at initialization time, and all necessary callbacks\r
+ successfully invoked.\r
+\r
+ max_size\r
+ [in] Maximum number of objects to which the pool is allowed to grow.\r
+ A value of zero specifies no maximum.\r
+\r
+ grow_size\r
+ [in] Number of objects to allocate when incrementally growing the pool.\r
+ A value of zero disables automatic growth.\r
+\r
+ component_sizes\r
+ [in] Pointer to the first entry in an array of sizes describing,\r
+ in order, the sizes of the components that make up a composite object.\r
+\r
+ num_components\r
+ [in] Number of components that make up a composite object.\r
+\r
+ pfn_initializer\r
+ [in] Initializer callback to invoke for every new object when growing\r
+ the pool. This parameter may be NULL only if the objects stored in\r
+ the quick composite pool consist of only one component. If NULL, the\r
+ pool assumes the <a href="#robo542">cl_pool_item_t</a> structure describing objects is\r
+ located at the head of each object. See the <a href="#robo541">cl_pfn_qcpool_init_t</a>\r
+ function type declaration for details about the callback function.\r
+\r
+ pfn_destructor\r
+ [in] Destructor callback to invoke for every object before memory for\r
+ that object is freed. This parameter is optional and may be NULL.\r
+ See the <a href="#robo540">cl_pfn_qcpool_dtor_t</a> function type declaration for details\r
+ about the callback function.\r
+\r
+ context\r
+ [in] Value to pass to the callback functions to provide context.\r
+\r
+ RETURN VALUES\r
+ CL_SUCCESS if the quick composite pool was initialized successfully.\r
+\r
+ CL_INSUFFICIENT_MEMORY if there was not enough memory to initialize the\r
+ quick composite pool.\r
+\r
+ CL_INVALID_SETTING if a NULL constructor was provided for composite objects\r
+ consisting of more than one component. Also returns CL_INVALID_SETTING if\r
+ the maximum size is non-zero and less than the minimum size.\r
+\r
+ Other <a href="./cl_types_h.html#robo304">cl_status_t</a> value returned by optional initialization callback function\r
+ specified by the pfn_initializer parameter.\r
+\r
+ If initialization fails, the pool is left in a destroyed state. Callers\r
+ may still safely call <a href="#robo545">cl_qcpool_destroy</a>.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> <strong>cl_qcpool_init</strong> initializes, and if necessary, grows the pool to\r
+ the capacity desired.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Quick Composite <a href="./cl_pool_h.html#robo24">Pool</a>, <a href="#robo543">cl_qcpool_construct</a>, <a href="#robo545">cl_qcpool_destroy</a>,\r
+ <a href="#robo546">cl_qcpool_get</a>, <a href="#robo549">cl_qcpool_put</a>, <a href="#robo547">cl_qcpool_grow</a>,\r
+ <a href="#robo544">cl_qcpool_count</a>, <a href="#robo541">cl_pfn_qcpool_init_t</a>, <a href="#robo540">cl_pfn_qcpool_dtor_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo549">[Functions]<a name="Component20Library3a20Quick20Composite20Pool2fcl5fqcpool5fput">\r
+Component Library: Quick Composite Pool/cl_qcpool_put</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_qcpool_put</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_qcpool_put</strong> function returns an object to a quick composite pool.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_INLINE void CL_API\r
+<strong>cl_qcpool_put</strong>(\r
+ IN <a href="#robo551">cl_qcpool_t</a>* const p_pool,\r
+ IN <a href="#robo542">cl_pool_item_t</a>* const p_pool_item )\r
+{\r
+ CL_ASSERT( p_pool );\r
+ CL_ASSERT( p_pool->state == CL_INITIALIZED );\r
+ CL_ASSERT( p_pool_item );\r
+ /* Make sure items being returned came from the specified pool. */\r
+ CL_ASSERT( p_pool_item->p_pool == p_pool );\r
+\r
+ /* return this lil' doggy to the pool */\r
+ <a href="./cl_qlist_h.html#robo569">cl_qlist_insert_head</a>( &p_pool->free_list, &p_pool_item->list_item );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_pool\r
+ [in] Pointer to a <a href="#robo551">cl_qcpool_t</a> structure to which to return\r
+ an object.\r
+\r
+ p_pool_item\r
+ [in] Pointer to a <a href="#robo542">cl_pool_item_t</a> structure for the object\r
+ being returned.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> This function does not return a value.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> <strong>cl_qcpool_put</strong> places the returned object at the head of the pool.\r
+\r
+ The object specified by the p_pool_item parameter must have been\r
+ retrieved from the pool by a previous call to <a href="#robo546">cl_qcpool_get</a>.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Quick Composite <a href="./cl_pool_h.html#robo24">Pool</a>, cl_qcpool_put_tail, <a href="#robo546">cl_qcpool_get</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo550">[Functions]<a name="Component20Library3a20Quick20Composite20Pool2fcl5fqcpool5fput5flist">\r
+Component Library: Quick Composite Pool/cl_qcpool_put_list</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_qcpool_put_list</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_qcpool_put_list</strong> function returns a list of objects to the head of\r
+ a quick composite pool.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_INLINE void CL_API\r
+<strong>cl_qcpool_put_list</strong>(\r
+ IN <a href="#robo551">cl_qcpool_t</a>* const p_pool,\r
+ IN <a href="./cl_qlist_h.html#robo584">cl_qlist_t</a>* const p_list )\r
+{\r
+#ifdef _DEBUG_\r
+ <a href="./cl_qlist_h.html#robo554">cl_list_item_t</a> *p_item;\r
+#endif\r
+\r
+ CL_ASSERT( p_pool );\r
+ CL_ASSERT( p_pool->state == CL_INITIALIZED );\r
+ CL_ASSERT( p_list );\r
+\r
+#ifdef _DEBUG_\r
+ /* Chech that all items in the list came from this pool. */\r
+ p_item = <a href="./cl_qlist_h.html#robo565">cl_qlist_head</a>( p_list );\r
+ while( p_item != <a href="./cl_qlist_h.html#robo560">cl_qlist_end</a>( p_list ) )\r
+ {\r
+ CL_ASSERT( ((<a href="#robo542">cl_pool_item_t</a>*)p_item)->p_pool == p_pool );\r
+ p_item = <a href="./cl_qlist_h.html#robo576">cl_qlist_next</a>( p_item );\r
+ }\r
+#endif\r
+\r
+ /* return these lil' doggies to the pool */\r
+ <a href="./cl_qlist_h.html#robo570">cl_qlist_insert_list_head</a>( &p_pool->free_list, p_list );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_pool\r
+ [in] Pointer to a <a href="#robo551">cl_qcpool_t</a> structure to which to return\r
+ a list of objects.\r
+\r
+ p_list\r
+ [in] Pointer to a <a href="./cl_qlist_h.html#robo584">cl_qlist_t</a> structure for the list of objects\r
+ being returned.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> This function does not return a value.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> <strong>cl_qcpool_put_list</strong> places the returned objects at the head of the pool.\r
+\r
+ The objects in the list specified by the p_list parameter must have been\r
+ retrieved from the pool by a previous call to <a href="#robo546">cl_qcpool_get</a>.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Quick Composite <a href="./cl_pool_h.html#robo24">Pool</a>, <a href="#robo549">cl_qcpool_put</a>, cl_qcpool_put_tail, <a href="#robo546">cl_qcpool_get</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo551">[Structures]<a name="Component20Library3a20Quick20Composite20Pool2fcl5fqcpool5ft">\r
+Component Library: Quick Composite Pool/cl_qcpool_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_qcpool_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Quick composite pool structure.\r
+\r
+ The <strong>cl_qcpool_t</strong> structure should be treated as opaque and should be\r
+ manipulated only through the provided functions.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef struct _cl_qcpool\r
+{\r
+ uint32_t num_components;\r
+ size_t *component_sizes;\r
+ void **p_components;\r
+ size_t num_objects;\r
+ size_t max_objects;\r
+ size_t grow_size;\r
+ <a href="#robo541">cl_pfn_qcpool_init_t</a> pfn_init;\r
+ <a href="#robo540">cl_pfn_qcpool_dtor_t</a> pfn_dtor;\r
+ const void *context;\r
+ <a href="./cl_qlist_h.html#robo584">cl_qlist_t</a> free_list;\r
+ <a href="./cl_qlist_h.html#robo584">cl_qlist_t</a> alloc_list;\r
+ cl_state_t state;\r
+\r
+} <strong>cl_qcpool_t</strong>;\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> num_components\r
+ Number of components per object.\r
+\r
+ component_sizes\r
+ Array of sizes, one for each component.\r
+\r
+ p_components\r
+ Array of pointers to components, used for the constructor callback.\r
+\r
+ num_objects\r
+ Number of objects managed by the pool\r
+\r
+ grow_size\r
+ Number of objects to add when automatically growing the pool.\r
+\r
+ pfn_init\r
+ Pointer to the user's initializer callback to invoke when initializing\r
+ new objects.\r
+\r
+ pfn_dtor\r
+ Pointer to the user's destructor callback to invoke before deallocating\r
+ memory allocated for objects.\r
+\r
+ context\r
+ User's provided context for callback functions, used by the pool\r
+ when invoking callbacks.\r
+\r
+ free_list\r
+ Quick list of objects available.\r
+\r
+ alloc_list\r
+ Quick list used to store information about allocations.\r
+\r
+ state\r
+ State of the pool.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Quick Composite <a href="./cl_pool_h.html#robo24">Pool</a>\r
+</pre>\r
+</span>\r
+</body>\r
+</html>\r
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">\r
+<html>\r
+<head>\r
+<link rel="stylesheet" href="../robodoc.css" type="text/css">\r
+<title>./inc_doc/complib/cl_qlist_h.html</title>\r
+<!-- Source: ./inc/complib/cl_qlist.h -->\r
+<!-- Generated with ROBODoc Version 4.99.22 (Mar 6 2006) -->\r
+</head>\r
+<body bgcolor="#FFFFFF">\r
+<a name="robo_top_of_doc">Generated from ./inc/complib/cl_qlist.h</a> with <a href="http://sourceforge.net/projects/robodoc/">ROBODoc</a> v4.99.22 on Sun Apr 16 2006 17:39:24\r
+<br />\r
+<hr />\r
+\r
+<h2><a name="robo26">[Modules]<a name="Component20Library2fQuick20List">\r
+Component Library/Quick List</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_modules.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> Quick <a href="./cl_list_h.html#robo15">List</a>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Quick list implements a doubly linked that stores user provided\r
+ <a href="#robo554">cl_list_item_t</a> structures.\r
+ Quick list does not allocate any memory, and can therefore not fail any\r
+ operations. Quick list can therefore be useful in minimizing the error\r
+ paths in code.\r
+\r
+ Quick list is not thread safe, and users must provide serialization when\r
+ adding and removing items from the list. Note that it is possible to\r
+ walk a quick list while simultaneously adding to it.\r
+\r
+ The Quick <a href="./cl_list_h.html#robo15">List</a> functions operate on a <a href="#robo584">cl_qlist_t</a> structure which should be\r
+ treated as opaque and should be manipulated only through the provided\r
+ functions.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Structures:\r
+ <a href="#robo584">cl_qlist_t</a>, <a href="#robo554">cl_list_item_t</a>, <a href="#robo555">cl_list_obj_t</a>\r
+\r
+ Callbacks:\r
+ <a href="#robo556">cl_pfn_qlist_apply_t</a>, <a href="#robo557">cl_pfn_qlist_find_t</a>\r
+\r
+ Item Manipulation:\r
+ <a href="#robo583">cl_qlist_set_obj</a>, <a href="#robo577">cl_qlist_obj</a>\r
+\r
+ Initialization:\r
+ <a href="#robo566">cl_qlist_init</a>\r
+\r
+ Iteration:\r
+ <a href="#robo576">cl_qlist_next</a>, <a href="#robo578">cl_qlist_prev</a>, <a href="#robo565">cl_qlist_head</a>, <a href="#robo585">cl_qlist_tail</a>,\r
+ <a href="#robo560">cl_qlist_end</a>\r
+\r
+ Manipulation:\r
+ <a href="#robo569">cl_qlist_insert_head</a>, <a href="#robo574">cl_qlist_insert_tail</a>,\r
+ <a href="#robo570">cl_qlist_insert_list_head</a>, <a href="#robo571">cl_qlist_insert_list_tail</a>,\r
+ <a href="#robo567">cl_qlist_insert_array_head</a>, <a href="#robo568">cl_qlist_insert_array_tail</a>,\r
+ <a href="#robo573">cl_qlist_insert_prev</a>, <a href="#robo572">cl_qlist_insert_next</a>,\r
+ <a href="#robo580">cl_qlist_remove_head</a>, <a href="#robo582">cl_qlist_remove_tail</a>,\r
+ <a href="#robo581">cl_qlist_remove_item</a>, <a href="#robo579">cl_qlist_remove_all</a>\r
+\r
+ Search:\r
+ <a href="#robo552">cl_is_item_in_qlist</a>, <a href="#robo563">cl_qlist_find_next</a>, <a href="#robo564">cl_qlist_find_prev</a>,\r
+ <a href="#robo561">cl_qlist_find_from_head</a>, <a href="#robo562">cl_qlist_find_from_tail</a>\r
+ <a href="#robo558">cl_qlist_apply_func</a>, <a href="#robo575">cl_qlist_move_items</a>\r
+\r
+ Attributes:\r
+ <a href="#robo559">cl_qlist_count</a>, <a href="#robo553">cl_is_qlist_empty</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo552">[Functions]<a name="Component20Library3a20Quick20List2fcl5fis5fitem5fin5fqlist">\r
+Component Library: Quick List/cl_is_item_in_qlist</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_is_item_in_qlist</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_is_item_in_qlist</strong> function checks for the presence of a\r
+ list item in a quick list.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT boolean_t CL_API\r
+<strong>cl_is_item_in_qlist</strong>(\r
+ IN const <a href="#robo584">cl_qlist_t</a>* const p_list,\r
+ IN const <a href="#robo554">cl_list_item_t</a>* const p_list_item );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_list\r
+ [in] Pointer to a <a href="#robo584">cl_qlist_t</a> structure.\r
+\r
+ p_list_item\r
+ [in] Pointer to the <a href="#robo554">cl_list_item_t</a> to find.\r
+\r
+ RETURN VALUES\r
+ TRUE if the list item was found in the quick list.\r
+\r
+ FALSE otherwise.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Quick <a href="./cl_list_h.html#robo15">List</a>, <a href="#robo581">cl_qlist_remove_item</a>, <a href="#robo554">cl_list_item_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo553">[Functions]<a name="Component20Library3a20Quick20List2fcl5fis5fqlist5fempty">\r
+Component Library: Quick List/cl_is_qlist_empty</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_is_qlist_empty</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_is_qlist_empty</strong> function returns whether a quick list is empty.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_INLINE boolean_t CL_API\r
+<strong>cl_is_qlist_empty</strong>(\r
+ IN const <a href="#robo584">cl_qlist_t</a>* const p_list )\r
+{\r
+ /* CL_ASSERT that a non-null pointer is provided. */\r
+ CL_ASSERT( p_list );\r
+ /* CL_ASSERT that the list was initialized. */\r
+ CL_ASSERT( p_list->state == CL_INITIALIZED );\r
+\r
+ return( !<a href="#robo559">cl_qlist_count</a>( p_list ) );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_list\r
+ [in] Pointer to a <a href="#robo584">cl_qlist_t</a> structure.\r
+\r
+ RETURN VALUES\r
+ TRUE if the specified quick list is empty.\r
+\r
+ FALSE otherwise.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Quick <a href="./cl_list_h.html#robo15">List</a>, <a href="#robo559">cl_qlist_count</a>, <a href="#robo579">cl_qlist_remove_all</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo554">[Structures]<a name="Component20Library3a20Quick20List2fcl5flist5fitem5ft">\r
+Component Library: Quick List/cl_list_item_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_list_item_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_list_item_t</strong> structure is used by lists to store objects.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef struct _cl_list_item\r
+{\r
+ struct _cl_list_item *p_next;\r
+ struct _cl_list_item *p_prev;\r
+#ifdef _DEBUG_\r
+ struct _cl_qlist *p_list;\r
+#endif\r
+\r
+} <strong>cl_list_item_t</strong>;\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> p_next\r
+ Used internally by the list. Users should not use this field.\r
+\r
+ p_prev\r
+ Used internally by the list. Users should not use this field.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Quick <a href="./cl_list_h.html#robo15">List</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo555">[Structures]<a name="Component20Library3a20Quick20List2fcl5flist5fobj5ft">\r
+Component Library: Quick List/cl_list_obj_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_list_obj_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_list_obj_t</strong> structure is used by lists to store objects.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef struct _<a href="./cl_list_h.html#robo383">cl_list_obj</a>\r
+{\r
+ <a href="#robo554">cl_list_item_t</a> list_item;\r
+ const void *p_object; /* User's context */\r
+\r
+} <strong>cl_list_obj_t</strong>;\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> list_item\r
+ Used internally by the list. Users should not use this field.\r
+\r
+ p_object\r
+ User defined context. Users should not access this field directly.\r
+ Use <a href="#robo583">cl_qlist_set_obj</a> and <a href="#robo577">cl_qlist_obj</a> to set and retrieve the value\r
+ of this field.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> Users can use the <a href="#robo583">cl_qlist_set_obj</a> and <a href="#robo577">cl_qlist_obj</a> functions to store\r
+ and retrieve context information in the list item.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Quick <a href="./cl_list_h.html#robo15">List</a>, <a href="#robo583">cl_qlist_set_obj</a>, <a href="#robo577">cl_qlist_obj</a>, <a href="#robo554">cl_list_item_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo556">[Definitions]<a name="Component20Library3a20Quick20List2fcl5fpfn5fqlist5fapply5ft">\r
+Component Library: Quick List/cl_pfn_qlist_apply_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_pfn_qlist_apply_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_pfn_qlist_apply_t</strong> function type defines the prototype for functions\r
+ used to iterate items in a quick list.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef void\r
+(CL_API *<strong>cl_pfn_qlist_apply_t</strong>)(\r
+ IN <a href="#robo554">cl_list_item_t</a>* const p_list_item,\r
+ IN void* context );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_list_item\r
+ [in] Pointer to a <a href="#robo554">cl_list_item_t</a> structure.\r
+\r
+ context\r
+ [in] Value passed to the callback function.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> This function does not return a value.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This function type is provided as function prototype reference for the\r
+ function provided by users as a parameter to the <a href="#robo558">cl_qlist_apply_func</a>\r
+ function.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Quick <a href="./cl_list_h.html#robo15">List</a>, <a href="#robo558">cl_qlist_apply_func</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo557">[Definitions]<a name="Component20Library3a20Quick20List2fcl5fpfn5fqlist5ffind5ft">\r
+Component Library: Quick List/cl_pfn_qlist_find_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_pfn_qlist_find_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_pfn_qlist_find_t</strong> function type defines the prototype for functions\r
+ used to find items in a quick list.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef <a href="./cl_types_h.html#robo304">cl_status_t</a>\r
+(CL_API *<strong>cl_pfn_qlist_find_t</strong>)(\r
+ IN const <a href="#robo554">cl_list_item_t</a>* const p_list_item,\r
+ IN void* context );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_list_item\r
+ [in] Pointer to a <a href="#robo554">cl_list_item_t</a>.\r
+\r
+ context\r
+ [in] Value passed to the callback function.\r
+\r
+ RETURN VALUES\r
+ Return CL_SUCCESS if the desired item was found. This stops list iteration.\r
+\r
+ Return CL_NOT_FOUND to continue list iteration.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This function type is provided as function prototype reference for the\r
+ function provided by users as a parameter to the <a href="#robo561">cl_qlist_find_from_head</a>,\r
+ <a href="#robo562">cl_qlist_find_from_tail</a>, <a href="#robo563">cl_qlist_find_next</a>, and <a href="#robo564">cl_qlist_find_prev</a>\r
+ functions.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Quick <a href="./cl_list_h.html#robo15">List</a>, <a href="#robo561">cl_qlist_find_from_head</a>, <a href="#robo562">cl_qlist_find_from_tail</a>,\r
+ <a href="#robo563">cl_qlist_find_next</a>, <a href="#robo564">cl_qlist_find_prev</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo558">[Functions]<a name="Component20Library3a20Quick20List2fcl5fqlist5fapply5ffunc">\r
+Component Library: Quick List/cl_qlist_apply_func</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_qlist_apply_func</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_qlist_apply_func</strong> function executes a specified function\r
+ for every list item stored in a quick list.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT void CL_API\r
+<strong>cl_qlist_apply_func</strong>(\r
+ IN const <a href="#robo584">cl_qlist_t</a>* const p_list,\r
+ IN <a href="#robo556">cl_pfn_qlist_apply_t</a> pfn_func,\r
+ IN const void* const context );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_list\r
+ [in] Pointer to a <a href="#robo584">cl_qlist_t</a> structure.\r
+\r
+ pfn_func\r
+ [in] Function invoked for every item in the quick list.\r
+ See the <a href="#robo556">cl_pfn_qlist_apply_t</a> function type declaration for details\r
+ about the callback function.\r
+\r
+ context\r
+ [in] Value to pass to the callback functions to provide context.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> This function does not return a value.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> The function provided must not perform any list operations, as these\r
+ would corrupt the quick list.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Quick <a href="./cl_list_h.html#robo15">List</a>, <a href="#robo561">cl_qlist_find_from_head</a>, <a href="#robo562">cl_qlist_find_from_tail</a>,\r
+ <a href="#robo575">cl_qlist_move_items</a>, <a href="#robo556">cl_pfn_qlist_apply_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo559">[Functions]<a name="Component20Library3a20Quick20List2fcl5fqlist5fcount">\r
+Component Library: Quick List/cl_qlist_count</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_qlist_count</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_qlist_count</strong> function returns the number of list items stored\r
+ in a quick list.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_INLINE size_t CL_API\r
+<strong>cl_qlist_count</strong>(\r
+ IN const <a href="#robo584">cl_qlist_t</a>* const p_list )\r
+{\r
+ /* CL_ASSERT that a non-null pointer is provided. */\r
+ CL_ASSERT( p_list );\r
+ /* CL_ASSERT that the list was initialized. */\r
+ CL_ASSERT( p_list->state == CL_INITIALIZED );\r
+\r
+ return( p_list->count );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_list\r
+ [in] Pointer to a <a href="#robo584">cl_qlist_t</a> structure.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> Number of items in the list. This function iterates though the quick\r
+ list to count the items.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Quick <a href="./cl_list_h.html#robo15">List</a>, <a href="#robo553">cl_is_qlist_empty</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo560">[Functions]<a name="Component20Library3a20Quick20List2fcl5fqlist5fend">\r
+Component Library: Quick List/cl_qlist_end</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_qlist_end</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_qlist_end</strong> function returns the end of a quick list.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_INLINE const <a href="#robo554">cl_list_item_t</a>* const CL_API\r
+<strong>cl_qlist_end</strong>(\r
+ IN const <a href="#robo584">cl_qlist_t</a>* const p_list )\r
+{\r
+ /* CL_ASSERT that a non-null pointer is provided. */\r
+ CL_ASSERT( p_list );\r
+ /* CL_ASSERT that the list was initialized. */\r
+ CL_ASSERT( p_list->state == CL_INITIALIZED );\r
+\r
+ return( &p_list->end );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_list\r
+ [in] Pointer to a <a href="#robo584">cl_qlist_t</a> structure.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> Pointer to the end of the list.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> <strong>cl_qlist_end</strong> is useful for determining the validity of list items returned\r
+ by <a href="#robo565">cl_qlist_head</a>, <a href="#robo585">cl_qlist_tail</a>, <a href="#robo576">cl_qlist_next</a>, <a href="#robo578">cl_qlist_prev</a>, as well as\r
+ the cl_qlist_find functions. If the list item pointer returned by any of\r
+ these functions compares to the end, the end of the list was encoutered.\r
+ When using <a href="#robo565">cl_qlist_head</a> or <a href="#robo585">cl_qlist_tail</a>, this condition indicates that\r
+ the list is empty.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Quick <a href="./cl_list_h.html#robo15">List</a>, <a href="#robo565">cl_qlist_head</a>, <a href="#robo585">cl_qlist_tail</a>, <a href="#robo576">cl_qlist_next</a>, <a href="#robo578">cl_qlist_prev</a>,\r
+ <a href="#robo554">cl_list_item_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo561">[Functions]<a name="Component20Library3a20Quick20List2fcl5fqlist5ffind5ffrom5fhead">\r
+Component Library: Quick List/cl_qlist_find_from_head</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_qlist_find_from_head</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_qlist_find_from_head</strong> function invokes a specified function to\r
+ search for an item, starting at the head of a quick list.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_INLINE <a href="#robo554">cl_list_item_t</a>* CL_API\r
+<strong>cl_qlist_find_from_head</strong>(\r
+ IN const <a href="#robo584">cl_qlist_t</a>* const p_list,\r
+ IN <a href="#robo557">cl_pfn_qlist_find_t</a> pfn_func,\r
+ IN const void* const context )\r
+{\r
+ /* CL_ASSERT that a non-null pointer is provided. */\r
+ CL_ASSERT( p_list );\r
+ /* CL_ASSERT that the list was initialized. */\r
+ CL_ASSERT( p_list->state == CL_INITIALIZED );\r
+ /* CL_ASSERT that a find function is provided. */\r
+ CL_ASSERT( pfn_func );\r
+\r
+ return( <a href="#robo563">cl_qlist_find_next</a>( p_list, <a href="#robo560">cl_qlist_end</a>( p_list ), pfn_func,\r
+ context ) );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_list\r
+ [in] Pointer to a <a href="#robo584">cl_qlist_t</a> structure.\r
+\r
+ pfn_func\r
+ [in] Function invoked to determine if a match was found.\r
+ See the <a href="#robo557">cl_pfn_qlist_find_t</a> function type declaration for details\r
+ about the callback function.\r
+\r
+ context\r
+ [in] Value to pass to the callback functions to provide context if a\r
+ callback function is provided, or value compared to the quick list's\r
+ list items.\r
+\r
+ Returns:\r
+ Pointer to the list item, if found.\r
+\r
+ Pointer to the list end otherwise\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> <strong>cl_qlist_find_from_head</strong> does not remove list items from the list.\r
+ The list item is returned when the function specified by the pfn_func\r
+ parameter returns CL_SUCCESS.\r
+\r
+ The function provided by the pfn_func parameter must not perform any list\r
+ operations, as these would corrupt the list.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Quick <a href="./cl_list_h.html#robo15">List</a>, <a href="#robo562">cl_qlist_find_from_tail</a>, <a href="#robo563">cl_qlist_find_next</a>, <a href="#robo564">cl_qlist_find_prev</a>,\r
+ <a href="#robo560">cl_qlist_end</a>, <a href="#robo558">cl_qlist_apply_func</a>, <a href="#robo575">cl_qlist_move_items</a>, <a href="#robo554">cl_list_item_t</a>,\r
+ <a href="#robo557">cl_pfn_qlist_find_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo562">[Functions]<a name="Component20Library3a20Quick20List2fcl5fqlist5ffind5ffrom5ftail">\r
+Component Library: Quick List/cl_qlist_find_from_tail</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_qlist_find_from_tail</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_qlist_find_from_tail</strong> function invokes a specified function to\r
+ search for an item, starting at the tail of a quick list.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_INLINE <a href="#robo554">cl_list_item_t</a>* CL_API\r
+<strong>cl_qlist_find_from_tail</strong>(\r
+ IN const <a href="#robo584">cl_qlist_t</a>* const p_list,\r
+ IN <a href="#robo557">cl_pfn_qlist_find_t</a> pfn_func,\r
+ IN const void* const context )\r
+{\r
+ /* CL_ASSERT that a non-null pointer is provided. */\r
+ CL_ASSERT( p_list );\r
+ /* CL_ASSERT that the list was initialized. */\r
+ CL_ASSERT( p_list->state == CL_INITIALIZED );\r
+ /* CL_ASSERT that a find function is provided. */\r
+ CL_ASSERT( pfn_func );\r
+\r
+ return( <a href="#robo564">cl_qlist_find_prev</a>( p_list, <a href="#robo560">cl_qlist_end</a>( p_list ), pfn_func,\r
+ context ) );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_list\r
+ [in] Pointer to a <a href="#robo584">cl_qlist_t</a> structure.\r
+\r
+ pfn_func\r
+ [in] Function invoked to determine if a match was found.\r
+ See the <a href="#robo557">cl_pfn_qlist_find_t</a> function type declaration for details\r
+ about the callback function.\r
+\r
+ context\r
+ [in] Value to pass to the callback functions to provide context if a\r
+ callback function is provided, or value compared to the quick list's\r
+ list items.\r
+\r
+ Returns:\r
+ Pointer to the list item, if found.\r
+\r
+ Pointer to the list end otherwise\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> <strong>cl_qlist_find_from_tail</strong> does not remove list items from the list.\r
+ The list item is returned when the function specified by the pfn_func\r
+ parameter returns CL_SUCCESS.\r
+\r
+ The function provided by the pfn_func parameter must not perform any list\r
+ operations, as these would corrupt the list.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Quick <a href="./cl_list_h.html#robo15">List</a>, <a href="#robo561">cl_qlist_find_from_head</a>, <a href="#robo563">cl_qlist_find_next</a>, <a href="#robo564">cl_qlist_find_prev</a>,\r
+ <a href="#robo558">cl_qlist_apply_func</a>, <a href="#robo560">cl_qlist_end</a>, <a href="#robo575">cl_qlist_move_items</a>, <a href="#robo554">cl_list_item_t</a>,\r
+ <a href="#robo557">cl_pfn_qlist_find_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo563">[Functions]<a name="Component20Library3a20Quick20List2fcl5fqlist5ffind5fnext">\r
+Component Library: Quick List/cl_qlist_find_next</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_qlist_find_next</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_qlist_find_next</strong> function invokes a specified function to\r
+ search for an item, starting from a given list item.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT <a href="#robo554">cl_list_item_t</a>* CL_API\r
+<strong>cl_qlist_find_next</strong>(\r
+ IN const <a href="#robo584">cl_qlist_t</a>* const p_list,\r
+ IN const <a href="#robo554">cl_list_item_t</a>* const p_list_item,\r
+ IN <a href="#robo557">cl_pfn_qlist_find_t</a> pfn_func,\r
+ IN const void* const context );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_list\r
+ [in] Pointer to a <a href="#robo584">cl_qlist_t</a> structure in which to search.\r
+\r
+ p_list_item\r
+ [in] Pointer to a <a href="#robo554">cl_list_item_t</a> structure from which to start the search.\r
+\r
+ pfn_func\r
+ [in] Function invoked to determine if a match was found.\r
+ See the <a href="#robo557">cl_pfn_qlist_find_t</a> function type declaration for details\r
+ about the callback function.\r
+\r
+ context\r
+ [in] Value to pass to the callback functions to provide context if a\r
+ callback function is provided, or value compared to the quick list's\r
+ list items.\r
+\r
+ Returns:\r
+ Pointer to the list item, if found.\r
+\r
+ p_list_item if not found.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> <strong>cl_qlist_find_next</strong> does not remove list items from the list.\r
+ The list item is returned when the function specified by the pfn_func\r
+ parameter returns CL_SUCCESS. The list item from which the search starts is\r
+ excluded from the search.\r
+\r
+ The function provided by the pfn_func must not perform any list operations,\r
+ as these would corrupt the list.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Quick <a href="./cl_list_h.html#robo15">List</a>, <a href="#robo564">cl_qlist_find_prev</a>, <a href="#robo561">cl_qlist_find_from_head</a>,\r
+ <a href="#robo562">cl_qlist_find_from_tail</a>, <a href="#robo560">cl_qlist_end</a>, <a href="#robo558">cl_qlist_apply_func</a>,\r
+ <a href="#robo575">cl_qlist_move_items</a>, <a href="#robo554">cl_list_item_t</a>, <a href="#robo557">cl_pfn_qlist_find_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo564">[Functions]<a name="Component20Library3a20Quick20List2fcl5fqlist5ffind5fprev">\r
+Component Library: Quick List/cl_qlist_find_prev</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_qlist_find_prev</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_qlist_find_prev</strong> function invokes a specified function to\r
+ search backward for an item, starting from a given list item.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT <a href="#robo554">cl_list_item_t</a>* CL_API\r
+<strong>cl_qlist_find_prev</strong>(\r
+ IN const <a href="#robo584">cl_qlist_t</a>* const p_list,\r
+ IN const <a href="#robo554">cl_list_item_t</a>* const p_list_item,\r
+ IN <a href="#robo557">cl_pfn_qlist_find_t</a> pfn_func,\r
+ IN const void* const context );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_list\r
+ [in] Pointer to a <a href="#robo584">cl_qlist_t</a> structure in which to search.\r
+\r
+ p_list_item\r
+ [in] Pointer to a <a href="#robo554">cl_list_item_t</a> structure from which to start the search.\r
+\r
+ pfn_func\r
+ [in] Function invoked to determine if a match was found.\r
+ See the <a href="#robo557">cl_pfn_qlist_find_t</a> function type declaration for details\r
+ about the callback function.\r
+\r
+ context\r
+ [in] Value to pass to the callback functions to provide context if a\r
+ callback function is provided, or value compared to the quick list's\r
+ list items.\r
+\r
+ Returns:\r
+ Pointer to the list item, if found.\r
+\r
+ p_list_item if not found.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> <strong>cl_qlist_find_prev</strong> does not remove list items from the list.\r
+ The list item is returned when the function specified by the pfn_func\r
+ parameter returns CL_SUCCESS. The list item from which the search starts is\r
+ excluded from the search.\r
+\r
+ The function provided by the pfn_func must not perform any list operations,\r
+ as these would corrupt the list.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Quick <a href="./cl_list_h.html#robo15">List</a>, <a href="#robo563">cl_qlist_find_next</a>, <a href="#robo561">cl_qlist_find_from_head</a>,\r
+ <a href="#robo562">cl_qlist_find_from_tail</a>, <a href="#robo560">cl_qlist_end</a>, <a href="#robo558">cl_qlist_apply_func</a>,\r
+ <a href="#robo575">cl_qlist_move_items</a>, <a href="#robo554">cl_list_item_t</a>, <a href="#robo557">cl_pfn_qlist_find_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo565">[Functions]<a name="Component20Library3a20Quick20List2fcl5fqlist5fhead">\r
+Component Library: Quick List/cl_qlist_head</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_qlist_head</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_qlist_head</strong> function returns the list item at\r
+ the head of a quick list.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_INLINE <a href="#robo554">cl_list_item_t</a>* CL_API\r
+<strong>cl_qlist_head</strong>(\r
+ IN const <a href="#robo584">cl_qlist_t</a>* const p_list )\r
+{\r
+ /* CL_ASSERT that a non-null pointer is provided. */\r
+ CL_ASSERT( p_list );\r
+ /* CL_ASSERT that the list was initialized. */\r
+ CL_ASSERT( p_list->state == CL_INITIALIZED );\r
+\r
+ return( <a href="#robo576">cl_qlist_next</a>( &p_list->end ) );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_list\r
+ [in] Pointer to a <a href="#robo584">cl_qlist_t</a> structure.\r
+\r
+ RETURN VALUES\r
+ Pointer to the list item at the head of the quick list.\r
+\r
+ Pointer to the list end if the list was empty.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> <strong>cl_qlist_head</strong> does not remove the item from the list.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Quick <a href="./cl_list_h.html#robo15">List</a>, <a href="#robo585">cl_qlist_tail</a>, <a href="#robo576">cl_qlist_next</a>, <a href="#robo578">cl_qlist_prev</a>, <a href="#robo560">cl_qlist_end</a>,\r
+ <a href="#robo554">cl_list_item_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo566">[Functions]<a name="Component20Library3a20Quick20List2fcl5fqlist5finit">\r
+Component Library: Quick List/cl_qlist_init</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_qlist_init</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_qlist_init</strong> function initializes a quick list.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_INLINE void CL_API\r
+<strong>cl_qlist_init</strong>(\r
+ IN <a href="#robo584">cl_qlist_t</a>* const p_list )\r
+{\r
+ /* CL_ASSERT that a non-null pointer is provided. */\r
+ CL_ASSERT( p_list );\r
+\r
+ p_list->state = CL_INITIALIZED;\r
+\r
+ /* Reset the quick list data structure. */\r
+ __cl_qlist_reset( p_list );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_list\r
+ [in] Pointer to a <a href="#robo584">cl_qlist_t</a> structure to initialize.\r
+\r
+ RETURN VALUES\r
+ This function does not return a value.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> Allows calling quick list manipulation functions.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Quick <a href="./cl_list_h.html#robo15">List</a>, <a href="#robo569">cl_qlist_insert_head</a>, <a href="#robo574">cl_qlist_insert_tail</a>,\r
+ <a href="#robo580">cl_qlist_remove_head</a>, <a href="#robo582">cl_qlist_remove_tail</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo567">[Functions]<a name="Component20Library3a20Quick20List2fcl5fqlist5finsert5farray5fhead">\r
+Component Library: Quick List/cl_qlist_insert_array_head</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_qlist_insert_array_head</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_qlist_insert_array_head</strong> function inserts an array of list items\r
+ at the head of a quick list.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT void CL_API\r
+<strong>cl_qlist_insert_array_head</strong>(\r
+ IN <a href="#robo584">cl_qlist_t</a>* const p_list,\r
+ IN <a href="#robo554">cl_list_item_t</a>* const p_array,\r
+ IN size_t item_count,\r
+ IN const size_t item_size );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_list\r
+ [in] Pointer to a <a href="#robo584">cl_qlist_t</a> structure into which to insert\r
+ the objects.\r
+\r
+ p_array\r
+ [in] Pointer to the first list item in an array of <a href="#robo554">cl_list_item_t</a>\r
+ structures.\r
+\r
+ item_count\r
+ [in] Number of <a href="#robo554">cl_list_item_t</a> structures in the array.\r
+\r
+ item_size\r
+ [in] Size of the items added to the list. This is the stride in the\r
+ array from one <a href="#robo554">cl_list_item_t</a> structure to the next.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> This function does not return a value.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> Inserts all the list items in the array specified by the p_array parameter\r
+ to the head of the quick list specified by the p_list parameter,\r
+ preserving ordering of the list items.\r
+\r
+ The array pointer passed into the function points to the <a href="#robo554">cl_list_item_t</a>\r
+ in the first element of the caller's element array. There is no\r
+ restriction on where the element is stored in the parent structure.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Quick <a href="./cl_list_h.html#robo15">List</a>, <a href="#robo568">cl_qlist_insert_array_tail</a>, <a href="#robo569">cl_qlist_insert_head</a>,\r
+ <a href="#robo574">cl_qlist_insert_tail</a>, <a href="#robo570">cl_qlist_insert_list_head</a>, <a href="#robo571">cl_qlist_insert_list_tail</a>,\r
+ <a href="#robo573">cl_qlist_insert_prev</a>, <a href="#robo572">cl_qlist_insert_next</a>, <a href="#robo554">cl_list_item_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo568">[Functions]<a name="Component20Library3a20Quick20List2fcl5fqlist5finsert5farray5ftail">\r
+Component Library: Quick List/cl_qlist_insert_array_tail</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_qlist_insert_array_tail</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_qlist_insert_array_tail</strong> function inserts an array of list items\r
+ at the tail of a quick list.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT void CL_API\r
+<strong>cl_qlist_insert_array_tail</strong>(\r
+ IN <a href="#robo584">cl_qlist_t</a>* const p_list,\r
+ IN <a href="#robo554">cl_list_item_t</a>* const p_array,\r
+ IN size_t item_count,\r
+ IN const size_t item_size);\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_list\r
+ [in] Pointer to a <a href="#robo584">cl_qlist_t</a> structure into which to insert\r
+ the objects.\r
+\r
+ p_array\r
+ [in] Pointer to the first list item in an array of <a href="#robo554">cl_list_item_t</a>\r
+ structures.\r
+\r
+ item_count\r
+ [in] Number of <a href="#robo554">cl_list_item_t</a> structures in the array.\r
+\r
+ item_size\r
+ [in] Size of the items added to the list. This is the stride in the\r
+ array from one <a href="#robo554">cl_list_item_t</a> structure to the next.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> This function does not return a value.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> Inserts all the list items in the array specified by the p_array parameter\r
+ to the tail of the quick list specified by the p_list parameter,\r
+ preserving ordering of the list items.\r
+\r
+ The array pointer passed into the function points to the <a href="#robo554">cl_list_item_t</a>\r
+ in the first element of the caller's element array. There is no\r
+ restriction on where the element is stored in the parent structure.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Quick <a href="./cl_list_h.html#robo15">List</a>, <a href="#robo567">cl_qlist_insert_array_head</a>, <a href="#robo569">cl_qlist_insert_head</a>,\r
+ <a href="#robo574">cl_qlist_insert_tail</a>, <a href="#robo570">cl_qlist_insert_list_head</a>, <a href="#robo571">cl_qlist_insert_list_tail</a>,\r
+ <a href="#robo573">cl_qlist_insert_prev</a>, <a href="#robo572">cl_qlist_insert_next</a>, <a href="#robo554">cl_list_item_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo569">[Functions]<a name="Component20Library3a20Quick20List2fcl5fqlist5finsert5fhead">\r
+Component Library: Quick List/cl_qlist_insert_head</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_qlist_insert_head</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_qlist_insert_head</strong> function inserts a list item at the\r
+ head of a quick list.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_INLINE void CL_API\r
+<strong>cl_qlist_insert_head</strong>(\r
+ IN <a href="#robo584">cl_qlist_t</a>* const p_list,\r
+ IN <a href="#robo554">cl_list_item_t</a>* const p_list_item )\r
+{\r
+ /* CL_ASSERT that a non-null pointer is provided. */\r
+ CL_ASSERT( p_list );\r
+ /* CL_ASSERT that a non-null pointer is provided. */\r
+ CL_ASSERT( p_list_item );\r
+ /* CL_ASSERT that the list was initialized. */\r
+ CL_ASSERT( p_list->state == CL_INITIALIZED );\r
+\r
+ /*\r
+ * The list item must not already be part of the list. Note that this\r
+ * assertion may fail if an uninitialized list item happens to have its\r
+ * list pointer equal to the specified list. The chances of this\r
+ * happening are acceptable in light of the value of this check.\r
+ */\r
+ CL_ASSERT( p_list_item->p_list != p_list );\r
+\r
+#if defined( _DEBUG_ )\r
+ p_list_item->p_list = p_list;\r
+#endif\r
+\r
+ /* Insert before the head. */\r
+ __cl_primitive_insert( <a href="#robo565">cl_qlist_head</a>( p_list ), p_list_item );\r
+\r
+ p_list->count++;\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_list\r
+ [in] Pointer to a <a href="#robo584">cl_qlist_t</a> structure into which to insert the object.\r
+\r
+ p_list_item\r
+ [in] Pointer to a <a href="#robo554">cl_list_item_t</a> structure to add.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> This function does not return a value.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> In debug builds, <strong>cl_qlist_insert_head</strong> asserts that the specified list item\r
+ is not already in the list.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Quick <a href="./cl_list_h.html#robo15">List</a>, <a href="#robo574">cl_qlist_insert_tail</a>, <a href="#robo570">cl_qlist_insert_list_head</a>,\r
+ <a href="#robo571">cl_qlist_insert_list_tail</a>, <a href="#robo567">cl_qlist_insert_array_head</a>,\r
+ <a href="#robo568">cl_qlist_insert_array_tail</a>, <a href="#robo573">cl_qlist_insert_prev</a>, <a href="#robo572">cl_qlist_insert_next</a>,\r
+ <a href="#robo580">cl_qlist_remove_head</a>, <a href="#robo554">cl_list_item_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo570">[Functions]<a name="Component20Library3a20Quick20List2fcl5fqlist5finsert5flist5fhead">\r
+Component Library: Quick List/cl_qlist_insert_list_head</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_qlist_insert_list_head</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_qlist_insert_list_head</strong> function merges two quick lists by\r
+ inserting one at the head of the other.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT void CL_API\r
+<strong>cl_qlist_insert_list_head</strong>(\r
+ IN <a href="#robo584">cl_qlist_t</a>* const p_dest_list,\r
+ IN <a href="#robo584">cl_qlist_t</a>* const p_src_list );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_dest_list\r
+ [in] Pointer to destination quicklist object.\r
+\r
+ p_src_list\r
+ [in] Pointer to quicklist to add.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> This function does not return a value.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> Inserts all list items in the source list to the head of the\r
+ destination list. The ordering of the list items is preserved.\r
+\r
+ The list pointed to by the p_src_list parameter is empty when\r
+ the call returns.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Quick <a href="./cl_list_h.html#robo15">List</a>, <a href="#robo571">cl_qlist_insert_list_tail</a>, <a href="#robo569">cl_qlist_insert_head</a>,\r
+ <a href="#robo574">cl_qlist_insert_tail</a>, <a href="#robo567">cl_qlist_insert_array_head</a>,\r
+ <a href="#robo568">cl_qlist_insert_array_tail</a>, <a href="#robo573">cl_qlist_insert_prev</a>, <a href="#robo572">cl_qlist_insert_next</a>,\r
+ <a href="#robo554">cl_list_item_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo571">[Functions]<a name="Component20Library3a20Quick20List2fcl5fqlist5finsert5flist5ftail">\r
+Component Library: Quick List/cl_qlist_insert_list_tail</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_qlist_insert_list_tail</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_qlist_insert_list_tail</strong> function merges two quick lists by\r
+ inserting one at the tail of the other.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT void CL_API\r
+<strong>cl_qlist_insert_list_tail</strong>(\r
+ IN <a href="#robo584">cl_qlist_t</a>* const p_dest_list,\r
+ IN <a href="#robo584">cl_qlist_t</a>* const p_src_list );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_dest_list\r
+ [in] Pointer to destination quicklist object\r
+\r
+ p_src_list\r
+ [in] Pointer to quicklist to add\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> This function does not return a value.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> Inserts all list items in the source list to the tail of the\r
+ destination list. The ordering of the list items is preserved.\r
+\r
+ The list pointed to by the p_src_list parameter is empty when\r
+ the call returns.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Quick <a href="./cl_list_h.html#robo15">List</a>, <a href="#robo570">cl_qlist_insert_list_head</a>, <a href="#robo569">cl_qlist_insert_head</a>,\r
+ <a href="#robo574">cl_qlist_insert_tail</a>, <a href="#robo567">cl_qlist_insert_array_head</a>,\r
+ <a href="#robo568">cl_qlist_insert_array_tail</a>, <a href="#robo573">cl_qlist_insert_prev</a>, <a href="#robo572">cl_qlist_insert_next</a>,\r
+ <a href="#robo554">cl_list_item_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo572">[Functions]<a name="Component20Library3a20Quick20List2fcl5fqlist5finsert5fnext">\r
+Component Library: Quick List/cl_qlist_insert_next</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_qlist_insert_next</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_qlist_insert_next</strong> function inserts a list item after a specified\r
+ list item in a quick list.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_INLINE void CL_API\r
+<strong>cl_qlist_insert_next</strong>(\r
+ IN <a href="#robo584">cl_qlist_t</a>* const p_list,\r
+ IN <a href="#robo554">cl_list_item_t</a>* const p_list_item,\r
+ IN <a href="#robo554">cl_list_item_t</a>* const p_new_item )\r
+{\r
+ /* CL_ASSERT that a non-null pointer is provided. */\r
+ CL_ASSERT( p_list );\r
+ /* CL_ASSERT that a non-null pointer is provided. */\r
+ CL_ASSERT( p_list_item );\r
+ /* CL_ASSERT that a non-null pointer is provided. */\r
+ CL_ASSERT( p_new_item );\r
+ /* CL_ASSERT that the list was initialized. */\r
+ CL_ASSERT( p_list->state == CL_INITIALIZED );\r
+\r
+ /*\r
+ * The list item must not already be part of the list. Note that this\r
+ * assertion may fail if an uninitialized list item happens to have its\r
+ * list pointer equal to the specified list. The chances of this\r
+ * happening are acceptable in light of the value of this check.\r
+ */\r
+ CL_ASSERT( p_new_item->p_list != p_list );\r
+\r
+#if defined( _DEBUG_ )\r
+ p_new_item->p_list = p_list;\r
+#endif\r
+\r
+ __cl_primitive_insert( <a href="#robo576">cl_qlist_next</a>( p_list_item ), p_new_item );\r
+\r
+ p_list->count++;\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_list\r
+ [in] Pointer to a <a href="#robo584">cl_qlist_t</a> structure into which to add the new item.\r
+\r
+ p_list_item\r
+ [in] Pointer to a <a href="#robo554">cl_list_item_t</a> structure.\r
+\r
+ p_new_item\r
+ [in] Pointer to a <a href="#robo554">cl_list_item_t</a> structure to add to the quick list.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> This function does not return a value.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> Inserts the new list item after the list item specified by p_list_item.\r
+ The list item specified by p_list_item must be in the quick list.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Quick <a href="./cl_list_h.html#robo15">List</a>, <a href="#robo573">cl_qlist_insert_prev</a>, <a href="#robo569">cl_qlist_insert_head</a>,\r
+ <a href="#robo574">cl_qlist_insert_tail</a>, <a href="#robo570">cl_qlist_insert_list_head</a>, <a href="#robo571">cl_qlist_insert_list_tail</a>,\r
+ <a href="#robo567">cl_qlist_insert_array_head</a>, <a href="#robo568">cl_qlist_insert_array_tail</a>, <a href="#robo554">cl_list_item_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo573">[Functions]<a name="Component20Library3a20Quick20List2fcl5fqlist5finsert5fprev">\r
+Component Library: Quick List/cl_qlist_insert_prev</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_qlist_insert_prev</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_qlist_insert_prev</strong> function inserts a list item before a\r
+ specified list item in a quick list.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_INLINE void CL_API\r
+<strong>cl_qlist_insert_prev</strong>(\r
+ IN <a href="#robo584">cl_qlist_t</a>* const p_list,\r
+ IN <a href="#robo554">cl_list_item_t</a>* const p_list_item,\r
+ IN <a href="#robo554">cl_list_item_t</a>* const p_new_item )\r
+{\r
+ /* CL_ASSERT that a non-null pointer is provided. */\r
+ CL_ASSERT( p_list );\r
+ /* CL_ASSERT that a non-null pointer is provided. */\r
+ CL_ASSERT( p_list_item );\r
+ /* CL_ASSERT that a non-null pointer is provided. */\r
+ CL_ASSERT( p_new_item );\r
+ /* CL_ASSERT that the list was initialized. */\r
+ CL_ASSERT( p_list->state == CL_INITIALIZED );\r
+\r
+ /*\r
+ * The list item must not already be part of the list. Note that this\r
+ * assertion may fail if an uninitialized list item happens to have its\r
+ * list pointer equal to the specified list. The chances of this\r
+ * happening are acceptable in light of the value of this check.\r
+ */\r
+ CL_ASSERT( p_new_item->p_list != p_list );\r
+\r
+#if defined( _DEBUG_ )\r
+ p_new_item->p_list = p_list;\r
+#endif\r
+\r
+ __cl_primitive_insert( p_list_item, p_new_item );\r
+\r
+ p_list->count++;\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_list\r
+ [in] Pointer to a <a href="#robo584">cl_qlist_t</a> structure into which to add the new item.\r
+\r
+ p_list_item\r
+ [in] Pointer to a <a href="#robo554">cl_list_item_t</a> structure.\r
+\r
+ p_new_item\r
+ [in] Pointer to a <a href="#robo554">cl_list_item_t</a> structure to add to the quick list.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> This function does not return a value.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> Inserts the new list item before the list item specified by p_list_item.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Quick <a href="./cl_list_h.html#robo15">List</a>, <a href="#robo572">cl_qlist_insert_next</a>, <a href="#robo569">cl_qlist_insert_head</a>,\r
+ <a href="#robo574">cl_qlist_insert_tail</a>, <a href="#robo570">cl_qlist_insert_list_head</a>, <a href="#robo571">cl_qlist_insert_list_tail</a>,\r
+ <a href="#robo567">cl_qlist_insert_array_head</a>, <a href="#robo568">cl_qlist_insert_array_tail</a>, <a href="#robo554">cl_list_item_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo574">[Functions]<a name="Component20Library3a20Quick20List2fcl5fqlist5finsert5ftail">\r
+Component Library: Quick List/cl_qlist_insert_tail</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_qlist_insert_tail</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_qlist_insert_tail</strong> function inserts a list item at the tail\r
+ of a quick list.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_INLINE void CL_API\r
+<strong>cl_qlist_insert_tail</strong>(\r
+ IN <a href="#robo584">cl_qlist_t</a>* const p_list,\r
+ IN <a href="#robo554">cl_list_item_t</a>* const p_list_item )\r
+{\r
+ /* CL_ASSERT that a non-null pointer is provided. */\r
+ CL_ASSERT( p_list );\r
+ /* CL_ASSERT that a non-null pointer is provided. */\r
+ CL_ASSERT( p_list_item );\r
+ /* CL_ASSERT that the list was initialized. */\r
+ CL_ASSERT( p_list->state == CL_INITIALIZED );\r
+\r
+ /*\r
+ * The list item must not already be part of the list. Note that this\r
+ * assertion may fail if an uninitialized list item happens to have its\r
+ * list pointer equal to the specified list. The chances of this\r
+ * happening are acceptable in light of the value of this check.\r
+ */\r
+ CL_ASSERT( p_list_item->p_list != p_list );\r
+\r
+#if defined( _DEBUG_ )\r
+ p_list_item->p_list = p_list;\r
+#endif\r
+\r
+ /*\r
+ * Put the new element in front of the end which is the same\r
+ * as being at the tail\r
+ */\r
+ __cl_primitive_insert( &p_list->end, p_list_item );\r
+\r
+ p_list->count++;\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_list\r
+ [in] Pointer to a <a href="#robo584">cl_qlist_t</a> structure into which to insert the object.\r
+\r
+ p_list_item\r
+ [in] Pointer to <a href="#robo554">cl_list_item_t</a> structure to add.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> This function does not return a value.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> In debug builds, <strong>cl_qlist_insert_tail</strong> asserts that the specified list item\r
+ is not already in the list.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Quick <a href="./cl_list_h.html#robo15">List</a>, <a href="#robo569">cl_qlist_insert_head</a>, <a href="#robo570">cl_qlist_insert_list_head</a>,\r
+ <a href="#robo571">cl_qlist_insert_list_tail</a>, <a href="#robo567">cl_qlist_insert_array_head</a>,\r
+ <a href="#robo568">cl_qlist_insert_array_tail</a>, <a href="#robo573">cl_qlist_insert_prev</a>, <a href="#robo572">cl_qlist_insert_next</a>,\r
+ <a href="#robo582">cl_qlist_remove_tail</a>, <a href="#robo554">cl_list_item_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo575">[Functions]<a name="Component20Library3a20Quick20List2fcl5fqlist5fmove5fitems">\r
+Component Library: Quick List/cl_qlist_move_items</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_qlist_move_items</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_qlist_move_items</strong> function moves list items from one list to\r
+ another based on the return value of a user supplied function.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT void CL_API\r
+<strong>cl_qlist_move_items</strong>(\r
+ IN <a href="#robo584">cl_qlist_t</a>* const p_src_list,\r
+ IN <a href="#robo584">cl_qlist_t</a>* const p_dest_list,\r
+ IN <a href="#robo557">cl_pfn_qlist_find_t</a> pfn_func,\r
+ IN const void* const context );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_src_list\r
+ [in] Pointer to a <a href="#robo584">cl_qlist_t</a> structure from which\r
+ list items are removed.\r
+\r
+ p_dest_list\r
+ [in] Pointer to a <a href="#robo584">cl_qlist_t</a> structure to which the source\r
+ list items are added.\r
+\r
+ pfn_func\r
+ [in] Function invoked to determine if a match was found.\r
+ See the <a href="#robo557">cl_pfn_qlist_find_t</a> function type declaration for details\r
+ about the callback function.\r
+\r
+ context\r
+ [in] Value to pass to the callback functions to provide context.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> This function does not return a value.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> If the function specified by the pfn_func parameter returns CL_SUCCESS,\r
+ the related list item is removed from p_src_list and inserted at the tail\r
+ of the p_dest_list.\r
+\r
+ The <strong>cl_qlist_move_items</strong> function continues iterating through p_src_list\r
+ from the last item moved, allowing multiple items to be located and moved\r
+ in a single list iteration.\r
+\r
+ The function specified by pfn_func must not perform any list operations,\r
+ as these would corrupt the list.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Quick <a href="./cl_list_h.html#robo15">List</a>, <a href="#robo561">cl_qlist_find_from_head</a>, <a href="#robo562">cl_qlist_find_from_tail</a>,\r
+ <a href="#robo558">cl_qlist_apply_func</a>, <a href="#robo557">cl_pfn_qlist_find_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo576">[Functions]<a name="Component20Library3a20Quick20List2fcl5fqlist5fnext">\r
+Component Library: Quick List/cl_qlist_next</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_qlist_next</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_qlist_next</strong> function returns a pointer to the list item following\r
+ a given list item in a quick list.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_INLINE <a href="#robo554">cl_list_item_t</a>* CL_API\r
+<strong>cl_qlist_next</strong>(\r
+ IN const <a href="#robo554">cl_list_item_t</a>* const p_list_item )\r
+{\r
+ /* CL_ASSERT that a non-null pointer is provided. */\r
+ CL_ASSERT( p_list_item );\r
+\r
+ /* Return the next item. */\r
+ return( p_list_item->p_next );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_list_item\r
+ [in] Pointer to the <a href="#robo554">cl_list_item_t</a> whose successor to return.\r
+\r
+ Returns:\r
+ Pointer to the list item following the list item specified by\r
+ the p_list_item parameter in the quick list.\r
+\r
+ Pointer to the list end if p_list_item was at the tail of the list.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Quick <a href="./cl_list_h.html#robo15">List</a>, <a href="#robo565">cl_qlist_head</a>, <a href="#robo585">cl_qlist_tail</a>, <a href="#robo578">cl_qlist_prev</a>, <a href="#robo560">cl_qlist_end</a>,\r
+ <a href="#robo554">cl_list_item_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo577">[Functions]<a name="Component20Library3a20Quick20List2fcl5fqlist5fobj">\r
+Component Library: Quick List/cl_qlist_obj</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_qlist_obj</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <a href="#robo583">cl_qlist_set_obj</a> function returns the object stored in a list object.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_INLINE void* CL_API\r
+<strong>cl_qlist_obj</strong>(\r
+ IN const <a href="#robo555">cl_list_obj_t</a>* const p_list_obj )\r
+{\r
+ /* CL_ASSERT that a non-null pointer is provided. */\r
+ CL_ASSERT( p_list_obj );\r
+\r
+ return( (void*)p_list_obj->p_object );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_list_obj\r
+ [in] Pointer to a <a href="#robo555">cl_list_obj_t</a> structure.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> Returns the value of the object pointer stored in the list object.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Quick <a href="./cl_list_h.html#robo15">List</a>, <a href="#robo583">cl_qlist_set_obj</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo578">[Functions]<a name="Component20Library3a20Quick20List2fcl5fqlist5fprev">\r
+Component Library: Quick List/cl_qlist_prev</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_qlist_prev</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_qlist_prev</strong> function returns a poirter to the list item preceding\r
+ a given list item in a quick list.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_INLINE <a href="#robo554">cl_list_item_t</a>* CL_API\r
+<strong>cl_qlist_prev</strong>(\r
+ IN const <a href="#robo554">cl_list_item_t</a>* const p_list_item )\r
+{\r
+ /* CL_ASSERT that a non-null pointer is provided. */\r
+ CL_ASSERT( p_list_item );\r
+\r
+ /* Return the previous item. */\r
+ return( p_list_item->p_prev );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_list_item\r
+ [in] Pointer to the <a href="#robo554">cl_list_item_t</a> whose predecessor to return.\r
+\r
+ Returns:\r
+ Pointer to the list item preceding the list item specified by\r
+ the p_list_item parameter in the quick list.\r
+\r
+ Pointer to the list end if p_list_item was at the tail of the list.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Quick <a href="./cl_list_h.html#robo15">List</a>, <a href="#robo565">cl_qlist_head</a>, <a href="#robo585">cl_qlist_tail</a>, <a href="#robo576">cl_qlist_next</a>, <a href="#robo560">cl_qlist_end</a>,\r
+ <a href="#robo554">cl_list_item_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo579">[Functions]<a name="Component20Library3a20Quick20List2fcl5fqlist5fremove5fall">\r
+Component Library: Quick List/cl_qlist_remove_all</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_qlist_remove_all</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_qlist_remove_all</strong> function removes all items from a quick list.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_INLINE void CL_API\r
+<strong>cl_qlist_remove_all</strong>(\r
+ IN <a href="#robo584">cl_qlist_t</a>* const p_list )\r
+{\r
+#if defined( _DEBUG_ )\r
+ <a href="#robo554">cl_list_item_t</a> *p_list_item;\r
+\r
+ /* CL_ASSERT that a non-null pointer is provided. */\r
+ CL_ASSERT( p_list );\r
+ /* CL_ASSERT that the list was initialized. */\r
+ CL_ASSERT( p_list->state == CL_INITIALIZED );\r
+ p_list_item = <a href="#robo565">cl_qlist_head</a>( p_list );\r
+ while( p_list_item != <a href="#robo560">cl_qlist_end</a>( p_list ) )\r
+ {\r
+ p_list_item = <a href="#robo576">cl_qlist_next</a>( p_list_item );\r
+ <a href="#robo578">cl_qlist_prev</a>( p_list_item )->p_list = NULL;\r
+ }\r
+#endif\r
+\r
+ __cl_qlist_reset( p_list );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_list\r
+ [in] Pointer to a <a href="#robo584">cl_qlist_t</a> structure.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> This function does not return a value.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Quick <a href="./cl_list_h.html#robo15">List</a>, <a href="#robo580">cl_qlist_remove_head</a>, <a href="#robo582">cl_qlist_remove_tail</a>,\r
+ <a href="#robo581">cl_qlist_remove_item</a>, <a href="#robo554">cl_list_item_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo580">[Functions]<a name="Component20Library3a20Quick20List2fcl5fqlist5fremove5fhead">\r
+Component Library: Quick List/cl_qlist_remove_head</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_qlist_remove_head</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_qlist_remove_head</strong> function removes and returns the list item\r
+ at the head of a quick list.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_INLINE <a href="#robo554">cl_list_item_t</a>* CL_API\r
+<strong>cl_qlist_remove_head</strong>(\r
+ IN <a href="#robo584">cl_qlist_t</a>* const p_list )\r
+{\r
+ <a href="#robo554">cl_list_item_t</a> *p_item;\r
+\r
+ /* CL_ASSERT that a non-null pointer is provided. */\r
+ CL_ASSERT( p_list );\r
+ /* CL_ASSERT that the list was initialized. */\r
+ CL_ASSERT( p_list->state == CL_INITIALIZED );\r
+\r
+ p_item = <a href="#robo565">cl_qlist_head</a>( p_list );\r
+ /* CL_ASSERT that the list item is part of the list. */\r
+ CL_ASSERT( p_item->p_list == p_list );\r
+\r
+ if( p_item == <a href="#robo560">cl_qlist_end</a>( p_list ) )\r
+ return( p_item );\r
+\r
+#if defined( _DEBUG_ )\r
+ /* Clear the item's link to the list. */\r
+ p_item->p_list = NULL;\r
+#endif\r
+\r
+ __cl_primitive_remove( p_item );\r
+\r
+ p_list->count--;\r
+\r
+ return( p_item );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_list\r
+ [in] Pointer to a <a href="#robo584">cl_qlist_t</a> structure.\r
+\r
+ RETURN VALUES\r
+ Returns a pointer to the list item formerly at the head of the quick list.\r
+\r
+ Pointer to the list end if the list was empty.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Quick <a href="./cl_list_h.html#robo15">List</a>, <a href="#robo582">cl_qlist_remove_tail</a>, <a href="#robo579">cl_qlist_remove_all</a>, <a href="#robo581">cl_qlist_remove_item</a>,\r
+ <a href="#robo560">cl_qlist_end</a>, <a href="#robo565">cl_qlist_head</a>, <a href="#robo554">cl_list_item_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo581">[Functions]<a name="Component20Library3a20Quick20List2fcl5fqlist5fremove5fitem">\r
+Component Library: Quick List/cl_qlist_remove_item</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_qlist_remove_item</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_qlist_remove_item</strong> function removes a specific list item from a quick list.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_INLINE void CL_API\r
+<strong>cl_qlist_remove_item</strong>(\r
+ IN <a href="#robo584">cl_qlist_t</a>* const p_list,\r
+ IN <a href="#robo554">cl_list_item_t</a>* const p_list_item )\r
+{\r
+ /* CL_ASSERT that a non-null pointer is provided. */\r
+ CL_ASSERT( p_list );\r
+ /* CL_ASSERT that a non-null pointer is provided. */\r
+ CL_ASSERT( p_list_item );\r
+ /* CL_ASSERT that the list was initialized. */\r
+ CL_ASSERT( p_list->state == CL_INITIALIZED );\r
+ /* CL_ASSERT that the list item is part of the list. */\r
+ CL_ASSERT( p_list_item->p_list == p_list );\r
+\r
+ if( p_list_item == <a href="#robo560">cl_qlist_end</a>( p_list ) )\r
+ return;\r
+\r
+#if defined( _DEBUG_ )\r
+ /* Clear the item's link to the list. */\r
+ p_list_item->p_list = NULL;\r
+#endif\r
+\r
+ __cl_primitive_remove( p_list_item );\r
+\r
+ p_list->count--;\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_list\r
+ [in] Pointer to a <a href="#robo584">cl_qlist_t</a> structure from which to remove the item.\r
+\r
+ p_list_item\r
+ [in] Pointer to a <a href="#robo554">cl_list_item_t</a> structure to remove.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> This function does not return a value.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> Removes the list item pointed to by the p_list_item parameter from\r
+ its list.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Quick <a href="./cl_list_h.html#robo15">List</a>, <a href="#robo580">cl_qlist_remove_head</a>, <a href="#robo582">cl_qlist_remove_tail</a>, <a href="#robo579">cl_qlist_remove_all</a>,\r
+ <a href="#robo554">cl_list_item_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo582">[Functions]<a name="Component20Library3a20Quick20List2fcl5fqlist5fremove5ftail">\r
+Component Library: Quick List/cl_qlist_remove_tail</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_qlist_remove_tail</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_qlist_remove_tail</strong> function removes and returns the list item\r
+ at the tail of a quick list.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_INLINE <a href="#robo554">cl_list_item_t</a>* CL_API\r
+<strong>cl_qlist_remove_tail</strong>(\r
+ IN <a href="#robo584">cl_qlist_t</a>* const p_list )\r
+{\r
+ <a href="#robo554">cl_list_item_t</a> *p_item;\r
+\r
+ /* CL_ASSERT that a non-null pointer is provided. */\r
+ CL_ASSERT( p_list );\r
+ /* CL_ASSERT that the list was initialized. */\r
+ CL_ASSERT( p_list->state == CL_INITIALIZED );\r
+\r
+ p_item = <a href="#robo585">cl_qlist_tail</a>( p_list );\r
+ /* CL_ASSERT that the list item is part of the list. */\r
+ CL_ASSERT( p_item->p_list == p_list );\r
+\r
+ if( p_item == <a href="#robo560">cl_qlist_end</a>( p_list ) )\r
+ return( p_item );\r
+\r
+#if defined( _DEBUG_ )\r
+ /* Clear the item's link to the list. */\r
+ p_item->p_list = NULL;\r
+#endif\r
+\r
+ __cl_primitive_remove( p_item );\r
+\r
+ p_list->count--;\r
+\r
+ return( p_item );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_list\r
+ [in] Pointer to a <a href="#robo584">cl_qlist_t</a> structure.\r
+\r
+ RETURN VALUES\r
+ Returns a pointer to the list item formerly at the tail of the quick list.\r
+\r
+ Pointer to the list end if the list was empty.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Quick <a href="./cl_list_h.html#robo15">List</a>, <a href="#robo580">cl_qlist_remove_head</a>, <a href="#robo579">cl_qlist_remove_all</a>, <a href="#robo581">cl_qlist_remove_item</a>,\r
+ <a href="#robo560">cl_qlist_end</a>, <a href="#robo585">cl_qlist_tail</a>, <a href="#robo554">cl_list_item_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo583">[Functions]<a name="Component20Library3a20Quick20List2fcl5fqlist5fset5fobj">\r
+Component Library: Quick List/cl_qlist_set_obj</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_qlist_set_obj</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_qlist_set_obj</strong> function sets the object stored in a list object.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_INLINE void CL_API\r
+<strong>cl_qlist_set_obj</strong>(\r
+ IN <a href="#robo555">cl_list_obj_t</a>* const p_list_obj,\r
+ IN const void* const p_object )\r
+{\r
+ /* CL_ASSERT that a non-null pointer is provided. */\r
+ CL_ASSERT( p_list_obj );\r
+ p_list_obj->p_object = p_object;\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_list_obj\r
+ [in] Pointer to a <a href="#robo555">cl_list_obj_t</a> structure.\r
+\r
+ p_object\r
+ [in] User defined context.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> This function does not return a value.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Quick <a href="./cl_list_h.html#robo15">List</a>, <a href="#robo577">cl_qlist_obj</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo584">[Structures]<a name="Component20Library3a20Quick20List2fcl5fqlist5ft">\r
+Component Library: Quick List/cl_qlist_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_qlist_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Quick list structure.\r
+\r
+ The <strong>cl_qlist_t</strong> structure should be treated as opaque and should be\r
+ manipulated only through the provided functions.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef struct _cl_qlist\r
+{\r
+ <a href="#robo554">cl_list_item_t</a> end;\r
+ size_t count;\r
+ cl_state_t state;\r
+\r
+} <strong>cl_qlist_t</strong>;\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> end\r
+ <a href="./cl_list_h.html#robo15">List</a> item used to mark the end of the list.\r
+\r
+ count\r
+ Number of items in the list.\r
+\r
+ state\r
+ State of the quick list.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Quick <a href="./cl_list_h.html#robo15">List</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo585">[Functions]<a name="Component20Library3a20Quick20List2fcl5fqlist5ftail">\r
+Component Library: Quick List/cl_qlist_tail</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_qlist_tail</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_qlist_tail</strong> function returns the list item at\r
+ the tail of a quick list.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_INLINE <a href="#robo554">cl_list_item_t</a>* CL_API\r
+<strong>cl_qlist_tail</strong>(\r
+ IN const <a href="#robo584">cl_qlist_t</a>* const p_list )\r
+{\r
+ /* CL_ASSERT that a non-null pointer is provided. */\r
+ CL_ASSERT( p_list );\r
+ /* CL_ASSERT that the list was initialized. */\r
+ CL_ASSERT( p_list->state == CL_INITIALIZED );\r
+\r
+ return( <a href="#robo578">cl_qlist_prev</a>( &p_list->end ) );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_list\r
+ [in] Pointer to a <a href="#robo584">cl_qlist_t</a> structure.\r
+\r
+ RETURN VALUES\r
+ Pointer to the list item at the tail of the quick list.\r
+\r
+ Pointer to the list end if the list was empty.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> <strong>cl_qlist_tail</strong> does not remove the item from the list.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Quick <a href="./cl_list_h.html#robo15">List</a>, <a href="#robo565">cl_qlist_head</a>, <a href="#robo576">cl_qlist_next</a>, <a href="#robo578">cl_qlist_prev</a>, <a href="#robo560">cl_qlist_end</a>,\r
+ <a href="#robo554">cl_list_item_t</a>\r
+</pre>\r
+</span>\r
+</body>\r
+</html>\r
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">\r
+<html>\r
+<head>\r
+<link rel="stylesheet" href="../robodoc.css" type="text/css">\r
+<title>./inc_doc/complib/cl_qlockpool_h.html</title>\r
+<!-- Source: ./inc/complib/cl_qlockpool.h -->\r
+<!-- Generated with ROBODoc Version 4.99.22 (Mar 6 2006) -->\r
+</head>\r
+<body bgcolor="#FFFFFF">\r
+<a name="robo_top_of_doc">Generated from ./inc/complib/cl_qlockpool.h</a> with <a href="http://sourceforge.net/projects/robodoc/">ROBODoc</a> v4.99.22 on Sun Apr 16 2006 17:39:24\r
+<br />\r
+<hr />\r
+\r
+<h2><a name="robo27">[Modules]<a name="Component20Library2fQuick20Locking20Pool">\r
+Component Library/Quick Locking Pool</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_modules.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> Quick Locking <a href="./cl_pool_h.html#robo24">Pool</a>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The Quick Locking <a href="./cl_pool_h.html#robo24">Pool</a> represents a thread-safe quick pool.\r
+\r
+ This object should be treated as opaque and should be\r
+ manipulated only through the provided functions.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Structures:\r
+ <a href="#robo591">cl_qlock_pool_t</a>\r
+\r
+ Initialization:\r
+ <a href="#robo586">cl_qlock_pool_construct</a>, <a href="#robo589">cl_qlock_pool_init</a>, <a href="#robo587">cl_qlock_pool_destroy</a>\r
+\r
+ Manipulation\r
+ <a href="#robo588">cl_qlock_pool_get</a>, <a href="#robo590">cl_qlock_pool_put</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo586">[Functions]<a name="Component20Library3a20Quick20Locking20Pool2fcl5fqlock5fpool5fconstruct">\r
+Component Library: Quick Locking Pool/cl_qlock_pool_construct</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_qlock_pool_construct</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> This function constructs a Quick Locking <a href="./cl_pool_h.html#robo24">Pool</a>.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>static inline void\r
+<strong>cl_qlock_pool_construct</strong>(\r
+ IN <a href="#robo591">cl_qlock_pool_t</a>* const p_pool )\r
+{\r
+ <a href="./cl_qpool_h.html#robo618">cl_qpool_construct</a>( &p_pool->pool );\r
+ <a href="./cl_spinlock_h.html#robo649">cl_spinlock_construct</a>( &p_pool->lock );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_pool\r
+ [in] Pointer to a Quick Locking <a href="./cl_pool_h.html#robo24">Pool</a> to construct.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> This function does not return a value.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> Allows calling <a href="#robo589">cl_qlock_pool_init</a>, <a href="#robo587">cl_qlock_pool_destroy</a>\r
+\r
+ Calling <strong>cl_qlock_pool_construct</strong> is a prerequisite to calling any other\r
+ method except <a href="#robo589">cl_qlock_pool_init</a>.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Quick Locking <a href="./cl_pool_h.html#robo24">Pool</a>, <a href="#robo589">cl_qlock_pool_init</a>, <a href="#robo587">cl_qlock_pool_destroy</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo587">[Functions]<a name="Component20Library3a20Quick20Locking20Pool2fcl5fqlock5fpool5fdestroy">\r
+Component Library: Quick Locking Pool/cl_qlock_pool_destroy</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_qlock_pool_destroy</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_qlock_pool_destroy</strong> function destroys a node, releasing\r
+ all resources.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>static inline void\r
+<strong>cl_qlock_pool_destroy</strong>(\r
+ IN <a href="#robo591">cl_qlock_pool_t</a>* const p_pool )\r
+{\r
+ /*\r
+ If the pool has already been put into use, grab the lock\r
+ to sync with other threads before we blow everything away.\r
+ */\r
+ if( <a href="./cl_qpool_h.html#robo615">cl_is_qpool_inited</a>( &p_pool->pool ) )\r
+ {\r
+ <a href="./cl_spinlock_h.html#robo648">cl_spinlock_acquire</a>( &p_pool->lock );\r
+ <a href="./cl_qpool_h.html#robo620">cl_qpool_destroy</a>( &p_pool->pool );\r
+ <a href="./cl_spinlock_h.html#robo652">cl_spinlock_release</a>( &p_pool->lock );\r
+ }\r
+ else\r
+ <a href="./cl_qpool_h.html#robo620">cl_qpool_destroy</a>( &p_pool->pool );\r
+\r
+ <a href="./cl_spinlock_h.html#robo650">cl_spinlock_destroy</a>( &p_pool->lock );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_pool\r
+ [in] Pointer to a Quick Locking <a href="./cl_pool_h.html#robo24">Pool</a> to destroy.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> This function does not return a value.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> Performs any necessary cleanup of the specified Quick Locking <a href="./cl_pool_h.html#robo24">Pool</a>.\r
+ Further operations should not be attempted on the destroyed object.\r
+ This function should only be called after a call to\r
+ <a href="#robo586">cl_qlock_pool_construct</a> or <a href="#robo589">cl_qlock_pool_init</a>.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Quick Locking <a href="./cl_pool_h.html#robo24">Pool</a>, <a href="#robo586">cl_qlock_pool_construct</a>, <a href="#robo589">cl_qlock_pool_init</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo588">[Functions]<a name="Component20Library3a20Quick20Locking20Pool2fcl5fqlock5fpool5fget">\r
+Component Library: Quick Locking Pool/cl_qlock_pool_get</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_qlock_pool_get</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Gets an object wrapper and wire MAD from the pool.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>static inline <a href="./cl_qcomppool_h.html#robo542">cl_pool_item_t</a>*\r
+<strong>cl_qlock_pool_get</strong>(\r
+ IN <a href="#robo591">cl_qlock_pool_t</a>* const p_pool )\r
+{\r
+ <a href="./cl_qcomppool_h.html#robo542">cl_pool_item_t</a>* p_item;\r
+ <a href="./cl_spinlock_h.html#robo648">cl_spinlock_acquire</a>( &p_pool->lock );\r
+ p_item = <a href="./cl_qpool_h.html#robo621">cl_qpool_get</a>( &p_pool->pool );\r
+ <a href="./cl_spinlock_h.html#robo652">cl_spinlock_release</a>( &p_pool->lock );\r
+ return( p_item );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_pool\r
+ [in] Pointer to an <a href="#robo591">cl_qlock_pool_t</a> object.\r
+\r
+ RETURN VALUES\r
+ Returns a pointer to a <a href="./cl_qcomppool_h.html#robo542">cl_pool_item_t</a> contained in the user object.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> The object must eventually be returned to the pool with a call to\r
+ <a href="#robo590">cl_qlock_pool_put</a>.\r
+\r
+ The <a href="#robo586">cl_qlock_pool_construct</a> or <a href="#robo589">cl_qlock_pool_init</a> must be called before\r
+ using this function.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Quick Locking <a href="./cl_pool_h.html#robo24">Pool</a>, <a href="#robo590">cl_qlock_pool_put</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo589">[Functions]<a name="Component20Library3a20Quick20Locking20Pool2fcl5fqlock5fpool5finit">\r
+Component Library: Quick Locking Pool/cl_qlock_pool_init</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_qlock_pool_init</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_qlock_pool_init</strong> function initializes a Quick Locking <a href="./cl_pool_h.html#robo24">Pool</a> for use.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>static inline <a href="./cl_types_h.html#robo304">cl_status_t</a>\r
+<strong>cl_qlock_pool_init</strong>(\r
+ IN <a href="#robo591">cl_qlock_pool_t</a>* const p_pool,\r
+ IN const size_t min_size,\r
+ IN const size_t max_size,\r
+ IN const size_t grow_size,\r
+ IN const size_t object_size,\r
+ IN <a href="./cl_qpool_h.html#robo617">cl_pfn_qpool_init_t</a> pfn_initializer OPTIONAL,\r
+ IN <a href="./cl_qpool_h.html#robo616">cl_pfn_qpool_dtor_t</a> pfn_destructor OPTIONAL,\r
+ IN const void* const context )\r
+{\r
+ <a href="./cl_types_h.html#robo304">cl_status_t</a> status;\r
+\r
+ <a href="#robo586">cl_qlock_pool_construct</a>( p_pool );\r
+\r
+ status = <a href="./cl_spinlock_h.html#robo651">cl_spinlock_init</a>( &p_pool->lock );\r
+ if( status )\r
+ return( status );\r
+\r
+ status = <a href="./cl_qpool_h.html#robo623">cl_qpool_init</a>( &p_pool->pool, min_size, max_size, grow_size,\r
+ object_size, pfn_initializer, pfn_destructor, context );\r
+\r
+ return( status );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_pool\r
+ [in] Pointer to an <a href="#robo591">cl_qlock_pool_t</a> object to initialize.\r
+\r
+ min_size\r
+ [in] Minimum number of objects that the pool should support. All\r
+ necessary allocations to allow storing the minimum number of items\r
+ are performed at initialization time, and all necessary callbacks\r
+ successfully invoked.\r
+\r
+ max_size\r
+ [in] Maximum number of objects to which the pool is allowed to grow.\r
+ A value of zero specifies no maximum.\r
+\r
+ grow_size\r
+ [in] Number of objects to allocate when incrementally growing the pool.\r
+ A value of zero disables automatic growth.\r
+\r
+ object_size\r
+ [in] Size, in bytes, of each object.\r
+\r
+ pfn_initializer\r
+ [in] Initialization callback to invoke for every new object when\r
+ growing the pool. This parameter is optional and may be NULL. If NULL,\r
+ the pool assumes the <a href="./cl_qcomppool_h.html#robo542">cl_pool_item_t</a> structure describing objects is\r
+ located at the head of each object. See the <a href="./cl_qpool_h.html#robo617">cl_pfn_qpool_init_t</a>\r
+ function type declaration for details about the callback function.\r
+\r
+ pfn_destructor\r
+ [in] Destructor callback to invoke for every object before memory for\r
+ that object is freed. This parameter is optional and may be NULL.\r
+ See the <a href="./cl_qpool_h.html#robo616">cl_pfn_qpool_dtor_t</a> function type declaration for details\r
+ about the callback function.\r
+\r
+ context\r
+ [in] Value to pass to the callback functions to provide context.\r
+\r
+ RETURN VALUES\r
+ CL_SUCCESS if the quick pool was initialized successfully.\r
+\r
+ CL_INSUFFICIENT_MEMORY if there was not enough memory to initialize the\r
+ quick pool.\r
+\r
+ CL_INVALID_SETTING if a the maximum size is non-zero and less than the\r
+ minimum size.\r
+\r
+ Other <a href="./cl_types_h.html#robo304">cl_status_t</a> value returned by optional initialization callback function\r
+ specified by the pfn_initializer parameter.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> Allows calling other Quick Locking <a href="./cl_pool_h.html#robo24">Pool</a> methods.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Quick Locking <a href="./cl_pool_h.html#robo24">Pool</a>, <a href="#robo586">cl_qlock_pool_construct</a>, <a href="#robo587">cl_qlock_pool_destroy</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo590">[Functions]<a name="Component20Library3a20Quick20Locking20Pool2fcl5fqlock5fpool5fput">\r
+Component Library: Quick Locking Pool/cl_qlock_pool_put</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_qlock_pool_put</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Returns an object to the pool.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>static inline void\r
+<strong>cl_qlock_pool_put</strong>(\r
+ IN <a href="#robo591">cl_qlock_pool_t</a>* const p_pool,\r
+ IN <a href="./cl_qcomppool_h.html#robo542">cl_pool_item_t</a>* const p_item )\r
+{\r
+ <a href="./cl_spinlock_h.html#robo648">cl_spinlock_acquire</a>( &p_pool->lock );\r
+ <a href="./cl_qpool_h.html#robo624">cl_qpool_put</a>( &p_pool->pool, p_item );\r
+ <a href="./cl_spinlock_h.html#robo652">cl_spinlock_release</a>( &p_pool->lock );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_pool\r
+ [in] Pointer to an <a href="#robo591">cl_qlock_pool_t</a> object.\r
+\r
+ p_item\r
+ [in] Pointer to the <a href="./cl_qcomppool_h.html#robo542">cl_pool_item_t</a> in an object that was previously\r
+ retrieved from the pool.\r
+\r
+ RETURN VALUES\r
+ This function does not return a value.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> The <a href="#robo586">cl_qlock_pool_construct</a> or <a href="#robo589">cl_qlock_pool_init</a> must be called before\r
+ using this function.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Quick Locking <a href="./cl_pool_h.html#robo24">Pool</a>, <a href="#robo588">cl_qlock_pool_get</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo591">[Structures]<a name="Component20Library3a20Quick20Locking20Pool2fcl5fqlock5fpool5ft">\r
+Component Library: Quick Locking Pool/cl_qlock_pool_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_qlock_pool_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Quick Locking <a href="./cl_pool_h.html#robo24">Pool</a> structure.\r
+\r
+ This object should be treated as opaque and should\r
+ be manipulated only through the provided functions.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef struct _cl_qlock_pool\r
+{\r
+ cl_spinlock_t lock;\r
+ <a href="./cl_qpool_h.html#robo626">cl_qpool_t</a> pool;\r
+\r
+} <strong>cl_qlock_pool_t</strong>;\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> lock\r
+ <a href="./cl_spinlock_h.html#robo32">Spinlock</a> guarding the pool.\r
+\r
+ pool\r
+ quick_pool of user objects.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Quick Locking <a href="./cl_pool_h.html#robo24">Pool</a>\r
+</pre>\r
+</span>\r
+</body>\r
+</html>\r
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">\r
+<html>\r
+<head>\r
+<link rel="stylesheet" href="../robodoc.css" type="text/css">\r
+<title>./inc_doc/complib/cl_qmap_h.html</title>\r
+<!-- Source: ./inc/complib/cl_qmap.h -->\r
+<!-- Generated with ROBODoc Version 4.99.22 (Mar 6 2006) -->\r
+</head>\r
+<body bgcolor="#FFFFFF">\r
+<a name="robo_top_of_doc">Generated from ./inc/complib/cl_qmap.h</a> with <a href="http://sourceforge.net/projects/robodoc/">ROBODoc</a> v4.99.22 on Sun Apr 16 2006 17:39:24\r
+<br />\r
+<hr />\r
+\r
+<h2><a name="robo28">[Modules]<a name="Component20Library2fQuick20Map">\r
+Component Library/Quick Map</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_modules.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> Quick <a href="./cl_map_h.html#robo17">Map</a>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Quick map implements a binary tree that stores user provided <a href="#robo593">cl_map_item_t</a>\r
+ structures. Each item stored in a quick map has a unique 64-bit key\r
+ (duplicates are not allowed). Quick map provides the ability to\r
+ efficiently search for an item given a key.\r
+\r
+ Quick map does not allocate any memory, and can therefore not fail\r
+ any operations due to insufficient memory. Quick map can thus be useful\r
+ in minimizing the error paths in code.\r
+\r
+ Quick map is not thread safe, and users must provide serialization when\r
+ adding and removing items from the map.\r
+\r
+ The quick map functions operate on a <a href="#robo613">cl_qmap_t</a> structure which should be\r
+ treated as opaque and should be manipulated only through the provided\r
+ functions.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Structures:\r
+ <a href="#robo613">cl_qmap_t</a>, <a href="#robo593">cl_map_item_t</a>, <a href="#robo594">cl_map_obj_t</a>\r
+\r
+ Callbacks:\r
+ <a href="#robo595">cl_pfn_qmap_apply_t</a>\r
+\r
+ Item Manipulation:\r
+ <a href="#robo612">cl_qmap_set_obj</a>, <a href="#robo607">cl_qmap_obj</a>, <a href="#robo604">cl_qmap_key</a>\r
+\r
+ Initialization:\r
+ <a href="#robo602">cl_qmap_init</a>\r
+\r
+ Iteration:\r
+ <a href="#robo599">cl_qmap_end</a>, <a href="#robo601">cl_qmap_head</a>, <a href="#robo614">cl_qmap_tail</a>, <a href="#robo606">cl_qmap_next</a>, <a href="#robo608">cl_qmap_prev</a>\r
+\r
+ Manipulation:\r
+ <a href="#robo603">cl_qmap_insert</a>, <a href="#robo600">cl_qmap_get</a>, <a href="#robo611">cl_qmap_remove_item</a>, <a href="#robo609">cl_qmap_remove</a>,\r
+ <a href="#robo610">cl_qmap_remove_all</a>, <a href="#robo605">cl_qmap_merge</a>, <a href="#robo598">cl_qmap_delta</a>\r
+\r
+ Search:\r
+ <a href="#robo596">cl_qmap_apply_func</a>\r
+\r
+ Attributes:\r
+ <a href="#robo597">cl_qmap_count</a>, <a href="#robo592">cl_is_qmap_empty</a>,\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo592">[Functions]<a name="Component20Library3a20Quick20Map2fcl5fis5fqmap5fempty">\r
+Component Library: Quick Map/cl_is_qmap_empty</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_is_qmap_empty</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_is_qmap_empty</strong> function returns whether a quick map is empty.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_INLINE boolean_t CL_API\r
+<strong>cl_is_qmap_empty</strong>(\r
+ IN const <a href="#robo613">cl_qmap_t</a>* const p_map )\r
+{\r
+ CL_ASSERT( p_map );\r
+ CL_ASSERT( p_map->state == CL_INITIALIZED );\r
+\r
+ return( p_map->count == 0 );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_map\r
+ [in] Pointer to a <a href="#robo613">cl_qmap_t</a> structure to test for emptiness.\r
+\r
+ RETURN VALUES\r
+ TRUE if the quick map is empty.\r
+\r
+ FALSE otherwise.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Quick <a href="./cl_map_h.html#robo17">Map</a>, <a href="#robo597">cl_qmap_count</a>, <a href="#robo610">cl_qmap_remove_all</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo593">[Structures]<a name="Component20Library3a20Quick20Map2fcl5fmap5fitem5ft">\r
+Component Library: Quick Map/cl_map_item_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_map_item_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_map_item_t</strong> structure is used by maps to store objects.\r
+\r
+ The <strong>cl_map_item_t</strong> structure should be treated as opaque and should\r
+ be manipulated only through the provided functions.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef struct _cl_map_item\r
+{\r
+ /* Must be first to allow casting. */\r
+ <a href="./cl_qcomppool_h.html#robo542">cl_pool_item_t</a> pool_item;\r
+ struct _cl_map_item *p_left;\r
+ struct _cl_map_item *p_right;\r
+ struct _cl_map_item *p_up;\r
+ cl_map_color_t color;\r
+ uint64_t key;\r
+#ifdef _DEBUG_\r
+ struct _cl_qmap *p_map;\r
+#endif\r
+\r
+} <strong>cl_map_item_t</strong>;\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> pool_item\r
+ Used to store the item in a doubly linked list, allowing more\r
+ efficient map traversal.\r
+\r
+ p_left\r
+ Pointer to the map item that is a child to the left of the node.\r
+\r
+ p_right\r
+ Pointer to the map item that is a child to the right of the node.\r
+\r
+ p_up\r
+ Pointer to the map item that is the parent of the node.\r
+\r
+ p_nil\r
+ Pointer to the map's NIL item, used as a terminator for leaves.\r
+ The NIL sentinel is in the <a href="#robo613">cl_qmap_t</a> structure.\r
+\r
+ color\r
+ Indicates whether a node is red or black in the map.\r
+\r
+ key\r
+ Value that uniquely represents a node in a map. This value is set by\r
+ calling <a href="#robo603">cl_qmap_insert</a> and can be retrieved by calling <a href="#robo604">cl_qmap_key</a>.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> None of the fields of this structure should be manipulated by users, as\r
+ they are crititcal to the proper operation of the map in which they\r
+ are stored.\r
+\r
+ To allow storing items in either a quick list, a quick pool, or a quick\r
+ map, the map implementation guarantees that the map item can be safely\r
+ cast to a pool item used for storing an object in a quick pool, or cast to\r
+ a list item used for storing an object in a quick list. This removes the\r
+ need to embed a map item, a list item, and a pool item in objects that need\r
+ to be stored in a quick list, a quick pool, and a quick map.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Quick <a href="./cl_map_h.html#robo17">Map</a>, <a href="#robo603">cl_qmap_insert</a>, <a href="#robo604">cl_qmap_key</a>, <a href="./cl_qcomppool_h.html#robo542">cl_pool_item_t</a>, <a href="./cl_qlist_h.html#robo554">cl_list_item_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo594">[Structures]<a name="Component20Library3a20Quick20Map2fcl5fmap5fobj5ft">\r
+Component Library: Quick Map/cl_map_obj_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_map_obj_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_map_obj_t</strong> structure is used to store objects in maps.\r
+\r
+ The <strong>cl_map_obj_t</strong> structure should be treated as opaque and should\r
+ be manipulated only through the provided functions.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef struct _<a href="./cl_map_h.html#robo410">cl_map_obj</a>\r
+{\r
+ <a href="#robo593">cl_map_item_t</a> item;\r
+ const void *p_object;\r
+\r
+} <strong>cl_map_obj_t</strong>;\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> item\r
+ <a href="./cl_map_h.html#robo17">Map</a> item used by internally by the map to store an object.\r
+\r
+ p_object\r
+ User defined context. Users should not access this field directly.\r
+ Use <a href="#robo612">cl_qmap_set_obj</a> and <a href="#robo607">cl_qmap_obj</a> to set and retrieve the value\r
+ of this field.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> None of the fields of this structure should be manipulated by users, as\r
+ they are crititcal to the proper operation of the map in which they\r
+ are stored.\r
+\r
+ Use <a href="#robo612">cl_qmap_set_obj</a> and <a href="#robo607">cl_qmap_obj</a> to set and retrieve the object\r
+ stored in a map item, respectively.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Quick <a href="./cl_map_h.html#robo17">Map</a>, <a href="#robo612">cl_qmap_set_obj</a>, <a href="#robo607">cl_qmap_obj</a>, <a href="#robo593">cl_map_item_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo595">[Definitions]<a name="Component20Library3a20Quick20Map2fcl5fpfn5fqmap5fapply5ft">\r
+Component Library: Quick Map/cl_pfn_qmap_apply_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_pfn_qmap_apply_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_pfn_qmap_apply_t</strong> function type defines the prototype for functions\r
+ used to iterate items in a quick map.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef void\r
+(CL_API *<strong>cl_pfn_qmap_apply_t</strong>)(\r
+ IN <a href="#robo593">cl_map_item_t</a>* const p_map_item,\r
+ IN void* context );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_map_item\r
+ [in] Pointer to a <a href="#robo593">cl_map_item_t</a> structure.\r
+\r
+ context\r
+ [in] Value passed to the callback function.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> This function does not return a value.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This function type is provided as function prototype reference for the\r
+ function provided by users as a parameter to the <a href="#robo596">cl_qmap_apply_func</a>\r
+ function.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Quick <a href="./cl_map_h.html#robo17">Map</a>, <a href="#robo596">cl_qmap_apply_func</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo596">[Functions]<a name="Component20Library3a20Quick20Map2fcl5fqmap5fapply5ffunc">\r
+Component Library: Quick Map/cl_qmap_apply_func</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_qmap_apply_func</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_qmap_apply_func</strong> function executes a specified function\r
+ for every item stored in a quick map.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT void CL_API\r
+<strong>cl_qmap_apply_func</strong>(\r
+ IN const <a href="#robo613">cl_qmap_t</a>* const p_map,\r
+ IN <a href="#robo595">cl_pfn_qmap_apply_t</a> pfn_func,\r
+ IN const void* const context );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_map\r
+ [in] Pointer to a <a href="#robo613">cl_qmap_t</a> structure.\r
+\r
+ pfn_func\r
+ [in] Function invoked for every item in the quick map.\r
+ See the <a href="#robo595">cl_pfn_qmap_apply_t</a> function type declaration for details\r
+ about the callback function.\r
+\r
+ context\r
+ [in] Value to pass to the callback functions to provide context.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> This function does not return a value.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> The function provided must not perform any map operations, as these\r
+ would corrupt the quick map.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Quick <a href="./cl_map_h.html#robo17">Map</a>, <a href="#robo595">cl_pfn_qmap_apply_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo597">[Functions]<a name="Component20Library3a20Quick20Map2fcl5fqmap5fcount">\r
+Component Library: Quick Map/cl_qmap_count</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_qmap_count</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_qmap_count</strong> function returns the number of items stored\r
+ in a quick map.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_INLINE size_t CL_API\r
+<strong>cl_qmap_count</strong>(\r
+ IN const <a href="#robo613">cl_qmap_t</a>* const p_map )\r
+{\r
+ CL_ASSERT( p_map );\r
+ CL_ASSERT( p_map->state == CL_INITIALIZED );\r
+ return( p_map->count );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_map\r
+ [in] Pointer to a <a href="#robo613">cl_qmap_t</a> structure whose item count to return.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> Returns the number of items stored in the map.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Quick <a href="./cl_map_h.html#robo17">Map</a>, <a href="#robo592">cl_is_qmap_empty</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo598">[Functions]<a name="Component20Library3a20Quick20Map2fcl5fqmap5fdelta">\r
+Component Library: Quick Map/cl_qmap_delta</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_qmap_delta</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_qmap_delta</strong> function computes the differences between two maps.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT void CL_API\r
+<strong>cl_qmap_delta</strong>(\r
+ IN OUT <a href="#robo613">cl_qmap_t</a>* const p_map1,\r
+ IN OUT <a href="#robo613">cl_qmap_t</a>* const p_map2,\r
+ OUT <a href="#robo613">cl_qmap_t</a>* const p_new,\r
+ OUT <a href="#robo613">cl_qmap_t</a>* const p_old );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_map1\r
+ [in/out] Pointer to the first of two <a href="#robo613">cl_qmap_t</a> structures whose\r
+ differences to compute.\r
+\r
+ p_map2\r
+ [in/out] Pointer to the second of two <a href="#robo613">cl_qmap_t</a> structures whose\r
+ differences to compute.\r
+\r
+ p_new\r
+ [out] Pointer to an empty <a href="#robo613">cl_qmap_t</a> structure that contains the items\r
+ unique to p_map2 upon return from the function.\r
+\r
+ p_old\r
+ [out] Pointer to an empty <a href="#robo613">cl_qmap_t</a> structure that contains the items\r
+ unique to p_map1 upon return from the function.\r
+\r
+ RETURN VALUES\r
+ This function does not return a value.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> Items are evaluated based on their keys. Items that exist in both\r
+ p_map1 and p_map2 remain in their respective maps. Items that\r
+ exist only p_map1 are moved to p_old. Likewise, items that exist only\r
+ in p_map2 are moved to p_new. This function can be usefull in evaluating\r
+ changes between two maps.\r
+\r
+ Both maps pointed to by p_new and p_old must be empty on input. This\r
+ requirement removes the possibility of failures.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Quick <a href="./cl_map_h.html#robo17">Map</a>, <a href="#robo605">cl_qmap_merge</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo599">[Functions]<a name="Component20Library3a20Quick20Map2fcl5fqmap5fend">\r
+Component Library: Quick Map/cl_qmap_end</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_qmap_end</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_qmap_end</strong> function returns the end of a quick map.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_INLINE const <a href="#robo593">cl_map_item_t</a>* const CL_API\r
+<strong>cl_qmap_end</strong>(\r
+ IN const <a href="#robo613">cl_qmap_t</a>* const p_map )\r
+{\r
+ CL_ASSERT( p_map );\r
+ CL_ASSERT( p_map->state == CL_INITIALIZED );\r
+ /* Nil is the end of the map. */\r
+ return( &p_map->nil );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_map\r
+ [in] Pointer to a <a href="#robo613">cl_qmap_t</a> structure whose end to return.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> Pointer to the end of the map.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> <strong>cl_qmap_end</strong> is useful for determining the validity of map items returned\r
+ by <a href="#robo601">cl_qmap_head</a>, <a href="#robo614">cl_qmap_tail</a>, <a href="#robo606">cl_qmap_next</a>, or <a href="#robo608">cl_qmap_prev</a>. If the map\r
+ item pointer returned by any of these functions compares to the end, the\r
+ end of the map was encoutered.\r
+ When using <a href="#robo601">cl_qmap_head</a> or <a href="#robo614">cl_qmap_tail</a>, this condition indicates that\r
+ the map is empty.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Quick <a href="./cl_map_h.html#robo17">Map</a>, <a href="#robo601">cl_qmap_head</a>, <a href="#robo614">cl_qmap_tail</a>, <a href="#robo606">cl_qmap_next</a>, <a href="#robo608">cl_qmap_prev</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo600">[Functions]<a name="Component20Library3a20Quick20Map2fcl5fqmap5fget">\r
+Component Library: Quick Map/cl_qmap_get</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_qmap_get</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_qmap_get</strong> function returns the map item associated with a key.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT <a href="#robo593">cl_map_item_t</a>* CL_API\r
+<strong>cl_qmap_get</strong>(\r
+ IN const <a href="#robo613">cl_qmap_t</a>* const p_map,\r
+ IN const uint64_t key );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_map\r
+ [in] Pointer to a <a href="#robo613">cl_qmap_t</a> structure from which to retrieve the\r
+ item with the specified key.\r
+\r
+ key\r
+ [in] Key value used to search for the desired map item.\r
+\r
+ RETURN VALUES\r
+ Pointer to the map item with the desired key value.\r
+\r
+ Pointer to the map end if there was no item with the desired key value\r
+ stored in the quick map.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> <strong>cl_qmap_get</strong> does not remove the item from the quick map.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Quick <a href="./cl_map_h.html#robo17">Map</a>, <a href="#robo609">cl_qmap_remove</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo601">[Functions]<a name="Component20Library3a20Quick20Map2fcl5fqmap5fhead">\r
+Component Library: Quick Map/cl_qmap_head</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_qmap_head</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_qmap_head</strong> function returns the map item with the lowest key\r
+ value stored in a quick map.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_INLINE <a href="#robo593">cl_map_item_t</a>* CL_API\r
+<strong>cl_qmap_head</strong>(\r
+ IN const <a href="#robo613">cl_qmap_t</a>* const p_map )\r
+{\r
+ CL_ASSERT( p_map );\r
+ CL_ASSERT( p_map->state == CL_INITIALIZED );\r
+ return( (<a href="#robo593">cl_map_item_t</a>*)p_map->nil.pool_item.list_item.p_next );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_map\r
+ [in] Pointer to a <a href="#robo613">cl_qmap_t</a> structure whose item with the lowest key\r
+ is returned.\r
+\r
+ RETURN VALUES\r
+ Pointer to the map item with the lowest key in the quick map.\r
+\r
+ Pointer to the map end if the quick map was empty.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> <strong>cl_qmap_head</strong> does not remove the item from the map.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Quick <a href="./cl_map_h.html#robo17">Map</a>, <a href="#robo614">cl_qmap_tail</a>, <a href="#robo606">cl_qmap_next</a>, <a href="#robo608">cl_qmap_prev</a>, <a href="#robo599">cl_qmap_end</a>,\r
+ cl_qmap_item_t\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo602">[Functions]<a name="Component20Library3a20Quick20Map2fcl5fqmap5finit">\r
+Component Library: Quick Map/cl_qmap_init</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_qmap_init</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_qmap_init</strong> function initialized a quick map for use.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT void CL_API\r
+<strong>cl_qmap_init</strong>(\r
+ IN <a href="#robo613">cl_qmap_t</a>* const p_map );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_map\r
+ [in] Pointer to a <a href="#robo613">cl_qmap_t</a> structure to initialize.\r
+\r
+ RETURN VALUES\r
+ This function does not return a value.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> Allows calling quick map manipulation functions.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Quick <a href="./cl_map_h.html#robo17">Map</a>, <a href="#robo603">cl_qmap_insert</a>, <a href="#robo609">cl_qmap_remove</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo603">[Functions]<a name="Component20Library3a20Quick20Map2fcl5fqmap5finsert">\r
+Component Library: Quick Map/cl_qmap_insert</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_qmap_insert</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_qmap_insert</strong> function inserts a map item into a quick map.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT <a href="#robo593">cl_map_item_t</a>* CL_API\r
+<strong>cl_qmap_insert</strong>(\r
+ IN <a href="#robo613">cl_qmap_t</a>* const p_map,\r
+ IN const uint64_t key,\r
+ IN <a href="#robo593">cl_map_item_t</a>* const p_item );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_map\r
+ [in] Pointer to a <a href="#robo613">cl_qmap_t</a> structure into which to add the item.\r
+\r
+ key\r
+ [in] Value to assign to the item.\r
+\r
+ p_item\r
+ [in] Pointer to a <a href="#robo593">cl_map_item_t</a> stucture to insert into the quick map.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> Pointer to the item in the map with the specified key. If insertion\r
+ was successful, this is the pointer to the item. If an item with the\r
+ specified key already exists in the map, the pointer to that item is\r
+ returned.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> Insertion operations may cause the quick map to rebalance.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Quick <a href="./cl_map_h.html#robo17">Map</a>, <a href="#robo609">cl_qmap_remove</a>, <a href="#robo593">cl_map_item_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo604">[Functions]<a name="Component20Library3a20Quick20Map2fcl5fqmap5fkey">\r
+Component Library: Quick Map/cl_qmap_key</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_qmap_key</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_qmap_key</strong> function retrieves the key value of a map item.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_INLINE uint64_t CL_API\r
+<strong>cl_qmap_key</strong>(\r
+ IN const <a href="#robo593">cl_map_item_t</a>* const p_item )\r
+{\r
+ CL_ASSERT( p_item );\r
+ return( p_item->key );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_item\r
+ [in] Pointer to a map item whose key value to return.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> Returns the 64-bit key value for the specified map item.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> The key value is set in a call to <a href="#robo603">cl_qmap_insert</a>.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Quick <a href="./cl_map_h.html#robo17">Map</a>, <a href="#robo603">cl_qmap_insert</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo605">[Functions]<a name="Component20Library3a20Quick20Map2fcl5fqmap5fmerge">\r
+Component Library: Quick Map/cl_qmap_merge</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_qmap_merge</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_qmap_merge</strong> function moves all items from one map to another,\r
+ excluding duplicates.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT void CL_API\r
+<strong>cl_qmap_merge</strong>(\r
+ OUT <a href="#robo613">cl_qmap_t</a>* const p_dest_map,\r
+ IN OUT <a href="#robo613">cl_qmap_t</a>* const p_src_map );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_dest_map\r
+ [out] Pointer to a <a href="#robo613">cl_qmap_t</a> structure to which items should be added.\r
+\r
+ p_src_map\r
+ [in/out] Pointer to a <a href="#robo613">cl_qmap_t</a> structure whose items to add\r
+ to p_dest_map.\r
+\r
+ RETURN VALUES\r
+ This function does not return a value.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> Items are evaluated based on their keys only.\r
+\r
+ Upon return from <strong>cl_qmap_merge</strong>, the quick map referenced by p_src_map\r
+ contains all duplicate items.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Quick <a href="./cl_map_h.html#robo17">Map</a>, <a href="#robo598">cl_qmap_delta</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo606">[Functions]<a name="Component20Library3a20Quick20Map2fcl5fqmap5fnext">\r
+Component Library: Quick Map/cl_qmap_next</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_qmap_next</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_qmap_next</strong> function returns the map item with the next higher\r
+ key value than a specified map item.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_INLINE <a href="#robo593">cl_map_item_t</a>* CL_API\r
+<strong>cl_qmap_next</strong>(\r
+ IN const <a href="#robo593">cl_map_item_t</a>* const p_item )\r
+{\r
+ CL_ASSERT( p_item );\r
+ return( (<a href="#robo593">cl_map_item_t</a>*)p_item->pool_item.list_item.p_next );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_item\r
+ [in] Pointer to a map item whose successor to return.\r
+\r
+ RETURN VALUES\r
+ Pointer to the map item with the next higher key value in a quick map.\r
+\r
+ Pointer to the map end if the specified item was the last item in\r
+ the quick map.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Quick <a href="./cl_map_h.html#robo17">Map</a>, <a href="#robo601">cl_qmap_head</a>, <a href="#robo614">cl_qmap_tail</a>, <a href="#robo608">cl_qmap_prev</a>, <a href="#robo599">cl_qmap_end</a>,\r
+ <a href="#robo593">cl_map_item_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo607">[Functions]<a name="Component20Library3a20Quick20Map2fcl5fqmap5fobj">\r
+Component Library: Quick Map/cl_qmap_obj</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_qmap_obj</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_qmap_obj</strong> function returns the object stored in a map object.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_INLINE void* CL_API\r
+<strong>cl_qmap_obj</strong>(\r
+ IN const <a href="#robo594">cl_map_obj_t</a>* const p_map_obj )\r
+{\r
+ CL_ASSERT( p_map_obj );\r
+ return( (void*)p_map_obj->p_object );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_map_obj\r
+ [in] Pointer to a map object stucture whose object pointer to return.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> Returns the value of the object pointer stored in the map object.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Quick <a href="./cl_map_h.html#robo17">Map</a>, <a href="#robo612">cl_qmap_set_obj</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo608">[Functions]<a name="Component20Library3a20Quick20Map2fcl5fqmap5fprev">\r
+Component Library: Quick Map/cl_qmap_prev</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_qmap_prev</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_qmap_prev</strong> function returns the map item with the next lower\r
+ key value than a precified map item.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_INLINE <a href="#robo593">cl_map_item_t</a>* CL_API\r
+<strong>cl_qmap_prev</strong>(\r
+ IN const <a href="#robo593">cl_map_item_t</a>* const p_item )\r
+{\r
+ CL_ASSERT( p_item );\r
+ return( (<a href="#robo593">cl_map_item_t</a>*)p_item->pool_item.list_item.p_prev );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_item\r
+ [in] Pointer to a map item whose predecessor to return.\r
+\r
+ RETURN VALUES\r
+ Pointer to the map item with the next lower key value in a quick map.\r
+\r
+ Pointer to the map end if the specifid item was the first item in\r
+ the quick map.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Quick <a href="./cl_map_h.html#robo17">Map</a>, <a href="#robo601">cl_qmap_head</a>, <a href="#robo614">cl_qmap_tail</a>, <a href="#robo606">cl_qmap_next</a>, <a href="#robo599">cl_qmap_end</a>,\r
+ <a href="#robo593">cl_map_item_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo609">[Functions]<a name="Component20Library3a20Quick20Map2fcl5fqmap5fremove">\r
+Component Library: Quick Map/cl_qmap_remove</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_qmap_remove</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_qmap_remove</strong> function removes the map item with the specified key\r
+ from a quick map.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT <a href="#robo593">cl_map_item_t</a>* CL_API\r
+<strong>cl_qmap_remove</strong>(\r
+ IN <a href="#robo613">cl_qmap_t</a>* const p_map,\r
+ IN const uint64_t key );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_map\r
+ [in] Pointer to a <a href="#robo613">cl_qmap_t</a> structure from which to remove the item\r
+ with the specified key.\r
+\r
+ key\r
+ [in] Key value used to search for the map item to remove.\r
+\r
+ RETURN VALUES\r
+ Pointer to the removed map item if it was found.\r
+\r
+ Pointer to the map end if no item with the specified key exists in the\r
+ quick map.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Quick <a href="./cl_map_h.html#robo17">Map</a>, <a href="#robo611">cl_qmap_remove_item</a>, <a href="#robo610">cl_qmap_remove_all</a>, <a href="#robo603">cl_qmap_insert</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo610">[Functions]<a name="Component20Library3a20Quick20Map2fcl5fqmap5fremove5fall">\r
+Component Library: Quick Map/cl_qmap_remove_all</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_qmap_remove_all</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_qmap_remove_all</strong> function removes all items in a quick map,\r
+ leaving it empty.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_INLINE void CL_API\r
+<strong>cl_qmap_remove_all</strong>(\r
+ IN <a href="#robo613">cl_qmap_t</a>* const p_map )\r
+{\r
+ CL_ASSERT( p_map );\r
+ CL_ASSERT( p_map->state == CL_INITIALIZED );\r
+\r
+ p_map->root.p_left = &p_map->nil;\r
+ p_map->nil.pool_item.list_item.p_next = &p_map->nil.pool_item.list_item;\r
+ p_map->nil.pool_item.list_item.p_prev = &p_map->nil.pool_item.list_item;\r
+ p_map->count = 0;\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_map\r
+ [in] Pointer to a <a href="#robo613">cl_qmap_t</a> structure to empty.\r
+\r
+ RETURN VALUES\r
+ This function does not return a value.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Quick <a href="./cl_map_h.html#robo17">Map</a>, <a href="#robo609">cl_qmap_remove</a>, <a href="#robo611">cl_qmap_remove_item</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo611">[Functions]<a name="Component20Library3a20Quick20Map2fcl5fqmap5fremove5fitem">\r
+Component Library: Quick Map/cl_qmap_remove_item</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_qmap_remove_item</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_qmap_remove_item</strong> function removes the specified map item\r
+ from a quick map.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT void CL_API\r
+<strong>cl_qmap_remove_item</strong>(\r
+ IN <a href="#robo613">cl_qmap_t</a>* const p_map,\r
+ IN <a href="#robo593">cl_map_item_t</a>* const p_item );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_item\r
+ [in] Pointer to a map item to remove from its quick map.\r
+\r
+ RETURN VALUES\r
+ This function does not return a value.\r
+\r
+ In a debug build, <strong>cl_qmap_remove_item</strong> asserts that the item being removed\r
+ is in the specified map.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> Removes the map item pointed to by p_item from its quick map.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Quick <a href="./cl_map_h.html#robo17">Map</a>, <a href="#robo609">cl_qmap_remove</a>, <a href="#robo610">cl_qmap_remove_all</a>, <a href="#robo603">cl_qmap_insert</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo612">[Functions]<a name="Component20Library3a20Quick20Map2fcl5fqmap5fset5fobj">\r
+Component Library: Quick Map/cl_qmap_set_obj</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_qmap_set_obj</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_qmap_set_obj</strong> function sets the object stored in a map object.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_INLINE void CL_API\r
+<strong>cl_qmap_set_obj</strong>(\r
+ IN <a href="#robo594">cl_map_obj_t</a>* const p_map_obj,\r
+ IN const void* const p_object )\r
+{\r
+ CL_ASSERT( p_map_obj );\r
+ p_map_obj->p_object = p_object;\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_map_obj\r
+ [in] Pointer to a map object stucture whose object pointer\r
+ is to be set.\r
+\r
+ p_object\r
+ [in] User defined context.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> This function does not return a value.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Quick <a href="./cl_map_h.html#robo17">Map</a>, <a href="#robo607">cl_qmap_obj</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo613">[Structures]<a name="Component20Library3a20Quick20Map2fcl5fqmap5ft">\r
+Component Library: Quick Map/cl_qmap_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_qmap_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Quick map structure.\r
+\r
+ The <strong>cl_qmap_t</strong> structure should be treated as opaque and should\r
+ be manipulated only through the provided functions.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef struct _cl_qmap\r
+{\r
+ <a href="#robo593">cl_map_item_t</a> root;\r
+ <a href="#robo593">cl_map_item_t</a> nil;\r
+ cl_state_t state;\r
+ size_t count;\r
+\r
+} <strong>cl_qmap_t</strong>;\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> root\r
+ <a href="./cl_map_h.html#robo17">Map</a> item that serves as root of the map. The root is set up to\r
+ always have itself as parent. The left pointer is set to point to\r
+ the item at the root.\r
+\r
+ nil\r
+ <a href="./cl_map_h.html#robo17">Map</a> item that serves as terminator for all leaves, as well as providing\r
+ the list item used as quick list for storing map items in a list for\r
+ faster traversal.\r
+\r
+ state\r
+ State of the map, used to verify that operations are permitted.\r
+\r
+ count\r
+ Number of items in the map.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Quick <a href="./cl_map_h.html#robo17">Map</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo614">[Functions]<a name="Component20Library3a20Quick20Map2fcl5fqmap5ftail">\r
+Component Library: Quick Map/cl_qmap_tail</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_qmap_tail</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_qmap_tail</strong> function returns the map item with the highest key\r
+ value stored in a quick map.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_INLINE <a href="#robo593">cl_map_item_t</a>* CL_API\r
+<strong>cl_qmap_tail</strong>(\r
+ IN const <a href="#robo613">cl_qmap_t</a>* const p_map )\r
+{\r
+ CL_ASSERT( p_map );\r
+ CL_ASSERT( p_map->state == CL_INITIALIZED );\r
+ return( (<a href="#robo593">cl_map_item_t</a>*)p_map->nil.pool_item.list_item.p_prev );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_map\r
+ [in] Pointer to a <a href="#robo613">cl_qmap_t</a> structure whose item with the highest key\r
+ is returned.\r
+\r
+ RETURN VALUES\r
+ Pointer to the map item with the highest key in the quick map.\r
+\r
+ Pointer to the map end if the quick map was empty.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> <a href="#robo599">cl_qmap_end</a> does not remove the item from the map.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Quick <a href="./cl_map_h.html#robo17">Map</a>, <a href="#robo601">cl_qmap_head</a>, <a href="#robo606">cl_qmap_next</a>, <a href="#robo608">cl_qmap_prev</a>, <a href="#robo599">cl_qmap_end</a>,\r
+ cl_qmap_item_t\r
+</pre>\r
+</span>\r
+</body>\r
+</html>\r
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">\r
+<html>\r
+<head>\r
+<link rel="stylesheet" href="../robodoc.css" type="text/css">\r
+<title>./inc_doc/complib/cl_qpool_h.html</title>\r
+<!-- Source: ./inc/complib/cl_qpool.h -->\r
+<!-- Generated with ROBODoc Version 4.99.22 (Mar 6 2006) -->\r
+</head>\r
+<body bgcolor="#FFFFFF">\r
+<a name="robo_top_of_doc">Generated from ./inc/complib/cl_qpool.h</a> with <a href="http://sourceforge.net/projects/robodoc/">ROBODoc</a> v4.99.22 on Sun Apr 16 2006 17:39:24\r
+<br />\r
+<hr />\r
+\r
+<h2><a name="robo29">[Modules]<a name="Component20Library2fQuick20Pool">\r
+Component Library/Quick Pool</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_modules.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> Quick <a href="./cl_pool_h.html#robo24">Pool</a>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The quick pool provides a self-contained and self-sustaining pool\r
+ of user defined objects.\r
+\r
+ To aid in object oriented design, the quick pool provides the user\r
+ the ability to specify callbacks that are invoked for each object for\r
+ construction, initialization, and destruction. Constructor and destructor\r
+ callback functions may not fail.\r
+\r
+ A quick pool does not return memory to the system as the user returns\r
+ objects to the pool. The only method of returning memory to the system is\r
+ to destroy the pool.\r
+\r
+ The quick pool operates on <a href="./cl_qcomppool_h.html#robo542">cl_pool_item_t</a> structures that describe\r
+ objects. This can provides for more efficient memory use and operation.\r
+ If using a <a href="./cl_qcomppool_h.html#robo542">cl_pool_item_t</a> is not desired, the <a href="./cl_pool_h.html#robo24">Pool</a> provides similar\r
+ functionality but operates on opaque objects.\r
+\r
+ The quick pool functions operates on a <a href="#robo626">cl_qpool_t</a> structure which should\r
+ be treated as opaque and should be manipulated only through the provided\r
+ functions.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Structures:\r
+ <a href="#robo626">cl_qpool_t</a>, <a href="./cl_qcomppool_h.html#robo542">cl_pool_item_t</a>\r
+\r
+ Callbacks:\r
+ <a href="#robo617">cl_pfn_qpool_init_t</a>, <a href="#robo616">cl_pfn_qpool_dtor_t</a>\r
+\r
+ Initialization/Destruction:\r
+ <a href="#robo618">cl_qpool_construct</a>, <a href="#robo623">cl_qpool_init</a>, <a href="#robo620">cl_qpool_destroy</a>\r
+\r
+ Manipulation:\r
+ <a href="#robo621">cl_qpool_get</a>, <a href="#robo624">cl_qpool_put</a>, <a href="#robo625">cl_qpool_put_list</a>, <a href="#robo622">cl_qpool_grow</a>\r
+\r
+ Attributes:\r
+ <a href="#robo615">cl_is_qpool_inited</a>, <a href="#robo619">cl_qpool_count</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo615">[Functions]<a name="Component20Library3a20Quick20Pool2fcl5fis5fqpool5finited">\r
+Component Library: Quick Pool/cl_is_qpool_inited</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_is_qpool_inited</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_is_qpool_inited</strong> function returns whether a quick pool was\r
+ successfully initialized.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_INLINE uint32_t CL_API\r
+<strong>cl_is_qpool_inited</strong>(\r
+ IN const <a href="#robo626">cl_qpool_t</a>* const p_pool )\r
+{\r
+ /* CL_ASSERT that a non-null pointer is provided. */\r
+ CL_ASSERT( p_pool );\r
+ return( <a href="./cl_qcomppool_h.html#robo539">cl_is_qcpool_inited</a>( &p_pool->qcpool ) );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_pool\r
+ [in] Pointer to a <a href="#robo626">cl_qpool_t</a> structure whose initialization state\r
+ to check.\r
+\r
+ RETURN VALUES\r
+ TRUE if the quick pool was initialized successfully.\r
+\r
+ FALSE otherwise.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> Allows checking the state of a quick pool to determine if\r
+ invoking member functions is appropriate.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Quick <a href="./cl_pool_h.html#robo24">Pool</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo616">[Definitions]<a name="Component20Library3a20Quick20Pool2fcl5fpfn5fqpool5fdtor5ft">\r
+Component Library: Quick Pool/cl_pfn_qpool_dtor_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_pfn_qpool_dtor_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_pfn_qpool_dtor_t</strong> function type defines the prototype for\r
+ functions used as destructor for objects being deallocated by a\r
+ quick pool.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef void\r
+(CL_API *<strong>cl_pfn_qpool_dtor_t</strong>)(\r
+ IN const <a href="./cl_qcomppool_h.html#robo542">cl_pool_item_t</a>* const p_pool_item,\r
+ IN void* context );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_pool_item\r
+ [in] Pointer to a <a href="./cl_qcomppool_h.html#robo542">cl_pool_item_t</a> structure representing an object.\r
+\r
+ context\r
+ [in] Context provided in a call to <a href="#robo623">cl_qpool_init</a>.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> This function does not return a value.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This function type is provided as function prototype reference for\r
+ the function provided by the user as an optional parameter to the\r
+ <a href="#robo623">cl_qpool_init</a> function.\r
+\r
+ The destructor is invoked once per allocated object, allowing the user\r
+ to perform any necessary cleanup. Users should not attempt to deallocate\r
+ the memory for the object, as the quick pool manages object\r
+ allocation and deallocation.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Quick <a href="./cl_pool_h.html#robo24">Pool</a>, <a href="#robo623">cl_qpool_init</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo617">[Definitions]<a name="Component20Library3a20Quick20Pool2fcl5fpfn5fqpool5finit5ft">\r
+Component Library: Quick Pool/cl_pfn_qpool_init_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_pfn_qpool_init_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_pfn_qpool_init_t</strong> function type defines the prototype for\r
+ functions used as constructor for objects being allocated by a\r
+ quick pool.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef <a href="./cl_types_h.html#robo304">cl_status_t</a>\r
+(CL_API *<strong>cl_pfn_qpool_init_t</strong>)(\r
+ IN void* const p_object,\r
+ IN void* context,\r
+ OUT <a href="./cl_qcomppool_h.html#robo542">cl_pool_item_t</a>** const pp_pool_item );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_object\r
+ [in] Pointer to an object to initialize.\r
+\r
+ context\r
+ [in] Context provided in a call to <a href="#robo623">cl_qpool_init</a>.\r
+\r
+ RETURN VALUES\r
+ Return CL_SUCCESS to indicate that initialization of the object\r
+ was successful and that initialization of further objects may continue.\r
+\r
+ Other <a href="./cl_types_h.html#robo304">cl_status_t</a> values will be returned by <a href="./cl_qcomppool_h.html#robo548">cl_qcpool_init</a>\r
+ and <a href="./cl_qcomppool_h.html#robo547">cl_qcpool_grow</a>.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This function type is provided as function prototype reference for\r
+ the function provided by the user as an optional parameter to the\r
+ <a href="#robo623">cl_qpool_init</a> function.\r
+\r
+ The initializer is invoked once per allocated object, allowing the user\r
+ to perform any necessary initialization. Returning a status other than\r
+ CL_SUCCESS aborts a grow operation, initiated either through <a href="./cl_qcomppool_h.html#robo548">cl_qcpool_init</a>\r
+ or <a href="./cl_qcomppool_h.html#robo547">cl_qcpool_grow</a>, causing the initiating function to fail.\r
+ Any non-CL_SUCCESS status will be returned by the function that initiated\r
+ the grow operation.\r
+\r
+ All memory for the object is pre-allocated. Users should include space in\r
+ their objects for the <a href="./cl_qcomppool_h.html#robo542">cl_pool_item_t</a> structure that will represent the\r
+ object to avoid having to allocate that structure in the initialization\r
+ callback.\r
+\r
+ When later performing a <a href="./cl_qcomppool_h.html#robo546">cl_qcpool_get</a> call, the return value is a pointer\r
+ to the <a href="./cl_qcomppool_h.html#robo542">cl_pool_item_t</a> returned by this function in the pp_pool_item\r
+ parameter. Users must set pp_pool_item to a valid pointer to the\r
+ <a href="./cl_qcomppool_h.html#robo542">cl_pool_item_t</a> representing the object if they return CL_SUCCESS.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Quick <a href="./cl_pool_h.html#robo24">Pool</a>, <a href="#robo623">cl_qpool_init</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo618">[Functions]<a name="Component20Library3a20Quick20Pool2fcl5fqpool5fconstruct">\r
+Component Library: Quick Pool/cl_qpool_construct</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_qpool_construct</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_qpool_construct</strong> function constructs a quick pool.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT void CL_API\r
+<strong>cl_qpool_construct</strong>(\r
+ IN <a href="#robo626">cl_qpool_t</a>* const p_pool );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_pool\r
+ [in] Pointer to a <a href="#robo626">cl_qpool_t</a> structure whose state to initialize.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> This function does not return a value.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> Allows calling <a href="#robo623">cl_qpool_init</a>, <a href="#robo620">cl_qpool_destroy</a>, <a href="#robo615">cl_is_qpool_inited</a>.\r
+\r
+ Calling <strong>cl_qpool_construct</strong> is a prerequisite to calling any other\r
+ quick pool function except <a href="./cl_pool_h.html#robo536">cl_pool_init</a>.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Quick <a href="./cl_pool_h.html#robo24">Pool</a>, <a href="#robo623">cl_qpool_init</a>, <a href="#robo620">cl_qpool_destroy</a>, <a href="#robo615">cl_is_qpool_inited</a>.\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo619">[Functions]<a name="Component20Library3a20Quick20Pool2fcl5fqpool5fcount">\r
+Component Library: Quick Pool/cl_qpool_count</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_qpool_count</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_qpool_count</strong> function returns the number of available objects\r
+ in a quick pool.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_INLINE size_t CL_API\r
+<strong>cl_qpool_count</strong>(\r
+ IN <a href="#robo626">cl_qpool_t</a>* const p_pool )\r
+{\r
+ CL_ASSERT( p_pool );\r
+ return( <a href="./cl_qcomppool_h.html#robo544">cl_qcpool_count</a>( &p_pool->qcpool ) );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_pool\r
+ [in] Pointer to a <a href="#robo626">cl_qpool_t</a> structure for which the number of\r
+ available objects is requested.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> Returns the number of objects available in the specified quick pool.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Quick <a href="./cl_pool_h.html#robo24">Pool</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo620">[Functions]<a name="Component20Library3a20Quick20Pool2fcl5fqpool5fdestroy">\r
+Component Library: Quick Pool/cl_qpool_destroy</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_qpool_destroy</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_qpool_destroy</strong> function destroys a quick pool.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_INLINE void CL_API\r
+<strong>cl_qpool_destroy</strong>(\r
+ IN <a href="#robo626">cl_qpool_t</a>* const p_pool )\r
+{\r
+ CL_ASSERT( p_pool );\r
+ <a href="./cl_qcomppool_h.html#robo545">cl_qcpool_destroy</a>( &p_pool->qcpool );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_pool\r
+ [in] Pointer to a <a href="#robo626">cl_qpool_t</a> structure to destroy.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> This function does not return a value.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> All memory allocated for objects is freed. The destructor callback,\r
+ if any, will be invoked for every allocated object. Further operations\r
+ on the pool should not be attempted after <strong>cl_qpool_destroy</strong>\r
+ is invoked.\r
+\r
+ This function should only be called after a call to\r
+ <a href="#robo618">cl_qpool_construct</a> or <a href="#robo623">cl_qpool_init</a>.\r
+\r
+ In a debug build, <strong>cl_qpool_destroy</strong> asserts that all objects are in\r
+ the pool.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Quick <a href="./cl_pool_h.html#robo24">Pool</a>, <a href="#robo618">cl_qpool_construct</a>, <a href="#robo623">cl_qpool_init</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo621">[Functions]<a name="Component20Library3a20Quick20Pool2fcl5fqpool5fget">\r
+Component Library: Quick Pool/cl_qpool_get</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_qpool_get</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_qpool_get</strong> function retrieves an object from a\r
+ quick pool.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_INLINE <a href="./cl_qcomppool_h.html#robo542">cl_pool_item_t</a>* CL_API\r
+<strong>cl_qpool_get</strong>(\r
+ IN <a href="#robo626">cl_qpool_t</a>* const p_pool )\r
+{\r
+ CL_ASSERT( p_pool );\r
+ return( <a href="./cl_qcomppool_h.html#robo546">cl_qcpool_get</a>( &p_pool->qcpool ) );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_pool\r
+ [in] Pointer to a <a href="#robo626">cl_qpool_t</a> structure from which to retrieve\r
+ an object.\r
+\r
+ RETURN VALUES\r
+ Returns a pointer to a <a href="./cl_qcomppool_h.html#robo542">cl_pool_item_t</a> for an object.\r
+\r
+ Returns NULL if the pool is empty and can not be grown automatically.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> <strong>cl_qpool_get</strong> returns the object at the head of the pool. If the pool is\r
+ empty, it is automatically grown to accommodate this request unless the\r
+ grow_size parameter passed to the <a href="#robo623">cl_qpool_init</a> function was zero.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Quick <a href="./cl_pool_h.html#robo24">Pool</a>, cl_qpool_get_tail, <a href="#robo624">cl_qpool_put</a>, <a href="#robo622">cl_qpool_grow</a>, <a href="#robo619">cl_qpool_count</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo622">[Functions]<a name="Component20Library3a20Quick20Pool2fcl5fqpool5fgrow">\r
+Component Library: Quick Pool/cl_qpool_grow</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_qpool_grow</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_qpool_grow</strong> function grows a quick pool by\r
+ the specified number of objects.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_INLINE <a href="./cl_types_h.html#robo304">cl_status_t</a> CL_API\r
+<strong>cl_qpool_grow</strong>(\r
+ IN <a href="#robo626">cl_qpool_t</a>* const p_pool,\r
+ IN const size_t obj_count )\r
+{\r
+ CL_ASSERT( p_pool );\r
+ return( <a href="./cl_qcomppool_h.html#robo547">cl_qcpool_grow</a>( &p_pool->qcpool, obj_count ) );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_pool\r
+ [in] Pointer to a <a href="#robo626">cl_qpool_t</a> structure whose capacity to grow.\r
+\r
+ obj_count\r
+ [in] Number of objects by which to grow the pool.\r
+\r
+ RETURN VALUES\r
+ CL_SUCCESS if the quick pool grew successfully.\r
+\r
+ CL_INSUFFICIENT_MEMORY if there was not enough memory to grow the\r
+ quick pool.\r
+\r
+ <a href="./cl_types_h.html#robo304">cl_status_t</a> value returned by optional initialization callback function\r
+ specified by the pfn_initializer parameter passed to the\r
+ <a href="#robo623">cl_qpool_init</a> function.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> It is not necessary to call <strong>cl_qpool_grow</strong> if the pool is\r
+ configured to grow automatically.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Quick <a href="./cl_pool_h.html#robo24">Pool</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo623">[Functions]<a name="Component20Library3a20Quick20Pool2fcl5fqpool5finit">\r
+Component Library: Quick Pool/cl_qpool_init</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_qpool_init</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_qpool_init</strong> function initializes a quick pool for use.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT <a href="./cl_types_h.html#robo304">cl_status_t</a> CL_API\r
+<strong>cl_qpool_init</strong>(\r
+ IN <a href="#robo626">cl_qpool_t</a>* const p_pool,\r
+ IN const size_t min_size,\r
+ IN const size_t max_size,\r
+ IN const size_t grow_size,\r
+ IN const size_t object_size,\r
+ IN <a href="#robo617">cl_pfn_qpool_init_t</a> pfn_initializer OPTIONAL,\r
+ IN <a href="#robo616">cl_pfn_qpool_dtor_t</a> pfn_destructor OPTIONAL,\r
+ IN const void* const context );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_pool\r
+ [in] Pointer to a <a href="#robo626">cl_qpool_t</a> structure to initialize.\r
+\r
+ min_size\r
+ [in] Minimum number of objects that the pool should support. All\r
+ necessary allocations to allow storing the minimum number of items\r
+ are performed at initialization time, and all necessary callbacks\r
+ successfully invoked.\r
+\r
+ max_size\r
+ [in] Maximum number of objects to which the pool is allowed to grow.\r
+ A value of zero specifies no maximum.\r
+\r
+ grow_size\r
+ [in] Number of objects to allocate when incrementally growing the pool.\r
+ A value of zero disables automatic growth.\r
+\r
+ object_size\r
+ [in] Size, in bytes, of each object.\r
+\r
+ pfn_initializer\r
+ [in] Initialization callback to invoke for every new object when\r
+ growing the pool. This parameter is optional and may be NULL. If NULL,\r
+ the pool assumes the <a href="./cl_qcomppool_h.html#robo542">cl_pool_item_t</a> structure describing objects is\r
+ located at the head of each object. See the <a href="#robo617">cl_pfn_qpool_init_t</a>\r
+ function type declaration for details about the callback function.\r
+\r
+ pfn_destructor\r
+ [in] Destructor callback to invoke for every object before memory for\r
+ that object is freed. This parameter is optional and may be NULL.\r
+ See the <a href="#robo616">cl_pfn_qpool_dtor_t</a> function type declaration for details\r
+ about the callback function.\r
+\r
+ context\r
+ [in] Value to pass to the callback functions to provide context.\r
+\r
+ RETURN VALUES\r
+ CL_SUCCESS if the quick pool was initialized successfully.\r
+\r
+ CL_INSUFFICIENT_MEMORY if there was not enough memory to initialize the\r
+ quick pool.\r
+\r
+ CL_INVALID_SETTING if a the maximum size is non-zero and less than the\r
+ minimum size.\r
+\r
+ Other <a href="./cl_types_h.html#robo304">cl_status_t</a> value returned by optional initialization callback function\r
+ specified by the pfn_initializer parameter.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> <strong>cl_qpool_init</strong> initializes, and if necessary, grows the pool to\r
+ the capacity desired.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Quick <a href="./cl_pool_h.html#robo24">Pool</a>, <a href="#robo618">cl_qpool_construct</a>, <a href="#robo620">cl_qpool_destroy</a>,\r
+ <a href="#robo621">cl_qpool_get</a>, <a href="#robo624">cl_qpool_put</a>, <a href="#robo622">cl_qpool_grow</a>,\r
+ <a href="#robo619">cl_qpool_count</a>, <a href="#robo617">cl_pfn_qpool_init_t</a>, <a href="#robo617">cl_pfn_qpool_init_t</a>,\r
+ <a href="#robo616">cl_pfn_qpool_dtor_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo624">[Functions]<a name="Component20Library3a20Quick20Pool2fcl5fqpool5fput">\r
+Component Library: Quick Pool/cl_qpool_put</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_qpool_put</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_qpool_put</strong> function returns an object to the head of a quick pool.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_INLINE void CL_API\r
+<strong>cl_qpool_put</strong>(\r
+ IN <a href="#robo626">cl_qpool_t</a>* const p_pool,\r
+ IN <a href="./cl_qcomppool_h.html#robo542">cl_pool_item_t</a>* const p_pool_item )\r
+{\r
+ CL_ASSERT( p_pool );\r
+ <a href="./cl_qcomppool_h.html#robo549">cl_qcpool_put</a>( &p_pool->qcpool, p_pool_item );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_pool\r
+ [in] Pointer to a <a href="#robo626">cl_qpool_t</a> structure to which to return\r
+ an object.\r
+\r
+ p_pool_item\r
+ [in] Pointer to a <a href="./cl_qcomppool_h.html#robo542">cl_pool_item_t</a> structure for the object\r
+ being returned.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> This function does not return a value.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> <strong>cl_qpool_put</strong> places the returned object at the head of the pool.\r
+\r
+ The object specified by the p_pool_item parameter must have been\r
+ retrieved from the pool by a previous call to <a href="#robo621">cl_qpool_get</a>.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Quick <a href="./cl_pool_h.html#robo24">Pool</a>, cl_qpool_put_tail, <a href="#robo621">cl_qpool_get</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo625">[Functions]<a name="Component20Library3a20Quick20Pool2fcl5fqpool5fput5flist">\r
+Component Library: Quick Pool/cl_qpool_put_list</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_qpool_put_list</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_qpool_put_list</strong> function returns a list of objects to the head\r
+ of a quick pool.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_INLINE void CL_API\r
+<strong>cl_qpool_put_list</strong>(\r
+ IN <a href="#robo626">cl_qpool_t</a>* const p_pool,\r
+ IN <a href="./cl_qlist_h.html#robo584">cl_qlist_t</a>* const p_list )\r
+{\r
+ CL_ASSERT( p_pool );\r
+ <a href="./cl_qcomppool_h.html#robo550">cl_qcpool_put_list</a>( &p_pool->qcpool, p_list );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_pool\r
+ [in] Pointer to a <a href="#robo626">cl_qpool_t</a> structure to which to return\r
+ a list of objects.\r
+\r
+ p_list\r
+ [in] Pointer to a <a href="./cl_qlist_h.html#robo584">cl_qlist_t</a> structure for the list of objects\r
+ being returned.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> This function does not return a value.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> <strong>cl_qpool_put_list</strong> places the returned objects at the head of the pool.\r
+\r
+ The objects in the list specified by the p_list parameter must have been\r
+ retrieved from the pool by a previous call to <a href="#robo621">cl_qpool_get</a>.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Quick <a href="./cl_pool_h.html#robo24">Pool</a>, <a href="#robo624">cl_qpool_put</a>, cl_qpool_put_tail, <a href="#robo621">cl_qpool_get</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo626">[Structures]<a name="Component20Library3a20Quick20Pool2fcl5fqpool5ft">\r
+Component Library: Quick Pool/cl_qpool_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_qpool_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Quick pool structure.\r
+\r
+ The <strong>cl_qpool_t</strong> structure should be treated as opaque and should be\r
+ manipulated only through the provided functions.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef struct _cl_qpool\r
+{\r
+ <a href="./cl_qcomppool_h.html#robo551">cl_qcpool_t</a> qcpool;\r
+ <a href="#robo617">cl_pfn_qpool_init_t</a> pfn_init;\r
+ <a href="#robo616">cl_pfn_qpool_dtor_t</a> pfn_dtor;\r
+ const void *context;\r
+\r
+} <strong>cl_qpool_t</strong>;\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> qcpool\r
+ Quick composite pool that manages all objects.\r
+\r
+ pfn_init\r
+ Pointer to the user's initializer callback, used by the pool\r
+ to translate the quick composite pool's initializer callback to\r
+ a quick pool initializer callback.\r
+\r
+ pfn_dtor\r
+ Pointer to the user's destructor callback, used by the pool\r
+ to translate the quick composite pool's destructor callback to\r
+ a quick pool destructor callback.\r
+\r
+ context\r
+ User's provided context for callback functions, used by the pool\r
+ to when invoking callbacks.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Quick <a href="./cl_pool_h.html#robo24">Pool</a>\r
+</pre>\r
+</span>\r
+</body>\r
+</html>\r
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">\r
+<html>\r
+<head>\r
+<link rel="stylesheet" href="../robodoc.css" type="text/css">\r
+<title>./inc_doc/complib/cl_rbmap_h.html</title>\r
+<!-- Source: ./inc/complib/cl_rbmap.h -->\r
+<!-- Generated with ROBODoc Version 4.99.22 (Mar 6 2006) -->\r
+</head>\r
+<body bgcolor="#FFFFFF">\r
+<a name="robo_top_of_doc">Generated from ./inc/complib/cl_rbmap.h</a> with <a href="http://sourceforge.net/projects/robodoc/">ROBODoc</a> v4.99.22 on Sun Apr 16 2006 17:39:24\r
+<br />\r
+<hr />\r
+\r
+<h2><a name="robo30">[Modules]<a name="Component20Library2fRB20Map">\r
+Component Library/RB Map</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_modules.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> RB <a href="./cl_map_h.html#robo17">Map</a>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> RB map implements a binary tree that stores user provided <a href="#robo632">cl_rbmap_item_t</a>\r
+ structures. Each item stored in a RB map has a unique key\r
+ (duplicates are not allowed). RB map provides the ability to\r
+ efficiently search for an item given a key.\r
+\r
+ RB map does not allocate any memory, and can therefore not fail\r
+ any operations due to insufficient memory. RB map can thus be useful\r
+ in minimizing the error paths in code.\r
+\r
+ RB map is not thread safe, and users must provide serialization when\r
+ adding and removing items from the map.\r
+\r
+ The RB map functions operate on a <a href="#robo638">cl_rbmap_t</a> structure which should be\r
+ treated as opaque and should be manipulated only through the provided\r
+ functions.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Structures:\r
+ <a href="#robo638">cl_rbmap_t</a>, <a href="#robo632">cl_rbmap_item_t</a>\r
+\r
+ Initialization:\r
+ <a href="#robo630">cl_rbmap_init</a>\r
+\r
+ Iteration:\r
+ <a href="#robo637">cl_rbmap_root</a>, <a href="#robo629">cl_rbmap_end</a>, <a href="#robo633">cl_rbmap_left</a>, <a href="#robo636">cl_rbmap_right</a>, cl_rbmap_up\r
+\r
+ Manipulation:\r
+ <a href="#robo631">cl_rbmap_insert</a>, cl_rbmap_get, <a href="#robo634">cl_rbmap_remove_item</a>, cl_rbmap_remove,\r
+ <a href="#robo635">cl_rbmap_reset</a>, cl_rbmap_merge, cl_rbmap_delta\r
+\r
+ Search:\r
+ cl_rbmap_apply_func\r
+\r
+ Attributes:\r
+ <a href="#robo628">cl_rbmap_count</a>, <a href="#robo627">cl_is_rbmap_empty</a>,\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo627">[Functions]<a name="Component20Library3a20RB20Map2fcl5fis5frbmap5fempty">\r
+Component Library: RB Map/cl_is_rbmap_empty</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_is_rbmap_empty</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_is_rbmap_empty</strong> function returns whether a RB map is empty.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_INLINE boolean_t CL_API\r
+<strong>cl_is_rbmap_empty</strong>(\r
+ IN const <a href="#robo638">cl_rbmap_t</a>* const p_map )\r
+{\r
+ CL_ASSERT( p_map );\r
+ CL_ASSERT( p_map->state == CL_INITIALIZED );\r
+\r
+ return( p_map->count == 0 );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_map\r
+ [in] Pointer to a <a href="#robo638">cl_rbmap_t</a> structure to test for emptiness.\r
+\r
+ RETURN VALUES\r
+ TRUE if the RB map is empty.\r
+\r
+ FALSE otherwise.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> RB <a href="./cl_map_h.html#robo17">Map</a>, <a href="#robo628">cl_rbmap_count</a>, <a href="#robo635">cl_rbmap_reset</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo628">[Functions]<a name="Component20Library3a20RB20Map2fcl5frbmap5fcount">\r
+Component Library: RB Map/cl_rbmap_count</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_rbmap_count</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_rbmap_count</strong> function returns the number of items stored\r
+ in a RB map.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_INLINE size_t CL_API\r
+<strong>cl_rbmap_count</strong>(\r
+ IN const <a href="#robo638">cl_rbmap_t</a>* const p_map )\r
+{\r
+ CL_ASSERT( p_map );\r
+ CL_ASSERT( p_map->state == CL_INITIALIZED );\r
+ return( p_map->count );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_map\r
+ [in] Pointer to a <a href="#robo638">cl_rbmap_t</a> structure whose item count to return.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> Returns the number of items stored in the map.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> RB <a href="./cl_map_h.html#robo17">Map</a>, <a href="#robo627">cl_is_rbmap_empty</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo629">[Functions]<a name="Component20Library3a20RB20Map2fcl5frbmap5fend">\r
+Component Library: RB Map/cl_rbmap_end</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_rbmap_end</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_rbmap_end</strong> function returns the end of a RB map.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_INLINE const <a href="#robo632">cl_rbmap_item_t</a>* const CL_API\r
+<strong>cl_rbmap_end</strong>(\r
+ IN const <a href="#robo638">cl_rbmap_t</a>* const p_map )\r
+{\r
+ CL_ASSERT( p_map );\r
+ CL_ASSERT( p_map->state == CL_INITIALIZED );\r
+ /* Nil is the end of the map. */\r
+ return( &p_map->nil );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_map\r
+ [in] Pointer to a <a href="#robo638">cl_rbmap_t</a> structure whose end to return.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> Pointer to the end of the map.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> <strong>cl_rbmap_end</strong> is useful for determining the validity of map items returned\r
+ by cl_rbmap_head, cl_rbmap_tail, cl_rbmap_next, or cl_rbmap_prev. If the map\r
+ item pointer returned by any of these functions compares to the end, the\r
+ end of the map was encoutered.\r
+ When using cl_rbmap_head or cl_rbmap_tail, this condition indicates that\r
+ the map is empty.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> RB <a href="./cl_map_h.html#robo17">Map</a>, cl_rbmap_head, cl_rbmap_tail, cl_rbmap_next, cl_rbmap_prev\r
+ <a href="#robo637">cl_rbmap_root</a>, <a href="#robo633">cl_rbmap_left</a>, <a href="#robo636">cl_rbmap_right</a>, cl_rbmap_up\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo630">[Functions]<a name="Component20Library3a20RB20Map2fcl5frbmap5finit">\r
+Component Library: RB Map/cl_rbmap_init</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_rbmap_init</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_rbmap_init</strong> function initialized a RB map for use.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_INLINE void CL_API\r
+<strong>cl_rbmap_init</strong>(\r
+ IN <a href="#robo638">cl_rbmap_t</a>* const p_map )\r
+{\r
+ CL_ASSERT( p_map );\r
+\r
+ /* special setup for the root node */\r
+ p_map->root.p_left = &p_map->nil;\r
+ p_map->root.p_right = &p_map->nil;\r
+ p_map->root.p_up = &p_map->root;\r
+ p_map->root.color = CL_MAP_BLACK;\r
+\r
+ /* Setup the node used as terminator for all leaves. */\r
+ p_map->nil.p_left = &p_map->nil;\r
+ p_map->nil.p_right = &p_map->nil;\r
+ p_map->nil.p_up = &p_map->nil;\r
+ p_map->nil.color = CL_MAP_BLACK;\r
+\r
+#ifdef _DEBUG_\r
+ p_map->root.p_map = p_map;\r
+ p_map->nil.p_map = p_map;\r
+#endif\r
+\r
+ p_map->state = CL_INITIALIZED;\r
+\r
+ p_map->count = 0;\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_map\r
+ [in] Pointer to a <a href="#robo638">cl_rbmap_t</a> structure to initialize.\r
+\r
+ RETURN VALUES\r
+ This function does not return a value.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> Allows calling RB map manipulation functions.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> RB <a href="./cl_map_h.html#robo17">Map</a>, <a href="#robo631">cl_rbmap_insert</a>, cl_rbmap_remove\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo631">[Functions]<a name="Component20Library3a20RB20Map2fcl5frbmap5finsert">\r
+Component Library: RB Map/cl_rbmap_insert</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_rbmap_insert</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_rbmap_insert</strong> function inserts a map item into a RB map.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT void CL_API\r
+<strong>cl_rbmap_insert</strong>(\r
+ IN <a href="#robo638">cl_rbmap_t</a>* const p_map,\r
+ IN <a href="#robo632">cl_rbmap_item_t</a>* const p_insert_at,\r
+ IN <a href="#robo632">cl_rbmap_item_t</a>* const p_item,\r
+ IN boolean_t left );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_map\r
+ [in] Pointer to a <a href="#robo638">cl_rbmap_t</a> structure into which to add the item.\r
+\r
+ p_insert_at\r
+ [in] Pointer to a <a href="#robo632">cl_rbmap_item_t</a> structure to serve as parent\r
+ to p_item.\r
+\r
+ p_item\r
+ [in] Pointer to a <a href="#robo632">cl_rbmap_item_t</a> stucture to insert into the RB map.\r
+\r
+ left\r
+ [in] Indicates that p_item should be inserted to the left of p_insert_at.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> Pointer to the item in the map with the specified key. If insertion\r
+ was successful, this is the pointer to the item. If an item with the\r
+ specified key already exists in the map, the pointer to that item is\r
+ returned.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> Insertion operations may cause the RB map to rebalance.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> RB <a href="./cl_map_h.html#robo17">Map</a>, cl_rbmap_remove, <a href="#robo632">cl_rbmap_item_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo632">[Structures]<a name="Component20Library3a20RB20Map2fcl5frbmap5fitem5ft">\r
+Component Library: RB Map/cl_rbmap_item_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_rbmap_item_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_rbmap_item_t</strong> structure is used by maps to store objects.\r
+\r
+ The <strong>cl_rbmap_item_t</strong> structure should be treated as opaque and should\r
+ be manipulated only through the provided functions.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef struct _cl_rbmap_item\r
+{\r
+ struct _cl_rbmap_item *p_left;\r
+ struct _cl_rbmap_item *p_right;\r
+ struct _cl_rbmap_item *p_up;\r
+ cl_map_color_t color;\r
+#ifdef _DEBUG_\r
+ struct _cl_rbmap *p_map;\r
+#endif\r
+\r
+} <strong>cl_rbmap_item_t</strong>;\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> p_left\r
+ Pointer to the map item that is a child to the left of the node.\r
+\r
+ p_right\r
+ Pointer to the map item that is a child to the right of the node.\r
+\r
+ p_up\r
+ Pointer to the map item that is the parent of the node.\r
+\r
+ color\r
+ Indicates whether a node is red or black in the map.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> None of the fields of this structure should be manipulated by users, as\r
+ they are crititcal to the proper operation of the map in which they\r
+ are stored.\r
+\r
+ To allow storing items in either a quick list, a quick pool, or a quick\r
+ map, the map implementation guarantees that the map item can be safely\r
+ cast to a pool item used for storing an object in a quick pool, or cast to\r
+ a list item used for storing an object in a quick list. This removes the\r
+ need to embed a map item, a list item, and a pool item in objects that need\r
+ to be stored in a quick list, a quick pool, and a RB map.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> RB <a href="./cl_map_h.html#robo17">Map</a>, <a href="#robo631">cl_rbmap_insert</a>, cl_rbmap_key, <a href="./cl_qcomppool_h.html#robo542">cl_pool_item_t</a>, <a href="./cl_qlist_h.html#robo554">cl_list_item_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo633">[Functions]<a name="Component20Library3a20RB20Map2fcl5frbmap5fleft">\r
+Component Library: RB Map/cl_rbmap_left</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_rbmap_left</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_rbmap_left</strong> function returns the map item to the left\r
+ of the specified map item.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_INLINE <a href="#robo632">cl_rbmap_item_t</a>* CL_API\r
+<strong>cl_rbmap_left</strong>(\r
+ IN const <a href="#robo632">cl_rbmap_item_t</a>* const p_item )\r
+{\r
+ CL_ASSERT( p_item );\r
+ return( (<a href="#robo632">cl_rbmap_item_t</a>*)p_item->p_left );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_item\r
+ [in] Pointer to a map item whose predecessor to return.\r
+\r
+ RETURN VALUES\r
+ Pointer to the map item to the left in a RB map.\r
+\r
+ Pointer to the map end if no item is to the left.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> RB <a href="./cl_map_h.html#robo17">Map</a>, cl_rbmap_head, cl_rbmap_tail, cl_rbmap_next, <a href="#robo629">cl_rbmap_end</a>,\r
+ <a href="#robo632">cl_rbmap_item_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo634">[Functions]<a name="Component20Library3a20RB20Map2fcl5frbmap5fremove5fitem">\r
+Component Library: RB Map/cl_rbmap_remove_item</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_rbmap_remove_item</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_rbmap_remove_item</strong> function removes the specified map item\r
+ from a RB map.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT void CL_API\r
+<strong>cl_rbmap_remove_item</strong>(\r
+ IN <a href="#robo638">cl_rbmap_t</a>* const p_map,\r
+ IN <a href="#robo632">cl_rbmap_item_t</a>* const p_item );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_item\r
+ [in] Pointer to a map item to remove from its RB map.\r
+\r
+ RETURN VALUES\r
+ This function does not return a value.\r
+\r
+ In a debug build, <strong>cl_rbmap_remove_item</strong> asserts that the item being removed\r
+ is in the specified map.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> Removes the map item pointed to by p_item from its RB map.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> RB <a href="./cl_map_h.html#robo17">Map</a>, cl_rbmap_remove, <a href="#robo635">cl_rbmap_reset</a>, <a href="#robo631">cl_rbmap_insert</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo635">[Functions]<a name="Component20Library3a20RB20Map2fcl5frbmap5freset">\r
+Component Library: RB Map/cl_rbmap_reset</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_rbmap_reset</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_rbmap_reset</strong> function removes all items in a RB map,\r
+ leaving it empty.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_INLINE void CL_API\r
+<strong>cl_rbmap_reset</strong>(\r
+ IN <a href="#robo638">cl_rbmap_t</a>* const p_map )\r
+{\r
+ CL_ASSERT( p_map );\r
+ CL_ASSERT( p_map->state == CL_INITIALIZED );\r
+\r
+ p_map->root.p_left = &p_map->nil;\r
+ p_map->count = 0;\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_map\r
+ [in] Pointer to a <a href="#robo638">cl_rbmap_t</a> structure to empty.\r
+\r
+ RETURN VALUES\r
+ This function does not return a value.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> RB <a href="./cl_map_h.html#robo17">Map</a>, cl_rbmap_remove, <a href="#robo634">cl_rbmap_remove_item</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo636">[Functions]<a name="Component20Library3a20RB20Map2fcl5frbmap5fright">\r
+Component Library: RB Map/cl_rbmap_right</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_rbmap_right</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_rbmap_right</strong> function returns the map item to the right\r
+ of the specified map item.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_INLINE <a href="#robo632">cl_rbmap_item_t</a>* CL_API\r
+<strong>cl_rbmap_right</strong>(\r
+ IN const <a href="#robo632">cl_rbmap_item_t</a>* const p_item )\r
+{\r
+ CL_ASSERT( p_item );\r
+ return( (<a href="#robo632">cl_rbmap_item_t</a>*)p_item->p_right );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_item\r
+ [in] Pointer to a map item whose predecessor to return.\r
+\r
+ RETURN VALUES\r
+ Pointer to the map item to the right in a RB map.\r
+\r
+ Pointer to the map end if no item is to the right.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> RB <a href="./cl_map_h.html#robo17">Map</a>, cl_rbmap_head, cl_rbmap_tail, cl_rbmap_next, <a href="#robo629">cl_rbmap_end</a>,\r
+ <a href="#robo632">cl_rbmap_item_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo637">[Functions]<a name="Component20Library3a20RB20Map2fcl5frbmap5froot">\r
+Component Library: RB Map/cl_rbmap_root</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_rbmap_root</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_rbmap_root</strong> function returns the root of a RB map.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_INLINE <a href="#robo632">cl_rbmap_item_t</a>* const CL_API\r
+<strong>cl_rbmap_root</strong>(\r
+ IN const <a href="#robo638">cl_rbmap_t</a>* const p_map )\r
+{\r
+ CL_ASSERT( p_map );\r
+ return( p_map->root.p_left );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_map\r
+ [in] Pointer to a <a href="#robo638">cl_rbmap_t</a> structure whose root to return.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> Pointer to the end of the map.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> <a href="#robo629">cl_rbmap_end</a> is useful for determining the validity of map items returned\r
+ by cl_rbmap_head, cl_rbmap_tail, cl_rbmap_next, or cl_rbmap_prev. If the map\r
+ item pointer returned by any of these functions compares to the end, the\r
+ end of the map was encoutered.\r
+ When using cl_rbmap_head or cl_rbmap_tail, this condition indicates that\r
+ the map is empty.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> RB <a href="./cl_map_h.html#robo17">Map</a>, cl_rbmap_head, cl_rbmap_tail, cl_rbmap_next, cl_rbmap_prev,\r
+ <a href="#robo629">cl_rbmap_end</a>, <a href="#robo633">cl_rbmap_left</a>, <a href="#robo636">cl_rbmap_right</a>, cl_rbmap_up\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo638">[Structures]<a name="Component20Library3a20RB20Map2fcl5frbmap5ft">\r
+Component Library: RB Map/cl_rbmap_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_rbmap_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Quick map structure.\r
+\r
+ The <strong>cl_rbmap_t</strong> structure should be treated as opaque and should\r
+ be manipulated only through the provided functions.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef struct _cl_rbmap\r
+{\r
+ <a href="#robo632">cl_rbmap_item_t</a> root;\r
+ <a href="#robo632">cl_rbmap_item_t</a> nil;\r
+ cl_state_t state;\r
+ size_t count;\r
+\r
+} <strong>cl_rbmap_t</strong>;\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> root\r
+ <a href="./cl_map_h.html#robo17">Map</a> item that serves as root of the map. The root is set up to\r
+ always have itself as parent. The left pointer is set to point to\r
+ the item at the root.\r
+\r
+ nil\r
+ <a href="./cl_map_h.html#robo17">Map</a> item that serves as terminator for all leaves, as well as providing\r
+ the list item used as quick list for storing map items in a list for\r
+ faster traversal.\r
+\r
+ state\r
+ State of the map, used to verify that operations are permitted.\r
+\r
+ count\r
+ Number of items in the map.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> RB <a href="./cl_map_h.html#robo17">Map</a>\r
+</pre>\r
+</span>\r
+</body>\r
+</html>\r
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">\r
+<html>\r
+<head>\r
+<link rel="stylesheet" href="../robodoc.css" type="text/css">\r
+<title>./inc_doc/complib/cl_reqmgr_h.html</title>\r
+<!-- Source: ./inc/complib/cl_reqmgr.h -->\r
+<!-- Generated with ROBODoc Version 4.99.22 (Mar 6 2006) -->\r
+</head>\r
+<body bgcolor="#FFFFFF">\r
+<a name="robo_top_of_doc">Generated from ./inc/complib/cl_reqmgr.h</a> with <a href="http://sourceforge.net/projects/robodoc/">ROBODoc</a> v4.99.22 on Sun Apr 16 2006 17:39:24\r
+<br />\r
+<hr />\r
+\r
+<h2><a name="robo31">[Modules]<a name="Component20Library2fRequest20Manager">\r
+Component Library/Request Manager</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_modules.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> Request Manager\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The Request Manager manages synchronous as well as asynchronous\r
+ requests for objects.\r
+\r
+ Request manager does not supply the objects, but merely returns whether\r
+ objects are available to satisfy requests. This allows users to use\r
+ various sources for objects.\r
+\r
+ While the request manager manages synchronous and asynchronous requests\r
+ for objects, it does not itself operate asynchronously. Instead, the\r
+ <a href="#robo645">cl_req_mgr_resume</a> function returns information for resuming asynchronous\r
+ requests. If a call to <a href="#robo645">cl_req_mgr_resume</a> returns CL_SUCCESS, additional\r
+ requests may be able to resume. It is recommended that users flush\r
+ pending requests by calling <a href="#robo645">cl_req_mgr_resume</a> while CL_SUCCESS is returned.\r
+\r
+ The request manager functions operates on a <a href="#robo646">cl_req_mgr_t</a> structure which\r
+ should be treated as opaque and should be manipulated only through the\r
+ provided functions.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Types:\r
+ <a href="#robo647">cl_req_type_t</a>\r
+\r
+ Structures:\r
+ <a href="#robo646">cl_req_mgr_t</a>\r
+\r
+ Callbacks:\r
+ <a href="#robo639">cl_pfn_req_cb_t</a>, <a href="#robo640">cl_pfn_reqmgr_get_count_t</a>\r
+\r
+ Initialization/Destruction:\r
+ <a href="#robo641">cl_req_mgr_construct</a>, <a href="#robo644">cl_req_mgr_init</a>, <a href="#robo642">cl_req_mgr_destroy</a>\r
+\r
+ Manipulation:\r
+ <a href="#robo643">cl_req_mgr_get</a>, <a href="#robo645">cl_req_mgr_resume</a>\r
+\r
+ Attributes:\r
+ cl_is_req_mgr_inited, cl_req_mgr_count\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo639">[Definitions]<a name="Component20Library3a20Request20Manager2fcl5fpfn5freq5fcb5ft">\r
+Component Library: Request Manager/cl_pfn_req_cb_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_pfn_req_cb_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_pfn_req_cb_t</strong> function type defines the prototype for functions\r
+ used to store a function pointer to a user defined function.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef void\r
+(CL_API *<strong>cl_pfn_req_cb_t</strong>)( void );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> This function does not take parameters.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> This function does not return a value.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> Function pointers specified by this parameter do not have to match the\r
+ defined syntax, as these callbacks are never invoked directly by the\r
+ request manager. When specifying a function with a different prototype,\r
+ cast the function pointer to this type.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Request Manager, <a href="#robo643">cl_req_mgr_get</a>, <a href="#robo645">cl_req_mgr_resume</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo640">[Definitions]<a name="Component20Library3a20Request20Manager2fcl5fpfn5freqmgr5fget5fcount5ft">\r
+Component Library: Request Manager/cl_pfn_reqmgr_get_count_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_pfn_reqmgr_get_count_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_pfn_reqmgr_get_count_t</strong> function type defines the prototype for\r
+ functions used to retrieve the number of available objects in a pool.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef size_t\r
+(CL_API *<strong>cl_pfn_reqmgr_get_count_t</strong>)(\r
+ IN void* context );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> Context\r
+ [in] Context provided in a call to <a href="#robo644">cl_req_mgr_init</a> by\r
+ the get_context parameter.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> Returns the number of objects available in an object pool for which\r
+ requests are managed by a request manager.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This function type is provided as function prototype reference for the\r
+ function passed into <a href="#robo644">cl_req_mgr_init</a>. This function is invoked by the\r
+ request manager when trying to fulfill requests for resources, either\r
+ through a call to <a href="#robo643">cl_req_mgr_get</a> or <a href="#robo645">cl_req_mgr_resume</a>.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Request Manager, <a href="#robo644">cl_req_mgr_init</a>, <a href="#robo643">cl_req_mgr_get</a>, <a href="#robo645">cl_req_mgr_resume</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo641">[Functions]<a name="Component20Library3a20Request20Manager2fcl5freq5fmgr5fconstruct">\r
+Component Library: Request Manager/cl_req_mgr_construct</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_req_mgr_construct</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_req_mgr_construct</strong> function constructs a request manager.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT void CL_API\r
+<strong>cl_req_mgr_construct</strong>(\r
+ IN <a href="#robo646">cl_req_mgr_t</a>* const p_req_mgr );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_req_mgr\r
+ [in] Pointer to a <a href="#robo646">cl_req_mgr_t</a> structure to construct.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> This function does not return a value.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> <strong>cl_req_mgr_construct</strong> allows calling <a href="#robo642">cl_req_mgr_destroy</a> without first\r
+ calling <a href="#robo644">cl_req_mgr_init</a>.\r
+\r
+ Calling <strong>cl_req_mgr_construct</strong> is a prerequisite to calling any other\r
+ request manager function except <a href="#robo644">cl_req_mgr_init</a>.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Request Manager, <a href="#robo644">cl_req_mgr_init</a>, <a href="#robo642">cl_req_mgr_destroy</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo642">[Functions]<a name="Component20Library3a20Request20Manager2fcl5freq5fmgr5fdestroy">\r
+Component Library: Request Manager/cl_req_mgr_destroy</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_req_mgr_destroy</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_req_mgr_destroy</strong> function destroys a request manager.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT void CL_API\r
+<strong>cl_req_mgr_destroy</strong>(\r
+ IN <a href="#robo646">cl_req_mgr_t</a>* const p_req_mgr );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_req_mgr\r
+ [in] Pointer to a <a href="#robo646">cl_req_mgr_t</a> structure to destroy.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> This function does not return a value.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> <strong>cl_req_mgr_destroy</strong> frees all memory allocated by the request manager.\r
+ Further operations on the request manager should not be attempted.\r
+\r
+ This function should only be called after a call to <a href="#robo641">cl_req_mgr_construct</a>\r
+ or <a href="#robo644">cl_req_mgr_init</a>.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Request Manager, <a href="#robo641">cl_req_mgr_construct</a>, <a href="#robo644">cl_req_mgr_init</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo643">[Functions]<a name="Component20Library3a20Request20Manager2fcl5freq5fmgr5fget">\r
+Component Library: Request Manager/cl_req_mgr_get</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_req_mgr_get</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_req_mgr_get</strong> function handles synchronous and asynchronous\r
+ requests for objects.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT <a href="./cl_types_h.html#robo304">cl_status_t</a> CL_API\r
+<strong>cl_req_mgr_get</strong>(\r
+ IN <a href="#robo646">cl_req_mgr_t</a>* const p_req_mgr,\r
+ IN OUT size_t* const p_count,\r
+ IN const <a href="#robo647">cl_req_type_t</a> req_type,\r
+ IN <a href="#robo639">cl_pfn_req_cb_t</a> pfn_callback,\r
+ IN const void* const context1,\r
+ IN const void* const context2 );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_req_mgr\r
+ [in] Pointer to a <a href="#robo646">cl_req_mgr_t</a> structure from which to check\r
+ for resources.\r
+\r
+ p_count\r
+ [in/out] On input, contains the number of objects requested.\r
+ On output, contains the number of objects available.\r
+\r
+ req_type\r
+ [in] Enumerated type describing the type of request. Valid values are:\r
+ ReqGetSync\r
+ Synchronous request.\r
+ ReqGetAsync\r
+ Asynchronous requests for which all objects are required at\r
+ once.\r
+ ReqGetAsyncPartialOk\r
+ Asynchronous requests that may be broken into multiple smaller\r
+ requests.\r
+\r
+ pfn_callback\r
+ [in] Pointer to a callback function for use by the caller. This\r
+ callback function is never invoked by the request manager.\r
+\r
+ context1\r
+ [in] First of two contexts for a resource request.\r
+\r
+ context2\r
+ [in] Second of two contexts for a resource request.\r
+\r
+ RETURN VALUES\r
+ CL_SUCCESS if all objects requested are available.\r
+\r
+ CL_PENDING if the request could not be completed in its entirety.\r
+ The p_count parameter contains the number of objects immediately available.\r
+\r
+ CL_INSUFFICIENT_RESOURCES if the request could not be completed due to\r
+ insufficient objects being available.\r
+\r
+ CL_INSUFFICIENT_MEMORY if the request failed due to a lack of system memory.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> Upon successful completion of this function, the p_count parameter contains\r
+ the number of objects available.\r
+\r
+ Synchronous requests fail if there are any asynchronous requests pending,\r
+ or if there are not enough resources to immediately satisfy the request in\r
+ its entirety .\r
+\r
+ Asynchronous requests fail if there is insufficient system memory to\r
+ queue them.\r
+\r
+ Once an asynchronous request is queued, use <a href="#robo645">cl_req_mgr_resume</a> to retrieve\r
+ information for resuming queued requests.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Request Manager, <a href="#robo645">cl_req_mgr_resume</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo644">[Functions]<a name="Component20Library3a20Request20Manager2fcl5freq5fmgr5finit">\r
+Component Library: Request Manager/cl_req_mgr_init</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_req_mgr_init</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_req_mgr_init</strong> function initializes a request manager for use.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT <a href="./cl_types_h.html#robo304">cl_status_t</a> CL_API\r
+<strong>cl_req_mgr_init</strong>(\r
+ IN <a href="#robo646">cl_req_mgr_t</a>* const p_req_mgr,\r
+ IN <a href="#robo640">cl_pfn_reqmgr_get_count_t</a> pfn_get_count,\r
+ IN const void* const get_context );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_req_mgr\r
+ [in] Pointer to a <a href="#robo646">cl_req_mgr_t</a> structure to initialize.\r
+\r
+ pfn_get_count\r
+ [in] Callback function invoked by the request manager to get the\r
+ number of objects available in a pool of objects for which the\r
+ request manager is managing requests.\r
+ See the cl_pfn_req_mgr_get_count_t function type declaration for\r
+ details about the callback function.\r
+\r
+ get_context\r
+ [in] Context to pass into the function specified by the\r
+ pfn_get_count parameter.\r
+\r
+ RETURN VALUES\r
+ CL_SUCCESS if the request manager was successfully initialized.\r
+\r
+ CL_INSUFFICIENT_MEMORY if there was not enough memory to initialize\r
+ the request manager.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Request Manager, <a href="#robo641">cl_req_mgr_construct</a>, <a href="#robo642">cl_req_mgr_destroy</a>, <a href="#robo643">cl_req_mgr_get</a>,\r
+ <a href="#robo645">cl_req_mgr_resume</a>, cl_pfn_req_mgr_get_count_t\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo645">[Functions]<a name="Component20Library3a20Request20Manager2fcl5freq5fmgr5fresume">\r
+Component Library: Request Manager/cl_req_mgr_resume</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_req_mgr_resume</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_req_mgr_resume</strong> function attempts to resume queued requests.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT <a href="./cl_types_h.html#robo304">cl_status_t</a> CL_API\r
+<strong>cl_req_mgr_resume</strong>(\r
+ IN <a href="#robo646">cl_req_mgr_t</a>* const p_req_mgr,\r
+ OUT size_t* const p_count,\r
+ OUT <a href="#robo639">cl_pfn_req_cb_t</a>* const ppfn_callback,\r
+ OUT const void** const p_context1,\r
+ OUT const void** const p_context2 );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_req_mgr\r
+ [in] Pointer to a <a href="#robo646">cl_req_mgr_t</a> structure from which to resume requests.\r
+\r
+ p_count\r
+ [out] Contains the number of objects available for a resuming request.\r
+\r
+ ppfn_callback\r
+ [out] Contains the pfn_callback value for the resuming request, as\r
+ provided to the call to the <a href="#robo643">cl_req_mgr_get</a> function.\r
+\r
+ p_context1\r
+ [out] Contains the context1 value for the resuming request, as provided\r
+ to the call to the <a href="#robo643">cl_req_mgr_get</a> function.\r
+\r
+ p_context2\r
+ [out] Contains the context2 value for the resuming request, as provided\r
+ to the call to the <a href="#robo643">cl_req_mgr_get</a> function.\r
+\r
+ RETURN VALUES\r
+ CL_SUCCESS if a request was completed.\r
+\r
+ CL_PENDING if a request was continued, but not completed.\r
+\r
+ CL_INSUFFICIENT_RESOURCES if a request could not be continued due to\r
+ a lack of resources.\r
+\r
+ CL_NOT_DONE if there were no pending requests.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> <strong>cl_req_mgr_resume</strong> resumes at most one request. Further requests may be\r
+ able to be resumed if this call returns CL_SUCCESS.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Request Manager, <a href="#robo643">cl_req_mgr_get</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo646">[Structures]<a name="Component20Library3a20Request20Manager2fcl5freq5fmgr5ft">\r
+Component Library: Request Manager/cl_req_mgr_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_req_mgr_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Quick composite pool structure.\r
+\r
+ The <strong>cl_req_mgr_t</strong> structure should be treated as opaque and should be\r
+ manipulated only through the provided functions.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef struct _cl_req_mgr\r
+{\r
+ <a href="#robo640">cl_pfn_reqmgr_get_count_t</a> pfn_get_count;\r
+ const void *get_context;\r
+ <a href="./cl_qlist_h.html#robo584">cl_qlist_t</a> request_queue;\r
+ <a href="./cl_qpool_h.html#robo626">cl_qpool_t</a> request_pool;\r
+\r
+} <strong>cl_req_mgr_t</strong>;\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> pfn_get_count\r
+ Pointer to the count callback function.\r
+\r
+ get_context\r
+ Context to pass as single parameter to count callback.\r
+\r
+ request_queue\r
+ Pending requests for elements.\r
+\r
+ request_pool\r
+ <a href="./cl_pool_h.html#robo24">Pool</a> of request structures for storing requests in the request queue.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Request Manager\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo647">[Definitions]<a name="Component20Library3a20Request20Manager2fcl5freq5ftype5ft">\r
+Component Library: Request Manager/cl_req_type_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_req_type_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_req_type_t</strong> enumerated type describes the type of request.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef enum _cl_req_type\r
+{\r
+ REQ_GET_SYNC,\r
+ REQ_GET_ASYNC,\r
+ REQ_GET_PARTIAL_OK\r
+\r
+} <strong>cl_req_type_t</strong>;\r
+</pre>\r
+</span><p><strong>VALUES</strong></p>\r
+<span class="VALUES"><pre> REQ_GET_SYNC\r
+ Synchronous request.\r
+\r
+ REQ_GET_ASYNC\r
+ Asynchronous requests for which all objects are required at once.\r
+\r
+ REQ_GET_PARTIAL_OK\r
+ Asynchronous requests that may be broken into multiple smaller requests.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Request Manager, <a href="#robo643">cl_req_mgr_get</a>\r
+</pre>\r
+</span>\r
+</body>\r
+</html>\r
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">\r
+<html>\r
+<head>\r
+<link rel="stylesheet" href="../robodoc.css" type="text/css">\r
+<title>./inc_doc/complib/cl_spinlock_h.html</title>\r
+<!-- Source: ./inc/complib/cl_spinlock.h -->\r
+<!-- Generated with ROBODoc Version 4.99.22 (Mar 6 2006) -->\r
+</head>\r
+<body bgcolor="#FFFFFF">\r
+<a name="robo_top_of_doc">Generated from ./inc/complib/cl_spinlock.h</a> with <a href="http://sourceforge.net/projects/robodoc/">ROBODoc</a> v4.99.22 on Sun Apr 16 2006 17:39:24\r
+<br />\r
+<hr />\r
+\r
+<h2><a name="robo32">[Modules]<a name="Component20Library2fSpinlock">\r
+Component Library/Spinlock</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_modules.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>Spinlock</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> <strong>Spinlock</strong> provides synchronization between threads for exclusive access to\r
+ a resource.\r
+\r
+ The spinlock functions manipulate a cl_spinlock_t structure which should\r
+ be treated as opaque and should be manipulated only through the provided\r
+ functions.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Structures:\r
+ cl_spinlock_t\r
+\r
+ Initialization:\r
+ <a href="#robo649">cl_spinlock_construct</a>, <a href="#robo651">cl_spinlock_init</a>, <a href="#robo650">cl_spinlock_destroy</a>\r
+\r
+ Manipulation\r
+ <a href="#robo648">cl_spinlock_acquire</a>, <a href="#robo652">cl_spinlock_release</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo648">[Functions]<a name="Component20Library3a20Spinlock2fcl5fspinlock5facquire">\r
+Component Library: Spinlock/cl_spinlock_acquire</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_spinlock_acquire</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_spinlock_acquire</strong> function acquires a spin lock.\r
+ This version of lock does not prevent an interrupt from\r
+ occuring on the processor on which the code is being\r
+ executed.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT void CL_API\r
+<strong>cl_spinlock_acquire</strong>(\r
+ IN cl_spinlock_t* const p_spinlock );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_spinlock\r
+ [in] Pointer to a spin lock structure to acquire.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> This function does not return a value.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo32">Spinlock</a>, <a href="#robo652">cl_spinlock_release</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo649">[Functions]<a name="Component20Library3a20Spinlock2fcl5fspinlock5fconstruct">\r
+Component Library: Spinlock/cl_spinlock_construct</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_spinlock_construct</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_spinlock_construct</strong> function initializes the state of a\r
+ spin lock.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT void CL_API\r
+<strong>cl_spinlock_construct</strong>(\r
+ IN cl_spinlock_t* const p_spinlock );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_spinlock\r
+ [in] Pointer to a spin lock structure whose state to initialize.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> This function does not return a value.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> Allows calling <a href="#robo650">cl_spinlock_destroy</a> without first calling\r
+ <a href="#robo651">cl_spinlock_init</a>.\r
+\r
+ Calling <strong>cl_spinlock_construct</strong> is a prerequisite to calling any other\r
+ spin lock function except <a href="#robo651">cl_spinlock_init</a>.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo32">Spinlock</a>, <a href="#robo651">cl_spinlock_init</a>, <a href="#robo650">cl_spinlock_destroy</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo650">[Functions]<a name="Component20Library3a20Spinlock2fcl5fspinlock5fdestroy">\r
+Component Library: Spinlock/cl_spinlock_destroy</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_spinlock_destroy</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_spinlock_destroy</strong> function performs all necessary cleanup of a\r
+ spin lock.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT void CL_API\r
+<strong>cl_spinlock_destroy</strong>(\r
+ IN cl_spinlock_t* const p_spinlock );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_spinlock\r
+ [in] Pointer to a spin lock structure to destroy.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> This function does not return a value.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> Performs any necessary cleanup of a spin lock. This function must only\r
+ be called if either <a href="#robo649">cl_spinlock_construct</a> or <a href="#robo651">cl_spinlock_init</a> has been\r
+ called.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo32">Spinlock</a>, <a href="#robo649">cl_spinlock_construct</a>, <a href="#robo651">cl_spinlock_init</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo651">[Functions]<a name="Component20Library3a20Spinlock2fcl5fspinlock5finit">\r
+Component Library: Spinlock/cl_spinlock_init</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_spinlock_init</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_spinlock_init</strong> function initializes a spin lock for use.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT <a href="./cl_types_h.html#robo304">cl_status_t</a> CL_API\r
+<strong>cl_spinlock_init</strong>(\r
+ IN cl_spinlock_t* const p_spinlock );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_spinlock\r
+ [in] Pointer to a spin lock structure to initialize.\r
+\r
+ RETURN VALUES\r
+ CL_SUCCESS if initialization succeeded.\r
+\r
+ CL_ERROR if initialization failed. Callers should call\r
+ <a href="#robo650">cl_spinlock_destroy</a> to clean up any resources allocated during\r
+ initialization.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> Initialize the spin lock structure. Allows calling cl_spinlock_aquire\r
+ and <a href="#robo652">cl_spinlock_release</a>.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo32">Spinlock</a>, <a href="#robo649">cl_spinlock_construct</a>, <a href="#robo650">cl_spinlock_destroy</a>,\r
+ <a href="#robo648">cl_spinlock_acquire</a>, <a href="#robo652">cl_spinlock_release</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo652">[Functions]<a name="Component20Library3a20Spinlock2fcl5fspinlock5frelease">\r
+Component Library: Spinlock/cl_spinlock_release</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_spinlock_release</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_spinlock_release</strong> function releases a spin lock object.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT void CL_API\r
+<strong>cl_spinlock_release</strong>(\r
+ IN cl_spinlock_t* const p_spinlock );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_spinlock\r
+ [in] Pointer to a spin lock structure to release.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> This function does not return a value.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> Releases a spin lock after a call to <a href="#robo648">cl_spinlock_acquire</a>.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo32">Spinlock</a>, <a href="#robo648">cl_spinlock_acquire</a>\r
+</pre>\r
+</span>\r
+</body>\r
+</html>\r
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">\r
+<html>\r
+<head>\r
+<link rel="stylesheet" href="../robodoc.css" type="text/css">\r
+<title>./inc_doc/complib/cl_syscallback_h.html</title>\r
+<!-- Source: ./inc/complib/cl_syscallback.h -->\r
+<!-- Generated with ROBODoc Version 4.99.22 (Mar 6 2006) -->\r
+</head>\r
+<body bgcolor="#FFFFFF">\r
+<a name="robo_top_of_doc">Generated from ./inc/complib/cl_syscallback.h</a> with <a href="http://sourceforge.net/projects/robodoc/">ROBODoc</a> v4.99.22 on Sun Apr 16 2006 17:39:24\r
+<br />\r
+<hr />\r
+\r
+<h2><a name="robo33">[Modules]<a name="Component20Library2fSystem20Callback">\r
+Component Library/System Callback</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_modules.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> System Callback\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The System Callback provider uses threads from a system thread-pool to\r
+ invoke specified callback functions.\r
+\r
+ Callbacks can be queued in a low- or high-priority queue for processing.\r
+\r
+ <a href="./cl_thread_h.html#robo667">cl_thread_suspend</a> and <a href="./cl_thread_h.html#robo666">cl_thread_stall</a> can be used to delay or stall the\r
+ callback thread.\r
+\r
+ Environments that do not have a native system thread-pool emulate this\r
+ functionality to provide cross-environment support.\r
+\r
+ The cl_sys_callback_item_t structure should be treated as opaque and be\r
+ manipulated only through the provided functions.\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo653">[Functions]<a name="Component20Library3a20System20Callback2fcl5fis5fsys5fcallback5finited">\r
+Component Library: System Callback/cl_is_sys_callback_inited</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_is_sys_callback_inited</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_is_sys_callback_inited</strong> function returns whether the system\r
+ callback provider was initialized successfully\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>boolean_t\r
+__cl_is_sys_callback_inited( void );\r
+/*\r
+* RETURN VALUES\r
+* TRUE if the system callback provider was initialized successfully.\r
+*\r
+* FALSE otherwise.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> Allows checking the state of the system callback provider to determine\r
+ if invoking member functions is appropriate.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> System Callback\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo654">[Definitions]<a name="Component20Library3a20System20Callback2fcl5fpfn5fsys5fcallback5ft">\r
+Component Library: System Callback/cl_pfn_sys_callback_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_pfn_sys_callback_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_pfn_sys_callback_t</strong> function type defines the prototype for\r
+ functions invoked by the system callback provider.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef void\r
+(CL_API *<strong>cl_pfn_sys_callback_t</strong>)(\r
+ IN void* get_context,\r
+ IN void* queue_context );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> get_context\r
+ [in] Value of the get_context parameter specified in a call\r
+ to <a href="#robo655">cl_sys_callback_get</a>.\r
+\r
+ queue_context\r
+ [in] Value of the queue_context parameter specified in a call\r
+ to <a href="#robo657">cl_sys_callback_queue</a>.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> This function does not return a value.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This function type is provided as function prototype reference for\r
+ the function provided by users as a parameter to the\r
+ <a href="#robo657">cl_sys_callback_queue</a> function.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> System Callback, <a href="#robo657">cl_sys_callback_queue</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo655">[Functions]<a name="Component20Library3a20System20Callback2fcl5fsys5fcallback5fget">\r
+Component Library: System Callback/cl_sys_callback_get</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_sys_callback_get</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_sys_callback_get</strong> function retrieves a system callback item.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT cl_sys_callback_item_t* CL_API\r
+<strong>cl_sys_callback_get</strong>(\r
+ IN const void* const get_context );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> get_context\r
+ [in] Context value to pass into the callback function.\r
+\r
+ RETURN VALUES\r
+ Returns a pointer to a system callback item if successful.\r
+\r
+ Returns NULL if the call fails.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> A system callback item must be released with a call to <a href="#robo656">cl_sys_callback_put</a>.\r
+\r
+ Care must be taken to prevent a system callback item from being returned\r
+ to the pool while it is queued. Callers of <a href="#robo657">cl_sys_callback_queue</a> must not\r
+ return the system callback item to the pool until their callback has been\r
+ invoked.\r
+\r
+ In Windows 2000 Kernel Mode, the get_context is a pointer to the device\r
+ object for which the system callback is being used.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> System Callback, SysCallbackPut, SysCallbackQueue\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo656">[Functions]<a name="Component20Library3a20System20Callback2fcl5fsys5fcallback5fput">\r
+Component Library: System Callback/cl_sys_callback_put</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_sys_callback_put</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_sys_callback_put</strong> function releases the specified\r
+ system callback item.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT void CL_API\r
+<strong>cl_sys_callback_put</strong>(\r
+ IN cl_sys_callback_item_t* const p_item );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_item\r
+ [in] Pointer to a system callback item to release.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> This function does not return a value.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> The p_item parameter points to a system callback item returned by\r
+ a previous call to <a href="#robo655">cl_sys_callback_get</a>.\r
+\r
+ The specified system callback item must not be queued when making\r
+ a call to this function. This function can, however, be called\r
+ from the callback function.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> System Callback, <a href="#robo655">cl_sys_callback_get</a>, <a href="#robo657">cl_sys_callback_queue</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo657">[Functions]<a name="Component20Library3a20System20Callback2fcl5fsys5fcallback5fqueue">\r
+Component Library: System Callback/cl_sys_callback_queue</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_sys_callback_queue</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_sys_callback_queue</strong> function queues the specified system callback item\r
+ for execution.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT <a href="./cl_types_h.html#robo304">cl_status_t</a> CL_API\r
+<strong>cl_sys_callback_queue</strong>(\r
+ IN cl_sys_callback_item_t* const p_item,\r
+ IN <a href="#robo654">cl_pfn_sys_callback_t</a> pfn_callback,\r
+ IN const void* const queue_context,\r
+ IN const boolean_t high_priority );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_item\r
+ [in] Pointer to a system callback item.\r
+\r
+ pfn_callback\r
+ [in] Pointer to a function to be invoked by the system callback module.\r
+ See the <a href="#robo654">cl_pfn_sys_callback_t</a> function type definition for details\r
+ about the callback function.\r
+\r
+ queue_context\r
+ [in] Value passed to the system callback function.\r
+\r
+ high_priority\r
+ [in] Specifies whether the request should be queued in the high- or\r
+ low-priority queue.\r
+\r
+ RETURN VALUES\r
+ CL_SUCCESS if the system callback item was successfully queued.\r
+\r
+ CL_ERROR otherwise.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> A thread from the system thread pool will invoke the specified callback\r
+ function with the get_context value specified in the call to\r
+ <a href="#robo655">cl_sys_callback_get</a> and the specified context as parameters.\r
+\r
+ The high priority queue is processed before the low priority queue. There\r
+ is no fairness algorithm implemented for removing items from the queues.\r
+\r
+ Care should be taken to only queue a given system callback item once\r
+ at a time.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> System Callback, <a href="#robo655">cl_sys_callback_get</a>, <a href="#robo654">cl_pfn_sys_callback_t</a>\r
+</pre>\r
+</span>\r
+</body>\r
+</html>\r
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">\r
+<html>\r
+<head>\r
+<link rel="stylesheet" href="../robodoc.css" type="text/css">\r
+<title>./inc_doc/complib/cl_thread_h.html</title>\r
+<!-- Source: ./inc/complib/cl_thread.h -->\r
+<!-- Generated with ROBODoc Version 4.99.22 (Mar 6 2006) -->\r
+</head>\r
+<body bgcolor="#FFFFFF">\r
+<a name="robo_top_of_doc">Generated from ./inc/complib/cl_thread.h</a> with <a href="http://sourceforge.net/projects/robodoc/">ROBODoc</a> v4.99.22 on Sun Apr 16 2006 17:39:24\r
+<br />\r
+<hr />\r
+\r
+<h2><a name="robo663">[Functions]<a name="Component20Library3a20Thread2fcl5fis5fblockable">\r
+Component Library: Thread/cl_is_blockable</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_is_blockable</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_is_blockable</strong> indicates if the current caller context is\r
+ blockable.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT boolean_t CL_API\r
+<strong>cl_is_blockable</strong>( void );\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> TRUE if the caller's thread context can be blocked, i.e it is safe\r
+ to perform a sleep, or call a down operation on a semaphore.\r
+\r
+ FALSE otherwise\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Thread\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo664">[Definitions]<a name="Component20Library3a20Thread2fcl5fpfn5fthread5fcallback5ft">\r
+Component Library: Thread/cl_pfn_thread_callback_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_pfn_thread_callback_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_pfn_thread_callback_t</strong> function type defines the prototype\r
+ for functions invoked by thread objects\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef void\r
+(CL_API *<strong>cl_pfn_thread_callback_t</strong>)(\r
+ IN void* context );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> context\r
+ [in] Value specified in a call to cl_thread_init or\r
+ cl_thread_pool_create.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> This function does not return a value.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This function type is provided as function prototype reference for\r
+ the function provided by users as a parameter to the cl_thread_init\r
+ and cl_thread_pool_create functions.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Thread <a href="./cl_pool_h.html#robo24">Pool</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo665">[Functions]<a name="Component20Library3a20Thread2fcl5fproc5fcount">\r
+Component Library: Thread/cl_proc_count</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_proc_count</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_proc_count</strong> function returns the number of processors in the system.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT uint32_t CL_API\r
+<strong>cl_proc_count</strong>( void );\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> Returns the number of processors in the system.\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo666">[Functions]<a name="Component20Library3a20Thread2fcl5fthread5fstall">\r
+Component Library: Thread/cl_thread_stall</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_thread_stall</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_thread_stall</strong> function stalls the calling thread for a minimum of\r
+ the specified number of microseconds.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT void CL_API\r
+<strong>cl_thread_stall</strong>(\r
+ IN const uint32_t pause_us );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> pause_us\r
+ [in] Number of microseconds to stall the calling thread.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> This function does not return a value.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> The <strong>cl_thread_stall</strong> function performs a busy wait for the specified\r
+ number of microseconds. Care should be taken when using this function as\r
+ it does not relinquish its quantum of operation. For longer wait\r
+ operations, users should call <a href="#robo667">cl_thread_suspend</a> if possible.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Thread, <a href="#robo667">cl_thread_suspend</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo667">[Functions]<a name="Component20Library3a20Thread2fcl5fthread5fsuspend">\r
+Component Library: Thread/cl_thread_suspend</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_thread_suspend</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_thread_suspend</strong> function suspends the calling thread for a minimum\r
+ of the specified number of milliseconds.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT void CL_API\r
+<strong>cl_thread_suspend</strong>(\r
+ IN const uint32_t pause_ms );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> pause_ms\r
+ [in] Number of milliseconds to suspend the calling thread.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> This function does not return a value.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This function should only be called if it is valid for the caller's thread\r
+ to enter a wait state. For stalling a thread that cannot enter a wait\r
+ state, callers should use <a href="#robo666">cl_thread_stall</a>.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Thread, <a href="#robo666">cl_thread_stall</a>\r
+</pre>\r
+</span>\r
+</body>\r
+</html>\r
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">\r
+<html>\r
+<head>\r
+<link rel="stylesheet" href="../robodoc.css" type="text/css">\r
+<title>./inc_doc/complib/cl_threadpool_h.html</title>\r
+<!-- Source: ./inc/complib/cl_threadpool.h -->\r
+<!-- Generated with ROBODoc Version 4.99.22 (Mar 6 2006) -->\r
+</head>\r
+<body bgcolor="#FFFFFF">\r
+<a name="robo_top_of_doc">Generated from ./inc/complib/cl_threadpool.h</a> with <a href="http://sourceforge.net/projects/robodoc/">ROBODoc</a> v4.99.22 on Sun Apr 16 2006 17:39:24\r
+<br />\r
+<hr />\r
+\r
+<h2><a name="robo34">[Modules]<a name="Component20Library2fThread20Pool">\r
+Component Library/Thread Pool</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_modules.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> Thread <a href="./cl_pool_h.html#robo24">Pool</a>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The Thread <a href="./cl_pool_h.html#robo24">Pool</a> manages a user specified number of threads.\r
+\r
+ Each thread in the thread pool waits for a user initiated signal before\r
+ invoking a user specified callback function. All threads in the thread\r
+ pool invoke the same callback function.\r
+\r
+ The thread pool functions operate on a <a href="#robo662">cl_thread_pool_t</a> structure which\r
+ should be treated as opaque, and should be manipulated only through the\r
+ provided functions.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Structures:\r
+ <a href="#robo662">cl_thread_pool_t</a>\r
+\r
+ Initialization:\r
+ <a href="#robo658">cl_thread_pool_construct</a>, <a href="#robo660">cl_thread_pool_init</a>, <a href="#robo659">cl_thread_pool_destroy</a>\r
+\r
+ Manipulation\r
+ <a href="#robo661">cl_thread_pool_signal</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo658">[Functions]<a name="Component20Library3a20Thread20Pool2fcl5fthread5fpool5fconstruct">\r
+Component Library: Thread Pool/cl_thread_pool_construct</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_thread_pool_construct</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_thread_pool_construct</strong> function initializes the state of a\r
+ thread pool.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT void CL_API\r
+<strong>cl_thread_pool_construct</strong>(\r
+ IN <a href="#robo662">cl_thread_pool_t</a>* const p_thread_pool );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_thread_pool\r
+ [in] Pointer to a thread pool structure.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> This function does not return a value.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> Allows calling <a href="#robo659">cl_thread_pool_destroy</a> without first calling\r
+ <a href="#robo660">cl_thread_pool_init</a>.\r
+\r
+ Calling <strong>cl_thread_pool_construct</strong> is a prerequisite to calling any other\r
+ thread pool function except <a href="#robo660">cl_thread_pool_init</a>.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Thread <a href="./cl_pool_h.html#robo24">Pool</a>, <a href="#robo660">cl_thread_pool_init</a>, <a href="#robo659">cl_thread_pool_destroy</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo659">[Functions]<a name="Component20Library3a20Thread20Pool2fcl5fthread5fpool5fdestroy">\r
+Component Library: Thread Pool/cl_thread_pool_destroy</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_thread_pool_destroy</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_thread_pool_destroy</strong> function performs any necessary cleanup\r
+ for a thread pool.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT void CL_API\r
+<strong>cl_thread_pool_destroy</strong>(\r
+ IN <a href="#robo662">cl_thread_pool_t</a>* const p_thread_pool );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_thread_pool\r
+ [in] Pointer to a thread pool structure to destroy.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> This function does not return a value.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This function blocks until all threads exit, and must therefore not\r
+ be called from any of the thread pool's threads. Because of its blocking\r
+ nature, callers of <strong>cl_thread_pool_destroy</strong> must ensure that entering a wait\r
+ state is valid from the calling thread context.\r
+\r
+ This function should only be called after a call to\r
+ <a href="#robo658">cl_thread_pool_construct</a> or <a href="#robo660">cl_thread_pool_init</a>.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Thread <a href="./cl_pool_h.html#robo24">Pool</a>, <a href="#robo658">cl_thread_pool_construct</a>, <a href="#robo660">cl_thread_pool_init</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo660">[Functions]<a name="Component20Library3a20Thread20Pool2fcl5fthread5fpool5finit">\r
+Component Library: Thread Pool/cl_thread_pool_init</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_thread_pool_init</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_thread_pool_init</strong> function creates the threads to be\r
+ managed by a thread pool.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT <a href="./cl_types_h.html#robo304">cl_status_t</a> CL_API\r
+<strong>cl_thread_pool_init</strong>(\r
+ IN <a href="#robo662">cl_thread_pool_t</a>* const p_thread_pool,\r
+ IN uint32_t thread_count,\r
+ IN <a href="./cl_thread_h.html#robo664">cl_pfn_thread_callback_t</a> pfn_callback,\r
+ IN const void* const context,\r
+ IN const char* const name );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_thread_pool\r
+ [in] Pointer to a thread pool structure to initialize.\r
+\r
+ thread_count\r
+ [in] Number of threads to be managed by the thread pool.\r
+\r
+ pfn_callback\r
+ [in] Address of a function to be invoked by a thread.\r
+ See the <a href="./cl_thread_h.html#robo664">cl_pfn_thread_callback_t</a> function type definition for\r
+ details about the callback function.\r
+\r
+ context\r
+ [in] Value to pass to the callback function.\r
+\r
+ name\r
+ [in] Name to associate with the threads. The name may be up to 16\r
+ characters, including a terminating null character. All threads\r
+ created in the pool have the same name.\r
+\r
+ RETURN VALUES\r
+ CL_SUCCESS if the thread pool creation succeeded.\r
+\r
+ CL_INSUFFICIENT_MEMORY if there was not enough memory to inititalize\r
+ the thread pool.\r
+\r
+ CL_ERROR if the threads could not be created.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> <strong>cl_thread_pool_init</strong> creates and starts the specified number of threads.\r
+ If thread_count is zero, the thread pool creates as many threads as there\r
+ are processors in the system.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Thread <a href="./cl_pool_h.html#robo24">Pool</a>, <a href="#robo658">cl_thread_pool_construct</a>, <a href="#robo659">cl_thread_pool_destroy</a>,\r
+ <a href="#robo661">cl_thread_pool_signal</a>, <a href="./cl_thread_h.html#robo664">cl_pfn_thread_callback_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo661">[Functions]<a name="Component20Library3a20Thread20Pool2fcl5fthread5fpool5fsignal">\r
+Component Library: Thread Pool/cl_thread_pool_signal</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_thread_pool_signal</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_thread_pool_signal</strong> function signals a single thread of\r
+ the thread pool to invoke the thread pool\92s callback function.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT <a href="./cl_types_h.html#robo304">cl_status_t</a> CL_API\r
+<strong>cl_thread_pool_signal</strong>(\r
+ IN <a href="#robo662">cl_thread_pool_t</a>* const p_thread_pool );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_thread_pool\r
+ [in] Pointer to a thread pool structure to signal.\r
+\r
+ RETURN VALUES\r
+ CL_SUCCESS if the thread pool was successfully signalled.\r
+\r
+ CL_ERROR otherwise.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> Each call to this function wakes up at most one waiting thread in\r
+ the thread pool.\r
+\r
+ If all threads are running, <strong>cl_thread_pool_signal</strong> has no effect.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Thread <a href="./cl_pool_h.html#robo24">Pool</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo662">[Structures]<a name="Component20Library3a20Thread20Pool2fcl5fthread5fpool5ft">\r
+Component Library: Thread Pool/cl_thread_pool_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_thread_pool_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Thread pool structure.\r
+\r
+ The <strong>cl_thread_pool_t</strong> structure should be treated as opaque, and should be\r
+ manipulated only through the provided functions.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef struct _cl_thread_pool\r
+{\r
+ <a href="./cl_thread_h.html#robo664">cl_pfn_thread_callback_t</a> pfn_callback;\r
+ const void *context;\r
+ <a href="./cl_list_h.html#robo390">cl_list_t</a> thread_list;\r
+ cl_event_t wakeup_event;\r
+ cl_event_t destroy_event;\r
+ boolean_t exit;\r
+ cl_state_t state;\r
+ atomic32_t running_count;\r
+\r
+} <strong>cl_thread_pool_t</strong>;\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> pfn_callback\r
+ Callback function for the thread to invoke.\r
+\r
+ context\r
+ Context to pass to the thread callback function.\r
+\r
+ thread_list\r
+ <a href="./cl_list_h.html#robo15">List</a> of threads managed by the thread pool.\r
+\r
+ event\r
+ <a href="./cl_event_h.html#robo11">Event</a> used to signal threads to wake up and do work.\r
+\r
+ destroy_event\r
+ <a href="./cl_event_h.html#robo11">Event</a> used to signal threads to exit.\r
+\r
+ exit\r
+ Flag used to indicates threads to exit.\r
+\r
+ state\r
+ State of the thread pool.\r
+\r
+ running_count\r
+ Number of threads running.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Thread <a href="./cl_pool_h.html#robo24">Pool</a>\r
+</pre>\r
+</span>\r
+</body>\r
+</html>\r
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">\r
+<html>\r
+<head>\r
+<link rel="stylesheet" href="../robodoc.css" type="text/css">\r
+<title>./inc_doc/complib/cl_timer_h.html</title>\r
+<!-- Source: ./inc/complib/cl_timer.h -->\r
+<!-- Generated with ROBODoc Version 4.99.22 (Mar 6 2006) -->\r
+</head>\r
+<body bgcolor="#FFFFFF">\r
+<a name="robo_top_of_doc">Generated from ./inc/complib/cl_timer.h</a> with <a href="http://sourceforge.net/projects/robodoc/">ROBODoc</a> v4.99.22 on Sun Apr 16 2006 17:39:23\r
+<br />\r
+<hr />\r
+\r
+<h2><a name="robo35">[Modules]<a name="Component20Library2fTimer">\r
+Component Library/Timer</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_modules.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>Timer</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>Timer</strong> provides the ability to schedule a function to be invoked at\r
+ a given time in the future.\r
+\r
+ The timer callback function must not perform any blocking operations.\r
+\r
+ The timer functions operate on a cl_timer_t structure which should be\r
+ treated as opaque and should be manipulated only through the provided\r
+ functions.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Structures:\r
+ cl_timer_t\r
+\r
+ Callbacks:\r
+ <a href="#robo673">cl_pfn_timer_callback_t</a>\r
+\r
+ Initialization:\r
+ <a href="#robo674">cl_timer_construct</a>, <a href="#robo676">cl_timer_init</a>, <a href="#robo675">cl_timer_destroy</a>\r
+\r
+ Manipulation:\r
+ <a href="#robo677">cl_timer_start</a>, <a href="#robo678">cl_timer_stop</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo668">[Functions]<a name="Component20Library3a20Time20Stamp2fcl5fget5ftick5fcount">\r
+Component Library: Time Stamp/cl_get_tick_count</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_get_tick_count</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_get_tick_count</strong> function returns the raw high-resolution\r
+ performance counter value.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT uint64_t CL_API\r
+<strong>cl_get_tick_count</strong>( void );\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> Value of the high-resolution performance counter.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo35">Timer</a>, <a href="#robo670">cl_get_time_stamp</a>, <a href="#robo669">cl_get_tick_freq</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo669">[Functions]<a name="Component20Library3a20Time20Stamp2fcl5fget5ftick5ffreq">\r
+Component Library: Time Stamp/cl_get_tick_freq</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_get_tick_freq</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_get_tick_freq</strong> function returns the frequency of the\r
+ high-resolution performance counter.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT uint64_t CL_API\r
+<strong>cl_get_tick_freq</strong>( void );\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> The frequency of the high-resolution performance counter.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo35">Timer</a>, <a href="#robo670">cl_get_time_stamp</a>, <a href="#robo668">cl_get_tick_count</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo670">[Functions]<a name="Component20Library3a20Time20Stamp2fcl5fget5ftime5fstamp">\r
+Component Library: Time Stamp/cl_get_time_stamp</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_get_time_stamp</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_get_time_stamp</strong> function returns the current time stamp in\r
+ microseconds since the system was booted.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT uint64_t CL_API\r
+<strong>cl_get_time_stamp</strong>( void );\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> Time elapsed, in microseconds, since the system was booted.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo35">Timer</a>, <a href="#robo672">cl_get_time_stamp_usec</a>, <a href="#robo671">cl_get_time_stamp_sec</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo671">[Functions]<a name="Component20Library3a20Time20Stamp2fcl5fget5ftime5fstamp5fsec">\r
+Component Library: Time Stamp/cl_get_time_stamp_sec</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_get_time_stamp_sec</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_get_time_stamp_sec</strong> function returns the current time stamp in\r
+ seconds since the system was booted.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT uint32_t CL_API\r
+<strong>cl_get_time_stamp_sec</strong>( void );\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> Time elapsed, in seconds, since the system was booted.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo35">Timer</a>, <a href="#robo670">cl_get_time_stamp</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo672">[Functions]<a name="Component20Library3a20Time20Stamp2fcl5fget5ftime5fstamp5fusec">\r
+Component Library: Time Stamp/cl_get_time_stamp_usec</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_get_time_stamp_usec</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_get_time_stamp_usec</strong> function returns the current time stamp in\r
+ microseconds since the system was booted.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_INLINE uint64_t CL_API\r
+<strong>cl_get_time_stamp_usec</strong>( void )\r
+{\r
+ return <a href="#robo670">cl_get_time_stamp</a>();\r
+}\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> Time elapsed, in microseconds, since the system was booted.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo35">Timer</a>, <a href="#robo670">cl_get_time_stamp</a>, <a href="#robo671">cl_get_time_stamp_sec</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo673">[Definitions]<a name="Component20Library3a20Timer2fcl5fpfn5ftimer5fcallback5ft">\r
+Component Library: Timer/cl_pfn_timer_callback_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_pfn_timer_callback_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_pfn_timer_callback_t</strong> function type defines the prototype for\r
+ functions used to notify users of a timer expiration.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef void\r
+(CL_API *<strong>cl_pfn_timer_callback_t</strong>)(\r
+ IN void* context );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> context\r
+ [in] Value specified in a previous call to <a href="#robo676">cl_timer_init</a>.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> This function does not return a value.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This function type is provided as function prototype reference for the\r
+ function provided by users as a parameter to the <a href="#robo676">cl_timer_init</a> function.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo35">Timer</a>, <a href="#robo676">cl_timer_init</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo674">[Functions]<a name="Component20Library3a20Timer2fcl5ftimer5fconstruct">\r
+Component Library: Timer/cl_timer_construct</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_timer_construct</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_timer_construct</strong> function initializes the state of a timer.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT void CL_API\r
+<strong>cl_timer_construct</strong>(\r
+ IN cl_timer_t* const p_timer );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_timer\r
+ [in] Pointer to a cl_timer_t structure whose state to initialize.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> This function does not return a value.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> Allows calling <a href="#robo675">cl_timer_destroy</a> without first calling <a href="#robo676">cl_timer_init</a>.\r
+\r
+ Calling <strong>cl_timer_construct</strong> is a prerequisite to calling any other\r
+ timer function except <a href="#robo676">cl_timer_init</a>.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo35">Timer</a>, <a href="#robo676">cl_timer_init</a>, <a href="#robo675">cl_timer_destroy</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo675">[Functions]<a name="Component20Library3a20Timer2fcl5ftimer5fdestroy">\r
+Component Library: Timer/cl_timer_destroy</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_timer_destroy</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_timer_destroy</strong> function performs any necessary cleanup of a timer.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT void CL_API\r
+<strong>cl_timer_destroy</strong>(\r
+ IN cl_timer_t* const p_timer );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_timer\r
+ [in] Pointer to a cl_timer_t structure to destroy.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> This function does not return a value.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> <strong>cl_timer_destroy</strong> cancels any pending callbacks.\r
+\r
+ This function should only be called after a call to <a href="#robo674">cl_timer_construct</a>\r
+ or <a href="#robo676">cl_timer_init</a>.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo35">Timer</a>, <a href="#robo674">cl_timer_construct</a>, <a href="#robo676">cl_timer_init</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo676">[Functions]<a name="Component20Library3a20Timer2fcl5ftimer5finit">\r
+Component Library: Timer/cl_timer_init</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_timer_init</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_timer_init</strong> function initializes a timer for use.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT <a href="./cl_types_h.html#robo304">cl_status_t</a> CL_API\r
+<strong>cl_timer_init</strong>(\r
+ IN cl_timer_t* const p_timer,\r
+ IN <a href="#robo673">cl_pfn_timer_callback_t</a> pfn_callback,\r
+ IN const void* const context );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_timer\r
+ [in] Pointer to a cl_timer_t structure to initialize.\r
+\r
+ pfn_callback\r
+ [in] Address of a callback function to be invoked when a timer expires.\r
+ See the <a href="#robo673">cl_pfn_timer_callback_t</a> function type definition for details\r
+ about the callback function.\r
+\r
+ context\r
+ [in] Value to pass to the callback function.\r
+\r
+ RETURN VALUES\r
+ CL_SUCCESS if the timer was successfully initialized.\r
+\r
+ CL_ERROR otherwise.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> Allows calling <a href="#robo677">cl_timer_start</a> and <a href="#robo678">cl_timer_stop</a>.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo35">Timer</a>, <a href="#robo674">cl_timer_construct</a>, <a href="#robo675">cl_timer_destroy</a>, <a href="#robo677">cl_timer_start</a>,\r
+ <a href="#robo678">cl_timer_stop</a>, <a href="#robo673">cl_pfn_timer_callback_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo677">[Functions]<a name="Component20Library3a20Timer2fcl5ftimer5fstart">\r
+Component Library: Timer/cl_timer_start</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_timer_start</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_timer_start</strong> function sets a timer to expire after a given interval.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT <a href="./cl_types_h.html#robo304">cl_status_t</a> CL_API\r
+<strong>cl_timer_start</strong>(\r
+ IN cl_timer_t* const p_timer,\r
+ IN const uint32_t time_ms );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_timer\r
+ [in] Pointer to a cl_timer_t structure to schedule.\r
+\r
+ time_ms\r
+ [in] Time, in milliseconds, before the timer should expire.\r
+\r
+ RETURN VALUES\r
+ CL_SUCCESS if the timer was successfully scheduled.\r
+\r
+ CL_ERROR otherwise.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> <strong>cl_timer_start</strong> implicitly stops the timer before being scheduled.\r
+\r
+ The interval specified by the time_ms parameter is a minimum interval.\r
+ The timer is guaranteed to expire no sooner than the desired interval, but\r
+ may take longer to expire.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo35">Timer</a>, <a href="#robo678">cl_timer_stop</a>, <a href="#robo679">cl_timer_trim</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo678">[Functions]<a name="Component20Library3a20Timer2fcl5ftimer5fstop">\r
+Component Library: Timer/cl_timer_stop</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_timer_stop</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_timer_stop</strong> function stops a pending timer from expiring.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT void CL_API\r
+<strong>cl_timer_stop</strong>(\r
+ IN cl_timer_t* const p_timer );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_timer\r
+ [in] Pointer to a cl_timer_t structure.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> This function does not return a value.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo35">Timer</a>, <a href="#robo677">cl_timer_start</a>, <a href="#robo679">cl_timer_trim</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo679">[Functions]<a name="Component20Library3a20Timer2fcl5ftimer5ftrim">\r
+Component Library: Timer/cl_timer_trim</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_timer_trim</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_timer_trim</strong> function pulls in the absolute expiration\r
+ time of a timer if the current expiration time exceeds the specified\r
+ interval.\r
+\r
+ sets a timer to expire after a given\r
+ interval if that interval is less than the current timer expiration.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT <a href="./cl_types_h.html#robo304">cl_status_t</a> CL_API\r
+<strong>cl_timer_trim</strong>(\r
+ IN cl_timer_t* const p_timer,\r
+ IN const uint32_t time_ms );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_timer\r
+ [in] Pointer to a cl_timer_t structure to schedule.\r
+\r
+ time_ms\r
+ [in] Maximum time, in milliseconds, before the timer should expire.\r
+\r
+ RETURN VALUES\r
+ CL_SUCCESS if the timer was successfully scheduled.\r
+\r
+ CL_ERROR otherwise.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> <strong>cl_timer_trim</strong> has no effect if the time interval is greater than the\r
+ remaining time when the timer is set.\r
+\r
+ If the new interval time is less than the remaining time, <strong>cl_timer_trim</strong>\r
+ implicitly stops the timer before reseting it.\r
+\r
+ If the timer is reset, it is guaranteed to expire no sooner than the\r
+ new interval, but may take longer to expire.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo35">Timer</a>, <a href="#robo677">cl_timer_start</a>, <a href="#robo678">cl_timer_stop</a>\r
+</pre>\r
+</span>\r
+</body>\r
+</html>\r
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">\r
+<html>\r
+<head>\r
+<link rel="stylesheet" href="../robodoc.css" type="text/css">\r
+<title>./inc_doc/complib/cl_types_h.html</title>\r
+<!-- Source: ./inc/complib/cl_types.h -->\r
+<!-- Generated with ROBODoc Version 4.99.22 (Mar 6 2006) -->\r
+</head>\r
+<body bgcolor="#FFFFFF">\r
+<a name="robo_top_of_doc">Generated from ./inc/complib/cl_types.h</a> with <a href="http://sourceforge.net/projects/robodoc/">ROBODoc</a> v4.99.22 on Sun Apr 16 2006 17:39:23\r
+<br />\r
+<hr />\r
+\r
+<h2><a name="robo263">[Definitions]<a name="Component20Library2fData20Types">\r
+Component Library/Data Types</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> Data Types\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The component library provides and uses explicitly sized types.\r
+</pre>\r
+</span><p><strong>VALUES</strong></p>\r
+<span class="VALUES"><pre> char\r
+ 8-bit, defined by compiler.\r
+\r
+ void\r
+ 0-bit, defined by compiler.\r
+\r
+ int8_t\r
+ 8-bit signed integer.\r
+\r
+ uint8_t\r
+ 8-bit unsigned integer.\r
+\r
+ int16_t\r
+ 16-bit signed integer.\r
+\r
+ uint16_t\r
+ 16-bit unsigned integer.\r
+\r
+ net16_t\r
+ 16-bit network byte order value.\r
+\r
+ int32_t\r
+ 32-bit signed integer.\r
+\r
+ uint32_t\r
+ 32-bit unsigned integer.\r
+\r
+ net32_t\r
+ 32-bit network byte order value.\r
+\r
+ int64_t\r
+ 64-bit signed integer.\r
+\r
+ uint64_t\r
+ 64-bit unsigned integer.\r
+\r
+ net64_t\r
+ 64-bit network byte order value.\r
+\r
+ intn_t\r
+ Signed natural sized integer. 32-bit on a 32-bit platform, 64-bit on\r
+ a 64-bit platform.\r
+\r
+ uintn_t\r
+ Unsigned natural sized integer. 32-bit on a 32-bit platform, 64-bit on\r
+ a 64-bit platform.\r
+\r
+ boolean_t\r
+ integral sized. Set to TRUE or FALSE and used in logical expressions.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> Pointer types are not defined as these provide no value and can potentially\r
+ lead to naming confusion.\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo264">[Definitions]<a name="Component20Library2fObject20States">\r
+Component Library/Object States</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <a href="./cl_obj_h.html#robo18">Object</a> States\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The object states enumerated type defines the valid states of components.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef enum _cl_state\r
+{\r
+ CL_UNINITIALIZED = 1,\r
+ CL_INITIALIZED,\r
+ CL_DESTROYING,\r
+ CL_DESTROYED\r
+\r
+} cl_state_t;\r
+</pre>\r
+</span><p><strong>VALUES</strong></p>\r
+<span class="VALUES"><pre> CL_UNINITIALIZED\r
+ Indicates that initialization was not invoked successfully.\r
+\r
+ CL_INITIALIZED\r
+ Indicates initialization was successful.\r
+\r
+ CL_DESTROYING\r
+ Indicates that the object is undergoing destruction.\r
+\r
+ CL_DESTROYED\r
+ Indicates that the object's destructor has already been called. Most\r
+ objects set their final state to CL_DESTROYED before freeing the\r
+ memory associated with the object.\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo265">[Definitions]<a name="Component20Library2fParameter20Keywords">\r
+Component Library/Parameter Keywords</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> Parameter Keywords\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The Parameter Keywords can be used to clarify the usage of function\r
+ parameters to users.\r
+</pre>\r
+</span><p><strong>VALUES</strong></p>\r
+<span class="VALUES"><pre> IN\r
+ Designates that the parameter is used as input to a function.\r
+\r
+ OUT\r
+ Designates that the parameter's value will be set by the function.\r
+\r
+ OPTIONAL\r
+ Designates that the parameter is optional, and may be NULL.\r
+ The OPTIONAL keyword, if used, follows the parameter name.\r
+</pre>\r
+</span><p><strong>EXAMPLE</strong></p>\r
+<span class="EXAMPLE"><pre> // Function declaration.\r
+ void*\r
+ my_func(\r
+ IN void* const p_param1,\r
+ OUT void** const p_handle OPTIONAL );\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> Multiple keywords can apply to a single parameter. The IN and OUT\r
+ keywords precede the parameter type. The OPTIONAL\r
+ keyword, if used, follows the parameter name.\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo303">[Definitions]<a name="Component20Library3a20Data20Types2fCL5fSTATUS5fMSG">\r
+Component Library: Data Types/CL_STATUS_MSG</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>CL_STATUS_MSG</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>CL_STATUS_MSG</strong> macro returns a textual representation of\r
+ an <a href="#robo304">cl_status_t</a> code.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>* const char*\r
+* <strong>CL_STATUS_MSG</strong>(\r
+* IN <a href="#robo304">cl_status_t</a> errcode );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> errcode\r
+ [in] <a href="#robo304">cl_status_t</a> code for which to return a text representation.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> Pointer to a string containing a textual representation of the errcode\r
+ parameter.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This function performs boundary checking on the <a href="#robo304">cl_status_t</a> value,\r
+ masking off the upper 24-bits. If the value is out of bounds, the string\r
+ "invalid status code" is returned.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo304">cl_status_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo304">[Definitions]<a name="Component20Library3a20Data20Types2fcl5fstatus5ft">\r
+Component Library: Data Types/cl_status_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_status_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_status_t</strong> return types are used by the component library to\r
+ provide detailed function return values.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef enum _cl_status\r
+{\r
+ CL_SUCCESS = 0,\r
+ CL_ERROR,\r
+ CL_INVALID_STATE,\r
+ CL_INVALID_OPERATION,\r
+ CL_INVALID_SETTING,\r
+ CL_INVALID_PARAMETER,\r
+ CL_INSUFFICIENT_RESOURCES,\r
+ CL_INSUFFICIENT_MEMORY,\r
+ CL_INVALID_PERMISSION,\r
+ CL_COMPLETED,\r
+ CL_NOT_DONE,\r
+ CL_PENDING,\r
+ CL_TIMEOUT,\r
+ CL_CANCELED,\r
+ CL_REJECT,\r
+ CL_OVERRUN,\r
+ CL_NOT_FOUND,\r
+ CL_UNAVAILABLE,\r
+ CL_BUSY,\r
+ CL_DISCONNECT,\r
+ CL_DUPLICATE,\r
+ CL_INVALID_REQUEST,\r
+\r
+ CL_STATUS_COUNT /* should be the last value */\r
+\r
+} <strong>cl_status_t</strong>;\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Data Types, <a href="#robo303">CL_STATUS_MSG</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo315">[Functions]<a name="Component20Library3a20Error20Trapping2fcl5fpanic">\r
+Component Library: Error Trapping/cl_panic</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_panic</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Halts execution of the current process. Halts the system if called in\r
+ from the kernel.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT void CL_API\r
+<strong>cl_panic</strong>(\r
+ IN const char* const message,\r
+ IN ... );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> message\r
+ [in] ANSI string formatted identically as for a call to the standard C\r
+ function printf describing the cause for the panic.\r
+\r
+ ...\r
+ [in] Extra parameters for string formatting, as defined for the\r
+ standard C function printf.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> This function does not return.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> The formatting of the message string is the same as for printf\r
+\r
+ <strong>cl_panic</strong> sends the message to the current message logging target.\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo441">[Definitions]<a name="Component20Library3a20Object20States2fcl5fis5fstate5fvalid">\r
+Component Library: Object States/cl_is_state_valid</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_is_state_valid</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_is_state_valid</strong> function returns whether a state has a valid value.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_INLINE boolean_t CL_API\r
+<strong>cl_is_state_valid</strong>(\r
+ IN const cl_state_t state )\r
+{\r
+ return( (state == CL_UNINITIALIZED) || (state == CL_INITIALIZED) ||\r
+ (state == CL_DESTROYING) || (state == CL_DESTROYED) );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> state\r
+ State whose value to validate.\r
+\r
+ RETURN VALUES\r
+ TRUE if the specified state has a valid value.\r
+\r
+ FALSE otherwise.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This function is used in debug builds to check for valid states. If an\r
+ uninitialized object is passed, the memory for the state may cause the\r
+ state to have an invalid value.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="./cl_obj_h.html#robo18">Object</a> States\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo507">[Definitions]<a name="Component20Library3a20Pointer20Manipulation2foffsetof">\r
+Component Library: Pointer Manipulation/offsetof</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>offsetof</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>offsetof</strong> macro returns the offset of a member within a structure.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>* uintn_t\r
+* <strong>offsetof</strong>(\r
+* IN TYPE,\r
+* IN MEMBER );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> TYPE\r
+ [in] Name of the structure containing the specified member.\r
+\r
+ MEMBER\r
+ [in] Name of the member whose offset in the specified structure\r
+ is to be returned.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> Number of bytes from the beginning of the structure to the\r
+ specified member.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo508">PARENT_STRUCT</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo508">[Definitions]<a name="Component20Library3a20Pointer20Manipulation2fPARENT5fSTRUCT">\r
+Component Library: Pointer Manipulation/PARENT_STRUCT</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>PARENT_STRUCT</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>PARENT_STRUCT</strong> macro returns a pointer to a structure\r
+ given a name and pointer to one of its members.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>* PARENT_TYPE*\r
+* <strong>PARENT_STRUCT</strong>(\r
+* IN void* const p_member,\r
+* IN PARENT_TYPE,\r
+* IN MEMBER_NAME );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_member\r
+ [in] Pointer to the MEMBER_NAME member of a PARENT_TYPE structure.\r
+\r
+ PARENT_TYPE\r
+ [in] Name of the structure containing the specified member.\r
+\r
+ MEMBER_NAME\r
+ [in] Name of the member whose address is passed in the p_member\r
+ parameter.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> Pointer to a structure of type PARENT_TYPE whose MEMBER_NAME member is\r
+ located at p_member.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo507">offsetof</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo680">[Definitions]<a name="Component20Library3a20Unreferenced20Parameters2fUNUSED5fPARAM">\r
+Component Library: Unreferenced Parameters/UNUSED_PARAM</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>UNUSED_PARAM</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>UNUSED_PARAM</strong> macro can be used to eliminates compiler warnings related\r
+ to intentionally unused formal parameters in function implementations.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>* <strong>UNUSED_PARAM</strong>( P )\r
+</pre>\r
+</span><p><strong>EXAMPLE</strong></p>\r
+<span class="EXAMPLE"><pre> void my_func( int32_t value )\r
+ {\r
+ <strong>UNUSED_PARAM</strong>( value );\r
+ }\r
+</pre>\r
+</span>\r
+</body>\r
+</html>\r
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">\r
+<html>\r
+<head>\r
+<link rel="stylesheet" href="../robodoc.css" type="text/css">\r
+<title>./inc_doc/complib/cl_vector_h.html</title>\r
+<!-- Source: ./inc/complib/cl_vector.h -->\r
+<!-- Generated with ROBODoc Version 4.99.22 (Mar 6 2006) -->\r
+</head>\r
+<body bgcolor="#FFFFFF">\r
+<a name="robo_top_of_doc">Generated from ./inc/complib/cl_vector.h</a> with <a href="http://sourceforge.net/projects/robodoc/">ROBODoc</a> v4.99.22 on Sun Apr 16 2006 17:39:23\r
+<br />\r
+<hr />\r
+\r
+<h2><a name="robo36">[Modules]<a name="Component20Library2fVector">\r
+Component Library/Vector</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_modules.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>Vector</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>Vector</strong> is a self-sizing array. Like a traditonal array, a vector\r
+ allows efficient constant time access to elements with a specified index.\r
+ A vector grows transparently as the user adds elements to the array.\r
+\r
+ As the vector grows in size, it does not relocate existing elements in\r
+ memory. This allows using pointers to elements stored in a <strong>Vector</strong>.\r
+\r
+ Users can supply an initializer functions that allow a vector to ensure\r
+ that new items added to the vector are properly initialized. A vector\r
+ calls the initializer function on a per object basis when growing the\r
+ array. The initializer is optional.\r
+\r
+ The initializer function can fail, and returns a <a href="./cl_types_h.html#robo304">cl_status_t</a>. The vector\r
+ will call the destructor function, if provided, for an element that\r
+ failed initialization. If an initializer fails, a vector does not call\r
+ the initializer for objects in the remainder of the new memory allocation.\r
+\r
+ The <a href="#robo700">cl_vector_t</a> structure should be treated as opaque and should be\r
+ manipulated only through the provided functions.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Structures:\r
+ <a href="#robo700">cl_vector_t</a>\r
+\r
+ Callbacks:\r
+ <a href="#robo684">cl_pfn_vec_init_t</a>, <a href="#robo682">cl_pfn_vec_dtor_t</a>, <a href="#robo681">cl_pfn_vec_apply_t</a>,\r
+ <a href="#robo683">cl_pfn_vec_find_t</a>\r
+\r
+ Item Manipulation:\r
+ cl_vector_set_obj, cl_vector_obj\r
+\r
+ Initialization:\r
+ <a href="#robo687">cl_vector_construct</a>, <a href="#robo695">cl_vector_init</a>, <a href="#robo688">cl_vector_destroy</a>\r
+\r
+ Manipulation:\r
+ <a href="#robo692">cl_vector_get_capacity</a>, <a href="#robo697">cl_vector_set_capacity</a>,\r
+ <a href="#robo694">cl_vector_get_size</a>, <a href="#robo699">cl_vector_set_size</a>, <a href="#robo698">cl_vector_set_min_size</a>\r
+ <a href="#robo693">cl_vector_get_ptr</a>, <a href="#robo691">cl_vector_get</a>, <a href="#robo686">cl_vector_at</a>, <a href="#robo696">cl_vector_set</a>\r
+\r
+ Search:\r
+ <a href="#robo690">cl_vector_find_from_start</a>, <a href="#robo689">cl_vector_find_from_end</a>\r
+ <a href="#robo685">cl_vector_apply_func</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo681">[Definitions]<a name="Component20Library3a20Vector2fcl5fpfn5fvec5fapply5ft">\r
+Component Library: Vector/cl_pfn_vec_apply_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_pfn_vec_apply_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_pfn_vec_apply_t</strong> function type defines the prototype for functions\r
+ used to iterate elements in a vector.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef void\r
+(CL_API *<strong>cl_pfn_vec_apply_t</strong>)(\r
+ IN const size_t index,\r
+ IN void* const p_element,\r
+ IN void* context );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> index\r
+ [in] Index of the element.\r
+\r
+ p_element\r
+ [in] Pointer to an element at the specified index in the vector.\r
+\r
+ context\r
+ [in] Context provided in a call to <a href="#robo685">cl_vector_apply_func</a>.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> This function does not return a value.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This function type is provided as function prototype reference for\r
+ the function passed by users as a parameter to the <a href="#robo685">cl_vector_apply_func</a>\r
+ function.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo36">Vector</a>, <a href="#robo685">cl_vector_apply_func</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo682">[Definitions]<a name="Component20Library3a20Vector2fcl5fpfn5fvec5fdtor5ft">\r
+Component Library: Vector/cl_pfn_vec_dtor_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_pfn_vec_dtor_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_pfn_vec_dtor_t</strong> function type defines the prototype for functions\r
+ used as destructor for elements being deallocated from a vector.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef void\r
+(CL_API *<strong>cl_pfn_vec_dtor_t</strong>)(\r
+ IN void* const p_element,\r
+ IN void* context );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_element\r
+ [in] Pointer to an element being deallocated from a vector.\r
+\r
+ context\r
+ [in] Context provided in a call to <a href="#robo695">cl_vector_init</a>.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> This function does not return a value.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This function type is provided as function prototype reference for\r
+ the destructor function provided by users as an optional parameter to\r
+ the <a href="#robo695">cl_vector_init</a> function.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo36">Vector</a>, <a href="#robo695">cl_vector_init</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo683">[Definitions]<a name="Component20Library3a20Vector2fcl5fpfn5fvec5ffind5ft">\r
+Component Library: Vector/cl_pfn_vec_find_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_pfn_vec_find_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_pfn_vec_find_t</strong> function type defines the prototype for functions\r
+ used to find elements in a vector.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef <a href="./cl_types_h.html#robo304">cl_status_t</a>\r
+(CL_API *<strong>cl_pfn_vec_find_t</strong>)(\r
+ IN const size_t index,\r
+ IN const void* const p_element,\r
+ IN void* context );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> index\r
+ [in] Index of the element.\r
+\r
+ p_element\r
+ [in] Pointer to an element at the specified index in the vector.\r
+\r
+ context\r
+ [in] Context provided in a call to <a href="#robo690">cl_vector_find_from_start</a> or\r
+ <a href="#robo689">cl_vector_find_from_end</a>.\r
+\r
+ RETURN VALUES\r
+ Return CL_SUCCESS if the element was found. This stops vector iteration.\r
+\r
+ CL_NOT_FOUND to continue the vector iteration.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This function type is provided as function prototype reference for the\r
+ function provided by users as a parameter to the <a href="#robo690">cl_vector_find_from_start</a>\r
+ and <a href="#robo689">cl_vector_find_from_end</a> functions.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo36">Vector</a>, <a href="#robo690">cl_vector_find_from_start</a>, <a href="#robo689">cl_vector_find_from_end</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo684">[Definitions]<a name="Component20Library3a20Vector2fcl5fpfn5fvec5finit5ft">\r
+Component Library: Vector/cl_pfn_vec_init_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_pfn_vec_init_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_pfn_vec_init_t</strong> function type defines the prototype for functions\r
+ used as initializer for elements being allocated by a vector.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef <a href="./cl_types_h.html#robo304">cl_status_t</a>\r
+(CL_API *<strong>cl_pfn_vec_init_t</strong>)(\r
+ IN void* const p_element,\r
+ IN void* context );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_element\r
+ [in] Pointer to an element being added to a vector.\r
+\r
+ context\r
+ [in] Context provided in a call to <a href="#robo695">cl_vector_init</a>.\r
+\r
+ RETURN VALUES\r
+ Return CL_SUCCESS to indicate that the element was initialized successfully.\r
+\r
+ Other <a href="./cl_types_h.html#robo304">cl_status_t</a> values will be returned by the <a href="#robo695">cl_vector_init</a>,\r
+ <a href="#robo699">cl_vector_set_size</a>, and <a href="#robo698">cl_vector_set_min_size</a> functions.\r
+\r
+ In situations where the vector's size needs to grows in order to satisfy\r
+ a call to <a href="#robo696">cl_vector_set</a>, a non-successful status returned by the\r
+ initializer callback causes the growth to stop.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This function type is provided as function prototype reference for\r
+ the initializer function provided by users as an optional parameter to\r
+ the <a href="#robo695">cl_vector_init</a> function.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo36">Vector</a>, <a href="#robo695">cl_vector_init</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo685">[Functions]<a name="Component20Library3a20Vector2fcl5fvector5fapply5ffunc">\r
+Component Library: Vector/cl_vector_apply_func</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_vector_apply_func</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_vector_apply_func</strong> function invokes a specified function for every\r
+ element in a vector.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT void CL_API\r
+<strong>cl_vector_apply_func</strong>(\r
+ IN const <a href="#robo700">cl_vector_t</a>* const p_vector,\r
+ IN <a href="#robo681">cl_pfn_vec_apply_t</a> pfn_callback,\r
+ IN const void* const context );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_vector\r
+ [in] Pointer to a <a href="#robo700">cl_vector_t</a> structure whose elements to iterate.\r
+\r
+ pfn_callback\r
+ [in] Function invoked for every element in the array.\r
+ See the <a href="#robo681">cl_pfn_vec_apply_t</a> function type declaration for details\r
+ about the callback function.\r
+\r
+ context\r
+ [in] Value to pass to the callback function.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> This function does not return a value.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> <strong>cl_vector_apply_func</strong> invokes the specified function for every element\r
+ in the vector, starting from the beginning of the vector.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo36">Vector</a>, <a href="#robo690">cl_vector_find_from_start</a>, <a href="#robo689">cl_vector_find_from_end</a>,\r
+ <a href="#robo681">cl_pfn_vec_apply_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo686">[Functions]<a name="Component20Library3a20Vector2fcl5fvector5fat">\r
+Component Library: Vector/cl_vector_at</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_vector_at</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_vector_at</strong> function copies an element stored in a vector at a\r
+ specified index, performing boundary checks.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT <a href="./cl_types_h.html#robo304">cl_status_t</a> CL_API\r
+<strong>cl_vector_at</strong>(\r
+ IN const <a href="#robo700">cl_vector_t</a>* const p_vector,\r
+ IN const size_t index,\r
+ OUT void* const p_element );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_vector\r
+ [in] Pointer to a <a href="#robo700">cl_vector_t</a> structure from which to get a copy of\r
+ an element.\r
+\r
+ index\r
+ [in] Index of the element.\r
+\r
+ p_element\r
+ [out] Pointer to storage for the element. Contains a copy of the\r
+ desired element upon successful completion of the call.\r
+\r
+ RETURN VALUES\r
+ CL_SUCCESS if an element was found at the specified index.\r
+\r
+ CL_INVALID_SETTING if the index was out of range.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> <strong>cl_vector_at</strong> provides constant time access regardless of the index, and\r
+ performs boundary checking on the vector.\r
+\r
+ Upon success, the p_element parameter contains a copy of the desired element.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo36">Vector</a>, <a href="#robo691">cl_vector_get</a>, <a href="#robo693">cl_vector_get_ptr</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo687">[Functions]<a name="Component20Library3a20Vector2fcl5fvector5fconstruct">\r
+Component Library: Vector/cl_vector_construct</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_vector_construct</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_vector_construct</strong> function constructs a vector.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT void CL_API\r
+<strong>cl_vector_construct</strong>(\r
+ IN <a href="#robo700">cl_vector_t</a>* const p_vector );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_vector\r
+ [in] Pointer to a <a href="#robo700">cl_vector_t</a> structure to construct.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> This function does not return a value.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> Allows calling <a href="#robo688">cl_vector_destroy</a> without first calling <a href="#robo695">cl_vector_init</a>.\r
+\r
+ Calling <strong>cl_vector_construct</strong> is a prerequisite to calling any other\r
+ vector function except <a href="#robo695">cl_vector_init</a>.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo36">Vector</a>, <a href="#robo695">cl_vector_init</a>, <a href="#robo688">cl_vector_destroy</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo688">[Functions]<a name="Component20Library3a20Vector2fcl5fvector5fdestroy">\r
+Component Library: Vector/cl_vector_destroy</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_vector_destroy</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_vector_destroy</strong> function destroys a vector.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT void CL_API\r
+<strong>cl_vector_destroy</strong>(\r
+ IN <a href="#robo700">cl_vector_t</a>* const p_vector );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_vector\r
+ [in] Pointer to a <a href="#robo700">cl_vector_t</a> structure to destroy.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> This function does not return a value.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> <strong>cl_vector_destroy</strong> frees all memory allocated for the vector. The vector\r
+ is left initialized to a zero capacity and size.\r
+\r
+ This function should only be called after a call to <a href="#robo687">cl_vector_construct</a>\r
+ or <a href="#robo695">cl_vector_init</a>.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo36">Vector</a>, <a href="#robo687">cl_vector_construct</a>, <a href="#robo695">cl_vector_init</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo689">[Functions]<a name="Component20Library3a20Vector2fcl5fvector5ffind5ffrom5fend">\r
+Component Library: Vector/cl_vector_find_from_end</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_vector_find_from_end</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_vector_find_from_end</strong> function uses a specified function to search\r
+ for elements in a vector starting from the highest index.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT size_t CL_API\r
+<strong>cl_vector_find_from_end</strong>(\r
+ IN const <a href="#robo700">cl_vector_t</a>* const p_vector,\r
+ IN <a href="#robo683">cl_pfn_vec_find_t</a> pfn_callback,\r
+ IN const void* const context );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_vector\r
+ [in] Pointer to a <a href="#robo700">cl_vector_t</a> structure to inititalize.\r
+\r
+ pfn_callback\r
+ [in] Function invoked to determine if a match was found.\r
+ See the <a href="#robo683">cl_pfn_vec_find_t</a> function type declaration for details\r
+ about the callback function.\r
+\r
+ context\r
+ [in] Value to pass to the callback function.\r
+\r
+ RETURN VALUES\r
+ Index of the element, if found.\r
+\r
+ Size of the vector if the element was not found.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> <strong>cl_vector_find_from_end</strong> does not remove the found element from\r
+ the vector. The index of the element is returned when the function\r
+ provided by the pfn_callback parameter returns CL_SUCCESS.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo36">Vector</a>, <a href="#robo690">cl_vector_find_from_start</a>, <a href="#robo685">cl_vector_apply_func</a>,\r
+ <a href="#robo683">cl_pfn_vec_find_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo690">[Functions]<a name="Component20Library3a20Vector2fcl5fvector5ffind5ffrom5fstart">\r
+Component Library: Vector/cl_vector_find_from_start</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_vector_find_from_start</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_vector_find_from_start</strong> function uses a specified function to\r
+ search for elements in a vector starting from the lowest index.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT size_t CL_API\r
+<strong>cl_vector_find_from_start</strong>(\r
+ IN const <a href="#robo700">cl_vector_t</a>* const p_vector,\r
+ IN <a href="#robo683">cl_pfn_vec_find_t</a> pfn_callback,\r
+ IN const void* const context );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_vector\r
+ [in] Pointer to a <a href="#robo700">cl_vector_t</a> structure to inititalize.\r
+\r
+ pfn_callback\r
+ [in] Function invoked to determine if a match was found.\r
+ See the <a href="#robo683">cl_pfn_vec_find_t</a> function type declaration for details\r
+ about the callback function.\r
+\r
+ context\r
+ [in] Value to pass to the callback function.\r
+\r
+ RETURN VALUES\r
+ Index of the element, if found.\r
+\r
+ Size of the vector if the element was not found.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> <strong>cl_vector_find_from_start</strong> does not remove the found element from\r
+ the vector. The index of the element is returned when the function\r
+ provided by the pfn_callback parameter returns CL_SUCCESS.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo36">Vector</a>, <a href="#robo689">cl_vector_find_from_end</a>, <a href="#robo685">cl_vector_apply_func</a>, <a href="#robo683">cl_pfn_vec_find_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo691">[Functions]<a name="Component20Library3a20Vector2fcl5fvector5fget">\r
+Component Library: Vector/cl_vector_get</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_vector_get</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_vector_get</strong> function copies an element stored in a vector at a\r
+ specified index.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_INLINE void CL_API\r
+<strong>cl_vector_get</strong>(\r
+ IN const <a href="#robo700">cl_vector_t</a>* const p_vector,\r
+ IN const size_t index,\r
+ OUT void* const p_element )\r
+{\r
+ void *p_src;\r
+\r
+ CL_ASSERT( p_vector );\r
+ CL_ASSERT( p_vector->state == CL_INITIALIZED );\r
+ CL_ASSERT( p_element );\r
+\r
+ /* Get a pointer to the element. */\r
+ p_src = <a href="#robo693">cl_vector_get_ptr</a>( p_vector, index );\r
+ p_vector->pfn_copy( p_element, p_src, p_vector->element_size );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_vector\r
+ [in] Pointer to a <a href="#robo700">cl_vector_t</a> structure from which to get a copy of\r
+ an element.\r
+\r
+ index\r
+ [in] Index of the element.\r
+\r
+ p_element\r
+ [out] Pointer to storage for the element. Contains a copy of the\r
+ desired element upon successful completion of the call.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> This function does not return a value.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> <strong>cl_vector_get</strong> provides constant time access regardless of the index.\r
+\r
+ <strong>cl_vector_get</strong> does not perform boundary checking on the vector, and\r
+ callers are responsible for providing an index that is within the range\r
+ of the vector. To access elements after performing boundary checks,\r
+ use <a href="#robo686">cl_vector_at</a>.\r
+\r
+ The p_element parameter contains a copy of the desired element upon\r
+ return from this function.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo36">Vector</a>, <a href="#robo693">cl_vector_get_ptr</a>, <a href="#robo686">cl_vector_at</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo692">[Functions]<a name="Component20Library3a20Vector2fcl5fvector5fget5fcapacity">\r
+Component Library: Vector/cl_vector_get_capacity</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_vector_get_capacity</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_vector_get_capacity</strong> function returns the capacity of a vector.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_INLINE size_t CL_API\r
+<strong>cl_vector_get_capacity</strong>(\r
+ IN const <a href="#robo700">cl_vector_t</a>* const p_vector )\r
+{\r
+ CL_ASSERT( p_vector );\r
+ CL_ASSERT( p_vector->state == CL_INITIALIZED );\r
+\r
+ return( p_vector->capacity );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_vector\r
+ [in] Pointer to a <a href="#robo700">cl_vector_t</a> structure whose capacity to return.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> Capacity, in elements, of the vector.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> The capacity is the number of elements that the vector can store, and\r
+ can be greater than the number of elements stored. To get the number of\r
+ elements stored in the vector, use <a href="#robo694">cl_vector_get_size</a>.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo36">Vector</a>, <a href="#robo697">cl_vector_set_capacity</a>, <a href="#robo694">cl_vector_get_size</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo693">[Functions]<a name="Component20Library3a20Vector2fcl5fvector5fget5fptr">\r
+Component Library: Vector/cl_vector_get_ptr</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_vector_get_ptr</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_vector_get_ptr</strong> function returns a pointer to an element\r
+ stored in a vector at a specified index.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_INLINE void* CL_API\r
+<strong>cl_vector_get_ptr</strong>(\r
+ IN const <a href="#robo700">cl_vector_t</a>* const p_vector,\r
+ IN const size_t index )\r
+{\r
+ CL_ASSERT( p_vector );\r
+ CL_ASSERT( p_vector->state == CL_INITIALIZED );\r
+\r
+ return( p_vector->p_ptr_array[index] );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_vector\r
+ [in] Pointer to a <a href="#robo700">cl_vector_t</a> structure from which to get a\r
+ pointer to an element.\r
+\r
+ index\r
+ [in] Index of the element.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> Pointer to the element stored at specified index.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> <strong>cl_vector_get_ptr</strong> provides constant access times regardless of the index.\r
+\r
+ <strong>cl_vector_get_ptr</strong> does not perform boundary checking. Callers are\r
+ responsible for providing an index that is within the range of the vector.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo36">Vector</a>, <a href="#robo691">cl_vector_get</a>, <a href="#robo686">cl_vector_at</a>, <a href="#robo696">cl_vector_set</a>, <a href="#robo694">cl_vector_get_size</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo694">[Functions]<a name="Component20Library3a20Vector2fcl5fvector5fget5fsize">\r
+Component Library: Vector/cl_vector_get_size</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_vector_get_size</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_vector_get_size</strong> function returns the size of a vector.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_INLINE size_t CL_API\r
+<strong>cl_vector_get_size</strong>(\r
+ IN const <a href="#robo700">cl_vector_t</a>* const p_vector )\r
+{\r
+ CL_ASSERT( p_vector );\r
+ CL_ASSERT( p_vector->state == CL_INITIALIZED );\r
+\r
+ return( p_vector->size );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_vector\r
+ [in] Pointer to a <a href="#robo700">cl_vector_t</a> structure whose size to return.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> Size, in elements, of the vector.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo36">Vector</a>, <a href="#robo699">cl_vector_set_size</a>, <a href="#robo692">cl_vector_get_capacity</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo695">[Functions]<a name="Component20Library3a20Vector2fcl5fvector5finit">\r
+Component Library: Vector/cl_vector_init</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_vector_init</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_vector_init</strong> function initializes a vector for use.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT <a href="./cl_types_h.html#robo304">cl_status_t</a> CL_API\r
+<strong>cl_vector_init</strong>(\r
+ IN <a href="#robo700">cl_vector_t</a>* const p_vector,\r
+ IN const size_t min_size,\r
+ IN const size_t grow_size,\r
+ IN const size_t element_size,\r
+ IN <a href="#robo684">cl_pfn_vec_init_t</a> pfn_init OPTIONAL,\r
+ IN <a href="#robo682">cl_pfn_vec_dtor_t</a> pfn_dtor OPTIONAL,\r
+ IN const void* const context );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_vector\r
+ [in] Pointer to a <a href="#robo700">cl_vector_t</a> structure to inititalize.\r
+\r
+ initial_size\r
+ [in] Initial number of elements.\r
+\r
+ grow_size\r
+ [in] Number of elements to allocate when incrementally growing\r
+ the vector. A value of zero disables automatic growth.\r
+\r
+ element_size\r
+ [in] Size of each element.\r
+\r
+ pfn_init\r
+ [in] Initializer callback to invoke for every new element.\r
+ See the <a href="#robo684">cl_pfn_vec_init_t</a> function type declaration for details about\r
+ the callback function.\r
+\r
+ pfn_dtor\r
+ [in] Destructor callback to invoke for elements being deallocated.\r
+ See the <a href="#robo682">cl_pfn_vec_dtor_t</a> function type declaration for details about\r
+ the callback function.\r
+\r
+ context\r
+ [in] Value to pass to the callback functions to provide context.\r
+\r
+ RETURN VALUES\r
+ CL_SUCCESS if the vector was initialized successfully.\r
+\r
+ CL_INSUFFICIENT_MEMORY if the initialization failed.\r
+\r
+ <a href="./cl_types_h.html#robo304">cl_status_t</a> value returned by optional initializer function specified by\r
+ the pfn_init parameter.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> The constructor and initializer functions, if any, are invoked for every\r
+ new element in the array.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo36">Vector</a>, <a href="#robo687">cl_vector_construct</a>, <a href="#robo688">cl_vector_destroy</a>, <a href="#robo696">cl_vector_set</a>,\r
+ <a href="#robo691">cl_vector_get</a>, <a href="#robo693">cl_vector_get_ptr</a>, <a href="#robo686">cl_vector_at</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo696">[Functions]<a name="Component20Library3a20Vector2fcl5fvector5fset">\r
+Component Library: Vector/cl_vector_set</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_vector_set</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_vector_set</strong> function sets the element at the specified index.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT <a href="./cl_types_h.html#robo304">cl_status_t</a> CL_API\r
+<strong>cl_vector_set</strong>(\r
+ IN <a href="#robo700">cl_vector_t</a>* const p_vector,\r
+ IN const size_t index,\r
+ IN void* const p_element );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_vector\r
+ [in] Pointer to a <a href="#robo700">cl_vector_t</a> structure into which to store\r
+ an element.\r
+\r
+ index\r
+ [in] Index of the element.\r
+\r
+ p_element\r
+ [in] Pointer to an element to store in the vector.\r
+\r
+ RETURN VALUES\r
+ CL_SUCCESS if the element was successfully set.\r
+\r
+ CL_INSUFFICIENT_MEMORY if the vector could not be resized to accommodate\r
+ the new element.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> <strong>cl_vector_set</strong> grows the vector as needed to accommodate the new element,\r
+ unless the grow_size parameter passed into the <a href="#robo695">cl_vector_init</a> function\r
+ was zero.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo36">Vector</a>, <a href="#robo691">cl_vector_get</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo697">[Functions]<a name="Component20Library3a20Vector2fcl5fvector5fset5fcapacity">\r
+Component Library: Vector/cl_vector_set_capacity</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_vector_set_capacity</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_vector_set_capacity</strong> function reserves memory in a vector for a\r
+ specified number of elements.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT <a href="./cl_types_h.html#robo304">cl_status_t</a> CL_API\r
+<strong>cl_vector_set_capacity</strong>(\r
+ IN <a href="#robo700">cl_vector_t</a>* const p_vector,\r
+ IN const size_t new_capacity );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_vector\r
+ [in] Pointer to a <a href="#robo700">cl_vector_t</a> structure whose capacity to set.\r
+\r
+ new_capacity\r
+ [in] Total number of elements for which the vector should\r
+ allocate memory.\r
+\r
+ RETURN VALUES\r
+ CL_SUCCESS if the capacity was successfully set.\r
+\r
+ CL_INSUFFICIENT_MEMORY if there was not enough memory to satisfy the\r
+ operation. The vector is left unchanged.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> <strong>cl_vector_set_capacity</strong> increases the capacity of the vector. It does\r
+ not change the size of the vector. If the requested capacity is less\r
+ than the current capacity, the vector is left unchanged.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo36">Vector</a>, <a href="#robo692">cl_vector_get_capacity</a>, <a href="#robo699">cl_vector_set_size</a>,\r
+ <a href="#robo698">cl_vector_set_min_size</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo698">[Functions]<a name="Component20Library3a20Vector2fcl5fvector5fset5fmin5fsize">\r
+Component Library: Vector/cl_vector_set_min_size</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_vector_set_min_size</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_vector_set_min_size</strong> function resizes a vector to a specified size\r
+ if the vector is smaller than the specified size.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT <a href="./cl_types_h.html#robo304">cl_status_t</a> CL_API\r
+<strong>cl_vector_set_min_size</strong>(\r
+ IN <a href="#robo700">cl_vector_t</a>* const p_vector,\r
+ IN const size_t min_size );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_vector\r
+ [in] Pointer to a <a href="#robo700">cl_vector_t</a> structure whose minimum size to set.\r
+\r
+ min_size\r
+ [in] Minimum number of elements that the vector should contain.\r
+\r
+ RETURN VALUES\r
+ CL_SUCCESS if the vector size is greater than or equal to min_size. This\r
+ could indicate that the vector's capacity was increased to min_size or\r
+ that the vector was already of sufficient size.\r
+\r
+ CL_INSUFFICIENT_MEMORY if there was not enough memory to resize the vector.\r
+ The vector is left unchanged.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> If min_size is smaller than the current size of the vector, the vector is\r
+ unchanged. The vector is unchanged if the size could not be changed due\r
+ to insufficient memory being available to perform the operation.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo36">Vector</a>, <a href="#robo694">cl_vector_get_size</a>, <a href="#robo699">cl_vector_set_size</a>, <a href="#robo697">cl_vector_set_capacity</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo699">[Functions]<a name="Component20Library3a20Vector2fcl5fvector5fset5fsize">\r
+Component Library: Vector/cl_vector_set_size</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_vector_set_size</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_vector_set_size</strong> function resizes a vector, either increasing or\r
+ decreasing its size.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT <a href="./cl_types_h.html#robo304">cl_status_t</a> CL_API\r
+<strong>cl_vector_set_size</strong>(\r
+ IN <a href="#robo700">cl_vector_t</a>* const p_vector,\r
+ IN const size_t size );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_vector\r
+ [in] Pointer to a <a href="#robo700">cl_vector_t</a> structure whose size to set.\r
+\r
+ size\r
+ [in] Number of elements desired in the vector.\r
+\r
+ RETURN VALUES\r
+ CL_SUCCESS if the size of the vector was set successfully.\r
+\r
+ CL_INSUFFICIENT_MEMORY if there was not enough memory to complete the\r
+ operation. The vector is left unchanged.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> <strong>cl_vector_set_size</strong> sets the vector to the specified size. If size is\r
+ smaller than the current size of the vector, the size is reduced.\r
+ The destructor function, if any, will be invoked for all elements that\r
+ are above size. Likewise, the constructor and initializer, if any, will\r
+ be invoked for all new elements.\r
+\r
+ This function can only fail if size is larger than the current capacity.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo36">Vector</a>, <a href="#robo694">cl_vector_get_size</a>, <a href="#robo698">cl_vector_set_min_size</a>,\r
+ <a href="#robo697">cl_vector_set_capacity</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo700">[Structures]<a name="Component20Library3a20Vector2fcl5fvector5ft">\r
+Component Library: Vector/cl_vector_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_vector_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> <a href="#robo36">Vector</a> structure.\r
+\r
+ The <strong>cl_vector_t</strong> structure should be treated as opaque and should be\r
+ manipulated only through the provided functions.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef struct _cl_vector\r
+{\r
+ size_t size;\r
+ size_t grow_size;\r
+ size_t capacity;\r
+ size_t element_size;\r
+ <a href="#robo684">cl_pfn_vec_init_t</a> pfn_init;\r
+ <a href="#robo682">cl_pfn_vec_dtor_t</a> pfn_dtor;\r
+ cl_pfn_vec_copy_t pfn_copy;\r
+ const void *context;\r
+ <a href="./cl_qlist_h.html#robo584">cl_qlist_t</a> alloc_list;\r
+ void **p_ptr_array;\r
+ cl_state_t state;\r
+\r
+} <strong>cl_vector_t</strong>;\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> size\r
+ Number of elements successfully initialized in the vector.\r
+\r
+ grow_size\r
+ Number of elements to allocate when growing.\r
+\r
+ capacity\r
+ total # of elements allocated.\r
+\r
+ element_size\r
+ Size of each element.\r
+\r
+ pfn_init\r
+ User supplied element initializer.\r
+\r
+ pfn_dtor\r
+ User supplied element destructor.\r
+\r
+ pfn_copy\r
+ Copy operator.\r
+\r
+ context\r
+ User context for callbacks.\r
+\r
+ alloc_list\r
+ <a href="./cl_list_h.html#robo15">List</a> of allocations.\r
+\r
+ p_ptr_array\r
+ Internal array of pointers to elements.\r
+\r
+ state\r
+ State of the vector.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo36">Vector</a>\r
+</pre>\r
+</span>\r
+</body>\r
+</html>\r
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">\r
+<html>\r
+<head>\r
+<link rel="stylesheet" href="../robodoc.css" type="text/css">\r
+<title>./inc_doc/complib/cl_waitobj_h.html</title>\r
+<!-- Source: ./inc/complib/cl_waitobj.h -->\r
+<!-- Generated with ROBODoc Version 4.99.22 (Mar 6 2006) -->\r
+</head>\r
+<body bgcolor="#FFFFFF">\r
+<a name="robo_top_of_doc">Generated from ./inc/complib/cl_waitobj.h</a> with <a href="http://sourceforge.net/projects/robodoc/">ROBODoc</a> v4.99.22 on Sun Apr 16 2006 17:39:23\r
+<br />\r
+<hr />\r
+\r
+<h2><a name="robo37">[Modules]<a name="Component20Library2fWait20Object">\r
+Component Library/Wait Object</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_modules.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> Wait <a href="./cl_obj_h.html#robo18">Object</a>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The Wait <a href="./cl_obj_h.html#robo18">Object</a> provides the capability for a user mode process to\r
+ create and manipulate a wait object that can also be manipulated from\r
+ kernel mode.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Structures:\r
+ <a href="#robo704">cl_waitobj_handle_t</a>\r
+\r
+ User Mode Initialization/Destruction:\r
+ <a href="#robo701">cl_waitobj_create</a>\r
+ <a href="#robo703">cl_waitobj_destroy</a>\r
+\r
+ Kernel Mode Access:\r
+ <a href="#robo705">cl_waitobj_ref</a>\r
+ <a href="#robo702">cl_waitobj_deref</a>\r
+\r
+ Manipulation:\r
+ <a href="#robo707">cl_waitobj_signal</a>\r
+ <a href="#robo706">cl_waitobj_reset</a>\r
+ <a href="#robo708">cl_waitobj_wait_on</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo701">[Functions]<a name="Component20Library3a20Wait20Object2fcl5fwaitobj5fcreate">\r
+Component Library: Wait Object/cl_waitobj_create</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_waitobj_create</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_waitobj_create</strong> function creates a wait object.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT <a href="./cl_types_h.html#robo304">cl_status_t</a> CL_API\r
+<strong>cl_waitobj_create</strong>(\r
+ IN const boolean_t manual_reset, \r
+ OUT <a href="#robo704">cl_waitobj_handle_t</a>* const ph_wait_obj );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> manual_reset\r
+ [in] If FALSE, indicates that the event resets itself after releasing \r
+ a single waiter. If TRUE, the event remains in the signalled state \r
+ until explicitly reset by a call to <a href="./cl_event_h.html#robo319">cl_event_reset</a>.\r
+\r
+ ph_wait_obj\r
+ [out] Pointer to a wait object handle set upon successful creation.\r
+\r
+ RETURN VALUES\r
+ CL_SUCCESS if the wait object was created successfully.\r
+\r
+ CL_ERROR if the wait object creation failed.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This function is only available in user mode.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Wait <a href="./cl_obj_h.html#robo18">Object</a>, <a href="#robo704">cl_waitobj_handle_t</a>, <a href="#robo703">cl_waitobj_destroy</a>, \r
+ <a href="#robo707">cl_waitobj_signal</a>, <a href="#robo706">cl_waitobj_reset</a>, <a href="#robo708">cl_waitobj_wait_on</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo702">[Functions]<a name="Component20Library3a20Wait20Object2fcl5fwaitobj5fderef">\r
+Component Library: Wait Object/cl_waitobj_deref</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_waitobj_deref</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_waitobj_deref</strong> function release a reference on a kernel mode \r
+ wait object handle and allows the wait object to be destroyed.\r
+ \r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT void CL_API\r
+<strong>cl_waitobj_deref</strong>(\r
+ IN <a href="#robo704">cl_waitobj_handle_t</a> h_kernel_wait_obj );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_kernel_wait_obj\r
+ [in] A wait object handle returned by a previous call to <a href="#robo705">cl_waitobj_ref</a>. \r
+\r
+ RETURN VALUES\r
+ This function does not return a value.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This function is only available in kernel mode.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Wait <a href="./cl_obj_h.html#robo18">Object</a>, <a href="#robo704">cl_waitobj_handle_t</a>, <a href="#robo705">cl_waitobj_ref</a>, \r
+ <a href="#robo707">cl_waitobj_signal</a>, <a href="#robo706">cl_waitobj_reset</a>, <a href="#robo708">cl_waitobj_wait_on</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo703">[Functions]<a name="Component20Library3a20Wait20Object2fcl5fwaitobj5fdestroy">\r
+Component Library: Wait Object/cl_waitobj_destroy</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_waitobj_destroy</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_waitobj_destroy</strong> function destroys a wait object.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT <a href="./cl_types_h.html#robo304">cl_status_t</a> CL_API\r
+<strong>cl_waitobj_destroy</strong>(\r
+ IN <a href="#robo704">cl_waitobj_handle_t</a> h_wait_obj );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_wait_obj\r
+ [in] A handle to the wait object to destroy, obtained by a pervious\r
+ call to <a href="#robo701">cl_waitobj_create</a>.\r
+\r
+ RETURN VALUES\r
+ CL_SUCCESS if the wait object handle is destroyed.\r
+\r
+ CL_INVALID_PARAMETER if the wait object handle is invalid.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This function is only available in user mode.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Wait <a href="./cl_obj_h.html#robo18">Object</a>, <a href="#robo704">cl_waitobj_handle_t</a>, <a href="#robo701">cl_waitobj_create</a>, \r
+ <a href="#robo707">cl_waitobj_signal</a>, <a href="#robo706">cl_waitobj_reset</a>, <a href="#robo708">cl_waitobj_wait_on</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo704">[Definitions]<a name="Component20Library3a20Wait20Object2fcl5fwaitobj5fhandle5ft">\r
+Component Library: Wait Object/cl_waitobj_handle_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_waitobj_handle_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Defines the handle for an OS wait object.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> The wait object handle should be treated as opaque and is defined\r
+ differently depending on the target environment.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Wait <a href="./cl_obj_h.html#robo18">Object</a>, <a href="#robo701">cl_waitobj_create</a>, <a href="#robo703">cl_waitobj_destroy</a>,\r
+ <a href="#robo705">cl_waitobj_ref</a>, <a href="#robo702">cl_waitobj_deref</a>, <a href="#robo707">cl_waitobj_signal</a>,\r
+ <a href="#robo706">cl_waitobj_reset</a>, <a href="#robo708">cl_waitobj_wait_on</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo705">[Functions]<a name="Component20Library3a20Wait20Object2fcl5fwaitobj5fref">\r
+Component Library: Wait Object/cl_waitobj_ref</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_waitobj_ref</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_waitobj_ref</strong> function validates a user mode wait object handle \r
+ and returns a kernel mode wait object handle. A reference is taken\r
+ on the object to prevent its destruction even if the user mode \r
+ application destroys it.\r
+ \r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT <a href="#robo704">cl_waitobj_handle_t</a> CL_API\r
+<strong>cl_waitobj_ref</strong>(\r
+ IN void *h_user_wait_obj );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_user_wait_obj\r
+ [in] A wait object handle passed from user mode. \r
+\r
+ RETURN VALUES\r
+ Returns a kernel wait object handle upon success. The returned handle \r
+ should only be used as parameters to kernel mode calls.\r
+\r
+ Returns NULL in case of failure.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This function is only available in kernel mode.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Wait <a href="./cl_obj_h.html#robo18">Object</a>, <a href="#robo704">cl_waitobj_handle_t</a>, <a href="#robo702">cl_waitobj_deref</a>,\r
+ <a href="#robo707">cl_waitobj_signal</a>, <a href="#robo706">cl_waitobj_reset</a>, <a href="#robo708">cl_waitobj_wait_on</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo706">[Functions]<a name="Component20Library3a20Wait20Object2fcl5fwaitobj5freset">\r
+Component Library: Wait Object/cl_waitobj_reset</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_waitobj_reset</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_waitobj_reset</strong> function sets an wait object to the non-signalled state.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT <a href="./cl_types_h.html#robo304">cl_status_t</a> CL_API\r
+<strong>cl_waitobj_reset</strong>(\r
+ IN <a href="#robo704">cl_waitobj_handle_t</a> h_wait_obj );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_wait_obj\r
+ [in] A handle to the wait object that needs to reset.\r
+\r
+ RETURN VALUES\r
+ CL_SUCCESS if the wait object was successfully reset.\r
+\r
+ CL_ERROR otherwise.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> In kernel mode, a pointer to a cl_event_t can safely be used instead of\r
+ a wait object handle.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Wait <a href="./cl_obj_h.html#robo18">Object</a>, <a href="#robo701">cl_waitobj_create</a>, <a href="#robo703">cl_waitobj_destroy</a>,\r
+ <a href="#robo705">cl_waitobj_ref</a>, <a href="#robo702">cl_waitobj_deref</a>,\r
+ <a href="#robo707">cl_waitobj_signal</a>, <a href="#robo708">cl_waitobj_wait_on</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo707">[Functions]<a name="Component20Library3a20Wait20Object2fcl5fwaitobj5fsignal">\r
+Component Library: Wait Object/cl_waitobj_signal</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_waitobj_signal</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_waitobj_signal</strong> function sets a wait object to the signalled \r
+ state and releases one or more waiting threads.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT <a href="./cl_types_h.html#robo304">cl_status_t</a> CL_API\r
+<strong>cl_waitobj_signal</strong>(\r
+ IN <a href="#robo704">cl_waitobj_handle_t</a> h_wait_obj );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_wait_obj\r
+ [in] A handle to the wait object that needs to be signaled.\r
+ \r
+ RETURN VALUES\r
+ CL_SUCCESS if the event was successfully signalled.\r
+\r
+ CL_ERROR otherwise.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> For auto-reset wait objects, the wait object is reset automatically once \r
+ a wait operation is satisfied. \r
+\r
+ Triggering the wait object multiple times does not guarantee that the same \r
+ number of wait operations are satisfied. This is because wait objects are \r
+ either in a signalled on non-signalled state, and triggering a wait object \r
+ that is already in the signalled state has no effect.\r
+\r
+ In kernel mode, a pointer to a cl_event_t can safely be used instead of\r
+ a wait object handle.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Wait <a href="./cl_obj_h.html#robo18">Object</a>, <a href="#robo701">cl_waitobj_create</a>, <a href="#robo703">cl_waitobj_destroy</a>,\r
+ <a href="#robo705">cl_waitobj_ref</a>, <a href="#robo702">cl_waitobj_deref</a>,\r
+ <a href="#robo706">cl_waitobj_reset</a>, <a href="#robo708">cl_waitobj_wait_on</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo708">[Functions]<a name="Component20Library3a20Wait20Object2fcl5fwaitobj5fwait5fon">\r
+Component Library: Wait Object/cl_waitobj_wait_on</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_waitobj_wait_on</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>cl_waitobj_wait_on</strong> function waits for the specified wait object to be \r
+ triggered for a minimum amount of time.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT <a href="./cl_types_h.html#robo304">cl_status_t</a> CL_API\r
+<strong>cl_waitobj_wait_on</strong>(\r
+ IN <a href="#robo704">cl_waitobj_handle_t</a> h_wait_obj,\r
+ IN const uint32_t wait_us,\r
+ IN const boolean_t interruptible );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_wait_obj\r
+ [in] A handle to the wait object on which to wait.\r
+\r
+ wait_us \r
+ [in] Number of microseconds to wait.\r
+\r
+ interruptible\r
+ [in] Indicates whether the wait operation can be interrupted\r
+ by external signals.\r
+\r
+ RETURN VALUES\r
+ CL_SUCCESS if the wait operation succeeded in response to the wait object \r
+ being set.\r
+\r
+ CL_TIMEOUT if the specified time period elapses.\r
+\r
+ CL_NOT_DONE if the wait was interrupted by an external signal.\r
+\r
+ CL_ERROR if the wait operation failed.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> If wait_us is set to EVENT_NO_TIMEOUT, the function will wait until the \r
+ wait object is triggered and never timeout.\r
+\r
+ If the timeout value is zero, this function simply tests the state of \r
+ the wait object.\r
+\r
+ If the wait object is already in the signalled state at the time of the call\r
+ to <strong>cl_waitobj_wait_on</strong>, the call completes immediately with CL_SUCCESS.\r
+\r
+ In kernel mode, a pointer to a cl_event_t can safely be used instead of\r
+ a wait object handle.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Wait <a href="./cl_obj_h.html#robo18">Object</a>, <a href="#robo701">cl_waitobj_create</a>, <a href="#robo703">cl_waitobj_destroy</a>,\r
+ <a href="#robo705">cl_waitobj_ref</a>, <a href="#robo702">cl_waitobj_deref</a>, \r
+ <a href="#robo707">cl_waitobj_signal</a>, <a href="#robo706">cl_waitobj_reset</a>\r
+</pre>\r
+</span>\r
+</body>\r
+</html>\r
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">\r
+<html>\r
+<head>\r
+<link rel="stylesheet" href="../robodoc.css" type="text/css">\r
+<title>./inc_doc/complib/comp_lib_h.html</title>\r
+<!-- Source: ./inc/complib/comp_lib.h -->\r
+<!-- Generated with ROBODoc Version 4.99.22 (Mar 6 2006) -->\r
+</head>\r
+<body bgcolor="#FFFFFF">\r
+<a name="robo_top_of_doc">Generated from ./inc/complib/comp_lib.h</a> with <a href="http://sourceforge.net/projects/robodoc/">ROBODoc</a> v4.99.22 on Sun Apr 16 2006 17:39:23\r
+<br />\r
+<hr />\r
+\r
+<h2><a name="robo19">[Modules]<a name="Component20Library2fOverview">\r
+Component Library/Overview</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_modules.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>Overview</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The component library is a collection of components that can be used to\r
+ create complex projects quickly and reliably.\r
+\r
+ The component library simplifies development by eliminating the need to\r
+ re-implement existing functionality. This contributes to shorter\r
+ development cycles as well as smaller code bases, helping reduce the\r
+ number of bugs by leveraging tried and tested code.\r
+\r
+ The component library also provides the same interface in multiple\r
+ environments, such as kernel mode and user mode, allowing code to be used\r
+ in both, again reducing code duplication and development life cycles.\r
+\r
+ Components of the library all follow the same usage model, as follows:\r
+ - The constructor for all components should be called before any other\r
+ function for that component. It is acceptable to call the initializer\r
+ without first calling the constructor.\r
+\r
+ - The initializer for all components must be called successfully\r
+ before any function manipulating that component is called.\r
+\r
+ - The destructor for all components must be called if the initializer\r
+ was called.\r
+\r
+ In a debug build, the components assert that the proper sequence is\r
+ followed.\r
+</pre>\r
+</span>\r
+</body>\r
+</html>\r
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">\r
+<html>\r
+<head>\r
+<link rel="stylesheet" href="../robodoc.css" type="text/css">\r
+<title>./inc_doc/iba/ib_al_h.html</title>\r
+<!-- Source: ./inc/iba/ib_al.h -->\r
+<!-- Generated with ROBODoc Version 4.99.22 (Mar 6 2006) -->\r
+</head>\r
+<body bgcolor="#FFFFFF">\r
+<a name="robo_top_of_doc">Generated from ./inc/iba/ib_al.h</a> with <a href="http://sourceforge.net/projects/robodoc/">ROBODoc</a> v4.99.22 on Sun Apr 16 2006 17:39:23\r
+<br />\r
+<hr />\r
+\r
+<h2><a name="robo38">[Modules]<a name="IB20Access20Layer20API2fOverview">\r
+IB Access Layer API/Overview</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_modules.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> InfiniBand Access Layer\r
+</pre>\r
+</span><p><strong>COPYRIGHT</strong></p>\r
+<span class="COPYRIGHT"><pre> Copyright (c) 2003 Intel Corporation - All Rights Reserved.\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The access layer provides transport level access to an InfiniBand fabric.\r
+ It supplies a foundation upon which a channel driver may be built. The\r
+ access layer exposes the capabilities of the InfiniBand architecture and\r
+ adds support for higher-level functionality required by most users of an\r
+ InfiniBand fabric. Users define the protocols and policies used by the\r
+ access layer, and the access layer implements them under the direction\r
+ of a user.\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo44">[Definitions]<a name="Access20Layer2fATS">\r
+Access Layer/ATS</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> DAPL Address Translation Service\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> <strong>ATS</strong> service ID, service name, and IPv4 offset for DAPL-compliant\r
+ <strong>ATS</strong> service records.\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo46">[Functions]<a name="Access20Layer2fib5fadd5fsvc5fentry">\r
+Access Layer/ib_add_svc_entry</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_add_svc_entry</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Adds a new service entry to an existing I/O controller.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_EXPORT <a href="./ib_types_h.html#robo49">ib_api_status_t</a> AL_API\r
+<strong>ib_add_svc_entry</strong>(\r
+ IN const ib_ioc_handle_t h_ioc,\r
+ IN const <a href="./ib_types_h.html#robo968">ib_svc_entry_t</a>* const p_svc_entry,\r
+ OUT ib_svc_handle_t* const ph_svc );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_ioc\r
+ [in] A handle to an existing I/O controller that will support the\r
+ added service.\r
+\r
+ p_svc_entry\r
+ [in] Service entry information that will be reported as part of the\r
+ controller's service profile.\r
+\r
+ ph_svc\r
+ [out] Upon successful completion of this call, this references a handle\r
+ to the added service. This handle may be used to remove the service\r
+ entry.\r
+\r
+ RETURN VALUES\r
+ IB_SUCCESS\r
+ The service entry was successfully added.\r
+\r
+ IB_INVALID_HANDLE\r
+ The I/O controller handle was invalid.\r
+\r
+ IB_INVALID_PARAMETER\r
+ A reference to the service entry information or handle was not\r
+ provided.\r
+\r
+ IB_INSUFFICIENT_MEMORY\r
+ There was insufficient memory to register the service entry.\r
+\r
+ IB_INSUFFICIENT_RESOURCES\r
+ There were insufficient resources currently available on the I/O\r
+ controller to register the service entry.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This routine adds a new service to an I/O controller. Once added, the\r
+ service will be reported with the controller profile, provided that the\r
+ controller is registered with the local device manager.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo106">ib_create_ioc</a>, <a href="#robo240">ib_remove_svc_entry</a>, <a href="#robo226">ib_reg_ioc</a>, <a href="./ib_types_h.html#robo968">ib_svc_entry_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo47">[Definitions]<a name="Access20Layer2fib5fal5fflags5ft">\r
+Access Layer/ib_al_flags_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_al_flags_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Access layer flags used to direct the operation of various calls.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef uint32_t <strong>ib_al_flags_t</strong>;\r
+#define IB_FLAGS_SYNC 0x00000001\r
+</pre>\r
+</span><p><strong>VALUES</strong></p>\r
+<span class="VALUES"><pre> IB_FLAGS_SYNC\r
+ Indicates that the given operation should be performed synchronously.\r
+ The call will block until it completes. Callbacks will still be\r
+ invoked.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo98">ib_cm_req_t</a>, <a href="#robo95">ib_cm_rep_t</a>, <a href="#robo79">ib_cm_dreq_t</a>, <a href="#robo84">ib_cm_lap_t</a>,\r
+ <a href="#robo236">ib_reg_svc_req_t</a>, <a href="#robo154">ib_mcast_req_t</a>, <a href="#robo220">ib_query_req_t</a>, <a href="#robo254">ib_sub_req_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo48">[Functions]<a name="Access20Layer2fib5falloc5fpd">\r
+Access Layer/ib_alloc_pd</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_alloc_pd</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Allocates a protection domain on the specified channel adapter.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_EXPORT <a href="./ib_types_h.html#robo49">ib_api_status_t</a> AL_API\r
+<strong>ib_alloc_pd</strong>(\r
+ IN const ib_ca_handle_t h_ca,\r
+ IN const <a href="./ib_types_h.html#robo165">ib_pd_type_t</a> pd_type,\r
+ IN const void* const pd_context,\r
+ OUT ib_pd_handle_t* const ph_pd );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_ca\r
+ [in] A handle to an opened channel adapter.\r
+\r
+ pd_type\r
+ [in] Indicates the type of protection domain being created.\r
+\r
+ pd_context\r
+ [in] A client-specified context to associate with this allocated\r
+ protection domain. This context is returned to the user when\r
+ invoking asynchronous callbacks referencing this protection domain.\r
+\r
+ ph_pd\r
+ [out] Upon successful completion of this call, this references a\r
+ handle to the allocated protection domain.\r
+\r
+ RETURN VALUES\r
+ IB_SUCCESS\r
+ The operation was successful.\r
+\r
+ IB_INVALID_CA_HANDLE\r
+ The channel adapter handle was invalid.\r
+\r
+ IB_INVALID_PARAMETER\r
+ The supplied pd_type value is invalid or a reference to the protection\r
+ domain handle was not provided.\r
+\r
+ IB_INSUFFICIENT_MEMORY\r
+ There was insufficient memory to allocate the protection domain.\r
+\r
+ IB_INSUFFICIENT_RESOURCES\r
+ There were insufficient resources currently available on the channel\r
+ adapter to create the protection domain.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> When successful, this routine returns a handle to a newly allocated\r
+ protection domain.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo110">ib_dealloc_pd</a>, <a href="./ib_types_h.html#robo165">ib_pd_type_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo51">[Structures]<a name="Access20Layer2fib5fapr5finfo5ft">\r
+Access Layer/ib_apr_info_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_apr_info_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Infiniband-defined additional rejection information.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef struct _ib_apr_info\r
+{\r
+ uint8_t data[IB_APR_INFO_SIZE];\r
+\r
+} <strong>ib_apr_info_t</strong>;\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> ib_cm_data_sizes_t\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo52">[Structures]<a name="Access20Layer2fib5fapr5fpdata5ft">\r
+Access Layer/ib_apr_pdata_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_apr_pdata_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> User data sent as part of an alternate path response.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef union _ib_apr_pdata\r
+{\r
+ uint8_t data[IB_APR_PDATA_SIZE];\r
+\r
+} <strong>ib_apr_pdata_t</strong>;\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> ib_cm_data_sizes_t\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo54">[Structures]<a name="Access20Layer2fib5fari5ft">\r
+Access Layer/ib_ari_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_ari_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Infiniband-defined additional rejection information.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef struct _ib_ari\r
+{\r
+ uint8_t data[IB_ARI_SIZE];\r
+\r
+} <strong>ib_ari_t</strong>;\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> ib_cm_data_sizes_t\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo55">[Structures]<a name="Access20Layer2fib5fasync5fevent5frec5ft">\r
+Access Layer/ib_async_event_rec_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_async_event_rec_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Information returned when an asynchronous event occurs on an allocated\r
+ resource.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef struct _ib_async_event_rec\r
+{\r
+ <a href="./ib_types_h.html#robo1155">ib_async_event_t</a> code;\r
+ uint64_t vendor_specific;\r
+\r
+ void* __ptr64 context;\r
+ union _handle_t\r
+ {\r
+ ib_ca_handle_t h_ca;\r
+ ib_cq_handle_t h_cq;\r
+ ib_qp_handle_t h_qp;\r
+\r
+ } handle;\r
+\r
+} <strong>ib_async_event_rec_t</strong>;\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> code\r
+ A code that identifies the type of event being reported.\r
+\r
+ vendor_specific\r
+ A field containing optional vendor specific information.\r
+\r
+ context\r
+ User-defined context information associated with the resource on\r
+ which the error occurred.\r
+\r
+ handle\r
+ A handle to the resource for which this event record was generated.\r
+ This handle will match the handle returned during the creation of\r
+ resource. It is provided in case an event occurs before a client's\r
+ call to create a resource can return.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="./ib_types_h.html#robo1155">ib_async_event_t</a>, <a href="#robo178">ib_pfn_event_cb_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo58">[Functions]<a name="Access20Layer2fib5fbind5fmw">\r
+Access Layer/ib_bind_mw</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_bind_mw</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Binds a memory window to a registered memory region.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_EXPORT <a href="./ib_types_h.html#robo49">ib_api_status_t</a> AL_API\r
+<strong>ib_bind_mw</strong>(\r
+ IN const ib_mw_handle_t h_mw,\r
+ IN const ib_qp_handle_t h_qp,\r
+ IN <a href="./ib_types_h.html#robo59">ib_bind_wr_t</a>* const p_mw_bind,\r
+ OUT net32_t* const p_rkey );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_mw\r
+ [in] A handle to an existing memory window.\r
+\r
+ h_qp\r
+ [in] A handle to a queue pair that the bind request will be posted to.\r
+\r
+ p_mw_bind\r
+ [in] Describes the memory window bind request.\r
+\r
+ p_rkey\r
+ [out] The new rkey for the memory window that may be used by a remote\r
+ end-point when performing RDMA or atomic operations to this memory\r
+ region.\r
+\r
+ RETURN VALUES\r
+ IB_SUCCESS\r
+ The memory window bind operation was successfully posted.\r
+\r
+ IB_INVALID_MW_HANDLE\r
+ The memory window handle was invalid.\r
+\r
+ IB_INVALID_QP_HANDLE\r
+ The queue pair handle was invalid.\r
+\r
+ IB_INVALID_PARAMETER\r
+ A reference to the memory window bind work request or rkey was not\r
+ provided.\r
+\r
+ IB_INVALID_SERVICE_TYPE\r
+ The queue pair configuration does not support this type of service.\r
+\r
+ IB_INVALID_MR_HANDLE\r
+ The memory region handle was invalid.\r
+\r
+ IB_INVALID_RKEY\r
+ The rkey is invalid for the memory region being bound.\r
+\r
+ IB_UNSUPPORTED\r
+ The requested access rights are not supported by the channel adapter.\r
+\r
+ IB_INVALID_PERMISSION\r
+ The requested access rights are invalid.\r
+\r
+ IB_INSUFFICIENT_RESOURCES\r
+ There were insufficient resources currently available on the channel\r
+ adapter to bind the memory window.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This routine posts a request to bind a memory window to a registered\r
+ memory region. The bind operation occurs on the specified queue pair,\r
+ but the bound region is usable across all queue pairs within the same\r
+ protection domain.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo108">ib_create_mw</a>, <a href="./ib_types_h.html#robo59">ib_bind_wr_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo62">[Functions]<a name="Access20Layer2fib5fcancel5fmad">\r
+Access Layer/ib_cancel_mad</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_cancel_mad</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> This routine cancels a pending send transaction to a MAD service.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_EXPORT <a href="./ib_types_h.html#robo49">ib_api_status_t</a> AL_API\r
+<strong>ib_cancel_mad</strong>(\r
+ IN const ib_mad_svc_handle_t h_mad_svc,\r
+ IN <a href="#robo150">ib_mad_element_t</a>* const p_mad_element );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_mad_svc\r
+ [in] The MAD service to which the send operation was directed.\r
+\r
+ p_mad_element\r
+ [in] A handle to a sent MAD element.\r
+\r
+ RETURN VALUES\r
+ IB_SUCCESS\r
+ The requested MAD transaction was located and canceled.\r
+\r
+ IB_INVALID_PARAMETER\r
+ A reference to the MAD element list was not provided.\r
+\r
+ IB_NOT_FOUND\r
+ The requested transaction was not located or had already completed.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This routine cancels a pending send transaction to a MAD service. If\r
+ the request is successfully located and has not yet completed, it will\r
+ be completed with its status set to IB_CANCELED. The canceled operation\r
+ will be returned to the user through the normal MAD completion callback.\r
+ If the send transaction has already completed, this call will return\r
+ IB_NOT_FOUND.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo247">ib_send_mad</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo63">[Functions]<a name="Access20Layer2fib5fcancel5fquery">\r
+Access Layer/ib_cancel_query</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_cancel_query</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Routine used to cancel a query of the subnet administrator.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_EXPORT void AL_API\r
+<strong>ib_cancel_query</strong>(\r
+ IN const ib_al_handle_t h_al,\r
+ IN const ib_query_handle_t h_query );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_al\r
+ [in] A handle to an open instance of the access layer.\r
+\r
+ h_query\r
+ [in] Query handle returned by a previous call to <a href="#robo211">ib_query</a>().\r
+\r
+ RETURN VALUES\r
+ This function does not return a value.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This routine directs the access layer to cancel a query to the subnet\r
+ administrator. The access layer will issue notify the user with the\r
+ final status of the query through the query callback specified in the\r
+ call to <a href="#robo211">ib_query</a>().\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo211">ib_query</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo64">[Structures]<a name="Access20Layer2fib5fcep5flisten5ft">\r
+Access Layer/ib_cep_listen_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_cep_listen_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Request to listen for incoming connection attempts.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef struct _ib_cep_listen\r
+{\r
+ net64_t svc_id;\r
+\r
+ net64_t port_guid;\r
+\r
+ uint8_t* __ptr64 p_cmp_buf;\r
+ uint8_t cmp_len;\r
+ uint8_t cmp_offset;\r
+\r
+} <strong>ib_cep_listen_t</strong>;\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> svc_id\r
+ The identifier of the service to register for incoming connection\r
+ requests.\r
+\r
+ port_guid\r
+ Directs the communication manager to register the listen only\r
+ with the specified port. This should be set to IB_ALL_PORTS\r
+ if the listen is not directed to a particular port.\r
+\r
+ p_cmp_buf\r
+ An optionally provided buffer that will be used to match incoming\r
+ connection requests with a registered service. Use of this buffer\r
+ permits multiple services to listen on the same service ID as long as\r
+ they provide different compare buffers. Incoming requests will\r
+ be matched against the compare buffer.\r
+\r
+ cmp_len\r
+ Specifies the size of the compare buffer in bytes. The length must\r
+ be the same for all requests using the same service ID.\r
+\r
+ cmp_offset\r
+ An offset into the user-defined data area of a connection request\r
+ which contains the start of the data that will be compared against.\r
+ The offset must be the same for all requests using the same service ID.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> Users fill out this structure when listening on a service ID with the\r
+ local communication manager. The communication manager will use the given\r
+ service ID and compare buffer to route connection requests to the\r
+ appropriate client. Users may direct listens requests on a particular\r
+ channel adapter, port, or LID.\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo65">[Functions]<a name="Access20Layer2fib5fci5fcall">\r
+Access Layer/ib_ci_call</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_ci_call</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Performs a vendor specific CA interface function call.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_EXPORT <a href="./ib_types_h.html#robo49">ib_api_status_t</a> AL_API\r
+<strong>ib_ci_call</strong>(\r
+ IN ib_ca_handle_t h_ca,\r
+ IN const void* __ptr64 * const handle_array OPTIONAL,\r
+ IN uint32_t num_handles,\r
+ IN <a href="./ib_types_h.html#robo66">ib_ci_op_t</a>* const p_ci_op );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_ca\r
+ [in] An opened instance of a channel adapter.\r
+\r
+ handle_array\r
+ [in] This parameter references an array containing handles of\r
+ existing CA resources. This array should contain all of the\r
+ handles specified in the vendor specific data provided with this\r
+ call. All handles specified through this array are validated by\r
+ the access layer as existing and belonging to the calling process.\r
+ The verbs provider driver is responsible for verifying that the\r
+ number and type of handles are correct for the requested operation.\r
+\r
+ num_handles\r
+ [in] The number of the handles in handle array. This count is\r
+ verified by the access layer.\r
+\r
+ p_ci_op\r
+ [in] A reference to the vendor specific CA interface data\r
+ structure containing the operation parameters.\r
+\r
+ RETURN VALUES\r
+ IB_SUCCESS\r
+ The operation was successful.\r
+\r
+ IB_INVALID_CA_HANDLE\r
+ The specified CA handle was invalid.\r
+\r
+ IB_INVALID_PARAMETER\r
+ A reference to the vendor specific data was not provided.\r
+\r
+ IB_INVALID_HANDLE\r
+ A handle specified in the handle array was invalid.\r
+\r
+ IB_INSUFFICIENT_MEMORY\r
+ There was insufficient memory to perform the operation.\r
+\r
+ IB_ERROR\r
+ An error occurred while processing the command. Additional\r
+ error information is provided in the p_ci_op status field.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This routine performs a vendor specific CA interface function call.\r
+ The optional p_ci_op structure provides a means to pass vendor\r
+ specific parameters and data to the verbs provider driver. If the\r
+ vendor specific data contains handles, the client should provide the\r
+ optional handle array that lists all of the handles specified in the\r
+ vendor specific data. The handles in the handle array are restricted\r
+ to the following types: ib_pd_handle_t, ib_cq_handle_t,\r
+ ib_av_handle_t, ib_qp_handle_t, ib_mr_handle_t, or ib_mw_handle_t.\r
+ The contents of the handle array are verified by the access layer and\r
+ the verbs provider driver. This call cannot be used to allocate private\r
+ handles that are passed as parameters in access layer calls.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo164">ib_open_ca</a>, <a href="#robo48">ib_alloc_pd</a>, <a href="#robo104">ib_create_av</a>, <a href="#robo105">ib_create_cq</a>,\r
+ <a href="#robo109">ib_create_qp</a>, ib_reg_mr, <a href="#robo230">ib_reg_phys</a>, <a href="#robo232">ib_reg_shared</a>,\r
+ <a href="#robo108">ib_create_mw</a>, <a href="./ib_types_h.html#robo66">ib_ci_op_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo67">[Functions]<a name="Access20Layer2fib5fclose5fal">\r
+Access Layer/ib_close_al</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_close_al</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Deregisters a channel driver with the access layer and releases all\r
+ associated resources, including queue pairs, connection requests,\r
+ and completion queues.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_EXPORT <a href="./ib_types_h.html#robo49">ib_api_status_t</a> AL_API\r
+<strong>ib_close_al</strong>(\r
+ IN const ib_al_handle_t h_al );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_al\r
+ [in] A handle to an instance of the access layer.\r
+\r
+ RETURN VALUES\r
+ IB_SUCCESS\r
+ The access layer was closed successfully.\r
+\r
+ IB_INVALID_AL_HANDLE\r
+ The access layer handle was invalid.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This call destroys an existing instance of the access layer. Since\r
+ callbacks may be outstanding against the resources managed by this\r
+ access layer instance when the destroy operation is invoked, this\r
+ call may block until all outstanding callbacks complete. This\r
+ routine may not be called from a callback invoked by the access layer.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo163">ib_open_al</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo68">[Functions]<a name="Access20Layer2fib5fclose5fca">\r
+Access Layer/ib_close_ca</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_close_ca</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Closes an opened channel adapter. Once closed, no further access to this\r
+ channel adapter is possible.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_EXPORT <a href="./ib_types_h.html#robo49">ib_api_status_t</a> AL_API\r
+<strong>ib_close_ca</strong>(\r
+ IN const ib_ca_handle_t h_ca,\r
+ IN const <a href="#robo177">ib_pfn_destroy_cb_t</a> pfn_destroy_cb OPTIONAL );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_ca\r
+ [in] A handle to an opened channel adapter.\r
+\r
+ pfn_destroy_cb\r
+ [in] A user-specified callback that is invoked after the channel\r
+ adapter has been successfully destroyed.\r
+\r
+ RETURN VALUES\r
+ IB_SUCCESS\r
+ The close request was registered.\r
+\r
+ IB_INVALID_CA_HANDLE\r
+ The channel adapter handle was invalid.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This call closes the opened channel adapter and frees all associated\r
+ resources, such as queue pairs, protection domains, and completion\r
+ queues. Since callbacks may be outstanding against the channel adapter\r
+ or one of its resources at the time the close operation is invoked, this\r
+ call operates asynchronously. The user will be notified through a callback\r
+ once the close operation completes, indicating that no additional callbacks\r
+ will be invoked for the specified channel adapter or a related resource.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo164">ib_open_ca</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo69">[Functions]<a name="Access20Layer2fib5fcm5fapr">\r
+Access Layer/ib_cm_apr</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_cm_apr</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Responds to a load alternate path request, to accept or reject the\r
+ proposed alternate path.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_EXPORT <a href="./ib_types_h.html#robo49">ib_api_status_t</a> AL_API\r
+<strong>ib_cm_apr</strong>(\r
+ IN const ib_cm_handle_t h_cm_lap,\r
+ IN const <a href="#robo71">ib_cm_apr_t</a>* const p_cm_apr );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_cm_lap\r
+ [in] A handle to a load alternate path request corresponding to the\r
+ response. This handle is provided through the <a href="#robo170">ib_pfn_cm_lap_cb_t</a>.\r
+\r
+ p_cm_apr\r
+ [in] Information describing the alternate path response. The response\r
+ will accept or reject the load request. If the request is rejected\r
+ this parameter will reference additional rejection information.\r
+\r
+ RETURN VALUES\r
+ IB_SUCCESS\r
+ The load alternate path response was sent successfully.\r
+\r
+ IB_INVALID_HANDLE\r
+ The connection manager load alternate path handle was invalid.\r
+\r
+ IB_INVALID_PARAMETER\r
+ A reference to the alternate path information was not provided.\r
+\r
+ IB_INVALID_STATE\r
+ The current connection state does not allow sending this message.\r
+\r
+ IB_INVALID_SETTING\r
+ The private data length specified in alternate path information is\r
+ invalid.\r
+\r
+ IB_INVALID_QP_HANDLE\r
+ The queue pair handle specified in the alternate path information\r
+ was invalid.\r
+\r
+ IB_INSUFFICIENT_MEMORY\r
+ There was insufficient memory to send the alternate path response.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This routine responds to a load alternate path request.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo82">ib_cm_lap</a>, <a href="#robo71">ib_cm_apr_t</a>, <a href="#robo170">ib_pfn_cm_lap_cb_t</a>, <a href="#robo167">ib_pfn_cm_apr_cb_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo70">[Structures]<a name="Access20Layer2fib5fcm5fapr5frec5ft">\r
+Access Layer/ib_cm_apr_rec_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_cm_apr_rec_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Load alternate path response information returned to the user through\r
+ a callback.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef struct _ib_cm_apr_rec\r
+{\r
+ <a href="./ib_types_h.html#robo49">ib_api_status_t</a> cm_status;\r
+ <a href="./ib_types_h.html#robo53">ib_apr_status_t</a> apr_status;\r
+\r
+ const uint8_t* __ptr64 p_info;\r
+ uint8_t info_length;\r
+\r
+ const uint8_t* __ptr64 p_apr_pdata;\r
+\r
+ ib_qp_handle_t h_qp;\r
+ const void* __ptr64 qp_context;\r
+\r
+} <strong>ib_cm_apr_rec_t</strong>;\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> cm_status\r
+ The status of the alternate path response. IB_SUCCESS indicates that\r
+ the alternate path was loaded successfully. IB_TIMEOUT indicates that\r
+ a reply was not received within the specified timeout and retry count.\r
+ Other error values indicates that the alternate path was not loaded.\r
+ if the apr_status is IB_AP_SUCCESS, the QP failed to load the path.\r
+ Other apr_status values indicate that the request was rejected for some\r
+ reason.\r
+\r
+ apr_status\r
+ The alternate path response status. This indicates additional failure\r
+ information to a load alternate path request and is defined by the\r
+ InfiniBand specification.\r
+\r
+ info_length\r
+ Length of valid data in the APR additional information buffer.\r
+\r
+ p_info\r
+ APR additional information.\r
+\r
+ p_apr_pdata\r
+ A reference to user-defined private data sent as part of the alternate\r
+ path response.\r
+\r
+ h_qp\r
+ The queue pair handle associated with the alternate path response.\r
+\r
+ qp_context\r
+ The queue pair context associated with the alternate path response.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo82">ib_cm_lap</a>, <a href="#robo167">ib_pfn_cm_apr_cb_t</a>, <a href="./ib_types_h.html#robo53">ib_apr_status_t</a>, <a href="#robo51">ib_apr_info_t</a>\r
+ <a href="#robo52">ib_apr_pdata_t</a>, <a href="./ib_types_h.html#robo210">ib_qp_type_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo71">[Structures]<a name="Access20Layer2fib5fcm5fapr5ft">\r
+Access Layer/ib_cm_apr_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_cm_apr_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Load alternate path information used to configure a queue pair with an\r
+ alternate path.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef struct _<a href="#robo69">ib_cm_apr</a>\r
+{\r
+ const uint8_t* __ptr64 p_apr_pdata;\r
+ uint8_t apr_length;\r
+\r
+ <a href="./ib_types_h.html#robo210">ib_qp_type_t</a> qp_type;\r
+\r
+ /* valid for rc, uc & rd qp_type only */\r
+ ib_qp_handle_t h_qp;\r
+\r
+ <a href="./ib_types_h.html#robo53">ib_apr_status_t</a> apr_status;\r
+ uint8_t info_length;\r
+ const <a href="#robo51">ib_apr_info_t</a>* __ptr64 p_info;\r
+\r
+} <strong>ib_cm_apr_t</strong>;\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> p_apr_pdata\r
+ Optional user-defined private data sent as part of the alternate\r
+ path response message.\r
+\r
+ apr_length\r
+ Defines the size of the user-defined private data.\r
+\r
+ qp_type\r
+ Indicates the CM service type.\r
+\r
+ h_qp\r
+ A handle to the queue pair that should receive the alternate path.\r
+\r
+ apr_status\r
+ The alternate path response status. This indicates additional failure\r
+ information to a load alternate path request and is defined by the\r
+ Infiniband specification.\r
+\r
+ info_length\r
+ Length of valid data in the APR additional information buffer.\r
+\r
+ p_info\r
+ APR additional information.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo69">ib_cm_apr</a>, <a href="#robo167">ib_pfn_cm_apr_cb_t</a>, <a href="#robo143">ib_lap_pdata_t</a>, <a href="./ib_types_h.html#robo210">ib_qp_type_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo72">[Functions]<a name="Access20Layer2fib5fcm5fcancel">\r
+Access Layer/ib_cm_cancel</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_cm_cancel</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Routine used to cancel listening for connection requests.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_EXPORT <a href="./ib_types_h.html#robo49">ib_api_status_t</a> AL_API\r
+<strong>ib_cm_cancel</strong>(\r
+ IN const ib_listen_handle_t h_cm_listen,\r
+ IN const <a href="#robo177">ib_pfn_destroy_cb_t</a> pfn_destroy_cb OPTIONAL );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_cm_listen\r
+ [in] A handle to an existing listen request.\r
+\r
+ pfn_destroy_cb\r
+ [in] A user-specified callback that is invoked after the listen\r
+ request has been successfully canceled.\r
+\r
+ RETURN VALUES\r
+ IB_SUCCESS\r
+ The cancel listen operation was initiated.\r
+\r
+ IB_INVALID_HANDLE\r
+ The connection manager handle was invalid.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This routine cancels a listen request. To avoid a race condition\r
+ canceling a request at the same time a connection callback is in\r
+ progress, the cancel operation operates asynchronously. For\r
+ additional details see <a href="#robo177">ib_pfn_destroy_cb_t</a>.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo85">ib_cm_listen</a>, <a href="#robo177">ib_pfn_destroy_cb_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo74">[Functions]<a name="Access20Layer2fib5fcm5fdrep">\r
+Access Layer/ib_cm_drep</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_cm_drep</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> This routine replies to a disconnection request and disconnects\r
+ a queue pair or end-to-end context.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_EXPORT <a href="./ib_types_h.html#robo49">ib_api_status_t</a> AL_API\r
+<strong>ib_cm_drep</strong>(\r
+ IN const ib_cm_handle_t h_cm_dreq,\r
+ IN const <a href="#robo76">ib_cm_drep_t</a>* const p_cm_drep );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_cm_dreq\r
+ [in] A handle to a disconnection request being replied to. This\r
+ handle is provided through the <a href="#robo169">ib_pfn_cm_dreq_cb_t</a> callback.\r
+\r
+ p_cm_drep\r
+ [in] Reply information used to respond to the disconnection request.\r
+\r
+ RETURN VALUES\r
+ IB_SUCCESS\r
+ The disconnect request was sent successfully.\r
+\r
+ IB_INVALID_HANDLE\r
+ The connection manager disconnect request handle was invalid.\r
+\r
+ IB_INVALID_PARAMETER\r
+ A reference to the disconnect repy information was not provided.\r
+\r
+ IB_INVALID_STATE\r
+ The current connection state does not allow sending this message.\r
+\r
+ IB_INVALID_SETTING\r
+ The private data length specified in disconnect reply information is\r
+ invalid.\r
+\r
+ IB_INSUFFICIENT_MEMORY\r
+ There was insufficient memory to send the disconnect reply.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This function will disconnect a queue pair or end-to-end context. It\r
+ results in sending a disconnection reply message to the remote end-point.\r
+ After calling this routine, data transfers on the specified queue pair or\r
+ end-to-end context will fail.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo77">ib_cm_dreq</a>, <a href="#robo169">ib_pfn_cm_dreq_cb_t</a>, <a href="#robo76">ib_cm_drep_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo75">[Structures]<a name="Access20Layer2fib5fcm5fdrep5frec5ft">\r
+Access Layer/ib_cm_drep_rec_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_cm_drep_rec_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Disconnection reply information returned to the user through their\r
+ disconnect reply callback.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef struct _ib_cm_drep_rec\r
+{\r
+ <a href="./ib_types_h.html#robo49">ib_api_status_t</a> cm_status;\r
+\r
+ const uint8_t* __ptr64 p_drep_pdata;\r
+\r
+ ib_qp_handle_t h_qp;\r
+ const void* __ptr64 qp_context;\r
+\r
+} <strong>ib_cm_drep_rec_t</strong>;\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> cm_status\r
+ The status of the disconnect request. Valid values are IB_SUCCESS\r
+ and IB_TIMEOUT. IB_TIMEOUT indicates that a reply was not received\r
+ within the specified timeout and retry count.\r
+\r
+ p_drep_pdata\r
+ A reference to user-defined private data sent as part of the\r
+ disconnect reply.\r
+\r
+ h_qp\r
+ The queue pair handle associated with the disconnect reply.\r
+\r
+ qp_context\r
+ The queue pair context associated with the disconnect reply.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo74">ib_cm_drep</a>, <a href="#robo168">ib_pfn_cm_drep_cb_t</a>, <a href="#robo123">ib_drep_pdata_t</a>, <a href="./ib_types_h.html#robo210">ib_qp_type_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo76">[Structures]<a name="Access20Layer2fib5fcm5fdrep5ft">\r
+Access Layer/ib_cm_drep_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_cm_drep_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Disconnection reply information used when tearing down a connection.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef struct _<a href="#robo74">ib_cm_drep</a>\r
+{\r
+ uint8_t* __ptr64 p_drep_pdata;\r
+ uint8_t drep_length;\r
+\r
+} <strong>ib_cm_drep_t</strong>;\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> p_drep_pdata\r
+ A reference to user-defined private data sent as part of the\r
+ disconnection reply.\r
+\r
+ drep_length\r
+ Defines the size of the user-defined private data.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo74">ib_cm_drep</a>, <a href="#robo123">ib_drep_pdata_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo77">[Functions]<a name="Access20Layer2fib5fcm5fdreq">\r
+Access Layer/ib_cm_dreq</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_cm_dreq</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> This routine disconnects a queue pair or end-to-end context.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_EXPORT <a href="./ib_types_h.html#robo49">ib_api_status_t</a> AL_API\r
+<strong>ib_cm_dreq</strong>(\r
+ IN const <a href="#robo79">ib_cm_dreq_t</a>* const p_cm_dreq );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_cm_dreq\r
+ [in] Information that describes the connection being disconnected.\r
+\r
+ RETURN VALUES\r
+ IB_SUCCESS\r
+ The disconnect request was sent successfully.\r
+\r
+ IB_INVALID_PARAMETER\r
+ A reference to the disconnect request information was not provided.\r
+\r
+ IB_INVALID_STATE\r
+ The current connection state does not allow sending this message.\r
+\r
+ IB_INVALID_SETTING\r
+ The private data length specified in disconnect request information is\r
+ invalid.\r
+\r
+ IB_INVALID_QP_HANDLE\r
+ The queue pair handle specified in the disconnect request information\r
+ was invalid.\r
+\r
+ IB_INSUFFICIENT_MEMORY\r
+ There was insufficient memory to send the disconnect request.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This function will disconnect a queue pair or end-to-end context.\r
+ It results in sending a disconnection request message to the remote\r
+ end-point. After calling this routine, data transfers on the specified\r
+ queue pair or end-to-end context will fail.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo74">ib_cm_drep</a>, <a href="#robo169">ib_pfn_cm_dreq_cb_t</a>, <a href="#robo79">ib_cm_dreq_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo78">[Structures]<a name="Access20Layer2fib5fcm5fdreq5frec5ft">\r
+Access Layer/ib_cm_dreq_rec_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_cm_dreq_rec_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Disconnection request information returned to the user through their\r
+ disconnection callback.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef struct _ib_cm_dreq_rec\r
+{\r
+ ib_cm_handle_t h_cm_dreq;\r
+\r
+ const uint8_t* __ptr64 p_dreq_pdata;\r
+\r
+ const void* __ptr64 qp_context;\r
+\r
+} <strong>ib_cm_dreq_rec_t</strong>;\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> h_cm_dreq\r
+ A handle to the disconnection request. This handle is used to reply\r
+ to the disconnection request.\r
+\r
+ p_dreq_pdata\r
+ A reference to user-defined private data sent as part of the\r
+ disconnect request.\r
+\r
+ qp_context\r
+ The queue pair context associated with the disconnect request.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo77">ib_cm_dreq</a>, <a href="#robo169">ib_pfn_cm_dreq_cb_t</a>, <a href="#robo124">ib_dreq_pdata_t</a>, <a href="./ib_types_h.html#robo210">ib_qp_type_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo79">[Structures]<a name="Access20Layer2fib5fcm5fdreq5ft">\r
+Access Layer/ib_cm_dreq_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_cm_dreq_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Disconnection request information used to tear down a connection.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef struct _<a href="#robo77">ib_cm_dreq</a>\r
+{\r
+ <a href="#robo47">ib_al_flags_t</a> flags;\r
+\r
+ uint8_t* __ptr64 p_dreq_pdata;\r
+ uint8_t dreq_length;\r
+\r
+ <a href="./ib_types_h.html#robo210">ib_qp_type_t</a> qp_type;\r
+\r
+ /* valid for rc, uc & rd qp_type only */\r
+ ib_qp_handle_t h_qp;\r
+ <a href="#robo168">ib_pfn_cm_drep_cb_t</a> pfn_cm_drep_cb;\r
+\r
+} <strong>ib_cm_dreq_t</strong>;\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> flags\r
+ Used to describe the mode of operation. Set to IB_FLAGS_SYNC to\r
+ process the called routine synchronously.\r
+\r
+ p_dreq_pdata\r
+ A reference to user-defined private data sent as part of the\r
+ disconnection request.\r
+\r
+ dreq_length\r
+ Defines the size of the user-defined private data.\r
+\r
+ qp_type\r
+ Indicates the CM service type.\r
+\r
+ h_qp\r
+ A handle to the queue pair to disconnect.\r
+\r
+ pfn_cm_drep_cb\r
+ References a user-defined callback that will be invoked when\r
+ the reply to the disconnect is received.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> Users submit this structure to disconnect a queue pair or end-to-end\r
+ context. A single disconnect call disconnects either a queue pair or\r
+ an end-to-end context, but not both.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo77">ib_cm_dreq</a>, <a href="#robo74">ib_cm_drep</a>, <a href="#robo124">ib_dreq_pdata_t</a>, <a href="#robo47">ib_al_flags_t</a>,\r
+ <a href="./ib_types_h.html#robo210">ib_qp_type_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo80">[Definitions]<a name="Access20Layer2fib5fcm5ffailover5ft">\r
+Access Layer/ib_cm_failover_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_cm_failover_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Fail over acceptance status returned as part of a connection reply.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef uint8_t <strong>ib_cm_failover_t</strong>;\r
+#define IB_FAILOVER_ACCEPT_SUCCESS 0\r
+#define IB_FAILOVER_ACCEPT_UNSUPPORTED 1\r
+#define IB_FAILOVER_ACCEPT_ERROR 2\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> These values and their use are defined the Infiniband specification.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo93">ib_cm_rep</a>, <a href="#robo95">ib_cm_rep_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo81">[Functions]<a name="Access20Layer2fib5fcm5fhandoff">\r
+Access Layer/ib_cm_handoff</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_cm_handoff</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Hands off the received REQ information to svc_id.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_EXPORT <a href="./ib_types_h.html#robo49">ib_api_status_t</a> AL_API\r
+<strong>ib_cm_handoff</strong>(\r
+ IN const ib_cm_handle_t h_cm_req,\r
+ IN const <a href="./ib_types_h.html#robo895">ib_net64_t</a> svc_id );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_cm_req\r
+ [in] A handle to the connection request being handed off.\r
+ This is the h_cm_req handle provided through the <a href="#robo174">ib_pfn_cm_req_cb_t</a>\r
+ callback.\r
+\r
+ svc_id\r
+ [in] The service id to which this connection request is handed off.\r
+\r
+ RETURN VALUES\r
+ IB_SUCCESS\r
+ The handoff was initiated.\r
+\r
+ IB_INVALID_HANDLE\r
+ The connection manager handle was invalid.\r
+\r
+ IB_INVALID_PARAMETER\r
+ A valid service id was not provided.\r
+\r
+ IB_INVALID_STATE\r
+ The current connection state does not allow this transfer.\r
+\r
+ IB_INSUFFICIENT_MEMORY\r
+ There was insufficient memory to complete the request.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This routine results in the access layer handing off the connection\r
+ to the service id as a new incoming connection.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo174">ib_pfn_cm_req_cb_t</a>, <a href="#robo92">ib_cm_rej_t</a>, <a href="#robo85">ib_cm_listen</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo82">[Functions]<a name="Access20Layer2fib5fcm5flap">\r
+Access Layer/ib_cm_lap</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_cm_lap</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Issues a load alternate path request to a specified end-point.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_EXPORT <a href="./ib_types_h.html#robo49">ib_api_status_t</a> AL_API\r
+<strong>ib_cm_lap</strong>(\r
+ IN const <a href="#robo84">ib_cm_lap_t</a>* const p_cm_lap );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_cm_lap\r
+ [in] Information describing the alternate path to load and the remote\r
+ endpoint for the connection.\r
+\r
+ RETURN VALUES\r
+ IB_SUCCESS\r
+ The load alternate path request was sent successfully.\r
+\r
+ IB_INVALID_PARAMETER\r
+ A reference to the load alternate path information was not provided.\r
+\r
+ IB_UNSUPPORTED\r
+ The passive side of the connection attempted to load an alternate path.\r
+\r
+ IB_INVALID_STATE\r
+ The current connection state does not allow sending this message.\r
+\r
+ IB_INVALID_SETTING\r
+ The load alternate path information contains one or more of the\r
+ following errors:\r
+ - The class version, queue pair type, or path is not supported by\r
+ connection manager.\r
+ - The primary path is not on the same channel adapter as the queue\r
+ pair.\r
+ - The primary and alternate paths are on different channel adapters.\r
+ - The primary and alternate paths specify different MTUs.\r
+ - The alternate path record packet lifetime is out of range.\r
+ - The alternate path record pkey is out of range.\r
+ - The specified private data length is invalid.\r
+\r
+ IB_INVALID_QP_HANDLE\r
+ The queue pair handle specified in the load alternate path information\r
+ was invalid.\r
+\r
+ IB_INSUFFICIENT_MEMORY\r
+ There was insufficient memory to send the load alternate path request.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This routine issues initiates loading an alternate path on an existing\r
+ connected queue pair or end-to-end context. If the request is successful,\r
+ the alternate path will be loaded and armed for path migration.\r
+\r
+ The p_cm_lap parameter describes the alternate path to load and indicates\r
+ the remote endpoint of an existing connection that will receive the load\r
+ request.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo69">ib_cm_apr</a>, <a href="#robo84">ib_cm_lap_t</a>, <a href="#robo170">ib_pfn_cm_lap_cb_t</a>, <a href="#robo167">ib_pfn_cm_apr_cb_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo83">[Structures]<a name="Access20Layer2fib5fcm5flap5frec5ft">\r
+Access Layer/ib_cm_lap_rec_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_cm_lap_rec_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Load alternate path request information returned to the user through\r
+ a callback.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef struct _ib_cm_lap_rec\r
+{\r
+ ib_cm_handle_t h_cm_lap;\r
+ <a href="./ib_types_h.html#robo927">ib_path_rec_t</a> alt_path;\r
+\r
+ const uint8_t* __ptr64 p_lap_pdata;\r
+\r
+ const void* __ptr64 qp_context;\r
+\r
+} <strong>ib_cm_lap_rec_t</strong>;\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> p_lap_pdata\r
+ A reference to user-defined private data sent as part of the load\r
+ alternate path request.\r
+\r
+ qp_context\r
+ The queue pair context associated with a connection request.\r
+\r
+ h_cm_lap\r
+ A handle to the load alternate path request. This handle is used\r
+ to reply to the load request.\r
+\r
+ alt_path\r
+ Requested alternate path. Users must accept or reject the path by\r
+ calling <a href="#robo69">ib_cm_apr</a>.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo82">ib_cm_lap</a>, <a href="#robo170">ib_pfn_cm_lap_cb_t</a>, <a href="#robo143">ib_lap_pdata_t</a>, <a href="./ib_types_h.html#robo210">ib_qp_type_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo84">[Structures]<a name="Access20Layer2fib5fcm5flap5ft">\r
+Access Layer/ib_cm_lap_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_cm_lap_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Load alternate path information used to configure a queue pair with an\r
+ alternate path.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef struct _<a href="#robo82">ib_cm_lap</a>\r
+{\r
+ <a href="#robo47">ib_al_flags_t</a> flags;\r
+\r
+ const uint8_t* __ptr64 p_lap_pdata;\r
+ uint8_t lap_length;\r
+\r
+ <a href="./ib_types_h.html#robo210">ib_qp_type_t</a> qp_type;\r
+\r
+ /* valid for rc, uc & rd qp_type only */\r
+ ib_qp_handle_t h_qp;\r
+\r
+ uint8_t remote_resp_timeout;\r
+ <a href="./ib_types_h.html#robo927">ib_path_rec_t</a>* __ptr64 p_alt_path;\r
+ <a href="#robo167">ib_pfn_cm_apr_cb_t</a> pfn_cm_apr_cb;\r
+\r
+} <strong>ib_cm_lap_t</strong>;\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> flags\r
+ Used to describe the mode of operation. Set to IB_FLAGS_SYNC to\r
+ process the called routine synchronously.\r
+\r
+ p_lap_pdata\r
+ Optional user-defined private data sent as part of the load alternate\r
+ path message.\r
+\r
+ lap_length\r
+ Defines the size of the user-defined private data.\r
+\r
+ qp_type\r
+ Indicates the CM service type.\r
+\r
+ h_qp\r
+ A handle to the queue pair that should receive the alternate path.\r
+\r
+ remote_resp_timeout\r
+ The time within which the remote CM should transmit a response to\r
+ the sender. This value is expressed as\r
+ 4.096 * (2 ^ local_resp_timeout) microseconds.\r
+\r
+ p_alt_path\r
+ The path record to use for the alternate connection.\r
+\r
+ pfn_cm_apr_cb\r
+ References a user-defined callback that will be invoked when the\r
+ response to the load request is received.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo82">ib_cm_lap</a>, <a href="#robo170">ib_pfn_cm_lap_cb_t</a>, <a href="#robo167">ib_pfn_cm_apr_cb_t</a>, <a href="./ib_types_h.html#robo927">ib_path_rec_t</a>,\r
+ ib_pfn_lap_pdata_t, <a href="./ib_types_h.html#robo210">ib_qp_type_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo85">[Functions]<a name="Access20Layer2fib5fcm5flisten">\r
+Access Layer/ib_cm_listen</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_cm_listen</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Issues a request to the local communication manager to listen for\r
+ incoming connection requests.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_EXPORT <a href="./ib_types_h.html#robo49">ib_api_status_t</a> AL_API\r
+<strong>ib_cm_listen</strong>(\r
+ IN const ib_al_handle_t h_al,\r
+ IN const <a href="#robo86">ib_cm_listen_t</a>* const p_cm_listen,\r
+ IN const <a href="#robo179">ib_pfn_listen_err_cb_t</a> pfn_listen_err_cb,\r
+ IN const void* const listen_context,\r
+ OUT ib_listen_handle_t* const ph_cm_listen );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_al\r
+ [in] A handle to an opened instance of the access layer.\r
+\r
+ p_cm_listen\r
+ [in] Information used to direct the listen request to match incoming\r
+ connection requests.\r
+\r
+ pfn_listen_err_cb\r
+ [in] User-specified error callback routine to invoke if an error\r
+ occurs while listening.\r
+\r
+ listen_context\r
+ User-specified context information that is returned as a part of all\r
+ connection requests through the pfn_cm_req_cb routine. The context is\r
+ also returned through the error and destroy callbacks.\r
+\r
+ ph_cm_listen\r
+ [out] Upon successful completion of this call, this references a handle\r
+ to the listen request. This handle may be used to cancel the listen\r
+ operation.\r
+\r
+ RETURN VALUES\r
+ IB_SUCCESS\r
+ The listen request was successfully registered with the connection\r
+ manager.\r
+\r
+ IB_INVALID_AL_HANDLE\r
+ The access layer handle was invalid.\r
+\r
+ IB_INVALID_PARAMETER\r
+ A reference to the listen request information, error callback function,\r
+ or listen handle was not provided.\r
+\r
+ IB_INVALID_SETTING\r
+ The class version specified in the listen request is not supported by\r
+ connection manager or the listen request is not unique.\r
+\r
+ IB_INSUFFICIENT_MEMORY\r
+ There was insufficient memory to register the listen request.\r
+\r
+ IB_INVALID_GUID\r
+ A channel adapter or port GUID is not wildcarded and no channel adapter\r
+ or port in the system was found for the specified GUID.\r
+\r
+ IB_INVALID_LID\r
+ The lid is not wildcarded and is not within the lid range for the port\r
+ specified in the listen request information.\r
+\r
+ IB_INVALID_PKEY\r
+ The pkey is not wildcarded and is not a valid pkey for the port\r
+ specified in the listen request information.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This routine directs the access layer to route connection requests\r
+ matching the specified connection parameters to the client. Clients\r
+ listen for connections matching a particular service ID, and may optionally\r
+ direct their listen request towards a specific channel adapter, port, or\r
+ LID.\r
+\r
+ If local configuration changes occur that invalidate a listen request, the\r
+ specified error callback will be invoked. Invalidated listen requests\r
+ should be canceled by the user. An example of a configuration change that\r
+ invalidates listen requests is a LID change for directed listens. The\r
+ listen error callback will be invoked within the context of a system\r
+ thread.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo86">ib_cm_listen_t</a>, <a href="#robo179">ib_pfn_listen_err_cb_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo86">[Structures]<a name="Access20Layer2fib5fcm5flisten5ft">\r
+Access Layer/ib_cm_listen_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_cm_listen_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Request to listen for incoming connection attempts.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef struct _<a href="#robo85">ib_cm_listen</a>\r
+{\r
+ <a href="./ib_types_h.html#robo895">ib_net64_t</a> svc_id;\r
+\r
+ <a href="./ib_types_h.html#robo895">ib_net64_t</a> ca_guid;\r
+ <a href="./ib_types_h.html#robo895">ib_net64_t</a> port_guid;\r
+ <a href="./ib_types_h.html#robo893">ib_net16_t</a> lid;\r
+ <a href="./ib_types_h.html#robo893">ib_net16_t</a> pkey;\r
+\r
+ uint8_t* __ptr64 p_compare_buffer;\r
+ uint8_t compare_offset;\r
+ uint8_t compare_length;\r
+\r
+ <a href="#robo174">ib_pfn_cm_req_cb_t</a> pfn_cm_req_cb;\r
+\r
+ <a href="./ib_types_h.html#robo210">ib_qp_type_t</a> qp_type;\r
+\r
+ /* valid for ud qp_type only */\r
+ const void* __ptr64 sidr_context;\r
+\r
+} <strong>ib_cm_listen_t</strong>;\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> svc_id\r
+ The identifier of the service to register for incoming connection\r
+ requests.\r
+\r
+ ca_guid\r
+ Directs the communication manager to register the listen only\r
+ with the specified channel adapter. This should be set to IB_ALL_CAS\r
+ if the listen is not directed to a particular channel adapter.\r
+\r
+ port_guid\r
+ Directs the communication manager to register the listen only\r
+ with the specified port. This should be set to IB_ALL_PORTS\r
+ if the listen is not directed to a particular port.\r
+\r
+ lid\r
+ Directs the communication manager to register the listen only\r
+ with the specified LID. This should be set to IB_ALL_LIDS\r
+ if the listen is not directed to a particular LID.\r
+\r
+ pkey\r
+ Directs the communication manager to register the listen only with\r
+ the specified pkey value. This should be set to IB_ALL_PKEYS\r
+ iv the listen is not directed to a particular partition.\r
+\r
+ p_compare_buffer\r
+ An optionally provided buffer that will be used to match incoming\r
+ connection requests with a registered service. Use of this buffer\r
+ permits multiple services to listen on the same service ID as long as\r
+ they provide different compare buffers. Incoming requests will\r
+ be matched against the compare buffer.\r
+\r
+ compare_offset\r
+ An offset into the user-defined data area of a connection request\r
+ which contains the start of the data that will be compared against.\r
+ The offset must be the same for all requests using the same service ID.\r
+\r
+ compare_length\r
+ Specifies the size of the compare buffer in bytes. The length must\r
+ be the same for all requests using the same service ID.\r
+\r
+ pfn_cm_req_cb\r
+ References a user-provided callback that will be invoked whenever a\r
+ connection request is received.\r
+\r
+ qp_type\r
+ Indicates the CM service type.\r
+\r
+ pfn_cm_mra_cb\r
+ References a user-provided callback that will be invoked when\r
+ a message received acknowledgement is received.\r
+\r
+ pfn_cm_rej_cb\r
+ References a user-provided callback that will be invoked if the\r
+ connection is rejected by the remote end-point.\r
+\r
+ sidr_context\r
+ sidr specific context for listens. This context is passed back in\r
+ the <a href="#robo174">ib_pfn_cm_req_cb_t</a> callback.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> Users fill out this structure when listening on a service ID with the\r
+ local communication manager. The communication manager will use the given\r
+ service ID and compare buffer to route connection requests to the\r
+ appropriate client. Users may direct listens requests on a particular\r
+ channel adapter, port, or LID.\r
+\r
+ Message received acknowledgement (MRA) callbacks will not be invoked\r
+ until a connection request has been replied to.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo147">ib_listen_info_t</a>, <a href="#robo174">ib_pfn_cm_req_cb_t</a>, <a href="#robo171">ib_pfn_cm_mra_cb_t</a>,\r
+ <a href="./ib_types_h.html#robo210">ib_qp_type_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo87">[Functions]<a name="Access20Layer2fib5fcm5fmra">\r
+Access Layer/ib_cm_mra</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_cm_mra</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Notifies the remote end-point of a connection or load alternate path\r
+ request that the request message has been received, but additional\r
+ processing is required.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_EXPORT <a href="./ib_types_h.html#robo49">ib_api_status_t</a> AL_API\r
+<strong>ib_cm_mra</strong>(\r
+ IN const ib_cm_handle_t h_cm,\r
+ IN const <a href="#robo89">ib_cm_mra_t</a>* const p_cm_mra );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_cm\r
+ [in] A handle to the connection request, connection reply, or load\r
+ alternate path request that should receive the message received\r
+ acknowledgement message. This is the h_cm_req, h_cm_rep, or\r
+ h_cm_lap handle provided through the <a href="#robo174">ib_pfn_cm_req_cb_t</a>,\r
+ <a href="#robo173">ib_pfn_cm_rep_cb_t</a>, or <a href="#robo170">ib_pfn_cm_lap_cb_t</a> callback, respectively.\r
+\r
+ p_cm_mra\r
+ [in] Contains the message received acknowledgement data to return to\r
+ the requesting end-point.\r
+\r
+ RETURN VALUES\r
+ IB_SUCCESS\r
+ The message receive acknowledge was sent successfully.\r
+\r
+ IB_INVALID_HANDLE\r
+ The connection manager reply handle was invalid.\r
+\r
+ IB_INVALID_PARAMETER\r
+ A reference to the message receive acknowledge information was not\r
+ provided.\r
+\r
+ IB_INVALID_STATE\r
+ The current connection state does not allow sending this message.\r
+\r
+ IB_INVALID_SETTING\r
+ The class version is not supported by connection manager or the\r
+ specified private data length is invalid.\r
+\r
+ IB_INSUFFICIENT_MEMORY\r
+ There was insufficient memory to send the message receive acknowledge.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This routine results in the access layer acknowledging a connection or\r
+ load alternate path message. It should be invoked by a client if the\r
+ client is unable to respond to a request within a specified timeout,\r
+ in order to prevent the remote end-point from timing out.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo174">ib_pfn_cm_req_cb_t</a>, <a href="#robo173">ib_pfn_cm_rep_cb_t</a>, <a href="#robo170">ib_pfn_cm_lap_cb_t</a>, <a href="#robo89">ib_cm_mra_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo88">[Structures]<a name="Access20Layer2fib5fcm5fmra5frec5ft">\r
+Access Layer/ib_cm_mra_rec_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_cm_mra_rec_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Message received acknowledgement information returned to the user through\r
+ a callback.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef struct _ib_cm_mra_rec\r
+{\r
+ const uint8_t* __ptr64 p_mra_pdata;\r
+\r
+ ib_qp_handle_t h_qp;\r
+ const void* __ptr64 qp_context;\r
+\r
+} <strong>ib_cm_mra_rec_t</strong>;\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> p_mra_pdata\r
+ A reference to user-defined private data sent as part of the MRA.\r
+\r
+ h_qp\r
+ The queue pair handle associated with a connection request.\r
+\r
+ qp_context\r
+ The queue pair context associated with a connection request.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo96">ib_cm_req</a>, <a href="#robo87">ib_cm_mra</a>, <a href="#robo171">ib_pfn_cm_mra_cb_t</a>, <a href="#robo162">ib_mra_pdata_t</a>, <a href="./ib_types_h.html#robo210">ib_qp_type_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo89">[Structures]<a name="Access20Layer2fib5fcm5fmra5ft">\r
+Access Layer/ib_cm_mra_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_cm_mra_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Connection message received acknowledgement information used to\r
+ indicate that a connection request, reply, or load alternate path\r
+ has been received.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef struct _<a href="#robo87">ib_cm_mra</a>\r
+{\r
+ uint8_t svc_timeout;\r
+\r
+ const uint8_t* __ptr64 p_mra_pdata;\r
+ uint8_t mra_length;\r
+\r
+} <strong>ib_cm_mra_t</strong>;\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> svc_timeout\r
+ Indicates the amount of time that the local service requires to\r
+ complete processing of the previously received message.\r
+\r
+ p_mra_pdata\r
+ Optional user-defined private data sent as part of the message\r
+ received acknowledgement.\r
+\r
+ mra_length\r
+ Defines the size of the user-defined private data.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo87">ib_cm_mra</a>, <a href="#robo174">ib_pfn_cm_req_cb_t</a>, <a href="#robo173">ib_pfn_cm_rep_cb_t</a>, <a href="#robo170">ib_pfn_cm_lap_cb_t</a>,\r
+ <a href="#robo162">ib_mra_pdata_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo90">[Functions]<a name="Access20Layer2fib5fcm5frej">\r
+Access Layer/ib_cm_rej</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_cm_rej</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Rejects a connection request from a remote end-point.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_EXPORT <a href="./ib_types_h.html#robo49">ib_api_status_t</a> AL_API\r
+<strong>ib_cm_rej</strong>(\r
+ IN const ib_cm_handle_t h_cm,\r
+ IN const <a href="#robo92">ib_cm_rej_t</a>* const p_cm_rej );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_cm\r
+ [in] A handle to the connection request or reply being rejected.\r
+ This is the h_cm_req or h_cm_rep handle provided through the\r
+ <a href="#robo174">ib_pfn_cm_req_cb_t</a> or <a href="#robo173">ib_pfn_cm_rep_cb_t</a> callback, respectively.\r
+\r
+ p_cm_rej\r
+ [in] Contains the connection rejection information to return to the\r
+ connecting end-point.\r
+\r
+ RETURN VALUES\r
+ IB_SUCCESS\r
+ The connection reject was initiated.\r
+\r
+ IB_INVALID_HANDLE\r
+ The connection manager handle was invalid.\r
+\r
+ IB_INVALID_PARAMETER\r
+ A reference to the reject information was not provided.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This routine results in the access layer rejecting a connection\r
+ and notifying the remote end-point.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo174">ib_pfn_cm_req_cb_t</a>, <a href="#robo173">ib_pfn_cm_rep_cb_t</a>, <a href="#robo92">ib_cm_rej_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo91">[Structures]<a name="Access20Layer2fib5fcm5frej5frec5ft">\r
+Access Layer/ib_cm_rej_rec_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_cm_rej_rec_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Connection rejection information returned to the user through their\r
+ rejection callback.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef struct _ib_cm_rej_rec\r
+{\r
+ <a href="./ib_types_h.html#robo238">ib_rej_status_t</a> rej_status;\r
+ const uint8_t* __ptr64 p_ari;\r
+ uint8_t ari_length;\r
+\r
+ const uint8_t* __ptr64 p_rej_pdata;\r
+\r
+ ib_qp_handle_t h_qp;\r
+ const void* __ptr64 qp_context;\r
+\r
+} <strong>ib_cm_rej_rec_t</strong>;\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> rej_status\r
+ The reason for the connection rejection.\r
+\r
+ p_ari\r
+ Additional rejection information. The data referenced by this field\r
+ is dependent on the rej_status and is defined by the Infiniband\r
+ specification.\r
+\r
+ ari_length\r
+ Length of valid data provided in the p_ari buffer.\r
+\r
+ p_rej_pdata\r
+ A reference to user-defined private data sent as part of the connection\r
+ request reply.\r
+\r
+ h_qp\r
+ The queue pair handle associated with a connection request.\r
+\r
+ qp_context\r
+ The queue pair context associated with a connection request.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo90">ib_cm_rej</a>, <a href="#robo172">ib_pfn_cm_rej_cb_t</a>, <a href="./ib_types_h.html#robo238">ib_rej_status_t</a>, <a href="#robo54">ib_ari_t</a>, <a href="#robo237">ib_rej_pdata_t</a>,\r
+ <a href="./ib_types_h.html#robo210">ib_qp_type_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo92">[Structures]<a name="Access20Layer2fib5fcm5frej5ft">\r
+Access Layer/ib_cm_rej_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_cm_rej_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Information used to reject a connection request.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef struct _<a href="#robo90">ib_cm_rej</a>\r
+{\r
+ <a href="./ib_types_h.html#robo238">ib_rej_status_t</a> rej_status;\r
+\r
+ <a href="#robo54">ib_ari_t</a>* __ptr64 p_ari;\r
+ uint8_t ari_length;\r
+ const uint8_t* __ptr64 p_rej_pdata;\r
+ uint8_t rej_length;\r
+\r
+} <strong>ib_cm_rej_t</strong>;\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> rej_status\r
+ The reason for the connection rejection.\r
+\r
+ p_ari\r
+ Additional rejection information. The data referenced by this field\r
+ is dependent on the rej_status and is defined by the Infiniband\r
+ specification.\r
+\r
+ ari_length\r
+ Length of valid data provided in the p_ari buffer.\r
+\r
+ p_rej_pdata\r
+ A reference to user-defined private data sent as part of the\r
+ reject message.\r
+\r
+ rej_length\r
+ Defines the size of the user-defined private data.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo90">ib_cm_rej</a>, <a href="#robo172">ib_pfn_cm_rej_cb_t</a>, <a href="./ib_types_h.html#robo238">ib_rej_status_t</a>, <a href="#robo54">ib_ari_t</a>, <a href="#robo237">ib_rej_pdata_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo93">[Functions]<a name="Access20Layer2fib5fcm5frep">\r
+Access Layer/ib_cm_rep</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_cm_rep</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Sends a reply to a connection request, indicating that the connection\r
+ has been accepted.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_EXPORT <a href="./ib_types_h.html#robo49">ib_api_status_t</a> AL_API\r
+<strong>ib_cm_rep</strong>(\r
+ IN const ib_cm_handle_t h_cm_req,\r
+ IN const <a href="#robo95">ib_cm_rep_t</a>* const p_cm_rep );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_cm_req\r
+ [in] A handle to the connection request being replied to. This handle\r
+ is provided by the access layer through the <a href="#robo174">ib_pfn_cm_req_cb_t</a>\r
+ callback.\r
+\r
+ p_cm_rep\r
+ [in] Contains reply information to return to the initiator of the\r
+ connection request.\r
+\r
+ RETURN VALUES\r
+ IB_SUCCESS\r
+ The connection reply was initiated.\r
+\r
+ IB_INVALID_HANDLE\r
+ The connection manager request handle was invalid.\r
+\r
+ IB_INVALID_PARAMETER\r
+ A reference to the reply information was not provided.\r
+\r
+ IB_INVALID_STATE\r
+ The current connection state does not allow sending this message.\r
+\r
+ IB_INVALID_SETTING\r
+ The connect reply information contains one or more of the following\r
+ errors:\r
+ - The class version, queue pair type, or path is not supported by\r
+ connection manager.\r
+ - The private data length exceeds the value allowed by the connection\r
+ class version.\r
+ - The primary path is not on the same channel adapter as the queue\r
+ pair.\r
+ - The primary and alternate paths are on different channel adapters.\r
+ - The primary and alternate paths specify different MTUs.\r
+ - A primary or alternate path record packet lifetime is out of range.\r
+ - A primary or alternate path record pkey is out of range.\r
+ - The specified private data length is invalid.\r
+\r
+ IB_INVALID_QP_HANDLE\r
+ The queue pair handle specified in the reply was invalid.\r
+\r
+ IB_INVALID_QP_STATE\r
+ The queue pair was in an invalid state to perform the operation.\r
+\r
+ IB_INSUFFICIENT_MEMORY\r
+ There was insufficient memory to send the connect reply.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This routine results in the access layer replying to a connection\r
+ request from a remote node. This call results in sending a response\r
+ to the requesting node that the request has been accepted.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo95">ib_cm_rep_t</a>, <a href="#robo174">ib_pfn_cm_req_cb_t</a>, <a href="#robo173">ib_pfn_cm_rep_cb_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo94">[Structures]<a name="Access20Layer2fib5fcm5frep5frec5ft">\r
+Access Layer/ib_cm_rep_rec_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_cm_rep_rec_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Connection request reply information returned to the user through their\r
+ connection reply callback.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef struct _ib_cm_rep_rec\r
+{\r
+ const uint8_t* __ptr64 p_rep_pdata;\r
+\r
+ <a href="./ib_types_h.html#robo210">ib_qp_type_t</a> qp_type;\r
+\r
+ ib_cm_handle_t h_cm_rep;\r
+ /* valid for rc, uc & rd qp_type only */\r
+ const void* __ptr64 qp_context;\r
+ uint8_t resp_res;\r
+ boolean_t flow_ctrl;\r
+ <a href="./ib_types_h.html#robo53">ib_apr_status_t</a> apr_status;\r
+\r
+ /* valid for ud qp_type only */\r
+ const void* __ptr64 sidr_context;\r
+ ib_sidr_status_t status;\r
+ <a href="./ib_types_h.html#robo894">ib_net32_t</a> remote_qp;\r
+ <a href="./ib_types_h.html#robo894">ib_net32_t</a> remote_qkey;\r
+ <a href="./ib_types_h.html#robo839">ib_class_port_info_t</a> class_info;\r
+\r
+} <strong>ib_cm_rep_rec_t</strong>;\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> p_rep_pdata\r
+ A reference to user-defined private data sent as part of the connection\r
+ request reply.\r
+\r
+ qp_type\r
+ Indicates the CM service type.\r
+\r
+ h_cm_rep\r
+ The handle to the communication manager reply. This handle is used\r
+ to issue a ready to use message or to reject the connection.\r
+\r
+ h_qp\r
+ The handle to the queue pair associated with a connection request.\r
+\r
+ qp_context\r
+ The queue pair context associated with a connection request.\r
+\r
+ resp_res\r
+ The maximum number of RDMA read/atomic operations from the recipient\r
+ that the requestor supports on the connection. This may be less than\r
+ the init_depth specified in the call to <a href="#robo96">ib_cm_req</a>. The local queue\r
+ pair will be configured with this value unless the connection is\r
+ rejected.\r
+\r
+ flow_ctrl\r
+ Indicates if the remote CA implements hardware end-to-end flow control.\r
+\r
+ apr_status\r
+ Indicates whether the alternate path information was accepted.\r
+\r
+ h_al\r
+ The AL handle on which the SIDR request was issued.\r
+\r
+ sidr_context\r
+ The sidr_context used in <a href="#robo96">ib_cm_req</a>.\r
+\r
+ status\r
+ Status of the request made previously using <a href="#robo96">ib_cm_req</a>.\r
+\r
+ remote_qp\r
+ Identifies the destination queue pair number.\r
+\r
+ remote_qkey\r
+ Identifies the destination qkey.\r
+\r
+ class_info\r
+ Identifies the class_port_info returned if status was not successful.\r
+ This field has no value if status is successful.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo96">ib_cm_req</a>, <a href="#robo93">ib_cm_rep</a>, <a href="#robo173">ib_pfn_cm_rep_cb_t</a>, ib_cm_status_t, <a href="#robo241">ib_rep_pdata_t</a>\r
+ <a href="./ib_types_h.html#robo210">ib_qp_type_t</a>, ib_sidr_status_t\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo95">[Structures]<a name="Access20Layer2fib5fcm5frep5ft">\r
+Access Layer/ib_cm_rep_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_cm_rep_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Connection reply information used when establishing a connection.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef struct _<a href="#robo93">ib_cm_rep</a>\r
+{\r
+ <a href="#robo47">ib_al_flags_t</a> flags;\r
+\r
+ const uint8_t* __ptr64 p_rep_pdata;\r
+ uint8_t rep_length;\r
+\r
+ ib_qp_handle_t h_qp;\r
+ <a href="./ib_types_h.html#robo210">ib_qp_type_t</a> qp_type;\r
+\r
+ /* valid for rc, uc & rd qp_type only */\r
+ <a href="./ib_types_h.html#robo45">ib_access_t</a> access_ctrl;\r
+ uint32_t sq_depth;\r
+ uint32_t rq_depth;\r
+\r
+ uint8_t init_depth;\r
+ uint8_t target_ack_delay;\r
+ <a href="#robo80">ib_cm_failover_t</a> failover_accepted;\r
+ boolean_t flow_ctrl;\r
+ uint8_t rnr_nak_timeout;\r
+ uint8_t rnr_retry_cnt;\r
+\r
+ <a href="#robo172">ib_pfn_cm_rej_cb_t</a> pfn_cm_rej_cb;\r
+ <a href="#robo171">ib_pfn_cm_mra_cb_t</a> pfn_cm_mra_cb;\r
+ <a href="#robo175">ib_pfn_cm_rtu_cb_t</a> pfn_cm_rtu_cb;\r
+ <a href="#robo170">ib_pfn_cm_lap_cb_t</a> pfn_cm_lap_cb;\r
+ <a href="#robo169">ib_pfn_cm_dreq_cb_t</a> pfn_cm_dreq_cb;\r
+\r
+ <a href="./ib_types_h.html#robo225">ib_recv_wr_t</a>* __ptr64 p_recv_wr;\r
+ <a href="./ib_types_h.html#robo225">ib_recv_wr_t</a>* __ptr64 *__ptr64 pp_recv_failure;\r
+\r
+ /*valid for ud qp_type only */\r
+ ib_sidr_status_t status;\r
+ <a href="./ib_types_h.html#robo839">ib_class_port_info_t</a> class_info;\r
+\r
+} <strong>ib_cm_rep_t</strong>;\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> flags\r
+ Used to describe the mode of operation. Set to IB_FLAGS_SYNC to\r
+ process the called routine synchronously.\r
+\r
+ p_rep_pdata\r
+ Optional user-defined private data sent as part of the connection\r
+ reply.\r
+\r
+ rep_length\r
+ Defines the size of the user-defined private data.\r
+\r
+ qp_type\r
+ Indicates the CM service type.\r
+\r
+ h_qp\r
+ A handle to the queue pair to use in the connection. For SIDR, h_qp\r
+ is valid only if sidr status is IB_SIDR_SUCCESS.\r
+\r
+ access_ctrl\r
+ Indicates the type of access permitted on the local QP.\r
+\r
+ sq_depth\r
+ The maximum number of outstanding send operations that the local\r
+ QP needs to support.\r
+\r
+ rq_depth\r
+ The maximum number of outstanding receive operations that the local\r
+ QP needs to support.\r
+\r
+ init_depth\r
+ The maximum number of outstanding RDMA read/atomic operations the\r
+ sender of the reply will have outstanding to the remote QP.\r
+\r
+ target_ack_delay\r
+ The time that the remote QP should wait to receive an ACK from the\r
+ local QP.\r
+\r
+ failover_accepted\r
+ Status indicating if the fail over path was accepted by the sender\r
+ of the reply.\r
+\r
+ flow_ctrl\r
+ Indicates whether the local CA supports end-to-end flow control.\r
+\r
+ rnr_nak_timeout\r
+ The time to wait before retrying a packet after receiving a RNR NAK.\r
+\r
+ rnr_retry_cnt\r
+ The number of times that the local QP should retry a send operation\r
+ after receiving an RNR NACK before reporting an error.\r
+\r
+ pfn_cm_rtu_cb\r
+ References a user-defined callback that will be invoked when\r
+ a connection is ready to use for send operations.\r
+\r
+ pfn_cm_lap_cb\r
+ References a user-defined callback that will be invoked when\r
+ a load alternate path request is received for the connecting\r
+ queue pair or end-to-end context.\r
+\r
+ pfn_cm_dreq_cb\r
+ References a user-defined callback that will be invoked when\r
+ a disconnect request is received is for the connecting\r
+ queue pair or end-to-end context.\r
+\r
+ p_recv_wr\r
+ A reference to the head of the work request list to be initially\r
+ posted to the receive queue. Providing this list closes a potential\r
+ race condition between sending a CM REP message and posting receives.\r
+ Use of this field is optional.\r
+\r
+ pp_recv_failure\r
+ If the post receive operation failed, this references the work\r
+ request in the p_recv_wr list where the first failure occurred.\r
+ This field is required only if p_recv_wr is used.\r
+\r
+ status\r
+ sidr status value returned back to a previously received REQ.\r
+\r
+ class_info\r
+ The contents of this field are valid only if status is IB_SIDR_REDIRECT.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo93">ib_cm_rep</a>, <a href="./ib_types_h.html#robo45">ib_access_t</a>, <a href="#robo80">ib_cm_failover_t</a>, <a href="#robo241">ib_rep_pdata_t</a>\r
+ <a href="#robo175">ib_pfn_cm_rtu_cb_t</a>, <a href="#robo170">ib_pfn_cm_lap_cb_t</a>, <a href="#robo169">ib_pfn_cm_dreq_cb_t</a>,\r
+ <a href="./ib_types_h.html#robo210">ib_qp_type_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo96">[Functions]<a name="Access20Layer2fib5fcm5freq">\r
+Access Layer/ib_cm_req</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_cm_req</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Issues a connection request to a specified end-point.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_EXPORT <a href="./ib_types_h.html#robo49">ib_api_status_t</a> AL_API\r
+<strong>ib_cm_req</strong>(\r
+ IN const <a href="#robo98">ib_cm_req_t</a>* const p_cm_req );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_cm_req\r
+ [in] Information describing the type of connection and the remote\r
+ endpoint for the connection.\r
+\r
+ RETURN VALUES\r
+ IB_SUCCESS\r
+ The connection request was initiated.\r
+\r
+ IB_INVALID_PARAMETER\r
+ A reference to the connect request information was not provided.\r
+\r
+ IB_INVALID_SETTING\r
+ The connect request information contains one or more of the following\r
+ errors:\r
+ - The class version, queue pair type, or path is not supported by\r
+ connection manager.\r
+ - The private data length exceeds the value allowed by the specified\r
+ connection class version.\r
+ - The primary path is not on the same channel adapter as the queue\r
+ pair.\r
+ - The primary and alternate paths are on different channel adapters.\r
+ - The primary and alternate paths specify different MTUs.\r
+ - A primary or alternate path record packet lifetime is out of range.\r
+ - A primary or alternate path record pkey is out of range.\r
+\r
+ IB_INVALID_QP_HANDLE\r
+ The queue pair handle specified in the connect request was invalid.\r
+\r
+ IB_INVALID_AL_HANDLE\r
+ The access layer handle was invalid.\r
+\r
+ IB_INVALID_STATE\r
+ The queue pair or end-to-end context is already connected.\r
+\r
+ IB_INVALID_QP_STATE\r
+ The queue pair was in an invalid state to perform the operation.\r
+\r
+ IB_INSUFFICIENT_MEMORY\r
+ There was insufficient memory to initiate the connect request.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This routine issues a connection request through the communication\r
+ manager to a specified end-point. The p_cm_req parameter contains\r
+ details needed to form the connection. The connection request will\r
+ match with a remote <a href="#robo85">ib_cm_listen</a> or <strong>ib_cm_req</strong> connection request.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo98">ib_cm_req_t</a>, <a href="#robo85">ib_cm_listen</a>, <a href="#robo174">ib_pfn_cm_req_cb_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo97">[Structures]<a name="Access20Layer2fib5fcm5freq5frec5ft">\r
+Access Layer/ib_cm_req_rec_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_cm_req_rec_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Connection request information returned to the user through their\r
+ connection request callback.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>#pragma warning(disable:4324)\r
+typedef struct _ib_cm_req_rec\r
+{\r
+ const void* __ptr64 context;\r
+ ib_cm_handle_t h_cm_req;\r
+ ib_listen_handle_t h_cm_listen;\r
+\r
+ const uint8_t* __ptr64 p_req_pdata;\r
+\r
+ <a href="./ib_types_h.html#robo210">ib_qp_type_t</a> qp_type;\r
+\r
+ /* valid for rc, uc & rd qp_type only */\r
+ uint8_t resp_res;\r
+ boolean_t flow_ctrl;\r
+ uint8_t rnr_retry_cnt;\r
+ <a href="./ib_types_h.html#robo927">ib_path_rec_t</a> primary_path;\r
+ <a href="./ib_types_h.html#robo927">ib_path_rec_t</a> alt_path;\r
+\r
+ /* valid for ud qp_type only */\r
+ <a href="./ib_types_h.html#robo893">ib_net16_t</a> pkey;\r
+ const void* __ptr64 sidr_context;\r
+\r
+} <strong>ib_cm_req_rec_t</strong>;\r
+#pragma warning(default:4324)\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> context\r
+ For peer-to-peer connections, this is the queue pair context associated\r
+ with a connection request. For listens, this is the listen context\r
+ specified through the <a href="#robo85">ib_cm_listen</a> routine.\r
+\r
+ h_cm_req\r
+ The handle to the communication manager request. This handle is used\r
+ to reply to the or reject the connection.\r
+\r
+ h_cm_listen\r
+ For connection request callbacks initiated in response to an\r
+ <a href="#robo85">ib_cm_listen</a> call, this is a handle to the listen request. This\r
+ handle is provided to the user to avoid a race condition between\r
+ the return of the <a href="#robo85">ib_cm_listen</a> routine and the notification of a\r
+ connection request.\r
+\r
+ p_req_pdata\r
+ A reference to user-defined private data sent as part of the connection\r
+ request.\r
+\r
+ qp_type\r
+ Indicates the CM service type.\r
+\r
+ resp_res\r
+ The maximum number of RDMA read/atomic operations from the recipient\r
+ that the requestor supports on the connection. The init_depth\r
+ specified in the call to <a href="#robo93">ib_cm_rep</a> must be less than or equal to\r
+ this value.\r
+\r
+ flow_ctrl\r
+ Indicates if the remote CA implements hardware end-to-end flow control.\r
+\r
+ rnr_retry_cnt\r
+ Requested number of RNR NAK retries to perform before generating a\r
+ local error.\r
+\r
+ primary_path\r
+ The path record to use for the primary connection.\r
+\r
+ alt_path\r
+ The path record to use for the alternate connection.\r
+\r
+ pkey\r
+ The pkey used in the user's request.\r
+\r
+ sidr_context\r
+ The sidr_context used in <a href="#robo85">ib_cm_listen</a>.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo96">ib_cm_req</a>, <a href="#robo85">ib_cm_listen</a>, <a href="#robo174">ib_pfn_cm_req_cb_t</a>,\r
+ <a href="./ib_types_h.html#robo45">ib_access_t</a>, <a href="./ib_types_h.html#robo927">ib_path_rec_t</a>, <a href="#robo243">ib_req_pdata_t</a>, <a href="./ib_types_h.html#robo210">ib_qp_type_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo98">[Structures]<a name="Access20Layer2fib5fcm5freq5ft">\r
+Access Layer/ib_cm_req_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_cm_req_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Connection request information used to establish a new connection.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef struct _<a href="#robo96">ib_cm_req</a>\r
+{\r
+ <a href="./ib_types_h.html#robo895">ib_net64_t</a> svc_id;\r
+\r
+ <a href="#robo47">ib_al_flags_t</a> flags;\r
+ uint8_t max_cm_retries;\r
+\r
+ <a href="./ib_types_h.html#robo927">ib_path_rec_t</a>* __ptr64 p_primary_path;\r
+\r
+ <a href="#robo173">ib_pfn_cm_rep_cb_t</a> pfn_cm_rep_cb;\r
+\r
+ const uint8_t* __ptr64 p_req_pdata;\r
+ uint8_t req_length;\r
+\r
+ <a href="./ib_types_h.html#robo210">ib_qp_type_t</a> qp_type;\r
+\r
+ /* valid for rc, uc & rd qp_type only */\r
+ ib_qp_handle_t h_qp;\r
+\r
+ uint8_t* __ptr64 p_compare_buffer;\r
+ uint8_t compare_offset;\r
+ uint8_t compare_length;\r
+\r
+ uint8_t resp_res;\r
+ uint8_t init_depth;\r
+ uint8_t remote_resp_timeout;\r
+ boolean_t flow_ctrl;\r
+ uint8_t local_resp_timeout;\r
+ uint8_t rnr_nak_timeout;\r
+ uint8_t rnr_retry_cnt;\r
+ uint8_t retry_cnt;\r
+\r
+ <a href="./ib_types_h.html#robo927">ib_path_rec_t</a>* __ptr64 p_alt_path OPTIONAL;\r
+\r
+ <a href="#robo174">ib_pfn_cm_req_cb_t</a> pfn_cm_req_cb;\r
+ <a href="#robo171">ib_pfn_cm_mra_cb_t</a> pfn_cm_mra_cb;\r
+ <a href="#robo172">ib_pfn_cm_rej_cb_t</a> pfn_cm_rej_cb;\r
+\r
+ /* valid for ud qp_type only */\r
+ ib_al_handle_t h_al;\r
+ const void* __ptr64 sidr_context;\r
+ uint32_t timeout_ms;\r
+ <a href="./ib_types_h.html#robo893">ib_net16_t</a> pkey;\r
+\r
+} <strong>ib_cm_req_t</strong>;\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> svc_id\r
+ The ID of the remote service to which the connection request is\r
+ being made.\r
+\r
+ flags\r
+ Used to describe the mode of operation. Set to IB_FLAGS_SYNC to\r
+ process the called routine synchronously.\r
+\r
+ max_cm_retries\r
+ The maximum number of times that either CM should resend a connection\r
+ establishment message.\r
+\r
+ p_primary_path\r
+ Path information over which to establish the primary connection.\r
+\r
+ pfn_cm_rep_cb\r
+ References a user-provided callback that will be invoked when\r
+ a reply to the connection request is received.\r
+\r
+ p_req_pdata\r
+ Optional user-defined private data sent as part of the connection\r
+ request.\r
+\r
+ req_length\r
+ Defines the size of the user-defined private data.\r
+\r
+ qp_type\r
+ Indicates the CM service type.\r
+\r
+ h_qp\r
+ A handle to the queue pair to use in the connection.\r
+\r
+ p_compare_buffer\r
+ An optionally provided buffer that will be used to match incoming\r
+ connection requests with a registered service. Use of this buffer\r
+ permits multiple services to connect using the same service ID as\r
+ long as they provide different compare buffers. Incoming requests\r
+ will be matched against the compare buffer. Valid for peer-to-peer\r
+ connection requests only.\r
+\r
+ compare_offset\r
+ An offset into the user-defined data area of a connection request\r
+ which contains the start of the data that will be compared against.\r
+ The offset must be the same for all requests using the same service ID.\r
+ Valid for peer-to-peer connection requests only.\r
+\r
+ compare_length\r
+ Specifies the size of the compare buffer in bytes. The length must\r
+ be the same for all requests using the same service ID. Valid for\r
+ peer-to-peer connection requests only.\r
+\r
+ resp_res\r
+ The maximum number of outstanding RDMA read/atomic operations the\r
+ requestor supports from the remote QP.\r
+\r
+ init_depth\r
+ The maximum number of outstanding RDMA read/atomic operations the\r
+ requestor will have outstanding to the remote QP.\r
+\r
+ remote_resp_timeout\r
+ The time within which the remote CM should transmit a response to\r
+ the sender. This value is expressed as\r
+ 4.096 * (2 ^ local_resp_timeout) microseconds.\r
+\r
+ flow_ctrl\r
+ Indicates whether the local CA supports end-to-end flow control.\r
+\r
+ local_resp_timeout\r
+ The time that the remote CM should wait to receive a response from\r
+ the local CM. This value is expressed as\r
+ 4.096 * (2 ^ local_resp_timeout) microseconds.\r
+\r
+ rnr_nak_timeout\r
+ The time to wait before retrying a packet after receiving a RNR NAK.\r
+ This value is defined in section 9.7.5.2.8 of the IB Spec, table 45.\r
+\r
+ rnr_retry_cnt\r
+ The number of times that the local QP should retry a send operation\r
+ after receiving an RNR NACK before reporting an error.\r
+\r
+ retry_cnt\r
+ The number of times that a QP should retry a send operation before\r
+ reporting an error.\r
+\r
+ p_alt_path\r
+ Optional path information that will be used as the alternate\r
+ connection path in the case of failure.\r
+\r
+ pfn_cm_req_cb\r
+ References a user-provided callback that will be invoked when\r
+ a request for a connection is received. This is required for peer-to\r
+ peer connection requests, and must be NULL for client/server\r
+ connection requests.\r
+\r
+ pfn_cm_mra_cb\r
+ References a user-provided callback that will be invoked when\r
+ a message received acknowledgement is received.\r
+\r
+ pfn_cm_rej_cb\r
+ References a user-provided callback that will be invoked if the\r
+ connection is rejected by the remote end-point.\r
+\r
+ sidr_context\r
+ The user-defined sidr context information that will be passed back in a\r
+ <a href="#robo96">ib_cm_req</a> callback.\r
+\r
+ timeout_ms\r
+ Timeout value in milli-seconds for the REQ to expire. The CM will add\r
+ twice packet lifetime to this value to determine the actual timeout\r
+ value used.\r
+\r
+ pkey\r
+ pkey to be used as part of the request. This field is only valid for\r
+ IB_MCLASS_CM_VER_2 clients.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo96">ib_cm_req</a>, <a href="#robo174">ib_pfn_cm_req_cb_t</a>, <a href="#robo173">ib_pfn_cm_rep_cb_t</a>, <a href="#robo171">ib_pfn_cm_mra_cb_t</a>,\r
+ <a href="#robo172">ib_pfn_cm_rej_cb_t</a>, <a href="./ib_types_h.html#robo927">ib_path_rec_t</a>, <a href="#robo243">ib_req_pdata_t</a>, <a href="./ib_types_h.html#robo210">ib_qp_type_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo99">[Functions]<a name="Access20Layer2fib5fcm5frtu">\r
+Access Layer/ib_cm_rtu</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_cm_rtu</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Sends a ready to use message for a connection request, indicating that\r
+ the connection has been accepted and is ready for use.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_EXPORT <a href="./ib_types_h.html#robo49">ib_api_status_t</a> AL_API\r
+<strong>ib_cm_rtu</strong>(\r
+ IN const ib_cm_handle_t h_cm_rep,\r
+ IN const <a href="#robo101">ib_cm_rtu_t</a>* const p_cm_rtu );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_cm_rep\r
+ [in] A handle to the connection reply being responded to. This handle\r
+ is provided by the access layer through the <a href="#robo173">ib_pfn_cm_rep_cb_t</a>\r
+ callback.\r
+\r
+ p_cm_rtu\r
+ [in] Contains ready to use information to return to the sender of the\r
+ connection reply.\r
+\r
+ RETURN VALUES\r
+ IB_SUCCESS\r
+ The connection ready to use was initiated.\r
+\r
+ IB_INVALID_HANDLE\r
+ The connection manager reply handle was invalid.\r
+\r
+ IB_INVALID_PARAMETER\r
+ A reference to the ready to use information was not provided.\r
+\r
+ IB_INVALID_STATE\r
+ The current connection state does not allow sending this message.\r
+\r
+ IB_INVALID_SETTING\r
+ The specified queue pair attributes were invalid or the private data\r
+ length exceeds the value allowed by the specified connection class\r
+ version.\r
+\r
+ IB_UNSUPPORTED\r
+ The specified queue pair access control was not supported.\r
+\r
+ IB_INSUFFICIENT_MEMORY\r
+ There was insufficient memory to send the ready to use response.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This routine results in the access layer marking a connection as ready\r
+ to use and notifying the remote end-point.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo95">ib_cm_rep_t</a>, <a href="#robo173">ib_pfn_cm_rep_cb_t</a>, <a href="#robo101">ib_cm_rtu_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo100">[Structures]<a name="Access20Layer2fib5fcm5frtu5frec5ft">\r
+Access Layer/ib_cm_rtu_rec_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_cm_rtu_rec_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Connection ready to use message information returned to the user through\r
+ their ready to use callback.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef struct _ib_cm_rtu_rec\r
+{\r
+ const uint8_t* __ptr64 p_rtu_pdata;\r
+\r
+ ib_qp_handle_t h_qp;\r
+ const void* __ptr64 qp_context;\r
+\r
+} <strong>ib_cm_rtu_rec_t</strong>;\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> p_rtu_pdata\r
+ A reference to user-defined private data sent as part of the ready\r
+ to use message.\r
+\r
+ h_qp\r
+ The queue pair handle associated with the connection request.\r
+\r
+ qp_context\r
+ The queue pair context associated with the connection request.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo99">ib_cm_rtu</a>, <a href="#robo175">ib_pfn_cm_rtu_cb_t</a>, ib_cm_status_t, <a href="#robo246">ib_rtu_pdata_t</a>,\r
+ <a href="./ib_types_h.html#robo210">ib_qp_type_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo101">[Structures]<a name="Access20Layer2fib5fcm5frtu5ft">\r
+Access Layer/ib_cm_rtu_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_cm_rtu_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Connection ready to use information used when establishing a connection.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef struct _<a href="#robo99">ib_cm_rtu</a>\r
+{\r
+ <a href="./ib_types_h.html#robo45">ib_access_t</a> access_ctrl;\r
+ uint32_t sq_depth;\r
+ uint32_t rq_depth;\r
+\r
+ const uint8_t* __ptr64 p_rtu_pdata;\r
+ uint8_t rtu_length;\r
+\r
+ <a href="#robo167">ib_pfn_cm_apr_cb_t</a> pfn_cm_apr_cb;\r
+ <a href="#robo169">ib_pfn_cm_dreq_cb_t</a> pfn_cm_dreq_cb;\r
+\r
+} <strong>ib_cm_rtu_t</strong>;\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> access_ctrl\r
+ Indicates the type of access permitted on the local QP.\r
+\r
+ sq_depth\r
+ The maximum number of outstanding send operations that the local\r
+ QP needs to support. This field should be set to zero if the CA\r
+ does not support changing the work request depth after the QP is\r
+ created.\r
+\r
+ rq_depth\r
+ The maximum number of outstanding receive operations that the local\r
+ QP needs to support. This field should be set to zero if the CA\r
+ does not support changing the work request depth after the QP is\r
+ created.\r
+\r
+ p_rtu_pdata\r
+ Optional user-defined private data sent as part of the connection\r
+ ready to use message.\r
+\r
+ rtu_length\r
+ Defines the size of the user-defined private data.\r
+\r
+ pfn_cm_apr_cb\r
+ References a user-defined callback that will be invoked when an\r
+ alternate path response is received for the connecting queue pair\r
+ or end-to-end context.\r
+\r
+ pfn_cm_dreq_cb\r
+ References a user-defined callback that will be invoked when a\r
+ disconnect request is received is for the connecting queue pair\r
+ or end-to-end context.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo99">ib_cm_rtu</a>, <a href="./ib_types_h.html#robo45">ib_access_t</a>, <a href="#robo246">ib_rtu_pdata_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo103">[Structures]<a name="Access20Layer2fib5fcq5fcreate5ft">\r
+Access Layer/ib_cq_create_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_cq_create_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Attributes used to initialize a completion queue at creation time.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef struct _ib_cq_create\r
+{\r
+ uint32_t size;\r
+ <a href="#robo176">ib_pfn_comp_cb_t</a> pfn_comp_cb;\r
+ <a href="../complib/cl_waitobj_h.html#robo704">cl_waitobj_handle_t</a> h_wait_obj;\r
+\r
+} <strong>ib_cq_create_t</strong>;\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> size\r
+ Specifies the maximum number of work completions that may be on the\r
+ completion queue. If the creation call is successful, the actual\r
+ size of the completion queue will be returned. The actual size of\r
+ the CQ will be greater than or equal to the requested size.\r
+\r
+ pfn_comp_cb\r
+ A callback that is invoked whenever a signaled completion occurs on\r
+ the completion queue. This field is mutually exclusive with the\r
+ p_event field.\r
+\r
+ h_wait_obj\r
+ A wait object that is triggered whenever a signaled completion occurs\r
+ on the completion queue. This field is mutually exclusive with the\r
+ pfn_comp_cb field and is only valid for user-mode clients. The wait\r
+ object must be ready for use when the call to <a href="#robo105">ib_create_cq</a> is invoked.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> Clients must specify either an event or a callback when creating a\r
+ completion queue. When a signaled completion occurs on the completion\r
+ queue, the client will be notified through the callback or by\r
+ signaling the specified event.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo105">ib_create_cq</a>, <a href="#robo176">ib_pfn_comp_cb_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo104">[Functions]<a name="Access20Layer2fib5fcreate5fav">\r
+Access Layer/ib_create_av</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_create_av</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Creates an address vector.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_EXPORT <a href="./ib_types_h.html#robo49">ib_api_status_t</a> AL_API\r
+<strong>ib_create_av</strong>(\r
+ IN const ib_pd_handle_t h_pd,\r
+ IN const <a href="./ib_types_h.html#robo57">ib_av_attr_t</a>* const p_av_attr,\r
+ OUT ib_av_handle_t* const ph_av );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_pd\r
+ [in] A handle to an allocated protection domain that the address\r
+ vector will be associated with.\r
+\r
+ p_av_attr\r
+ [in] Attributes for the newly created address vector.\r
+\r
+ ph_av\r
+ [out] Upon successful completion of this call, this references a\r
+ handle to the newly created address vector.\r
+\r
+ RETURN VALUES\r
+ IB_SUCCESS\r
+ The operation was successful.\r
+\r
+ IB_INVALID_PD_HANDLE\r
+ The protection domain handle was invalid.\r
+\r
+ IB_INVALID_PARAMETER\r
+ A reference to the address vector attributes or handle was not\r
+ provided.\r
+\r
+ IB_INSUFFICIENT_MEMORY\r
+ There was insufficient memory to create the address vector.\r
+\r
+ IB_INVALID_PORT\r
+ The port number supplied, through the address vector attributes,\r
+ was invalid for the given channel adapter.\r
+\r
+ IB_INSUFFICIENT_RESOURCES\r
+ There were insufficient resources currently available on the channel\r
+ adapter to create the address vector.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This routine creates an address vector. Clients specify the attributes\r
+ of the address vector through the p_av_attr parameter.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo212">ib_query_av</a>, <a href="#robo155">ib_modify_av</a>, <a href="#robo115">ib_destroy_av</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo105">[Functions]<a name="Access20Layer2fib5fcreate5fcq">\r
+Access Layer/ib_create_cq</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_create_cq</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Creates a completion queue and returns its handle to the user.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_EXPORT <a href="./ib_types_h.html#robo49">ib_api_status_t</a> AL_API\r
+<strong>ib_create_cq</strong>(\r
+ IN const ib_ca_handle_t h_ca,\r
+ IN OUT <a href="#robo103">ib_cq_create_t</a>* const p_cq_create,\r
+ IN const void* const cq_context,\r
+ IN const <a href="#robo178">ib_pfn_event_cb_t</a> pfn_cq_event_cb OPTIONAL,\r
+ OUT ib_cq_handle_t* const ph_cq );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_ca\r
+ [in] A handle to an open channel adapter.\r
+\r
+ p_cq_create\r
+ [in] Attributes necessary to allocate and initialize the\r
+ completion queue.\r
+\r
+ cq_context\r
+ [in] A user-specified context associated with the completion queue.\r
+\r
+ pfn_cq_event_cb\r
+ [in] User-specified error callback routine invoked after an\r
+ asynchronous event has occurred on the completion queue.\r
+\r
+ ph_cq\r
+ [out] Upon successful completion of this call, this references a\r
+ handle to the newly created completion queue.\r
+\r
+ RETURN VALUES\r
+ IB_SUCCESS\r
+ The completion queue was successfully created.\r
+\r
+ IB_INVALID_CA_HANDLE\r
+ The channel adapter handle was invalid.\r
+\r
+ IB_INVALID_PARAMETER\r
+ A reference to the completion queue attributes or handle was not\r
+ provided.\r
+\r
+ IB_INVALID_SETTING\r
+ The specified attributes that should be used to create the completion\r
+ queue are invalid. Both completion callback and wait object\r
+ information were supplied or are missing.\r
+\r
+ IB_INSUFFICIENT_MEMORY\r
+ There was insufficient memory to create the completion queue.\r
+\r
+ IB_INSUFFICIENT_RESOURCES\r
+ There were insufficient resources currently available on the channel\r
+ adapter to create the completion queue.\r
+\r
+ IB_INVALID_CQ_SIZE\r
+ The requested size of the completion queue was larger than the\r
+ maximum supported by the associated channel adapter.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This routine allocates a completion queue on the specified channel\r
+ adapter. If the completion queue cannot be allocated, an error is\r
+ returned. When creating the completion queue, users associate a context\r
+ with the completion queue. This context is returned to the user through\r
+ the completion and asynchronous event callbacks.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo215">ib_query_cq</a>, <a href="#robo157">ib_modify_cq</a>, <a href="#robo116">ib_destroy_cq</a>, <a href="#robo103">ib_cq_create_t</a>, <a href="#robo178">ib_pfn_event_cb_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo106">[Functions]<a name="Access20Layer2fib5fcreate5fioc">\r
+Access Layer/ib_create_ioc</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_create_ioc</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Creates an instance of an I/O controller.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_EXPORT <a href="./ib_types_h.html#robo49">ib_api_status_t</a> AL_API\r
+<strong>ib_create_ioc</strong>(\r
+ IN const ib_ca_handle_t h_ca,\r
+ IN const <a href="./ib_types_h.html#robo874">ib_ioc_profile_t</a>* const p_ioc_profile,\r
+ OUT ib_ioc_handle_t* const ph_ioc );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_ca\r
+ [in] A handle to an opened channel adapter. The controller will be\r
+ created to be exposed through the given adapter.\r
+\r
+ p_ioc_profile\r
+ [in] I/O controller profile information.\r
+\r
+ ph_ioc\r
+ [out] Upon successful completion of this call, this references a\r
+ handle to the created I/O controller. This handle may be used to\r
+ add service entries to the controller and register it.\r
+\r
+ RETURN VALUES\r
+ IB_SUCCESS\r
+ The I/O controller was successfully created.\r
+\r
+ IB_INVALID_CA_HANDLE\r
+ The channel adapter handle was invalid.\r
+\r
+ IB_INVALID_PARAMETER\r
+ A reference to the I/O controller profile information or handle\r
+ was not provided.\r
+\r
+ IB_INSUFFICIENT_MEMORY\r
+ There was insufficient memory to create the I/O controller.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This routine creates an I/O controller. Once created, services may be\r
+ added to the controller before being registered with the local device\r
+ manager.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo117">ib_destroy_ioc</a>, <a href="#robo46">ib_add_svc_entry</a>, <a href="#robo226">ib_reg_ioc</a>, <a href="./ib_types_h.html#robo874">ib_ioc_profile_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo107">[Functions]<a name="Access20Layer2fib5fcreate5fmad5fpool">\r
+Access Layer/ib_create_mad_pool</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_create_mad_pool</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Creates a pool of MAD elements for use sending and receive management\r
+ datagrams.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_EXPORT <a href="./ib_types_h.html#robo49">ib_api_status_t</a> AL_API\r
+<strong>ib_create_mad_pool</strong>(\r
+ IN const ib_al_handle_t h_al,\r
+ IN const size_t min,\r
+ IN const size_t max,\r
+ IN const size_t grow_size,\r
+ OUT ib_pool_handle_t* const ph_pool );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_al\r
+ [in] A handle to an open instance of the access layer.\r
+\r
+ min\r
+ [in] The minimum number of MAD elements to create in the pool.\r
+\r
+ max\r
+ [in] The maximum number of MAD elements that will be created by the\r
+ pool. If max is set to 0, the pool will continue to grow as long\r
+ as system resources are available.\r
+\r
+ grow_size\r
+ [in] The number of MAD elements to add to the pool when growing it.\r
+ If set to 0, the pool will not grow beyond the number specified\r
+ at creation. This value must be greater than 0, if min is set to 0.\r
+\r
+ ph_pool\r
+ [out] On successful completion of this call, this returns a handle to\r
+ the newly created pool.\r
+\r
+ RETURN VALUES\r
+ IB_SUCCESS\r
+ The MAD pool was created successfully.\r
+\r
+ IB_INVALID_AL_HANDLE\r
+ The access layer handle was invalid.\r
+\r
+ IB_INVALID_PARAMETER\r
+ A reference to the pool handle was not provided.\r
+\r
+ IB_INVALID_SETTING\r
+ The maximum number of MAD elements was non-zero and less than the\r
+ minimum number of MAD elements.\r
+\r
+ IB_INSUFFICIENT_MEMORY\r
+ There was insufficient memory to create the MAD pool.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This routine creates a pool of MAD elements. The elements may be used\r
+ to send and receive MADs on alias and MAD type QPs.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo118">ib_destroy_mad_pool</a>, <a href="#robo129">ib_get_mad</a>, <a href="#robo204">ib_put_mad</a>, <a href="#robo227">ib_reg_mad_pool</a>,\r
+ <a href="#robo111">ib_dereg_mad_pool</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo108">[Functions]<a name="Access20Layer2fib5fcreate5fmw">\r
+Access Layer/ib_create_mw</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_create_mw</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Creates a memory window associated with the specified protection domain.\r
+ Newly created windows are not bound to any specific memory region.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_EXPORT <a href="./ib_types_h.html#robo49">ib_api_status_t</a> AL_API\r
+<strong>ib_create_mw</strong>(\r
+ IN const ib_pd_handle_t h_pd,\r
+ OUT net32_t* const p_rkey,\r
+ OUT ib_mw_handle_t* const ph_mw );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_pd\r
+ [in] A handle to an existing protection domain that the memory window\r
+ should be created within.\r
+\r
+ p_rkey\r
+ [out] The current rkey associated with the memory window. This key is\r
+ used to bind the window to a registered memory region.\r
+\r
+ ph_mw\r
+ [out] Upon successful completion of this call, this references a handle\r
+ to the memory window. This handle is used to bind and destroy\r
+ the window.\r
+\r
+ RETURN VALUES\r
+ IB_SUCCESS\r
+ The memory window was successfully created.\r
+\r
+ IB_INVALID_PD_HANDLE\r
+ The protection domain handle was invalid.\r
+\r
+ IB_INVALID_PARAMETER\r
+ A reference to the memory window rkey or handle was not provided.\r
+\r
+ IB_INSUFFICIENT_MEMORY\r
+ There was insufficient memory to create the memory window.\r
+\r
+ IB_INSUFFICIENT_RESOURCES\r
+ There were insufficient resources currently available on the channel\r
+ adapter to create the memory window.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This routine creates an unbound memory window associated with a specified\r
+ protection domain. The memory window cannot be used for data transfer\r
+ operations until being bound to a registered memory region.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo119">ib_destroy_mw</a>, <a href="#robo217">ib_query_mw</a>, <a href="#robo58">ib_bind_mw</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo109">[Functions]<a name="Access20Layer2fib5fcreate5fqp">\r
+Access Layer/ib_create_qp</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_create_qp</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Creates a queue pair and returns its handle to the user.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_EXPORT <a href="./ib_types_h.html#robo49">ib_api_status_t</a> AL_API\r
+<strong>ib_create_qp</strong>(\r
+ IN const ib_pd_handle_t h_pd,\r
+ IN const <a href="./ib_types_h.html#robo206">ib_qp_create_t</a>* const p_qp_create,\r
+ IN const void* const qp_context,\r
+ IN const <a href="#robo178">ib_pfn_event_cb_t</a> pfn_qp_event_cb OPTIONAL,\r
+ OUT ib_qp_handle_t* const ph_qp );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_pd\r
+ [in] This is a handle to a protection domain associated with the queue\r
+ pair.\r
+\r
+ p_qp_create\r
+ [in] Attributes necessary to allocate and initialize the queue pair.\r
+\r
+ qp_context\r
+ [in] A user-specified context information associated with the\r
+ queue pair.\r
+\r
+ pfn_qp_event_cb\r
+ [in] User-specified error callback routine invoked after an\r
+ asynchronous event has occurred on the queue pair.\r
+\r
+ ph_qp\r
+ [out] Upon successful completion of this call, this references a\r
+ handle to the newly created queue pair.\r
+\r
+ RETURN VALUES\r
+ IB_SUCCESS\r
+ The queue pair was successfully created.\r
+\r
+ IB_INVALID_PD_HANDLE\r
+ The protection domain to associate with the queue pair was invalid.\r
+\r
+ IB_INVALID_PARAMETER\r
+ A reference to the queue pair attributes or handle was not provided.\r
+\r
+ IB_INSUFFICIENT_MEMORY\r
+ There was insufficient memory to create the queue pair.\r
+\r
+ IB_INSUFFICIENT_RESOURCES\r
+ There were insufficient resources currently available on the channel\r
+ adapter to create the queue pair.\r
+\r
+ IB_INVALID_CQ_HANDLE\r
+ The send or receive completion queue to associate with the queue pair\r
+ was invalid.\r
+\r
+ IB_INVALID_SETTING\r
+ The specified queue pair creation attributes are invalid.\r
+\r
+ IB_UNSUPPORTED\r
+ The specified queue pair type was not supported by the channel adapter.\r
+\r
+ IB_INVALID_MAX_WRS\r
+ The requested maximum send or receive work request depth could not be\r
+ supported.\r
+\r
+ IB_INVALID_MAX_SGE\r
+ The requested maximum number of scatter-gather entries for the send or\r
+ receive queue could not be supported.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This routine allocates a queue pair with the specified attributes. If\r
+ the queue pair cannot be allocated, an error is returned. When creating\r
+ the queue pair, users associate a context with the queue pair. This\r
+ context is returned to the user through the asynchronous event callback\r
+ if an event occurs.\r
+\r
+ This routine is used to create queue pairs of type:\r
+\r
+ IB_QPT_RELIABLE_CONN\r
+ IB_QPT_UNRELIABLE_CONN\r
+ IB_QPT_UNRELIABLE_DGRM\r
+ IB_QPT_MAD\r
+\r
+ Callers of <strong>ib_create_qp</strong> should call <a href="#robo140">ib_init_dgrm_svc</a> if the queue pair\r
+ is of type IB_QPT_UNRELIABLE_DGRM or IB_QPT_MAD before sending or\r
+ receiving data. IB_QPT_RELIABLE_CONN, IB_QPT_UNRELIABLE_CONN type\r
+ queue pairs should be used by the connection establishment process\r
+ before data may be sent or received on the QP.\r
+\r
+ This call does not return the QP attributes as MAD QPs do not support\r
+ such an operation. This is a minor specification deviation.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo218">ib_query_qp</a>, <a href="#robo158">ib_modify_qp</a>, <a href="#robo120">ib_destroy_qp</a>, <a href="#robo96">ib_cm_req</a>, <a href="#robo93">ib_cm_rep</a>, <a href="#robo99">ib_cm_rtu</a>\r
+ <a href="#robo140">ib_init_dgrm_svc</a>, <a href="./ib_types_h.html#robo206">ib_qp_create_t</a>, <a href="#robo178">ib_pfn_event_cb_t</a>, <a href="./ib_types_h.html#robo205">ib_qp_attr_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo110">[Functions]<a name="Access20Layer2fib5fdealloc5fpd">\r
+Access Layer/ib_dealloc_pd</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_dealloc_pd</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Deallocates a protection domain.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_EXPORT <a href="./ib_types_h.html#robo49">ib_api_status_t</a> AL_API\r
+<strong>ib_dealloc_pd</strong>(\r
+ IN const ib_pd_handle_t h_pd,\r
+ IN const <a href="#robo177">ib_pfn_destroy_cb_t</a> pfn_destroy_cb OPTIONAL );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_pd\r
+ [in] A handle to an allocated protection domain.\r
+\r
+ pfn_destroy_cb\r
+ [in] A user-specified callback that is invoked after the protection\r
+ domain has been successfully destroyed.\r
+\r
+ RETURN VALUES\r
+ IB_SUCCESS\r
+ The operation was successful.\r
+\r
+ IB_INVALID_PD_HANDLE\r
+ The protection domain handle was invalid.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This call deallocates a protection domain and releases all associated\r
+ resources, including queue pairs and registered memory regions. Since\r
+ callbacks may be outstanding against one of protection domain's related\r
+ resources at the time the deallocation call is invoked, this call operates\r
+ asynchronously. The user will be notified through a callback once the\r
+ deallocation call completes, indicating that no additional callbacks\r
+ will be invoked for a related resource.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo48">ib_alloc_pd</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo111">[Functions]<a name="Access20Layer2fib5fdereg5fmad5fpool">\r
+Access Layer/ib_dereg_mad_pool</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_dereg_mad_pool</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Deregisters a MAD pool from a protection domain.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_EXPORT <a href="./ib_types_h.html#robo49">ib_api_status_t</a> AL_API\r
+<strong>ib_dereg_mad_pool</strong>(\r
+ IN const ib_pool_key_t pool_key );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> pool_key\r
+ [in] Key to the MAD pool to deregister. The specified pool must\r
+ have been registered with a protection domain through a call to\r
+ <a href="#robo227">ib_reg_mad_pool</a>.\r
+\r
+ RETURN VALUES\r
+ IB_SUCCESS\r
+ The MAD pool was successfully deregistered from the protection domain.\r
+\r
+ IB_INVALID_PARAMETER\r
+ The MAD pool key was invalid.\r
+\r
+ IB_RESOURCE_BUSY\r
+ One or more MAD elements were removed from the MAD pool using the\r
+ specified pool key, and were not returned.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This function deregisters a MAD pool with a protection domain. After\r
+ successful completion of this call, the MAD elements of the associated\r
+ pool are no longer usable on the protection domain.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo107">ib_create_mad_pool</a>, <a href="#robo118">ib_destroy_mad_pool</a>, <a href="#robo227">ib_reg_mad_pool</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo112">[Functions]<a name="Access20Layer2fib5fdereg5fmr">\r
+Access Layer/ib_dereg_mr</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_dereg_mr</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Deregisters a registered memory region.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_EXPORT <a href="./ib_types_h.html#robo49">ib_api_status_t</a> AL_API\r
+<strong>ib_dereg_mr</strong>(\r
+ IN const ib_mr_handle_t h_mr );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_mr\r
+ [in] A handle to a registered memory region that will be unregistered.\r
+\r
+ RETURN VALUES\r
+ IB_SUCCESS\r
+ The memory region was successfully deregistered.\r
+\r
+ IB_INVALID_MR_HANDLE\r
+ The memory region handle was invalid.\r
+\r
+ IB_RESOURCE_BUSY\r
+ The memory region has memory windows bound to it.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This routine deregisters a memory region with a channel adapter. The\r
+ region may be deregistered only if there are no memory windows or\r
+ existing shared memory regions currently bound to the region. Work\r
+ requests referencing this region when it is deregistered will fail\r
+ with a WRS_LOCAL_PROTECTION_ERR error.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo229">ib_reg_mem</a>, <a href="#robo230">ib_reg_phys</a>, <a href="#robo232">ib_reg_shared</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo113">[Functions]<a name="Access20Layer2fib5fdereg5fpnp">\r
+Access Layer/ib_dereg_pnp</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_dereg_pnp</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Routine used to cancel notification of local events or I/O controller\r
+ assignments.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_EXPORT <a href="./ib_types_h.html#robo49">ib_api_status_t</a> AL_API\r
+<strong>ib_dereg_pnp</strong>(\r
+ IN const ib_pnp_handle_t h_pnp,\r
+ IN const <a href="#robo177">ib_pfn_destroy_cb_t</a> pfn_destroy_cb OPTIONAL );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_pnp\r
+ [in] A handle returned as a result of an <a href="#robo231">ib_reg_pnp</a> operation.\r
+\r
+ pfn_destroy_cb\r
+ [in] A user-specified callback that is invoked after the PnP\r
+ registration has been successfully deregistered.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This routine cancels a pending PnP operation. To avoid a race condition\r
+ canceling a request at the same time a notification callback is in\r
+ progress, the cancel operation operates asynchronously. For additional\r
+ details see <a href="#robo177">ib_pfn_destroy_cb_t</a>.\r
+\r
+ RETURN VALUES\r
+ IB_SUCCESS\r
+ The PnP deregistration was initiated.\r
+\r
+ IB_INVALID_HANDLE\r
+ The PnP handle was invalid.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo231">ib_reg_pnp</a>, <a href="#robo177">ib_pfn_destroy_cb_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo114">[Functions]<a name="Access20Layer2fib5fdereg5fsvc">\r
+Access Layer/ib_dereg_svc</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_dereg_svc</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Remove a service as being registered with the subnet administrator.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_EXPORT <a href="./ib_types_h.html#robo49">ib_api_status_t</a> AL_API\r
+<strong>ib_dereg_svc</strong>(\r
+ IN const ib_reg_svc_handle_t h_reg_svc,\r
+ IN const <a href="#robo177">ib_pfn_destroy_cb_t</a> pfn_destroy_cb OPTIONAL );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_reg_svc\r
+ [in] A handle to a registered service.\r
+\r
+ pfn_destroy_cb\r
+ [in] A user-specified callback that is invoked after the service\r
+ has been deregistered.\r
+\r
+ RETURN VALUES\r
+ IB_SUCCESS\r
+ The service deregistration was initiated.\r
+\r
+ IB_INVALID_HANDLE\r
+ The registered service handle was invalid.\r
+\r
+ IB_INSUFFICIENT_MEMORY\r
+ There was insufficient memory to perform the operation.\r
+\r
+ IB_INSUFFICIENT_RESOURCES\r
+ There were insufficient resources currently available on the channel\r
+ adapter to perform the operation.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This routine deregisters a service with the subnet administrator.\r
+ To avoid a race condition deregistering a service at the same time\r
+ the registration completion callback is in progress, the deregister\r
+ operation operates asynchronously. For additional details see\r
+ <a href="#robo177">ib_pfn_destroy_cb_t</a>.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo234">ib_reg_svc</a>, <a href="#robo177">ib_pfn_destroy_cb_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo115">[Functions]<a name="Access20Layer2fib5fdestroy5fav">\r
+Access Layer/ib_destroy_av</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_destroy_av</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Destroys an existing address vector.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_EXPORT <a href="./ib_types_h.html#robo49">ib_api_status_t</a> AL_API\r
+<strong>ib_destroy_av</strong>(\r
+ IN const ib_av_handle_t h_av );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_av\r
+ [in] A handle to an existing address vector.\r
+\r
+ RETURN VALUES\r
+ IB_SUCCESS\r
+ The address vector was successfully destroyed.\r
+\r
+ IB_INVALID_AV_HANDLE\r
+ The address vector handle was invalid.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This routine destroys an existing address vector.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo104">ib_create_av</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo116">[Functions]<a name="Access20Layer2fib5fdestroy5fcq">\r
+Access Layer/ib_destroy_cq</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_destroy_cq</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Destroys a completion queue. Once destroyed, no further access to the\r
+ completion queue is possible.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_EXPORT <a href="./ib_types_h.html#robo49">ib_api_status_t</a> AL_API\r
+<strong>ib_destroy_cq</strong>(\r
+ IN const ib_cq_handle_t h_cq,\r
+ IN const <a href="#robo177">ib_pfn_destroy_cb_t</a> pfn_destroy_cb OPTIONAL );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_qp\r
+ [in] A handle to an existing completion queue.\r
+\r
+ pfn_destroy_cb\r
+ [in] A user-provided callback that is invoked after the\r
+ completion queue has been successfully destroyed.\r
+\r
+ RETURN VALUES\r
+ IB_SUCCESS\r
+ The destroy request was registered.\r
+\r
+ IB_INVALID_CQ_HANDLE\r
+ The completion queue handle was invalid.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This call destroys an existing completion queue. Since callbacks may be\r
+ outstanding against the completion queue at the time the destroy operation\r
+ is invoked, the this call operates asynchronously. The user will be\r
+ notified through a callback once the destroy operation completes,\r
+ indicating that no additional callbacks will be invoked for the specified\r
+ completion queue.\r
+\r
+ If there are still queue pairs associated with the completion queue when\r
+ this function is invoked, the destroy operation will fail with status\r
+ IB_RESOURCE_BUSY.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo105">ib_create_cq</a>, <a href="#robo177">ib_pfn_destroy_cb_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo117">[Functions]<a name="Access20Layer2fib5fdestroy5fioc">\r
+Access Layer/ib_destroy_ioc</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_destroy_ioc</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Destroys an instance of an I/O controller.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_EXPORT <a href="./ib_types_h.html#robo49">ib_api_status_t</a> AL_API\r
+<strong>ib_destroy_ioc</strong>(\r
+ IN const ib_ioc_handle_t h_ioc );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_ioc\r
+ [in] A handle to an existing I/O controller.\r
+\r
+ RETURN VALUES\r
+ IB_SUCCESS\r
+ The I/O controller was successfully destroyed.\r
+\r
+ IB_INVALID_HANDLE\r
+ The I/O controller handle was invalid.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> Once an I/O controller is destroyed, it is no longer reported by the\r
+ local device manager as an exported device. This routine automatically\r
+ removes all services associated with the controller.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo106">ib_create_ioc</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo118">[Functions]<a name="Access20Layer2fib5fdestroy5fmad5fpool">\r
+Access Layer/ib_destroy_mad_pool</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_destroy_mad_pool</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Destroys a MAD pool and all associated resources.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_EXPORT <a href="./ib_types_h.html#robo49">ib_api_status_t</a> AL_API\r
+<strong>ib_destroy_mad_pool</strong>(\r
+ IN const ib_pool_handle_t h_pool );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_pool\r
+ [in] A handle to a MAD pool allocated through the <a href="#robo107">ib_create_mad_pool</a>\r
+ routine.\r
+\r
+ RETURN VALUES\r
+ IB_SUCCESS\r
+ The MAD pool was successfully destroyed.\r
+\r
+ IB_INVALID_HANDLE\r
+ The MAD pool handle was invalid.\r
+\r
+ IB_RESOURCE_BUSY\r
+ One or more MAD elements have not been returned to the MAD pool.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This call destroys a MAD pool and all resources allocated by the pool.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo107">ib_create_mad_pool</a>, <a href="#robo129">ib_get_mad</a>, <a href="#robo204">ib_put_mad</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo119">[Functions]<a name="Access20Layer2fib5fdestroy5fmw">\r
+Access Layer/ib_destroy_mw</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_destroy_mw</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Destroys a memory window.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_EXPORT <a href="./ib_types_h.html#robo49">ib_api_status_t</a> AL_API\r
+<strong>ib_destroy_mw</strong>(\r
+ IN const ib_mw_handle_t h_mw );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_mw\r
+ [in] A handle to an existing memory window.\r
+\r
+ RETURN VALUES\r
+ IB_SUCCESS\r
+ The memory window was successfully destroyed.\r
+\r
+ IB_INVALID_MW_HANDLE\r
+ The memory window handle was invalid.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This routine deallocates a window entry created via a <a href="#robo108">ib_create_mw</a>.\r
+ Once this operation is complete, future accesses to the window will fail.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo108">ib_create_mw</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo120">[Functions]<a name="Access20Layer2fib5fdestroy5fqp">\r
+Access Layer/ib_destroy_qp</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_destroy_qp</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Release a queue pair. Once destroyed, no further access to this\r
+ queue pair is possible.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_EXPORT <a href="./ib_types_h.html#robo49">ib_api_status_t</a> AL_API\r
+<strong>ib_destroy_qp</strong>(\r
+ IN const ib_qp_handle_t h_qp,\r
+ IN const <a href="#robo177">ib_pfn_destroy_cb_t</a> pfn_destroy_cb OPTIONAL );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_qp\r
+ [in] A handle to an existing queue pair.\r
+\r
+ pfn_destroy_cb\r
+ [in] A user-specified callback that is invoked after the queue pair\r
+ has been successfully destroyed.\r
+\r
+ RETURN VALUES\r
+ IB_SUCCESS\r
+ The destroy request was registered.\r
+\r
+ IB_INVALID_QP_HANDLE\r
+ The queue pair handle was invalid.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This call destroys an existing queue pair. Since callbacks may be\r
+ outstanding against the queue pair at the time the destroy operation is\r
+ invoked, the this call operates asynchronously. The user will be notified\r
+ through a callback once the destroy operation completes, indicating that\r
+ no additional callbacks will be invoked for the specified queue pair.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo109">ib_create_qp</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo121">[Definitions]<a name="Access20Layer2fib5fdevice5fattr5fmask5ft">\r
+Access Layer/ib_device_attr_mask_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_device_attr_mask_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Used to specify desired attributes of a device or port.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>#define IB_DEV_PORT_ACTIVE 0x1\r
+</pre>\r
+</span><p><strong>VALUES</strong></p>\r
+<span class="VALUES"><pre> IB_DEV_PORT_ACTIVE\r
+ Specifies that a port state should be active. Applies only to port\r
+ GUIDs.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo128">ib_get_guid</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo122">[Structures]<a name="Access20Layer2fib5fdgrm5finfo5ft">\r
+Access Layer/ib_dgrm_info_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_dgrm_info_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Information specified when initializing a datagram queue pair before its\r
+ first use.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef struct _ib_dgrm_info\r
+{\r
+ <a href="./ib_types_h.html#robo895">ib_net64_t</a> port_guid;\r
+ uint32_t qkey;\r
+ uint16_t pkey_index;\r
+\r
+} <strong>ib_dgrm_info_t</strong>;\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> port_guid\r
+ Specifies the port that the datagram service will use. This field\r
+ applies only to IB_QPT_UNRELIABLE_DGRM and IB_QPT_MAD QP types.\r
+\r
+ qkey\r
+ Specifies the qkey that the queue pair will use. Incoming messages\r
+ must have a matching qkey for the message to be accepted by the\r
+ receiving QP.\r
+\r
+ pkey_index\r
+ Specifies the pkey associated with this queue pair.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo140">ib_init_dgrm_svc</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo123">[Structures]<a name="Access20Layer2fib5fdrep5fpdata5ft">\r
+Access Layer/ib_drep_pdata_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_drep_pdata_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> User data sent as part of a reply to a disconnection request.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef union _ib_drep_pdata\r
+{\r
+ uint8_t data[IB_DREP_PDATA_SIZE];\r
+\r
+} <strong>ib_drep_pdata_t</strong>;\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> ib_cm_data_sizes_t\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo124">[Structures]<a name="Access20Layer2fib5fdreq5fpdata5ft">\r
+Access Layer/ib_dreq_pdata_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_dreq_pdata_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> User data sent as part of a disconnection request.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef union _ib_dreq_pdata\r
+{\r
+ uint8_t data[IB_DREQ_PDATA_SIZE];\r
+\r
+} <strong>ib_dreq_pdata_t</strong>;\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> ib_cm_data_sizes_t\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo125">[Functions]<a name="Access20Layer2fib5fforce5fapm">\r
+Access Layer/ib_force_apm</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_force_apm</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> This routine indicates that a queue pair should immediately migrate to its\r
+ alternate path. All future data transfers will occur over the new path.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_EXPORT <a href="./ib_types_h.html#robo49">ib_api_status_t</a> AL_API\r
+<strong>ib_force_apm</strong>(\r
+ IN const ib_qp_handle_t h_qp );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_qp\r
+ [in] A handle to the queue pair to migrate.\r
+\r
+ RETURN VALUES\r
+ IB_SUCCESS\r
+ The queue pair or end-to-end context was successfully modified.\r
+\r
+ IB_INVALID_PARAMETER\r
+ Neither or both of the queue pair or the end-to-end context handles\r
+ were valid.\r
+\r
+ IB_INVALID_QP_HANDLE\r
+ The queue pair handle was invalid.\r
+\r
+ IB_INSUFFICIENT_RESOURCES\r
+ There were insufficient resources currently available on the channel\r
+ adapter to register the modify the queue pair or end-to-end context.\r
+\r
+ IB_UNSUPPORTED\r
+ The requested modification was not supported.\r
+\r
+ IB_INVALID_QP_STATE\r
+ The queue pair was in an invalid state for the requested operation.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> For this routine to operate correctly, the specified queue pair must have\r
+ an existing alternate path loaded. If an alternate path is not loaded, or\r
+ has not yet been armed, this call will fail.\r
+\r
+ Use of this call results in additional data transfers that occur on the\r
+ given queue pair using the alternate path. Once this call completes, a\r
+ new alternate path may be loaded using the <a href="#robo82">ib_cm_lap</a> call.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo82">ib_cm_lap</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo126">[Functions]<a name="Access20Layer2fib5fget5fca5fby5fgid">\r
+Access Layer/ib_get_ca_by_gid</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_get_ca_by_gid</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Returns the GUID of a channel adapter contain the given port GID.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_EXPORT <a href="./ib_types_h.html#robo49">ib_api_status_t</a> AL_API\r
+<strong>ib_get_ca_by_gid</strong>(\r
+ IN ib_al_handle_t h_al,\r
+ IN const <a href="./ib_types_h.html#robo856">ib_gid_t</a>* const p_gid,\r
+ OUT <a href="./ib_types_h.html#robo895">ib_net64_t</a>* const p_ca_guid );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_al\r
+ [in] A handle to an opened instance of the access layer.\r
+\r
+ p_gid\r
+ [in] A port GID.\r
+\r
+ p_ca_guid\r
+ [out] A GUID to the CA that contains the port matching the user-\r
+ specified GID.\r
+\r
+ RETURN VALUES\r
+ IB_SUCCESS\r
+ The operation was successful.\r
+\r
+ IB_INVALID_AL_HANDLE\r
+ The access layer handle was invalid.\r
+\r
+ IB_INVALID_PARAMETER\r
+ A reference to the port GID or CA GUID was not provided.\r
+\r
+ IB_INSUFFICIENT_MEMORY\r
+ There was insufficient memory to perform the operation.\r
+\r
+ IB_NOT_FOUND\r
+ No channel adapters in the system contain the specifed port GID.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This routine returns a CA GUID that contains the user-specified port GID.\r
+ If no channel adapters in the system contain the port GID, the call will\r
+ return IB_NOT_FOUND.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo163">ib_open_al</a>, <a href="#robo164">ib_open_ca</a>, <a href="#robo127">ib_get_ca_guids</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo127">[Functions]<a name="Access20Layer2fib5fget5fca5fguids">\r
+Access Layer/ib_get_ca_guids</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_get_ca_guids</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Returns a list of GUIDS for all channel adapter currently available in\r
+ the system.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_EXPORT <a href="./ib_types_h.html#robo49">ib_api_status_t</a> AL_API\r
+<strong>ib_get_ca_guids</strong>(\r
+ IN ib_al_handle_t h_al,\r
+ OUT <a href="./ib_types_h.html#robo895">ib_net64_t</a>* const p_guid_array OPTIONAL,\r
+ IN OUT size_t* const p_guid_cnt );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_al\r
+ [in] A handle to an opened instance of the access layer.\r
+\r
+ p_guid_array\r
+ [out] An array of GUIDs provided by the user and filled out by the\r
+ access layer. If this parameter is NULL, the access layer will return\r
+ the number of entries in the array necessary to retrieve the GUID list.\r
+\r
+ p_guid_cnt\r
+ [in/out] On input, this specifies the number of entries in the\r
+ GUID array.\r
+\r
+ On output, the access layer will set this to the number of valid\r
+ entries in the p_guid_array or the minimum number of entries needed\r
+ in the GUID array in order to return all channel adapter GUIDs.\r
+\r
+ RETURN VALUES\r
+ IB_SUCCESS\r
+ The operation was successful.\r
+\r
+ IB_INVALID_AL_HANDLE\r
+ The access layer handle was invalid.\r
+\r
+ IB_INVALID_PARAMETER\r
+ A reference to the GUID count was not provided.\r
+\r
+ IB_INSUFFICIENT_MEMORY\r
+ There was insufficient memory to perform the operation.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This routine returns a list of GUIDs for all available channel adapters.\r
+ When called, the access layer will examine p_guid_cnt to determine the\r
+ number of entries available in the p_guid_array. If the count is too\r
+ small, the function will return IB_INSUFFICIENT_MEMORY, and set p_guid_cnt\r
+ to the number of needed entries.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo163">ib_open_al</a>, <a href="#robo164">ib_open_ca</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo128">[Functions]<a name="Access20Layer2fib5fget5fguid">\r
+Access Layer/ib_get_guid</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_get_guid</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Returns a GUID for a device or port that matches the user-specified\r
+ attributes.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_EXPORT <a href="./ib_types_h.html#robo49">ib_api_status_t</a> AL_API\r
+<strong>ib_get_guid</strong>(\r
+ IN ib_al_handle_t h_al,\r
+ IN const uint32_t index,\r
+ IN const <a href="#robo190">ib_pnp_class_t</a> device_type,\r
+ IN const uint64_t attr_mask,\r
+ OUT <a href="./ib_types_h.html#robo895">ib_net64_t</a>* const p_guid );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_al\r
+ [in] A handle to an opened instance of the access layer.\r
+\r
+ index\r
+ [in] Specifies the location of the device or port. Users specify this\r
+ value to iterate through all devices or ports on the system. If set\r
+ to IB_ANY_INDEX, then the first device or port matching the given\r
+ attributes will be returned.\r
+\r
+ device_type\r
+ [in] Indicates the type of device to retrieve the GUID for.\r
+\r
+ attr_mask\r
+ [in] Specifies a set of attributes that the given device or port\r
+ must have for a successful match to occur.\r
+\r
+ p_guid\r
+ [out] On successful return, this parameter will reference the GUID\r
+ of the device or port that contains the specified attributes.\r
+\r
+ RETURN VALUES\r
+ IB_SUCCESS\r
+ The operation was successful.\r
+\r
+ IB_INVALID_AL_HANDLE\r
+ The access layer handle was invalid.\r
+\r
+ IB_INVALID_SETTING\r
+ The specified device type is invalid.\r
+\r
+ IB_INVALID_PARAMETER\r
+ No p_guid parameter was specified.\r
+\r
+ IB_NO_MATCH\r
+ The device or port at the specified index does not have the given\r
+ attributes.\r
+\r
+ IB_INVALID_INDEX\r
+ No device or port exists for the specified index.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This routine returns a GUID for a device or port that matches the\r
+ user-specified attributes. If index is IB_ANY_INDEX, then the first\r
+ device or port matching the given attributes is returned if a match is\r
+ found. If no match is found, the call will return IB_NO_MATCH. If a\r
+ valid index is specified, then the device or port located at that index\r
+ will be examined to see if it has the given attributes. If the device\r
+ or port with those attributes is found, its GUID is returned.\r
+\r
+ This routine may be used to locate a device or port with a given set\r
+ of attributes, or iterate through all devices or ports on the system.\r
+ The specified index values are set by the access layer, but the index\r
+ associated with a GUID may change if devices are removed from the system.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo163">ib_open_al</a>, <a href="#robo190">ib_pnp_class_t</a>, <a href="#robo127">ib_get_ca_guids</a>, <a href="#robo214">ib_query_ca_by_guid</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo129">[Functions]<a name="Access20Layer2fib5fget5fmad">\r
+Access Layer/ib_get_mad</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_get_mad</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Obtains a MAD element from the pool.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_EXPORT <a href="./ib_types_h.html#robo49">ib_api_status_t</a> AL_API\r
+<strong>ib_get_mad</strong>(\r
+ IN const ib_pool_key_t pool_key,\r
+ IN const size_t buf_size,\r
+ OUT <a href="#robo150">ib_mad_element_t</a> **pp_mad_element );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> pool_key\r
+ [in] Key for the pool to obtain a MAD element for the desired\r
+ protection domain.\r
+\r
+ buf_size\r
+ [in] The size of the buffer referenced by the MAD element.\r
+\r
+ pp_mad_element\r
+ [out] Upon successful completion of this call, this references\r
+ the returned MAD element.\r
+\r
+ RETURN VALUES\r
+ IB_SUCCESS\r
+ The MAD element was successfully retrieved from the MAD pool.\r
+\r
+ IB_INVALID_PARAMETER\r
+ The MAD pool key was invalid or a reference to the MAD element\r
+ pointer was not provided.\r
+\r
+ IB_INSUFFICIENT_MEMORY\r
+ There was insufficient memory to obtain the MAD element.\r
+\r
+ IB_INSUFFICIENT_RESOURCES\r
+ There were insufficient resources currently available on the channel\r
+ adapter to grow and register the MAD pool.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This function obtains a MAD element containing a data segment\r
+ that references a data buffer for the given pool key. The data buffer\r
+ referenced by the MAD element is zeroed before being returned to the\r
+ user.\r
+\r
+ It is recommended that elements retrieved from a MAD pool for use on\r
+ the receive queue of a MAD QP have a buffer size of 256 bytes.\r
+\r
+ For MADs being sent, buf_size should be set to the size of the relevant\r
+ data sent as part of the MAD, and should not include any padding needed\r
+ to make the MAD size a multiple of 256 bytes. For most MADs, buf_size\r
+ may be set equal to the size of the MAD header plus the amount of user\r
+ data transfered as part of the MAD.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo204">ib_put_mad</a>, <a href="#robo247">ib_send_mad</a>, <a href="#robo150">ib_mad_element_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo130">[Functions]<a name="Access20Layer2fib5fget5fmad5fbuf">\r
+Access Layer/ib_get_mad_buf</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_get_mad_buf</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Returns a pointer to the MAD buffer associated with a MAD element.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>#pragma warning(push)\r
+#pragma warning(disable: 4244 ) \r
+AL_INLINE void* AL_API\r
+<strong>ib_get_mad_buf</strong>(\r
+ IN const <a href="#robo150">ib_mad_element_t</a>* const p_mad_element )\r
+{\r
+ CL_ASSERT( p_mad_element );\r
+ return( p_mad_element->p_mad_buf );\r
+}\r
+#pragma warning (pop)\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_mad_element\r
+ [in] A pointer to a MAD element.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> Returns a pointer to the MAD buffer associated with a MAD element.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo150">ib_mad_element_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo131">[Functions]<a name="Access20Layer2fib5fget5fport5fby5fgid">\r
+Access Layer/ib_get_port_by_gid</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_get_port_by_gid</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Returns the GUID of a port that contains the given port GID.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_EXPORT <a href="./ib_types_h.html#robo49">ib_api_status_t</a> AL_API\r
+<strong>ib_get_port_by_gid</strong>(\r
+ IN ib_al_handle_t h_al,\r
+ IN const <a href="./ib_types_h.html#robo856">ib_gid_t</a>* const p_gid,\r
+ OUT <a href="./ib_types_h.html#robo895">ib_net64_t</a>* const p_port_guid );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_al\r
+ [in] A handle to an opened instance of the access layer.\r
+\r
+ p_gid\r
+ [in] A port GID.\r
+\r
+ p_port_guid\r
+ [out] A GUID to the port that contains the matching user-\r
+ specified GID.\r
+\r
+ RETURN VALUES\r
+ IB_SUCCESS\r
+ The operation was successful.\r
+\r
+ IB_INVALID_AL_HANDLE\r
+ The access layer handle was invalid.\r
+\r
+ IB_INVALID_PARAMETER\r
+ A reference to the port GID or port GUID was not provided.\r
+\r
+ IB_INSUFFICIENT_MEMORY\r
+ There was insufficient memory to perform the operation.\r
+\r
+ IB_NOT_FOUND\r
+ No channel adapters in the system contain the specifed port GID.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This routine returns a port GUID that contains the user-specified port GID.\r
+ If no channel adapters in the system contain the port GID, the call will\r
+ return IB_NOT_FOUND.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo163">ib_open_al</a>, <a href="#robo164">ib_open_ca</a>, <a href="#robo127">ib_get_ca_guids</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo132">[Functions]<a name="Access20Layer2fib5fget5fquery5fnode5frec">\r
+Access Layer/ib_get_query_node_rec</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_get_query_node_rec</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Retrieves a node record result from a MAD returned by a call to\r
+ <a href="#robo211">ib_query</a>().\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_INLINE ib_node_record_t* AL_API\r
+<strong>ib_get_query_node_rec</strong>(\r
+ IN <a href="#robo150">ib_mad_element_t</a> *p_result_mad,\r
+ IN uint32_t result_index )\r
+{\r
+ <a href="./ib_types_h.html#robo953">ib_sa_mad_t</a> *p_sa_mad;\r
+\r
+ CL_ASSERT( p_result_mad );\r
+ p_sa_mad = (<a href="./ib_types_h.html#robo953">ib_sa_mad_t</a>*)<a href="#robo130">ib_get_mad_buf</a>( p_result_mad );\r
+ CL_ASSERT( p_sa_mad && p_sa_mad->attr_id == <a href="./ib_types_h.html#robo737">IB_MAD_ATTR_NODE_RECORD</a> );\r
+\r
+ return( (ib_node_record_t*)<a href="#robo135">ib_get_query_result</a>( p_result_mad,\r
+ result_index ) );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_result_mad\r
+ [in] This is a reference to the MAD returned as a result of the\r
+ query.\r
+\r
+ result_index\r
+ [in] A zero-based index indicating which result to return.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This call returns a pointer to the start of a node record result from\r
+ a call to <a href="#robo211">ib_query</a>().\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo219">ib_query_rec_t</a>, <a href="#robo150">ib_mad_element_t</a>, <a href="#robo135">ib_get_query_result</a>, ib_node_record_t\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo133">[Functions]<a name="Access20Layer2fib5fget5fquery5fpath5frec">\r
+Access Layer/ib_get_query_path_rec</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_get_query_path_rec</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Retrieves a path record result from a MAD returned by a call to\r
+ <a href="#robo211">ib_query</a>().\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_INLINE <a href="./ib_types_h.html#robo927">ib_path_rec_t</a>* AL_API\r
+<strong>ib_get_query_path_rec</strong>(\r
+ IN <a href="#robo150">ib_mad_element_t</a> *p_result_mad,\r
+ IN uint32_t result_index )\r
+{\r
+ <a href="./ib_types_h.html#robo953">ib_sa_mad_t</a> *p_sa_mad;\r
+\r
+ CL_ASSERT( p_result_mad );\r
+ p_sa_mad = (<a href="./ib_types_h.html#robo953">ib_sa_mad_t</a>*)<a href="#robo130">ib_get_mad_buf</a>( p_result_mad );\r
+ CL_ASSERT( p_sa_mad && p_sa_mad->attr_id == <a href="./ib_types_h.html#robo740">IB_MAD_ATTR_PATH_RECORD</a> );\r
+\r
+ return( (<a href="./ib_types_h.html#robo927">ib_path_rec_t</a>*)<a href="#robo135">ib_get_query_result</a>( p_result_mad, result_index ) );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_result_mad\r
+ [in] This is a reference to the MAD returned as a result of the\r
+ query.\r
+\r
+ result_index\r
+ [in] A zero-based index indicating which result to return.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This call returns a pointer to the start of a path record result from\r
+ a call to <a href="#robo211">ib_query</a>().\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo219">ib_query_rec_t</a>, <a href="#robo150">ib_mad_element_t</a>, <a href="#robo135">ib_get_query_result</a>, <a href="./ib_types_h.html#robo927">ib_path_rec_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo134">[Functions]<a name="Access20Layer2fib5fget5fquery5fportinfo5frec">\r
+Access Layer/ib_get_query_portinfo_rec</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_get_query_portinfo_rec</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Retrieves a port info record result from a MAD returned by a call to\r
+ <a href="#robo211">ib_query</a>().\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_INLINE ib_portinfo_record_t* AL_API\r
+<strong>ib_get_query_portinfo_rec</strong>(\r
+ IN <a href="#robo150">ib_mad_element_t</a> *p_result_mad,\r
+ IN uint32_t result_index )\r
+{\r
+ <a href="./ib_types_h.html#robo953">ib_sa_mad_t</a> *p_sa_mad;\r
+\r
+ CL_ASSERT( p_result_mad );\r
+ p_sa_mad = (<a href="./ib_types_h.html#robo953">ib_sa_mad_t</a>*)<a href="#robo130">ib_get_mad_buf</a>( p_result_mad );\r
+ CL_ASSERT( p_sa_mad && p_sa_mad->attr_id == <a href="./ib_types_h.html#robo746">IB_MAD_ATTR_PORTINFO_RECORD</a> );\r
+\r
+ return( (ib_portinfo_record_t*)<a href="#robo135">ib_get_query_result</a>( p_result_mad,\r
+ result_index ) );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_result_mad\r
+ [in] This is a reference to the MAD returned as a result of the\r
+ query.\r
+\r
+ result_index\r
+ [in] A zero-based index indicating which result to return.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This call returns a pointer to the start of a port info record result from\r
+ a call to <a href="#robo211">ib_query</a>().\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo219">ib_query_rec_t</a>, <a href="#robo150">ib_mad_element_t</a>, <a href="#robo135">ib_get_query_result</a>, ib_portinfo_record_t\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo135">[Functions]<a name="Access20Layer2fib5fget5fquery5fresult">\r
+Access Layer/ib_get_query_result</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_get_query_result</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Retrieves a result structure from a MAD returned by a call to <a href="#robo211">ib_query</a>().\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_INLINE void* AL_API\r
+<strong>ib_get_query_result</strong>(\r
+ IN <a href="#robo150">ib_mad_element_t</a> *p_result_mad,\r
+ IN uint32_t result_index )\r
+{\r
+ <a href="./ib_types_h.html#robo953">ib_sa_mad_t</a> *p_sa_mad;\r
+\r
+ CL_ASSERT( p_result_mad );\r
+ p_sa_mad = (<a href="./ib_types_h.html#robo953">ib_sa_mad_t</a>*)<a href="#robo130">ib_get_mad_buf</a>( p_result_mad );\r
+ CL_ASSERT( p_sa_mad );\r
+ CL_ASSERT( ib_get_attr_size( p_sa_mad->attr_offset ) * (result_index + 1) +\r
+ IB_SA_MAD_HDR_SIZE <= p_result_mad->size );\r
+\r
+ return( p_sa_mad->data +\r
+ (ib_get_attr_size( p_sa_mad->attr_offset ) * result_index) );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_result_mad\r
+ [in] This is a reference to the MAD returned as a result of the\r
+ query.\r
+\r
+ result_index\r
+ [in] A zero-based index indicating which result to return.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This call returns a pointer to the start of a result structure from a call\r
+ to <a href="#robo211">ib_query</a>(). The type of result structure must be known to the user\r
+ either through the user's context or the query_type returned as part of\r
+ the <a href="#robo219">ib_query_rec_t</a> structure.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo219">ib_query_rec_t</a>, <a href="#robo150">ib_mad_element_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo136">[Functions]<a name="Access20Layer2fib5fget5fquery5fsvc5frec">\r
+Access Layer/ib_get_query_svc_rec</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_get_query_svc_rec</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Retrieves a service record result from a MAD returned by a call to\r
+ <a href="#robo211">ib_query</a>().\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_INLINE ib_service_record_t* AL_API\r
+<strong>ib_get_query_svc_rec</strong>(\r
+ IN <a href="#robo150">ib_mad_element_t</a> *p_result_mad,\r
+ IN uint32_t result_index )\r
+{\r
+ <a href="./ib_types_h.html#robo953">ib_sa_mad_t</a> *p_sa_mad;\r
+\r
+ CL_ASSERT( p_result_mad );\r
+ p_sa_mad = (<a href="./ib_types_h.html#robo953">ib_sa_mad_t</a>*)<a href="#robo130">ib_get_mad_buf</a>( p_result_mad );\r
+ CL_ASSERT( p_sa_mad && p_sa_mad->attr_id == <a href="./ib_types_h.html#robo750">IB_MAD_ATTR_SERVICE_RECORD</a> );\r
+\r
+ return( (ib_service_record_t*)<a href="#robo135">ib_get_query_result</a>( p_result_mad,\r
+ result_index ) );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_result_mad\r
+ [in] This is a reference to the MAD returned as a result of the\r
+ query.\r
+\r
+ result_index\r
+ [in] A zero-based index indicating which result to return.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This call returns a pointer to the start of a service record result from\r
+ a call to <a href="#robo211">ib_query</a>().\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo219">ib_query_rec_t</a>, <a href="#robo150">ib_mad_element_t</a>, <a href="#robo135">ib_get_query_result</a>, ib_service_record_t\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo137">[Functions]<a name="Access20Layer2fib5fget5fspl5fqp">\r
+Access Layer/ib_get_spl_qp</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_get_spl_qp</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Create a special QP or QP alias. This call provides access to queue\r
+ pairs 0 and 1, and the raw queue pair types.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_EXPORT <a href="./ib_types_h.html#robo49">ib_api_status_t</a> AL_API\r
+<strong>ib_get_spl_qp</strong>(\r
+ IN const ib_pd_handle_t h_pd,\r
+ IN const <a href="./ib_types_h.html#robo895">ib_net64_t</a> port_guid,\r
+ IN const <a href="./ib_types_h.html#robo206">ib_qp_create_t</a>* const p_qp_create,\r
+ IN const void* const qp_context,\r
+ IN const <a href="#robo178">ib_pfn_event_cb_t</a> pfn_qp_event_cb OPTIONAL,\r
+ OUT ib_pool_key_t* const p_pool_key OPTIONAL,\r
+ OUT ib_qp_handle_t* const ph_qp );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_pd\r
+ [in] This is a handle to a protection domain associated with the queue\r
+ pair. This must be a protection domain alias for aliased QP types.\r
+\r
+ port_guid\r
+ [in] The port GUID that the special QP will be associated with.\r
+\r
+ p_qp_create\r
+ [in] Attributes necessary to allocate and initialize the queue pair.\r
+\r
+ qp_context\r
+ [in] A user-specified context information associated with the\r
+ queue pair.\r
+\r
+ pfn_qp_ervent_cb\r
+ [in] User-specified error callback routine invoked after an\r
+ asynchronous event has occurred on the queue pair.\r
+\r
+ p_pool_key\r
+ [in] A key to a pool of MAD elements that are used to send MADs.\r
+ This key is only valid for aliased QP types.\r
+\r
+ ph_qp\r
+ [out] Upon successful completion of this call, this references a\r
+ handle to the newly created queue pair.\r
+\r
+ RETURN VALUES\r
+ IB_SUCCESS\r
+ The queue pair was successfully created.\r
+\r
+ IB_INVALID_PD_HANDLE\r
+ The protection domain to associate with the queue pair was invalid.\r
+\r
+ IB_INVALID_PORT\r
+ The port number supplied was invalid for the given channel adapter.\r
+\r
+ IB_INVALID_PARAMETER\r
+ A reference to the queue pair attributes or handle was not provided.\r
+\r
+ IB_INVALID_PERMISSION\r
+ The calling process does not have sufficient privilege to create the\r
+ requested queue pair type.\r
+\r
+ IB_INSUFFICIENT_MEMORY\r
+ There was insufficient memory to create the queue pair.\r
+\r
+ IB_INSUFFICIENT_RESOURCES\r
+ There were insufficient resources currently available on the channel\r
+ adapter to create the queue pair.\r
+\r
+ IB_INVALID_CQ_HANDLE\r
+ The send or receive completion queue to associate with the queue pair\r
+ was invalid.\r
+\r
+ IB_INVALID_SETTING\r
+ The specified queue pair type was invalid.\r
+\r
+ IB_UNSUPPORTED\r
+ The specified queue pair type was not supported by the channel adapter.\r
+\r
+ IB_INVALID_MAX_WRS\r
+ The requested maximum send or receive work request depth could not be\r
+ supported.\r
+\r
+ IB_INVALID_MAX_SGE\r
+ The requested maximum number of scatter-gather entries for the send or\r
+ receive queue could not be supported.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This routine allocates a queue pair with the specified attributes. If\r
+ the queue pair cannot be allocated, an error is returned. When creating\r
+ the queue pair, users associate a context with the queue pair. This\r
+ context is returned to the user through the asynchronous event callback\r
+ if an event occurs.\r
+\r
+ This routine is used to create queue pairs of type:\r
+\r
+ IB_QPT_QP0\r
+ IB_QPT_QP1\r
+ IB_QPT_RAW_IPV6\r
+ IB_QPT_RAW_ETHER\r
+ IB_QPT_QP0_ALIAS\r
+ IB_QPT_QP1_ALIAS\r
+\r
+ Callers of <strong>ib_get_spl_qp</strong> should call <a href="#robo140">ib_init_dgrm_svc</a> if the queue pair is\r
+ of type IB_QPT_QP0, IB_QPT_QP1, IB_QPT_RAW_IPV6, IB_QPT_RAW_ETHER before\r
+ sending or receiving data. MADs may be sent on aliased QPs on the\r
+ successful return of this routine.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo218">ib_query_qp</a>, <a href="#robo158">ib_modify_qp</a>, <a href="#robo120">ib_destroy_qp</a>, <a href="#robo129">ib_get_mad</a>\r
+ <a href="#robo140">ib_init_dgrm_svc</a>, <a href="./ib_types_h.html#robo206">ib_qp_create_t</a>, <a href="#robo178">ib_pfn_event_cb_t</a>, <a href="./ib_types_h.html#robo205">ib_qp_attr_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo138">[Structures]<a name="Access20Layer2fib5fgid5fpair5ft">\r
+Access Layer/ib_gid_pair_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_gid_pair_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Source and destination GIDs.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef struct _ib_gid_pair\r
+{\r
+ <a href="./ib_types_h.html#robo856">ib_gid_t</a> src_gid;\r
+ <a href="./ib_types_h.html#robo856">ib_gid_t</a> dest_gid;\r
+\r
+} <strong>ib_gid_pair_t</strong>;\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> src_gid\r
+ Source GID of a path.\r
+\r
+ dest_gid\r
+ Destination GID of a path.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This structure is used to describe the endpoints of a path.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="./ib_types_h.html#robo856">ib_gid_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo139">[Structures]<a name="Access20Layer2fib5fguid5fpair5ft">\r
+Access Layer/ib_guid_pair_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_guid_pair_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Source and destination GUIDs. These may be port or channel adapter\r
+ GUIDs, depending on the context in which this structure is used.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef struct _ib_guid_pair\r
+{\r
+ <a href="./ib_types_h.html#robo895">ib_net64_t</a> src_guid;\r
+ <a href="./ib_types_h.html#robo895">ib_net64_t</a> dest_guid;\r
+\r
+} <strong>ib_guid_pair_t</strong>;\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> src_guid\r
+ Source GUID of a path.\r
+\r
+ dest_guid\r
+ Destination GUID of a path.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This structure is used to describe the endpoints of a path. The given\r
+ GUID pair may belong to either ports or channel adapters.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> ib_guid_t\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo140">[Functions]<a name="Access20Layer2fib5finit5fdgrm5fsvc">\r
+Access Layer/ib_init_dgrm_svc</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_init_dgrm_svc</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Initializes a datagram queue pair for use.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_EXPORT <a href="./ib_types_h.html#robo49">ib_api_status_t</a> AL_API\r
+<strong>ib_init_dgrm_svc</strong>(\r
+ IN const ib_qp_handle_t h_qp,\r
+ IN const <a href="#robo122">ib_dgrm_info_t</a>* const p_dgrm_info OPTIONAL );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_qp\r
+ [in] A handle to an existing queue pair.\r
+\r
+ p_dgrm_info\r
+ [in] References information needed to configure the queue pair for\r
+ use sending and receiving datagrams. This field is optional for\r
+ IB_QPT_QP0, IB_QPT_QP1 queue pair types and is not used for\r
+ IB_QPT_RAW_IPV6, and IB_QPT_RAW_ETHER queue pair types.\r
+\r
+ RETURN VALUES\r
+ IB_SUCCESS\r
+ The datagram queue pair was initialized successfully.\r
+\r
+ IB_INVALID_QP_HANDLE\r
+ The datagram queue pair handle was invalid.\r
+\r
+ IB_INVALID_PARAMETER\r
+ The queue pair handle was not created as a datagram queue pair type\r
+ or a reference to the datagram service information was not provided.\r
+\r
+ IB_INVALID_QP_STATE\r
+ The queue pair was in an invalid state for the requested operation.\r
+\r
+ IB_INSUFFICIENT_MEMORY\r
+ There was insufficient memory to initialize the datagram queue pair.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This call binds the queue pair to a given port and transitions its state\r
+ to ready to send and receive data. A queue pair must be initialized\r
+ before it can be used to send and receive datagrams.\r
+\r
+ This routine is used to initialize queue pairs of type:\r
+\r
+ IB_QPT_QP0\r
+ IB_QPT_QP1\r
+ IB_QPT_MAD\r
+ IB_QPT_RAW_IPV6\r
+ IB_QPT_RAW_ETHER\r
+ IB_QPT_UNRELIABLE_DGRM\r
+\r
+ For IB_QPT_MAD type queue pairs, receive buffers are automatically posted\r
+ by the access layer, however, users must call <a href="#robo228">ib_reg_mad_svc</a> to receive\r
+ MADs. Received MAD elements must be returned to the access layer through\r
+ the <a href="#robo204">ib_put_mad</a>() call.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo109">ib_create_qp</a>, <a href="#robo137">ib_get_spl_qp</a>, <a href="#robo122">ib_dgrm_info_t</a>, <a href="#robo228">ib_reg_mad_svc</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo142">[Functions]<a name="Access20Layer2fib5fjoin5fmcast">\r
+Access Layer/ib_join_mcast</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_join_mcast</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Attaches a queue pair to a multicast group.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_EXPORT <a href="./ib_types_h.html#robo49">ib_api_status_t</a> AL_API\r
+<strong>ib_join_mcast</strong>(\r
+ IN const ib_qp_handle_t h_qp,\r
+ IN const <a href="#robo154">ib_mcast_req_t</a>* const p_mcast_req );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_qp\r
+ [in] A handle to an unreliable datagram queue pair that will join the\r
+ multicast group.\r
+\r
+ p_mcast_req\r
+ [in] Specifies the multicast group to join.\r
+\r
+ RETURN VALUES\r
+ IB_SUCCESS\r
+ The join multicast group request has been initiated.\r
+\r
+ IB_INVALID_QP_HANDLE\r
+ The queue pair handle was invalid.\r
+\r
+ IB_INVALID_PARAMETER\r
+ A reference to the multicast group request information was not\r
+ provided.\r
+\r
+ IB_INVALID_SERVICE_TYPE\r
+ The queue pair configuration does not support this type of service.\r
+\r
+ IB_INSUFFICIENT_MEMORY\r
+ There was insufficient memory to join the multicast group.\r
+\r
+ IB_INVALID_GUID\r
+ No port was found for the port_guid specified in the request.\r
+\r
+ IB_INSUFFICIENT_RESOURCES\r
+ There were insufficient resources currently available on the channel\r
+ adapter to perform the operation.\r
+\r
+ IB_INVALID_PKEY\r
+ The pkey specified in the multicast join request does not match the\r
+ pkey of the queue pair.\r
+\r
+ IB_INVALID_PORT\r
+ The port GUID specified in the multicast join request does not match\r
+ the port of the queue pair.\r
+\r
+ IB_ERROR\r
+ An error occurred while performing the multicast group join operation.\r
+\r
+ IB_INSUFFICIENT_RESOURCES\r
+ There were insufficient resources currently available to complete\r
+ the request.\r
+\r
+ IB_INSUFFICIENT_MEMORY\r
+ There was insufficient memory to complete the request.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This routine results in the specified queue pair joining a multicast\r
+ group. If the multicast group does not already exist, it will be created\r
+ at the user's option. Information about the multicast group is returned\r
+ to the user through a callback specified through the p_mcast_req\r
+ parameter.\r
+\r
+ If the specified queue pair is already a member of a multicast group when\r
+ this call is invoked, an error will occur if there are conflicting\r
+ membership requirements. The QP is restricted to being bound to a single\r
+ port_guid and using a single pkey.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo144">ib_leave_mcast</a>, <a href="#robo154">ib_mcast_req_t</a>, <a href="#robo109">ib_create_qp</a>, <a href="#robo140">ib_init_dgrm_svc</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo143">[Structures]<a name="Access20Layer2fib5flap5fpdata5ft">\r
+Access Layer/ib_lap_pdata_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_lap_pdata_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> User data sent as part of a load alternate path message.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef union _ib_lap_pdata\r
+{\r
+ uint8_t data[IB_LAP_PDATA_SIZE];\r
+\r
+} <strong>ib_lap_pdata_t</strong>;\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> ib_cm_data_sizes_t\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo144">[Functions]<a name="Access20Layer2fib5fleave5fmcast">\r
+Access Layer/ib_leave_mcast</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_leave_mcast</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Removes a queue pair from a multicast group.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_EXPORT <a href="./ib_types_h.html#robo49">ib_api_status_t</a> AL_API\r
+<strong>ib_leave_mcast</strong>(\r
+ IN const ib_mcast_handle_t h_mcast,\r
+ IN const <a href="#robo177">ib_pfn_destroy_cb_t</a> pfn_destroy_cb OPTIONAL );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_mcast\r
+ [in] A handle to a joined multicast group.\r
+\r
+ pfn_destroy_cb\r
+ [in] An optional user-specified callback that is invoked after the\r
+ leave request has completed.\r
+\r
+ RETURN VALUES\r
+ IB_SUCCESS\r
+ The leave multicast group request has been initiated.\r
+\r
+ IB_INVALID_MCAST_HANDLE\r
+ The multicast group handle was invalid.\r
+\r
+ IB_ERROR\r
+ An error occurred while performing the multicast group leave operation.\r
+\r
+ IB_INSUFFICIENT_RESOURCES\r
+ There were insufficient resources currently available on the channel\r
+ adapter to perform the operation.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This routine detaches a queue pair from a multicast group and removes\r
+ it as a member of the group with the subnet administrator.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo142">ib_join_mcast</a>, <a href="#robo177">ib_pfn_destroy_cb_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo145">[Structures]<a name="Access20Layer2fib5flid5fpair5ft">\r
+Access Layer/ib_lid_pair_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_lid_pair_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Source and destination LIDs.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef struct _ib_lid_pair\r
+{\r
+ <a href="./ib_types_h.html#robo893">ib_net16_t</a> src_lid;\r
+ <a href="./ib_types_h.html#robo893">ib_net16_t</a> dest_lid;\r
+\r
+} <strong>ib_lid_pair_t</strong>;\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> src_lid\r
+ Source LID of a path.\r
+\r
+ dest_lid\r
+ Destination LID of a path.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This structure is used to describe the endpoints of a path.\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo146">[Structures]<a name="Access20Layer2fib5flisten5ferr5frec5ft">\r
+Access Layer/ib_listen_err_rec_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_listen_err_rec_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Information returned to the user when an error occurs on a listen request.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef struct _ib_listen_err_rec\r
+{\r
+ void* __ptr64 listen_context;\r
+ <a href="./ib_types_h.html#robo49">ib_api_status_t</a> reason;\r
+ ib_listen_handle_t h_cm_listen;\r
+\r
+} <strong>ib_listen_err_rec_t</strong>;\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> listen_context\r
+ User-defined context information associated with the listen request\r
+ through the <a href="#robo85">ib_cm_listen</a> call.\r
+\r
+ reason\r
+ A status that identifies the reason for error being reported.\r
+\r
+ h_cm_listen\r
+ The handle for the listen request. This handle will match the handle\r
+ returned by <a href="#robo85">ib_cm_listen</a> call. It is provided in case an error event\r
+ occurs before a client's call to <a href="#robo85">ib_cm_listen</a> can return.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo179">ib_pfn_listen_err_cb_t</a>, <a href="./ib_types_h.html#robo49">ib_api_status_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo147">[Definitions]<a name="Access20Layer2fib5flisten5finfo5ft">\r
+Access Layer/ib_listen_info_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_listen_info_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> <a href="./ib_types_h.html#robo40">Constants</a> used to specify directed listen requests.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>#define IB_ALL_CAS 0\r
+#define IB_ALL_PORTS 0\r
+#define IB_ALL_LIDS 0\r
+#define IB_ALL_PKEYS 0\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo85">ib_cm_listen</a>, <a href="#robo86">ib_cm_listen_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo149">[Functions]<a name="Access20Layer2fib5flocal5fmad">\r
+Access Layer/ib_local_mad</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_local_mad</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Request that a locally received MAD be processed by the channel adapter\r
+ on which it was received.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_EXPORT <a href="./ib_types_h.html#robo49">ib_api_status_t</a> AL_API\r
+<strong>ib_local_mad</strong>(\r
+ IN const ib_ca_handle_t h_ca,\r
+ IN const uint8_t port_num,\r
+ IN const void* const p_mad_in,\r
+ OUT void* p_mad_out );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_ca\r
+ [in] A handle to the channel adapter that should process the MAD.\r
+ This must be the same adapter that the MAD was received on.\r
+\r
+ port_num\r
+ [in] The port number to which this request is directed.\r
+\r
+ p_mad_in\r
+ [in] Pointer to a management datagram (MAD) structure containing\r
+ the command to be processed.\r
+\r
+ p_mad_out\r
+ [out] References a MAD that should contain the response to the\r
+ received input MAD specified through the p_mad_in parameter.\r
+\r
+ RETURN VALUES\r
+ IB_SUCCESS\r
+ The local MAD was processed successfully.\r
+\r
+ IB_INVALID_CA_HANDLE\r
+ The channel adapter handle was invalid.\r
+\r
+ IB_INVALID_PORT\r
+ The port number was invalid.\r
+\r
+ IB_INVALID_PARAMETER\r
+ A reference to the MAD input or MAD output buffer was not provided.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This call is provided to support SMA and GSA implementations above the\r
+ verbs interface on ports that the access layer has disabled. This routine\r
+ is used to perform local operations by the channel adapter. On successful\r
+ return, the provide output MAD should be used when sending a response.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo213">ib_query_ca</a>, <a href="./ib_types_h.html#robo60">ib_ca_attr_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo150">[Structures]<a name="Access20Layer2fib5fmad5felement5ft">\r
+Access Layer/ib_mad_element_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_mad_element_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Information used to submit a work request to a management datagram (MAD)\r
+ queue pair.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef struct _ib_mad_element\r
+{\r
+ struct _ib_mad_element* __ptr64 p_next;\r
+ const void* __ptr64 context1;\r
+ const void* __ptr64 context2;\r
+\r
+ /* Request/completion data. */\r
+ <a href="./ib_types_h.html#robo882">ib_mad_t</a>* __ptr64 p_mad_buf;\r
+ uint32_t size;\r
+ uint32_t immediate_data;\r
+ <a href="./ib_types_h.html#robo894">ib_net32_t</a> remote_qp;\r
+\r
+ /* Send request information. */\r
+ ib_av_handle_t h_av;\r
+ <a href="./ib_types_h.html#robo248">ib_send_opt_t</a> send_opt;\r
+ <a href="./ib_types_h.html#robo894">ib_net32_t</a> remote_qkey;\r
+ boolean_t resp_expected;\r
+ uint32_t timeout_ms;\r
+ uint32_t retry_cnt;\r
+ uint8_t rmpp_version;\r
+\r
+ /* Completion information. */\r
+ <a href="./ib_types_h.html#robo259">ib_wc_status_t</a> status;\r
+ boolean_t grh_valid;\r
+ <a href="./ib_types_h.html#robo859">ib_grh_t</a>* __ptr64 p_grh;\r
+\r
+ /* Completed receive data or send request information if h_av is NULL. */\r
+ uint32_t recv_opt;\r
+ <a href="./ib_types_h.html#robo893">ib_net16_t</a> remote_lid;\r
+ uint8_t remote_sl;\r
+ uint16_t pkey_index;\r
+ uint8_t path_bits;\r
+\r
+ /* Transaction completion data. */\r
+ void* __ptr64 send_context1;\r
+ void* __ptr64 send_context2;\r
+\r
+} <strong>ib_mad_element_t</strong>;\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> p_next\r
+ A pointer used to chain MAD elements together. This value is\r
+ set to NULL to mark the end of the chain.\r
+\r
+ context1\r
+ User-defined context information associated with the datagram.\r
+\r
+ context2\r
+ User-defined context information associated with the datagram.\r
+\r
+ p_buffer\r
+ The local data buffer contain the MAD.\r
+\r
+ size\r
+ The size of the MAD referenced by p_buffer.\r
+\r
+ immediate_data\r
+ 32-bit field sent or received as part of a datagram message.\r
+ This field is valid for send operations if the send_opt\r
+ IB_SEND_OPT_IMMEDIATE flag has been set. This field is valid\r
+ on received datagram completions if the recv_opt\r
+ IB_RECV_OPT_IMMEDIATE flag is set.\r
+\r
+ remote_qp\r
+ Identifies the destination queue pair of a datagram send operation or\r
+ the source queue pair of a received datagram.\r
+\r
+ h_av\r
+ An address vector that specifies the path information used to route\r
+ the outbound datagram to the destination queue pair. This handle may\r
+ be NULL when sending a directed route SMP or if the access layer\r
+ should create the address vector for the user.\r
+\r
+ send_opt\r
+ Optional send control parameters. The following options are valid:\r
+ IB_SEND_OPT_IMMEDIATE and IB_SEND_OPT_SOLICITED. IB_SEND_OPT_FENCE\r
+ is only valid on MAD QPs.\r
+\r
+ remote_qkey\r
+ The qkey for the destination queue pair.\r
+\r
+ resp_expected\r
+ This field is used to indicate that the submitted operation expects\r
+ a response. When set, the access layer will retry this send operation\r
+ until the corresponding response is successfully received, or the\r
+ request times out. Send operations for which a response is expected\r
+ will always be completed by the access layer before the corresponding\r
+ received response.\r
+\r
+ timeout_ms\r
+ Specifies the number of milliseconds to wait for a response to\r
+ a request until retrying or timing out the request. This field is\r
+ ignored if resp_expected is set to FALSE.\r
+\r
+ retry_cnt\r
+ Specifies the number of times that the request will be retried\r
+ before failing the request. This field is ignored if resp_expected\r
+ is set to FALSE.\r
+\r
+ rmpp_version\r
+ Indicates the version of the RMPP protocol to use when sending this\r
+ MAD. For MADs posted to MAD services of type IB_MAD_SVC_DEFAULT,\r
+ setting this field to 0 disables RMPP on user-defined management\r
+ classes or invokes the default RMPP version for well-defined management\r
+ classes, if appropriate. For MADs posted to MAD services of type\r
+ IB_MAD_SVC_RMPP, setting this field to 0 disables RMPP on the sent\r
+ MAD. Note that if the RMPP header exists, but the RMPP protocol is\r
+ not activated for this MAD, the user must ensure that the RMPP header\r
+ has been zeroed. This field is intended to help support backwards\r
+ compatibility.\r
+\r
+ status\r
+ The result of the MAD work request.\r
+\r
+ grh_valid\r
+ A flag indicating whether the p_grh reference is valid.\r
+\r
+ p_grh\r
+ A reference to the global route header information.\r
+\r
+ recv_opt\r
+ Indicates optional fields valid as part of a work request that\r
+ completed on an unreliable datagram queue pair.\r
+\r
+ remote_lid\r
+ The source LID of the received datagram.\r
+\r
+ remote_sl\r
+ The service level used by the source of the received datagram.\r
+\r
+ pkey_index\r
+ This is valid only for IB_QPT_QP1 and IB_QPT_QP1_ALIAS QP types.\r
+ For received datagrams, this field contains the pkey index for\r
+ the source queue pair. For send operations, this field contains\r
+ the pkey index to use when posting the send work request. \r
+\r
+ path_bits\r
+ The portion of the remote_lid that may be changed to vary the path\r
+ through the subnet to the remote port.\r
+\r
+ send_context1\r
+ If this datagram was received as a response to a sent datagram, this\r
+ field contains the context1 value of the send operation. If this is\r
+ an unsolicited receive, this field will be 0.\r
+\r
+ send_context2\r
+ If this datagram was received as a response to a sent datagram, this\r
+ field contains the context2 value of the send operation. If this is\r
+ an unsolicited receive, this field will be 0.\r
+\r
+ remote_qp\r
+ Identifies the source queue pair of a received datagram.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> The format of data sent over the fabric is expected to be in the form\r
+ of a MAD. MADs are expected to match the format defined by the\r
+ Infiniband specification and must be in network-byte order when posted\r
+ to a MAD service.\r
+\r
+ This structure is received to notify a user that a datagram has been\r
+ received for a registered management class. Information of the source\r
+ of the data is provided, along with the data buffer.\r
+\r
+ The MAD element structure is defined such that a received MAD element\r
+ may be re-used as a sent response. In such cases, the h_av field may be\r
+ NULL. The address vector will be created and destroyed by the access\r
+ layer.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo129">ib_get_mad</a>, <a href="#robo204">ib_put_mad</a>, <a href="#robo247">ib_send_mad</a>, <a href="./ib_types_h.html#robo148">ib_local_ds_t</a>, <a href="./ib_types_h.html#robo248">ib_send_opt_t</a>,\r
+ ib_pfn_mad_recv_cb_t, <a href="#robo130">ib_get_mad_buf</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo151">[Structures]<a name="Access20Layer2fib5fmad5fsvc5ft">\r
+Access Layer/ib_mad_svc_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_mad_svc_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Information used to request management datagram support with a queue pair.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef struct _ib_mad_svc\r
+{\r
+ void *mad_svc_context;\r
+ <a href="#robo180">ib_pfn_mad_comp_cb_t</a> pfn_mad_send_cb;\r
+ <a href="#robo180">ib_pfn_mad_comp_cb_t</a> pfn_mad_recv_cb;\r
+\r
+ boolean_t support_unsol;\r
+ uint8_t mgmt_class;\r
+ uint8_t mgmt_version;\r
+ boolean_t method_array[IB_MAX_METHODS];\r
+\r
+ <a href="#robo152">ib_mad_svc_type_t</a> svc_type;\r
+\r
+} <strong>ib_mad_svc_t</strong>;\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> mad_svc_context\r
+ User-defined context that is returned by the access layer through\r
+ the pfn_mad_send_cb and pfn_mad_recv_cb.\r
+\r
+ pfn_mad_send_cb\r
+ A send callback that is invoked to notify the user that a send\r
+ operation has completed for a sent MAD.\r
+\r
+ pfn_mad_recv_cb\r
+ A receive callback that is invoked to notify the user that a MAD\r
+ has been received.\r
+\r
+ support_unsol\r
+ If set to TRUE, this field indicates that the registering client\r
+ supports processing unsolicited MADs. Unsolicited MADs are\r
+ received MADs that do not have the response bit set. If set to TRUE,\r
+ the following fields are required (must be non-zero): mgmt_class,\r
+ mgmt_version, and method_array.\r
+\r
+ mgmt_version\r
+ Indicates which version of a management class the client requires\r
+ support for. The access layer distinguishes between clients\r
+ requiring different versions of the same management class.\r
+ This field is ignored if the support_unsol field is set to FALSE.\r
+\r
+ mgmt_class\r
+ Indicates the management class that should be supported by the\r
+ access layer. This field is ignored if the support_unsol field is\r
+ set to FALSE.\r
+\r
+ method_array\r
+ An array of 127 entries specifying which methods are supported by\r
+ a client when receiving unsolicited MADs. Each index corresponds to\r
+ a single method, and each entry in the array indicates if the method\r
+ is supported by the client. This field is ignored if the\r
+ support_unsol field is set to FALSE.\r
+\r
+ svc_type\r
+ Indicates the type of services that should be provided by the MAD\r
+ service.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> Clients use this structure to define which management datagram methods\r
+ they support, and the type of support required for each. A received MAD\r
+ is distinguished by the access layer based on the following three fields:\r
+ management class, management version, and method.\r
+\r
+ Specific combinations of class, version, and method may be registered\r
+ for unsolicited MADs only once. The access layer supports multiple\r
+ clients registering for unsolicited MADs as long as they do not share the\r
+ same methods, class, or version.\r
+\r
+ The svc_type field can be set by a client to indicate that the access\r
+ layer should invoke RMPP for the specified management class of MADs. If\r
+ set to IB_MAD_SVC_DEFAULT, the access layer will automatically invoke RMPP\r
+ for well known MAD classes (those defined by the 1.1 version of the\r
+ InfiniBand specification). The svc_type field is intended to be used by\r
+ clients sending and receiving vendor specific management class requiring\r
+ RMPP and clients providing their own MAD services.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo228">ib_reg_mad_svc</a>, ib_pfn_mad_send_cb_t, ib_pfn_mad_recv_cb_t,\r
+ <a href="#robo152">ib_mad_svc_type_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo152">[Definitions]<a name="Access20Layer2fib5fmad5fsvc5ftype5ft">\r
+Access Layer/ib_mad_svc_type_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_mad_svc_type_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Indicates the type of services provided by a MAD service.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef enum _ib_mad_svc_type\r
+{\r
+ IB_MAD_SVC_DEFAULT = 0,\r
+ IB_MAD_SVC_RMPP,\r
+ IB_MAD_SVC_RAW\r
+\r
+} <strong>ib_mad_svc_type_t</strong>;\r
+</pre>\r
+</span><p><strong>VALUES</strong></p>\r
+<span class="VALUES"><pre> IB_MAD_SVC_DEFAULT\r
+ Indicates that the access layer will provide all necessary services,\r
+ including retransmissions and RMPP for well-defined management classes.\r
+\r
+ IB_MAD_SVC_RMPP\r
+ Indicates that the MAD service requires retransmissions and the RMPP\r
+ header is available on all MADs. (The RMPP protocol will be activated\r
+ on a per send basis.) This service type should be used for\r
+ user-defined management classes requiring RMPP.\r
+\r
+ IB_MAD_SVC_RAW\r
+ Specifies that the MAD service will not perform retransmissions or\r
+ perform RMPP. All MADs received or sent on a MAD service of this type\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This enum is used to define the types of MAD services available to users.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo151">ib_mad_svc_t</a>, <a href="#robo228">ib_reg_mad_svc</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo153">[Structures]<a name="Access20Layer2fib5fmcast5frec5ft">\r
+Access Layer/ib_mcast_rec_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_mcast_rec_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Information returned as a result of joining a multicast group.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef struct _ib_mcast_rec\r
+{\r
+ const void* __ptr64 mcast_context;\r
+ <a href="./ib_types_h.html#robo49">ib_api_status_t</a> status;\r
+ <a href="./ib_types_h.html#robo893">ib_net16_t</a> error_status;\r
+\r
+ ib_mcast_handle_t h_mcast;\r
+ <a href="./ib_types_h.html#robo887">ib_member_rec_t</a>* __ptr64 p_member_rec;\r
+\r
+} <strong>ib_mcast_rec_t</strong>;\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> mcast_context\r
+ User-defined context information associated with the multicast join\r
+ request.\r
+\r
+ status\r
+ Indicates the success of the multicast group join operation.\r
+\r
+ error_status\r
+ Provide additional error information that was provided by the SA.\r
+ This field is only valid if status is set to IB_REMOTE_ERROR.\r
+\r
+ h_mcast\r
+ Upon successful completion of a multicast join, this references a\r
+ handle to the multicast group. This handle is used to leave the\r
+ multicast group.\r
+\r
+ p_member_rec\r
+ References a member record that provides information about the\r
+ multicast group.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This structure is returned to a client through a callback to notify them\r
+ of the result of a multicast join operation.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo142">ib_join_mcast</a>, <a href="#robo181">ib_pfn_mcast_cb_t</a>, <a href="#robo144">ib_leave_mcast</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo154">[Structures]<a name="Access20Layer2fib5fmcast5freq5ft">\r
+Access Layer/ib_mcast_req_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_mcast_req_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Information used to join a multicast group.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef struct _ib_mcast_req\r
+{\r
+ boolean_t create;\r
+ <a href="./ib_types_h.html#robo887">ib_member_rec_t</a> member_rec;\r
+\r
+ const void* __ptr64 mcast_context;\r
+ <a href="#robo181">ib_pfn_mcast_cb_t</a> pfn_mcast_cb;\r
+\r
+ uint32_t timeout_ms;\r
+ uint32_t retry_cnt;\r
+ <a href="#robo47">ib_al_flags_t</a> flags;\r
+\r
+ <a href="./ib_types_h.html#robo895">ib_net64_t</a> port_guid;\r
+ uint16_t pkey_index;\r
+\r
+} <strong>ib_mcast_req_t</strong>;\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> create\r
+ Indicates that the multicast group should be created if it does not\r
+ already exist.\r
+\r
+ member_rec\r
+ Specifies the membership information of the multicast group to join\r
+ or create. The mgid and join state (scope_state) fields of the\r
+ member record must be set. In addition, if create is set to TRUE,\r
+ the following fields must also be set: qkey, tclass, service level\r
+ and flow label (sl_flow_hop), and pkey. All other fields are ignored\r
+ by the access layer.\r
+\r
+ mcast_context\r
+ User-defined context information associated with the join request.\r
+ This context is returned to the user through the function specified\r
+ by the pfn_mcast_cb field.\r
+\r
+ pfn_mcast_cb\r
+ A user-defined callback that is invoked upon completion of the\r
+ join request.\r
+\r
+ timeout_ms\r
+ Specifies the number of milliseconds to wait for a response for\r
+ the join request until retrying or timing out the request.\r
+\r
+ retry_cnt\r
+ Specifies the number of times that the join request will be retried\r
+ before failing the request.\r
+\r
+ flags\r
+ Used to describe the mode of operation. Set to IB_FLAGS_SYNC to\r
+ process the called routine synchronously.\r
+\r
+ port_guid\r
+ Indicates the port that will join the multicast group. The QP\r
+ specified as part of the ib_join_mast call will bind to this port.\r
+\r
+ pkey_index\r
+ Specifies the pkey associated with this queue pair.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This structure is used when joining an existing multicast group or\r
+ creating a new multicast group.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo142">ib_join_mcast</a>, <a href="#robo181">ib_pfn_mcast_cb_t</a>, <a href="./ib_types_h.html#robo856">ib_gid_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo155">[Functions]<a name="Access20Layer2fib5fmodify5fav">\r
+Access Layer/ib_modify_av</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_modify_av</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Modifies the attributes of an existing address vector.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_EXPORT <a href="./ib_types_h.html#robo49">ib_api_status_t</a> AL_API\r
+<strong>ib_modify_av</strong>(\r
+ IN const ib_av_handle_t h_av,\r
+ IN const <a href="./ib_types_h.html#robo57">ib_av_attr_t</a>* const p_av_attr );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_av\r
+ [in] A handle to an existing address vector.\r
+\r
+ p_av_attr\r
+ [in] The new attributes to use when modifying the address vector.\r
+\r
+ RETURN VALUES\r
+ IB_SUCCESS\r
+ The address vector was successfully modified.\r
+\r
+ IB_INVALID_AV_HANDLE\r
+ The address vector handle was invalid.\r
+\r
+ IB_INVALID_PARAMETER\r
+ A reference to the address vector attributes structure was not\r
+ provided.\r
+\r
+ IB_INVALID_PORT\r
+ The port number supplied, through the address vector attributes,\r
+ was invalid for the given channel adapter.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This routine modifies the attributes of an existing address vector.\r
+ The new attributes are specified through the p_av_attr parameter.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo104">ib_create_av</a>, <a href="#robo115">ib_destroy_av</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo156">[Functions]<a name="Access20Layer2fib5fmodify5fca">\r
+Access Layer/ib_modify_ca</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_modify_ca</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Modifies the attributes and violation counters associated with a port.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_EXPORT <a href="./ib_types_h.html#robo49">ib_api_status_t</a> AL_API\r
+<strong>ib_modify_ca</strong>(\r
+ IN const ib_ca_handle_t h_ca,\r
+ IN const uint8_t port_num,\r
+ IN const <a href="./ib_types_h.html#robo61">ib_ca_mod_t</a> ca_mod,\r
+ IN const <a href="./ib_types_h.html#robo199">ib_port_attr_mod_t</a>* const p_port_attr_mod );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_ca\r
+ [in] A handle to an opened channel adapter.\r
+\r
+ port_num\r
+ [in] An index to the port that is being modified. The port_num matches\r
+ the index of the port as returned through the <a href="#robo213">ib_query_ca</a> call.\r
+\r
+ ca_mod\r
+ [in] A mask of the attributes and counters to modify.\r
+\r
+ p_port_attr_mod\r
+ [in] A list of the specific port attribute information to modify. For\r
+ the access layer to modify an attribute, its corresponding bit must be\r
+ set in the ca_mod parameter.\r
+\r
+ RETURN VALUES\r
+ IB_SUCCESS\r
+ The attributes were successfully modified.\r
+\r
+ IB_INVALID_CA_HANDLE\r
+ The channel adapter handle was invalid.\r
+\r
+ IB_INVALID_PORT\r
+ The port number supplied was invalid for the given channel adapter.\r
+\r
+ IB_INVALID_PARAMETER\r
+ The supplied ca_mod mask is invalid or a reference to the port\r
+ attribute information was not provided.\r
+\r
+ IB_UNSUPPORTED\r
+ The optional qkey and pkey violation counters are not supported by\r
+ this channel adapter, but an attempt was made to modify them.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This call sets the attributes for a port in its associated PORT_INFO\r
+ structure. It will also reset pkey and qkey violation counters.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo164">ib_open_ca</a>, <a href="#robo213">ib_query_ca</a>, <a href="#robo68">ib_close_ca</a>, <a href="./ib_types_h.html#robo61">ib_ca_mod_t</a>, <a href="./ib_types_h.html#robo199">ib_port_attr_mod_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo157">[Functions]<a name="Access20Layer2fib5fmodify5fcq">\r
+Access Layer/ib_modify_cq</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_modify_cq</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Modifies the attributes associated with a completion queue, allowing the\r
+ completion queue to be resized.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_EXPORT <a href="./ib_types_h.html#robo49">ib_api_status_t</a> AL_API\r
+<strong>ib_modify_cq</strong>(\r
+ IN const ib_cq_handle_t h_cq,\r
+ IN OUT uint32_t* const p_size );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_cq\r
+ [in] A handle to an existing completion queue.\r
+\r
+ p_size\r
+ [in/out] Specifies the new size of the completion queue. If the\r
+ modify call is successful, the actual size of the completion queue\r
+ will be returned. The actual size of the CQ will be greater than or\r
+ equal to the requested size.\r
+\r
+ RETURN VALUES\r
+ IB_SUCCESS\r
+ The completion queue was successfully modified.\r
+\r
+ IB_INVALID_CQ_HANDLE\r
+ The completion queue handle was invalid.\r
+\r
+ IB_INVALID_PARAMETER\r
+ A reference to the completion queue size was not provided.\r
+\r
+ IB_INVALID_CQ_SIZE\r
+ The requested size of the completion queue was larger than the\r
+ maximum supported by the associated channel adapter.\r
+\r
+ IB_OVERFLOW\r
+ The specified size of the completion queue is smaller than the number\r
+ of work completions currently on the completion queue.\r
+\r
+ IB_INSUFFICIENT_MEMORY\r
+ There was insufficient memory to modify the completion queue.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This routine allows a client to modify the size of a completion queue.\r
+ If the new size is larger than what the associated channel adapter can\r
+ support, an error is returned. If the completion queue has valid\r
+ completion entries on it and the requested size is smaller than the\r
+ number of entries, an overflow error is returned and the modify\r
+ operation is aborted.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo105">ib_create_cq</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo158">[Functions]<a name="Access20Layer2fib5fmodify5fqp">\r
+Access Layer/ib_modify_qp</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_modify_qp</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Modifies the attributes of an existing queue pair.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_EXPORT <a href="./ib_types_h.html#robo49">ib_api_status_t</a> AL_API\r
+<strong>ib_modify_qp</strong>(\r
+ IN const ib_qp_handle_t h_qp,\r
+ IN const <a href="./ib_types_h.html#robo207">ib_qp_mod_t</a>* const p_qp_mod );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_qp\r
+ [in] A handle to an existing queue pair.\r
+\r
+ p_qp_mod\r
+ [in] The new attributes to use when modifying the queue pair.\r
+\r
+ RETURN VALUES\r
+ IB_SUCCESS\r
+ The queue pair was successfully modified.\r
+\r
+ IB_INVALID_QP_HANDLE\r
+ The queue pair handle was invalid.\r
+\r
+ IB_INVALID_PARAMETER\r
+ A reference to the queue pair attributes was not provided.\r
+\r
+ IB_INVALID_SETTING\r
+ The specified queue pair attributes were invalid.\r
+\r
+ IB_INSUFFICIENT_RESOURCES\r
+ There were insufficient resources currently available on the channel\r
+ adapter to register the modify the queue pair.\r
+\r
+ IB_UNSUPPORTED\r
+ The requested modification was not supported.\r
+\r
+ IB_INVALID_QP_STATE\r
+ The queue pair was in an invalid state for the requested operation.\r
+\r
+ IB_INVALID_PKEY\r
+ The specified pkey was not valid.\r
+\r
+ IB_INVALID_APM_STATE\r
+ The specified automatic path migration state was not valid.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This routine modifies the attributes of an existing queue pair and\r
+ transitions it to a new state. The new state and attributes are\r
+ specified through the p_qp_mod parameter. Upon successful completion,\r
+ the queue pair is in the requested state.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo109">ib_create_qp</a>, <a href="#robo120">ib_destroy_qp</a>, <a href="./ib_types_h.html#robo207">ib_qp_mod_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo162">[Structures]<a name="Access20Layer2fib5fmra5fpdata5ft">\r
+Access Layer/ib_mra_pdata_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_mra_pdata_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> User data sent as part of a message receipt acknowledgement.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef union _ib_mra_pdata\r
+{\r
+ uint8_t data[IB_MRA_PDATA_SIZE];\r
+\r
+} <strong>ib_mra_pdata_t</strong>;\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> ib_cm_data_sizes_t\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo163">[Functions]<a name="Access20Layer2fib5fopen5fal">\r
+Access Layer/ib_open_al</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_open_al</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> This routine opens an instance of the access layer for the user and\r
+ returns its handle.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_EXPORT <a href="./ib_types_h.html#robo49">ib_api_status_t</a> AL_API\r
+<strong>ib_open_al</strong>(\r
+ OUT ib_al_handle_t* const ph_al );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> ph_al\r
+ [in] Upon successful completion of this call, this parameter will\r
+ reference a handle to the access layer.\r
+\r
+ RETURN VALUES\r
+ IB_SUCCESS\r
+ The access layer was opened successfully.\r
+\r
+ IB_INVALID_PARAMETER\r
+ A reference to the access layer handle was not provided.\r
+\r
+ IB_INSUFFICIENT_MEMORY\r
+ There was insufficient memory to perform the operation.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This function opens an instance of the access layer. An instance of the\r
+ access layer is required before allocating additional resources from the\r
+ access layer or a channel adapter. If successful, a handle to the access\r
+ layer is returned. User-mode clients should not call <strong>ib_open_al</strong> from the\r
+ module initialization routine.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo67">ib_close_al</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo164">[Functions]<a name="Access20Layer2fib5fopen5fca">\r
+Access Layer/ib_open_ca</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_open_ca</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Opens a channel adapter for additional access. A channel adapter must\r
+ be opened before consuming resources on that adapter.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_EXPORT <a href="./ib_types_h.html#robo49">ib_api_status_t</a> AL_API\r
+<strong>ib_open_ca</strong>(\r
+ IN const ib_al_handle_t h_al,\r
+ IN const <a href="./ib_types_h.html#robo895">ib_net64_t</a> ca_guid,\r
+ IN const <a href="#robo178">ib_pfn_event_cb_t</a> pfn_ca_event_cb OPTIONAL,\r
+ IN const void* const ca_context,\r
+ OUT ib_ca_handle_t* const ph_ca );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_al\r
+ [in] The handle to an open instance of AL.\r
+\r
+ ca_guid\r
+ [in] The GUID of the channel adapter to open.\r
+\r
+ pfn_ca_event_cb\r
+ [in] A user-specified callback that is invoked after an\r
+ asynchronous event has occurred on the channel adapter.\r
+\r
+ ca_context\r
+ [in] A client-specified context to associate with this opened instance\r
+ of the channel adapter. This context is returned to the user when\r
+ invoking asynchronous callbacks referencing this channel adapter.\r
+\r
+ ph_ca\r
+ [out] Upon successful completion of this call, this references a\r
+ handle to the opened channel adapter.\r
+\r
+ RETURN VALUES\r
+ IB_SUCCESS\r
+ The operation was successful.\r
+\r
+ IB_INVALID_AL_HANDLE\r
+ The access layer handle was invalid.\r
+\r
+ IB_INVALID_GUID\r
+ No channel adapter in the system was found for the specified ca_guid.\r
+\r
+ IB_INVALID_PARAMETER\r
+ A reference to the CA handle was not provided.\r
+\r
+ IB_INSUFFICIENT_MEMORY\r
+ There was insufficient memory to open the channel adapter.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> When successful, this routine returns a handle to an open instance of a CA.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo213">ib_query_ca</a>, <a href="#robo156">ib_modify_ca</a>, <a href="#robo68">ib_close_ca</a>, <a href="#robo178">ib_pfn_event_cb_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo166">[Functions]<a name="Access20Layer2fib5fpeek5fcq">\r
+Access Layer/ib_peek_cq</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_peek_cq</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Returns the number of entries currently on the completion queue.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_EXPORT <a href="./ib_types_h.html#robo49">ib_api_status_t</a> AL_API\r
+<strong>ib_peek_cq</strong>(\r
+ IN const ib_cq_handle_t h_cq,\r
+ OUT uint32_t* const p_n_cqes );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_cq\r
+ [in] Handle to the completion queue to peek.\r
+\r
+ p_n_cqes\r
+ [out] Upon successful completion of this call, contains the number\r
+ of completion queue entries currently on the completion queue.\r
+\r
+ RETURN VALUES\r
+ IB_SUCCESS\r
+ The peek operation completed successfully.\r
+\r
+ IB_INVALID_CQ_HANDLE\r
+ The completion queue handle was invalid.\r
+\r
+ IB_INVALID_PARAMETER\r
+ A reference to the completion queue entry count was not provided.\r
+\r
+ IB_UNSUPPORTED\r
+ This operation is not supported by the channel adapter.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> The value returned is a snapshot of the number of compleiton queue\r
+ entries curently on the completion queue. Support for this operation\r
+ is optional by a channel adapter vendor.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo105">ib_create_cq</a>, <a href="#robo198">ib_poll_cq</a>, <a href="#robo222">ib_rearm_cq</a>, <a href="#robo223">ib_rearm_n_cq</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo167">[Functions]<a name="Access20Layer2fib5fpfn5fcm5fapr5fcb5ft">\r
+Access Layer/ib_pfn_cm_apr_cb_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_pfn_cm_apr_cb_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> A user-specified callback that is invoked after receiving a load\r
+ alternate path response message.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef void\r
+(AL_API * __ptr64 <strong>ib_pfn_cm_apr_cb_t</strong>)(\r
+ IN <a href="#robo70">ib_cm_apr_rec_t</a> *p_cm_apr_rec );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_cm_apr_rec\r
+ [in] Load alternate path response information sent by the remote side.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This callback is invoked to notify the user of a load alternate path\r
+ response. If a response is not received within the specified timeout\r
+ period, this callback will be invoked with the status set to IB_CM_TIMEOUT.\r
+\r
+ In the kernel, this callback is typically invoked from within a tasklet,\r
+ depending on the implementation of the verbs provider driver.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo82">ib_cm_lap</a>, <a href="#robo69">ib_cm_apr</a>, <a href="#robo70">ib_cm_apr_rec_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo168">[Functions]<a name="Access20Layer2fib5fpfn5fcm5fdrep5fcb5ft">\r
+Access Layer/ib_pfn_cm_drep_cb_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_pfn_cm_drep_cb_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> A user-specified callback that is invoked after receiving a disconnect\r
+ reply message.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef void\r
+(AL_API * __ptr64 <strong>ib_pfn_cm_drep_cb_t</strong>)(\r
+ IN <a href="#robo75">ib_cm_drep_rec_t</a> *p_cm_drep_rec );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_cm_drep_rec\r
+ [in] Disconnect reply information returned to the user.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This callback is invoked to notify the user of a disconnect reply. If\r
+ no reply was received within the specified timeout period, this callback\r
+ will be invoked with the status set to IB_CM_TIMEOUT.\r
+\r
+ In the kernel, this callback is typically invoked from within a\r
+ tasklet, depending on the implementation of the verbs provider driver.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo77">ib_cm_dreq</a>, <a href="#robo74">ib_cm_drep</a>, <a href="#robo75">ib_cm_drep_rec_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo169">[Functions]<a name="Access20Layer2fib5fpfn5fcm5fdreq5fcb5ft">\r
+Access Layer/ib_pfn_cm_dreq_cb_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_pfn_cm_dreq_cb_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> A user-specified callback that is invoked after receiving a disconnect\r
+ request message.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef void\r
+(AL_API * __ptr64 <strong>ib_pfn_cm_dreq_cb_t</strong>)(\r
+ IN <a href="#robo78">ib_cm_dreq_rec_t</a> *p_cm_dreq_rec );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_cm_dreq_rec\r
+ [in] Disconnect request information returned to the user.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This callback is invoked to notify the user of a disconnect request.\r
+ Users must call <a href="#robo74">ib_cm_drep</a> to respond to the disconnect request. After\r
+ this callback returns, the queue pair associated with the connection is\r
+ transitioned to the time-wait state and is no longer usable for sending\r
+ and receiving data.\r
+\r
+ In the kernel, this callback is typically invoked from within a tasklet,\r
+ depending on the implementation of the verbs provider driver.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo96">ib_cm_req</a>, <a href="#robo85">ib_cm_listen</a>, <a href="#robo74">ib_cm_drep</a>, <a href="#robo78">ib_cm_dreq_rec_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo170">[Functions]<a name="Access20Layer2fib5fpfn5fcm5flap5fcb5ft">\r
+Access Layer/ib_pfn_cm_lap_cb_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_pfn_cm_lap_cb_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> A user-specified callback that is invoked after receiving a load\r
+ alternate path message.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef void\r
+(AL_API * __ptr64 <strong>ib_pfn_cm_lap_cb_t</strong>)(\r
+ IN <a href="#robo83">ib_cm_lap_rec_t</a> *p_cm_lap_rec );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_cm_lap_rec\r
+ [in] Load alternate path information sent by the remote side.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This callback is invoked to notify the user of a load alternate path\r
+ request. Users must call <a href="#robo69">ib_cm_apr</a> to respond to the load alternate\r
+ path request from within this callback. The <a href="#robo69">ib_cm_apr</a> call is used\r
+ to accept or reject the load alternate path request.\r
+\r
+ In the kernel, this callback is typically invoked from within a\r
+ tasklet, depending on the implementation of the verbs provider driver.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo82">ib_cm_lap</a>, <a href="#robo69">ib_cm_apr</a>, <a href="#robo83">ib_cm_lap_rec_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo171">[Functions]<a name="Access20Layer2fib5fpfn5fcm5fmra5fcb5ft">\r
+Access Layer/ib_pfn_cm_mra_cb_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_pfn_cm_mra_cb_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> A user-specified callback that is invoked after receiving a message\r
+ received acknowledgement.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef void\r
+(AL_API * __ptr64 <strong>ib_pfn_cm_mra_cb_t</strong>)(\r
+ IN <a href="#robo88">ib_cm_mra_rec_t</a> *p_cm_mra_rec );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_cm_mra_rec\r
+ [in] Message received acknowledgement information received from the\r
+ remote side.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This callback is invoked to notify the user that their request was\r
+ successfully received, but additional processing is required. This\r
+ callback may be invoked after calling <a href="#robo96">ib_cm_req</a> or <a href="#robo93">ib_cm_rep</a>\r
+\r
+ In the kernel, this callback is typically invoked from within a tasklet,\r
+ depending on the implementation of the verbs provider driver.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo96">ib_cm_req</a>, <a href="#robo93">ib_cm_rep</a>, <a href="#robo88">ib_cm_mra_rec_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo172">[Functions]<a name="Access20Layer2fib5fpfn5fcm5frej5fcb5ft">\r
+Access Layer/ib_pfn_cm_rej_cb_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_pfn_cm_rej_cb_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> A user-specified callback that is invoked after receiving a connection\r
+ rejection message.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef void\r
+(AL_API * __ptr64 <strong>ib_pfn_cm_rej_cb_t</strong>)(\r
+ IN <a href="#robo91">ib_cm_rej_rec_t</a> *p_cm_rej_rec );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_cm_rej_rec\r
+ [in] Connection rejection information returned to the user.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This callback is invoked to notify the user that a connection has been\r
+ rejected. This routine may be invoked after calling <a href="#robo96">ib_cm_req</a> or\r
+ <a href="#robo93">ib_cm_rep</a>.\r
+\r
+ In the kernel, this callback is typically invoked from within a tasklet,\r
+ depending on the implementation of the verbs provider driver.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo96">ib_cm_req</a>, <a href="#robo93">ib_cm_rep</a>, <a href="#robo99">ib_cm_rtu</a>, <a href="#robo90">ib_cm_rej</a>, <a href="#robo91">ib_cm_rej_rec_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo173">[Functions]<a name="Access20Layer2fib5fpfn5fcm5frep5fcb5ft">\r
+Access Layer/ib_pfn_cm_rep_cb_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_pfn_cm_rep_cb_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> A user-specified callback that is invoked after receiving a connection\r
+ request reply message.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef void\r
+(AL_API * __ptr64 <strong>ib_pfn_cm_rep_cb_t</strong>)(\r
+ IN <a href="#robo94">ib_cm_rep_rec_t</a> *p_cm_rep_rec );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_cm_rep_rec\r
+ [in] Connection request reply information returned to the user,\r
+ indicating the remote connection data.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This callback is invoked to notify the user of a connection request reply.\r
+ This routine is invoked after calling <a href="#robo96">ib_cm_req</a>. Users must call\r
+ <a href="#robo99">ib_cm_rtu</a> to accept the connection or <a href="#robo90">ib_cm_rej</a> to reject the connection\r
+ from the callback.\r
+\r
+ Users may also call <a href="#robo87">ib_cm_mra</a> to acknowledge the connection request reply\r
+ and prevent the remote side from timing out the connection request. The\r
+ <a href="#robo87">ib_cm_mra</a> routine should be invoked if the user requires substantial\r
+ processing time to process the connection request reply.\r
+\r
+ If a reply is not received within the specified timeout period,\r
+ this callback will be invoked with the status set to IB_CM_TIMEOUT. Users\r
+ may call <a href="#robo90">ib_cm_rej</a> to notify the remote side that the connection request\r
+ is being rejected due to a timeout.\r
+\r
+ In the kernel, this callback is typically invoked from within a tasklet,\r
+ depending on the implementation of the verbs provider driver.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo96">ib_cm_req</a>, <a href="#robo85">ib_cm_listen</a>, <a href="#robo93">ib_cm_rep</a>, <a href="#robo90">ib_cm_rej</a>, <a href="#robo87">ib_cm_mra</a>, <a href="#robo90">ib_cm_rej</a>,\r
+ <a href="#robo94">ib_cm_rep_rec_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo174">[Functions]<a name="Access20Layer2fib5fpfn5fcm5freq5fcb5ft">\r
+Access Layer/ib_pfn_cm_req_cb_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_pfn_cm_req_cb_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> A user-specified callback that is invoked after receiving a connection\r
+ request message.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef void\r
+(AL_API * __ptr64 <strong>ib_pfn_cm_req_cb_t</strong>)(\r
+ IN <a href="#robo97">ib_cm_req_rec_t</a> *p_cm_req_rec );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_cm_req_rec\r
+ [in] Connection request information returned to the user, indicating\r
+ the parameters for the connection.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This callback is invoked to notify the user of a connection request. This\r
+ routine is invoked for peer to peer connection request calls to <a href="#robo96">ib_cm_req</a>\r
+ and for calls to <a href="#robo85">ib_cm_listen</a>. Users must call <a href="#robo93">ib_cm_rep</a> to accept the\r
+ connection or <a href="#robo90">ib_cm_rej</a> to reject the connection from the callback.\r
+\r
+ Users may also call <a href="#robo87">ib_cm_mra</a> to acknowledge the connection request and\r
+ prevent the remote side from timing out the connection request. The\r
+ <a href="#robo87">ib_cm_mra</a> routine should be invoked if the user requires substantial\r
+ processing time to process the connection request.\r
+\r
+ In the kernel, this callback is typically invoked from within a tasklet,\r
+ depending on the implementation of the verbs provider driver.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo96">ib_cm_req</a>, <a href="#robo85">ib_cm_listen</a>, <a href="#robo93">ib_cm_rep</a>, <a href="#robo87">ib_cm_mra</a>, <a href="#robo90">ib_cm_rej</a>, <a href="#robo97">ib_cm_req_rec_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo175">[Functions]<a name="Access20Layer2fib5fpfn5fcm5frtu5fcb5ft">\r
+Access Layer/ib_pfn_cm_rtu_cb_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_pfn_cm_rtu_cb_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> A user-specified callback that is invoked after receiving a connection\r
+ ready to use message.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef void\r
+(AL_API * __ptr64 <strong>ib_pfn_cm_rtu_cb_t</strong>)(\r
+ IN <a href="#robo100">ib_cm_rtu_rec_t</a> *p_cm_rtu_rec );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_cm_rtu_rec\r
+ [in] Connection ready to use information returned to the user.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This callback is invoked to notify the user that a connection is ready\r
+ to use. This routine is invoked after calling <a href="#robo93">ib_cm_rep</a>. If a ready to\r
+ use message is not received within the specified timeout period, this\r
+ callback will be invoked with the status set to IB_CM_TIMEOUT.\r
+\r
+ This callback will be invoked before a user is notified of any completions\r
+ that has occurred on the associated queue pair.\r
+\r
+ In the kernel, this callback is typically invoked from within a tasklet,\r
+ depending on the implementation of the verbs provider driver.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo93">ib_cm_rep</a>, <a href="#robo100">ib_cm_rtu_rec_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo176">[Functions]<a name="Access20Layer2fib5fpfn5fcomp5fcb5ft">\r
+Access Layer/ib_pfn_comp_cb_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_pfn_comp_cb_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Completion callback provided by a client.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef void\r
+(AL_API * __ptr64 <strong>ib_pfn_comp_cb_t</strong>)(\r
+ IN const ib_cq_handle_t h_cq,\r
+ IN void *cq_context );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_cq\r
+ [in] Handle for the completion queue on which the completion occurred.\r
+\r
+ cq_context\r
+ [in] User-specified context for the completion queue on which the\r
+ completion occurred.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This function is invoked upon completion of a work request on a queue pair\r
+ associated with the completion queue. The context associated with the\r
+ completion queue on which the completion occurred is return to the client\r
+ through the callback.\r
+\r
+ In the kernel, this callback is usually invoked using a tasklet, dependent\r
+ on the implementation of the underlying verbs provider driver.\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo177">[Functions]<a name="Access20Layer2fib5fpfn5fdestroy5fcb5ft">\r
+Access Layer/ib_pfn_destroy_cb_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_pfn_destroy_cb_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Asynchronous callback invoked after a resource has been successfully\r
+ destroyed.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef void\r
+(AL_API * __ptr64 <strong>ib_pfn_destroy_cb_t</strong>)(\r
+ IN void *context );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> context\r
+ [in] User-specified context associated with the resource being\r
+ destroyed. The context for the resource is usually set during the\r
+ object's creation.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This callback notifies a client that a resource has been successfully\r
+ destroyed. It is used to indicate that all pending callbacks associated\r
+ with the resource have completed, and no additional events will be\r
+ generated for that resource.\r
+\r
+ This callback is invoked within a system thread context in the kernel.\r
+\r
+ If the user specifies <a href="#robo256">ib_sync_destroy</a> as the asynchronous callback, then\r
+ the object being destroyed will be destroyed synchronously. This may \r
+ result in the calling thread blocking while outstanding callbacks complete.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo256">ib_sync_destroy</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo178">[Functions]<a name="Access20Layer2fib5fpfn5fevent5fcb5ft">\r
+Access Layer/ib_pfn_event_cb_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_pfn_event_cb_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> A user-specified callback that is invoked after an asynchronous event\r
+ has occurred on an allocated resource.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef void\r
+(AL_API * __ptr64 <strong>ib_pfn_event_cb_t</strong>)(\r
+ IN <a href="#robo55">ib_async_event_rec_t</a> *p_event_rec );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_event_rec\r
+ [in] Information returned to the user, indicating the type of\r
+ event and the associated user context.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This callback is invoked within a system thread context in the kernel.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo55">ib_async_event_rec_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo179">[Functions]<a name="Access20Layer2fib5fpfn5flisten5ferr5fcb5ft">\r
+Access Layer/ib_pfn_listen_err_cb_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_pfn_listen_err_cb_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> A user-specified callback that is invoked after an error has occurred on\r
+ a listen request.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef void\r
+(AL_API * __ptr64 <strong>ib_pfn_listen_err_cb_t</strong>)(\r
+ IN <a href="#robo146">ib_listen_err_rec_t</a> *p_listen_err_rec );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_listen_err_rec\r
+ [in] Error information returned to the user, indicating the reason\r
+ for the error and associated context information.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This callback is invoked within a system thread context in the kernel.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> p_listen_err_rec\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo180">[Functions]<a name="Access20Layer2fib5fpfn5fmad5fcomp5fcb5ft">\r
+Access Layer/ib_pfn_mad_comp_cb_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_pfn_mad_comp_cb_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> User-defined callback used to notify the user of a completion for a\r
+ sent or received datagram.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef void\r
+(AL_API * __ptr64 <strong>ib_pfn_mad_comp_cb_t</strong>)(\r
+ IN const ib_mad_svc_handle_t h_mad_svc,\r
+ IN void *mad_svc_context,\r
+ IN <a href="#robo150">ib_mad_element_t</a> *p_mad_element );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_mad_svc\r
+ [in] Handle to the MAD service on which the completion occured.\r
+\r
+ mad_svc_context\r
+ [in] User-defined context information associated with the MAD service\r
+ on which the completion occurred.\r
+\r
+ p_mad_element\r
+ [in] References information on the completed MAD request.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This function is invoked upon completion of a sent or receive MAD.\r
+ It is separate from the normal completion callbacks in order to allow\r
+ the access layer to perform post processing on the MAD, such as\r
+ segmentation and reassembly, and retransmissions if a response was\r
+ expected.\r
+\r
+ The mad element returned through this call should be returned to its MAD\r
+ pool after completion processing on the MAD has concluded. Completed\r
+ receive MAD elements should not be reposted to the receive queue of a\r
+ MAD QP.\r
+\r
+ In the kernel, this callback is typically invoked from within a\r
+ tasklet, depending on the implementation of the verbs provider driver.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo247">ib_send_mad</a>, <a href="#robo228">ib_reg_mad_svc</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo181">[Functions]<a name="Access20Layer2fib5fpfn5fmcast5fcb5ft">\r
+Access Layer/ib_pfn_mcast_cb_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_pfn_mcast_cb_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> User-defined callback invoked on completion of a multicast join request.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef void\r
+(AL_API * __ptr64 <strong>ib_pfn_mcast_cb_t</strong>)(\r
+ IN <a href="#robo153">ib_mcast_rec_t</a> *p_mcast_rec );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_mcast_rec\r
+ [in] References the result of the join operation.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> The callback is used to notify a client of the result of a multicast\r
+ join request.\r
+\r
+ This callback is invoked within a system thread context in the kernel.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo142">ib_join_mcast</a>, <a href="#robo153">ib_mcast_rec_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo182">[Functions]<a name="Access20Layer2fib5fpfn5fpnp5fcb5ft">\r
+Access Layer/ib_pfn_pnp_cb_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_pfn_pnp_cb_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> User-defined callback that is invoked to notify a client of the addition\r
+ or removal of a channel adapter, a port up or down event, port changes,\r
+ and the assignment of an I/O controller to a local port.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef <a href="./ib_types_h.html#robo49">ib_api_status_t</a>\r
+(AL_API * __ptr64 <strong>ib_pfn_pnp_cb_t</strong>)(\r
+ IN <a href="#robo196">ib_pnp_rec_t</a> *p_pnp_rec );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_pnp_rec\r
+ [in] A reference to a plug and play record. The plug and play\r
+ record contains details about the type of local event that has\r
+ occurred, along with the relevant device information.\r
+\r
+ RETURN VALUES\r
+ IB_SUCCESS\r
+ Indicates to the PnP manager that the callback client requires it\r
+ to maintain a context for this event.\r
+\r
+ Other\r
+ Indicates to the PnP manager that the callback client does not need\r
+ a context for this event.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> The callback is used to notify users of local events that have occurred\r
+ on a given channel adapter. Information about the type of event that\r
+ occurred along with the associated device is returned to the user through\r
+ the p_pnp_rec parameter.\r
+\r
+ Users register for plug and play changes by requesting notification from\r
+ the access layer. Users may register for notifications either by directly\r
+ invoking the appropriate function in the access layer, or indirectly by\r
+ adding the necessary registration data to the access layer device file.\r
+\r
+ This callback is invoked from within a system thread context.\r
+\r
+ If the callback returns a status other than IB_SUCCESS, no further\r
+ callback for related events will be delivered.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo196">ib_pnp_rec_t</a>, <a href="#robo231">ib_reg_pnp</a>, <a href="#robo113">ib_dereg_pnp</a>, <a href="#robo239">ib_reject_ioc</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo183">[Functions]<a name="Access20Layer2fib5fpfn5fquery5fcb5ft">\r
+Access Layer/ib_pfn_query_cb_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_pfn_query_cb_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> User-defined callback invoked on completion of a subnet administrator\r
+ query.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef void\r
+(AL_API * __ptr64 <strong>ib_pfn_query_cb_t</strong>)(\r
+ IN <a href="#robo219">ib_query_rec_t</a> *p_query_rec );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_query_rec\r
+ [in] This is a reference to a structure containing the result of the\r
+ query.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This routine is invoked to notify a client of the result of a subnet\r
+ administration query. The p_query_rec parameter references the result\r
+ of the query and, in the case of a successful query, any information\r
+ returned by the subnet administrator.\r
+\r
+ In the kernel, this callback is usually invoked using a tasklet, dependent\r
+ on the implementation of the underlying verbs provider driver.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo219">ib_query_rec_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo184">[Functions]<a name="Access20Layer2fib5fpfn5freg5fsvc5fcb5ft">\r
+Access Layer/ib_pfn_reg_svc_cb_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_pfn_reg_svc_cb_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> User-defined callback that is invoked to notify a client of the result\r
+ of a service registration attempt.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef void\r
+(AL_API * __ptr64 <strong>ib_pfn_reg_svc_cb_t</strong>)(\r
+ IN <a href="#robo235">ib_reg_svc_rec_t</a> *p_reg_svc_rec );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_reg_svc_rec\r
+ [in] References the result of the service registration attempt.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> The callback is used to notify a client of the result of a service\r
+ registration attempt with the subnet administrator.\r
+\r
+ In the kernel, this callback is usually invoked using a tasklet, dependent\r
+ on the implementation of the underlying verbs provider driver.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo234">ib_reg_svc</a>, <a href="#robo235">ib_reg_svc_rec_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo185">[Functions]<a name="Access20Layer2fib5fpfn5freport5fcb5ft">\r
+Access Layer/ib_pfn_report_cb_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_pfn_report_cb_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> User-defined callback that is invoked to notify a client of an event\r
+ that has occurred on the fabric.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef void\r
+(AL_API * __ptr64 <strong>ib_pfn_report_cb_t</strong>)(\r
+ IN <a href="#robo242">ib_report_rec_t</a> *p_report_rec );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_report_rec\r
+ [in] A reference to an event report. The report contains\r
+ details about the type of event that has occurred, along with the\r
+ relevant device information.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> The callback is used to notify users of remote events that have been seen\r
+ by a specified class manager. Information about the type of event that\r
+ occurred along with the associated device is returned to the user through\r
+ the p_report_rec parameter.\r
+\r
+ Users register for device changes by subscribing with a class manager.\r
+ Users may subscribe for events either by directly invoking the\r
+ appropriate function in the access layer, or indirectly by adding the\r
+ necessary registration data to the access layer device file.\r
+\r
+ This callback is invoked from within a system thread context.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo242">ib_report_rec_t</a>, <a href="#robo255">ib_subscribe</a>, <a href="#robo257">ib_unsubscribe</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo186">[Functions]<a name="Access20Layer2fib5fpfn5fsub5fcb5ft">\r
+Access Layer/ib_pfn_sub_cb_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_pfn_sub_cb_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> User-defined callback invoked on completion of a subscription request.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef void\r
+(AL_API * __ptr64 <strong>ib_pfn_sub_cb_t</strong>)(\r
+ IN <a href="#robo253">ib_sub_rec_t</a> *p_sub_rec );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_sub_rec\r
+ [in] This is a reference to a structure containing the result of the\r
+ subscription request.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This routine is invoked to notify a client of the result of a\r
+ subscription request with a class manager. If the subscription request\r
+ was successful, the client will receive future notifications of the\r
+ subscribed event from the class manager.\r
+\r
+ This callback will always be invoked before a client receives information\r
+ reported on a subscribed event that has occurred.\r
+\r
+ In the kernel, this callback is usually invoked using a tasklet, dependent\r
+ on the implementation of the underlying verbs provider driver.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo255">ib_subscribe</a>, <a href="#robo253">ib_sub_rec_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo189">[Structures]<a name="Access20Layer2fib5fpnp5fca5frec5ft">\r
+Access Layer/ib_pnp_ca_rec_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_pnp_ca_rec_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Notification information used to describe local channel adapter events.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef struct _ib_pnp_ca_rec\r
+{\r
+ <a href="#robo196">ib_pnp_rec_t</a> pnp_rec;\r
+ <a href="./ib_types_h.html#robo60">ib_ca_attr_t</a>* __ptr64 p_ca_attr;\r
+\r
+} <strong>ib_pnp_ca_rec_t</strong>;\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> pnp_rec\r
+ Structure describing the plug and play event being reported.\r
+\r
+ p_ca_attr\r
+ Attributes of the channel adapter that has experienced the event.\r
+ NULL for IB_PNP_CA_REMOVE, IB_PNP_PORT_REMOVE, and IB_PNP_IOC_REMOVE\r
+ events.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This structure is returned to the user to notify them of the addition\r
+ or the removal of a channel adapter.\r
+\r
+ The context field is NULL unless a context value has already been set\r
+ by the user.\r
+\r
+ Context values can be changed by updating the appropriate field\r
+ and will be take effect once the notification callback returns.\r
+\r
+ Once a device has been removed, all context associated with that device\r
+ is lost.\r
+\r
+ Recipients of CA-related PnP events should cast the <a href="#robo196">ib_pnp_rec_t</a> structure\r
+ returned in the PnP callback to this type to access CA-specific information.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo163">ib_open_al</a>, <a href="./ib_types_h.html#robo60">ib_ca_attr_t</a>, <a href="#robo231">ib_reg_pnp</a>, <a href="#robo113">ib_dereg_pnp</a>, <a href="#robo182">ib_pfn_pnp_cb_t</a>,\r
+ ib_ioc_info_t, <a href="#robo239">ib_reject_ioc</a>, <a href="#robo191">ib_pnp_event_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo190">[Definitions]<a name="Access20Layer2fib5fpnp5fclass5ft">\r
+Access Layer/ib_pnp_class_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_pnp_class_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Specifies the class of plug and play events that are being subscribed for.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>#define IB_PNP_CA 0x00000001\r
+#define IB_PNP_PORT 0x00000002\r
+#define IB_PNP_IOU 0x00000004\r
+#define IB_PNP_IOC 0x00000008\r
+\r
+#define IB_PNP_FLAG_REG_SYNC 0x40000000\r
+#define IB_PNP_FLAG_REG_COMPLETE 0x80000000\r
+#define IB_PNP_FLAG_MASK 0xF0000000\r
+#define IB_PNP_CLASS_MASK 0x000000FF\r
+\r
+typedef uint32_t <strong>ib_pnp_class_t</strong>;\r
+</pre>\r
+</span><p><strong>VALUES</strong></p>\r
+<span class="VALUES"><pre> IB_PNP_CA\r
+ Value used to register for local channel adapter events. These\r
+ events include the addition or removal of a local channel adapter.\r
+\r
+ IB_PNP_PORT\r
+ Value used to register for local port events. These events include\r
+ local port up or down events and port LID or Pkey changes.\r
+\r
+ IB_PNP_IOU\r
+ Value used to register for I/O unit PnP events. I/O unit events\r
+ include notifications of I/O unit assignment to and dissociation from\r
+ the local host.\r
+\r
+ IB_PNP_IOC\r
+ Value used to register for an I/O controller PnP event. I/O controller\r
+ events include notification of an I/O controller assignment to a local\r
+ port and indication that an I/O controller dissociation has occurred.\r
+\r
+ IB_PNP_FLAG_REG_SYNC\r
+ Flag that is ORed with the PnP Class to control behavior of the\r
+ ib_pnp_reg call. When set, ib_pnp_reg returns after client has\r
+ received all events for the current state of the system.\r
+\r
+ IB_PNP_FLAG_REG_COMPLETE\r
+ Flag that is ORed with the PnP Class to control whether an event\r
+ is generated to indicate that a client has received all events for the\r
+ current state of the system.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> When registering for PnP notification, a client specifies the class of\r
+ local events that the client wishes to be notified of. For example to\r
+ request notification of events on a port, a client would use IB_PNP_PORT.\r
+ To be notified of the assignment of an I/O controller, a client would use\r
+ IB_PNP_IOC.\r
+\r
+ The PnP APIs do not support registration for multiple event classes at\r
+ a time.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo182">ib_pfn_pnp_cb_t</a>, <a href="#robo185">ib_pfn_report_cb_t</a>, <a href="#robo196">ib_pnp_rec_t</a>, <a href="#robo191">ib_pnp_event_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo191">[Definitions]<a name="Access20Layer2fib5fpnp5fevent5ft">\r
+Access Layer/ib_pnp_event_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_pnp_event_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Indicates the type of plug and play event that has occurred.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>#define IB_PNP_EVENT_PATH 0x00000800\r
+#define IB_PNP_EVENT_ADD 0x00001000\r
+#define IB_PNP_EVENT_REMOVE 0x00002000\r
+#define IB_PNP_EVENT_CHANGE 0x00004000\r
+#define IB_PNP_EVENT_INIT 0x00008000\r
+#define IB_PNP_EVENT_ARMED 0x00010000\r
+#define IB_PNP_EVENT_ACTIVE 0x00020000\r
+#define IB_PNP_EVENT_DOWN 0x00040000\r
+#define IB_PNP_EVENT_PKEY 0x00080000\r
+#define IB_PNP_EVENT_SM 0x00100000\r
+#define IB_PNP_EVENT_GID 0x00200000\r
+#define IB_PNP_EVENT_LID 0x00400000\r
+#define IB_PNP_EVENT_SUBNET 0x00800000\r
+\r
+#define IB_PNP_CA_ADD (IB_PNP_CA | IB_PNP_EVENT_ADD)\r
+#define IB_PNP_CA_REMOVE (IB_PNP_CA | IB_PNP_EVENT_REMOVE)\r
+\r
+#define IB_PNP_PORT_ADD (IB_PNP_PORT | IB_PNP_EVENT_ADD)\r
+#define IB_PNP_PORT_REMOVE (IB_PNP_PORT | IB_PNP_EVENT_REMOVE)\r
+#define IB_PNP_PORT_INIT (IB_PNP_PORT | IB_PNP_EVENT_INIT)\r
+#define IB_PNP_PORT_ARMED (IB_PNP_PORT | IB_PNP_EVENT_ARMED)\r
+#define IB_PNP_PORT_ACTIVE (IB_PNP_PORT | IB_PNP_EVENT_ACTIVE)\r
+#define IB_PNP_PORT_DOWN (IB_PNP_PORT | IB_PNP_EVENT_DOWN)\r
+#define IB_PNP_PKEY_CHANGE (IB_PNP_PORT | IB_PNP_EVENT_PKEY)\r
+#define IB_PNP_SM_CHANGE (IB_PNP_PORT | IB_PNP_EVENT_SM)\r
+#define IB_PNP_GID_CHANGE (IB_PNP_PORT | IB_PNP_EVENT_GID)\r
+#define IB_PNP_LID_CHANGE (IB_PNP_PORT | IB_PNP_EVENT_LID)\r
+#define IB_PNP_SUBNET_TIMEOUT_CHANGE (IB_PNP_PORT | IB_PNP_EVENT_SUBNET)\r
+\r
+#define IB_PNP_IOU_ADD (IB_PNP_IOU | IB_PNP_EVENT_ADD)\r
+#define IB_PNP_IOU_REMOVE (IB_PNP_IOU | IB_PNP_EVENT_REMOVE)\r
+#define IB_PNP_IOC_ADD (IB_PNP_IOC | IB_PNP_EVENT_ADD)\r
+#define IB_PNP_IOC_REMOVE (IB_PNP_IOC | IB_PNP_EVENT_REMOVE)\r
+#define IB_PNP_IOC_PATH_ADD (IB_PNP_IOC | IB_PNP_EVENT_PATH | \\r
+ IB_PNP_EVENT_ADD)\r
+#define IB_PNP_IOC_PATH_REMOVE (IB_PNP_IOC | IB_PNP_EVENT_PATH | \\r
+ IB_PNP_EVENT_REMOVE)\r
+\r
+#define IB_PNP_REG_COMPLETE IB_PNP_FLAG_REG_COMPLETE\r
+\r
+typedef uint32_t <strong>ib_pnp_event_t</strong>;\r
+</pre>\r
+</span><p><strong>VALUES</strong></p>\r
+<span class="VALUES"><pre> IB_PNP_CA_ADD\r
+ Indicates that a new channel adapter has been added.\r
+\r
+ IB_PNP_CA_REMOVE\r
+ Indicates that a channel adapter has been removed.\r
+\r
+ IB_PNP_PORT_ADD\r
+ Indicates that a new port has been added. This callback will always\r
+ be followed by a callback to indicate the actual port state to allow\r
+ clients to use the PnP callbacks to drive their state machine.\r
+\r
+ IB_PNP_PORT_REMOVE\r
+ Indicates that a port has been removed.\r
+ A CA remove event will trigger this event first.\r
+\r
+ IB_PNP_PORT_INIT\r
+ Indicates that a port is in the IB_LINK_INIT state.\r
+\r
+ IB_PNP_PORT_ARMED\r
+ Indicates that a port is in the IB_LINK_ARMED state.\r
+\r
+ IB_PNP_PORT_ACTIVE\r
+ Indicates that a port is in the IB_LINK_ACTIVE state.\r
+\r
+ IB_PNP_PORT_DOWN\r
+ Indicates that a port down event has occurred.\r
+\r
+ IB_PNP_PKEY_CHANGE\r
+ Indicates that port Pkey change has ocurred.\r
+\r
+ IB_PNP_SM_CHANGE\r
+ Indicates that the SM assignment for a port has changed.\r
+\r
+ IB_PNP_GID_CHANGE\r
+ Indicates that the GID assignment for a port has changed.\r
+\r
+ IB_PNP_LID_CHANGE\r
+ Indicates that the LID or LMC assignment for a port has changed.\r
+\r
+ IB_PNP_SUBNET_TIMEOUT_CHANGE\r
+ Indicates that the subnet timeout assignment for a port has changed.\r
+\r
+ IB_PNP_IOU_ADD\r
+ Indicates that an I/O unit assignment has occured.\r
+\r
+ IB_PNP_IOU_REMOVE\r
+ Indicates that an I/O unit disassociation has occured.\r
+\r
+ IB_PNP_IOC_ADD\r
+ Indicates that an I/O controller assignment has occurred.\r
+\r
+ IB_PNP_IOC_REMOVE\r
+ Indicates that an I/O controller dissociation has occurred.\r
+ A port down event will trigger this event first.\r
+\r
+ IB_PNP_IOC_PATH_ADD\r
+ Indicates that a new path to an I/O controller is available.\r
+\r
+ IB_PNP_IOC_PATH_REMOVE\r
+ Indiactes that a path to an I/O controller is no longer avaialble.\r
+\r
+ IB_PNP_REG_COMPLETE\r
+ Indicates that all events associated with a <a href="#robo231">ib_reg_pnp</a> call have been\r
+ reported to the user. The user's state of the system is now in\r
+ sync with that of the access layer.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> The Access Layer maintains a queue of client PnP registrations.\r
+ Using this queue, PnP events are reported to clients in a specific\r
+ order. CA add, port add, and IOC add events are reported from the\r
+ head of the queue, while CA remove, port remove, and IOC remove events\r
+ are reported from the tail. Clients are responsible for performing\r
+ registrations in the proper sequence to ensure that PnP event\r
+ notifiations occur in the desired order.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo182">ib_pfn_pnp_cb_t</a>, <a href="#robo185">ib_pfn_report_cb_t</a>, <a href="#robo196">ib_pnp_rec_t</a>, <a href="#robo190">ib_pnp_class_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo192">[Structures]<a name="Access20Layer2fib5fpnp5fioc5fpath5frec5ft">\r
+Access Layer/ib_pnp_ioc_path_rec_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_pnp_ioc_path_rec_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Notification information used to describe local channel adapter, port,\r
+ and I/O controller events.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef struct _ib_pnp_ioc_path_rec\r
+{\r
+ <a href="#robo196">ib_pnp_rec_t</a> pnp_rec;\r
+ net64_t ca_guid;\r
+ net64_t port_guid;\r
+ <a href="./ib_types_h.html#robo927">ib_path_rec_t</a> path;\r
+\r
+} <strong>ib_pnp_ioc_path_rec_t</strong>;\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> pnp_rec\r
+ Structure describing the plug and play event being reported.\r
+\r
+ ca_guid\r
+ GUID of the local HCA through which the I/O controller is accessible.\r
+ Valid only for IB_PNP_IOC_PATH_ADD and IB_PNP_IOC_PATH_REMOVE events.\r
+\r
+ port_guid\r
+ GUID of the local HCA port through which the I/O controller is\r
+ accessible. Valid only for IB_PNP_IOC_PATH_ADD and\r
+ IB_PNP_IOC_PATH_REMOVE events.\r
+\r
+ p_path\r
+ Path record that provides connectivity with a given I/O controller.\r
+ Valid only for IB_PNP_IOC_PATH_ADD and IB_PNP_IOC_PATH_REMOVE events.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This structure is returned to the user to notify them of the addition\r
+ and removal of a path to an I/O controller. I/O controller path\r
+ notifications are only delivered with respect to a previously reported\r
+ I/O controller.\r
+\r
+ The context field is NULL unless a context value has already been set\r
+ by the user.\r
+\r
+ Context values can be changed by updating the appropriate field\r
+ and will be take effect once the notification callback returns.\r
+\r
+ Once a device has been removed, all context associated with that device\r
+ is lost. Context is maintained between port down and subsequent port up\r
+ events provided that the channel adapter is not removed.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo163">ib_open_al</a>, <a href="./ib_types_h.html#robo60">ib_ca_attr_t</a>, <a href="#robo231">ib_reg_pnp</a>, <a href="#robo113">ib_dereg_pnp</a>, <a href="#robo182">ib_pfn_pnp_cb_t</a>,\r
+ ib_ioc_info_t, <a href="#robo239">ib_reject_ioc</a>, <a href="#robo191">ib_pnp_event_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo193">[Structures]<a name="Access20Layer2fib5fpnp5fioc5frec5ft">\r
+Access Layer/ib_pnp_ioc_rec_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_pnp_ioc_rec_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Notification information used to describe local channel adapter, port,\r
+ and I/O controller events.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef struct _ib_pnp_ioc_rec\r
+{\r
+ <a href="#robo196">ib_pnp_rec_t</a> pnp_rec;\r
+ net64_t ca_guid;\r
+ ib_ioc_info_t info;\r
+ <a href="./ib_types_h.html#robo968">ib_svc_entry_t</a> svc_entry_array[1];\r
+\r
+} <strong>ib_pnp_ioc_rec_t</strong>;\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> pnp_rec\r
+ Structure describing the plug and play event being reported.\r
+\r
+ ca_guid\r
+ GUID of the local HCA through which the I/O controller is accessible.\r
+ Valid only for IB_PNP_IOC_ADD events.\r
+\r
+ p_ioc_info\r
+ The I/O controller information for an assigned controller, including\r
+ information for the I/O unit. Valid only for IB_PNP_IOC_ADD events.\r
+\r
+ svc_entry_array\r
+ If an I/O controller is being reported, this will reference an array\r
+ of service entries associated with the I/O controller. The actual\r
+ number of entries in the array may be determined by examining the\r
+ svc_entries field in the I/O controller profile. Valid only for\r
+ IB_PNP_IOC_ADD events.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This structure is returned to the user to notify them of the addition\r
+ and removal of an I/O controller.\r
+\r
+ The context field is NULL unless a context value has already been set\r
+ by the user.\r
+\r
+ Context values can be changed by updating the appropriate field\r
+ and will be take effect once the notification callback returns.\r
+\r
+ Once a device has been removed, all context associated with that device\r
+ is lost. Context is maintained between port down and subsequent port up\r
+ events provided that the channel adapter is not removed.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo163">ib_open_al</a>, <a href="./ib_types_h.html#robo60">ib_ca_attr_t</a>, <a href="#robo231">ib_reg_pnp</a>, <a href="#robo113">ib_dereg_pnp</a>, <a href="#robo182">ib_pfn_pnp_cb_t</a>,\r
+ ib_ioc_info_t, <a href="#robo239">ib_reject_ioc</a>, <a href="#robo191">ib_pnp_event_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo194">[Structures]<a name="Access20Layer2fib5fpnp5fiou5frec5ft">\r
+Access Layer/ib_pnp_iou_rec_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_pnp_iou_rec_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Notification information used to describe local I/O unit events.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef struct _ib_pnp_iou_rec\r
+{\r
+ <a href="#robo196">ib_pnp_rec_t</a> pnp_rec;\r
+ net64_t ca_guid;\r
+ net64_t chassis_guid;\r
+ uint8_t slot;\r
+ net32_t vend_id;\r
+ net16_t dev_id;\r
+ net32_t revision;\r
+ char desc[IB_NODE_DESCRIPTION_SIZE + 1];\r
+\r
+} <strong>ib_pnp_iou_rec_t</strong>;\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> pnp_rec\r
+ Structure describing the plug and play event being reported.\r
+\r
+ ca_guid\r
+ GUID of the local HCA through which the I/O unit is accessible. Valid\r
+ only for IB_PNP_IOU_ADD events.\r
+\r
+ chassis guid\r
+ GUID of the chassis in which an I/O unit is installed. Valid only for\r
+ IB_PNP_IOU_ADD events.\r
+\r
+ slot\r
+ Chassis slot number in which an I/O unit is installed. Valid only for\r
+ IB_PNP_IOU_ADD events.\r
+\r
+ guid\r
+ GUID of an I/O unit from which one or more I/O controllers are assigned\r
+ to this host. Valid only for IB_PNP_IOU_ADD events.\r
+\r
+ vend_id\r
+ Vendor ID of an I/O unit from which one or more I/O controllers are\r
+ assigned to this host. Valid only for IB_PNP_IOU_ADD events.\r
+\r
+ dev_id\r
+ Device ID of an I/O unit from which one or more I/O controllers are\r
+ assigned to this host. Valid only for IB_PNP_IOU_ADD events.\r
+\r
+ revision\r
+ Revision of an I/O unit from which one or more I/O controllers are\r
+ assigned to this host. Valid only for IB_PNP_IOU_ADD events.\r
+\r
+ desc\r
+ Node description string for an I/O unit from which one or more I/O\r
+ controllers are assigned to this host. Valid only for IB_PNP_IOU_ADD\r
+ events.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This structure is returned to the user to notify them of the addition\r
+ and removal of an I/O Unit.\r
+\r
+ The context field is NULL unless a context value has already been set\r
+ by the user.\r
+\r
+ Context values can be changed by updating the appropriate field\r
+ and will be take effect once the notification callback returns.\r
+\r
+ Once a device has been removed, all context associated with that device\r
+ is lost. Context is maintained between port down and subsequent port up\r
+ events provided that the channel adapter is not removed.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo163">ib_open_al</a>, <a href="./ib_types_h.html#robo60">ib_ca_attr_t</a>, <a href="#robo231">ib_reg_pnp</a>, <a href="#robo113">ib_dereg_pnp</a>, <a href="#robo182">ib_pfn_pnp_cb_t</a>,\r
+ ib_ioc_info_t, <a href="#robo239">ib_reject_ioc</a>, <a href="#robo191">ib_pnp_event_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo195">[Structures]<a name="Access20Layer2fib5fpnp5fport5frec5ft">\r
+Access Layer/ib_pnp_port_rec_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_pnp_port_rec_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Notification information used to describe local port events.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef struct _ib_pnp_port_rec\r
+{\r
+ <a href="#robo196">ib_pnp_rec_t</a> pnp_rec;\r
+ <a href="./ib_types_h.html#robo60">ib_ca_attr_t</a>* __ptr64 p_ca_attr;\r
+ <a href="./ib_types_h.html#robo200">ib_port_attr_t</a>* __ptr64 p_port_attr;\r
+\r
+} <strong>ib_pnp_port_rec_t</strong>;\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> pnp_rec\r
+ Structure describing the plug and play event being reported.\r
+\r
+ p_ca_attr\r
+ Attributes of the channel adapter that has experienced the event.\r
+ NULL for IB_PNP_CA_REMOVE, IB_PNP_PORT_REMOVE, and IB_PNP_IOC_REMOVE\r
+ events.\r
+\r
+ p_port_attr\r
+ Attributes of the port that has experienced the event. Valid only\r
+ for IB_PNP_PORT_UP, IB_PNP_PORT_DOWN, IB_PNP_PKEY_CHANGE, and\r
+ IB_PNP_IOC_ADD events.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This structure is returned to the user to notify them of port events.\r
+\r
+ The context field is NULL unless a context value has already been set\r
+ by the user.\r
+\r
+ Context values can be changed by updating the appropriate field\r
+ and will be take effect once the notification callback returns.\r
+\r
+ Once a device has been removed, all context associated with that device\r
+ is lost. Context is maintained between port down and subsequent port up\r
+ events provided that the channel adapter is not removed.\r
+\r
+ Recipients of port related PnP events should cast the <a href="#robo196">ib_pnp_rec_t</a> structure\r
+ returned in the PnP callback to this type to access port specific information.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo163">ib_open_al</a>, <a href="./ib_types_h.html#robo60">ib_ca_attr_t</a>, <a href="#robo231">ib_reg_pnp</a>, <a href="#robo113">ib_dereg_pnp</a>, <a href="#robo182">ib_pfn_pnp_cb_t</a>,\r
+ ib_ioc_info_t, <a href="#robo239">ib_reject_ioc</a>, <a href="#robo191">ib_pnp_event_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo196">[Structures]<a name="Access20Layer2fib5fpnp5frec5ft">\r
+Access Layer/ib_pnp_rec_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_pnp_rec_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Notification information used to describe local channel adapter, port,\r
+ and I/O controller events.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef struct _ib_pnp_rec\r
+{\r
+ <a href="#robo191">ib_pnp_event_t</a> pnp_event;\r
+\r
+ ib_pnp_handle_t h_pnp;\r
+ ib_pnp_handle_t h_ioc_event;\r
+\r
+ void* __ptr64 pnp_context;\r
+ void* __ptr64 context;\r
+\r
+ <a href="./ib_types_h.html#robo895">ib_net64_t</a> guid;\r
+\r
+} <strong>ib_pnp_rec_t</strong>;\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> pnp_event\r
+ Describes the type of plug and play event that is being reported.\r
+\r
+ h_pnp\r
+ A handle to the notification registration for which this PnP record\r
+ was generated. This handle will match the handle returned through\r
+ an <a href="#robo231">ib_reg_pnp</a> call. It is provided in case a PnP notification event\r
+ occurs before a client's call to <a href="#robo231">ib_reg_pnp</a> can return. This handle\r
+ may be used to cancel further notification of PnP events.\r
+\r
+ h_ioc_event\r
+ A handle that is unique to an I/O controller assignment event.\r
+ This handle is used to reject the assignment of an I/O controller\r
+ from within the <a href="#robo182">ib_pfn_pnp_cb_t</a> callback. Valid for IB_PNP_IOC_ADD\r
+ events only.\r
+\r
+ pnp_context\r
+ User-defined context information specified when registering for\r
+ notification of the event. See the notes section below for\r
+ more details.\r
+\r
+ context\r
+ This field references a user-specified context on which the event\r
+ occurred. See the notes section below for more details.\r
+\r
+ guid\r
+ The GUID of the adapter, port, IOU, or IOC for which\r
+ the PnP event occurred.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This structure is returned to the user to notify them of: the addition\r
+ of a channel adapter, the removal of a channel adapter, a port up or down\r
+ event, a port pkey change, and I/O controller addition and removal events.\r
+\r
+ The context field is NULL unless a context value has already been set\r
+ by the user.\r
+\r
+ The context value can be changed by updating its field\r
+ and will take effect once the notification callback returns.\r
+\r
+ Once a device has been removed, all context associated with that device\r
+ is lost. Context is maintained between port down and subsequent port up\r
+ events provided that the channel adapter is not removed.\r
+\r
+ I/O controller path notifications are only delivered with respect to a\r
+ previously reported I/O controller.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo163">ib_open_al</a>, <a href="./ib_types_h.html#robo60">ib_ca_attr_t</a>, <a href="#robo231">ib_reg_pnp</a>, <a href="#robo113">ib_dereg_pnp</a>, <a href="#robo182">ib_pfn_pnp_cb_t</a>,\r
+ ib_ioc_info_t, <a href="#robo239">ib_reject_ioc</a>, <a href="#robo191">ib_pnp_event_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo197">[Structures]<a name="Access20Layer2fib5fpnp5freq5ft">\r
+Access Layer/ib_pnp_req_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_pnp_req_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Information used to register for notification of local and I/O\r
+ controller assignment events.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef struct _ib_pnp_req\r
+{\r
+ <a href="#robo190">ib_pnp_class_t</a> pnp_class;\r
+ const void *pnp_context;\r
+ <a href="#robo182">ib_pfn_pnp_cb_t</a> pfn_pnp_cb;\r
+\r
+} <strong>ib_pnp_req_t</strong>;\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> pnp_class\r
+ Specifies the class of PnP events that the client wishes to be\r
+ notified of.\r
+\r
+ pnp_context\r
+ User-defined context information associated with this notification.\r
+ The context data is returned to the user as a part of their PnP\r
+ notification callback.\r
+\r
+ pfn_pnp_cb\r
+ User-defined callback function that is invoked to notify the user of\r
+ the occurrance of a plug and play event.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This structure is used when requesting notification of local events from\r
+ the access layer. The class of PnP events which to be notified of is\r
+ specified through the pnp_class field.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo190">ib_pnp_class_t</a>, <a href="#robo182">ib_pfn_pnp_cb_t</a>, <a href="#robo231">ib_reg_pnp</a>, <a href="#robo196">ib_pnp_rec_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo198">[Functions]<a name="Access20Layer2fib5fpoll5fcq">\r
+Access Layer/ib_poll_cq</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_poll_cq</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Checks a completion queue for completed work requests.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_EXPORT <a href="./ib_types_h.html#robo49">ib_api_status_t</a> AL_API\r
+<strong>ib_poll_cq</strong>(\r
+ IN const ib_cq_handle_t h_cq,\r
+ IN OUT <a href="./ib_types_h.html#robo260">ib_wc_t</a>** const pp_free_wclist,\r
+ OUT <a href="./ib_types_h.html#robo260">ib_wc_t</a>** const pp_done_wclist );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_cq\r
+ [in] A handle to a completion queue to check for completions on.\r
+\r
+ pp_free_wclist\r
+ [in/out] On input, a list of work completion structures provided by\r
+ the client. These are used to report completed work requests through\r
+ the pp_done_wclist.\r
+\r
+ On output, this contains the list of work completions structures for\r
+ which no work completion was found.\r
+\r
+ pp_done_wclist\r
+ [out] A list of work completions retrieved from the completion queue.\r
+\r
+ RETURN VALUES\r
+ IB_SUCCESS\r
+ The poll operation completed successfully. If the work completion\r
+ structures referenced by the pp_free_wclist list is empty there are\r
+ potentially more completions available to retrieve.\r
+\r
+ IB_INVALID_PARAMETER\r
+ A reference to the free or done work completion list was not provided.\r
+\r
+ IB_INVALID_CQ_HANDLE\r
+ The completion queue handle was invalid.\r
+\r
+ IB_NOT_FOUND\r
+ No completed work requests were removed from the completion queue.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This routine retrieves completed work requests from the specified\r
+ completion queue. This call will retrieve all completed requests,\r
+ up to to the number of work completion structures referenced by the\r
+ pp_free_wclist. Completed requests will be returned through the\r
+ pp_done_wclist parameter.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo105">ib_create_cq</a>, <a href="#robo203">ib_post_send</a>, <a href="#robo202">ib_post_recv</a>, <a href="#robo58">ib_bind_mw</a>, <a href="./ib_types_h.html#robo260">ib_wc_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo202">[Functions]<a name="Access20Layer2fib5fpost5frecv">\r
+Access Layer/ib_post_recv</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_post_recv</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> This routine posts a work request to the receive queue of a queue pair.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_EXPORT <a href="./ib_types_h.html#robo49">ib_api_status_t</a> AL_API\r
+<strong>ib_post_recv</strong>(\r
+ IN const ib_qp_handle_t h_qp,\r
+ IN <a href="./ib_types_h.html#robo225">ib_recv_wr_t</a>* const p_recv_wr,\r
+ OUT <a href="./ib_types_h.html#robo225">ib_recv_wr_t</a> **pp_recv_failure OPTIONAL );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_qp\r
+ [in] The queue pair to which this work request is being submitted.\r
+\r
+ p_recv_wr\r
+ [in] A reference to the head of the work request list.\r
+\r
+ pp_recv_failure\r
+ [out] If the post receive operation failed, this references the work\r
+ request in the p_recv_wr list where the first failure occurred.\r
+ This parameter may be NULL if only a single work request is being\r
+ posted to the QP.\r
+\r
+ RETURN VALUES\r
+ IB_SUCCESS\r
+ All work requests were successfully posted.\r
+\r
+ IB_INVALID_QP_HANDLE\r
+ The queue pair handle was invalid.\r
+\r
+ IB_INVALID_PARAMETER\r
+ A reference to the receive work request list was not provided.\r
+\r
+ IB_INSUFFICIENT_RESOURCES\r
+ The number of posted work requests exceed the current depth available\r
+ on the receive queue.\r
+\r
+ IB_INVALID_WR_TYPE\r
+ The work request type was invalid.\r
+\r
+ IB_INVALID_QP_STATE\r
+ The current queue pair state does not allow posting receives.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This routine posts a work request to the receive queue of a queue pair.\r
+ The type of work to perform is defined by the p_recv_wr parameter. This\r
+ call is used to post data buffers to receive incoming message sends.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="./ib_types_h.html#robo225">ib_recv_wr_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo203">[Functions]<a name="Access20Layer2fib5fpost5fsend">\r
+Access Layer/ib_post_send</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_post_send</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> This routine posts a work request to the send queue of a queue pair.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_EXPORT <a href="./ib_types_h.html#robo49">ib_api_status_t</a> AL_API\r
+<strong>ib_post_send</strong>(\r
+ IN const ib_qp_handle_t h_qp,\r
+ IN <a href="./ib_types_h.html#robo249">ib_send_wr_t</a>* const p_send_wr,\r
+ OUT <a href="./ib_types_h.html#robo249">ib_send_wr_t</a> **pp_send_failure OPTIONAL );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_qp\r
+ [in] The queue pair to which this work request is being submitted.\r
+\r
+ p_send_wr\r
+ [in] A reference to the head of the work request list.\r
+\r
+ pp_send_failure\r
+ [out] If the post send operation failed, this references the work\r
+ request in the p_send_wr list where the first failure occurred.\r
+ This parameter may be NULL if only a single work request is being\r
+ posted to the QP.\r
+\r
+ RETURN VALUES\r
+ IB_SUCCESS\r
+ All work requests were successfully posted.\r
+\r
+ IB_INVALID_QP_HANDLE\r
+ The queue pair handle was invalid.\r
+\r
+ IB_INVALID_PARAMETER\r
+ A reference to the send work request list was not provided.\r
+\r
+ IB_INSUFFICIENT_RESOURCES\r
+ The number of posted work requests exceed the current depth available\r
+ on the send queue.\r
+\r
+ IB_INVALID_WR_TYPE\r
+ The work request type was invalid.\r
+\r
+ IB_INVALID_QP_STATE\r
+ The current queue pair state does not allow posting sends.\r
+\r
+ IB_INVALID_MAX_SGE\r
+ The number of work request scatter gather elements exceed the queue\r
+ pair configuration.\r
+\r
+ IB_UNSUPPORTED\r
+ The requested operation is not supported by the channel adapter.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This routine posts a work request to the send queue of a queue pair.\r
+ The type of work to perform is defined by the p_send_wr parameter.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="./ib_types_h.html#robo249">ib_send_wr_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo204">[Functions]<a name="Access20Layer2fib5fput5fmad">\r
+Access Layer/ib_put_mad</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_put_mad</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Returns a list of MAD elements to the pool.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_EXPORT <a href="./ib_types_h.html#robo49">ib_api_status_t</a> AL_API\r
+<strong>ib_put_mad</strong>(\r
+ IN const <a href="#robo150">ib_mad_element_t</a>* p_mad_element_list );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_mad_element_list\r
+ [in] A pointer to a list of MAD elements.\r
+\r
+ RETURN VALUES\r
+ IB_SUCCESS\r
+ The list of MAD elements was successfully returned to the MAD pool.\r
+\r
+ IB_INVALID_PARAMETER\r
+ A reference to the MAD element list was not provided.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This function returns a list of MAD elements to the pool.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo129">ib_get_mad</a>, <a href="#robo150">ib_mad_element_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo211">[Functions]<a name="Access20Layer2fib5fquery">\r
+Access Layer/ib_query</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_query</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Routine used to request an access layer provided query of the subnet\r
+ administrator.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_EXPORT <a href="./ib_types_h.html#robo49">ib_api_status_t</a> AL_API\r
+<strong>ib_query</strong>(\r
+ IN const ib_al_handle_t h_al,\r
+ IN const <a href="#robo220">ib_query_req_t</a>* const p_query_req,\r
+ OUT ib_query_handle_t* const ph_query OPTIONAL );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_al\r
+ [in] A handle to an open instance of the access layer.\r
+\r
+ p_query_req\r
+ [in] Specifies the type of query that the access layer should perform,\r
+ along with information needed to process the completed query.\r
+\r
+ ph_query\r
+ [out] Pointer to a query handle that can be used to cancel the query.\r
+\r
+ RETURN VALUES\r
+ IB_SUCCESS\r
+ The subnet administrator query was initiated.\r
+\r
+ IB_INVALID_AL_HANDLE\r
+ The access layer handle was invalid.\r
+\r
+ IB_INVALID_PARAMETER\r
+ A reference to the query request was not provided.\r
+\r
+ IB_INSUFFICIENT_MEMORY\r
+ There was insufficient memory to perform the operation.\r
+\r
+ IB_INVALID_GUID\r
+ No port was found for the port_guid specified in the request.\r
+\r
+ IB_ERROR\r
+ An invalid query_type was specified in the request.\r
+\r
+ IB_INSUFFICIENT_RESOURCES\r
+ There were insufficient resources currently available on the channel\r
+ adapter to perform the operation.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This routine directs the access layer to initiate a query to the subnet\r
+ administrator for desired information. The access layer will issue the\r
+ query, collect the results, and report them to the client through a user-\r
+ specified callback. The access layer is responsible for retrying the\r
+ operation as directed by the client.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo63">ib_cancel_query</a>, <a href="#robo220">ib_query_req_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo212">[Functions]<a name="Access20Layer2fib5fquery5fav">\r
+Access Layer/ib_query_av</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_query_av</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Returns the attributes of an address vector.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_EXPORT <a href="./ib_types_h.html#robo49">ib_api_status_t</a> AL_API\r
+<strong>ib_query_av</strong>(\r
+ IN const ib_av_handle_t h_av,\r
+ OUT <a href="./ib_types_h.html#robo57">ib_av_attr_t</a>* const p_av_attr,\r
+ OUT ib_pd_handle_t* const ph_pd );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_av\r
+ [in] A handle to an existing address vector.\r
+\r
+ p_av_attr\r
+ [out] Upon successful completion, the structure referenced by this\r
+ parameter contains the attributes of the specified address vector.\r
+\r
+ ph_pd\r
+ [out] Upon successful completion, this references a handle to the\r
+ protection domain associated with the address vector.\r
+\r
+ RETURN VALUES\r
+ IB_SUCCESS\r
+ The attributes were returned successfully.\r
+\r
+ IB_INVALID_AV_HANDLE\r
+ The address vector handle was invalid.\r
+\r
+ IB_INVALID_PARAMETER\r
+ A reference to the address vector attributes structure or protection\r
+ domain handle was not provided.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo104">ib_create_av</a>, <a href="#robo155">ib_modify_av</a>, <a href="#robo115">ib_destroy_av</a>, <a href="./ib_types_h.html#robo57">ib_av_attr_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo213">[Functions]<a name="Access20Layer2fib5fquery5fca">\r
+Access Layer/ib_query_ca</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_query_ca</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Queries the attributes of an opened channel adapter.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_EXPORT <a href="./ib_types_h.html#robo49">ib_api_status_t</a> AL_API\r
+<strong>ib_query_ca</strong>(\r
+ IN const ib_ca_handle_t h_ca,\r
+ OUT <a href="./ib_types_h.html#robo60">ib_ca_attr_t</a>* const p_ca_attr OPTIONAL,\r
+ IN OUT uint32_t* const p_size );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_ca\r
+ [in] The handle to an open channel adapter.\r
+\r
+ p_ca_attr\r
+ [out] A reference to a buffer where the channel adapter attributes,\r
+ including port attribute information will be copied. If this parameter\r
+ is NULL, then the required buffer size needed to return all of the CA\r
+ attribute information is returned through the p_size parameter. The\r
+ <a href="./ib_types_h.html#robo60">ib_ca_attr_t</a> structure for the specified channel adapter is stored\r
+ at the top of the buffer.\r
+\r
+ p_size\r
+ [in/out] On input, this references the size of the data buffer\r
+ referenced by the p_ca_attr parameter.\r
+\r
+ On output, the number of bytes used or needed to copy all CA\r
+ attribute information.\r
+\r
+ RETURN VALUES\r
+ IB_SUCCESS\r
+ The attributes were returned successfully.\r
+\r
+ IB_INVALID_CA_HANDLE\r
+ The channel adapter handle was invalid.\r
+\r
+ IB_INSUFFICIENT_MEMORY\r
+ The size of the p_ca_attr buffer, specified through p_size, is\r
+ insufficient to store all of the CA attribute information.\r
+\r
+ IB_INVALID_PARAMETER\r
+ A reference to the size was not provided.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This routine returns information about the specified channel adapter,\r
+ including port attributes. The amount of information returned through\r
+ this call is variable sized. Users may obtain the size of the data\r
+ buffer required to obtain the CA attributes by calling this function\r
+ with p_ca_attr set to NULL. The access layer will then return the\r
+ necessary size in the variable referenced by the p_size parameter.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo164">ib_open_ca</a>, <a href="#robo214">ib_query_ca_by_guid</a>, <a href="#robo156">ib_modify_ca</a>, <a href="#robo68">ib_close_ca</a>, <a href="./ib_types_h.html#robo60">ib_ca_attr_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo214">[Functions]<a name="Access20Layer2fib5fquery5fca5fby5fguid">\r
+Access Layer/ib_query_ca_by_guid</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_query_ca_by_guid</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Queries the attributes of an opened channel adapter.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_EXPORT <a href="./ib_types_h.html#robo49">ib_api_status_t</a> AL_API\r
+<strong>ib_query_ca_by_guid</strong>(\r
+ IN const ib_al_handle_t h_al,\r
+ IN const <a href="./ib_types_h.html#robo895">ib_net64_t</a> ca_guid,\r
+ OUT <a href="./ib_types_h.html#robo60">ib_ca_attr_t</a>* const p_ca_attr OPTIONAL,\r
+ IN OUT uint32_t* const p_size );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_al\r
+ [in] The handle to an open instance of AL.\r
+\r
+ ca_guid\r
+ [in] The GUID of the channel adapter to query.\r
+\r
+ p_ca_attr\r
+ [out] A reference to a buffer where the channel adapter attributes,\r
+ including port attribute information will be copied. If this parameter\r
+ is NULL, then the required buffer size needed to return all of the CA\r
+ attribute information is returned through the p_size parameter. The\r
+ <a href="./ib_types_h.html#robo60">ib_ca_attr_t</a> structure for the specified channel adapter is stored\r
+ at the top of the buffer.\r
+\r
+ p_size\r
+ [in/out] On input, this references the size of the data buffer\r
+ referenced by the p_ca_attr parameter.\r
+\r
+ On output, the number of bytes used or needed to copy all CA\r
+ attribute information.\r
+\r
+ RETURN VALUES\r
+ IB_SUCCESS\r
+ The attributes were returned successfully.\r
+\r
+ IB_INVALID_AL_HANDLE\r
+ The access layer handle was invalid.\r
+\r
+ IB_INVALID_GUID\r
+ No channel adapter in the system was found for the specified ca_guid.\r
+\r
+ IB_INSUFFICIENT_MEMORY\r
+ The size of the p_ca_attr buffer, specified through p_size, is\r
+ insufficient to store all of the CA attribute information.\r
+\r
+ IB_INVALID_PARAMETER\r
+ A reference to the size was not provided.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This routine returns information about the specified channel adapter,\r
+ including port attributes. The amount of information returned through\r
+ this call is variable sized. Users may obtain the size of the data\r
+ buffer required to obtain the CA attributes by calling this function\r
+ with p_ca_attr set to NULL. The access layer will then return the\r
+ necessary size in the variable referenced by the p_size parameter.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo164">ib_open_ca</a>, <a href="#robo213">ib_query_ca</a>, <a href="#robo156">ib_modify_ca</a>, <a href="#robo68">ib_close_ca</a>, <a href="./ib_types_h.html#robo60">ib_ca_attr_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo215">[Functions]<a name="Access20Layer2fib5fquery5fcq">\r
+Access Layer/ib_query_cq</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_query_cq</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Returns information about the specified completion queue.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_EXPORT <a href="./ib_types_h.html#robo49">ib_api_status_t</a> AL_API\r
+<strong>ib_query_cq</strong>(\r
+ IN const ib_cq_handle_t h_cq,\r
+ OUT uint32_t* const p_size );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_cq\r
+ [in] A handle to an existing completion queue.\r
+\r
+ p_size\r
+ [out] Upon successful completion of this call, contains the actual\r
+ size of the completion queue.\r
+\r
+ RETURN VALUES\r
+ IB_SUCCESS\r
+ The completion queue was successfully queried.\r
+\r
+ IB_INVALID_CQ_HANDLE\r
+ The completion queue handle was invalid.\r
+\r
+ IB_INVALID_PARAMETER\r
+ A reference to the completion queue size was not provided.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo105">ib_create_cq</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo216">[Functions]<a name="Access20Layer2fib5fquery5fmr">\r
+Access Layer/ib_query_mr</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_query_mr</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Query the current attributes of a memory region.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_EXPORT <a href="./ib_types_h.html#robo49">ib_api_status_t</a> AL_API\r
+<strong>ib_query_mr</strong>(\r
+ IN const ib_mr_handle_t h_mr,\r
+ OUT <a href="./ib_types_h.html#robo159">ib_mr_attr_t</a>* const p_mr_attr );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_mr\r
+ [in] A handle to a registered memory region.\r
+\r
+ p_mr_attr\r
+ [out] A reference to a structure where the registered memory attributes\r
+ will be copied.\r
+\r
+ RETURN VALUES\r
+ IB_SUCCESS\r
+ The memory region attributes were returned successfully.\r
+\r
+ IB_INVALID_MR_HANDLE\r
+ The memory region handle was invalid.\r
+\r
+ IB_INVALID_PARAMETER\r
+ A reference to the memory region attributes was not provided.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This routine returns information about the specified registered memory\r
+ region.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo112">ib_dereg_mr</a>, <a href="#robo229">ib_reg_mem</a>, <a href="#robo232">ib_reg_shared</a>, <a href="./ib_types_h.html#robo159">ib_mr_attr_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo217">[Functions]<a name="Access20Layer2fib5fquery5fmw">\r
+Access Layer/ib_query_mw</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_query_mw</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Query the current attributes of a memory window.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_EXPORT <a href="./ib_types_h.html#robo49">ib_api_status_t</a> AL_API\r
+<strong>ib_query_mw</strong>(\r
+ IN const ib_mw_handle_t h_mw,\r
+ OUT ib_pd_handle_t* const ph_pd,\r
+ OUT net32_t* const p_rkey );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_mw\r
+ [in] A handle to an existing memory window.\r
+\r
+ ph_pd\r
+ [out] Upon successful completion of this call, this will reference\r
+ the protection domain associated with this memory window.\r
+\r
+ p_rkey\r
+ [out] Upon successful completion of this call, this will reference\r
+ the current rkey associated with this memory window.\r
+\r
+ RETURN VALUES\r
+ IB_SUCCESS\r
+ The memory window attributes were returned successfully.\r
+\r
+ IB_INVALID_MW_HANDLE\r
+ The memory window handle was invalid.\r
+\r
+ IB_INVALID_PARAMETER\r
+ A reference to the protection domain handle or rkey was not provided.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This routine returns information about the specified memory window.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo108">ib_create_mw</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo218">[Functions]<a name="Access20Layer2fib5fquery5fqp">\r
+Access Layer/ib_query_qp</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_query_qp</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Query the current attributes of the queue pair.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_EXPORT <a href="./ib_types_h.html#robo49">ib_api_status_t</a> AL_API\r
+<strong>ib_query_qp</strong>(\r
+ IN const ib_qp_handle_t h_qp,\r
+ OUT <a href="./ib_types_h.html#robo205">ib_qp_attr_t</a>* const p_qp_attr );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_qp\r
+ [in] A handle to an existing queue pair.\r
+\r
+ p_qp_attr\r
+ [out] Upon successful completion of this call, the structure\r
+ referenced by this parameter contains the attributes of the specified\r
+ quere pair.\r
+\r
+ RETURN VALUES\r
+ IB_SUCCESS\r
+ The queue pair attributes were returned successfully.\r
+\r
+ IB_INVALID_QP_HANDLE\r
+ The queue pair handle was invalid.\r
+\r
+ IB_INVALID_PARAMETER\r
+ A reference to the queue pair attributes structure was not provided.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This routine returns information about the specified queue pair.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo109">ib_create_qp</a>, <a href="#robo158">ib_modify_qp</a>, <a href="./ib_types_h.html#robo205">ib_qp_attr_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo219">[Structures]<a name="Access20Layer2fib5fquery5frec5ft">\r
+Access Layer/ib_query_rec_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_query_rec_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Contains the results of a subnet administration query.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef struct _ib_query_rec\r
+{\r
+ const void* __ptr64 query_context;\r
+ <a href="./ib_types_h.html#robo49">ib_api_status_t</a> status;\r
+\r
+ <a href="#robo221">ib_query_type_t</a> query_type;\r
+ uint32_t result_cnt;\r
+ <a href="#robo150">ib_mad_element_t</a>* __ptr64 p_result_mad;\r
+\r
+} <strong>ib_query_rec_t</strong>;\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> query_context\r
+ User-defined context information associated with the query through\r
+ the ib_reg_query call.\r
+\r
+ status\r
+ Indicates the success of the query operation.\r
+\r
+ query_type\r
+ Indicates the type of query for which the results are being returned.\r
+ This matches the query_type specified through the ib_reg_query call.\r
+\r
+ result_cnt\r
+ The number of result structures that were returned by the query.\r
+\r
+ p_result_mad\r
+ For queries returning IB_SUCCESS or IB_REMOTE_ERROR, this references\r
+ the MAD returned by the subnet administrator containing the list\r
+ of results or the returned error code.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> A query result structure is returned to a client through their\r
+ <a href="#robo183">ib_pfn_query_cb_t</a> routine to notify them of the results of a subnet\r
+ administration query. If the query was successful or received an error\r
+ from the subnet administrator, p_result_mad will reference a MAD element\r
+ containing the results. The MAD referenced by p_result_mad is owned by\r
+ the user and remains available even after their callback returns. Users\r
+ must call <a href="#robo204">ib_put_mad</a>() to return the MAD element back to the access layer\r
+ when they are done accessing the results.\r
+\r
+ To retrieve individual result structures from the p_result_mad, users\r
+ may call <a href="#robo135">ib_get_query_result</a>().\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo211">ib_query</a>, <a href="#robo183">ib_pfn_query_cb_t</a>, <a href="./ib_types_h.html#robo49">ib_api_status_t</a>, <a href="#robo204">ib_put_mad</a>, <a href="#robo150">ib_mad_element_t</a>\r
+ ib_query_status_t, <a href="#robo221">ib_query_type_t</a>, <a href="#robo135">ib_get_query_result</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo220">[Structures]<a name="Access20Layer2fib5fquery5freq5ft">\r
+Access Layer/ib_query_req_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_query_req_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Information used to request an access layer provided query of the subnet\r
+ administrator.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef struct _ib_query_req\r
+{\r
+ <a href="#robo221">ib_query_type_t</a> query_type;\r
+ const void* __ptr64 p_query_input;\r
+ <a href="./ib_types_h.html#robo895">ib_net64_t</a> port_guid;\r
+\r
+ uint32_t timeout_ms;\r
+ uint32_t retry_cnt;\r
+ <a href="#robo47">ib_al_flags_t</a> flags;\r
+\r
+ const void* __ptr64 query_context;\r
+ <a href="#robo183">ib_pfn_query_cb_t</a> pfn_query_cb;\r
+\r
+} <strong>ib_query_req_t</strong>;\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> query_type\r
+ Indicates the type of query that the access layer should perform.\r
+\r
+ p_query_input\r
+ A pointer to the input for the query. The data referenced by this\r
+ structure is dependent on the type of query being requested and is\r
+ determined by the specified query_type.\r
+\r
+ port_guid\r
+ Directs the query to use the specified port. The request will\r
+ contact the management entity reachable through the given port.\r
+\r
+ timeout_ms\r
+ Specifies the number of milliseconds to wait for a response for\r
+ this query until retrying or timing out the request.\r
+\r
+ retry_cnt\r
+ Specifies the number of times that the query will be retried before\r
+ failing the request.\r
+\r
+ flags\r
+ Used to describe the mode of operation. Set to IB_FLAGS_SYNC to\r
+ process the called routine synchronously.\r
+\r
+ query_context\r
+ User-defined context information associated with this query. The\r
+ context data is returned to the user as a part of their query\r
+ callback.\r
+\r
+ pfn_query_cb\r
+ A user-defined callback that is invoked upon completion of the query.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This structure is used when requesting an access layer provided query\r
+ of the subnet administrator. Clients specify the type of query through\r
+ the query_type field. Based on the type of query, the p_query_input\r
+ field is set to reference the appropriate data structure.\r
+\r
+ The information referenced by the p_query_input field is one of the\r
+ following:\r
+\r
+ -- a NULL terminated service name\r
+ -- a service id\r
+ -- a single GUID\r
+ -- a pair of GUIDs specified through an <a href="#robo139">ib_guid_pair_t</a> structure\r
+ -- a pair of GIDs specified through an <a href="#robo138">ib_gid_pair_t</a> structure\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo221">ib_query_type_t</a>, <a href="#robo183">ib_pfn_query_cb_t</a>, <a href="#robo139">ib_guid_pair_t</a>,\r
+ <a href="#robo138">ib_gid_pair_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo221">[Definitions]<a name="Access20Layer2fib5fquery5ftype5ft">\r
+Access Layer/ib_query_type_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_query_type_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Abstracted queries supported by the access layer.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef enum _ib_query_type\r
+{\r
+ IB_QUERY_USER_DEFINED,\r
+\r
+ IB_QUERY_ALL_SVC_RECS,\r
+ IB_QUERY_SVC_REC_BY_NAME,\r
+ IB_QUERY_SVC_REC_BY_ID,\r
+\r
+ IB_QUERY_CLASS_PORT_INFO,\r
+\r
+ IB_QUERY_NODE_REC_BY_NODE_GUID,\r
+ IB_QUERY_PORT_REC_BY_LID,\r
+\r
+ IB_QUERY_VLARB_BY_LID_PORT_BLOCK,\r
+ IB_QUERY_SLVL_BY_LID_AND_PORTS,\r
+\r
+ IB_QUERY_PATH_REC_BY_PORT_GUIDS,\r
+ IB_QUERY_PATH_REC_BY_GIDS,\r
+ IB_QUERY_PATH_REC_BY_LIDS,\r
+\r
+} <strong>ib_query_type_t</strong>;\r
+</pre>\r
+</span><p><strong>VALUES</strong></p>\r
+<span class="VALUES"><pre> IB_QUERY_USER_DEFINED\r
+ Query the SA based on user-defined input. Queries of this type\r
+ should reference an <a href="#robo258">ib_user_query_t</a> structure as input into the\r
+ query.\r
+\r
+ IB_QUERY_SVC_REC_BY_NAME\r
+ Query for service records based on the service name. Queries of\r
+ this type should reference an ib_svc_name_t structure as input\r
+ into the query.\r
+\r
+ IB_QUERY_SVC_REC_BY_ID\r
+ Query for service records based on the service ID. Queries of\r
+ this type should reference an <a href="./ib_types_h.html#robo895">ib_net64_t</a> value that indicates the\r
+ ID of the service being requested.\r
+\r
+ IB_QUERY_NODE_REC_BY_NODE_GUID\r
+ Query for node information based on the node's GUID. Queries of\r
+ this type should reference an <a href="./ib_types_h.html#robo895">ib_net64_t</a> value that indicates the\r
+ GUID of the node being requested.\r
+\r
+ IB_QUERY_PORT_REC_BY_LID\r
+ Query for port information based on the port's base LID. Queries of\r
+ this type should reference an <a href="./ib_types_h.html#robo893">ib_net16_t</a> value that indicates the\r
+ base LID of the port being requested.\r
+\r
+ IB_QUERY_PATH_REC_BY_PORT_GUIDS\r
+ Query for path records between the specified pair of port GUIDs.\r
+ Queries of this type should reference an <a href="#robo139">ib_guid_pair_t</a> structure\r
+ that indicates the GUIDs of the path being requested.\r
+\r
+ IB_QUERY_PATH_REC_BY_GIDS\r
+ Query for path records between the specified pair of port GIDs.\r
+ Queries of this type should reference an <a href="#robo138">ib_gid_pair_t</a> structure\r
+ that indicates the GIDs of the path being requested.\r
+\r
+ IB_QUERY_PATH_REC_BY_LIDS\r
+ Query for path records between the specified pair of port LIDs.\r
+ Queries of this type should reference an <a href="#robo145">ib_lid_pair_t</a> structure\r
+ that indicates the LIDs of the path being requested.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This enum is used to define abstracted queries provided by the access\r
+ layer. Users may issue queries not listed here by sending MADs directly\r
+ to the subnet administrator or a class manager. These queries are\r
+ intended to represent those most often used by clients.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo211">ib_query</a>, <a href="#robo220">ib_query_req_t</a>, <a href="#robo258">ib_user_query_t</a>, <a href="#robo138">ib_gid_pair_t</a>, <a href="#robo145">ib_lid_pair_t</a>\r
+ <a href="#robo139">ib_guid_pair_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo222">[Functions]<a name="Access20Layer2fib5frearm5fcq">\r
+Access Layer/ib_rearm_cq</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_rearm_cq</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> This indicates that the completion queue should notify the client when\r
+ the next completion is added.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_EXPORT <a href="./ib_types_h.html#robo49">ib_api_status_t</a> AL_API\r
+<strong>ib_rearm_cq</strong>(\r
+ IN const ib_cq_handle_t h_cq,\r
+ IN const boolean_t solicited );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_cq\r
+ [in] Handle to the completion queue to rearm.\r
+\r
+ solicited\r
+ [in] A flag indicating whether the request is to generate a\r
+ notification on the next entry, if set to FALSE, or on the next\r
+ solicited entry being added to the completion queue, if set to TRUE.\r
+\r
+ RETURN VALUES\r
+ IB_SUCCESS\r
+ The completion queue rearm request was registered successfully.\r
+\r
+ IB_INVALID_CQ_HANDLE\r
+ The completion queue handle was invalid.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This routine instructs the channel interface to invoke the completion\r
+ handler when the next completion queue entry is added to this CQ.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo105">ib_create_cq</a>, <a href="#robo166">ib_peek_cq</a>, <a href="#robo198">ib_poll_cq</a>, <a href="#robo223">ib_rearm_n_cq</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo223">[Functions]<a name="Access20Layer2fib5frearm5fn5fcq">\r
+Access Layer/ib_rearm_n_cq</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_rearm_n_cq</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> This indicates that the completion queue should notify the client when\r
+ the next N completions have been added to this CQ.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_EXPORT <a href="./ib_types_h.html#robo49">ib_api_status_t</a> AL_API\r
+<strong>ib_rearm_n_cq</strong>(\r
+ IN const ib_cq_handle_t h_cq,\r
+ IN const uint32_t n_cqes );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_cq\r
+ [in] Handle to the completion queue to rearm.\r
+\r
+ n_cqes\r
+ [in] The number of completion queue entries to be added to the\r
+ completion queue before notifying the client. This value must\r
+ greater than or equal to one and less than or equal to the size\r
+ of the completion queue.\r
+\r
+ RETURN VALUES\r
+ IB_SUCCESS\r
+ The completion queue rearm request was registered successfully.\r
+\r
+ IB_INVALID_CQ_HANDLE\r
+ The completion queue handle was invalid.\r
+\r
+ IB_INVALID_PARAMETER\r
+ The requested number of completion queue entries was invalid.\r
+\r
+ IB_UNSUPPORTED\r
+ This operation is not supported by the channel adapter.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This routine instructs the channel interface to invoke the completion\r
+ handler when the next N completions have been added to this CQ regardless\r
+ of the completion type (solicited or unsolicited). Any CQ entries that\r
+ existed before the rearm is enabled will not result in a call to the\r
+ handler. Support for this operation is optional by a channel adapter\r
+ vendor.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo105">ib_create_cq</a>, <a href="#robo166">ib_peek_cq</a>, <a href="#robo198">ib_poll_cq</a>, <a href="#robo222">ib_rearm_cq</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo226">[Functions]<a name="Access20Layer2fib5freg5fioc">\r
+Access Layer/ib_reg_ioc</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_reg_ioc</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Registers an I/O controller with the local device manager, which will\r
+ export the controller to the fabric.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_EXPORT <a href="./ib_types_h.html#robo49">ib_api_status_t</a> AL_API\r
+<strong>ib_reg_ioc</strong>(\r
+ IN const ib_ioc_handle_t h_ioc );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_ioc\r
+ [in] A handle to the controller being registered.\r
+\r
+ RETURN VALUES\r
+ IB_SUCCESS\r
+ The I/O controller was successfully registered.\r
+\r
+ IB_INSUFFICIENT_MEMORY\r
+ There was insufficient memory to register the I/O controller.\r
+\r
+ IB_INSUFFICIENT_RESOURCES\r
+ There were insufficient resources currently available on the I/O\r
+ unit to register the I/O controller.\r
+\r
+ IB_INVALID_HANDLE\r
+ The I/O controller handle was invalid.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This routine registers an I/O controller with the local device manager.\r
+ The device manager exports the controller to the fabric as part of an\r
+ I/O unit. Typically, clients will call <a href="#robo46">ib_add_svc_entry</a> to add services\r
+ to the controller before registering it with the device manager.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo106">ib_create_ioc</a>, <a href="#robo117">ib_destroy_ioc</a>, <a href="#robo46">ib_add_svc_entry</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo227">[Functions]<a name="Access20Layer2fib5freg5fmad5fpool">\r
+Access Layer/ib_reg_mad_pool</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_reg_mad_pool</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Registers a MAD pool for use with a protection domain.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_EXPORT <a href="./ib_types_h.html#robo49">ib_api_status_t</a> AL_API\r
+<strong>ib_reg_mad_pool</strong>(\r
+ IN const ib_pool_handle_t h_pool,\r
+ IN const ib_pd_handle_t h_pd,\r
+ OUT ib_pool_key_t* const p_pool_key );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_pool\r
+ [in] A handle to a MAD pool.\r
+\r
+ h_pd\r
+ [in] A handle to a protection domain.\r
+\r
+ p_pool_key\r
+ [out] A key associated with registering the MAD pool with the\r
+ protection domain. This key is returned to the user and is used\r
+ when retrieving MADs from the pool.\r
+\r
+ RETURN VALUES\r
+ IB_SUCCESS\r
+ The MAD pool was successfully registered with the protection domain.\r
+\r
+ IB_INVALID_HANDLE\r
+ The MAD pool handle was invalid.\r
+\r
+ IB_INVALID_PD_HANDLE\r
+ The protection domain handle was invalid.\r
+\r
+ IB_INVALID_PARAMETER\r
+ A reference to the pool key was not provided.\r
+\r
+ IB_INSUFFICIENT_MEMORY\r
+ There was insufficient memory to register the MAD pool.\r
+\r
+ IB_INSUFFICIENT_RESOURCES\r
+ There were insufficient resources currently available on the channel\r
+ adapter to register the MAD pool.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This function registers a MAD pool with a protection domain. After\r
+ successful completion of this call, the MAD elements of the associated\r
+ pool are usable on any queue pairs associated with the given protection\r
+ domain.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo107">ib_create_mad_pool</a>, <a href="#robo118">ib_destroy_mad_pool</a>, <a href="#robo111">ib_dereg_mad_pool</a>, <a href="#robo129">ib_get_mad</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo228">[Functions]<a name="Access20Layer2fib5freg5fmad5fsvc">\r
+Access Layer/ib_reg_mad_svc</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_reg_mad_svc</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Requests management datagram support for a specified class with a\r
+ queue pair.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_EXPORT <a href="./ib_types_h.html#robo49">ib_api_status_t</a> AL_API\r
+<strong>ib_reg_mad_svc</strong>(\r
+ IN const ib_qp_handle_t h_qp,\r
+ IN const <a href="#robo151">ib_mad_svc_t</a>* const p_mad_svc,\r
+ OUT ib_mad_svc_handle_t* const ph_mad_svc );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_qp\r
+ [in] A handle to queue pair. The queue pair must have been created\r
+ as one of the following types: IB_QPT_QP0, IB_QPT_QP0_ALIAS,\r
+ IB_QPT_QP1, IB_QPT_QP1_ALIAS, or IB_QPT_MAD.\r
+\r
+ p_mad_svc\r
+ [in] A reference to the management class and methods supported by\r
+ this queue pair.\r
+\r
+ ph_mad_svc\r
+ [out] On successful completion of this call, this references a\r
+ handle to the newly created MAD service.\r
+\r
+ RETURN VALUES\r
+ IB_SUCCESS\r
+ The queue pair was registered successfully.\r
+\r
+ IB_INVALID_QP_HANDLE\r
+ The queue pair handle was invalid.\r
+\r
+ IB_INVALID_PARAMETER\r
+ The queue pair handle was not created with the proper queue pair\r
+ type or a reference to the MAD service information or handle was\r
+ not provided.\r
+\r
+ IB_INSUFFICIENT_MEMORY\r
+ There was insufficient memory to register the queue pair.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This routine registers a queue pair as using a particular management\r
+ class. This indicates that the access layer should perform additional\r
+ processing on MADs sent and received by this queue pair. Queue pairs\r
+ registered for MAD support receive access layer SAR and retransmissions\r
+ services. A queue pair may be registered for multiple management classes.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo109">ib_create_qp</a>, <a href="#robo151">ib_mad_svc_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo229">[Functions]<a name="Access20Layer2fib5freg5fmem">\r
+Access Layer/ib_reg_mem</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_reg_mem</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Registers a virtual memory region with a channel adapter.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_EXPORT <a href="./ib_types_h.html#robo49">ib_api_status_t</a> AL_API\r
+<strong>ib_reg_mem</strong>(\r
+ IN const ib_pd_handle_t h_pd,\r
+ IN const <a href="./ib_types_h.html#robo160">ib_mr_create_t</a>* const p_mr_create,\r
+ OUT net32_t* const p_lkey,\r
+ OUT net32_t* const p_rkey,\r
+ OUT ib_mr_handle_t* const ph_mr );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_pd\r
+ [in] A handle to an existing protection domain that the memory\r
+ should be registered with.\r
+\r
+ p_mr_create\r
+ [in] Information describing the memory region to register.\r
+\r
+ p_lkey\r
+ [out] The local access key associated with this registered memory\r
+ region.\r
+\r
+ p_rkey\r
+ [out] A key that may be used by a remote end-point when performing\r
+ RDMA or atomic operations to this registered memory region.\r
+\r
+ ph_mr\r
+ [out] Upon successful completion of this call, this references a\r
+ handle to the registered memory region. This handle is used when\r
+ performing data transfers and to deregister the memory.\r
+\r
+ RETURN VALUES\r
+ IB_SUCCESS\r
+ The memory region was successfully registered.\r
+\r
+ IB_INVALID_PD_HANDLE\r
+ The protection domain to associate with the memory region was invalid.\r
+\r
+ IB_INVALID_PARAMETER\r
+ A reference to the memory region information, lkey, rkey, or handle\r
+ was not provided.\r
+\r
+ IB_INSUFFICIENT_MEMORY\r
+ There was insufficient memory to register the memory region.\r
+\r
+ IB_INSUFFICIENT_RESOURCES\r
+ There were insufficient resources currently available on the channel\r
+ adapter to register the memory region.\r
+\r
+ IB_UNSUPPORTED\r
+ The requested access rights are not supported by the channel adapter.\r
+\r
+ IB_INVALID_PERMISSION\r
+ The requested access rights are invalid.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This routine registers a virtual memory region with a channel adapter.\r
+ Memory must be registered before being used in a data transfer operation.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo112">ib_dereg_mr</a>, <a href="#robo230">ib_reg_phys</a>, <a href="#robo232">ib_reg_shared</a>, <a href="./ib_types_h.html#robo160">ib_mr_create_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo230">[Functions]<a name="Access20Layer2fib5freg5fphys">\r
+Access Layer/ib_reg_phys</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_reg_phys</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Registers a physical memory region with a channel adapter.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_EXPORT <a href="./ib_types_h.html#robo49">ib_api_status_t</a> AL_API\r
+<strong>ib_reg_phys</strong>(\r
+ IN const ib_pd_handle_t h_pd,\r
+ IN const <a href="./ib_types_h.html#robo187">ib_phys_create_t</a>* const p_phys_create,\r
+ IN OUT uint64_t* const p_vaddr,\r
+ OUT net32_t* const p_lkey,\r
+ OUT net32_t* const p_rkey,\r
+ OUT ib_mr_handle_t* const ph_mr );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_pd\r
+ [in] A handle to an existing protection domain that the memory\r
+ should be registered with.\r
+\r
+ p_phys_create\r
+ [in] Information describing the memory region to register.\r
+\r
+ p_vaddr\r
+ [in/out] On input, references the requested virtual address for the\r
+ start of the physical region. On output, references the actual\r
+ virtual address assigned to the registered region.\r
+\r
+ p_lkey\r
+ [out] The local access key associated with this registered memory\r
+ region.\r
+\r
+ p_rkey\r
+ [out] A key that may be used by a remote end-point when performing\r
+ RDMA or atomic operations to this registered memory region.\r
+\r
+ ph_mr\r
+ [out] Upon successful completion of this call, this references a\r
+ handle to the registered memory region. This handle is used when\r
+ performing data transfers and to deregister the memory.\r
+\r
+ RETURN VALUES\r
+ IB_SUCCESS\r
+ The physical memory region was successfully registered.\r
+\r
+ IB_INVALID_PD_HANDLE\r
+ The protection domain to associate with the physical memory region\r
+ was invalid.\r
+\r
+ IB_INVALID_PARAMETER\r
+ A reference to the physical memory region information, virtual address,\r
+ lkey, rkey, or handle was not provided.\r
+\r
+ IB_INSUFFICIENT_MEMORY\r
+ There was insufficient memory to register the physical memory region.\r
+\r
+ IB_INSUFFICIENT_RESOURCES\r
+ There were insufficient resources currently available on the channel\r
+ adapter to register the physical memory region.\r
+\r
+ IB_UNSUPPORTED\r
+ The requested access rights are not supported by the channel adapter.\r
+\r
+ IB_INVALID_PERMISSION\r
+ The requested access rights are invalid.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This routine registers an array of physical pages as a single virtually\r
+ contiguous region with a channel adapter. Memory must be registered\r
+ before being used in a data transfer operation.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo112">ib_dereg_mr</a>, <a href="#robo229">ib_reg_mem</a>, <a href="#robo232">ib_reg_shared</a>, <a href="./ib_types_h.html#robo187">ib_phys_create_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo231">[Functions]<a name="Access20Layer2fib5freg5fpnp">\r
+Access Layer/ib_reg_pnp</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_reg_pnp</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Routine used to register for notification of local and I/O controller\r
+ assignment events.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_EXPORT <a href="./ib_types_h.html#robo49">ib_api_status_t</a> AL_API\r
+<strong>ib_reg_pnp</strong>(\r
+ IN const ib_al_handle_t h_al,\r
+ IN const <a href="#robo197">ib_pnp_req_t</a>* const p_pnp_req,\r
+ OUT ib_pnp_handle_t* const ph_pnp );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_al\r
+ [in] A handle to an open instance of the access layer.\r
+\r
+ p_pnp_req\r
+ [in] Specifies the type of events that the user wishes to be notified\r
+ of, along with information needed to process the completed query.\r
+\r
+ ph_pnp\r
+ [out] Upon successful completion of this call, this references a handle\r
+ to the PnP notification request. This handle may be used to cancel the\r
+ notification registration.\r
+\r
+ RETURN VALUES\r
+ IB_SUCCESS\r
+ The PnP registration was successful.\r
+\r
+ IB_INVALID_AL_HANDLE\r
+ The access layer handle was invalid.\r
+\r
+ IB_INVALID_PARAMETER\r
+ A reference to the PnP request information or handle was not provided.\r
+\r
+ IB_INSUFFICIENT_MEMORY\r
+ There was insufficient memory to register for PnP notification.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This routine registers the calling client with the access layer for\r
+ notification of locally occurring events, or the assignment of I/O\r
+ controllers to a local device. Once registered, a client will receive\r
+ notification, via a callback, that a given event has occurred on a\r
+ local device. Clients may restrict the types of events and devices\r
+ that are reported. The p_pnp_req parameter is used to indicate which\r
+ device events to report to the user.\r
+\r
+ Upon invoking this routine, the client may receive a callback through\r
+ the <a href="#robo182">ib_pfn_pnp_cb_t</a> routine to notify them of the current system state.\r
+ For example, if a client registers for notification of port up events,\r
+ then the access layer will notify the client of all available ports when\r
+ this routine is first invoked.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo113">ib_dereg_pnp</a>, <a href="#robo197">ib_pnp_req_t</a>, <a href="#robo196">ib_pnp_rec_t</a>, <a href="#robo182">ib_pfn_pnp_cb_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo232">[Functions]<a name="Access20Layer2fib5freg5fshared">\r
+Access Layer/ib_reg_shared</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_reg_shared</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Registers a memory region that has the same physical pages as an\r
+ existing registered memory region.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_EXPORT <a href="./ib_types_h.html#robo49">ib_api_status_t</a> AL_API\r
+<strong>ib_reg_shared</strong>(\r
+ IN const ib_mr_handle_t h_mr,\r
+ IN const ib_pd_handle_t h_pd,\r
+ IN const <a href="./ib_types_h.html#robo45">ib_access_t</a> access_ctrl,\r
+ IN OUT uint64_t* const p_vaddr,\r
+ OUT net32_t* const p_lkey,\r
+ OUT net32_t* const p_rkey,\r
+ OUT ib_mr_handle_t* const ph_mr );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_mr\r
+ [in] A handle to an existing registered memory region that this\r
+ registration should share physical pages with.\r
+\r
+ h_pd\r
+ [in] Handle to the PD on which memory is being registered\r
+\r
+ access_ctrl\r
+ [in] Access rights of the registered region.\r
+\r
+ p_vaddr\r
+ [in/out] On input, this specifies the requested virtual address for the\r
+ start of the physical region. On output, this references the actual\r
+ virtual address assigned to the registered region. This is always a\r
+ 64-bit quantity to support registering more than 4GB of memory on\r
+ 32-bit systems with PAE.\r
+\r
+ p_lkey\r
+ [out] The local access key associated with this registered memory\r
+ region.\r
+\r
+ p_rkey\r
+ [out] A key that may be used by a remote end-point when performing RDMA\r
+ or atomic operations to this registered memory region.\r
+\r
+ ph_mr\r
+ [out] Upon successful completion of this call, this references a handle\r
+ to the registered memory region. This handle is used when performing\r
+ data transfers and to deregister the memory.\r
+\r
+ RETURN VALUES\r
+ IB_SUCCESS\r
+ The shared memory region was successfully registered.\r
+\r
+ IB_INVALID_MR_HANDLE\r
+ The memory region handle was invalid.\r
+\r
+ IB_INVALID_PD_HANDLE\r
+ The protection domain handle was invalid.\r
+\r
+ IB_INVALID_PARAMETER\r
+ A reference to the virtual address, lkey, rkey, or handle was not\r
+ provided.\r
+\r
+ IB_INSUFFICIENT_MEMORY\r
+ There was insufficient memory to register the shared memory region.\r
+\r
+ IB_INSUFFICIENT_RESOURCES\r
+ There were insufficient resources currently available on the channel\r
+ adapter to register the shared memory region.\r
+\r
+ IB_UNSUPPORTED\r
+ The requested access rights are not supported by the channel adapter.\r
+\r
+ IB_INVALID_PERMISSION\r
+ The requested access rights are invalid.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This routine registers a memory region that shares the same set of\r
+ physical pages associated with an existing registered memory region.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo112">ib_dereg_mr</a>, <a href="#robo229">ib_reg_mem</a>, <a href="#robo230">ib_reg_phys</a>, <strong>ib_reg_shared</strong>, <a href="./ib_types_h.html#robo160">ib_mr_create_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo233">[Functions]<a name="Access20Layer2fib5freg5fshmid">\r
+Access Layer/ib_reg_shmid</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_reg_shmid</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Registers a memory region to be shared across multiple processes.\r
+ The memory is referenced by a shared memory identifier.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_EXPORT <a href="./ib_types_h.html#robo49">ib_api_status_t</a> AL_API\r
+<strong>ib_reg_shmid</strong>(\r
+ IN const ib_pd_handle_t h_pd,\r
+ IN const <a href="#robo250">ib_shmid_t</a> shmid,\r
+ IN const <a href="./ib_types_h.html#robo160">ib_mr_create_t</a>* const p_mr_create,\r
+ OUT uint64_t* const p_vaddr,\r
+ OUT net32_t* const p_lkey,\r
+ OUT net32_t* const p_rkey,\r
+ OUT ib_mr_handle_t* const ph_mr );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_pd\r
+ [in] A handle to an existing protection domain that the memory\r
+ should be registered with.\r
+\r
+ shmid\r
+ [in] An identifier for the shared memory region.\r
+\r
+ p_mr_create\r
+ [in] Information describing the attributes of the memory region to\r
+ register.\r
+\r
+ p_vaddr,\r
+ [out] The HCA assigned, HCA relative virtual address for the\r
+ memory region.\r
+\r
+ p_lkey\r
+ [out] The local access key associated with this registered memory\r
+ region.\r
+\r
+ p_rkey\r
+ [out] A key that may be used by a remote end-point when performing RDMA\r
+ or atomic operations to this registered memory region.\r
+\r
+ ph_mr\r
+ [out] Upon successful completion of this call, this references a handle\r
+ to the registered memory region. This handle is used when performing\r
+ data transfers and to deregister the memory.\r
+\r
+ RETURN VALUES\r
+ IB_SUCCESS\r
+ The shared memory region was successfully registered.\r
+\r
+ IB_INVALID_PD_HANDLE\r
+ The protection domain handle was invalid.\r
+\r
+ IB_INVALID_PARAMETER\r
+ A reference to the memory region information, lkey, rkey, or handle\r
+ was not provided.\r
+\r
+ IB_INVALID_SETTING\r
+ The length and page mapping for the memory region do not match those\r
+ of the region identified by the provided SHMID.\r
+\r
+ IB_INSUFFICIENT_MEMORY\r
+ There was insufficient memory to register the shared memory region.\r
+\r
+ IB_INSUFFICIENT_RESOURCES\r
+ There were insufficient resources currently available on the channel\r
+ adapter to register the shared memory region.\r
+\r
+ IB_UNSUPPORTED\r
+ The requested access rights are not supported by the channel adapter.\r
+\r
+ IB_INVALID_PERMISSION\r
+ The requested access rights are invalid.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This routine registers a memory region that is shared between processes.\r
+ The region being registered is identified through a shared memory\r
+ identifier. The registered region shares hardware resources as much\r
+ as possible.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo112">ib_dereg_mr</a>, <a href="#robo229">ib_reg_mem</a>, <a href="#robo232">ib_reg_shared</a>, <a href="./ib_types_h.html#robo160">ib_mr_create_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo234">[Functions]<a name="Access20Layer2fib5freg5fsvc">\r
+Access Layer/ib_reg_svc</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_reg_svc</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Routine used to register for a service with the subnet administrator.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_EXPORT <a href="./ib_types_h.html#robo49">ib_api_status_t</a> AL_API\r
+<strong>ib_reg_svc</strong>(\r
+ IN const ib_al_handle_t h_al,\r
+ IN const <a href="#robo236">ib_reg_svc_req_t</a>* const p_reg_svc_req,\r
+ OUT ib_reg_svc_handle_t* const ph_reg_svc );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_al\r
+ [in] A handle to an open instance of the access layer.\r
+\r
+ p_reg_svc_req\r
+ [in] Describes the service to register with the subnet administrator.\r
+\r
+ ph_reg_svc\r
+ [out] Pointer to a service registration handle, used to deregister\r
+ the service. Set upon successful completion of the function.\r
+\r
+ RETURN VALUES\r
+ IB_SUCCESS\r
+ The service registration was initiated.\r
+\r
+ IB_INVALID_AL_HANDLE\r
+ The access layer handle was invalid.\r
+\r
+ IB_INVALID_PARAMETER\r
+ A reference to the service registration request was not provided.\r
+\r
+ IB_INSUFFICIENT_MEMORY\r
+ There was insufficient memory to perform the operation.\r
+\r
+ IB_NOT_FOUND\r
+ No channel adapters in the system contain the GID specified in the\r
+ service record.\r
+\r
+ IB_INVALID_GID\r
+ No port was found matching the GID specified in the service record.\r
+\r
+ IB_INSUFFICIENT_RESOURCES\r
+ There were insufficient resources currently available on the channel\r
+ adapter to perform the operation.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This routine registers a service with the subnet administrator. Registered\r
+ services are reported by the subnet administrator to clients querying the\r
+ subnet administrator for service information.\r
+\r
+ Once registered, a client will receive notification, via a callback,\r
+ that a service has been successfully registered.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo114">ib_dereg_svc</a>, <a href="#robo236">ib_reg_svc_req_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo235">[Structures]<a name="Access20Layer2fib5freg5fsvc5frec5ft">\r
+Access Layer/ib_reg_svc_rec_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> _<strong>ib_reg_svc_rec_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Information returned as a result of registering a service with the subnet\r
+ administrator. This includes name service registration.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef struct _ib_reg_svc_rec\r
+{\r
+ const void* __ptr64 svc_context;\r
+ ib_reg_svc_handle_t h_reg_svc;\r
+ <a href="./ib_types_h.html#robo49">ib_api_status_t</a> req_status;\r
+ <a href="./ib_types_h.html#robo893">ib_net16_t</a> resp_status;\r
+ ib_service_record_t svc_rec;\r
+\r
+} <strong>ib_reg_svc_rec_t</strong>;\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> svc_context\r
+ User-defined context information associated with the registration\r
+ through the <a href="#robo234">ib_reg_svc</a> call.\r
+\r
+ req_status\r
+ Indicates the success of the registration operation.\r
+\r
+ resp_status\r
+ Indicates the status of the response from the SA\r
+\r
+ h_reg_svc\r
+ For successful queries, this references the first record of\r
+ information returned by the subnet administrator. If multiple\r
+ records of information were returned, the <strong>ib_reg_svc_rec_t</strong> will\r
+ be chained together.\r
+\r
+ svc_rec\r
+ The service record returned by the SA for the registered service.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> A query result structure is returned to a client through their\r
+ <a href="#robo183">ib_pfn_query_cb_t</a> routine to notify them of the results of a subnet\r
+ administration query.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo234">ib_reg_svc</a>, <a href="#robo184">ib_pfn_reg_svc_cb_t</a>, ib_reg_svc_status_t\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo236">[Structures]<a name="Access20Layer2fib5freg5fsvc5freq5ft">\r
+Access Layer/ib_reg_svc_req_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_reg_svc_req_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Information used to request that a service be registered with the subnet\r
+ administrator.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef struct _ib_reg_svc_req\r
+{\r
+ ib_service_record_t svc_rec;\r
+ <a href="./ib_types_h.html#robo895">ib_net64_t</a> port_guid;\r
+\r
+ uint32_t timeout_ms;\r
+ uint32_t retry_cnt;\r
+ <a href="#robo47">ib_al_flags_t</a> flags;\r
+\r
+ const void *svc_context;\r
+ <a href="./ib_types_h.html#robo895">ib_net64_t</a> svc_data_mask;\r
+\r
+ <a href="#robo184">ib_pfn_reg_svc_cb_t</a> pfn_reg_svc_cb;\r
+\r
+} <strong>ib_reg_svc_req_t</strong>;\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> svc_rec\r
+ Service record that describes the service being registered.\r
+\r
+ port_guid\r
+ Directs the registration to use the specified port. The request will\r
+ contact the management entity reachable through the given port.\r
+\r
+ timeout_ms\r
+ Specifies the number of milliseconds to wait for a response for\r
+ the registration until retrying or timing out the request.\r
+\r
+ retry_cnt\r
+ Specifies the number of times that the registration will be retried\r
+ before failing the request.\r
+\r
+ flags\r
+ Used to describe the mode of operation. Set to IB_FLAGS_SYNC to\r
+ process the called routine synchronously.\r
+\r
+ svc_context\r
+ User-defined context information associated with this registration\r
+ request. This context is returned to the user through the function\r
+ specified by the pfn_reg_svc_cb field.\r
+\r
+ svc_data_mask\r
+ User-defined component mask indicating which parts of the private\r
+ data is populated. This is used as an extension to the svc_id\r
+ for data compare. Also used as a cheap way to communicate data\r
+ to all clients for this service.\r
+\r
+ pfn_reg_svc_cb\r
+ A user-defined callback that is invoked upon completion of the\r
+ registration request.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This structure is used to register a service with the subnet administrator.\r
+ The registration call operates asynchronously unless the flags field is\r
+ set to IB_FLAGS_SYNC. If synchronous operation is indicated, the client\r
+ will receive a callback with the results of the registration attempt\r
+ before the <a href="#robo234">ib_reg_svc</a> call returns. Synchronous operation results in\r
+ the calling thread blocking.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo234">ib_reg_svc</a>, ib_svc_rec_t, <a href="#robo184">ib_pfn_reg_svc_cb_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo237">[Structures]<a name="Access20Layer2fib5frej5fpdata5ft">\r
+Access Layer/ib_rej_pdata_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_rej_pdata_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> User data sent as part of a connection reject message.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef union _ib_rej_pdata\r
+{\r
+ uint8_t data[IB_REJ_PDATA_SIZE];\r
+\r
+} <strong>ib_rej_pdata_t</strong>;\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> ib_cm_data_sizes_t\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo239">[Functions]<a name="Access20Layer2fib5freject5fioc">\r
+Access Layer/ib_reject_ioc</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_reject_ioc</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Rejects an I/O controller assignment to a host.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_EXPORT <a href="./ib_types_h.html#robo49">ib_api_status_t</a> AL_API\r
+<strong>ib_reject_ioc</strong>(\r
+ IN const ib_al_handle_t h_al,\r
+ IN const ib_pnp_handle_t h_ioc_event );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_al\r
+ [in] A handle to an open instance of the access layer.\r
+\r
+ h_ioc_event\r
+ [in] A handle provided as part of the notification of an I/O controller\r
+ being assigned. This handle is obtained through the <a href="#robo196">ib_pnp_rec_t</a>\r
+ structure given to a client through their <a href="#robo182">ib_pfn_pnp_cb_t</a> callback.\r
+\r
+ RETURN VALUES\r
+ IB_SUCCESS\r
+ The I/O controller reject request was initiated.\r
+\r
+ IB_INVALID_AL_HANDLE\r
+ The access layer handle was invalid.\r
+\r
+ IB_INVALID_HANDLE\r
+ The I/O controller handle was invalid.\r
+\r
+ IB_INSUFFICIENT_MEMORY\r
+ There was insufficient memory to perform the operation.\r
+\r
+ IB_INSUFFICIENT_RESOURCES\r
+ There were insufficient resources currently available on the channel\r
+ adapter to perform the operation.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This routine rejects an I/O controller assigned by the configuration\r
+ manager to the local host. The access layer sends a rejection notification\r
+ to the configuration manager and disable access to the controller from\r
+ the local host. This routine must be called from a client's\r
+ <a href="#robo182">ib_pfn_pnp_cb_t</a> callback to reject a newly assigned I/O controller.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo182">ib_pfn_pnp_cb_t</a>, <a href="#robo196">ib_pnp_rec_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo240">[Functions]<a name="Access20Layer2fib5fremove5fsvc5fentry">\r
+Access Layer/ib_remove_svc_entry</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_remove_svc_entry</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> This removes a service entry from an I/O controller.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_EXPORT <a href="./ib_types_h.html#robo49">ib_api_status_t</a> AL_API\r
+<strong>ib_remove_svc_entry</strong>(\r
+ IN const ib_svc_handle_t h_svc );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_svc\r
+ [in] A handle to an existing service entry.\r
+\r
+ RETURN VALUES\r
+ IB_SUCCESS\r
+ The service entry was successfully removed.\r
+\r
+ IB_INVALID_HANDLE\r
+ The service entry handle was invalid.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This routine removes the specified service from its associated I/O\r
+ controller. Once removed, the service information will no longer be\r
+ exported along with the controller.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo46">ib_add_svc_entry</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo241">[Structures]<a name="Access20Layer2fib5frep5fpdata5ft">\r
+Access Layer/ib_rep_pdata_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_rep_pdata_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> User data sent as part of a reply to a request for communication.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef union _ib_rep_pdata\r
+{\r
+ uint8_t data[IB_REP_PDATA_SIZE];\r
+\r
+} <strong>ib_rep_pdata_t</strong>;\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> ib_cm_data_sizes_t\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo242">[Structures]<a name="Access20Layer2fib5freport5frec5ft">\r
+Access Layer/ib_report_rec_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_report_rec_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Reported event information returned to the user when a subscribed for\r
+ event occurs.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef struct _ib_report_rec\r
+{\r
+ const void* __ptr64 report_context;\r
+ ib_mad_notice_attr_t* __ptr64 p_notice;\r
+\r
+} <strong>ib_report_rec_t</strong>;\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> report_context\r
+ Client-defined context information specified when registering for\r
+ the report.\r
+\r
+ p_notice\r
+ Reported information that describes the event that has occurred.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> Subscription for reported events is done through a class manager. When\r
+ a class manager detects that such an event occurs, it will generate a\r
+ report to the subscribed client. The reported information is referenced\r
+ through the p_notice field.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> ib_mad_notice_attr_t\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo243">[Structures]<a name="Access20Layer2fib5freq5fpdata5ft">\r
+Access Layer/ib_req_pdata_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_req_pdata_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> User data sent as part of a request for communication.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef union _ib_req_pdata\r
+{\r
+ uint8_t data[IB_REQ_PDATA_SIZE];\r
+\r
+} <strong>ib_req_pdata_t</strong>;\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> ib_cm_data_sizes_t\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo244">[Functions]<a name="Access20Layer2fib5frereg5fmem">\r
+Access Layer/ib_rereg_mem</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_rereg_mem</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Modifies the attributes of an existing memory region.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_EXPORT <a href="./ib_types_h.html#robo49">ib_api_status_t</a> AL_API\r
+<strong>ib_rereg_mem</strong>(\r
+ IN const ib_mr_handle_t h_mr,\r
+ IN const <a href="./ib_types_h.html#robo161">ib_mr_mod_t</a> mr_mod_mask,\r
+ IN const <a href="./ib_types_h.html#robo160">ib_mr_create_t</a>* const p_mr_create OPTIONAL,\r
+ OUT net32_t* const p_lkey,\r
+ OUT net32_t* const p_rkey,\r
+ IN const ib_pd_handle_t h_pd OPTIONAL );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_mr\r
+ [in] A handle to the registered memory region being modified.\r
+\r
+ mr_mod_mask\r
+ [in] A mask used to specify which attributes of the memory region are\r
+ being modified.\r
+\r
+ p_mr_create\r
+ [in] This references information needed to perform the modification on\r
+ the registered memory region. This parameter may be NULL if only the\r
+ protection domain will be modified.\r
+\r
+ p_lkey\r
+ [out] The local access key associated with this registered memory\r
+ region.\r
+\r
+ p_rkey\r
+ [out] A key that may be used by a remote end-point when performing RDMA\r
+ or atomic operations to this registered memory region.\r
+\r
+ h_pd\r
+ [in] An optionally provided parameter used to modify the protection\r
+ domain of a registered region.\r
+\r
+ RETURN VALUES\r
+ IB_SUCCESS\r
+ The memory region attributes were modified successfully.\r
+\r
+ IB_INVALID_MR_HANDLE\r
+ The memory region handle was invalid.\r
+\r
+ IB_INVALID_PARAMETER\r
+ A reference to the lkey or rkey was not provided or the specified\r
+ modify mask is invalid.\r
+\r
+ IB_INVALID_SETTING\r
+ The specified memory region attributes are invalid.\r
+\r
+ IB_INVALID_PD_HANDLE\r
+ The protection domain handle was invalid.\r
+\r
+ IB_INSUFFICIENT_RESOURCES\r
+ There were insufficient resources currently available on the channel\r
+ adapter to modify the memory region.\r
+\r
+ IB_UNSUPPORTED\r
+ The requested access rights are not supported by the channel adapter.\r
+\r
+ IB_INVALID_PERMISSION\r
+ The requested access rights are invalid.\r
+\r
+ IB_RESOURCE_BUSY\r
+ The memory region has windows bound to it.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This routine modifies the attributes of the specified memory region.\r
+ The memory being modified may have been registered using either virtual\r
+ or physical registration. Conceptually, this routine is equivalent to\r
+ to calling <a href="#robo112">ib_dereg_mr</a>, followed by <a href="#robo229">ib_reg_mem</a>, but may be higher\r
+ performing.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo229">ib_reg_mem</a>, <a href="#robo230">ib_reg_phys</a>, <a href="#robo112">ib_dereg_mr</a>, <a href="./ib_types_h.html#robo161">ib_mr_mod_t</a>, <a href="./ib_types_h.html#robo160">ib_mr_create_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo245">[Functions]<a name="Access20Layer2fib5frereg5fphys">\r
+Access Layer/ib_rereg_phys</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_rereg_phys</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Modifies the attributes of an existing memory region.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_EXPORT <a href="./ib_types_h.html#robo49">ib_api_status_t</a> AL_API\r
+<strong>ib_rereg_phys</strong>(\r
+ IN const ib_mr_handle_t h_mr,\r
+ IN const <a href="./ib_types_h.html#robo161">ib_mr_mod_t</a> mr_mod_mask,\r
+ IN const <a href="./ib_types_h.html#robo187">ib_phys_create_t</a>* const p_phys_create OPTIONAL,\r
+ IN OUT uint64_t* const p_vaddr,\r
+ OUT net32_t* const p_lkey,\r
+ OUT net32_t* const p_rkey,\r
+ IN const ib_pd_handle_t h_pd OPTIONAL );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_mr\r
+ [in] A handle to the registered memory region being modified.\r
+\r
+ mr_mod_mask\r
+ [in] A mask used to specify which attributes of the memory region are\r
+ being modified.\r
+\r
+ p_phys_create\r
+ [in] This references information needed to perform the modification on\r
+ the registered memory region. This parameter may be NULL if\r
+ only the protection domain will be modified.\r
+\r
+ p_vaddr\r
+ [in/out] On input, this specifies the requested virtual address for the\r
+ start of the physical region. On output, this references the actual\r
+ virtual address assigned to the registered region.\r
+\r
+ p_lkey\r
+ [out] The local access key associated with this registered memory\r
+ region.\r
+\r
+ p_rkey\r
+ [out] A key that may be used by a remote end-point when performing RDMA\r
+ or atomic operations to this registered memory region.\r
+\r
+ h_pd\r
+ [in] An optionally provided parameter used to modify the protection\r
+ domain of a registered region.\r
+\r
+ RETURN VALUES\r
+ IB_SUCCESS\r
+ The memory region attributes were modified successfully.\r
+\r
+ IB_INVALID_MR_HANDLE\r
+ The memory region handle was invalid.\r
+\r
+ IB_INVALID_PARAMETER\r
+ A reference to the virtual address, lkey, rkey was not provided or\r
+ the specified modify mask is invalid.\r
+\r
+ IB_INVALID_SETTING\r
+ The specified memory region attributes are invalid.\r
+\r
+ IB_INVALID_PD_HANDLE\r
+ The protection domain handle was invalid.\r
+\r
+ IB_INSUFFICIENT_RESOURCES\r
+ There were insufficient resources currently available on the channel\r
+ adapter to modify the memory region.\r
+\r
+ IB_UNSUPPORTED\r
+ The requested access rights are not supported by the channel adapter.\r
+\r
+ IB_INVALID_PERMISSION\r
+ The requested access rights are invalid.\r
+\r
+ IB_RESOURCE_BUSY\r
+ The memory region has windows bound to it.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This routine modifies the attributes of the specified memory region.\r
+ The memory being modified may have been registered using either virtual\r
+ or physical registration. Conceptually, this routine is equivalent to\r
+ to calling <a href="#robo112">ib_dereg_mr</a>, followed by <a href="#robo230">ib_reg_phys</a>, but may be higher\r
+ performing.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo229">ib_reg_mem</a>, <a href="#robo230">ib_reg_phys</a>, <a href="#robo112">ib_dereg_mr</a>, <a href="./ib_types_h.html#robo161">ib_mr_mod_t</a>, <a href="./ib_types_h.html#robo160">ib_mr_create_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo246">[Structures]<a name="Access20Layer2fib5frtu5fpdata5ft">\r
+Access Layer/ib_rtu_pdata_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_rtu_pdata_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> User data sent as part of a ready to use message.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef union _ib_rtu_pdata\r
+{\r
+ uint8_t data[IB_RTU_PDATA_SIZE];\r
+\r
+} <strong>ib_rtu_pdata_t</strong>;\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> ib_cm_data_sizes_t\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo247">[Functions]<a name="Access20Layer2fib5fsend5fmad">\r
+Access Layer/ib_send_mad</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_send_mad</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> This routine posts a work request to the send queue of a queue pair.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_EXPORT <a href="./ib_types_h.html#robo49">ib_api_status_t</a> AL_API\r
+<strong>ib_send_mad</strong>(\r
+ IN const ib_mad_svc_handle_t h_mad_svc,\r
+ IN <a href="#robo150">ib_mad_element_t</a>* const p_mad_element_list,\r
+ OUT <a href="#robo150">ib_mad_element_t</a> **pp_mad_failure OPTIONAL );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_mad_svc\r
+ [in] The MAD service to which this work request is being submitted.\r
+\r
+ p_mad_element_list\r
+ [in] A list of MAD elements that will be posted to the send queue.\r
+\r
+ pp_mad_failure\r
+ [out] If the send MAD operation failed, this references the MAD\r
+ element in the p_mad_element_list where the first failure occurred.\r
+ This parameter is optional if p_mad_element_list contains a single\r
+ MAD.\r
+\r
+ RETURN VALUES\r
+ IB_SUCCESS\r
+ The MAD element list was successfully posted.\r
+\r
+ IB_INVALID_HANDLE\r
+ The MAD service handle was invalid.\r
+\r
+ IB_INVALID_PARAMETER\r
+ A reference to the MAD element list was not provided.\r
+\r
+ IB_INSUFFICIENT_RESOURCES\r
+ There were insufficient resources currently available to complete\r
+ the request.\r
+\r
+ IB_INVALID_SETTING\r
+ The MAD element RMPP version is not supported by the access layer.\r
+\r
+ IB_INSUFFICIENT_MEMORY\r
+ There was insufficient memory to complete the request.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This routine posts a work request to send a MAD on a MAD service. All\r
+ MAD elements successfully posted by this call are under the control of\r
+ the access layer and should not be accessed until the send operation\r
+ completes.\r
+\r
+ In order to guarantee that MADs sent by separate clients do not use the\r
+ same transaction ID, the access layer reserves the upper 32-bits of the\r
+ TID on all unsolicited MADs. MADs sent with the response bit set will\r
+ not have their transaction ID's modified. Unsolicited MADs will have the\r
+ upper 32-bits of their TID set to an access layer generated client ID.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo150">ib_mad_element_t</a>, <a href="#robo62">ib_cancel_mad</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo250">[Structures]<a name="Access20Layer2fib5fshmid5ft">\r
+Access Layer/ib_shmid_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_shmid_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Shared Memory Identifier, used to uniquely identify a shared memory region.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef uint8_t <strong>ib_shmid_t</strong>[64];\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo233">ib_reg_shmid</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo251">[Structures]<a name="Access20Layer2fib5fsidr5frep5fpdata5ft">\r
+Access Layer/ib_sidr_rep_pdata_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_sidr_rep_pdata_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> User data sent as part of a service ID resolution reply.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef union _ib_sidr_rep_pdata\r
+{\r
+ uint8_t data[IB_SIDR_REP_PDATA_SIZE];\r
+\r
+} <strong>ib_sidr_rep_pdata_t</strong>;\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> ib_cm_data_sizes_t\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo252">[Structures]<a name="Access20Layer2fib5fsidr5freq5fpdata5ft">\r
+Access Layer/ib_sidr_req_pdata_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_sidr_req_pdata_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> User data sent as part of a service ID resolution request.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef union _ib_sidr_req_pdata\r
+{\r
+ uint8_t data[IB_SIDR_REQ_PDATA_SIZE];\r
+\r
+} <strong>ib_sidr_req_pdata_t</strong>;\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> ib_cm_data_sizes_t\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo253">[Structures]<a name="Access20Layer2fib5fsub5frec5ft">\r
+Access Layer/ib_sub_rec_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_sub_rec_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Information returned to a user that indicates the result of a subscription\r
+ request.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef struct _ib_sub_rec\r
+{\r
+ const void* __ptr64 sub_context;\r
+ <a href="./ib_types_h.html#robo49">ib_api_status_t</a> status;\r
+ ib_sub_handle_t h_sub;\r
+\r
+} <strong>ib_sub_rec_t</strong>;\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> sub_context\r
+ References user-defined context information associated with the\r
+ subscription request. This field is set by the user through the\r
+ <a href="#robo255">ib_subscribe</a> routine.\r
+\r
+ status\r
+ Indicates the success of the subscription request.\r
+\r
+ h_sub\r
+ The handle to the subscription request that was returned to the user\r
+ from the <a href="#robo255">ib_subscribe</a> call. This handle is provided to the user to\r
+ avoid a race condition between the return of the <a href="#robo255">ib_subscribe</a> routine\r
+ and the notification of an event.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This structure is returned to the user to notify them of the results\r
+ of a subscription request. After successfully subscribing with a\r
+ class manager for an event, this structure will be returned to the user\r
+ with the status set to IB_SUCCESS. The sub_context field will be set\r
+ to the context specified through the p_sub_req parameter in the\r
+ <a href="#robo255">ib_subscribe</a> routine.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo255">ib_subscribe</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo254">[Structures]<a name="Access20Layer2fib5fsub5freq5ft">\r
+Access Layer/ib_sub_req_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_sub_req_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Information used to subscribed for event notification from a class\r
+ manager.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef struct _ib_sub_req\r
+{\r
+ ib_svc_name_t* __ptr64 p_class_mgr_name;\r
+ ib_inform_info_t* __ptr64 p_inform_info;\r
+ <a href="./ib_types_h.html#robo895">ib_net64_t</a> port_guid;\r
+\r
+ uint32_t timeout_ms;\r
+ uint32_t retry_cnt;\r
+ <a href="#robo47">ib_al_flags_t</a> flags;\r
+\r
+ const void* __ptr64 sub_context;\r
+ <a href="#robo186">ib_pfn_sub_cb_t</a> pfn_sub_cb;\r
+\r
+ const void* __ptr64 report_context;\r
+ <a href="#robo185">ib_pfn_report_cb_t</a> pfn_report_cb;\r
+\r
+} <strong>ib_sub_req_t</strong>;\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> p_class_mgr_name\r
+ The service name of the class manager to subscribe for events with.\r
+\r
+ p_inform_info\r
+ Information describing the type of event being subscribed to.\r
+\r
+ port_guid\r
+ Directs the subscription request to use the specified port. The\r
+ request will contact the subnet administrator reachable through the\r
+ given port.\r
+\r
+ timeout_ms\r
+ Specifies the number of milliseconds to wait for a response for\r
+ this subscription until retrying or timing out the request.\r
+\r
+ retry_cnt\r
+ Specifies the number of times that the query will be retried before\r
+ failing the request.\r
+\r
+ flags\r
+ Used to describe the mode of operation. Set to IB_FLAGS_SYNC to\r
+ process the called routine synchronously.\r
+\r
+ sub_context\r
+ User-defined context information associated with this subscription\r
+ request. This context is returned to the user through the function\r
+ specified by the pfn_sub_cb field.\r
+\r
+ pfn_sub_cb\r
+ A user-defined callback that is invoked upon completion of the\r
+ subscription request. This is used to notify a client that of the\r
+ result of their subscription request.\r
+\r
+ report_context\r
+ User-defined context information associated with this subscription.\r
+ This context is returned to the user through the client's\r
+ <a href="#robo185">ib_pfn_report_cb_t</a> callback routine specified in <a href="#robo163">ib_open_al</a>.\r
+\r
+ pfn_report_cb\r
+ A user-defined callback that is invoked to notify the user that an\r
+ event report has been received.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This structure is used to subscribe for events with a class manager. Both\r
+ the subscription request and any corresponding event notifications operate\r
+ asynchronously. Clients will be notified of the result of their\r
+ subscription request before receiving notification of associated events.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo255">ib_subscribe</a>, ib_svc_name_t, ib_inform_info_t, <a href="#robo186">ib_pfn_sub_cb_t</a>,\r
+ <a href="#robo185">ib_pfn_report_cb_t</a>, <a href="#robo163">ib_open_al</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo255">[Functions]<a name="Access20Layer2fib5fsubscribe">\r
+Access Layer/ib_subscribe</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_subscribe</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Subscribe with a class manager for event notification.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_EXPORT <a href="./ib_types_h.html#robo49">ib_api_status_t</a> AL_API\r
+<strong>ib_subscribe</strong>(\r
+ IN const ib_al_handle_t h_al,\r
+ IN const <a href="#robo254">ib_sub_req_t</a>* const p_sub_req,\r
+ OUT ib_sub_handle_t* const ph_sub );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_al\r
+ [in] A handle to an open instance of the access layer.\r
+\r
+ p_sub_req\r
+ [in] Specifies the type of events that the user wishes to be\r
+ notified of, along with information needed to process the completed\r
+ subscription.\r
+\r
+ ph_sub\r
+ [out] Upon successful completion of this call, this references a handle\r
+ to the subscription request. This handle may be used to unsubscribe\r
+ from the events.\r
+\r
+ RETURN VALUES\r
+ IB_SUCCESS\r
+ The subscription request was initiated.\r
+\r
+ IB_INVALID_AL_HANDLE\r
+ The access layer handle was invalid.\r
+\r
+ IB_INVALID_PARAMETER\r
+ A reference to the subscription request or handle was not provided.\r
+\r
+ IB_INSUFFICIENT_MEMORY\r
+ There was insufficient memory to perform the operation.\r
+\r
+ IB_INVALID_GUID\r
+ No port was found for the port_guid specified in the request.\r
+\r
+ IB_INSUFFICIENT_RESOURCES\r
+ There were insufficient resources currently available on the channel\r
+ adapter to perform the operation.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This routine registers the calling client with a class manager for\r
+ notification of events. Once registered, a client will receive\r
+ notification, via a callback, that a given event has occurred on\r
+ a device managed by the class manager.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo257">ib_unsubscribe</a>, <a href="#robo254">ib_sub_req_t</a>, <a href="#robo186">ib_pfn_sub_cb_t</a>, <a href="#robo185">ib_pfn_report_cb_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo256">[Functions]<a name="Access20Layer2fib5fsync5fdestroy">\r
+Access Layer/ib_sync_destroy</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_sync_destroy</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Access layer routine used to indicate synchronous destruction of an\r
+ object.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_EXPORT void AL_API\r
+<strong>ib_sync_destroy</strong>(\r
+ IN void *context );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> Not Applicable.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> Users specify <strong>ib_sync_destroy</strong> as the <a href="#robo177">ib_pfn_destroy_cb_t</a> callback in order\r
+ to force synchronous object destruction. This may result in the calling\r
+ thread blocking while outstanding callbacks complete.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo177">ib_pfn_destroy_cb_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo257">[Functions]<a name="Access20Layer2fib5funsubscribe">\r
+Access Layer/ib_unsubscribe</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_unsubscribe</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Unsubscribe with a class manager for event notification.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_EXPORT <a href="./ib_types_h.html#robo49">ib_api_status_t</a> AL_API\r
+<strong>ib_unsubscribe</strong>(\r
+ IN const ib_sub_handle_t h_sub,\r
+ IN const <a href="#robo177">ib_pfn_destroy_cb_t</a> pfn_destroy_cb OPTIONAL );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_al\r
+ [in] A handle to an open instance of the access layer.\r
+\r
+ h_sub\r
+ [in] A handle to a subscribed event.\r
+\r
+ pfn_destroy_cb\r
+ [in] A user-specified callback that is invoked after the subscription\r
+ request has been successfully canceled.\r
+\r
+ RETURN VALUES\r
+ IB_SUCCESS\r
+ The unsubscribe request was initiated.\r
+\r
+ IB_INVALID_HANDLE\r
+ The subscription handle was invalid.\r
+\r
+ IB_INVALID_PARAMETER\r
+ A reference to the subscription request or handle was not provided.\r
+\r
+ IB_INSUFFICIENT_MEMORY\r
+ There was insufficient memory to perform the operation.\r
+\r
+ IB_INSUFFICIENT_RESOURCES\r
+ There were insufficient resources currently available on the channel\r
+ adapter to perform the operation.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This routine cancels an active or pending event subscription with a class\r
+ manager. To avoid a race condition canceling a subscription at the same\r
+ time an event notification callback is in progress, the unsubscribe\r
+ operation operates asynchronously. For additional details see\r
+ <a href="#robo177">ib_pfn_destroy_cb_t</a>.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo255">ib_subscribe</a>, <a href="#robo177">ib_pfn_destroy_cb_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo258">[Structures]<a name="Access20Layer2fib5fuser5fquery5ft">\r
+Access Layer/ib_user_query_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_user_query_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> User-defined query information.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef struct _ib_user_query\r
+{\r
+ uint8_t method;\r
+ <a href="./ib_types_h.html#robo893">ib_net16_t</a> attr_id;\r
+ uint32_t attr_size;\r
+ <a href="./ib_types_h.html#robo895">ib_net64_t</a> comp_mask;\r
+ void* __ptr64 p_attr;\r
+\r
+} <strong>ib_user_query_t</strong>;\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> method\r
+ Method to be run\r
+\r
+ attr_id\r
+ Attribute identifier of query data.\r
+\r
+ attr_size\r
+ Size of the query attribute in bytes. This is translated into the\r
+ attr_offset field of the SA MAD by the <a href="#robo211">ib_query</a> call.\r
+\r
+ comp_mask\r
+ Indicates the attribute components that are specified for the query.\r
+\r
+ p_attr\r
+ References the attribute structure used as input into the query.\r
+ This field is ignored if comp_mask is set to 0.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This structure is used to describe a user-defined query. The attribute\r
+ ID, attribute offset, component mask, and attribute structure must match\r
+ those defined by the IBA specification. Users should refer to chapter 15\r
+ of the IBA specification for additional details.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo221">ib_query_type_t</a>, <a href="#robo211">ib_query</a>, ib_get_attr_offset, ib_get_attr_size\r
+</pre>\r
+</span>\r
+</body>\r
+</html>\r
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">\r
+<html>\r
+<head>\r
+<link rel="stylesheet" href="../robodoc.css" type="text/css">\r
+<title>./inc_doc/iba/ib_al_ioctl_h.html</title>\r
+<!-- Source: ./inc/iba/ib_al_ioctl.h -->\r
+<!-- Generated with ROBODoc Version 4.99.22 (Mar 6 2006) -->\r
+</head>\r
+<body bgcolor="#FFFFFF">\r
+<a name="robo_top_of_doc">Generated from ./inc/iba/ib_al_ioctl.h</a> with <a href="http://sourceforge.net/projects/robodoc/">ROBODoc</a> v4.99.22 on Sun Apr 16 2006 17:39:23\r
+<br />\r
+<hr />\r
+\r
+<h2><a name="robo980">[Structures]<a name="User2dmode20Access20Layer2fual5falloc5fpd5fioctl5ft">\r
+User-mode Access Layer/ual_alloc_pd_ioctl_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ual_alloc_pd_ioctl_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> IOCTL structure containing the input and output parameters for\r
+ <a href="./ib_al_h.html#robo48">ib_alloc_pd</a>\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef union _ual_alloc_pd_ioctl\r
+{\r
+ struct _ual_alloc_pd_ioctl_in\r
+ {\r
+ <a href="./ib_ci_h.html#robo1153">ci_umv_buf_t</a> umv_buf;\r
+ uint64_t h_ca;\r
+ <a href="./ib_types_h.html#robo165">ib_pd_type_t</a> type;\r
+ void* __ptr64 context;\r
+\r
+ } in;\r
+ struct _ual_alloc_pd_ioctl_out\r
+ {\r
+ <a href="./ib_ci_h.html#robo1153">ci_umv_buf_t</a> umv_buf;\r
+ <a href="./ib_types_h.html#robo49">ib_api_status_t</a> status;\r
+ uint64_t h_pd;\r
+\r
+ } out;\r
+\r
+} <strong>ual_alloc_pd_ioctl_t</strong>;\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> in.umv_buf\r
+ Opaque to IBAL buffer descriptor to allow the user-mode HCA library to\r
+ exchange private information with the kernel-mode HCA driver.\r
+\r
+ in.h_ca\r
+ The handle to an open instance of CA returned in a ual_open_ca_ioctl.\r
+\r
+ in.context\r
+ UAL's pd context. This context will be provided on destroy callback.\r
+\r
+ out.umv_buf\r
+ Returns the status from the HCA driver to the user-mode HCA library,\r
+ along with any vendor specific output information.\r
+\r
+ out.status\r
+ Status of the operation\r
+\r
+ out.h_pd\r
+ The handle to the PD to use in further PD-related IOCTLs.\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo981">[Structures]<a name="User2dmode20Access20Layer2fual5fattach5fmcast5fioctl5ft">\r
+User-mode Access Layer/ual_attach_mcast_ioctl_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ual_attach_mcast_ioctl_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> IOCTL structure containing the input and output parameters for\r
+ verbs attach multicast call.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef union _ual_attach_mcast_ioctl\r
+{\r
+ struct _ual_attach_mcast_ioctl_in\r
+ {\r
+ <a href="./ib_ci_h.html#robo1153">ci_umv_buf_t</a> umv_buf;\r
+ uint64_t h_qp;\r
+ <a href="./ib_types_h.html#robo856">ib_gid_t</a> mgid;\r
+ <a href="./ib_types_h.html#robo893">ib_net16_t</a> mlid;\r
+\r
+ } in;\r
+ struct _ual_attach_mcast_ioctl_out\r
+ {\r
+ <a href="./ib_ci_h.html#robo1153">ci_umv_buf_t</a> umv_buf;\r
+ <a href="./ib_types_h.html#robo49">ib_api_status_t</a> status;\r
+ uint64_t h_attach;\r
+\r
+ } out;\r
+\r
+} <strong>ual_attach_mcast_ioctl_t</strong>;\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> in.umv_buf\r
+ Opaque to IBAL buffer descriptor to allow the user-mode HCA library to\r
+ exchange private information with the kernel-mode HCA driver.\r
+\r
+ in.h_qp\r
+ Handle to the QP that is joining the multicast group.\r
+\r
+ in.mgid\r
+ Multicast GID address for this multicast group.\r
+\r
+ in.mlid\r
+ Multicast LID for this multicast group.\r
+\r
+ out.umv_buf\r
+ Returns the status from the HCA driver to the user-mode HCA library,\r
+ along with any vendor specific output information.\r
+\r
+ out.status\r
+ Status of the operation.\r
+\r
+ h_attach\r
+ Multicast group handle.\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo982">[Structures]<a name="User2dmode20Access20Layer2fual5fbind5ffile5fioctl5ft">\r
+User-mode Access Layer/ual_bind_file_ioctl_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ual_bind_file_ioctl_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> IOCTL structure containing the input and output parameters for\r
+ binding a file handle to an existing proxy context.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef struct _ual_bind_file_ioctl\r
+{\r
+ void* __ptr64 h_file;\r
+\r
+} <strong>ual_bind_file_ioctl_t</strong>;\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> h_file\r
+ File handle from the user-mode process intended for asynchronous requests.\r
+ The IOCTL code will specify the type of asynchronous requests to be\r
+ performed on this file handle.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"></span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"></span>\r
+<hr />\r
+\r
+<h2><a name="robo983">[Structures]<a name="User2dmode20Access20Layer2fual5fbind5fmw5fioctl5ft">\r
+User-mode Access Layer/ual_bind_mw_ioctl_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ual_bind_mw_ioctl_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> IOCTL structure containing the input and output parameters for\r
+ <a href="./ib_al_h.html#robo58">ib_bind_mw</a>\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef union _ual_bind_mw_ioctl\r
+{\r
+ struct _ual_bind_mw_ioctl_in\r
+ {\r
+ uint64_t h_mw;\r
+ uint64_t h_qp;\r
+ <a href="./ib_types_h.html#robo59">ib_bind_wr_t</a> mw_bind;\r
+\r
+ } in;\r
+ struct _ual_bind_mw_ioctl_out\r
+ {\r
+ <a href="./ib_types_h.html#robo49">ib_api_status_t</a> status;\r
+ uint32_t r_key;\r
+\r
+ } out;\r
+\r
+} <strong>ual_bind_mw_ioctl_t</strong>;\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> in.h_mw\r
+ A handle to an existing memory window.\r
+\r
+ in.h_qp\r
+ The qp handle to post the bind request.\r
+\r
+ in.mw_bind\r
+ Bind request.\r
+\r
+ out.status\r
+ Status of the operation.\r
+\r
+ out.rkey\r
+ RKey for the memory window.\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo984">[Structures]<a name="User2dmode20Access20Layer2fual5fcancel5fmad5fioctl5ft">\r
+User-mode Access Layer/ual_cancel_mad_ioctl_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ual_cancel_mad_ioctl_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> IOCTL structure containing the input and output parameters for\r
+ <a href="./ib_al_h.html#robo62">ib_cancel_mad</a>\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef union _ual_cancel_mad_ioctl\r
+{\r
+ struct _ual_cancel_mad_ioctl_in\r
+ {\r
+ uint64_t h_mad_svc;\r
+ void* __ptr64 h_proxy_element;\r
+\r
+ } in;\r
+ struct _ual_cancel_mad_ioctl_out\r
+ {\r
+ <a href="./ib_types_h.html#robo49">ib_api_status_t</a> status;\r
+\r
+ } out;\r
+\r
+} <strong>ual_cancel_mad_ioctl_t</strong>;\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> in.h_mad_svc\r
+ contains the handle to the mad service\r
+\r
+ in.h_mad_send\r
+ this references the handle to the sent MAD operation.\r
+\r
+ out.status\r
+ Status of the operation.\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo985">[Structures]<a name="User2dmode20Access20Layer2fual5fcancel5fsa5freq5fioctl5ft">\r
+User-mode Access Layer/ual_cancel_sa_req_ioctl_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ual_cancel_sa_req_ioctl_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> IOCTL structure containing the input parameters for cancelling an\r
+ SA request.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef struct _ual_cancel_sa_req_ioctl\r
+{\r
+ uint64_t h_sa_req;\r
+\r
+} <strong>ual_cancel_sa_req_ioctl_t</strong>;\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_sa_req\r
+ Handle to the query to cancel.\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo986">[Structures]<a name="User2dmode20Access20Layer2fual5fcep5fapr5fioctl5ft">\r
+User-mode Access Layer/ual_cep_apr_ioctl_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ual_cep_apr_ioctl_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> IOCTL structure containing the input parameters for\r
+ ib_cep_apr\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef union _ual_cep_apr_ioctl\r
+{\r
+ struct _ual_cep_apr_ioctl_in\r
+ {\r
+ net32_t cid;\r
+ <a href="./ib_al_h.html#robo71">ib_cm_apr_t</a> cm_apr;\r
+ uint8_t apr_info[IB_APR_INFO_SIZE];\r
+ uint8_t pdata[IB_APR_PDATA_SIZE];\r
+\r
+ } in;\r
+\r
+ struct _ual_cep_apr_ioctl_out\r
+ {\r
+ <a href="./ib_types_h.html#robo49">ib_api_status_t</a> status;\r
+ <a href="./ib_types_h.html#robo207">ib_qp_mod_t</a> apr;\r
+\r
+ } out;\r
+\r
+} <strong>ual_cep_apr_ioctl_t</strong>;\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> in.h_cm_lap\r
+ The cm_lap connection handle got on the LAP callback.\r
+\r
+ in.cm_apr\r
+ CM APR parameters.\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo987">[Structures]<a name="User2dmode20Access20Layer2fual5fcep5fdrep5fioctl5ft">\r
+User-mode Access Layer/ual_cep_drep_ioctl_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ual_cep_drep_ioctl_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> IOCTL structure containing the input and output parameters for\r
+ <a href="./ib_al_h.html#robo74">ib_cm_drep</a>\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef struct _ual_cep_drep_ioctl\r
+{\r
+ net32_t cid;\r
+ <a href="./ib_al_h.html#robo76">ib_cm_drep_t</a> cm_drep;\r
+ uint8_t pdata[IB_DREP_PDATA_SIZE];\r
+\r
+} <strong>ual_cep_drep_ioctl_t</strong>;\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> in.h_cm_dreq\r
+ The cm_dreq connection handle got on the callback.\r
+\r
+ in.cm_drep\r
+ CM DREP parameters.\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo988">[Structures]<a name="User2dmode20Access20Layer2fual5fcep5fdreq5fioctl5ft">\r
+User-mode Access Layer/ual_cep_dreq_ioctl_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ual_cep_dreq_ioctl_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> IOCTL structure containing the input parameters for\r
+ <a href="./ib_al_h.html#robo77">ib_cm_dreq</a>\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef struct _ual_cep_dreq_ioctl\r
+{\r
+ net32_t cid;\r
+ uint8_t pdata_len;\r
+ uint8_t pdata[IB_DREQ_PDATA_SIZE];\r
+\r
+} <strong>ual_cep_dreq_ioctl_t</strong>;\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> cm_dreq\r
+ CM DREQ parameters.\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo989">[Structures]<a name="User2dmode20Access20Layer2fual5fcep5fget5frtr5fioctl5ft">\r
+User-mode Access Layer/ual_cep_get_rtr_ioctl_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ual_cep_get_rtr_ioctl_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> IOCTL structure containing the output parameters for\r
+ al_cep_get_rtr_attr call.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef struct _ual_cep_get_rtr_ioctl\r
+{\r
+ <a href="./ib_types_h.html#robo49">ib_api_status_t</a> status;\r
+ <a href="./ib_types_h.html#robo207">ib_qp_mod_t</a> rtr;\r
+\r
+} <strong>ual_cep_get_rtr_ioctl_t</strong>;\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> out.status\r
+ Status of the operation.\r
+\r
+ out.rtr\r
+ QP modify paramters for RTR state transition.\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo990">[Structures]<a name="User2dmode20Access20Layer2fual5fcep5fget5frts5fioctl5ft">\r
+User-mode Access Layer/ual_cep_get_rts_ioctl_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ual_cep_get_rts_ioctl_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> IOCTL structure containing the output parameters for\r
+ al_cep_get_rts_attr call.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef struct _ual_cep_get_rts_ioctl\r
+{\r
+ <a href="./ib_types_h.html#robo49">ib_api_status_t</a> status;\r
+ <a href="./ib_types_h.html#robo207">ib_qp_mod_t</a> rts;\r
+\r
+} <strong>ual_cep_get_rts_ioctl_t</strong>;\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> out.status\r
+ Status of the operation.\r
+\r
+ out.rts\r
+ QP modify paramters for RTS state transition.\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo991">[Structures]<a name="User2dmode20Access20Layer2fual5fcep5fget5ftimewait5fioctl5ft">\r
+User-mode Access Layer/ual_cep_get_timewait_ioctl_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ual_cep_get_timewait_ioctl_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> IOCTL structure containing the output parameters for\r
+ ib_cep_get_timewait\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef struct _ual_cep_get_timewait_ioctl\r
+{\r
+ <a href="./ib_types_h.html#robo49">ib_api_status_t</a> status;\r
+ uint64_t timewait_us;\r
+\r
+} <strong>ual_cep_get_timewait_ioctl_t</strong>;\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> in.status\r
+ Status of the request.\r
+\r
+ in.timewait_us\r
+ Timewait value, in microseconds.\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo992">[Structures]<a name="User2dmode20Access20Layer2fual5fcep5fhandoff5fioctl5ft">\r
+User-mode Access Layer/ual_cep_handoff_ioctl_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ual_cep_handoff_ioctl_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> IOCTL structure containing the input and output parameters for\r
+ <a href="./ib_al_h.html#robo81">ib_cm_handoff</a>\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef union _ual_cep_handoff_ioctl\r
+{\r
+ struct _ual_cep_handoff_ioctl_in\r
+ {\r
+ uint64_t h_cm;\r
+ net64_t sid;\r
+\r
+ } in;\r
+ struct _ual_cep_handoff_ioctl_out\r
+ {\r
+ <a href="./ib_types_h.html#robo49">ib_api_status_t</a> status;\r
+\r
+ } out;\r
+\r
+} <strong>ual_cep_handoff_ioctl_t</strong>;\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> in.h_cm\r
+ The connection handle got on the callback.\r
+\r
+ in.sid\r
+ Service ID to which to handoff the listen.\r
+\r
+ out.status\r
+ Status of the operation\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo993">[Structures]<a name="User2dmode20Access20Layer2fual5fcep5flap5fioctl5ft">\r
+User-mode Access Layer/ual_cep_lap_ioctl_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ual_cep_lap_ioctl_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> IOCTL structure containing the input parameters for\r
+ <a href="./ib_al_h.html#robo82">ib_cm_lap</a>\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef struct _ual_cep_lap_ioctl\r
+{\r
+ net32_t cid;\r
+ <a href="./ib_al_h.html#robo84">ib_cm_lap_t</a> cm_lap;\r
+ <a href="./ib_types_h.html#robo927">ib_path_rec_t</a> alt_path;\r
+ uint8_t pdata[IB_LAP_PDATA_SIZE];\r
+\r
+} <strong>ual_cep_lap_ioctl_t</strong>;\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> in.cm_lap\r
+ CM LAP parameters\r
+\r
+ in.alt_path\r
+ Alternate path information.\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo994">[Structures]<a name="User2dmode20Access20Layer2fual5fcep5flisten5fioctl5ft">\r
+User-mode Access Layer/ual_cep_listen_ioctl_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ual_cep_listen_ioctl_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> IOCTL structure containing the input parameters to\r
+ perform a CM listen request.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef struct _ual_cep_listen_ioctl\r
+{\r
+ net32_t cid;\r
+ <a href="./ib_al_h.html#robo64">ib_cep_listen_t</a> cep_listen;\r
+ uint8_t compare[IB_REQ_PDATA_SIZE];\r
+\r
+} <strong>ual_cep_listen_ioctl_t</strong>;\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> in.cid\r
+ CID of an existing CEP.\r
+\r
+ in.cep_listen\r
+ Information used to direct the listen request to match incoming\r
+ connection requests.\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo995">[Structures]<a name="User2dmode20Access20Layer2fual5fcep5fmra5fioctl5ft">\r
+User-mode Access Layer/ual_cep_mra_ioctl_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ual_cep_mra_ioctl_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> IOCTL structure containing the input parameters for\r
+ <a href="./ib_al_h.html#robo87">ib_cm_mra</a>\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef struct _ual_cep_mra_ioctl\r
+{\r
+ net32_t cid;\r
+ <a href="./ib_al_h.html#robo89">ib_cm_mra_t</a> cm_mra;\r
+ uint8_t pdata[IB_MRA_PDATA_SIZE];\r
+\r
+} <strong>ual_cep_mra_ioctl_t</strong>;\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> in.cid\r
+ The CID for the target CEP.\r
+\r
+ in.cm_mra\r
+ CM MRA parameters.\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo996">[Structures]<a name="User2dmode20Access20Layer2fual5fcep5fpoll5fioctl5ft">\r
+User-mode Access Layer/ual_cep_poll_ioctl_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ual_cep_poll_ioctl_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> IOCTL structure containing the output parameters to\r
+ poll for incoming events on a CEP. The input parameter is the CID.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef struct _ual_cep_poll_ioctl\r
+{\r
+ <a href="./ib_types_h.html#robo49">ib_api_status_t</a> status;\r
+ void* __ptr64 context;\r
+ net32_t new_cid;\r
+ <a href="./ib_al_h.html#robo150">ib_mad_element_t</a> element;\r
+ <a href="./ib_types_h.html#robo859">ib_grh_t</a> grh;\r
+ uint8_t mad_buf[<a href="./ib_types_h.html#robo832">MAD_BLOCK_SIZE</a>];\r
+\r
+} <strong>ual_cep_poll_ioctl_t</strong>;\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> status\r
+ Status of the operation.\r
+\r
+ new_cep\r
+ For listen requests, CEP information of CEPs created in response\r
+ to incoming REQs.\r
+\r
+ mad_buf\r
+ Payload of a received MAD (or failed send)\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo997">[Structures]<a name="User2dmode20Access20Layer2fual5fcep5frej5fioctl5ft">\r
+User-mode Access Layer/ual_cep_rej_ioctl_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ual_cep_rej_ioctl_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> IOCTL structure containing the input parameters for\r
+ al_cep_rej\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef struct _ual_cep_rej_ioctl\r
+{\r
+ net32_t cid;\r
+\r
+ <a href="./ib_types_h.html#robo238">ib_rej_status_t</a> rej_status;\r
+ uint8_t ari_len;\r
+ uint8_t pdata_len;\r
+ uint8_t ari[IB_ARI_SIZE];\r
+ uint8_t pdata[IB_REJ_PDATA_SIZE];\r
+\r
+} <strong>ual_cep_rej_ioctl_t</strong>;\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> in.cid\r
+ The CID of the target CEP.\r
+\r
+ in.rej_status\r
+ Rejection status as defined in IB spec.\r
+\r
+ in.ari_len\r
+ Length of the ARI data.\r
+\r
+ in.pdata_len\r
+ Length of the private data.\r
+\r
+ in.ari\r
+ ARI data.\r
+\r
+ in.pdata\r
+ Private data.\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo998">[Structures]<a name="User2dmode20Access20Layer2fual5fcep5frep5fioctl5ft">\r
+User-mode Access Layer/ual_cep_rep_ioctl_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ual_cep_rep_ioctl_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> IOCTL structure containing the input and output parameters for\r
+ al_cep_pre_rep call.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef union _ual_cep_rep_ioctl\r
+{\r
+ struct _ual_cep_rep_ioctl_in\r
+ {\r
+ void* __ptr64 context;\r
+ net32_t cid;\r
+ <a href="./ib_al_h.html#robo95">ib_cm_rep_t</a> cm_rep;\r
+ uint8_t pdata[IB_REP_PDATA_SIZE];\r
+\r
+ } in;\r
+ struct _ual_cep_rep_ioctl_out\r
+ {\r
+ <a href="./ib_types_h.html#robo49">ib_api_status_t</a> status;\r
+ <a href="./ib_types_h.html#robo207">ib_qp_mod_t</a> init;\r
+\r
+ } out;\r
+\r
+} <strong>ual_cep_rep_ioctl_t</strong>;\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> in.h_cm_req\r
+ The cm_req connection handle got on the callback.\r
+\r
+ in.cm_rep\r
+ CM REP parameters.\r
+\r
+ out.status\r
+ Status of the operation.\r
+\r
+ out.init\r
+ QP modify paramters for INIT state transition.\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo999">[Structures]<a name="User2dmode20Access20Layer2fual5fcep5frtu5fioctl5ft">\r
+User-mode Access Layer/ual_cep_rtu_ioctl_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ual_cep_rtu_ioctl_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> IOCTL structure containing the input parameters for\r
+ al_cep_rtu call.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef struct _ual_cep_rtu_ioctl\r
+{\r
+ net32_t cid;\r
+ uint8_t pdata_len;\r
+ uint8_t pdata[IB_RTU_PDATA_SIZE];\r
+\r
+} <strong>ual_cep_rtu_ioctl_t</strong>;\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> in.cid\r
+ The cm_rep connection handle got on the callback.\r
+\r
+ in.pdata_len\r
+ Length of private data.\r
+\r
+ in.pdata\r
+ Private data.\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1000">[Structures]<a name="User2dmode20Access20Layer2fual5fci5fcall5fioctl5ft">\r
+User-mode Access Layer/ual_ci_call_ioctl_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ual_ci_call_ioctl_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> IOCTL structure containing the input and output parameters for\r
+ <a href="./ib_al_h.html#robo65">ib_ci_call</a>\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef union _ual_ci_call_ioctl\r
+{\r
+ struct _ual_ci_call_ioctl_in\r
+ {\r
+ <a href="./ib_ci_h.html#robo1153">ci_umv_buf_t</a> umv_buf;\r
+ <a href="./ib_types_h.html#robo66">ib_ci_op_t</a> ci_op;\r
+ uint64_t h_ca;\r
+ uint32_t num_handles;\r
+ uint64_t handle_array[1];\r
+\r
+ } in;\r
+ struct _ual_ci_call_ioctl_out\r
+ {\r
+ <a href="./ib_ci_h.html#robo1153">ci_umv_buf_t</a> umv_buf;\r
+ <a href="./ib_types_h.html#robo66">ib_ci_op_t</a> ci_op;\r
+ <a href="./ib_types_h.html#robo49">ib_api_status_t</a> status;\r
+\r
+ } out;\r
+\r
+} <strong>ual_ci_call_ioctl_t</strong>;\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> in.umv_buf\r
+ Opaque to IBAL buffer descriptor to allow the user-mode HCA library to\r
+ exchange private information with the kernel-mode HCA driver.\r
+\r
+ in.ci_op\r
+ Contains information on the operation that needs to be performed\r
+ by the verbs provider. The proxy marshals the data buffer between\r
+ user mode and kernel space.\r
+\r
+ in.h_ca\r
+ The handle to an open instance of CA returned by a ual_open_ca_ioctl.\r
+\r
+ in.num_handles\r
+ The number of handles in the array at in.p_handle_array.\r
+\r
+ in.handle_array\r
+ First entry in an array of handles used for this operation. Ignored if\r
+ in.num_handles is zero.\r
+\r
+ out.umv_buf\r
+ Returns the status from the HCA driver to the user-mode HCA library,\r
+ along with any vendor specific output information.\r
+\r
+ out.status\r
+ Status of the operation\r
+\r
+ out.ci_op\r
+ Contains information on the operation that needs to be performed\r
+ by the verbs provider. The proxy marshals the data buffer between\r
+ user mode and kernel space.\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1001">[Structures]<a name="User2dmode20Access20Layer2fual5fclose5fca5fioctl5ft">\r
+User-mode Access Layer/ual_close_ca_ioctl_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ual_close_ca_ioctl_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> IOCTL structure containing the input and output parameters for\r
+ <a href="./ib_al_h.html#robo68">ib_close_ca</a>\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef union _ual_close_ca_ioctl\r
+{\r
+ struct _ual_close_ca_ioctl_in\r
+ {\r
+ uint64_t h_ca;\r
+\r
+ } in;\r
+ struct _ual_close_ca_ioctl_out\r
+ {\r
+ <a href="./ib_types_h.html#robo49">ib_api_status_t</a> status;\r
+\r
+ } out;\r
+\r
+} <strong>ual_close_ca_ioctl_t</strong>;\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> in.h_ca\r
+ The handle to an open instance of CA (in KAL space).\r
+\r
+ out.status\r
+ Status of the operation\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1002">[Structures]<a name="User2dmode20Access20Layer2fual5fcm5freq5fioctl5ft">\r
+User-mode Access Layer/ual_cm_req_ioctl_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ual_cm_req_ioctl_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> IOCTL structure containing the input and output parameters for\r
+ al_cep_pre_req call.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef union _ual_cep_req_ioctl\r
+{\r
+ struct _ual_cep_req_ioctl_in\r
+ {\r
+ net32_t cid;\r
+ <a href="./ib_al_h.html#robo98">ib_cm_req_t</a> cm_req;\r
+ <a href="./ib_types_h.html#robo927">ib_path_rec_t</a> paths[2];\r
+ uint8_t pdata[IB_REQ_PDATA_SIZE];\r
+ uint8_t compare[IB_REQ_PDATA_SIZE];\r
+\r
+ } in;\r
+ struct _ual_cep_req_ioctl_out\r
+ {\r
+ <a href="./ib_types_h.html#robo49">ib_api_status_t</a> status;\r
+ <a href="./ib_types_h.html#robo207">ib_qp_mod_t</a> init;\r
+\r
+ } out;\r
+\r
+} ual_cep_req_ioctl_t;\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> in.cid\r
+ CID of the target CEP.\r
+\r
+ in.cm_req\r
+ CM REQ parameters.\r
+\r
+ in.paths\r
+ Array of paths, the first being the primary path to use for the REQ.\r
+\r
+ out.status\r
+ Status of the operation\r
+\r
+ out.init\r
+ QP modify paramters for INIT state transition.\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1003">[Structures]<a name="User2dmode20Access20Layer2fual5fcreate5fav5fioctl5ft">\r
+User-mode Access Layer/ual_create_av_ioctl_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ual_create_av_ioctl_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> IOCTL structure containing the input and output parameters for\r
+ <a href="./ib_al_h.html#robo104">ib_create_av</a>\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef union _ual_create_av_ioctl\r
+{\r
+ struct _ual_create_av_ioctl_in\r
+ {\r
+ <a href="./ib_ci_h.html#robo1153">ci_umv_buf_t</a> umv_buf;\r
+ uint64_t h_pd;\r
+ <a href="./ib_types_h.html#robo57">ib_av_attr_t</a> attr;\r
+\r
+ } in;\r
+ struct _ual_create_av_ioctl_out\r
+ {\r
+ <a href="./ib_ci_h.html#robo1153">ci_umv_buf_t</a> umv_buf;\r
+ <a href="./ib_types_h.html#robo49">ib_api_status_t</a> status;\r
+ uint64_t h_av;\r
+\r
+ } out;\r
+\r
+} <strong>ual_create_av_ioctl_t</strong>;\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> in.umv_buf\r
+ Opaque to IBAL buffer descriptor to allow the user-mode HCA library to\r
+ exchange private information with the kernel-mode HCA driver.\r
+\r
+ in.h_pd\r
+ The handle to an already allocated PD (in KAL space).\r
+\r
+ in.attr\r
+ Attributes of the address vector that needs to be created.\r
+\r
+ out.umv_buf\r
+ Returns the status from the HCA driver to the user-mode HCA library,\r
+ along with any vendor specific output information.\r
+\r
+ out.status\r
+ Status of the operation.\r
+\r
+ out.h_av\r
+ Handle to the newly created address vector.\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1004">[Structures]<a name="User2dmode20Access20Layer2fual5fcreate5fcep5fioctl5ft">\r
+User-mode Access Layer/ual_create_cep_ioctl_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ual_create_cep_ioctl_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> IOCTL structure containing the output parameters to\r
+ create a CEP.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef struct _ual_create_cep_ioctl\r
+{\r
+ <a href="./ib_types_h.html#robo49">ib_api_status_t</a> status;\r
+ net32_t cid;\r
+\r
+} <strong>ual_create_cep_ioctl_t</strong>;\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> status\r
+ Status of the operation.\r
+\r
+ cid\r
+ CID of the created CEP.\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1005">[Structures]<a name="User2dmode20Access20Layer2fual5fcreate5fcq5fioctl5ft">\r
+User-mode Access Layer/ual_create_cq_ioctl_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ual_create_cq_ioctl_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> IOCTL structure containing the input and output parameters for\r
+ <a href="./ib_al_h.html#robo105">ib_create_cq</a>\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef union _ual_create_cq_ioctl\r
+{\r
+ struct _ual_create_cq_ioctl_in\r
+ {\r
+ <a href="./ib_ci_h.html#robo1153">ci_umv_buf_t</a> umv_buf;\r
+ uint64_t h_ca;\r
+ void* __ptr64 h_wait_obj;\r
+ void* __ptr64 context;\r
+ uint32_t size;\r
+ boolean_t ev_notify;\r
+\r
+ } in;\r
+ struct _ual_create_cq_ioctl_out\r
+ {\r
+ <a href="./ib_ci_h.html#robo1153">ci_umv_buf_t</a> umv_buf;\r
+ <a href="./ib_types_h.html#robo49">ib_api_status_t</a> status;\r
+ uint64_t h_cq;\r
+ uint32_t size;\r
+\r
+ } out;\r
+\r
+} <strong>ual_create_cq_ioctl_t</strong>;\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> in.umv_buf\r
+ Opaque to IBAL buffer descriptor to allow the user-mode HCA library to\r
+ exchange private information with the kernel-mode HCA driver.\r
+\r
+ in.h_ca\r
+ CA handle on which to create the CQ.\r
+\r
+ in.cq_create\r
+ Attributes necessary for creating the cq.\r
+\r
+ in.cq_context\r
+ UAL's cq context that needs to be returned on a callback.\r
+\r
+ in.ev_notify\r
+ Boolean indicating whether asynchronous events should be\r
+ forwared to user-mode.\r
+\r
+ out.umv_buf\r
+ Returns the status from the HCA driver to the user-mode HCA library,\r
+ along with any vendor specific output information.\r
+\r
+ out.status\r
+ Status of the operation.\r
+\r
+ h_cq\r
+ Handle to the newly created CQ.\r
+\r
+ size\r
+ Actual size of the newly created CQ.\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1006">[Structures]<a name="User2dmode20Access20Layer2fual5fcreate5fmw5fioctl5ft">\r
+User-mode Access Layer/ual_create_mw_ioctl_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ual_create_mw_ioctl_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> IOCTL structure containing the input and output parameters for\r
+ <a href="./ib_al_h.html#robo108">ib_create_mw</a>\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef union _ual_create_mw_ioctl\r
+{\r
+ struct _ual_create_mw_ioctl_in\r
+ {\r
+ <a href="./ib_ci_h.html#robo1153">ci_umv_buf_t</a> umv_buf;\r
+ uint64_t h_pd;\r
+\r
+ } in;\r
+ struct _ual_create_mw_ioctl_out\r
+ {\r
+ <a href="./ib_ci_h.html#robo1153">ci_umv_buf_t</a> umv_buf;\r
+ <a href="./ib_types_h.html#robo49">ib_api_status_t</a> status;\r
+ net32_t rkey;\r
+ uint64_t h_mw;\r
+\r
+ } out;\r
+\r
+} <strong>ual_create_mw_ioctl_t</strong>;\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> in.umv_buf\r
+ Opaque to IBAL buffer descriptor to allow the user-mode HCA library to\r
+ exchange private information with the kernel-mode HCA driver.\r
+\r
+ in.h_pd\r
+ A handle to the protection domain on which the memory window should\r
+ be created.\r
+\r
+ out.umv_buf\r
+ Returns the status from the HCA driver to the user-mode HCA library,\r
+ along with any vendor specific output information.\r
+\r
+ out.status\r
+ Status of the operation.\r
+\r
+ out.rkey\r
+ RKey associated with the memory window.\r
+\r
+ h_mw\r
+ Handle to the newly created MW.\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1007">[Structures]<a name="User2dmode20Access20Layer2fual5fcreate5fqp5fioctl5ft">\r
+User-mode Access Layer/ual_create_qp_ioctl_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ual_create_qp_ioctl_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> IOCTL structure containing the input and output parameters for\r
+ <a href="./ib_al_h.html#robo109">ib_create_qp</a>\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef union _ual_create_qp_ioctl\r
+{\r
+ struct _ual_create_qp_ioctl_in\r
+ {\r
+ <a href="./ib_ci_h.html#robo1153">ci_umv_buf_t</a> umv_buf;\r
+ uint64_t h_pd;\r
+ <a href="./ib_types_h.html#robo206">ib_qp_create_t</a> qp_create;\r
+ void* __ptr64 context;\r
+ boolean_t ev_notify;\r
+\r
+ } in;\r
+ struct _ual_create_qp_ioctl_out\r
+ {\r
+ <a href="./ib_ci_h.html#robo1153">ci_umv_buf_t</a> umv_buf;\r
+ <a href="./ib_types_h.html#robo49">ib_api_status_t</a> status;\r
+ <a href="./ib_types_h.html#robo205">ib_qp_attr_t</a> attr;\r
+ uint64_t h_qp;\r
+\r
+ } out;\r
+\r
+} <strong>ual_create_qp_ioctl_t</strong>;\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> in.umv_buf\r
+ Opaque to IBAL buffer descriptor to allow the user-mode HCA library to\r
+ exchange private information with the kernel-mode HCA driver.\r
+\r
+ in.h_pd\r
+ Protection domain on which to create the QP.\r
+\r
+ in.qp_create\r
+ Attributes necessary for creating the QP.\r
+\r
+ in.context\r
+ UAL's qp context that needs to be returned on a callback.\r
+\r
+ in.ev_notify\r
+ Boolean indicating whether asynchronous events should be\r
+ forwarded to user-mode.\r
+\r
+ out.umv_buf\r
+ Returns the status from the HCA driver to the user-mode HCA library,\r
+ along with any vendor specific output information.\r
+\r
+ out.status\r
+ Status of the operation.\r
+\r
+ out.attr\r
+ Actual attributes of the newly created QP.\r
+\r
+ out.h_qp\r
+ Handle for the newly created QP.\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1008">[Structures]<a name="User2dmode20Access20Layer2fual5fdealloc5fpd5fioctl5ft">\r
+User-mode Access Layer/ual_dealloc_pd_ioctl_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ual_dealloc_pd_ioctl_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> IOCTL structure containing the input and output parameters for\r
+ <a href="./ib_al_h.html#robo110">ib_dealloc_pd</a>\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef union _ual_dealloc_pd_ioctl\r
+{\r
+ struct _ual_dealloc_pd_ioctl_in\r
+ {\r
+ uint64_t h_pd;\r
+\r
+ } in;\r
+ struct _ual_dealloc_pd_ioctl_out\r
+ {\r
+ <a href="./ib_types_h.html#robo49">ib_api_status_t</a> status;\r
+\r
+ } out;\r
+\r
+} <strong>ual_dealloc_pd_ioctl_t</strong>;\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> in.h_pd\r
+ The handle of the PD that is going to be deallocated.\r
+\r
+ out.status\r
+ Status of the operation\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1009">[Structures]<a name="User2dmode20Access20Layer2fual5fdereg5fmad5fpool5fioctl5ft">\r
+User-mode Access Layer/ual_dereg_mad_pool_ioctl_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ual_dereg_mad_pool_ioctl_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> IOCTL structure containing the input and output parameters for\r
+ deregistering a mad pool to be used with special qp.\r
+ The kernel proxy will deregister and destroy the mad pool\r
+ created on behalf of the user process.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef union _ual_dereg_mad_pool_ioctl\r
+{\r
+ struct _ual_dereg_mad_pool_ioctl_in\r
+ {\r
+ uint64_t pool_key;\r
+\r
+ } in;\r
+ struct _ual_dereg_mad_pool_ioctl_out\r
+ {\r
+ <a href="./ib_types_h.html#robo49">ib_api_status_t</a> status;\r
+\r
+ } out;\r
+\r
+} <strong>ual_dereg_mad_pool_ioctl_t</strong>;\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> in.pool_key\r
+ <a href="../complib/cl_pool_h.html#robo24">Pool</a> key to the mad pool in kernel space.\r
+\r
+ out.status\r
+ Status of the operation\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1010">[Structures]<a name="User2dmode20Access20Layer2fual5fdereg5fmad5fsvc5fioctl5ft">\r
+User-mode Access Layer/ual_dereg_mad_svc_ioctl_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ual_dereg_mad_svc_ioctl_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> IOCTL structure containing the input and output parameters for\r
+ ib_dereg_mad_svc\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef union _ual_dereg_mad_svc_ioctl\r
+{\r
+ struct _ual_dereg_mad_svc_ioctl_in\r
+ {\r
+ uint64_t h_mad_svc;\r
+\r
+ } in;\r
+ struct _ual_dereg_mad_svc_ioctl_out\r
+ {\r
+ <a href="./ib_types_h.html#robo49">ib_api_status_t</a> status;\r
+\r
+ } out;\r
+\r
+} <strong>ual_dereg_mad_svc_ioctl_t</strong>;\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> in.h_mad_svc\r
+ Handle to the mad service.\r
+\r
+ out.status\r
+ Status of the operation.\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1011">[Structures]<a name="User2dmode20Access20Layer2fual5fdereg5fmr5fioctl5ft">\r
+User-mode Access Layer/ual_dereg_mr_ioctl_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ual_dereg_mr_ioctl_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> IOCTL structure containing the input and output parameters for\r
+ <a href="./ib_al_h.html#robo112">ib_dereg_mr</a>\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef union _ual_dereg_mr_ioctl\r
+{\r
+ struct _ual_dereg_mr_ioctl_in\r
+ {\r
+ uint64_t h_mr;\r
+\r
+ } in;\r
+ struct _ual_dereg_mr_ioctl_out\r
+ {\r
+ <a href="./ib_types_h.html#robo49">ib_api_status_t</a> status;\r
+ \r
+ } out;\r
+\r
+} <strong>ual_dereg_mr_ioctl_t</strong>;\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> in.h_mr\r
+ A handle to a registered memory region.\r
+\r
+ out.status\r
+ Status of the operation.\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1012">[Structures]<a name="User2dmode20Access20Layer2fual5fdereg5fpnp5fioctl5ft">\r
+User-mode Access Layer/ual_dereg_pnp_ioctl_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ual_dereg_pnp_ioctl_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> IOCTL structure containing the input parameters for cancelling an\r
+ SA request.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef struct _ual_dereg_pnp_ioctl\r
+{\r
+ uint64_t h_pnp;\r
+\r
+} <strong>ual_dereg_pnp_ioctl_t</strong>;\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This is an asynchronous IOCTL.\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_pnp\r
+ Handle to the PnP registration to deregister.\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1013">[Structures]<a name="User2dmode20Access20Layer2fual5fdestroy5fav5fioctl5ft">\r
+User-mode Access Layer/ual_destroy_av_ioctl_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ual_destroy_av_ioctl_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> IOCTL structure containing the input and output parameters for\r
+ <a href="./ib_al_h.html#robo115">ib_destroy_av</a>\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef union _ual_destroy_av_ioctl\r
+{\r
+ struct _ual_destroy_av_ioctl_in\r
+ {\r
+ uint64_t h_av;\r
+\r
+ } in;\r
+ struct _ual_destroy_av_ioctl_out\r
+ {\r
+ <a href="./ib_types_h.html#robo49">ib_api_status_t</a> status;\r
+\r
+ } out;\r
+\r
+} <strong>ual_destroy_av_ioctl_t</strong>;\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> in.h_av\r
+ A handle to an existing address vector.\r
+\r
+ out.status\r
+ Status of the operation.\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1014">[Structures]<a name="User2dmode20Access20Layer2fual5fdestroy5fcq5fioctl5ft">\r
+User-mode Access Layer/ual_destroy_cq_ioctl_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ual_destroy_cq_ioctl_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> IOCTL structure containing the input and output parameters for\r
+ <a href="./ib_al_h.html#robo116">ib_destroy_cq</a>\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef union _ual_destroy_cq_ioctl\r
+{\r
+ struct _ual_destroy_cq_ioctl_in\r
+ {\r
+ uint64_t h_cq;\r
+\r
+ } in;\r
+ struct _ual_destroy_cq_ioctl_out\r
+ {\r
+ <a href="./ib_types_h.html#robo49">ib_api_status_t</a> status;\r
+\r
+ } out;\r
+\r
+} <strong>ual_destroy_cq_ioctl_t</strong>;\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> in.h_cq\r
+ Handle of the cq that needs to be destroyed.\r
+\r
+ out.status\r
+ Status of the operation.\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1015">[Structures]<a name="User2dmode20Access20Layer2fual5fdestroy5fmw5fioctl5ft">\r
+User-mode Access Layer/ual_destroy_mw_ioctl_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ual_destroy_mw_ioctl_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> IOCTL structure containing the input and output parameters for\r
+ <a href="./ib_al_h.html#robo119">ib_destroy_mw</a>\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef union _ual_destroy_mw_ioctl\r
+{\r
+ struct _ual_destroy_mw_ioctl_in\r
+ {\r
+ uint64_t h_mw;\r
+\r
+ } in;\r
+ struct _ual_destroy_mw_ioctl_out\r
+ {\r
+ <a href="./ib_types_h.html#robo49">ib_api_status_t</a> status;\r
+\r
+ } out;\r
+\r
+} <strong>ual_destroy_mw_ioctl_t</strong>;\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> in.h_mw\r
+ A handle to an existing memory window.\r
+\r
+ out.status\r
+ Status of the operation\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1016">[Structures]<a name="User2dmode20Access20Layer2fual5fdestroy5fqp5fioctl5ft">\r
+User-mode Access Layer/ual_destroy_qp_ioctl_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ual_destroy_qp_ioctl_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> IOCTL structure containing the input and output parameters for\r
+ <a href="./ib_al_h.html#robo120">ib_destroy_qp</a>\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef union _ual_destroy_qp_ioctl\r
+{\r
+ struct _ual_destroy_qp_ioctl_in\r
+ {\r
+ uint64_t h_qp;\r
+\r
+ } in;\r
+ struct _ual_destroy_qp_ioctl_out\r
+ {\r
+ <a href="./ib_types_h.html#robo49">ib_api_status_t</a> status;\r
+\r
+ } out;\r
+\r
+} <strong>ual_destroy_qp_ioctl_t</strong>;\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> in.h_qp\r
+ Handle of the QP that needs to be destroyed.\r
+\r
+ out.status\r
+ Status of the operation.\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1017">[Structures]<a name="User2dmode20Access20Layer2fual5fdetach5fmcast5fioctl5ft">\r
+User-mode Access Layer/ual_detach_mcast_ioctl_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ual_detach_mcast_ioctl_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> IOCTL structure containing the input and output parameters for\r
+ verbs detach call.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef union _ual_detach_mcast_ioctl\r
+{\r
+ struct _ual_detach_mcast_ioctl_in\r
+ {\r
+ uint64_t h_attach;\r
+\r
+ } in;\r
+ struct _ual_detach_mcast_ioctl_out\r
+ {\r
+ <a href="./ib_types_h.html#robo49">ib_api_status_t</a> status;\r
+\r
+ } out;\r
+\r
+} <strong>ual_detach_mcast_ioctl_t</strong>;\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> in.h_attach\r
+ A handle to the multicast group.\r
+\r
+ out.status\r
+ Status of the operation.\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1018">[Structures]<a name="User2dmode20Access20Layer2fual5fforce5fapm5fioctl5ft">\r
+User-mode Access Layer/ual_force_apm_ioctl_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ual_force_apm_ioctl_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> IOCTL structure containing the input and output parameters for\r
+ <a href="./ib_al_h.html#robo125">ib_force_apm</a>\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef union _ual_force_apm_ioctl\r
+{\r
+ union _ual_force_apm_ioctl_in\r
+ {\r
+ uint64_t h_qp;\r
+\r
+ } in;\r
+ struct _ual_force_apm_ioctl_out\r
+ {\r
+ <a href="./ib_types_h.html#robo49">ib_api_status_t</a> status;\r
+\r
+ } out;\r
+\r
+} <strong>ual_force_apm_ioctl_t</strong>;\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> in.h_qp\r
+ A handle to the QP to migrate.\r
+\r
+ out.status\r
+ Status of the operation\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1019">[Structures]<a name="User2dmode20Access20Layer2fual5fget5fuvp5fname5ft">\r
+User-mode Access Layer/ual_get_uvp_name_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ual_get_uvp_name_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> IOCTL structure containing the input and output parameters for\r
+ getting the user library information.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef union _ual_get_uvp_name\r
+{\r
+ struct _ual_get_uvp_name_in\r
+ {\r
+ <a href="./ib_types_h.html#robo895">ib_net64_t</a> ca_guid;\r
+\r
+ } in;\r
+ struct _ual_get_uvp_name_out\r
+ {\r
+ <a href="./ib_types_h.html#robo49">ib_api_status_t</a> status;\r
+ char uvp_lib_name[MAX_LIB_NAME];\r
+\r
+ } out;\r
+\r
+} ual_get_uvp_name_ioctl_t;\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> in.ca_guid\r
+ The GUID of the channel adapter\r
+\r
+ out.status\r
+ Status of the operation\r
+\r
+ out.uvp_lib_name\r
+ The vendor's library name associated with the CA\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"></span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"></span>\r
+<hr />\r
+\r
+<h2><a name="robo1020">[Structures]<a name="User2dmode20Access20Layer2fual5fmad5frecv5fioctl5ft">\r
+User-mode Access Layer/ual_mad_recv_ioctl_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ual_mad_recv_ioctl_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> IOCTL structure containing the input and output parameters to get\r
+ the mad_element information upon receiving MAD.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef union _ual_mad_recv_ioctl\r
+{\r
+ struct _ual_mad_recv_comp_ioctl_in\r
+ {\r
+ uint64_t h_mad;\r
+ <a href="./ib_al_h.html#robo150">ib_mad_element_t</a>* __ptr64 p_user_mad;\r
+ <a href="./ib_types_h.html#robo882">ib_mad_t</a>* __ptr64 p_mad_buf;\r
+ <a href="./ib_types_h.html#robo859">ib_grh_t</a>* __ptr64 p_grh;\r
+\r
+ } in;\r
+ struct _ual_mad_recv_comp_ioctl_out\r
+ {\r
+ <a href="./ib_types_h.html#robo49">ib_api_status_t</a> status;\r
+\r
+ } out;\r
+\r
+} <strong>ual_mad_recv_ioctl_t</strong>;\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> in.h_mad\r
+ Received MAD handle handed to usermode in the MAD recv notification.\r
+\r
+ in.p_user_mad\r
+ Pointer to a user-mode mad element.\r
+\r
+ in.p_mad_buf\r
+ Pointer to the MAD element's user-mode buffer.\r
+\r
+ in.p_grh\r
+ Ponter to the MAD element's user-mode GRH buffer.\r
+\r
+ out.status\r
+ Status of the operation.\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1021">[Structures]<a name="User2dmode20Access20Layer2fual5fmodify5fav5fioctl5ft">\r
+User-mode Access Layer/ual_modify_av_ioctl_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ual_modify_av_ioctl_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> IOCTL structure containing the input and output parameters for\r
+ <a href="./ib_al_h.html#robo155">ib_modify_av</a>\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef union _ual_modify_av_ioctl\r
+{\r
+ struct _ual_modify_av_ioctl_in\r
+ {\r
+ <a href="./ib_ci_h.html#robo1153">ci_umv_buf_t</a> umv_buf;\r
+ uint64_t h_av;\r
+ <a href="./ib_types_h.html#robo57">ib_av_attr_t</a> attr;\r
+\r
+ } in;\r
+ struct _ual_modify_av_ioctl_out\r
+ {\r
+ <a href="./ib_ci_h.html#robo1153">ci_umv_buf_t</a> umv_buf;\r
+ <a href="./ib_types_h.html#robo49">ib_api_status_t</a> status;\r
+\r
+ } out;\r
+\r
+} <strong>ual_modify_av_ioctl_t</strong>;\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> in.umv_buf\r
+ Opaque to IBAL buffer descriptor to allow the user-mode HCA library to\r
+ exchange private information with the kernel-mode HCA driver.\r
+\r
+ in.h_av\r
+ A handle to an existing address vector.\r
+\r
+ in.attr\r
+ The requested attributes to be used for modifying the address vector.\r
+\r
+ out.umv_buf\r
+ Returns the status from the HCA driver to the user-mode HCA library,\r
+ along with any vendor specific output information.\r
+\r
+ out.status\r
+ Status of the operation\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1022">[Structures]<a name="User2dmode20Access20Layer2fual5fmodify5fca5fioctl5ft">\r
+User-mode Access Layer/ual_modify_ca_ioctl_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ual_modify_ca_ioctl_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> IOCTL structure containing the input and output parameters for\r
+ <a href="./ib_al_h.html#robo156">ib_modify_ca</a>\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef union _ual_modify_ca_ioctl\r
+{\r
+ struct _ual_modify_ca_ioctl_in\r
+ {\r
+ uint64_t h_ca;\r
+ uint8_t port_num;\r
+ <a href="./ib_types_h.html#robo61">ib_ca_mod_t</a> ca_mod;\r
+ <a href="./ib_types_h.html#robo199">ib_port_attr_mod_t</a> port_attr_mod;\r
+\r
+ } in;\r
+ struct _ual_modify_ca_ioclt_out\r
+ {\r
+ <a href="./ib_types_h.html#robo49">ib_api_status_t</a> status;\r
+\r
+ } out;\r
+\r
+\r
+} <strong>ual_modify_ca_ioctl_t</strong>;\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> in.h_ca\r
+ The handle to an open instance of CA (in KAL space).\r
+\r
+ in.port_num\r
+ An index of the port that is being modified.\r
+\r
+ in.ca_mod\r
+ The mask of the attributes and counters to modify.\r
+\r
+ in.port_attr_mod\r
+ <a href="../complib/cl_list_h.html#robo15">List</a> of port attribute information to modify.\r
+\r
+ out.status\r
+ Status of the operation\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1023">[Structures]<a name="User2dmode20Access20Layer2fual5fmodify5fcq5fioctl5ft">\r
+User-mode Access Layer/ual_modify_cq_ioctl_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ual_modify_cq_ioctl_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> IOCTL structure containing the input and output parameters for\r
+ <a href="./ib_al_h.html#robo157">ib_modify_cq</a>\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef union _ual_modify_cq_ioctl\r
+{\r
+ struct _ual_modify_cq_ioctl_in\r
+ {\r
+ <a href="./ib_ci_h.html#robo1153">ci_umv_buf_t</a> umv_buf;\r
+ uint64_t h_cq;\r
+ uint32_t size;\r
+\r
+ } in;\r
+ struct _ual_modify_cq_ioctl_out\r
+ {\r
+ <a href="./ib_ci_h.html#robo1153">ci_umv_buf_t</a> umv_buf;\r
+ <a href="./ib_types_h.html#robo49">ib_api_status_t</a> status;\r
+ uint32_t size;\r
+\r
+ } out;\r
+\r
+} <strong>ual_modify_cq_ioctl_t</strong>;\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> in.umv_buf\r
+ Opaque to IBAL buffer descriptor to allow the user-mode HCA library to\r
+ exchange private information with the kernel-mode HCA driver.\r
+\r
+ in.h_cq\r
+ A handle to the CQ to modify.\r
+\r
+ in.size\r
+ The requested new size of the CQ.\r
+\r
+ out.umv_buf\r
+ Returns the status from the HCA driver to the user-mode HCA library,\r
+ along with any vendor specific output information.\r
+\r
+ out.status\r
+ Status of the operation.\r
+\r
+ out.size\r
+ The actual size of the CQ.\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1024">[Structures]<a name="User2dmode20Access20Layer2fual5fmodify5fqp5fioctl5ft">\r
+User-mode Access Layer/ual_modify_qp_ioctl_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ual_modify_qp_ioctl_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> IOCTL structure containing the input and output parameters for\r
+ <a href="./ib_al_h.html#robo158">ib_modify_qp</a>\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef union _ual_modify_qp_ioctl\r
+{\r
+ struct _ual_modify_qp_ioctl_in\r
+ {\r
+ <a href="./ib_ci_h.html#robo1153">ci_umv_buf_t</a> umv_buf;\r
+ uint64_t h_qp;\r
+ <a href="./ib_types_h.html#robo207">ib_qp_mod_t</a> modify_attr;\r
+\r
+ } in;\r
+ struct _ual_modify_qp_ioctl_out\r
+ {\r
+ <a href="./ib_ci_h.html#robo1153">ci_umv_buf_t</a> umv_buf;\r
+ <a href="./ib_types_h.html#robo49">ib_api_status_t</a> status;\r
+ //ib_qp_query_t query_attr; // Not returned by AL\r
+\r
+ } out;\r
+\r
+} <strong>ual_modify_qp_ioctl_t</strong>;\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> in.umv_buf\r
+ Opaque to IBAL buffer descriptor to allow the user-mode HCA library to\r
+ exchange private information with the kernel-mode HCA driver.\r
+\r
+ in.h_qp\r
+ A handle to an existing Queue Pair.\r
+\r
+ in.modify_attr\r
+ Attributes used for modifying the QP.\r
+\r
+ out.umv_buf\r
+ Returns the status from the HCA driver to the user-mode HCA library,\r
+ along with any vendor specific output information.\r
+\r
+ out.status\r
+ Status of the operation.\r
+\r
+ out.query_attr\r
+ On return from the ioctl, contains the actual attributes of\r
+ the QP just modified.\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1025">[Structures]<a name="User2dmode20Access20Layer2fual5fopen5fca5fioctl5ft">\r
+User-mode Access Layer/ual_open_ca_ioctl_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ual_open_ca_ioctl_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> IOCTL structure containing the input and output parameters for\r
+ <a href="./ib_al_h.html#robo164">ib_open_ca</a>\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef union _ual_open_ca_ioctl\r
+{\r
+ struct _ual_open_ca_ioctl_in\r
+ {\r
+ <a href="./ib_ci_h.html#robo1153">ci_umv_buf_t</a> umv_buf;\r
+ <a href="./ib_types_h.html#robo895">ib_net64_t</a> guid;\r
+ void* __ptr64 context;\r
+\r
+ } in;\r
+\r
+ struct _ual_open_ca_ioctl_out\r
+ {\r
+ <a href="./ib_ci_h.html#robo1153">ci_umv_buf_t</a> umv_buf;\r
+ <a href="./ib_types_h.html#robo49">ib_api_status_t</a> status;\r
+ uint64_t h_ca;\r
+\r
+ } out;\r
+\r
+} <strong>ual_open_ca_ioctl_t</strong>;\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> in.umv_buf\r
+ Opaque to IBAL buffer descriptor to allow the user-mode HCA library to\r
+ exchange private information with the kernel-mode HCA driver.\r
+\r
+ in.guid\r
+ The GUID of the channel adapter to open.\r
+\r
+ in.context\r
+ A caller-specified context to associate with this opened instance\r
+ of the channel adapter. This context is returned to the user when\r
+ invoking asynchronous callbacks referencing this channel adapter.\r
+\r
+ out.umv_buf\r
+ Returns the status from the HCA driver to the user-mode HCA library,\r
+ along with any vendor specific output information.\r
+\r
+ out.status\r
+ Status of the operation\r
+\r
+ out.h_ca\r
+ On return from IOCTL, contains the CA Handle from AL.\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1026">[Structures]<a name="User2dmode20Access20Layer2fual5fpeek5fcq5fioctl5ft">\r
+User-mode Access Layer/ual_peek_cq_ioctl_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ual_peek_cq_ioctl_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> IOCTL structure containing the input and output parameters for\r
+ <a href="./ib_al_h.html#robo166">ib_peek_cq</a>\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef union _ual_peek_cq_ioctl\r
+{\r
+ struct _ual_peek_cq_ioctl_in\r
+ {\r
+ uint64_t h_cq;\r
+\r
+ } in;\r
+ struct _ual_peek_cq_ioctl_out\r
+ {\r
+ <a href="./ib_types_h.html#robo49">ib_api_status_t</a> status;\r
+ uint32_t n_cqes;\r
+\r
+ } out;\r
+\r
+} <strong>ual_peek_cq_ioctl_t</strong>;\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> in.h_cq\r
+ A handle to a CQ.\r
+\r
+ out.status\r
+ Status of the operation.\r
+\r
+ out.n_cqes\r
+ The number of completion queue entries currently on the CQ.\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1027">[Structures]<a name="User2dmode20Access20Layer2fual5fpoll5fcq5fioctl5ft">\r
+User-mode Access Layer/ual_poll_cq_ioctl_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ual_poll_cq_ioctl_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> IOCTL structure containing the input and output parameters for\r
+ <a href="./ib_al_h.html#robo198">ib_poll_cq</a>\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef union _ual_poll_cq_ioctl\r
+{\r
+ struct _ual_poll_cq_ioctl_in\r
+ {\r
+ uint64_t h_cq;\r
+ uint32_t num_wc;\r
+\r
+ } in;\r
+ struct _ual_poll_cq_ioctl_out\r
+ {\r
+ <a href="./ib_types_h.html#robo49">ib_api_status_t</a> status;\r
+ uint32_t num_wc;\r
+ <a href="./ib_types_h.html#robo260">ib_wc_t</a> wc[1];\r
+ /* Additional WC's follow. */\r
+ } out;\r
+\r
+} <strong>ual_poll_cq_ioctl_t</strong>;\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> in.h_cq\r
+ A handle to cq that is going to be polled for completions.\r
+\r
+ in.num_wc\r
+ Number of work completions in the output array.\r
+\r
+ out.status\r
+ Status of the operation.\r
+\r
+ out.num_wc\r
+ Number of work completions polled.\r
+\r
+ out.wc\r
+ First work completion in the array to use for polling.\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1028">[Structures]<a name="User2dmode20Access20Layer2fual5fpoll5fpnp5fioctl5ft">\r
+User-mode Access Layer/ual_poll_pnp_ioctl_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ual_poll_pnp_ioctl_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> IOCTL structure containing the parameters for retriveing data for\r
+ a PnP event.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef union _ual_poll_pnp_ioctl\r
+{\r
+ struct _ual_poll_pnp_ioctl_in\r
+ {\r
+ uint64_t evt_hdl;\r
+\r
+ } in;\r
+ struct _ual_poll_pnp_ioctl_out\r
+ {\r
+ <a href="./ib_al_h.html#robo196">ib_pnp_rec_t</a> pnp_rec;\r
+\r
+ } out;\r
+\r
+} <strong>ual_poll_pnp_ioctl_t</strong>;\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This is a synchronous IOCTL.\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> in.evt_hdl\r
+ Handle to a new PnP event.\r
+\r
+ out.pnp_rec\r
+ Buffer for the new PnP event.\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1029">[Structures]<a name="User2dmode20Access20Layer2fual5fpost5frecv5fioctl5ft">\r
+User-mode Access Layer/ual_post_recv_ioctl_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ual_post_recv_ioctl_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> IOCTL structure containing the input and output parameters for\r
+ <a href="./ib_al_h.html#robo202">ib_post_recv</a>\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef union _ual_post_recv_ioctl\r
+{\r
+ struct _ual_post_recv_ioctl_in\r
+ {\r
+ uint64_t h_qp;\r
+ uint32_t num_wr;\r
+ uint32_t num_ds;\r
+ <a href="./ib_types_h.html#robo225">ib_recv_wr_t</a> recv_wr[1];\r
+ /* Additional work requests follow, followed by data segments. */\r
+\r
+ } in;\r
+ struct _ual_post_recv_ioctl_out\r
+ {\r
+ <a href="./ib_types_h.html#robo49">ib_api_status_t</a> status;\r
+ uint32_t failed_cnt;\r
+\r
+ } out;\r
+\r
+} <strong>ual_post_recv_ioctl_t</strong>;\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> in.h_qp\r
+ A handle to QP where the work request is being posted.\r
+\r
+ in.num_wr\r
+ Number of work request items in the array of work requests.\r
+\r
+ in.num_ds\r
+ Number of data segments following the array of work requests.\r
+\r
+ in.recv_wr\r
+ First work request in the array of work requests being posted.\r
+\r
+ out.status\r
+ Status of the operation.\r
+\r
+ failed_cnt\r
+ Number of work request that failed.\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1030">[Structures]<a name="User2dmode20Access20Layer2fual5fpost5fsend5fioctl5ft">\r
+User-mode Access Layer/ual_post_send_ioctl_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ual_post_send_ioctl_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> IOCTL structure containing the input and output parameters for\r
+ <a href="./ib_al_h.html#robo203">ib_post_send</a>\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef union _ual_post_send_ioctl\r
+{\r
+ struct _ual_post_send_ioctl_in\r
+ {\r
+ uint64_t h_qp;\r
+ uint32_t num_wr;\r
+ uint32_t num_ds;\r
+ <a href="./ib_types_h.html#robo249">ib_send_wr_t</a> send_wr[1];\r
+ /* Additional work requests follow, followed by data segments. */\r
+\r
+ } in;\r
+ struct _ual_post_send_ioctl_out\r
+ {\r
+ <a href="./ib_types_h.html#robo49">ib_api_status_t</a> status;\r
+ uint32_t failed_cnt;\r
+\r
+ } out;\r
+\r
+} <strong>ual_post_send_ioctl_t</strong>;\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> in.h_qp\r
+ A handle to QP where the work request is being posted.\r
+\r
+ in.num_wr\r
+ Number of work request items in the array of work requests.\r
+\r
+ in.num_ds\r
+ Number of data segments following the array of work requests.\r
+\r
+ in.send_wr\r
+ First work request in the array of work requests being posted.\r
+\r
+ out.status\r
+ Status of the operation.\r
+\r
+ out.failed_cnt\r
+ Number of work request that failed.\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1031">[Structures]<a name="User2dmode20Access20Layer2fual5fquery5fav5fioctl5ft">\r
+User-mode Access Layer/ual_query_av_ioctl_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ual_query_av_ioctl_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> IOCTL structure containing the input and output parameters for\r
+ <a href="./ib_al_h.html#robo212">ib_query_av</a>\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef union _ual_query_av_ioctl\r
+{\r
+ struct _ual_query_av_ioctl_in\r
+ {\r
+ <a href="./ib_ci_h.html#robo1153">ci_umv_buf_t</a> umv_buf;\r
+ uint64_t h_av;\r
+\r
+ } in;\r
+ struct _ual_query_av_ioctl_out\r
+ {\r
+ <a href="./ib_ci_h.html#robo1153">ci_umv_buf_t</a> umv_buf;\r
+ <a href="./ib_types_h.html#robo49">ib_api_status_t</a> status;\r
+ <a href="./ib_types_h.html#robo57">ib_av_attr_t</a> attr;\r
+ void* __ptr64 pd_context;\r
+\r
+ } out;\r
+\r
+} <strong>ual_query_av_ioctl_t</strong>;\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> in.umv_buf\r
+ Opaque to IBAL buffer descriptor to allow the user-mode HCA library to\r
+ exchange private information with the kernel-mode HCA driver.\r
+\r
+ in.h_av\r
+ A handle to an existing address vector.\r
+\r
+ out.umv_buf\r
+ Returns the status from the HCA driver to the user-mode HCA library,\r
+ along with any vendor specific output information.\r
+\r
+ out.status\r
+ Status of the operation.\r
+\r
+ out.attr\r
+ Attributes of the address vector.\r
+\r
+ pd_context\r
+ Context associated with the PD when created.\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1032">[Structures]<a name="User2dmode20Access20Layer2fual5fquery5fca5fioctl5ft">\r
+User-mode Access Layer/ual_query_ca_ioctl_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ual_query_ca_ioctl_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> IOCTL structure containing the input and output parameters for\r
+ <a href="./ib_al_h.html#robo213">ib_query_ca</a>\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef union _ual_query_ca_ioctl\r
+{\r
+ struct _ual_query_ca_ioctl_in\r
+ {\r
+ <a href="./ib_ci_h.html#robo1153">ci_umv_buf_t</a> umv_buf;\r
+ uint64_t h_ca;\r
+ uint32_t byte_cnt;\r
+ <a href="./ib_types_h.html#robo60">ib_ca_attr_t</a>* __ptr64 p_ca_attr;\r
+\r
+ } in;\r
+ struct _ual_query_ca_ioctl_out\r
+ {\r
+ <a href="./ib_ci_h.html#robo1153">ci_umv_buf_t</a> umv_buf;\r
+ <a href="./ib_types_h.html#robo49">ib_api_status_t</a> status;\r
+ uint32_t byte_cnt;\r
+\r
+ } out;\r
+\r
+} <strong>ual_query_ca_ioctl_t</strong>;\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> in.umv_buf\r
+ Opaque to IBAL buffer descriptor to allow the user-mode HCA library to\r
+ exchange private information with the kernel-mode HCA driver.\r
+\r
+ in.h_ca\r
+ The handle to an open instance of CA returned via a\r
+ ual_open_ca_ioctl structure.\r
+\r
+ in.byte_cnt\r
+ Specifies the size of the data buffer referenced by the p_ca_attr\r
+ parameter.\r
+\r
+ p_ca_attr\r
+ A reference to a buffer where the channel adapter attributes,\r
+ including port attribute information will be copied. If this parameter\r
+ is NULL, then the required buffer size needed to return all of the CA\r
+ attribute information is returned through the out.byte_cnt parameter.\r
+ The <a href="./ib_types_h.html#robo60">ib_ca_attr_t</a> structure for the specified channel adapter is stored\r
+ at the top of this buffer.\r
+\r
+ out.umv_buf\r
+ Returns the status from the HCA driver to the user-mode HCA library,\r
+ along with any vendor specific output information.\r
+\r
+ out.status\r
+ Status of the operation\r
+\r
+ out.byte_cnt\r
+ Contains the number of bytes used or needed to copy all CA attributes.\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1033">[Structures]<a name="User2dmode20Access20Layer2fual5fquery5fcq5fioctl5ft">\r
+User-mode Access Layer/ual_query_cq_ioctl_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ual_query_cq_ioctl_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> IOCTL structure containing the input and output parameters for\r
+ <a href="./ib_al_h.html#robo215">ib_query_cq</a>\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef union _ual_query_cq_ioctl\r
+{\r
+ struct _ual_query_cq_ioctl_in\r
+ {\r
+ <a href="./ib_ci_h.html#robo1153">ci_umv_buf_t</a> umv_buf;\r
+ uint64_t h_cq;\r
+\r
+ } in;\r
+ struct _ual_query_cq_ioctl_out\r
+ {\r
+ <a href="./ib_ci_h.html#robo1153">ci_umv_buf_t</a> umv_buf;\r
+ <a href="./ib_types_h.html#robo49">ib_api_status_t</a> status;\r
+ uint32_t size;\r
+\r
+ } out;\r
+\r
+} <strong>ual_query_cq_ioctl_t</strong>;\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> in.umv_buf\r
+ Opaque to IBAL buffer descriptor to allow the user-mode HCA library to\r
+ exchange private information with the kernel-mode HCA driver.\r
+\r
+ in.h_cq\r
+ A handle to an existing CQ.\r
+\r
+ out.umv_buf\r
+ Returns the status from the HCA driver to the user-mode HCA library,\r
+ along with any vendor specific output information.\r
+\r
+ out.status\r
+ Status of the operation.\r
+\r
+ out.size\r
+ The size of the CQ.\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1034">[Structures]<a name="User2dmode20Access20Layer2fual5fquery5fmr5fioctl5ft">\r
+User-mode Access Layer/ual_query_mr_ioctl_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ual_query_mr_ioctl_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> IOCTL structure containing the input and output parameters for\r
+ <a href="./ib_al_h.html#robo216">ib_query_mr</a>\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef union _ual_query_mr_ioctl\r
+{\r
+ struct _ual_query_mr_ioctl_in\r
+ {\r
+ uint64_t h_mr;\r
+\r
+ } in;\r
+ struct _ual_query_mr_ioctl_out\r
+ {\r
+ <a href="./ib_types_h.html#robo49">ib_api_status_t</a> status;\r
+ <a href="./ib_types_h.html#robo159">ib_mr_attr_t</a> attr;\r
+\r
+ } out;\r
+\r
+} <strong>ual_query_mr_ioctl_t</strong>;\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> in.h_mr\r
+ A handle to a registered memory region.\r
+\r
+ out.status\r
+ Status of the operation.\r
+\r
+ out.attr\r
+ Attributes of the registered memory region.\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1035">[Structures]<a name="User2dmode20Access20Layer2fual5fquery5fmw5fioctl5ft">\r
+User-mode Access Layer/ual_query_mw_ioctl_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ual_query_mw_ioctl_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> IOCTL structure containing the input and output parameters for\r
+ <a href="./ib_al_h.html#robo217">ib_query_mw</a>\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef union _ual_query_mw_ioctl\r
+{\r
+ struct _ual_query_mw_ioctl_in\r
+ {\r
+ <a href="./ib_ci_h.html#robo1153">ci_umv_buf_t</a> umv_buf;\r
+ uint64_t h_mw;\r
+\r
+ } in;\r
+ struct _ual_query_mw_ioctl_out\r
+ {\r
+ <a href="./ib_ci_h.html#robo1153">ci_umv_buf_t</a> umv_buf;\r
+ <a href="./ib_types_h.html#robo49">ib_api_status_t</a> status;\r
+ void* __ptr64 pd_context;\r
+ net32_t rkey;\r
+\r
+ } out;\r
+\r
+} <strong>ual_query_mw_ioctl_t</strong>;\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> in.umv_buf\r
+ Opaque to IBAL buffer descriptor to allow the user-mode HCA library to\r
+ exchange private information with the kernel-mode HCA driver.\r
+\r
+ in.h_mw\r
+ A handle to an existing memory window.\r
+\r
+ out.umv_buf\r
+ Returns the status from the HCA driver to the user-mode HCA library,\r
+ along with any vendor specific output information.\r
+\r
+ out.status\r
+ Status of the operation.\r
+\r
+ pd_context\r
+ This user-mode context for the protection domain\r
+ associated with the memory window.\r
+\r
+ rkey\r
+ RKey associated with the memory window.\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1036">[Structures]<a name="User2dmode20Access20Layer2fual5fquery5fqp5fioctl5ft">\r
+User-mode Access Layer/ual_query_qp_ioctl_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ual_query_qp_ioctl_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> IOCTL structure containing the input and output parameters for\r
+ <a href="./ib_al_h.html#robo218">ib_query_qp</a>\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef union _ual_query_qp_ioctl\r
+{\r
+ struct _ual_query_qp_ioctl_in\r
+ {\r
+ <a href="./ib_ci_h.html#robo1153">ci_umv_buf_t</a> umv_buf;\r
+ uint64_t h_qp;\r
+\r
+ } in;\r
+ struct _ual_query_qp_ioctl_out\r
+ {\r
+ <a href="./ib_ci_h.html#robo1153">ci_umv_buf_t</a> umv_buf;\r
+ <a href="./ib_types_h.html#robo49">ib_api_status_t</a> status;\r
+ <a href="./ib_types_h.html#robo205">ib_qp_attr_t</a> attr;\r
+\r
+ } out;\r
+\r
+} <strong>ual_query_qp_ioctl_t</strong>;\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> in.umv_buf\r
+ Opaque to IBAL buffer descriptor to allow the user-mode HCA library to\r
+ exchange private information with the kernel-mode HCA driver.\r
+\r
+ h_qp\r
+ Handle to the QP whose attributes to query.\r
+\r
+ out.umv_buf\r
+ Returns the status from the HCA driver to the user-mode HCA library,\r
+ along with any vendor specific output information.\r
+\r
+ out.status\r
+ Status of the operation.\r
+\r
+ out.attr\r
+ Attributes of the QP.\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1037">[Structures]<a name="User2dmode20Access20Layer2fual5frearm5fcq5fioctl5ft">\r
+User-mode Access Layer/ual_rearm_cq_ioctl_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ual_rearm_cq_ioctl_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> IOCTL structure containing the input and output parameters for\r
+ <a href="./ib_al_h.html#robo222">ib_rearm_cq</a>\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef union _ual_rearm_cq_ioctl\r
+{\r
+ struct _ual_rearm_cq_ioctl_in\r
+ {\r
+ uint64_t h_cq;\r
+ boolean_t solicited;\r
+\r
+ } in;\r
+ struct _ual_rearm_cq_ioctl_out\r
+ {\r
+ <a href="./ib_types_h.html#robo49">ib_api_status_t</a> status;\r
+\r
+ } out;\r
+\r
+} <strong>ual_rearm_cq_ioctl_t</strong>;\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> in.h_cq\r
+ A handle to a CQ.\r
+\r
+ in.solicited\r
+ Flag for rearm CQ.\r
+\r
+ out.status\r
+ Status of the operation.\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1038">[Structures]<a name="User2dmode20Access20Layer2fual5frearm5fn5fcq5fioctl5ft">\r
+User-mode Access Layer/ual_rearm_n_cq_ioctl_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ual_rearm_n_cq_ioctl_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> IOCTL structure containing the input and output parameters for\r
+ <a href="./ib_al_h.html#robo223">ib_rearm_n_cq</a>\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef union _ual_rearm_n_cq_ioctl\r
+{\r
+ struct _ual_rearm_n_cq_ioctl_in\r
+ {\r
+ uint64_t h_cq;\r
+ uint32_t n_cqes;\r
+\r
+ } in;\r
+ struct _ual_rearm_n_cq_ioctl_out\r
+ {\r
+ <a href="./ib_types_h.html#robo49">ib_api_status_t</a> status;\r
+\r
+ } out;\r
+\r
+} <strong>ual_rearm_n_cq_ioctl_t</strong>;\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> in.h_cq\r
+ A handle to a CQ.\r
+\r
+ in.n_cqes\r
+ Rearm the CQ to signal when the next N completions are added.\r
+\r
+ in.status\r
+ Status of the operation.\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1039">[Structures]<a name="User2dmode20Access20Layer2fual5frearm5fpnp5fioctl5fin5ft">\r
+User-mode Access Layer/ual_rearm_pnp_ioctl_in_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ual_rearm_pnp_ioctl_in_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> IOCTL structure containing the input parameters for requesting\r
+ notification of the next PnP event.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef struct _ual_rearm_pnp_ioctl_in\r
+{\r
+ uint64_t pnp_hdl;\r
+ uint64_t last_evt_hdl;\r
+ void* __ptr64 last_evt_context;\r
+ <a href="./ib_types_h.html#robo49">ib_api_status_t</a> last_evt_status;\r
+\r
+} <strong>ual_rearm_pnp_ioctl_in_t</strong>;\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This is an asynchronous IOCTL.\r
+\r
+ The output parameters are a <a href="#robo1040">ual_rearm_pnp_ioctl_out_t</a>.\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> pnp_hdl\r
+ Handle to the PnP registration to rearm.\r
+\r
+ last_evt_hdl\r
+ Handle to the last PnP event processed.\r
+\r
+ last_evt_context\r
+ Context value to set for the last reported PnP event.\r
+\r
+ last_evt_status\r
+ Status value to return for the last reported PnP event.\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1040">[Structures]<a name="User2dmode20Access20Layer2fual5frearm5fpnp5fioctl5fout5ft">\r
+User-mode Access Layer/ual_rearm_pnp_ioctl_out_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ual_rearm_pnp_ioctl_out_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> IOCTL structure containing the output parameters for a PnP event.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef struct _ual_rearm_pnp_ioctl_out\r
+{\r
+ uint64_t evt_hdl;\r
+ uint32_t evt_size;\r
+\r
+} <strong>ual_rearm_pnp_ioctl_out_t</strong>;\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This is an asynchronous IOCTL.\r
+\r
+ The output parameters are identical to that of ual_reg_pnp_ioctl_t.\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> evt_hdl\r
+ Handle to a new PnP event.\r
+\r
+ evt_size\r
+ Buffer size needed to poll the new PnP event.\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1041">[Structures]<a name="User2dmode20Access20Layer2fual5freg5fmad5fpool5fioctl5ft">\r
+User-mode Access Layer/ual_reg_mad_pool_ioctl_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ual_reg_mad_pool_ioctl_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> IOCTL structure containing the input and output parameters for\r
+ registering a mad pool to be used with special qp. This ioctl\r
+ will result in user-mode pool registered. Additionally,\r
+ the kernel proxy will allocate a kernel mad pool and register it\r
+ so that later mad_sends will have the appropriate pool in kernel.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef union _ual_reg_mad_pool_ioctl\r
+{\r
+ struct _ual_reg_mad_pool_ioctl_in\r
+ {\r
+ uint64_t h_pd;\r
+\r
+ } in;\r
+ struct _ual_reg_mad_pool_ioctl_out\r
+ {\r
+ <a href="./ib_types_h.html#robo49">ib_api_status_t</a> status;\r
+ uint64_t pool_key;\r
+\r
+ } out;\r
+\r
+} <strong>ual_reg_mad_pool_ioctl_t</strong>;\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> in.h_pd\r
+ PD associated with the pool\r
+\r
+ out.status\r
+ Status of the operation.\r
+\r
+ out.pool_key\r
+ <a href="../complib/cl_pool_h.html#robo24">Pool</a> key to the mad pool in kernel space\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1042">[Structures]<a name="User2dmode20Access20Layer2fual5freg5fmad5fsvc5fioctl5ft">\r
+User-mode Access Layer/ual_reg_mad_svc_ioctl_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ual_reg_mad_svc_ioctl_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> IOCTL structure containing the input and output parameters for\r
+ <a href="./ib_al_h.html#robo228">ib_reg_mad_svc</a>\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef union _ual_reg_mad_svc_ioctl\r
+{\r
+ struct _ual_reg_mad_svc_ioctl_in\r
+ {\r
+ uint64_t h_qp;\r
+ <a href="./ib_al_h.html#robo151">ib_mad_svc_t</a> mad_svc;\r
+\r
+ } in;\r
+ struct _ual_reg_mad_svc_ioctl_out\r
+ {\r
+ <a href="./ib_types_h.html#robo49">ib_api_status_t</a> status;\r
+ uint64_t h_mad_svc;\r
+\r
+ } out;\r
+\r
+} <strong>ual_reg_mad_svc_ioctl_t</strong>;\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> in.h_qp\r
+ Handle to the special QP or MAD QP.\r
+\r
+ in.mad_svc\r
+ Mad service definition.\r
+\r
+ out.status\r
+ Status of the operation.\r
+\r
+ out.h_mad_svc\r
+ Handle to the mad service.\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1043">[Structures]<a name="User2dmode20Access20Layer2fual5freg5fmem5fioctl5ft">\r
+User-mode Access Layer/ual_reg_mem_ioctl_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ual_reg_mem_ioctl_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> IOCTL structure containing the input and output parameters for\r
+ <a href="./ib_al_h.html#robo229">ib_reg_mem</a>\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef union _ual_reg_mem_ioctl\r
+{\r
+ struct _ual_reg_mem_ioctl_in\r
+ {\r
+ uint64_t h_pd;\r
+ <a href="./ib_types_h.html#robo160">ib_mr_create_t</a> mem_create;\r
+\r
+ } in;\r
+ struct _ual_reg_mem_ioctl_out\r
+ {\r
+ <a href="./ib_types_h.html#robo49">ib_api_status_t</a> status;\r
+ net32_t lkey;\r
+ net32_t rkey;\r
+ uint64_t h_mr;\r
+\r
+ } out;\r
+\r
+} <strong>ual_reg_mem_ioctl_t</strong>;\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> in.h_pd\r
+ Handle to the protection domain on which to register the memory.\r
+\r
+ in.mem_create\r
+ Information for registering the memory region.\r
+\r
+ out.status\r
+ Status of the operation.\r
+\r
+ out.lkey\r
+ LKey value returned by verb.\r
+\r
+ out.rkey\r
+ RKey value returned by verb.\r
+\r
+ h_mr\r
+ Handle to the registered memory region.\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1044">[Structures]<a name="User2dmode20Access20Layer2fual5freg5fpnp5fioctl5fin5ft">\r
+User-mode Access Layer/ual_reg_pnp_ioctl_in_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ual_reg_pnp_ioctl_in_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> IOCTL structure containing the input parameters for registering\r
+ for PnP events.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef struct _ual_reg_pnp_ioctl_in\r
+{\r
+ <a href="./ib_al_h.html#robo190">ib_pnp_class_t</a> pnp_class;\r
+ void* __ptr64 sync_event;\r
+ <a href="./ib_types_h.html#robo49">ib_api_status_t</a>* __ptr64 p_status;\r
+ uint64_t* __ptr64 p_hdl;\r
+\r
+} <strong>ual_reg_pnp_ioctl_in_t</strong>;\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This is an asynchronous IOCTL.\r
+\r
+ The output parameters are a <a href="#robo1040">ual_rearm_pnp_ioctl_out_t</a>.\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> pnp_class\r
+ Class of PnP events for which to register.\r
+\r
+ p_status\r
+ Pointer to user-mode status variable to set in failure case.\r
+\r
+ p_hdl\r
+ Pointer to user-mode handle variable to set in success case.\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1045">[Structures]<a name="User2dmode20Access20Layer2fual5freg5fshared5fioctl5ft">\r
+User-mode Access Layer/ual_reg_shared_ioctl_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ual_reg_shared_ioctl_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> IOCTL structure containing the input and output parameters for\r
+ <a href="./ib_al_h.html#robo232">ib_reg_shared</a>\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef union _ual_reg_shared_ioctl\r
+{\r
+ struct _ual_reg_shared_ioctl_in\r
+ {\r
+ uint64_t h_mr;\r
+ uint64_t h_pd;\r
+ <a href="./ib_types_h.html#robo45">ib_access_t</a> access_ctrl;\r
+ uint64_t vaddr;\r
+\r
+ } in;\r
+ struct _ual_reg_shared_ioctl_out\r
+ {\r
+ <a href="./ib_types_h.html#robo49">ib_api_status_t</a> status;\r
+ uint64_t vaddr;\r
+ net32_t lkey;\r
+ net32_t rkey;\r
+ uint64_t h_new_mr;\r
+\r
+ } out;\r
+\r
+} <strong>ual_reg_shared_ioctl_t</strong>;\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> in.h_mr\r
+ A handle to the existing registered memory region.\r
+\r
+ in.h_pd\r
+ A handle to the PD on which memory is being registered.\r
+\r
+ in.access_ctrl\r
+ Access control for the new memory region.\r
+\r
+ in.vaddr\r
+ Requested virtual address.\r
+\r
+ out.status\r
+ Status of the operation.\r
+\r
+ out.vaddr\r
+ Actual virtual address of the registered region.\r
+\r
+ out.l_key\r
+ LKey of the memory region.\r
+\r
+ out.rkey\r
+ RKey of the memory region.\r
+\r
+ h_new_mr\r
+ Handle to the registered memory region.\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1046">[Structures]<a name="User2dmode20Access20Layer2fual5freg5fshmid5fioctl5ft">\r
+User-mode Access Layer/ual_reg_shmid_ioctl_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ual_reg_shmid_ioctl_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> IOCTL structure containing the input and output parameters for\r
+ ib_create_shmid\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef union _ual_reg_shmid_ioctl\r
+{\r
+ struct _ual_reg_shmid_ioctl_in\r
+ {\r
+ uint64_t h_pd;\r
+ <a href="./ib_al_h.html#robo250">ib_shmid_t</a> shmid;\r
+ <a href="./ib_types_h.html#robo160">ib_mr_create_t</a> mr_create;\r
+\r
+ } in;\r
+ struct _ual_reg_shmid_ioctl_out\r
+ {\r
+ <a href="./ib_types_h.html#robo49">ib_api_status_t</a> status;\r
+ uint64_t vaddr;\r
+ net32_t lkey;\r
+ net32_t rkey;\r
+ uint64_t h_mr;\r
+\r
+ } out;\r
+\r
+} <strong>ual_reg_shmid_ioctl_t</strong>;\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> in.h_pd\r
+ A handle to an existing protection domain that the memory\r
+ should be registered with.\r
+\r
+ in.shmid\r
+ An identifier to the shared memory region.\r
+\r
+ in.mr_create\r
+ Information describing the attributes of the memory region to\r
+ register.\r
+\r
+ out.status\r
+ Status of the operation.\r
+\r
+ out.vaddr\r
+ Assigned I/O virtual address for the memory region.\r
+\r
+ out.lkey\r
+ The local access key associated with this registered memory\r
+ region.\r
+\r
+ out.rkey\r
+ A key that may be used by a remote end-point when performing RDMA\r
+ or atomic operations to this registered memory region.\r
+\r
+ out.h_mr\r
+ Upon successful completion of this call, this references a handle\r
+ to the registered memory region. This handle is used when performing\r
+ data transfers and to deregister the memory.\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1047">[Structures]<a name="User2dmode20Access20Layer2fual5frereg5fmem5fioctl5ft">\r
+User-mode Access Layer/ual_rereg_mem_ioctl_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ual_rereg_mem_ioctl_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> IOCTL structure containing the input and output parameters for\r
+ ib_modify_mr\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef union _ual_rereg_mem_ioctl\r
+{\r
+ struct _ual_rereg_mem_ioctl_in\r
+ {\r
+ uint64_t h_mr;\r
+ <a href="./ib_types_h.html#robo161">ib_mr_mod_t</a> mem_mod_mask;\r
+ <a href="./ib_types_h.html#robo160">ib_mr_create_t</a> mem_create;\r
+ uint64_t h_pd;\r
+\r
+ } in;\r
+ struct _ual_rereg_mem_ioctl_out\r
+ {\r
+ <a href="./ib_types_h.html#robo49">ib_api_status_t</a> status;\r
+ net32_t lkey;\r
+ net32_t rkey;\r
+\r
+ } out;\r
+\r
+} <strong>ual_rereg_mem_ioctl_t</strong>;\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> in.h_mr\r
+ A handle to a registered memory region that is being modified.\r
+\r
+ in.mem_mod_mask\r
+ The attributes to use when modifying the memory region.\r
+\r
+ in.mem_create\r
+ Information to use for modifying the memory region. Required only\r
+ for changes other than the PD.\r
+\r
+ in.h_pd\r
+ PD Handle for changing protection domains.\r
+\r
+ out.status\r
+ Status of the operation.\r
+\r
+ out.l_key\r
+ LKey of the memory region.\r
+\r
+ out.rkey\r
+ RKey of the memory region.\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1048">[Structures]<a name="User2dmode20Access20Layer2fual5fsend5fmad5fioctl5ft">\r
+User-mode Access Layer/ual_send_mad_ioctl_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ual_send_mad_ioctl_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> IOCTL structure containing the input and output parameters for\r
+ <a href="./ib_al_h.html#robo247">ib_send_mad</a>\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef union _ual_send_mad_ioctl\r
+{\r
+ struct _ual_send_mad_ioctl_in\r
+ {\r
+ uint64_t h_mad_svc;\r
+ uint64_t pool_key;\r
+ uint64_t h_av;\r
+ <a href="./ib_al_h.html#robo150">ib_mad_element_t</a>* __ptr64 p_mad_element;\r
+ uint32_t size;\r
+ void* __ptr64* __ptr64 ph_proxy;\r
+\r
+ } in;\r
+ struct _ual_send_mad_ioctl_out\r
+ {\r
+ <a href="./ib_types_h.html#robo49">ib_api_status_t</a> status;\r
+\r
+ } out;\r
+\r
+} <strong>ual_send_mad_ioctl_t</strong>;\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> in.h_mad_svc\r
+ Handle to the mad service.\r
+\r
+ in.pool_key\r
+ <a href="../complib/cl_pool_h.html#robo24">Pool</a> key associated with the pool in kernel space.\r
+\r
+ in.h_av\r
+ handle to address vector of MAD.\r
+\r
+ in.p_mad_element\r
+ Pointer to the user-mode MAD element. The proxy marshals this data.\r
+\r
+ in.size\r
+ size of MAD buffer to send.\r
+\r
+ in.ph_proxy\r
+ Location to which to write the context used to cancel the MAD.\r
+\r
+ out.status\r
+ Status of the operation.\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1049">[Structures]<a name="User2dmode20Access20Layer2fual5fsend5fsa5freq5ft">\r
+User-mode Access Layer/ual_send_sa_req_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ual_send_sa_req_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> IOCTL structure containing the input and output parameters for\r
+ ib_create_shmid\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef union _ual_send_sa_req_ioctl\r
+{\r
+ struct _ual_send_sa_req_ioctl_in\r
+ {\r
+ net64_t port_guid;\r
+ uint32_t timeout_ms;\r
+ uint32_t retry_cnt;\r
+ <a href="./ib_al_h.html#robo258">ib_user_query_t</a> sa_req;\r
+ uint8_t attr[IB_SA_DATA_SIZE];\r
+ uint64_t* __ptr64 ph_sa_req;\r
+ <a href="./ib_types_h.html#robo49">ib_api_status_t</a>* __ptr64 p_status;\r
+\r
+ } in;\r
+ struct _ual_send_sa_req_ioctl_out\r
+ {\r
+ <a href="./ib_types_h.html#robo49">ib_api_status_t</a> status;\r
+ uint64_t h_resp;\r
+ uint32_t resp_size;\r
+\r
+ } out;\r
+\r
+} ual_send_sa_req_ioctl_t;\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> in.sa_mad_data\r
+ The SA request to send.\r
+\r
+ in.attr\r
+ The SA attribute data to send.\r
+\r
+ in.ph_sa_req\r
+ Pointer to UAL's query handle. The proxy fills this in\r
+ before returning from the IOCTL handler to allow cancelation.\r
+\r
+ in.p_status\r
+ Pointer to status of the query.\r
+\r
+ out.status\r
+ Status of the query if it was initiated successfully.\r
+\r
+ out.h_resp\r
+ Handle to a response MAD.\r
+\r
+ out.resp_size\r
+ Size, in bytes, of the response MAD's buffer.\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1050">[Structures]<a name="User2dmode20Access20Layer2fual5fspl5fqp5fioctl5ft">\r
+User-mode Access Layer/ual_spl_qp_ioctl_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ual_spl_qp_ioctl_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> IOCTL structure containing the input and output parameters to get\r
+ the alias qp from KAL.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef union _ual_spl_qp_ioctl\r
+{\r
+ struct _ual_spl_qp_ioctl_in\r
+ {\r
+ <a href="./ib_ci_h.html#robo1153">ci_umv_buf_t</a> umv_buf;\r
+ uint64_t h_pd;\r
+ <a href="./ib_types_h.html#robo895">ib_net64_t</a> port_guid;\r
+ <a href="./ib_types_h.html#robo206">ib_qp_create_t</a> qp_create;\r
+ void* __ptr64 context;\r
+\r
+ } in;\r
+ struct _ual_spl_qp_ioctl_out\r
+ {\r
+ <a href="./ib_ci_h.html#robo1153">ci_umv_buf_t</a> umv_buf;\r
+ <a href="./ib_types_h.html#robo49">ib_api_status_t</a> status;\r
+ uint64_t h_qp;\r
+\r
+ } out;\r
+\r
+} <strong>ual_spl_qp_ioctl_t</strong>;\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> in.h_pd\r
+ Protection domain for the special qp.\r
+\r
+ in.port_guid\r
+ Port GUID on which to allocate the special QP.\r
+\r
+ in.qp_create\r
+ Special QP creation parameters.\r
+\r
+ in.qp_context\r
+ Context to associate with the QP, to be used in any notifications.\r
+\r
+ out.status\r
+ Status of the operation.\r
+\r
+ out.h_qp\r
+ Handle to the special QP.\r
+</pre>\r
+</span>\r
+</body>\r
+</html>\r
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">\r
+<html>\r
+<head>\r
+<link rel="stylesheet" href="../robodoc.css" type="text/css">\r
+<title>./inc_doc/iba/ib_ci_h.html</title>\r
+<!-- Source: ./inc/iba/ib_ci.h -->\r
+<!-- Generated with ROBODoc Version 4.99.22 (Mar 6 2006) -->\r
+</head>\r
+<body bgcolor="#FFFFFF">\r
+<a name="robo_top_of_doc">Generated from ./inc/iba/ib_ci.h</a> with <a href="http://sourceforge.net/projects/robodoc/">ROBODoc</a> v4.99.22 on Sun Apr 16 2006 17:39:23\r
+<br />\r
+<hr />\r
+\r
+<h2><a name="robo39">[Modules]<a name="IB5fAPI2fVerbs">\r
+IB_API/Verbs</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_modules.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>Verbs</strong> -- <strong>Verbs</strong> implements the hardware and software glue to the OS layer.\r
+</pre>\r
+</span><p><strong>COPYRIGHT</strong></p>\r
+<span class="COPYRIGHT"><pre> Copyright© 2001 Intel Corporation - All Rights Reserved.\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The <strong>Verbs</strong> API definition defines the interface mechanism between an IHV\r
+ supplied driver component. It implements verbs functionality as defined\r
+ Volume 1, of the InfiniBand(tm) specifications.\r
+</pre>\r
+</span><p><strong>AUTHOR</strong></p>\r
+<span class="AUTHOR"><pre> Intel Corporation\r
+</pre>\r
+</span><p><strong>CREATION DATE</strong></p>\r
+<span class="CREATION_DATE"><pre> XX.XX.XX\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> Evolving Spec!!\r
+ Invalid Handle checks are a mere signature checks in kernel mode. Hence\r
+ passing invalid pointer would lead to panics in the kernel. For user mode\r
+ These are verified for most verbs that need to take a kernel transition.\r
+ <strong>Verbs</strong> those are entirely done in user mode that would affect speed path\r
+ do not perform consistency checks. So invalid pointers would lead to\r
+ application crash with core dumps.\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1109">[Functions]<a name="Verbs2fci5fallocate5fpd">\r
+Verbs/ci_allocate_pd</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="#robo39">parent</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ci_allocate_pd</strong> -- Allocate a protection domain for this adapter.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef <a href="./ib_types_h.html#robo49">ib_api_status_t</a>\r
+(*<strong>ci_allocate_pd</strong>) (\r
+ IN const ib_ca_handle_t h_ca,\r
+ IN const <a href="./ib_types_h.html#robo165">ib_pd_type_t</a> type,\r
+ OUT ib_pd_handle_t *ph_pd,\r
+ IN OUT <a href="#robo1153">ci_umv_buf_t</a> *p_umv_buf OPTIONAL );\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> This routine allocates a protection domain handle, which is later\r
+ used to create QP's, Register Memory Regions, Bind Memory Windows\r
+ and address vectors. Protection domain has no InfiniBand architectural\r
+ attributes but the OS implements policy on its usage and allocation.\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_ca\r
+ [in] Handle returned by <a href="#robo1136">ci_open_ca</a>()\r
+\r
+ type\r
+ [in] Type of the protection domain. CA vendors may use this\r
+ information to optimize how the PD is allocated.\r
+\r
+ ph_pd\r
+ [out] The handle to the newly created protection domain\r
+\r
+ p_umv_buf\r
+ [in/out] Vendor specific parameter to support user mode IO.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> IB_SUCCESS\r
+ PD is successfully allocated and the ph_pd is valid.\r
+\r
+ IB_INSUFFICIENT_RESOURCES\r
+ No more PD's available for this adapter.\r
+\r
+ IB_INVALID_CA_HANDLE\r
+ HCA handle is not valid\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo1120">ci_deallocate_pd</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1110">[Functions]<a name="Verbs2fci5fasync5fevent5fcb5ft">\r
+Verbs/ci_async_event_cb_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="#robo39">parent</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ci_async_event_cb_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Asynchronous event notification routine.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef void\r
+(*<strong>ci_async_event_cb_t</strong>)(\r
+ IN const <a href="./ib_types_h.html#robo1157">ib_event_rec_t</a>* const p_event_record );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_event_record\r
+ [in] Information describing the type of event that has occurred.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This routine is called when an asynchronous event is generated by a\r
+ channel adapter. The event notification record passed has relevant\r
+ information on the type of the event, the source that caused the event,\r
+ and the context associated.\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1111">[Functions]<a name="Verbs2fci5fattach5fmcast">\r
+Verbs/ci_attach_mcast</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="#robo39">parent</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ci_attach_mcast</strong> -- Attach a queue pair to a multicast group\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef <a href="./ib_types_h.html#robo49">ib_api_status_t</a>\r
+(*<strong>ci_attach_mcast</strong>) (\r
+ IN const ib_qp_handle_t h_qp,\r
+ IN const <a href="./ib_types_h.html#robo856">ib_gid_t</a> *p_mcast_gid,\r
+ IN const <a href="./ib_types_h.html#robo893">ib_net16_t</a> mcast_lid,\r
+ OUT ib_mcast_handle_t *ph_mcast,\r
+ IN OUT <a href="#robo1153">ci_umv_buf_t</a> *p_umv_buf OPTIONAL );\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> This routine attaches the given qp_handle to a multicast gid as specified\r
+ by mcast_gid parameter.\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_qp\r
+ [in] Queue pair handle which needs to be added to the multicast group\r
+ on the adapter.\r
+ mcast_lid\r
+ [in] The multicast group LID value.\r
+ p_mcast_gid\r
+ [in] IPv6 address associated with this multicast group.\r
+ ph_mcast\r
+ [out] Multicast handle holding the association of this queue pair\r
+ to the multicast group.\r
+ p_umv_buf\r
+ [in out] Vendor specific parameter to support user mode IO.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> IB_SUCCESS\r
+ The queue pair handle was successfully added to the multicast\r
+ group.\r
+ IB_INVALID_QP_HANDLE\r
+ qp_handle supplied is invalid.\r
+ IB_INVALID_SERVICE_TYPE\r
+ Queue pair handle supplied is not of unreliable datagram type.\r
+ IB_INVALID_GID\r
+ The supplied addr is not a valid multicast ipv6 address.\r
+ IB_INVALID_LID\r
+ The supplied lid is not a valid multicast lid.\r
+ IB_UNSUPPORTED\r
+ Multicast is not supported by this HCA.\r
+ IB_INSUFFICIENT_RESOURCES\r
+ Insufficient resources to complete request.\r
+ IB_INVALID_PARAMETER\r
+ One of the parameters was NULL.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo1118">ci_create_qp</a>, <a href="#robo1126">ci_detach_mcast</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1112">[Functions]<a name="Verbs2fci5fbind5fmw">\r
+Verbs/ci_bind_mw</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="#robo39">parent</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ci_bind_mw</strong> -- Bind a memory window to a memory region.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef <a href="./ib_types_h.html#robo49">ib_api_status_t</a>\r
+(*<strong>ci_bind_mw</strong>) (\r
+ IN const ib_mw_handle_t h_mw,\r
+ IN const ib_qp_handle_t h_qp,\r
+ IN <a href="./ib_types_h.html#robo59">ib_bind_wr_t</a>* const p_mw_bind,\r
+ OUT net32_t* const p_rkey );\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> This routine posts a request to bind a memory window to a registered\r
+ memory region. If the queue pair was created with selectable signaling,\r
+ once the operation is completed successfully then a completion queue entry\r
+ is generated indicating the bind operation has completed. The IB_POST_FENCE\r
+ option could be specified to cause the requestor to wait until outstanding\r
+ RDMA operations can be completed.\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_mw\r
+ [in] Handle to memory window that needs to be bound to a memory region.\r
+ h_qp\r
+ [in] Queue Pair to which this bind request is to be posted.\r
+ p_mw_bind\r
+ [in] Input parameters for this bind request, consisting of virtual\r
+ addr range of bind request etc.\r
+ p_rkey\r
+ [out] On successful completion, the new R_KEY is returned.\r
+ VPD is required to give this in the expected ordering on the wire. When\r
+ rkey's are exchanged between remote nodes, no swapping of this data\r
+ will be performed.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> IB_SUCCESS\r
+ The memory bind operation was posted successfully.\r
+ IB_INSUFFICIENT_RESOURCES\r
+ Insufficient resources to complete the request.\r
+ No more WQE's to post this request\r
+ No more free WQE's to post this request\r
+ IB_INVALID_MW_HANDLE\r
+ memw_handle supplied is an invalid memory window handle.\r
+ IB_INVALID_PERMISSION\r
+ Invalid access rights specified in request\r
+ IB_INVALID_SERVICE_TYPE\r
+ Invalid service type for this qp_handle.\r
+ IB_INVALID_PARAMETER\r
+ One of the pointers was not valid.\r
+ IB_INVALID_RKEY\r
+ R_KEY specified is invalid for the memory region being bound.\r
+ IB_INVALID_QP_HANDLE\r
+ h_qp supplied was an invalid QP handle.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> - A previously bound memory window can be bound to the same or different\r
+ memory region.\r
+\r
+ - A bind operation with length of 0, invalidates any previous binding\r
+ and returns an R_KEY in the unbound state.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo1117">ci_create_mw</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1113">[Functions]<a name="Verbs2fci5fclose5fca">\r
+Verbs/ci_close_ca</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="#robo39">parent</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ci_close_ca</strong> -- Close access to adapter via this h_ca\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef <a href="./ib_types_h.html#robo49">ib_api_status_t</a>\r
+(*<strong>ci_close_ca</strong>) (\r
+ IN ib_ca_handle_t h_ca );\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> This routine is called when the client no longer wishes to use HCA\r
+ resources obtained via this h_ca. All resources allocated as part\r
+ this handle during the <a href="#robo1136">ci_open_ca</a> are destroyed.\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_ca\r
+ [in] CA handle returned via the <a href="#robo1136">ci_open_ca</a>() call.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> IB_SUCCESS\r
+ The intend to destroy is registered. No further calls for\r
+ completion or async event will be sent to this instance. When it is\r
+ appropriate to destroy this instance, the event h_kevent is signaled.\r
+ IB_RESOURCE_BUSY\r
+ Some resource allocated via this handle is not freed.\r
+ IB_INVALID_CA_HANDLE\r
+ h_ca is invalid\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This call cannot be called from any of the notification functions invoked\r
+ by the <a href="#robo39">Verbs</a> driver. For e.g. the completion handler or the async error\r
+ callback provided during the <a href="#robo1136">ci_open_ca</a>() call. The call will block until\r
+ all references to this adapter object is closed which includes all the\r
+ pending callbacks returning back to the verbs provider driver.\r
+\r
+ Resources allocated during the <a href="#robo1136">ci_open_ca</a>() is deallocated. Other resource\r
+ cleanup are responsibility of the consumer .\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo1136">ci_open_ca</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1114">[Functions]<a name="Verbs2fci5fcompletion5fcb5ft">\r
+Verbs/ci_completion_cb_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="#robo39">parent</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ci_completion_cb_t</strong> -- Completion Notification callback.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef void\r
+(*<strong>ci_completion_cb_t</strong>)(\r
+ IN void *cq_context );\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> This function prototype indicates the parameter passed to <a href="#robo1136">ci_open_ca</a>()\r
+ to receive completion callbacks.\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> cq_context\r
+ [in] Completion queue context passed during the <a href="#robo1116">ci_create_cq</a>\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> None\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> The consumer only gets the cq_context and ca_context. It is the client\r
+ responsibility to store the cq_handle in the context after the creation\r
+ time. So it can call <a href="#robo1138">ci_poll_cq</a>() after the arrival of the notification.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo1136">ci_open_ca</a>, <a href="#robo1116">ci_create_cq</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1115">[Functions]<a name="Verbs2fci5fcreate5fav">\r
+Verbs/ci_create_av</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="#robo39">parent</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ci_create_av</strong> -- Create an address vector for use in UD.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef <a href="./ib_types_h.html#robo49">ib_api_status_t</a>\r
+(*<strong>ci_create_av</strong>) (\r
+ IN const ib_pd_handle_t h_pd,\r
+ IN const <a href="./ib_types_h.html#robo57">ib_av_attr_t</a> *p_av_attr,\r
+ OUT ib_av_handle_t *ph_av,\r
+ IN OUT <a href="#robo1153">ci_umv_buf_t</a> *p_umv_buf OPTIONAL );\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> This routine creates an address vector for use in unreliable datagram\r
+ queue pairs. The information necessary to create the address vector\r
+ handle is supplied in the <a href="./ib_types_h.html#robo57">ib_av_attr_t</a> parameter.\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_pd\r
+ [in] Protection domain to which this av is associated.\r
+ p_av_attr\r
+ [in] Parameters to create the address vector handle\r
+ ph_av\r
+ [out] Handle to use for datagram sends.\r
+ p_umv_buf\r
+ [in out] Vendor specific parameter to support user mode IO.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> IB_SUCCESS\r
+ The create operation was successful\r
+ IB_INSUFFICIENT_RESOURCES\r
+ No more address handles are available\r
+ IB_INVALID_PD_HANDLE\r
+ The specified protection domain handle is invalid\r
+ IB_INVALID_PORT\r
+ Invalid port number supplied.\r
+ IB_INVALID_PARAMETER\r
+ One of the p_av_attr or p_av_attr was NULL.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> The values in the p_av_attr is not validated for correctness. The values\r
+ in the attribute such as port number, protection domain etc are also\r
+ validated during processing by the channel adapter. If the attribute\r
+ validation fails a processing error IB_WCS_LOCAL_OP_ERR.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo1109">ci_allocate_pd</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1116">[Functions]<a name="Verbs2fci5fcreate5fcq">\r
+Verbs/ci_create_cq</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="#robo39">parent</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ci_create_cq</strong> -- Create a completion queue (CQ) on the specified HCA.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef <a href="./ib_types_h.html#robo49">ib_api_status_t</a>\r
+(*<strong>ci_create_cq</strong>) (\r
+ IN const ib_ca_handle_t h_ca,\r
+ IN const void *cq_context,\r
+ IN OUT uint32_t* const p_size,\r
+ OUT ib_cq_handle_t *ph_cq,\r
+ IN OUT <a href="#robo1153">ci_umv_buf_t</a> *p_umv_buf OPTIONAL );\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The consumer must specify the minimum number of entries in the CQ. The\r
+ exact number of entries the Channel Interface created is returned to the\r
+ client. If the requested number of entries is larger than what this\r
+ HCA can support, an error is returned.\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_ca\r
+ [in] A handle to the open HCA\r
+ cq_context\r
+ [in] The context that is passed during the completion callbacks.\r
+ p_size\r
+ [in out] Points to a variable containing the number of CQ entries\r
+ requested by the consumer. On completion points to the size of the\r
+ CQ that was created by the provider.\r
+ ph_cq\r
+ [out] Handle to the newly created CQ on successful creation.\r
+ p_umv_buf\r
+ [in out] Vendor specific parameter to support user mode IO.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> IB_SUCCESS\r
+ The operation was successful.\r
+ IB_INVALID_CA_HANDLE\r
+ The h_ca passed is invalid.\r
+ IB_INSUFFICIENT_RESOURCES\r
+ Insufficient resources to complete request.\r
+ IB_INVALID_CQ_SIZE\r
+ Requested CQ Size is not supported.\r
+ IB_INVALID_PARAMETER\r
+ one of the parameters was NULL.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> The consumer would need a way to retrieve the cq_handle associated with\r
+ context being returned, so it can perform <a href="#robo1138">ci_poll_cq</a>() to retrieve\r
+ completion queue entries. The handle as such is not being passed, since\r
+ there is no information in the handle that is visible to the consumer.\r
+ Passing a context directly would help avoid any reverse lookup that the\r
+ consumer would need to perform in order to identify it's own internal\r
+ data-structures needed to process this completion completely.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo1123">ci_destroy_cq</a>, <a href="#robo1143">ci_query_cq</a>, <a href="#robo1150">ci_resize_cq</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1117">[Functions]<a name="Verbs2fci5fcreate5fmw">\r
+Verbs/ci_create_mw</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="#robo39">parent</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ci_create_mw</strong> -- Create a memory window entry for later use\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef <a href="./ib_types_h.html#robo49">ib_api_status_t</a>\r
+(*<strong>ci_create_mw</strong>) (\r
+ IN const ib_pd_handle_t h_pd,\r
+ OUT net32_t* const p_rkey,\r
+ OUT ib_mw_handle_t *ph_mw,\r
+ IN OUT <a href="#robo1153">ci_umv_buf_t</a> *p_umv_buf OPTIONAL );\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> This routine allocates a memory window. This window entry cannot be used\r
+ for remote access unless this window is bound to a memory region\r
+ via the <a href="#robo1112">ci_bind_mw</a> call.\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_pd\r
+ [in] Protection domain handle to use for this memory window\r
+ p_rkey\r
+ [out] Remote access key that can be exchanged with a remote node to\r
+ perform RDMA transactions on this memory window. This R_KEY is still not\r
+ bound to any memory regions, until a successful call to <a href="#robo1112">ci_bind_mw</a>.\r
+ VPD is required to give this in the expected ordering on the wire. When\r
+ rkey's are exchanged between remote nodes, no swapping of this data\r
+ will be performed.\r
+ ph_mw\r
+ [out] Handle to the newly created memory window.\r
+ p_umv_buf\r
+ [in out] Vendor specific parameter to support user mode IO.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> IB_SUCCESS\r
+ The memory window allocation completed successfully.\r
+ IB_INSUFFICIENT_RESOURCES\r
+ Not enough resources to complete the request.\r
+ IB_INVALID_PD_HANDLE\r
+ pd_handle supplied is invalid.\r
+ IB_INVALID_PARAMETER\r
+ One of the pointers was not valid.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo1124">ci_destroy_mw</a>, <a href="#robo1145">ci_query_mw</a>, <a href="#robo1112">ci_bind_mw</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1118">[Functions]<a name="Verbs2fci5fcreate5fqp">\r
+Verbs/ci_create_qp</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="#robo39">parent</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ci_create_qp</strong> -- Create a Queue Pair for the specified HCA\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef <a href="./ib_types_h.html#robo49">ib_api_status_t</a>\r
+(*<strong>ci_create_qp</strong>) (\r
+ IN const ib_pd_handle_t h_pd,\r
+ IN const void *qp_context,\r
+ IN const <a href="./ib_types_h.html#robo206">ib_qp_create_t</a> *p_create_attr,\r
+ OUT <a href="./ib_types_h.html#robo205">ib_qp_attr_t</a> *p_qp_attr,\r
+ OUT ib_qp_handle_t *ph_qp,\r
+ IN OUT <a href="#robo1153">ci_umv_buf_t</a> *p_umv_buf OPTIONAL );\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> A new queue pair is created on the specified HCA. The initial set of\r
+ parameters is provided by the qp_create_attr parameter. The newly created\r
+ queue pair, with its attributes such as the qp number is returned\r
+ in the qp_query_attr structure.\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_pd\r
+ [in] Handle to Protection Domain\r
+ qp_context\r
+ [in] A user specified context passed in a asynchronous error callback.\r
+ p_create_attr\r
+ [in] Initial attributes with which the qp must be created.\r
+ p_qp_attr\r
+ [out] Attributes of the newly created queue pair.\r
+ ph_qp\r
+ [out] Handle to the queue pair newly created.\r
+ p_umv_buf\r
+ [in out] Vendor specific parameter to support user mode IO.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> IB_SUCCESS\r
+ The queue pair is successfully created with the provided initial\r
+ attributes.\r
+ IB_INSUFFICIENT_RESOURCES\r
+ Insufficient resources to complete request.\r
+ IB_INVALID_PD_HANDLE\r
+ pd_handle supplied in the qp_create_attr is invalid\r
+ IB_INVALID_CQ_HANDLE\r
+ cq_handle supplied for send/receive is invalid.\r
+ IB_INVALID_SERVICE_TYPE\r
+ Invalid service type.\r
+ IB_INVALID_MAX_WRS\r
+ Max WRS capacity exceeded\r
+ IB_INVALID_MAX_SGE\r
+ Max Scatter gather element request exceeds HCA capability\r
+ IB_UNSUPPORTED\r
+ Unreliable datagram not supported\r
+ IB_INVALID_PARAMETER\r
+ The parameter p_create_attr is invalid.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> If any of the initial parameters is not valid, the queue pair is not\r
+ created. If the routine call is not successful then the contents of\r
+ qp_query_attr and qp_handle is undefined.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo1119">ci_create_spl_qp</a>, <a href="#robo1146">ci_query_qp</a>, <a href="#robo1135">ci_modify_qp</a>, <a href="#robo1125">ci_destroy_qp</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1119">[Functions]<a name="Verbs2fci5fcreate5fspl5fqp">\r
+Verbs/ci_create_spl_qp</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="#robo39">parent</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ci_create_spl_qp</strong> -- Create a special queue pair.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef <a href="./ib_types_h.html#robo49">ib_api_status_t</a>\r
+(*<strong>ci_create_spl_qp</strong>) (\r
+ IN const ib_pd_handle_t h_pd,\r
+ IN const uint8_t port_num,\r
+ IN const void *qp_context,\r
+ IN const <a href="./ib_types_h.html#robo206">ib_qp_create_t</a> *p_create_attr,\r
+ OUT <a href="./ib_types_h.html#robo205">ib_qp_attr_t</a> *p_qp_attr,\r
+ OUT ib_qp_handle_t *ph_qp );\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Create and return a handle to for the indicated service type on the\r
+ specified port. QP service types can be one of SMI, GSI, Raw IPv6 or\r
+ Raw ether type as specified in qp_type_t.\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_pd\r
+ [in] Handle to the PD on which the special queue pair is to be created.\r
+ port_num\r
+ [in] Port number for which this special queue pair is created.\r
+ qp_context\r
+ [in] User specified context passed during the async error callback\r
+ routine.\r
+ p_create_attr\r
+ [in] Initial set of attributes with which the queue pair is to be\r
+ created.\r
+ p_qp_attr\r
+ [out] QP attributes after the qp is successfully created.\r
+\r
+ ph_qp\r
+ [out] Handle to the special qp after its creation.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> IB_SUCCESS\r
+ The special queue pair of the requested service type is created.\r
+ IB_INSUFFICIENT_RESOURCES\r
+ Insufficient resources to satisfy the request.\r
+ IB_NOT_FOUND\r
+ Indicated port guid is not found on this HCA.\r
+ IB_INVALID_CQ_HANDLE\r
+ Invalid cq handle passed to send/receive side.\r
+ IB_INVALID_MAX_WRS\r
+ Max WRS capacity exceeded\r
+ IB_INVALID_MAX_SGE\r
+ Max Scatter gather element request exceeds HCA capability\r
+ IB_RESOURCE_BUSY\r
+ Applicable to SMI/GSI qp's. This return code means that the SMI/GSI\r
+ QP is already allocated.\r
+ IB_INVALID_PD\r
+ Invalid protection domain supplied.\r
+ IB_INVALID_PORT\r
+ Invalid port number supplied.\r
+ IB_UNSUPPORTED\r
+ Raw datagram unsupported.\r
+ IB_INVALID_PARAMETER\r
+ The parameter p_create_attr is not valid.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This verb is privileged and only available in kernel mode. The User mode\r
+ clients that need access to SMI/GSI qp's is recommended to do this via\r
+ a higher level of abstraction.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo1118">ci_create_qp</a>, <a href="#robo1146">ci_query_qp</a>, <a href="#robo1135">ci_modify_qp</a>, <a href="#robo1125">ci_destroy_qp</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1120">[Functions]<a name="Verbs2fci5fdeallocate5fpd">\r
+Verbs/ci_deallocate_pd</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="#robo39">parent</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ci_deallocate_pd</strong> -- Deallocate a protection domain object.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef <a href="./ib_types_h.html#robo49">ib_api_status_t</a>\r
+(*<strong>ci_deallocate_pd</strong>) (\r
+ IN ib_pd_handle_t h_pd );\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> This routine deallocates a pd that is allocated via the <a href="#robo1109">ci_allocate_pd</a>()\r
+ call. The PD cannot be deallocated if it is still bound to a QP, any memory\r
+ region, memory window or address vector.\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_pd\r
+ [in] Handle allocated via the <a href="#robo1109">ci_allocate_pd</a>()\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> IB_SUCCESS\r
+ PD is freed successfully\r
+ IB_INVALID_PD_HANDLE\r
+ pd_handle is invalid\r
+ IB_RESOURCE_BUSY\r
+ PD is probably still bound to some resource\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo1109">ci_allocate_pd</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1121">[Functions]<a name="Verbs2fci5fderegister5fmr">\r
+Verbs/ci_deregister_mr</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="#robo39">parent</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ci_deregister_mr</strong> -- Deregister a memory region\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef <a href="./ib_types_h.html#robo49">ib_api_status_t</a>\r
+(*<strong>ci_deregister_mr</strong>) (\r
+ IN const ib_mr_handle_t h_mr );\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> This routine deregisters a memory region from the HCA. The region can\r
+ de-registered only if there are no existing memory windows bound to\r
+ this region, and if no existing shared memory regions were registered\r
+ that refers to the same set of physical pages associated with the memory\r
+ handle. If there are outstanding work requests referring to this memory\r
+ region, then after this call is successful, those work requests will\r
+ complete with WRS_LOCAL_PROTECTION_ERR.\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_mr\r
+ [in] Memory handle that is being de-registered.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> IB_SUCCESS\r
+ The memory de-registration was successful\r
+ IB_INVALID_MR_HANDLE\r
+ The memory handle supplied is not a valid memory handle.\r
+ IB_RESOURCE_BUSY\r
+ The memory region has active windows bound.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"></span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo1147">ci_register_mr</a>, <a href="#robo1148">ci_register_pmr</a>, <a href="#robo1149">ci_register_smr</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1122">[Functions]<a name="Verbs2fci5fdestroy5fav">\r
+Verbs/ci_destroy_av</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="#robo39">parent</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ci_destroy_av</strong> -- Destroy the address vector\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef <a href="./ib_types_h.html#robo49">ib_api_status_t</a>\r
+(*<strong>ci_destroy_av</strong>) (\r
+ IN const ib_av_handle_t h_av );\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> This routine destroys the specified address handle. After the routine\r
+ returns, this address handle cannot be used to reference the destination.\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_av\r
+ [in] Handle that needs to be destroyed.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> IB_SUCCESS\r
+ Operation was successful.\r
+ IB_INVALID_AV_HANDLE\r
+ The address vector handle was invalid\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo1115">ci_create_av</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1123">[Functions]<a name="Verbs2fci5fdestroy5fcq">\r
+Verbs/ci_destroy_cq</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="#robo39">parent</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ci_destroy_cq</strong> -- Destroy a completion queue.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef <a href="./ib_types_h.html#robo49">ib_api_status_t</a>\r
+(*<strong>ci_destroy_cq</strong>) (\r
+ IN const ib_cq_handle_t h_cq );\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Destroys a completion queue. If any queue pairs are still bound\r
+ to this CQ, the attempt to destroy will fail, and the CQ and associated\r
+ resources are *NOT* destroyed.\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> cq_handle\r
+ [in] Handle to the cq that is to be destroyed.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> IB_SUCCESS\r
+ The intend to destroy the completion queue is registered successfully.\r
+ The destroy_callback function will be invoked when it is safe and\r
+ guarantees that no more completion callbacks will be invoked for\r
+ this CQ. Any pending CQ notifications are discarded.\r
+ IB_INVALID_CQ_HANDLE\r
+ The CQ handle is invalid.\r
+ IB_RESOURCE_BUSY\r
+ Queue pairs may still be bound to this completion queue.\r
+ IB_INVALID_PARAMETER\r
+ one of the parameters was NULL.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo1116">ci_create_cq</a>\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This call cannot be called from any of the notification functions invoked\r
+ by the <a href="#robo39">Verbs</a> driver. For e.g. the completion handler or the async error\r
+ callback provided during the <a href="#robo1136">ci_open_ca</a>() call. The call will block until\r
+ all references to this adapter object is closed which includes all the\r
+ pending callbacks returning back to the verbs provider driver.\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1124">[Functions]<a name="Verbs2fci5fdestroy5fmw">\r
+Verbs/ci_destroy_mw</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="#robo39">parent</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ci_destroy_mw</strong> -- Destroy a memory window.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef <a href="./ib_types_h.html#robo49">ib_api_status_t</a>\r
+(*<strong>ci_destroy_mw</strong>) (\r
+ IN const ib_mw_handle_t h_mw );\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> This routine deallocates a window entry created via a <a href="#robo1117">ci_create_mw</a>.\r
+ Once this operation is complete, the channel interface guarantees that\r
+ no future remote accesses will be permitted to this window entry.\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_mw\r
+ [in] Handle to the memory window that is being destroyed.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> IB_SUCCESS\r
+ The destroy window request completed successfully.\r
+ IB_INVALID_MW_HANDLE\r
+ memw_handle supplied is invalid.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> Deallocate memory window implicitly means the window is also unbound\r
+ once the call completes successfully. Any future remote access with\r
+ the same R_KEY should fail with protection violation.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo1117">ci_create_mw</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1125">[Functions]<a name="Verbs2fci5fdestroy5fqp">\r
+Verbs/ci_destroy_qp</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="#robo39">parent</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ci_destroy_qp</strong> -- Destroy the specified Queue Pair.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef <a href="./ib_types_h.html#robo49">ib_api_status_t</a>\r
+(*<strong>ci_destroy_qp</strong>) (\r
+ IN const ib_qp_handle_t h_qp,\r
+ IN const uint64_t timewait );\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Destroys the associated QP. The QP could have outstanding work requests\r
+ when this call is made. Any outstanding work requests *SHALL NOT* be\r
+ completed after this routine returns.\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_qp\r
+ [in] Handle to the qp that needs to be destroyed.\r
+ timewait\r
+ [in] Time (in microseconds) at which the QP should leave\r
+ the timewait state and can be reused.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> IB_SUCCESS\r
+ The intend to destroy this queue pair is registered and no further\r
+ work requests will be processed. When no pending callbacks are in\r
+ progress, the destroy_callback function is invoked which marks the\r
+ destruction of the resource. The consumer can be guaranteed that\r
+ no future callbacks will be propagated on behalf of this resource.\r
+ IB_INVALID_QP_HANDLE\r
+ The handle passed is invalid.\r
+ IB_RESOURCE_BUSY\r
+ If the queue pair is a unreliable datagram service type, and\r
+ is still bound to a multicast group.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This call cannot be called from any of the notification functions invoked\r
+ by the <a href="#robo39">Verbs</a> driver. For e.g. the completion handler or the async error\r
+ callback provided during the <a href="#robo1136">ci_open_ca</a>() call. The call will block until\r
+ all references to this adapter object is closed which includes all the\r
+ pending callbacks returning back to the verbs provider driver.\r
+\r
+ If the CQ associated with this QP is still not destroyed, the completions\r
+ on behalf of this QP can still be pulled via the <a href="#robo1138">ci_poll_cq</a>() call. Any\r
+ resources allocated by the Channel Interface must be deallocated as part\r
+ of this call.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo1118">ci_create_qp</a>, <a href="#robo1119">ci_create_spl_qp</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1126">[Functions]<a name="Verbs2fci5fdetach5fmcast">\r
+Verbs/ci_detach_mcast</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="#robo39">parent</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ci_detach_mcast</strong> -- Detach a queue pair from a multicast group\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef <a href="./ib_types_h.html#robo49">ib_api_status_t</a>\r
+(*<strong>ci_detach_mcast</strong>) (\r
+ IN const ib_mcast_handle_t h_mcast );\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> This routine detaches a queue pair from its previously associated multicast\r
+ group.\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_mcast\r
+ [in] The multicast handle passed back to consumer after the\r
+ ci_mcast_attach call.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> IB_SUCCESS\r
+ The qp was successfully detached from the multicast group.\r
+ IB_INVALID_MCAST_HANDLE\r
+ mcast_handle supplied is an invalid handle\r
+ IB_INVALID_PARAMETER\r
+ One of the parameters was NULL.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo1111">ci_attach_mcast</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1127">[Functions]<a name="Verbs2fci5fenable5fcq5fnotify">\r
+Verbs/ci_enable_cq_notify</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="#robo39">parent</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ci_enable_cq_notify</strong> -- Invoke the Completion handler, on next entry added.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef <a href="./ib_types_h.html#robo49">ib_api_status_t</a>\r
+(*<strong>ci_enable_cq_notify</strong>) (\r
+ IN const ib_cq_handle_t h_cq,\r
+ IN const boolean_t solicited );\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> This routine instructs the channel interface to invoke the completion\r
+ handler when the next completion queue entry is added to this CQ.\r
+ Please refer to Volume 1, of the InfiniBand specification for a complete\r
+ description.\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_cq\r
+ [in] Handle to the CQ on which the notification is being enabled.\r
+ solicited\r
+ [in] A boolean flag indicating whether the request is to generate a\r
+ notification on the next entry or on the next solicited entry\r
+ being added to the completion queue.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> IB_SUCCESS\r
+ The notification request was registered successfully.\r
+ IB_INVALID_CQ_HANDLE\r
+ cq_handle supplied is not a valid handle.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> The consumer cannot call a request for notification without emptying\r
+ entries from the CQ. i.e if a consumer registers for a notification\r
+ request in the completion callback before pulling entries from the\r
+ CQ via <a href="#robo1138">ci_poll_cq</a>, the notification is not generated for completions\r
+ already in the CQ. For e.g. in the example below, if there are no calls\r
+ to <a href="#robo1138">ci_poll_cq</a>() after the <strong>ci_enable_cq_notify</strong>(). For any CQ entries added\r
+ before calling this <strong>ci_enable_cq_notify</strong>() call, the consumer does not\r
+ get a completion notification callback. In order to comply with the verb\r
+ spec, consumer is supposed to perform a <a href="#robo1138">ci_poll_cq</a>() after the\r
+ <strong>ci_enable_cq_notify</strong>() is made to retrive any entries that might have\r
+ been added to the CQ before the CI registers the notification enable.\r
+\r
+ while ((ret_val = <a href="#robo1138">ci_poll_cq</a>(cq_handle, &free_list, &done_list)\r
+ == FSUCCESS))\r
+ {\r
+ process entries;\r
+ }\r
+ if (ret_val == IB_NOT_FOUND)\r
+ <strong>ci_enable_cq_notify</strong>(cq_handle);\r
+ // Need to perform a <a href="#robo1138">ci_poll_cq</a>()\r
+ // after the enable.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo1116">ci_create_cq</a>, <a href="#robo1137">ci_peek_cq</a>, <a href="#robo1138">ci_poll_cq</a>, <a href="#robo1128">ci_enable_ncomp_cq_notify</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1128">[Functions]<a name="Verbs2fci5fenable5fncomp5fcq5fnotify">\r
+Verbs/ci_enable_ncomp_cq_notify</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="#robo39">parent</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ci_enable_ncomp_cq_notify</strong> -- Invoke the Completion handler when the next\r
+ N completions are added.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef <a href="./ib_types_h.html#robo49">ib_api_status_t</a>\r
+(*<strong>ci_enable_ncomp_cq_notify</strong>) (\r
+ IN const ib_cq_handle_t h_cq,\r
+ IN const uint32_t n_cqes );\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> This routine instructs the channel interface to invoke the completion\r
+ handler when the next N completions have been added to this CQ.\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_cq\r
+ [in] Handle to the CQ on which the notification is being enabled.\r
+ n_cqes\r
+ [in] The number of completion queue entries to be added to the\r
+ completion queue before notifying the client. This value must\r
+ greater than or equal to one and less than or equal to the size\r
+ of the completion queue.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> IB_SUCCESS\r
+ The notification request was registered successfully.\r
+ IB_INVALID_CQ_HANDLE\r
+ cq_handle supplied is not a valid handle.\r
+ IB_INVALID_PARAMETER\r
+ The requested number of completion queue entries was invalid.\r
+ IB_UNSUPPORTED\r
+ This operation is not supported by the channel adapter.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This routine instructs the channel interface to invoke the completion\r
+ handler when the next N completions have been added to this CQ regardless\r
+ of the completion type (solicited or unsolicited). Any CQ entries that\r
+ existed before the rearm is enabled will not result in a call to the\r
+ handler. Support for this operation is optional by a channel adapter\r
+ vendor.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo1116">ci_create_cq</a>, <a href="#robo1137">ci_peek_cq</a>, <a href="#robo1138">ci_poll_cq</a>, <a href="#robo1127">ci_enable_cq_notify</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1129">[Structures]<a name="Verbs2fci5finterface5ft">\r
+Verbs/ci_interface_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="#robo39">parent</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ci_interface_t</strong> -- Interface holding Channel Interface API's\r
+</pre>\r
+</span><p><strong>PURPOSE</strong></p>\r
+<span class="PURPOSE"><pre> The following structure is supplied by a Channel Interface\r
+ providing verbs functionality.\r
+</pre>\r
+</span><p><strong>SOURCE</strong></p>\r
+<span class="SOURCE"><pre>#define MAX_LIB_NAME 32\r
+\r
+typedef struct _ci_interface\r
+{\r
+ net64_t guid;\r
+\r
+ /*\r
+ * Device object of the HCA. In Windows, this is a pointer to the PDO\r
+ * for the HCA device.\r
+ */\r
+ void *p_hca_dev;\r
+\r
+ /*\r
+ * Vendor ID, Device ID, Device Revision of the HCA\r
+ * libname refers to the user mode library to load\r
+ * to support direct user mode IO. If vendor does not support one\r
+ * then the fields must be initialized to all zero's.\r
+ */\r
+ uint32_t vend_id;\r
+ uint16_t dev_id;\r
+ uint16_t dev_revision;\r
+ char libname[MAX_LIB_NAME];\r
+ /*\r
+ * Version of the header file this interface export can handle\r
+ */\r
+ uint32_t version;\r
+\r
+ /*\r
+ * HCA Access <a href="#robo39">Verbs</a>\r
+ */\r
+ <a href="#robo1136">ci_open_ca</a> open_ca;\r
+ ci_um_open_ca_t um_open_ca;\r
+ <a href="#robo1142">ci_query_ca</a> query_ca;\r
+ <a href="#robo1132">ci_modify_ca</a> modify_ca;\r
+ <a href="#robo1113">ci_close_ca</a> close_ca;\r
+ <a href="#robo1151">ci_um_close_ca_t</a> um_close_ca;\r
+\r
+ <a href="#robo1154">ci_vendor_call</a> vendor_call;\r
+\r
+ /*\r
+ * Protection Domain\r
+ */\r
+ <a href="#robo1109">ci_allocate_pd</a> allocate_pd;\r
+ <a href="#robo1120">ci_deallocate_pd</a> deallocate_pd;\r
+\r
+ /*\r
+ * Address <a href="../complib/cl_vector_h.html#robo36">Vector</a> Management <a href="#robo39">Verbs</a>\r
+ */\r
+\r
+ <a href="#robo1115">ci_create_av</a> create_av;\r
+ <a href="#robo1141">ci_query_av</a> query_av;\r
+ <a href="#robo1131">ci_modify_av</a> modify_av;\r
+ <a href="#robo1122">ci_destroy_av</a> destroy_av;\r
+\r
+ /*\r
+ * QP Management <a href="#robo39">Verbs</a>\r
+ */\r
+ <a href="#robo1118">ci_create_qp</a> create_qp;\r
+ <a href="#robo1119">ci_create_spl_qp</a> create_spl_qp;\r
+ <a href="#robo1135">ci_modify_qp</a> modify_qp;\r
+ <a href="#robo1146">ci_query_qp</a> query_qp;\r
+ <a href="#robo1125">ci_destroy_qp</a> destroy_qp;\r
+\r
+ /*\r
+ * Completion Queue Management <a href="#robo39">Verbs</a>\r
+ */\r
+ <a href="#robo1116">ci_create_cq</a> create_cq;\r
+ <a href="#robo1150">ci_resize_cq</a> resize_cq;\r
+ <a href="#robo1143">ci_query_cq</a> query_cq;\r
+ <a href="#robo1123">ci_destroy_cq</a> destroy_cq;\r
+\r
+ /*\r
+ * Memory Management <a href="#robo39">Verbs</a>\r
+ */\r
+ <a href="#robo1147">ci_register_mr</a> register_mr;\r
+ <a href="#robo1148">ci_register_pmr</a> register_pmr;\r
+ <a href="#robo1144">ci_query_mr</a> query_mr;\r
+ <a href="#robo1133">ci_modify_mr</a> modify_mr;\r
+ <a href="#robo1134">ci_modify_pmr</a> modify_pmr;\r
+ <a href="#robo1149">ci_register_smr</a> register_smr;\r
+ <a href="#robo1121">ci_deregister_mr</a> deregister_mr;\r
+\r
+ /*\r
+ * Memory Window <a href="#robo39">Verbs</a>\r
+ */\r
+ <a href="#robo1117">ci_create_mw</a> create_mw;\r
+ <a href="#robo1145">ci_query_mw</a> query_mw;\r
+ <a href="#robo1112">ci_bind_mw</a> bind_mw;\r
+ <a href="#robo1124">ci_destroy_mw</a> destroy_mw;\r
+\r
+ /*\r
+ * Work Request Processing <a href="#robo39">Verbs</a>\r
+ */\r
+ <a href="#robo1140">ci_post_send</a> post_send;\r
+ <a href="#robo1139">ci_post_recv</a> post_recv;\r
+\r
+ /*\r
+ * Completion Processing and\r
+ * Completion Notification Request <a href="#robo39">Verbs</a>.\r
+ */\r
+ <a href="#robo1137">ci_peek_cq</a> peek_cq; /* Optional */\r
+ <a href="#robo1138">ci_poll_cq</a> poll_cq;\r
+ <a href="#robo1127">ci_enable_cq_notify</a> enable_cq_notify;\r
+ <a href="#robo1128">ci_enable_ncomp_cq_notify</a> enable_ncomp_cq_notify; /* Optional */\r
+\r
+ /*\r
+ * Multicast Support <a href="#robo39">Verbs</a>\r
+ */\r
+ <a href="#robo1111">ci_attach_mcast</a> attach_mcast;\r
+ <a href="#robo1126">ci_detach_mcast</a> detach_mcast;\r
+\r
+ /*\r
+ * Local MAD support, for HCA's that do not support\r
+ * Agents in the HW.\r
+ */\r
+ <a href="#robo1130">ci_local_mad</a> local_mad;\r
+\r
+} <strong>ci_interface_t</strong>;\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1130">[Functions]<a name="Verbs2fci5flocal5fmad">\r
+Verbs/ci_local_mad</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="#robo39">parent</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ci_local_mad</strong> -- Request a mad to be processed by the local adapter.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef <a href="./ib_types_h.html#robo49">ib_api_status_t</a>\r
+(*<strong>ci_local_mad</strong>) (\r
+ IN const ib_ca_handle_t h_ca,\r
+ IN const uint8_t port_num,\r
+ IN const <a href="./ib_types_h.html#robo882">ib_mad_t</a> *p_mad_in,\r
+ OUT <a href="./ib_types_h.html#robo882">ib_mad_t</a> *p_mad_out );\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> This routine is OPTIONAL for the channel interface. This is required\r
+ for adapters which do not have the agents such as Subnet Management\r
+ agent (SMA) Or the GSA in the <a href="#robo39">Verbs</a> Provider driver.\r
+ hardware, for all such adapters the exact queue pair management of\r
+ special queue pairs happen above the channel interface. This routine\r
+ is used to perform local operations, since there is no agent below the\r
+ channel interface. For e.g: If a Subnet Management packet (SMP) to\r
+ set PORT_STATE is received, this reception is processed above the channel\r
+ interface, then this call is done to set the port state on the local\r
+ adapter. On successful return, the response is generated and sent to the\r
+ Subnet Manager.\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_ca\r
+ [in] A handle to the channel adapter that should process the MAD.\r
+ This must be the same adapter that the MAD was received on.\r
+ port_num\r
+ [in] port number to which this request is directed is to be sent.\r
+ p_mad_in\r
+ [in] pointer to a management datagram (MAD) structure containing\r
+ the command to be processed.\r
+ p_mad_out\r
+ [out] Response packet after processing the command. The storage to this\r
+ must be allocated by the consumer.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> IB_SUCCESS\r
+ Command processed successfully.\r
+ IB_INVALID_CA_HANDLE\r
+ The HCA handle supplied is not valid.\r
+ IB_INVALID_PORT\r
+ The port number supplied is invalid.\r
+</pre>\r
+</span><p><strong>PORTABILITY</strong></p>\r
+<span class="PORTABILITY"><pre> Kernel Mode only\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This call is provided to aid adapters that don't have a agent functionality\r
+ built in the channel interface. Some adapters do have a local processor\r
+ to process these packets, hence even for local port management, we can\r
+ use the same mechanism we use to configure external nodes by using a\r
+ hop counter = 1 in the MAD packets. If the SMA indicates it has a local\r
+ sma in the <a href="./ib_types_h.html#robo60">ib_ca_attr_t</a>, then the packets are posted to the adapter\r
+ instead of making a private call to the adapter.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo1142">ci_query_ca</a>, ci_ca_attr_t\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1131">[Functions]<a name="Verbs2fci5fmodify5fav">\r
+Verbs/ci_modify_av</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="#robo39">parent</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ci_modify_av</strong> -- Change the address vector referred by the av_handle\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef <a href="./ib_types_h.html#robo49">ib_api_status_t</a>\r
+(*<strong>ci_modify_av</strong>) (\r
+ IN const ib_av_handle_t h_av,\r
+ IN const <a href="./ib_types_h.html#robo57">ib_av_attr_t</a> *p_av_attr,\r
+ IN OUT <a href="#robo1153">ci_umv_buf_t</a> *p_umv_buf OPTIONAL );\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> This routine allows a consumer to modify the address information\r
+ passed.\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_av\r
+ [in] Address handle that needs to be updated with new info.\r
+ p_av_attr\r
+ [in] New address vector to associate with the addr_handle.\r
+ p_umv_buf\r
+ [in out] Vendor specific parameter to support user mode IO.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> IB_SUCCESS\r
+ Operation was successful\r
+ IB_INVALID_AV_HANDLE\r
+ The address vector handle was invalid\r
+ IB_INVALID_PORT\r
+ Invalid port number passed in the Address <a href="../complib/cl_vector_h.html#robo36">Vector</a>.\r
+ IB_INVALID_PARAMETER\r
+ The parameter p_av_attr is not valid.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> The values in the p_av_attr is not validated for correctness. The values\r
+ in the attribute such as port number, protection domain etc are validated\r
+ during processing by the channel adapter. If the attribute validation fails\r
+ a processing error IB_WCS_LOCAL_OP_ERR.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo1115">ci_create_av</a>, <a href="#robo1141">ci_query_av</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1132">[Functions]<a name="Verbs2fci5fmodify5fca">\r
+Verbs/ci_modify_ca</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="#robo39">parent</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ci_modify_ca</strong> -- Modify port attributes and error counters\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef <a href="./ib_types_h.html#robo49">ib_api_status_t</a>\r
+(*<strong>ci_modify_ca</strong>) (\r
+ IN const ib_ca_handle_t h_ca,\r
+ IN const uint8_t port_num,\r
+ IN const <a href="./ib_types_h.html#robo61">ib_ca_mod_t</a> ca_mod,\r
+ IN const <a href="./ib_types_h.html#robo199">ib_port_attr_mod_t</a> *p_port_attr_mod );\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Modifies either the P_KEY/Q_KEY violation counters, or sets the capability\r
+ mask in the port attributes. This is effectively translated to PORTINFO\r
+ values responded later when a MAD from SM or another node arrives to\r
+ retrieve port related attributes.\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_ca\r
+ [in] Handle returned by previous call to <a href="#robo1136">ci_open_ca</a>()\r
+ port_num\r
+ [in] Port number, which needs to be modified.\r
+ ca_mod\r
+ [in] Command mask to perform operations on.\r
+ p_port_attr_mod\r
+ [in] port attribute which needs this change to be performed.\r
+ if the capability bit is set, then that corresponding\r
+ port capability is turned on.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> IB_SUCCESS\r
+ Modify port attributes was performed\r
+ IB_INVALID_PORT\r
+ Invalid port number supplied in port_att.\r
+ IB_INVALID_PARAMETER\r
+ Unknown Command supplied in port_attr.\r
+ IB_UNSUPPORTED\r
+ Optional Q_KEY and P_KEY violation counters are not supported.\r
+ IB_INVALID_CA_HANDLE\r
+ h_ca is invalid\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> No ownership checks are performed in the <a href="#robo39">Verbs</a> Provider Driver.\r
+ All such permission checks are to be performed by the IB access layer\r
+ before passing requests down to the HCA driver. These operations can be\r
+ performed only by the special QP owner. Either the QP0 or QP1. Since port\r
+ attributes is really maintained by the QP0 for SMA to respond with correct\r
+ values, but the agent capability is really a QP1 functionality.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo1136">ci_open_ca</a>, <a href="#robo1142">ci_query_ca</a>, <a href="#robo1113">ci_close_ca</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1133">[Functions]<a name="Verbs2fci5fmodify5fmr">\r
+Verbs/ci_modify_mr</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="#robo39">parent</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ci_modify_mr</strong> -- Modify some or all parameters of a memory region.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef <a href="./ib_types_h.html#robo49">ib_api_status_t</a>\r
+(*<strong>ci_modify_mr</strong>) (\r
+ IN const ib_mr_handle_t h_mr,\r
+ IN const <a href="./ib_types_h.html#robo161">ib_mr_mod_t</a> mr_modify_mask,\r
+ IN const <a href="./ib_types_h.html#robo160">ib_mr_create_t</a>* const p_mr_create OPTIONAL,\r
+ OUT net32_t* const p_lkey,\r
+ OUT net32_t* const p_rkey,\r
+ IN const ib_pd_handle_t h_pd OPTIONAL,\r
+ IN boolean_t um_call );\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> This routine modifies attributes of the specified memory region\r
+ irrespective of whether the handle was obtained via <a href="#robo1147">ci_register_mr</a>\r
+ or <a href="#robo1148">ci_register_pmr</a>. This verb conceptually performs a de-registration\r
+ followed by a <a href="#robo1147">ci_register_mr</a>.\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_mr\r
+ [in] Handle to the memory region whose attributes are to be modified.\r
+ mr_modify_mask\r
+ [in] Command specifying which parts of the mem_region is valid. The\r
+ command is specified as a bit mask.\r
+ p_mr_create\r
+ [in] Desired attributes that need to be modified for mem_handle.\r
+ This is an optional parameter which can be NULL if mr_modify_mask\r
+ is set to IB_MR_MOD_PD.\r
+ p_lkey\r
+ [out] The new l_key for this newly registered memory region.\r
+ p_rkey\r
+ [out] The new r_key for this newly registered memory region.\r
+ The verbs provider is required to give this in the expected ordering\r
+ on the wire. When rkey's are exchanged between remote nodes, no\r
+ swapping of this data will be performed.\r
+ h_pd\r
+ [in] This parameter is valid only if the IB_MR_MOD_PD flag is set\r
+ in the mr_modify_req parameter. This field supplies the new\r
+ protection domain to which the modified region should be\r
+ associated with.\r
+ um_call\r
+ [in] Boolean indicating whether the registration originated in user-mode.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> IB_SUCCESS\r
+ The modify memory region request completed successfully.\r
+ IB_RESOURCE_BUSY\r
+ The memory region has windows bound to it.\r
+ IB_INSUFFICIENT_RESOURCES\r
+ Insufficient resources to complete the request.\r
+ IB_INVALID_MR_HANDLE\r
+ The memory handle supplied is not a valid memory region handle.\r
+ IB_INVALID_PERMISSION\r
+ Invalid access rights specified.\r
+ IB_INVALID_PARAMETER\r
+ A reference to the lkey or rkey was not provided or the specified\r
+ modify mask is invalid.\r
+ IB_INVALID_SETTING\r
+ The specified memory region attributes are invalid.\r
+ IB_INVALID_PD_HANDLE\r
+ Protection domain handle supplied is not valid.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> Remote and Atomic access settings in ib_access_ctrl_t, requires local\r
+ write access to be enabled.\r
+ TBD: How to handle shared memory region being passed to modify_mem?\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo1147">ci_register_mr</a>, <a href="#robo1148">ci_register_pmr</a>, <a href="#robo1149">ci_register_smr</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1134">[Functions]<a name="Verbs2fci5fmodify5fpmr">\r
+Verbs/ci_modify_pmr</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="#robo39">parent</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ci_modify_pmr</strong> -- Modify some or all parameters of a memory region.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef <a href="./ib_types_h.html#robo49">ib_api_status_t</a>\r
+(*<strong>ci_modify_pmr</strong>) (\r
+ IN const ib_mr_handle_t h_mr,\r
+ IN const <a href="./ib_types_h.html#robo161">ib_mr_mod_t</a> mr_modify_mask,\r
+ IN const <a href="./ib_types_h.html#robo187">ib_phys_create_t</a>* const p_pmr_create,\r
+ IN OUT uint64_t* const p_vaddr,\r
+ OUT net32_t* const p_lkey,\r
+ OUT net32_t* const p_rkey,\r
+ IN const ib_pd_handle_t h_pd OPTIONAL,\r
+ IN boolean_t um_call );\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> This routine modifies attributes of the specified memory region\r
+ irrespective of whether the handle was obtained via <a href="#robo1147">ci_register_mr</a>\r
+ or <a href="#robo1148">ci_register_pmr</a>. This verb conceptually performs a de-registration\r
+ followed by a <a href="#robo1148">ci_register_pmr</a>.\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_mr\r
+ [in] Handle to the memory region whose attributes are to be modified.\r
+ mr_modify_mask\r
+ [in] Command specifying which parts of the mem_region is valid. The\r
+ command is specified as a bit mask.\r
+ p_pmr_create\r
+ [in] Desired attributes that need to be modified for mem_handle.\r
+ p_vaddr\r
+ [in/out] On input, references the requested virtual address for the\r
+ start of the physical region. On output, references the actual\r
+ virtual address assigned to the registered region.\r
+ p_lkey\r
+ [out] The new l_key for this newly registered physical memory region.\r
+ p_rkey\r
+ [out] The new r_key for this newly registered physical memory region.\r
+ VPD is required to give this in the expected ordering on the wire. When\r
+ rkey's are exchanged between remote nodes, no swapping of this data\r
+ will be performed.\r
+ h_pd\r
+ [in] This parameter is valid only if the IB_MR_MOD_PD flag is set\r
+ in the mr_modify_req parameter. This field supplies the new\r
+ protection domain to which the modified region should be\r
+ associated with.\r
+ um_call\r
+ [in] Boolean indicating whether the registration originated in user-mode.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> IB_SUCCESS\r
+ The modify memory region request completed successfully.\r
+ IB_RESOURCE_BUSY\r
+ The memory region has windows bound to it.\r
+ IB_INSUFFICIENT_RESOURCES\r
+ Insufficient resources to complete the request.\r
+ IB_INVALID_MR_HANDLE\r
+ The memory handle supplied is not a valid memory region handle.\r
+ IB_INVALID_PERMISSION\r
+ Invalid access rights specified.\r
+ IB_INVALID_PARAMETER\r
+ A reference to the virtual address, lkey, rkey was not provided or\r
+ the specified modify mask is invalid.\r
+ IB_INVALID_SETTING\r
+ The specified memory region attributes are invalid.\r
+</pre>\r
+</span><p><strong>PORTABILITY</strong></p>\r
+<span class="PORTABILITY"><pre> Kernel Mode only\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> Remote and Atomic access settings in ib_access_ctrl_t, requires local\r
+ write access to be enabled.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo1147">ci_register_mr</a>, <a href="#robo1148">ci_register_pmr</a>, <a href="#robo1149">ci_register_smr</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1135">[Functions]<a name="Verbs2fci5fmodify5fqp">\r
+Verbs/ci_modify_qp</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="#robo39">parent</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ci_modify_qp</strong> -- Modify attributes of the specified QP.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef <a href="./ib_types_h.html#robo49">ib_api_status_t</a>\r
+(*<strong>ci_modify_qp</strong>) (\r
+ IN const ib_qp_handle_t h_qp,\r
+ IN const <a href="./ib_types_h.html#robo207">ib_qp_mod_t</a> *p_modify_attr,\r
+ OUT <a href="./ib_types_h.html#robo205">ib_qp_attr_t</a> *p_qp_attr OPTIONAL,\r
+ IN OUT <a href="#robo1153">ci_umv_buf_t</a> *p_umv_buf OPTIONAL );\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> This routine is used to modify the qp states or other attributes of the\r
+ QP. On successful completion, the requested state transition is performed\r
+ and the QP is transitioned to the required state.\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_qp\r
+ [in] Handle to the queue pair whose state is to be modified.\r
+ p_modify_attr\r
+ [in] Specifies what attributes need to be modified in the qp.\r
+ p_qp_attr\r
+ [out] QP attributes after the qp is successfully created.\r
+ p_umv_buf\r
+ [in out] Vendor specific parameter to support user mode IO.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> IB_SUCCESS\r
+ The operation was successful and the QP attributes are modified\r
+ to the requested state.\r
+ IB_INSUFFICIENT_RESOURCES\r
+ Insufficient resources to complete the requested operation.\r
+ IB_INVALID_QP_HANDLE\r
+ Invalid QP handle was passed.\r
+ IB_UNSUPPORTED\r
+ Requested operation is not supported, for e.g. Atomic operations.\r
+ IB_QP_INVALID_STATE\r
+ Invalid state transition request. Current QP state not in allowable\r
+ state.\r
+ IB_INVALID_PKEY\r
+ Pkey specified in modify request not valid entry in P_KEY table. Or\r
+ index is out of range.\r
+ IB_INVALID_APM_STATE\r
+ Invalid automatic path migration state specified in the request.\r
+ IB_INVALID_PARAMETER\r
+ The parameter p_modify_attr is not valid.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> Refer to Table 79 in chapter 11, Volume 1 of the InfiniBand Specifications.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo1118">ci_create_qp</a>, <a href="#robo1119">ci_create_spl_qp</a>, <a href="#robo1146">ci_query_qp</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1136">[Functions]<a name="Verbs2fci5fopen5fca">\r
+Verbs/ci_open_ca</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="#robo39">parent</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ci_open_ca</strong> -- open and possibly obtain a handle to access the HCA.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef <a href="./ib_types_h.html#robo49">ib_api_status_t</a>\r
+(*<strong>ci_open_ca</strong>) (\r
+ IN const <a href="./ib_types_h.html#robo895">ib_net64_t</a> ca_guid,\r
+ IN const <a href="#robo1114">ci_completion_cb_t</a> pfn_completion_cb,\r
+ IN const <a href="#robo1110">ci_async_event_cb_t</a> pfn_async_event_cb,\r
+ IN const void* const ca_context,\r
+ OUT ib_ca_handle_t *ph_ca );\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> This routine returns a handle to an open instance of a HCA. Client can call\r
+ this routine to retrieve a new open instance. Only one instance of the\r
+ open call is active at any time. If a duplicate open is called by the\r
+ consumer or any other consumer, it IB_RESOURCE_BUSY error status is\r
+ returned.\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> ca_guid\r
+ [in] The HCA adapter's EUI64 identifier. Clients would use other\r
+ enumeration API's to locate all available adapters and their\r
+ guids in a system, e.g. GetCaGuids(), maintained by the IB\r
+ Access Layer. User mode consumers also have the same mechanism\r
+ to retrieve this information.\r
+ pfn_completion_cb\r
+ [in] Completion Handler, one per open instance.\r
+ pfn_async_event_cb\r
+ [in] Asynchronous event handler, one per open instance.\r
+ ca_context\r
+ [in] <a href="#robo39">Verbs</a> consumer supplied value, which is returned on calls to\r
+ handlers which in turn is used by clients to identify the\r
+ open instance.\r
+ ph_ca\r
+ [out] Pointer to a handle to the newly open instance of the CA returned\r
+ by the <a href="#robo39">Verbs</a> Provider.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> IB_SUCCESS\r
+ The HCA is successfully opened and returned handle is valid.\r
+ IB_INSUFFICIENT_RESOURCES\r
+ Insufficient resources to satisfy request.\r
+ IB_INVALID_PARAMETER\r
+ Callback routine are not provided, GUID value is zero, or ph_ca is NULL\r
+ IB_RESOURCE_BUSY\r
+ The interface is already open by another consumer.\r
+ IB_NOT_FOUND\r
+ ca_guid passed is not valid\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo1142">ci_query_ca</a>, <a href="#robo1132">ci_modify_ca</a>, <a href="#robo1113">ci_close_ca</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1137">[Functions]<a name="Verbs2fci5fpeek5fcq">\r
+Verbs/ci_peek_cq</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="#robo39">parent</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ci_peek_cq</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Returns the number of entries currently on the completion queue.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef <a href="./ib_types_h.html#robo49">ib_api_status_t</a>\r
+(*<strong>ci_peek_cq</strong>) (\r
+ IN const ib_cq_handle_t h_cq,\r
+ OUT uint32_t* const p_n_cqes );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_cq\r
+ [in] Handle to the completion queue to peek.\r
+\r
+ p_n_cqes\r
+ [out] The number of completion entries on the CQ.\r
+\r
+ RETURN VALUES\r
+ IB_SUCCESS\r
+ The peek operation completed successfully.\r
+ IB_INVALID_CQ_HANDLE\r
+ The completion queue handle was invalid.\r
+ IB_INVALID_PARAMETER\r
+ A reference to the completion queue entry count was not provided.\r
+ IB_UNSUPPORTED\r
+ This operation is not supported by the channel adapter.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> The value returned is a snapshot of the number of compleiton queue\r
+ entries curently on the completion queue. Support for this operation\r
+ is optional by a channel adapter vendor.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo1116">ci_create_cq</a>, <a href="#robo1138">ci_poll_cq</a>, <a href="#robo1127">ci_enable_cq_notify</a>, <a href="#robo1128">ci_enable_ncomp_cq_notify</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1138">[Functions]<a name="Verbs2fci5fpoll5fcq">\r
+Verbs/ci_poll_cq</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="#robo39">parent</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ci_poll_cq</strong> -- Retrieve a work completion record from a completion queue\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef <a href="./ib_types_h.html#robo49">ib_api_status_t</a>\r
+(*<strong>ci_poll_cq</strong>) (\r
+ IN const ib_cq_handle_t h_cq,\r
+ IN OUT <a href="./ib_types_h.html#robo260">ib_wc_t</a>** const pp_free_wclist,\r
+ OUT <a href="./ib_types_h.html#robo260">ib_wc_t</a>** const pp_done_wclist );\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> This routine retrieves a work completion entry from the specified\r
+ completion queue. The contents of the data returned in a work completion\r
+ is specified in <a href="./ib_types_h.html#robo260">ib_wc_t</a>.\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_cq\r
+ [in] Handle to the completion queue being polled.\r
+ pp_free_wclist\r
+ [in out] A list of work request structures provided by the consumer\r
+ for the channel interface to return completed Completion Queue\r
+ entries. If not all the entries are consumed, this list holds the\r
+ list of un-utilized completion entries provided back to the consumer.\r
+ pp_done_wclist\r
+ [out] A list of work completions retrieved from the completion queue\r
+ and successfully processed.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> IB_SUCCESS\r
+ Poll completed successfully and found one or more entries. If on\r
+ completion the pp_free_wclist is empty, then there are potentially more\r
+ entries and the consumer must continue to retrieve entries.\r
+ IB_INVALID_CQ_HANDLE\r
+ The cq_handle supplied is not valid.\r
+ IB_NOT_FOUND\r
+ There were no completion entries found in the specified CQ.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo1116">ci_create_cq</a>, <a href="#robo1140">ci_post_send</a>, <a href="#robo1139">ci_post_recv</a>, <a href="#robo1112">ci_bind_mw</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1139">[Functions]<a name="Verbs2fci5fpost5frecv">\r
+Verbs/ci_post_recv</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="#robo39">parent</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ci_post_recv</strong> -- Post a work request to the receive queue of a queue pair.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef <a href="./ib_types_h.html#robo49">ib_api_status_t</a>\r
+(*<strong>ci_post_recv</strong>) (\r
+ IN const ib_qp_handle_t h_qp,\r
+ IN <a href="./ib_types_h.html#robo225">ib_recv_wr_t</a>* const p_recv_wr,\r
+ OUT <a href="./ib_types_h.html#robo225">ib_recv_wr_t</a> **pp_failed );\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> This routine allows to queue a work request to the receive side of a\r
+ queue pair. The work_req holds necessary data to satisfy an incoming\r
+ receive message. If an attempt is made to queue more work requests than\r
+ what is available, an error is returned.\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_qp\r
+ [in] Handle to the queue pair to which the receive work request is being\r
+ posted.\r
+ p_recv_wr\r
+ [in] Holds the WRs to be posted to the receive queue.\r
+ pp_failed\r
+ [out] If any entry could not be posted with the CI, then this points\r
+ to the first WR that completed unsuccessfully. If all entries are\r
+ posted, then this field is set to NULL on successful exit.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> Any unsuccessful status indicates the status of the first failed request.\r
+\r
+ IB_SUCCESS\r
+ The work request was successfully queued to the receive side of the QP.\r
+ IB_INVALID_QP_HANDLE\r
+ qp_handle supplied is not valid.\r
+ IB_INSUFFICIENT_RESOURCES\r
+ The qp has exceeded its receive queue depth than what is has been\r
+ configured.\r
+ IB_INVALID_WR_TYPE\r
+ Invalid work request type found in the request.\r
+ IB_INVALID_QP_STATE\r
+ QP was in reset or init state.\r
+ (TBD: there may be an errata that allows posting in init state)\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo1140">ci_post_send</a>, <a href="#robo1138">ci_poll_cq</a>.\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1140">[Functions]<a name="Verbs2fci5fpost5fsend">\r
+Verbs/ci_post_send</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="#robo39">parent</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ci_post_send</strong> -- Post a work request to the send side of a queue pair.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef <a href="./ib_types_h.html#robo49">ib_api_status_t</a>\r
+(*<strong>ci_post_send</strong>) (\r
+ IN const ib_qp_handle_t h_qp,\r
+ IN <a href="./ib_types_h.html#robo249">ib_send_wr_t</a>* const p_send_wr,\r
+ OUT <a href="./ib_types_h.html#robo249">ib_send_wr_t</a> **pp_failed );\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> This routine posts a work request to the send side of the queue pair.\r
+ The different types of work request that can be posted are explained in\r
+ the ib_wr_t structure. For exact details on ordering rules please consult\r
+ the Volume 1, of the InfiniBand Specifications. If there is more\r
+ outstanding requests posted that what the queue is configured for, an\r
+ immediate error is returned.\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_qp\r
+ [in] The queue pair to which this work request is being submitted.\r
+ p_send_wr\r
+ [in] A pointer to the head of the list that must be posted to the\r
+ Send Queue.\r
+ pp_failed\r
+ [out] A pointer to the head of the list that holds the failed WRs.\r
+ If all the entries provided are posted with the CI, then this parameter\r
+ would be set to NULL.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> Any unsuccessful status indicates the status of the first failed request.\r
+\r
+ IB_SUCCESS\r
+ All the work requests are completed successfully\r
+ IB_INVALID_QP_HANDLE\r
+ The qp_handle supplied is invalid.\r
+ IB_INSUFFICIENT_RESOURCES\r
+ Insufficient resources to complete the request.\r
+ There are no more work elements in the channel interface to\r
+ process this request, and the total outstanding work request has\r
+ been exceeded.\r
+ IB_INVALID_WR_TYPE\r
+ The work request type was not valid.\r
+ IB_INVALID_QP_STATE\r
+ The queue pair is either in Reset, Init, RTR or Error state.\r
+ IB_INVALID_MAX_SGE\r
+ The work request has too many scatter gather elements than what the\r
+ QP is configured.\r
+ IB_UNSUPPORTED\r
+ Atomics or Reliable datagram request is not supported by this HCA.\r
+ IB_INVALID_ADDR_HANDLE\r
+ Address handle supplied in the work request is invalid.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> Please refer to Table 81 and Table 82 for allowed operation types\r
+ on different types of queue pairs, and the different modifiers\r
+ acceptable for the work request for different QP service types.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo1139">ci_post_recv</a>, <a href="#robo1138">ci_poll_cq</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1141">[Functions]<a name="Verbs2fci5fquery5fav">\r
+Verbs/ci_query_av</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="#robo39">parent</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ci_query_av</strong> -- Obtain the address vector associated with the handle\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef <a href="./ib_types_h.html#robo49">ib_api_status_t</a>\r
+(*<strong>ci_query_av</strong>) (\r
+ IN const ib_av_handle_t h_av,\r
+ OUT <a href="./ib_types_h.html#robo57">ib_av_attr_t</a> *p_av_attr,\r
+ OUT ib_pd_handle_t *ph_pd,\r
+ IN OUT <a href="#robo1153">ci_umv_buf_t</a> *p_umv_buf OPTIONAL );\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> This routine returns the address vector and pd_handle associated with the\r
+ av_handle.\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_av\r
+ [in] Handle to the address vector\r
+ p_av_attr\r
+ [out] address vector data referred by the av_handle\r
+ ph_pd\r
+ [out] pd handle associated with the av_handle\r
+ p_umv_buf\r
+ [in out] Vendor specific parameter to support user mode IO.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> IB_SUCCESS\r
+ returned values are valid\r
+ IB_INVALID_AV_HANDLE\r
+ The address vector handle was invalid\r
+ IB_INVALID_PARAMETER\r
+ One of the p_av_attr or ph_pd parameters was NULL.\r
+ IB_INVALID_PORT\r
+ Invalid port number passed in the Address <a href="../complib/cl_vector_h.html#robo36">Vector</a>.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo1115">ci_create_av</a>, <a href="#robo1131">ci_modify_av</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1142">[Functions]<a name="Verbs2fci5fquery5fca">\r
+Verbs/ci_query_ca</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="#robo39">parent</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ci_query_ca</strong> -- Query the attributes of the HCA\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef <a href="./ib_types_h.html#robo49">ib_api_status_t</a>\r
+(*<strong>ci_query_ca</strong>) (\r
+ IN const ib_ca_handle_t h_ca,\r
+ OUT <a href="./ib_types_h.html#robo60">ib_ca_attr_t</a> *p_ca_attr OPTIONAL,\r
+ IN OUT uint32_t *p_size,\r
+ IN OUT <a href="#robo1153">ci_umv_buf_t</a> *p_umv_buf OPTIONAL );\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> This routine retrieves vital information about this hca. It returns\r
+ necessary information about HCA guid, port guids, LID's assigned by\r
+ the master SM. Clients can use this information to communicate with the\r
+ Master SM node to perform path queries etc.\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_ca\r
+ [in] Handle returned by an earlier call to <a href="#robo1136">ci_open_ca</a>()\r
+ p_ca_attr\r
+ [out] CA attribute of this Host Channel adapter\r
+ p_size\r
+ [in/out] On input, this references the size of the data buffer\r
+ referenced by the p_ca_attr parameter.\r
+ On output, the number of bytes used or needed to copy all CA\r
+ attribute information.\r
+ p_umv_buf\r
+ [in out] Vendor specific parameter to support user mode IO.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> IB_SUCCESS\r
+ The attribute structure is returned completely.\r
+ IB_INSUFFICIENT_MEMORY\r
+ The size of the p_ca_attr buffer, specified through p_size, is\r
+ insufficient to store all of the CA attribute information.\r
+ IB_INVALID_CA_HANDLE\r
+ h_ca is invalid\r
+ IB_INVALID_PARAMETER\r
+ p_size is NULL.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> Users may obtain the size of the data buffer required to obtain the\r
+ CA attributes by calling this function with p_ca_attr set to NULL.\r
+ The channel interface will then return the necessary size in the\r
+ variable referenced by the p_size parameter. The caller can then allocate\r
+ exact size and call this routine again. No partial information is returned\r
+ if the size is not sufficient.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo1136">ci_open_ca</a>, <a href="#robo1132">ci_modify_ca</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1143">[Functions]<a name="Verbs2fci5fquery5fcq">\r
+Verbs/ci_query_cq</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="#robo39">parent</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ci_query_cq</strong> -- Query the number of entries configured for the CQ.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef <a href="./ib_types_h.html#robo49">ib_api_status_t</a>\r
+(*<strong>ci_query_cq</strong>) (\r
+ IN const ib_cq_handle_t h_cq,\r
+ OUT uint32_t *p_size,\r
+ IN OUT <a href="#robo1153">ci_umv_buf_t</a> *p_umv_buf OPTIONAL );\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> This routine returns the maximum number of entries this completion\r
+ queue is configured.\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_cq\r
+ [in] Handle to the completion queue\r
+ p_size\r
+ [out] The number of entries the completion queue is configured to hold\r
+ p_umv_buf\r
+ [in out] Vendor specific parameter to support user mode IO.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> IB_SUCCESS\r
+ The call completed successfully, and the returned values are valid\r
+ IB_INVALID_CQ_HANDLE\r
+ The cq_handle passed is invalid.\r
+ IB_INVALID_PARAMETER\r
+ one of the parameters was NULL.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo1116">ci_create_cq</a>, <a href="#robo1150">ci_resize_cq</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1144">[Functions]<a name="Verbs2fci5fquery5fmr">\r
+Verbs/ci_query_mr</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="#robo39">parent</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ci_query_mr</strong> -- Query attributes of a registered memory region\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef <a href="./ib_types_h.html#robo49">ib_api_status_t</a>\r
+(*<strong>ci_query_mr</strong>) (\r
+ IN const ib_mr_handle_t h_mr,\r
+ OUT <a href="./ib_types_h.html#robo159">ib_mr_attr_t</a>* const p_mr_query );\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> This routine retrieves the memory region attributed of a\r
+ registered memory region. The memory handle could have been\r
+ obtained via <a href="#robo1147">ci_register_mr</a> or <a href="#robo1148">ci_register_pmr</a>.\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_mr\r
+ [in] Memory handle for which the attributes need to be retrieved.\r
+ p_mr_query\r
+ [out] Attributes of the memory region associated with memory handle.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> IB_SUCCESS\r
+ The routine completed successfully and attributes returned\r
+ are valid.\r
+ IB_INVALID_MR_HANDLE\r
+ The memory handle is not valid.\r
+ IB_INVALID_PARAMETER\r
+ One of the input pointers was NULL.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> Invalid handle checks are a mere signature checks in kernel mode.\r
+ Drivers in kernel are expected to be good corporate citizens.\r
+ In user mode, proper ownership is determined before passing handles\r
+ down to kernel to protect from rogue applications.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo1147">ci_register_mr</a>, <a href="#robo1148">ci_register_pmr</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1145">[Functions]<a name="Verbs2fci5fquery5fmw">\r
+Verbs/ci_query_mw</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="#robo39">parent</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ci_query_mw</strong> -- Query memory window attributes for memory window handle\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef <a href="./ib_types_h.html#robo49">ib_api_status_t</a>\r
+(*<strong>ci_query_mw</strong>) (\r
+ IN const ib_mw_handle_t h_mw,\r
+ OUT ib_pd_handle_t *ph_pd,\r
+ OUT net32_t* const p_rkey,\r
+ IN OUT <a href="#robo1153">ci_umv_buf_t</a> *p_umv_buf OPTIONAL );\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> This routine retrieves the current R_KEY and protection domain\r
+ handle associated with this mw_handle.\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_mw\r
+ [in] Memory window handle whose attributes are being retrieved.\r
+ ph_pd\r
+ [out] Protection domain handle associated with this mw_handle\r
+ p_rkey\r
+ [out] Current R_KEY associated with this mw_handle.The verbs provider\r
+ is required to give this in the expected ordering on the wire. When\r
+ rkey's are exchanged between remote nodes, no swapping of this data\r
+ will be performed.\r
+ p_umv_buf\r
+ [in out] Vendor specific parameter to support user mode IO.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> IB_SUCCESS\r
+ The query operation completed successfully.\r
+ IB_INVALID_MW_HANDLE\r
+ mw_handle supplied is an invalid handle\r
+ IB_INVALID_PARAMETER\r
+ One of the pointers was not valid.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo1117">ci_create_mw</a>, <a href="#robo1112">ci_bind_mw</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1146">[Functions]<a name="Verbs2fci5fquery5fqp">\r
+Verbs/ci_query_qp</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="#robo39">parent</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ci_query_qp</strong> -- Query the current QP attributes\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef <a href="./ib_types_h.html#robo49">ib_api_status_t</a>\r
+(*<strong>ci_query_qp</strong>) (\r
+ IN const ib_qp_handle_t h_qp,\r
+ OUT <a href="./ib_types_h.html#robo205">ib_qp_attr_t</a>* const p_qp_attr,\r
+ IN OUT <a href="#robo1153">ci_umv_buf_t</a> *p_umv_buf OPTIONAL );\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> This routine queries the current attributes for the QP\r
+ corresponding to h_qp. The attributes are returned in p_query_attr.\r
+ Depending on the current state of the QP, some of the fields in the\r
+ attribute structure may not be valid.\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_qp\r
+ [in] Handle to the QP for which the attributes are being retrieved\r
+ p_qp_attr\r
+ [out] Pointer to the ib_qp_query_t structure where the current\r
+ attributes of the QP is returned.\r
+ p_umv_buf\r
+ [in out] Vendor specific parameter to support user mode IO.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> IB_SUCCESS\r
+ The values returned in p_qp_attr are valid.\r
+ IB_INVALID_QP_HANDLE\r
+ The h_qp supplied is not a valid handle.\r
+ IB_INVALID_PARAMETER\r
+ Parameter p_qp_attr is not valid.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo1118">ci_create_qp</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1147">[Functions]<a name="Verbs2fci5fregister5fmr">\r
+Verbs/ci_register_mr</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="#robo39">parent</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ci_register_mr</strong> -- Register a memory region with the HCA.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef <a href="./ib_types_h.html#robo49">ib_api_status_t</a>\r
+(*<strong>ci_register_mr</strong>) (\r
+ IN const ib_pd_handle_t h_pd,\r
+ IN const <a href="./ib_types_h.html#robo160">ib_mr_create_t</a>* const p_mr_create,\r
+ OUT net32_t* const p_lkey,\r
+ OUT net32_t* const p_rkey,\r
+ OUT ib_mr_handle_t* const ph_mr,\r
+ IN boolean_t um_call );\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> This routine registers a virtually contiguous region of memory with the\r
+ HCA. All memory regions that need to be used by the HCA must be registered\r
+ prior to use in data transfer operations. On successful completion\r
+ the region handle, lkey are returned. If remote access rights are specified\r
+ then the rkey is also returned.\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_pd\r
+ [in] Handle to the PD on which memory is being registered\r
+ p_mr_create\r
+ [in] Holds attributes for the region being registered. Look at\r
+ <a href="./ib_types_h.html#robo160">ib_mr_create_t</a> for more details.\r
+ p_lkey\r
+ [out] Local Key Attributes of the registered memory region\r
+ p_rkey\r
+ [out] Remote key of the registered memory region. The verbs provider\r
+ is required to give this in the expected ordering on the wire. When\r
+ rkey's are exchanged between remote nodes, no swapping of this data\r
+ will be performed.\r
+ ph_mr\r
+ [out] Handle to the registered memory region. This handle is used when\r
+ submitting work requests to refer to this region of memory.\r
+ um_call\r
+ [in] Boolean indicating whether the registration originated in user-mode.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> IB_SUCCESS\r
+ Registration with the adapter was successful.\r
+ IB_INSUFFICIENT_RESOURCES\r
+ Insufficient resources to satisfy request.\r
+ IB_INVALID_PARAMETER\r
+ One of the input pointers was NULL.\r
+ IB_INVALID_PD_HANDLE\r
+ Invalid mr_pdhandle\r
+ IB_INVALID_PERMISSION\r
+ Invalid access rights.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> In addition to registration, the routine also pins memory, so that the\r
+ physical page associated with the virtual address does not get swapped\r
+ out during the time the HCA is attempting to transfer data to this\r
+ address. If the memory is not pinned, this could lead to data-corruption\r
+ and unpredictable behavior by the operating environment.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo1121">ci_deregister_mr</a>, <a href="#robo1144">ci_query_mr</a>, <a href="#robo1148">ci_register_pmr</a>, <a href="#robo1133">ci_modify_mr</a>,\r
+ <a href="#robo1149">ci_register_smr</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1148">[Functions]<a name="Verbs2fci5fregister5fpmr">\r
+Verbs/ci_register_pmr</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="#robo39">parent</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ci_register_pmr</strong> -- Register a physical memory region with the HCA.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef <a href="./ib_types_h.html#robo49">ib_api_status_t</a>\r
+(*<strong>ci_register_pmr</strong>) (\r
+ IN const ib_pd_handle_t h_pd,\r
+ IN const <a href="./ib_types_h.html#robo187">ib_phys_create_t</a>*const p_pmr_create,\r
+ IN OUT uint64_t* const p_vaddr,\r
+ OUT net32_t* const p_lkey,\r
+ OUT net32_t* const p_rkey,\r
+ OUT ib_mr_handle_t* const ph_mr,\r
+ IN boolean_t um_call );\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> This routine registers an array of physical pages as a single virtually\r
+ contiguous region with the HCA. All memory regions that need to be used by\r
+ the HCA must be registered prior to use in data transfer operations.\r
+ On successful completion the region handle, lkey and rkey used for\r
+ local and remote access authentication are returned.\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_pd\r
+ [in] Handle to the PD on which memory is being registered\r
+ p_pmr_create\r
+ [in] Holds attributes for the region being registered.\r
+ p_vaddr\r
+ [in/out] On input, references the requested virtual address for the\r
+ start of the physical region. On output, references the actual\r
+ virtual address assigned to the registered region.\r
+ p_lkey\r
+ [out] Local key of the registered memory region\r
+ p_rkey\r
+ [out] Remote key of the registered memory region.The verbs provider\r
+ is required to give this in the expected ordering on the wire. When\r
+ rkey's are exchanged between remote nodes, no swapping of this data\r
+ will be performed.\r
+ ph_mr\r
+ [out] Handle to the registered memory region. This handle is used when\r
+ submitting work requests to refer to this region of memory.\r
+ um_call\r
+ [in] Boolean indicating whether the registration originated in user-mode.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> IB_SUCCESS\r
+ Registration with the adapter was successful.\r
+ IB_INSUFFICIENT_RESOURCES\r
+ Insufficient resources to satisfy request.\r
+ IB_INVALID_PARAMETER\r
+ Invalid length or address in p_mr_create. Also returned if the page_size\r
+ passed is not one of supported page sizes by the HCA.\r
+ IB_INVALID_PD_HANDLE\r
+ Invalid mr_pdhandle\r
+ IB_INVALID_PERMISSION\r
+ Invalid access rights.\r
+</pre>\r
+</span><p><strong>PORTABILITY</strong></p>\r
+<span class="PORTABILITY"><pre> Kernel Mode only\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> Remote and Atomic access settings in ib_access_ctrl_t, requires local\r
+ write access to be enabled, otherwise IB_INVALID_PERMISSION is returned.\r
+ The p_vaddr returned could be different from the vaddr specified in\r
+ p_pmr_create. If the requested virtual addr offset in a page does not\r
+ match, the channel interface is free to pick and assign a pseudo virtual\r
+ address. The address constructed is not a system virtual address, and only\r
+ meaningful to the adapter to which this registration is targeted.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo1121">ci_deregister_mr</a>, <a href="#robo1144">ci_query_mr</a>, <a href="#robo1147">ci_register_mr</a>, <a href="#robo1133">ci_modify_mr</a>,\r
+ <a href="#robo1149">ci_register_smr</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1149">[Functions]<a name="Verbs2fci5fregister5fsmr">\r
+Verbs/ci_register_smr</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="#robo39">parent</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ci_register_smr</strong> -- Register a memory region using same physical pages as\r
+ an existing memory region.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef <a href="./ib_types_h.html#robo49">ib_api_status_t</a>\r
+(*<strong>ci_register_smr</strong>) (\r
+ IN const ib_mr_handle_t h_mr,\r
+ IN const ib_pd_handle_t h_pd,\r
+ IN const <a href="./ib_types_h.html#robo45">ib_access_t</a> access_ctrl,\r
+ IN OUT uint64_t* const p_vaddr,\r
+ OUT net32_t* const p_lkey,\r
+ OUT net32_t* const p_rkey,\r
+ OUT ib_mr_handle_t* const ph_mr,\r
+ IN boolean_t um_call );\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> This routine registers a new memory region but shares the same set of\r
+ physical pages associated with memory handle. For user mode applications\r
+ the process *must* be owning memory handle for this call to be successful.\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_mr\r
+ [in] Handle to memory region whose physical pages are being registered\r
+ by this shared registration.\r
+ h_pd\r
+ [in] Handle to the PD on which memory is being registered\r
+ access_ctrl\r
+ [in] Memory access restrictions on the registered memory.\r
+ p_vaddr\r
+ [in/out] On input, references the requested virtual address for the\r
+ start of the physical region. On output, references the actual\r
+ virtual address assigned to the registered region.\r
+ p_lkey\r
+ [out] L_KEY for this memory region.\r
+ p_rkey\r
+ [out] R_KEY for this memory region. This is valid only when remote\r
+ access is enabled for this region. The verbs provider\r
+ is required to give this in the expected ordering on the wire. When\r
+ rkey's are exchanged between remote nodes, no swapping of this data\r
+ will be performed.\r
+ ph_mr\r
+ [out] Handle to the registered memory region. This handle is used when\r
+ submitting work requests to refer to this region of memory.\r
+ um_call\r
+ [in] Boolean indicating whether the registration originated in user-mode.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> IB_SUCCESS\r
+ The call is successful and a new region handle returned is valid.\r
+ IB_INVALID_MR_HANDLE\r
+ mr_handle is invalid.\r
+ IB_INVALID_PD_HANDLE\r
+ mr_pdhandle supplied is invalid.\r
+ IB_INVALID_PERMISSION\r
+ Invalid access rights passed in mr_access.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> ISSUE: how to deal with <a href="#robo1121">ci_deregister_mr</a>, <a href="#robo1133">ci_modify_mr</a>, <a href="#robo1134">ci_modify_pmr</a>\r
+ should we treat them as memory windows and fail those if a shared region\r
+ was registered?\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo1147">ci_register_mr</a>, <a href="#robo1148">ci_register_pmr</a>, <a href="#robo1133">ci_modify_mr</a>, <a href="#robo1134">ci_modify_pmr</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1150">[Functions]<a name="Verbs2fci5fresize5fcq">\r
+Verbs/ci_resize_cq</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="#robo39">parent</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ci_resize_cq</strong> -- Modify the maximum number of entries the CQ could hold.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef <a href="./ib_types_h.html#robo49">ib_api_status_t</a>\r
+(*<strong>ci_resize_cq</strong>) (\r
+ IN const ib_cq_handle_t h_cq,\r
+ IN OUT uint32_t* const p_size,\r
+ IN OUT <a href="#robo1153">ci_umv_buf_t</a> *p_umv_buf OPTIONAL );\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> This routine allows the caller to modify the maximum number of entries\r
+ the CQ could hold. It is possible to resize the CQ while there are\r
+ entries in the CQ, and with outstanding work requests that will generate\r
+ completions. If the entries in the CQ are more than the new size which is\r
+ being created, an error is returned.\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_cq\r
+ [in] Completion Queue handle\r
+ p_size\r
+ [in out] This parameter indicates the requested size of the CQ. On\r
+ successful completion, the current size allocated is returned in\r
+ this same parameter.\r
+ p_umv_buf\r
+ [in out] Vendor specific parameter to support user mode IO.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> IB_SUCCESS\r
+ The resize operation was successful.\r
+ IB_INVALID_CQ_HANDLE\r
+ The CQ handle is invalid.\r
+ IB_INSUFFICIENT_RESOURCES\r
+ Insufficient resources to complete request.\r
+ IB_INVALID_PARAMETER\r
+ one of the parameters was NULL.\r
+ IB_INVALID_CQ_SIZE\r
+ Requested CQ Size is not supported.\r
+ IB_OVERFLOW\r
+ The CQ has more entries than the resize request. The CQ is not\r
+ modified, and old entries still exist.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> If the consumer wishes to resize the CQ smaller than originally created,\r
+ it is recommended to retrieve all entries before performing a CQ resize\r
+ operation. It is left to the verb implementer on resize operations, to\r
+ actually reduce the entries, or leave it as it. The consumer must make no\r
+ assumptions on the successful completion, and should only rely on the\r
+ size returned in p_size.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo1116">ci_create_cq</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1151">[Functions]<a name="Verbs2fci5fum5fclose5fca5ft">\r
+Verbs/ci_um_close_ca_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="#robo39">parent</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ci_um_close_ca_t</strong> -- Close user-mode access to adapter via this h_ca\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef void\r
+(*<strong>ci_um_close_ca_t</strong>) (\r
+ IN ib_ca_handle_t h_ca,\r
+ IN ib_ca_handle_t h_um_ca );\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> This routine is called when the client no longer wishes to use HCA\r
+ resources obtained via this h_ca. All resources allocated as part\r
+ this handle during the <a href="#robo1152">ci_um_open_ca</a> are destroyed.\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_ca\r
+ [in] CA handle returned via the <a href="#robo1136">ci_open_ca</a>() call.\r
+ h_um_ca\r
+ [in] CA handle returned via the <a href="#robo1152">ci_um_open_ca</a>() call.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> This funtion does not return a value.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This call is invoked from the context of a UM application when such an\r
+ appliation closes the HCA in user-mode.\r
+\r
+ Resources allocated during the <a href="#robo1152">ci_um_open_ca</a>() are deallocated.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo1152">ci_um_open_ca</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1152">[Functions]<a name="Verbs2fci5fum5fopen5fca">\r
+Verbs/ci_um_open_ca</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="#robo39">parent</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ci_um_open_ca</strong> -- Create a CA context for use by user-mode processes.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef <a href="./ib_types_h.html#robo49">ib_api_status_t</a>\r
+(*ci_um_open_ca_t) (\r
+ IN const ib_ca_handle_t h_ca,\r
+ IN OUT <a href="#robo1153">ci_umv_buf_t</a>* const p_umv_buf,\r
+ OUT ib_ca_handle_t* const ph_um_ca );\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> This routine is used called on behalf of a user-mode application to\r
+ establish a per-CA context in user-mode.\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_ca\r
+ [in] Handle returned by an earlier call to <a href="#robo1136">ci_open_ca</a>()\r
+ p_umv_buf\r
+ [in/out] Vendor specific parameter to support user mode IO.\r
+ ph_um_ca\r
+ [out] Handle to pass into ci_um_close_ca call to free any kernel\r
+ resources allocated for the user-mode appliation.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> IB_SUCCESS\r
+ The user-mode context information is returned successfully.\r
+ IB_INSUFFICIENT_MEMORY\r
+ The size of the p_ca_attr buffer, specified through p_size, is\r
+ insufficient to store all of the CA attribute information.\r
+ IB_INVALID_CA_HANDLE\r
+ h_ca is invalid\r
+ IB_INVALID_PARAMETER\r
+ The p_umv_buf parameters are insufficient to complete the request.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo1142">ci_query_ca</a>, <a href="#robo1132">ci_modify_ca</a>, <a href="#robo1113">ci_close_ca</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1153">[Structures]<a name="Verbs2fci5fumv5fbuf5ft">\r
+Verbs/ci_umv_buf_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="#robo39">parent</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ci_umv_buf_t</strong> -- Vendor specific structure to facilitate user mode IO\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> This structure is provided to assist the vendor specific user mode\r
+ library to exchange information with its kernel mode driver. The\r
+ user mode InfiniBand(tm) Access Layer will call the vendor specific\r
+ module before a call is made to the kernel mode driver. The kernel mode\r
+ driver is expected to know the format and data in the p_inout_buf,\r
+ and copy any necessary data that must be handed to the user mode\r
+ vendor library.\r
+</pre>\r
+</span><p><strong>PURPOSE</strong></p>\r
+<span class="PURPOSE"><pre> command\r
+ A command code that is understood by the vendor specific kernel\r
+ mode driver.\r
+ p_inout_buf\r
+ The user mode component of the vendor specific library allocates\r
+ this memory and passes information in this buffer. vendor is expected\r
+ to set both the input and output buffer sizes appropriately.\r
+ This information is required since the kernel mode proxy that passes\r
+ this buffer to the kernel mode vendor specific library will copy the\r
+ content of this buffer to a kernel mode buffer. The kernel mode\r
+ vendor specific driver would copy the data that needs to be returned\r
+ to the user mode component, and set the output size appropriately\r
+ so that the proxy can now copy the data back to user mode buffer.\r
+\r
+ In the Infiniband Access Layer, it is important to know the\r
+ usage of umv_buf and whether the contents of the p_inout_buf\r
+ can have embedded user-mode pointers. When invoked from an\r
+ arbitrary thread context, Vendor driver can NOT access user-mode\r
+ pointers of a user-process.\r
+ input_size\r
+ Size of the input buffer, must be set by the user mode vendor\r
+ specific library.\r
+ output_size\r
+ Size of the output buffer. Must be set by the user mode component\r
+ to specify the maximum size of the data expected from its kernel\r
+ mode driver. The kernel mode driver would set the size to the exact\r
+ size that needs to be returned to its user mode counterpart.\r
+ status\r
+ Indicates the status of the operation from the kernel mode vendor\r
+ specific driver. The caller is supposed to initialize it appropriately\r
+ to identify if an operation succeded, or failed. For e.g. when\r
+ the user mode library is called after a resource creation, the user\r
+ mode vendor specific code must be able to identify if there is\r
+ post processing required, or if any resource allocation failed.\r
+</pre>\r
+</span><p><strong>SOURCE</strong></p>\r
+<span class="SOURCE"><pre>typedef struct _umv_buf\r
+{\r
+ uint32_t command;\r
+ uint32_t status;\r
+ uint32_t input_size;\r
+ uint32_t output_size;\r
+ void* __ptr64 p_inout_buf;\r
+} <strong>ci_umv_buf_t</strong>;\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1154">[Functions]<a name="Verbs2fci5fvendor5fcall">\r
+Verbs/ci_vendor_call</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="#robo39">parent</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ci_vendor_call</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Performs a vendor specific CA interface function call.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef <a href="./ib_types_h.html#robo49">ib_api_status_t</a>\r
+(*<strong>ci_vendor_call</strong>)(\r
+ IN const ib_ca_handle_t h_ca,\r
+ IN const void* __ptr64* const handle_array OPTIONAL,\r
+ IN uint32_t num_handles,\r
+ IN <a href="./ib_types_h.html#robo66">ib_ci_op_t</a>* const p_ci_op,\r
+ IN OUT <a href="#robo1153">ci_umv_buf_t</a> *p_umv_buf OPTIONAL );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_ca\r
+ [in] A handle to an opened CA.\r
+\r
+ handle_array\r
+ [in] This parameter references an array containing handles of\r
+ existing CA resources. This array should contain all of the\r
+ handles specified in the vendor specific data provided with this\r
+ call. All handles specified through this array are validated by\r
+ the verbs provider driver to ensure that the number and type of\r
+ handles are correct for the requested operation.\r
+\r
+ num_handles\r
+ [in] The number of the handles in handle array. This count is\r
+ verified by the access layer.\r
+\r
+ p_ci_op\r
+ [in] A reference to the vendor specific CA interface data\r
+ structure containing the operation parameters.\r
+\r
+ p_umv_buf\r
+ [in out] Vendor specific parameter to support user mode IO.\r
+\r
+ RETURN VALUES\r
+ IB_SUCCESS\r
+ The operation was successful.\r
+\r
+ IB_INVALID_CA_HANDLE\r
+ The CA handle was invalid.\r
+\r
+ IB_INVALID_PARAMETER\r
+ A reference to the vendor specific data was not provided.\r
+\r
+ IB_INVALID_HANDLE\r
+ A handle specified in the handle array was invalid.\r
+\r
+ IB_INSUFFICIENT_MEMORY\r
+ There was insufficient memory to perform the operation.\r
+\r
+ IB_ERROR\r
+ An error occurred while processing the command. Additional\r
+ error information is provided in the p_ci_op status field.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This routine performs a vendor specific CA interface function call.\r
+ The p_ci_op structure provides a means to pass vendor specific data to\r
+ the verbs provider driver. If the vendor specific data contains handles,\r
+ the client should provide the optional handle array that lists all of\r
+ all of the handles specified in the vendor specific data. The handles\r
+ in the handle array are restricted to the following types: ib_ca_handle_t,\r
+ ib_pd_handle_t, ib_cq_handle_t, ib_av_handle_t, ib_qp_handle_t,\r
+ ib_mr_handle_t, or ib_mw_handle_t\r
+ The contents of the handle array are verified by the\r
+ access layer and the verbs provider driver.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo1136">ci_open_ca</a>, <a href="#robo1109">ci_allocate_pd</a>, <a href="#robo1115">ci_create_av</a>, <a href="#robo1116">ci_create_cq</a>,\r
+ <a href="#robo1118">ci_create_qp</a>, <a href="#robo1147">ci_register_mr</a>, <a href="#robo1148">ci_register_pmr</a>,\r
+ <a href="#robo1149">ci_register_smr</a>, <a href="#robo1117">ci_create_mw</a>, <a href="./ib_types_h.html#robo66">ib_ci_op_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1156">[Functions]<a name="Verbs2fib5fderegister5fca">\r
+Verbs/ib_deregister_ca</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="#robo39">parent</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_deregister_ca</strong> -- Inform the IB Access Layer that this HCA is no longer available\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_EXPORT <a href="./ib_types_h.html#robo49">ib_api_status_t</a>\r
+<strong>ib_deregister_ca</strong> (\r
+ IN const net64_t ca_guid );\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> This routine is called by the HCA driver when this HCA would no longer be\r
+ available for services. The access layer is expected to return all resources\r
+ back to the HCA driver, and perform a <a href="#robo1113">ci_close_ca</a> on this interface.\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> ca_guid\r
+ [in] GUID of the HCA that is being removed.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> IB_SUCCESS\r
+ The deregistration is successful.\r
+\r
+ IB_NOT_FOUND\r
+ No HCA with the specified GUID is registered.\r
+\r
+ IB_BUSY\r
+ The HCA is still in use and cannot be released.\r
+</pre>\r
+</span><p><strong>PORTABILITY</strong></p>\r
+<span class="PORTABILITY"><pre> Kernel Mode only\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo1158">ib_register_ca</a>, <a href="#robo1129">ci_interface_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1158">[Functions]<a name="Verbs2fib5fregister5fca">\r
+Verbs/ib_register_ca</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="#robo39">parent</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_register_ca</strong> -- Inform the IB Access Layer about a new HCA\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_EXPORT <a href="./ib_types_h.html#robo49">ib_api_status_t</a>\r
+<strong>ib_register_ca</strong> (\r
+ IN const <a href="#robo1129">ci_interface_t</a> *p_ci );\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> This routine is called by a HCA kernel mode driver to inform the\r
+ IB Access Layer about a new HCA that is ready for use. It is expected\r
+ that the Access Layer could immediatly turn around and call for services\r
+ even before the call returns back the HCA driver code. The HCA driver\r
+ must initialize all resources and be ready to service any calls before adding\r
+ its services to the IB Access Layer.\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_ci\r
+ [in] Pointer to the <a href="#robo1129">ci_interface_t</a> structure that has the function\r
+ vector to support verbs functionality.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> IB_SUCCESS\r
+ The registration is successful.\r
+\r
+ IB_INVALID_PARAMETER\r
+ A reference to the CI interface structure was not provided.\r
+\r
+ IB_INSUFFICIENT_RESOURCES\r
+ Insufficient memory to satisfy resource requirements.\r
+\r
+ IB_DUPLICATE_CA\r
+ HCA GUID is already registered with the IB Access Layer\r
+</pre>\r
+</span><p><strong>PORTABILITY</strong></p>\r
+<span class="PORTABILITY"><pre> Kernel Mode only\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo1156">ib_deregister_ca</a>, <a href="#robo1129">ci_interface_t</a>\r
+</pre>\r
+</span>\r
+</body>\r
+</html>\r
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">\r
+<html>\r
+<head>\r
+<link rel="stylesheet" href="../robodoc.css" type="text/css">\r
+<title>./inc_doc/iba/ib_types_h.html</title>\r
+<!-- Source: ./inc/iba/ib_types.h -->\r
+<!-- Generated with ROBODoc Version 4.99.22 (Mar 6 2006) -->\r
+</head>\r
+<body bgcolor="#FFFFFF">\r
+<a name="robo_top_of_doc">Generated from ./inc/iba/ib_types.h</a> with <a href="http://sourceforge.net/projects/robodoc/">ROBODoc</a> v4.99.22 on Sun Apr 16 2006 17:39:20\r
+<br />\r
+<hr />\r
+\r
+<h2><a name="robo40">[Modules]<a name="IBA20Base2fConstants">\r
+IBA Base/Constants</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_modules.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>Constants</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The following constants are used throughout the IBA code base.\r
+\r
+ Definitions are from the InfiniBand Architecture Specification v1.1\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo41">[Modules]<a name="IBA20Base2fType20Definitions">\r
+IBA Base/Type Definitions</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_modules.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> Type Definitions\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Definitions are from the InfiniBand Architecture Specification v1.1\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo45">[Definitions]<a name="Access20Layer2fib5faccess5ft">\r
+Access Layer/ib_access_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_access_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Indicates the type of access is permitted on resources such as QPs,\r
+ memory regions and memory windows.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef uint32_t <strong>ib_access_t</strong>;\r
+#define IB_AC_RDMA_READ 0x00000001\r
+#define IB_AC_RDMA_WRITE 0x00000002\r
+#define IB_AC_ATOMIC 0x00000004\r
+#define IB_AC_LOCAL_WRITE 0x00000008\r
+#define IB_AC_MW_BIND 0x00000010\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> Users may combine access rights using a bit-wise or operation to specify\r
+ additional access. For example: IB_AC_RDMA_READ | IB_AC_RDMA_WRITE grants\r
+ RDMA read and write access.\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo49">[Definitions]<a name="Access20Layer2fib5fapi5fstatus5ft">\r
+Access Layer/ib_api_status_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_api_status_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Function return codes indicating the success or failure of an API call.\r
+ Note that success is indicated by the return value IB_SUCCESS, which\r
+ is always zero.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> IB_VERBS_PROCESSING_DONE is used by UVP library to terminate a verbs call\r
+ in the pre-ioctl step itself.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef enum _<strong>ib_api_status_t</strong>\r
+{\r
+ IB_SUCCESS,\r
+ IB_INSUFFICIENT_RESOURCES,\r
+ IB_INSUFFICIENT_MEMORY,\r
+ IB_INVALID_PARAMETER,\r
+ IB_INVALID_SETTING,\r
+ IB_NOT_FOUND,\r
+ IB_TIMEOUT,\r
+ IB_CANCELED,\r
+ IB_INTERRUPTED,\r
+ IB_INVALID_PERMISSION,\r
+ IB_UNSUPPORTED,\r
+ IB_OVERFLOW,\r
+ IB_MAX_MCAST_QPS_REACHED,\r
+ IB_INVALID_QP_STATE,\r
+ IB_INVALID_APM_STATE,\r
+ IB_INVALID_PORT_STATE,\r
+ IB_INVALID_STATE,\r
+ IB_RESOURCE_BUSY,\r
+ IB_INVALID_PKEY,\r
+ IB_INVALID_LKEY,\r
+ IB_INVALID_RKEY,\r
+ IB_INVALID_MAX_WRS,\r
+ IB_INVALID_MAX_SGE,\r
+ IB_INVALID_CQ_SIZE,\r
+ IB_INVALID_SERVICE_TYPE,\r
+ IB_INVALID_GID,\r
+ IB_INVALID_LID,\r
+ IB_INVALID_GUID,\r
+ IB_INVALID_CA_HANDLE,\r
+ IB_INVALID_AV_HANDLE,\r
+ IB_INVALID_CQ_HANDLE,\r
+ IB_INVALID_QP_HANDLE,\r
+ IB_INVALID_PD_HANDLE,\r
+ IB_INVALID_MR_HANDLE,\r
+ IB_INVALID_MW_HANDLE,\r
+ IB_INVALID_MCAST_HANDLE,\r
+ IB_INVALID_CALLBACK,\r
+ IB_INVALID_AL_HANDLE, /* InfiniBand Access Layer */\r
+ IB_INVALID_HANDLE, /* InfiniBand Access Layer */\r
+ IB_ERROR, /* InfiniBand Access Layer */\r
+ IB_REMOTE_ERROR, /* Infiniband Access Layer */\r
+ IB_VERBS_PROCESSING_DONE, /* See Notes above */\r
+ IB_INVALID_WR_TYPE,\r
+ IB_QP_IN_TIMEWAIT,\r
+ IB_INVALID_PORT,\r
+ IB_NOT_DONE,\r
+ IB_INVALID_INDEX,\r
+ IB_NO_MATCH,\r
+ IB_PENDING,\r
+ IB_UNKNOWN_ERROR /* ALWAYS LAST ENUM VALUE! */\r
+\r
+} <strong>ib_api_status_t</strong>;\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo50">[Definitions]<a name="Access20Layer2fib5fapm5fstate5ft">\r
+Access Layer/ib_apm_state_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_apm_state_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The current automatic path migration state of a queue pair\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef enum _ib_apm_state\r
+{\r
+ IB_APM_MIGRATED = 1,\r
+ IB_APM_REARM,\r
+ IB_APM_ARMED\r
+\r
+} <strong>ib_apm_state_t</strong>;\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo53">[Definitions]<a name="Access20Layer2fib5fapr5fstatus5ft">\r
+Access Layer/ib_apr_status_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_apr_status_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Automatic path migration status information.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef uint8_t <strong>ib_apr_status_t</strong>;\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="./ib_al_h.html#robo69">ib_cm_apr</a>, <a href="./ib_al_h.html#robo70">ib_cm_apr_rec_t</a>\r
+</pre>\r
+</span><p><strong>SOURCE</strong></p>\r
+<span class="SOURCE"><pre>#define IB_AP_SUCCESS 0\r
+#define IB_AP_INVALID_COMM_ID 1\r
+#define IB_AP_UNSUPPORTED 2\r
+#define IB_AP_REJECT 3\r
+#define IB_AP_REDIRECT 4\r
+#define IB_AP_IS_CURRENT 5\r
+#define IB_AP_INVALID_QPN 6\r
+#define IB_AP_INVALID_LID 7\r
+#define IB_AP_INVALID_GID 8\r
+#define IB_AP_INVALID_FLOW_LBL 9\r
+#define IB_AP_INVALID_TCLASS 10\r
+#define IB_AP_INVALID_HOP_LIMIT 11\r
+#define IB_AP_INVALID_PKT_RATE 12\r
+#define IB_AP_INVALID_SL 13\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo56">[Definitions]<a name="Access20Layer2fib5fatomic5ft">\r
+Access Layer/ib_atomic_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_atomic_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Indicates atomicity levels supported by an adapter.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef enum _<strong>ib_atomic_t</strong>\r
+{\r
+ IB_ATOMIC_NONE,\r
+ IB_ATOMIC_LOCAL,\r
+ IB_ATOMIC_GLOBAL\r
+\r
+} <strong>ib_atomic_t</strong>;\r
+</pre>\r
+</span><p><strong>VALUES</strong></p>\r
+<span class="VALUES"><pre> IB_ATOMIC_NONE\r
+ Atomic operations not supported.\r
+\r
+ IB_ATOMIC_LOCAL\r
+ Atomic operations guaranteed between QPs of a single CA.\r
+\r
+ IB_ATOMIC_GLOBAL\r
+ Atomic operations are guaranteed between CA and any other entity\r
+ in the system.\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo57">[Structures]<a name="Access20Layer2fib5fav5fattr5ft">\r
+Access Layer/ib_av_attr_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_av_attr_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> IBA address vector.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef struct _ib_av_attr\r
+{\r
+ uint8_t port_num;\r
+\r
+ uint8_t sl;\r
+ <a href="#robo893">ib_net16_t</a> dlid;\r
+\r
+ boolean_t grh_valid;\r
+ <a href="#robo859">ib_grh_t</a> grh;\r
+ uint8_t static_rate;\r
+ uint8_t path_bits;\r
+\r
+ struct _av_conn\r
+ {\r
+ uint8_t path_mtu;\r
+ uint8_t local_ack_timeout;\r
+ uint8_t seq_err_retry_cnt;\r
+ uint8_t rnr_retry_cnt;\r
+\r
+ } conn;\r
+\r
+} <strong>ib_av_attr_t</strong>;\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo856">ib_gid_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo59">[Structures]<a name="Access20Layer2fib5fbind5fwr5ft">\r
+Access Layer/ib_bind_wr_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_bind_wr_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Information used to submit a memory window bind work request to the send\r
+ queue of a queue pair.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef struct _ib_bind_wr\r
+{\r
+ uint64_t wr_id;\r
+ <a href="#robo248">ib_send_opt_t</a> send_opt;\r
+\r
+ ib_mr_handle_t h_mr;\r
+ <a href="#robo45">ib_access_t</a> access_ctrl;\r
+ net32_t current_rkey;\r
+\r
+ <a href="#robo148">ib_local_ds_t</a> local_ds;\r
+\r
+} <strong>ib_bind_wr_t</strong>;\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> wr_id\r
+ A 64-bit work request identifier that is returned to the consumer\r
+ as part of the work completion.\r
+\r
+ send_opt\r
+ Optional send control parameters.\r
+\r
+ h_mr\r
+ Handle to the memory region to which this window is being bound.\r
+\r
+ access_ctrl\r
+ Access rights for this memory window.\r
+\r
+ current_rkey\r
+ The current rkey assigned to this window for remote access.\r
+\r
+ local_ds\r
+ A reference to a local data segment used by the bind operation.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo248">ib_send_opt_t</a>, <a href="#robo45">ib_access_t</a>, <a href="#robo148">ib_local_ds_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo60">[Structures]<a name="Access20Layer2fib5fca5fattr5ft">\r
+Access Layer/ib_ca_attr_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_ca_attr_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Information about a channel adapter.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef struct _ib_ca_attr\r
+{\r
+ <a href="#robo895">ib_net64_t</a> ca_guid;\r
+\r
+ uint32_t vend_id;\r
+ uint16_t dev_id;\r
+ uint16_t revision;\r
+ uint64_t fw_ver;\r
+\r
+ /*\r
+ * Total size of the ca attributes in bytes\r
+ */\r
+ uint32_t size;\r
+ uint32_t max_qps;\r
+ uint32_t max_wrs;\r
+\r
+ uint32_t max_sges;\r
+ uint32_t max_rd_sges;\r
+\r
+ uint32_t max_cqs;\r
+ uint32_t max_cqes;\r
+\r
+ uint32_t max_pds;\r
+\r
+ uint32_t init_regions;\r
+ uint64_t init_region_size;\r
+\r
+ uint32_t init_windows;\r
+ uint32_t max_addr_handles;\r
+\r
+ uint32_t max_partitions;\r
+\r
+ <a href="#robo56">ib_atomic_t</a> atomicity;\r
+\r
+ uint8_t max_qp_resp_res;\r
+ uint8_t max_resp_res;\r
+\r
+ uint8_t max_qp_init_depth;\r
+\r
+ uint32_t max_ipv6_qps;\r
+ uint32_t max_ether_qps;\r
+\r
+ uint32_t max_mcast_grps;\r
+ uint32_t max_mcast_qps;\r
+ uint32_t max_qps_per_mcast_grp;\r
+\r
+ /*\r
+ * local_ack_delay:\r
+ * Specifies the maximum time interval between the local CA receiving\r
+ * a message and the transmission of the associated ACK or NAK.\r
+ *\r
+ * timeout = 4.096 microseconds * 2^local_ack_delay\r
+ */\r
+ uint8_t local_ack_delay;\r
+\r
+ boolean_t bad_pkey_ctr_support;\r
+ boolean_t bad_qkey_ctr_support;\r
+ boolean_t raw_mcast_support;\r
+ boolean_t apm_support;\r
+ boolean_t av_port_check;\r
+ boolean_t change_primary_port;\r
+ boolean_t modify_wr_depth;\r
+ boolean_t current_qp_state_support;\r
+ boolean_t shutdown_port_capability;\r
+ boolean_t init_type_support;\r
+ boolean_t port_active_event_support;\r
+ boolean_t system_image_guid_support;\r
+ boolean_t hw_agents;\r
+\r
+ <a href="#robo895">ib_net64_t</a> system_image_guid;\r
+\r
+ uint32_t num_page_sizes;\r
+ uint8_t num_ports;\r
+\r
+ uint32_t* __ptr64 p_page_size;\r
+ <a href="#robo200">ib_port_attr_t</a>* __ptr64 p_port_attr;\r
+\r
+} <strong>ib_ca_attr_t</strong>;\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> ca_guid\r
+ GUID for this adapter.\r
+\r
+ vend_id\r
+ IEEE vendor ID for this adapter\r
+\r
+ dev_id\r
+ Device ID of this adapter. (typically from PCI device ID)\r
+\r
+ revision\r
+ Revision ID of this adapter\r
+\r
+ fw_ver\r
+ Device Firmware version.\r
+\r
+ size\r
+ Total size in bytes for the HCA attributes. This size includes total\r
+ size required for all the variable members of the structure. If a\r
+ vendor requires to pass vendor specific fields beyond this structure,\r
+ the HCA vendor can choose to report a larger size. If a vendor is\r
+ reporting extended vendor specific features, they should also provide\r
+ appropriate access functions to aid with the required interpretation.\r
+\r
+ max_qps\r
+ Maximum number of QP's supported by this HCA.\r
+\r
+ max_wrs\r
+ Maximum number of work requests supported by this HCA.\r
+\r
+ max_sges\r
+ Maximum number of scatter gather elements supported per work request.\r
+\r
+ max_rd_sges\r
+ Maximum number of scatter gather elements supported for READ work\r
+ requests for a Reliable Datagram QP. This value must be zero if RD\r
+ service is not supported.\r
+\r
+ max_cqs\r
+ Maximum number of Completion Queues supported.\r
+\r
+ max_cqes\r
+ Maximum number of CQ elements supported per CQ.\r
+\r
+ max_pds\r
+ Maximum number of protection domains supported.\r
+\r
+ init_regions\r
+ Initial number of memory regions supported. These are only informative\r
+ values. HCA vendors can extended and grow these limits on demand.\r
+\r
+ init_region_size\r
+ Initial limit on the size of the registered memory region.\r
+\r
+ init_windows\r
+ Initial number of window entries supported.\r
+\r
+ max_addr_handles\r
+ Maximum number of address handles supported.\r
+\r
+ max_partitions\r
+ Maximum number of partitions supported.\r
+\r
+ atomicity\r
+ Indicates level of atomic operations supported by this HCA.\r
+\r
+ max_qp_resp_res\r
+ Maximum limit on number of responder resources for incomming RDMA\r
+ operations on QPs.\r
+\r
+ max_resp_res\r
+ Maximum number of responder resources per HCA, with this HCA used as\r
+ the target.\r
+\r
+ max_qp_init_depth\r
+ Maximimum initiator depth per QP for initiating RDMA reads and\r
+ atomic operations.\r
+\r
+ max_ipv6_qps\r
+ max_ether_qps\r
+ Maximum number of IPV6 and raw ether QP's supported by this HCA.\r
+\r
+ max_mcast_grps\r
+ Maximum number of multicast groups supported.\r
+\r
+ max_mcast_qps\r
+ Maximum number of QP's that can support multicast operations.\r
+\r
+ max_qps_per_mcast_grp\r
+ Maximum number of multicast QP's per multicast group.\r
+\r
+ local_ack_delay\r
+ Specifies the maximum time interval between the local CA receiving\r
+ a message and the transmission of the associated ACK or NAK.\r
+ timeout = 4.096 microseconds * 2^local_ack_delay\r
+\r
+ bad_pkey_ctr_support\r
+ bad_qkey_ctr_support\r
+ Indicates support for the bad pkey and qkey counters.\r
+\r
+ raw_mcast_support\r
+ Indicates support for raw packet multicast.\r
+\r
+ apm_support\r
+ Indicates support for Automatic Path Migration.\r
+\r
+ av_port_check\r
+ Indicates ability to check port number in address handles.\r
+\r
+ change_primary_port\r
+ Indicates ability to change primary port for a QP during a\r
+ SQD->RTS transition.\r
+\r
+ modify_wr_depth\r
+ Indicates ability to modify QP depth during a modify QP operation.\r
+ Check the verb specification for permitted states.\r
+\r
+ current_qp_state_support\r
+ Indicates ability of the HCA to support the current QP state modifier\r
+ during a modify QP operation.\r
+\r
+ shutdown_port_capability\r
+ Shutdown port capability support indicator.\r
+\r
+ init_type_support\r
+ Indicates init_type_reply and ability to set init_type is supported.\r
+\r
+ port_active_event_support\r
+ Port active event support indicator.\r
+\r
+ system_image_guid_support\r
+ System image GUID support indicator.\r
+\r
+ hw_agents\r
+ Indicates SMA is implemented in HW.\r
+\r
+ system_image_guid\r
+ Optional system image GUID. This field is valid only if the\r
+ system_image_guid_support flag is set.\r
+\r
+ num_page_sizes\r
+ Indicates support for different page sizes supported by the HCA.\r
+ The variable size array can be obtained from p_page_size.\r
+\r
+ num_ports\r
+ Number of physical ports supported on this HCA.\r
+\r
+ p_page_size\r
+ Array holding different page size supported.\r
+\r
+ p_port_attr\r
+ Array holding port attributes.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This structure contains the attributes of a channel adapter. Users must\r
+ call <a href="#robo102">ib_copy_ca_attr</a> to copy the contents of this structure to a new\r
+ memory region.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo200">ib_port_attr_t</a>, <a href="#robo56">ib_atomic_t</a>, <a href="#robo102">ib_copy_ca_attr</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo61">[Definitions]<a name="Access20Layer2fib5fca5fmod5ft">\r
+Access Layer/ib_ca_mod_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_ca_mod_t</strong> -- Modify port attributes and error counters\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Specifies modifications to the port attributes of a channel adapter.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef uint32_t <strong>ib_ca_mod_t</strong>;\r
+#define IB_CA_MOD_IS_CM_SUPPORTED 0x00000001\r
+#define IB_CA_MOD_IS_SNMP_SUPPORTED 0x00000002\r
+#define IB_CA_MOD_IS_DEV_MGMT_SUPPORTED 0x00000004\r
+#define IB_CA_MOD_IS_VEND_SUPPORTED 0x00000008\r
+#define IB_CA_MOD_IS_SM 0x00000010\r
+#define IB_CA_MOD_IS_SM_DISABLED 0x00000020\r
+#define IB_CA_MOD_QKEY_CTR 0x00000040\r
+#define IB_CA_MOD_PKEY_CTR 0x00000080\r
+#define IB_CA_MOD_IS_NOTICE_SUPPORTED 0x00000100\r
+#define IB_CA_MOD_IS_TRAP_SUPPORTED 0x00000200\r
+#define IB_CA_MOD_IS_APM_SUPPORTED 0x00000400\r
+#define IB_CA_MOD_IS_SLMAP_SUPPORTED 0x00000800\r
+#define IB_CA_MOD_IS_PKEY_NVRAM_SUPPORTED 0x00001000\r
+#define IB_CA_MOD_IS_MKEY_NVRAM_SUPPORTED 0x00002000\r
+#define IB_CA_MOD_IS_SYSGUID_SUPPORTED 0x00004000\r
+#define IB_CA_MOD_IS_DR_NOTICE_SUPPORTED 0x00008000\r
+#define IB_CA_MOD_IS_BOOT_MGMT_SUPPORTED 0x00010000\r
+#define IB_CA_MOD_IS_CAPM_NOTICE_SUPPORTED 0x00020000\r
+#define IB_CA_MOD_IS_REINIT_SUPORTED 0x00040000\r
+#define IB_CA_MOD_IS_LEDINFO_SUPPORTED 0x00080000\r
+#define IB_CA_MOD_SHUTDOWN_PORT 0x00100000\r
+#define IB_CA_MOD_INIT_TYPE_VALUE 0x00200000\r
+#define IB_CA_MOD_SYSTEM_IMAGE_GUID 0x00400000\r
+#define IB_CA_MOD_IS_CLIENT_REREGISTER_SUPPORTED 0x00800000\r
+</pre>\r
+</span><p><strong>VALUES</strong></p>\r
+<span class="VALUES"><pre> IB_CA_MOD_IS_CM_SUPPORTED\r
+ Indicates if there is a communication manager accessible through\r
+ the port.\r
+\r
+ IB_CA_MOD_IS_SNMP_SUPPORTED\r
+ Indicates if there is an SNMP agent accessible through the port.\r
+\r
+ IB_CA_MOD_IS_DEV_MGMT_SUPPORTED\r
+ Indicates if there is a device management agent accessible through\r
+ the port.\r
+\r
+ IB_CA_MOD_IS_VEND_SUPPORTED\r
+ Indicates if there is a vendor supported agent accessible through\r
+ the port.\r
+\r
+ IB_CA_MOD_IS_SM\r
+ Indicates if there is a subnet manager accessible through\r
+ the port.\r
+\r
+ IB_CA_MOD_IS_SM_DISABLED\r
+ Indicates if the port has been disabled for configuration by the subnet\r
+ manager.\r
+\r
+ IB_CA_MOD_QKEY_CTR\r
+ Used to reset the qkey violation counter associated with the port.\r
+\r
+ IB_CA_MOD_PKEY_CTR\r
+ Used to reset the pkey violation counter associated with the port.\r
+\r
+ IB_CA_MOD_IS_NOTICE_SUPPORTED\r
+ Indicates that this CA supports ability to generate Notices for\r
+ Port State changes. (only applicable to switches)\r
+\r
+ IB_CA_MOD_IS_TRAP_SUPPORTED\r
+ Indicates that this management port supports ability to generate\r
+ trap messages. (only applicable to switches)\r
+\r
+ IB_CA_MOD_IS_APM_SUPPORTED\r
+ Indicates that this port is capable of performing Automatic Migration.\r
+\r
+ IB_CA_MOD_IS_SLMAP_SUPPORTED\r
+ Indicates this port supports SLMAP capability.\r
+\r
+ IB_CA_MOD_IS_PKEY_NVRAM_SUPPORTED\r
+ Indicates that PKEY is supported in NVRAM\r
+\r
+ IB_CA_MOD_IS_MKEY_NVRAM_SUPPORTED\r
+ Indicates that MKEY is supported in NVRAM\r
+\r
+ IB_CA_MOD_IS_SYSGUID_SUPPORTED\r
+ Indicates System Image GUID support.\r
+\r
+ IB_CA_MOD_IS_DR_NOTICE_SUPPORTED\r
+ Indicate support for generating Direct Routed Notices\r
+\r
+ IB_CA_MOD_IS_BOOT_MGMT_SUPPORTED\r
+ Indicates support for Boot Management\r
+\r
+ IB_CA_MOD_IS_CAPM_NOTICE_SUPPORTED\r
+ Indicates capability to generate notices for changes to CAPMASK\r
+\r
+ IB_CA_MOD_IS_REINIT_SUPORTED\r
+ Indicates type of node init supported. Refer to Chapter 14 for\r
+ Initialization actions.\r
+\r
+ IB_CA_MOD_IS_LEDINFO_SUPPORTED\r
+ Indicates support for LED info.\r
+\r
+ IB_CA_MOD_SHUTDOWN_PORT\r
+ Used to modify the port active indicator.\r
+\r
+ IB_CA_MOD_INIT_TYPE_VALUE\r
+ Used to modify the init_type value for the port.\r
+\r
+ IB_CA_MOD_SYSTEM_IMAGE_GUID\r
+ Used to modify the system image GUID for the port.\r
+\r
+ IB_CA_MOD_IS_CLIENT_REREGISTER_SUPPORTED\r
+ Used to modify the system image GUID for the port.\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo66">[Structures]<a name="Access20Layer2fib5fci5fop5ft">\r
+Access Layer/ib_ci_op_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_ci_op_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> A structure used for vendor specific CA interface communication.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef struct _ib_ci_op\r
+{\r
+ IN uint32_t command;\r
+ IN uint32_t buf_size;\r
+ IN uint32_t buf_info;\r
+ IN OUT int32_t status;\r
+ OUT uint32_t num_bytes_ret;\r
+ IN OUT void* __ptr64 p_buf OPTIONAL;\r
+\r
+} <strong>ib_ci_op_t</strong>;\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> command\r
+ A command code that is understood by the verbs provider.\r
+\r
+ status\r
+ The completion status from the verbs provider. This field should be\r
+ initialize to indicate an error to allow detection and cleanup in\r
+ case a communication error occurs between user-mode and kernel-mode.\r
+\r
+ buf_size\r
+ The size of the buffer in bytes.\r
+\r
+ buf_info\r
+ Additional buffer information\r
+\r
+ p_buf\r
+ A reference to a buffer containing vendor specific data. The verbs\r
+ provider must not access pointers in the p_buf between user-mode and\r
+ kernel-mode. Any pointers embedded in the p_buf are invalidated by\r
+ the user-mode/kernel-mode transition.\r
+\r
+ num_bytes_ret\r
+ The size in bytes of the vendor specific data returned in the buffer.\r
+ This field is set by the verbs provider. The verbs provider should\r
+ verify that the buffer size is sufficient to hold the data being\r
+ returned.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This structure is provided to allow the exchange of vendor specific\r
+ data between the originator and the verbs provider. Users of this\r
+ structure are expected to know the format of data in the p_buf based\r
+ on the structure command field or the usage context.\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo73">[Definitions]<a name="Access20Layer2fib5fcm5fcap5fmask5ft">\r
+Access Layer/ib_cm_cap_mask_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_cm_cap_mask_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Capability mask values in ClassPortInfo.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>#define IB_CM_RELIABLE_CONN_CAPABLE <a href="../complib/cl_byteswap_h.html#robo279">CL_HTON16</a>(9)\r
+#define IB_CM_RELIABLE_DGRM_CAPABLE <a href="../complib/cl_byteswap_h.html#robo279">CL_HTON16</a>(10)\r
+#define IB_CM_RDGRM_CAPABLE <a href="../complib/cl_byteswap_h.html#robo279">CL_HTON16</a>(11)\r
+#define IB_CM_UNRELIABLE_CONN_CAPABLE <a href="../complib/cl_byteswap_h.html#robo279">CL_HTON16</a>(12)\r
+#define IB_CM_SIDR_CAPABLE <a href="../complib/cl_byteswap_h.html#robo279">CL_HTON16</a>(13)\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="./ib_al_h.html#robo93">ib_cm_rep</a>, <a href="#robo839">ib_class_port_info_t</a>\r
+</pre>\r
+</span><p><strong>SOURCE</strong></p>\r
+<span class="SOURCE"></span>\r
+<hr />\r
+\r
+<h2><a name="robo102">[Functions]<a name="Access20layer2fib5fcopy5fca5fattr">\r
+Access layer/ib_copy_ca_attr</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_copy_ca_attr</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Copies CA attributes.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_EXPORT <a href="#robo60">ib_ca_attr_t</a>* AL_API\r
+<strong>ib_copy_ca_attr</strong>(\r
+ IN <a href="#robo60">ib_ca_attr_t</a>* const p_dest,\r
+ IN const <a href="#robo60">ib_ca_attr_t</a>* const p_src );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_dest\r
+ Pointer to the buffer that is the destination of the copy.\r
+\r
+ p_src\r
+ Pointer to the CA attributes to copy.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> Pointer to the copied CA attributes.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> The buffer pointed to by the p_dest parameter must be at least the size\r
+ specified in the size field of the buffer pointed to by p_src.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo60">ib_ca_attr_t</a>, ib_dup_ca_attr, ib_free_ca_attr\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo141">[Definitions]<a name="Access20Layer2fib5finit5ftype5ft">\r
+Access Layer/ib_init_type_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_init_type_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> If supported by the HCA, the type of initialization requested by\r
+ this port before SM moves it to the active or armed state. If the\r
+ SM implements reinitialization, it shall set these bits to indicate\r
+ the type of initialization performed prior to activating the port.\r
+ Otherwise, these bits shall be set to 0.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef uint8_t <strong>ib_init_type_t</strong>;\r
+#define IB_INIT_TYPE_NO_LOAD 0x01\r
+#define IB_INIT_TYPE_PRESERVE_CONTENT 0x02\r
+#define IB_INIT_TYPE_PRESERVE_PRESENCE 0x04\r
+#define IB_INIT_TYPE_DO_NOT_RESUSCITATE 0x08\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo148">[Structures]<a name="Access20Layer2fib5flocal5fds5ft">\r
+Access Layer/ib_local_ds_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_local_ds_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Local data segment information referenced by send and receive work\r
+ requests. This is used to specify local data buffers used as part of a\r
+ work request.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef struct _ib_local_ds\r
+{\r
+ uint64_t vaddr;\r
+ uint32_t length;\r
+ uint32_t lkey;\r
+\r
+} <strong>ib_local_ds_t</strong>;\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo159">[Structures]<a name="Access20Layer2fib5fmr5fattr5ft">\r
+Access Layer/ib_mr_attr_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_mr_attr_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Attributes of a registered memory region.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef struct _ib_mr_attr\r
+{\r
+ ib_pd_handle_t h_pd;\r
+ uint64_t local_lb;\r
+ uint64_t local_ub;\r
+ uint64_t remote_lb;\r
+ uint64_t remote_ub;\r
+ <a href="#robo45">ib_access_t</a> access_ctrl;\r
+ net32_t lkey;\r
+ net32_t rkey;\r
+\r
+} <strong>ib_mr_attr_t</strong>;\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> h_pd\r
+ Handle to the protection domain for this memory region.\r
+\r
+ local_lb\r
+ The virtual address of the lower bound of protection for local\r
+ memory access. This is always a 64-bit quantity to support registering\r
+ more than 4GB of memory on 32-bit systems with PAE.\r
+\r
+ local_ub\r
+ The virtual address of the upper bound of protection for local\r
+ memory access. This is always a 64-bit quantity to support registering\r
+ more than 4GB of memory on 32-bit systems with PAE.\r
+\r
+ remote_lb\r
+ The virtual address of the lower bound of protection for remote\r
+ memory access. This is always a 64-bit quantity to support registering\r
+ more than 4GB of memory on 32-bit systems with PAE.\r
+\r
+ remote_ub\r
+ The virtual address of the upper bound of protection for remote\r
+ memory access. This is always a 64-bit quantity to support registering\r
+ more than 4GB of memory on 32-bit systems with PAE.\r
+\r
+ access_ctrl\r
+ Access rights for the specified memory region.\r
+\r
+ lkey\r
+ The lkey associated with this memory region.\r
+\r
+ rkey\r
+ The rkey associated with this memory region.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> The remote_lb, remote_ub, and rkey are only valid if remote memory access\r
+ is enabled for this memory region.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo45">ib_access_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo160">[Structures]<a name="Access20Layer2fib5fmr5fcreate5ft">\r
+Access Layer/ib_mr_create_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_mr_create_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Information required to create a registered memory region.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef struct _ib_mr_create\r
+{\r
+ void* __ptr64 vaddr;\r
+ uint64_t length;\r
+ <a href="#robo45">ib_access_t</a> access_ctrl;\r
+\r
+} <strong>ib_mr_create_t</strong>;\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> vaddr\r
+ Starting virtual address of the region being registered.\r
+\r
+ length\r
+ Length of the buffer to register.\r
+\r
+ access_ctrl\r
+ Access rights of the registered region.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo45">ib_access_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo161">[Definitions]<a name="Access20Layer2fib5fmr5fmod5ft">\r
+Access Layer/ib_mr_mod_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_mr_mod_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Mask used to specify which attributes of a registered memory region are\r
+ being modified.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef uint32_t <strong>ib_mr_mod_t</strong>;\r
+#define IB_MR_MOD_ADDR 0x00000001\r
+#define IB_MR_MOD_PD 0x00000002\r
+#define IB_MR_MOD_ACCESS 0x00000004\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> IB_MEM_MOD_ADDR\r
+ The address of the memory region is being modified.\r
+\r
+ IB_MEM_MOD_PD\r
+ The protection domain associated with the memory region is being\r
+ modified.\r
+\r
+ IB_MEM_MOD_ACCESS\r
+ The access rights the memory region are being modified.\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo165">[Definitions]<a name="Access20Layer2fib5fpd5ftype5ft">\r
+Access Layer/ib_pd_type_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_pd_type_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Indicates the type of protection domain being allocated.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef enum _ib_pd_type\r
+{\r
+ IB_PDT_NORMAL,\r
+ IB_PDT_ALIAS,\r
+ IB_PDT_SQP,\r
+ IB_PDT_UD\r
+\r
+} <strong>ib_pd_type_t</strong>;\r
+</pre>\r
+</span><p><strong>VALUES</strong></p>\r
+<span class="VALUES"><pre> IB_PDT_NORMAL\r
+ Protection domain for all non-aliased QPs.\r
+\r
+ IB_PDT_ALIAS\r
+ Protection domain for IB_QPT_QP0_ALIAS and IB_QPT_QP1_ALIAS QPs.\r
+\r
+ IB_PDT_SQP\r
+ Protection domain for special queue pair usage.\r
+\r
+ IB_PDT_UD\r
+ Protection domain for UD queue pair usage.\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo187">[Structures]<a name="Access20Layer2fib5fphys5fcreate5ft">\r
+Access Layer/ib_phys_create_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_phys_create_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Information required to create a physical memory region.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef struct _ib_phys_create\r
+{\r
+ uint64_t length;\r
+ uint32_t num_ranges;\r
+ <a href="#robo188">ib_phys_range_t</a>* __ptr64 range_array;\r
+ uint32_t buf_offset;\r
+ uint32_t hca_page_size;\r
+ <a href="#robo45">ib_access_t</a> access_ctrl;\r
+\r
+} <strong>ib_phys_create_t</strong>;\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> length\r
+ The length of the memory region in bytes.\r
+\r
+ num_ranges\r
+ Number of ib_phys_range structures listed in the specified range array.\r
+\r
+ range_array\r
+ An array of ib_phys_range structures to be registered as a single memory\r
+ region.\r
+\r
+ buf_offset\r
+ The offset into the first physical memory range of the specified memory\r
+ region on which to start the virtual address.\r
+\r
+ hca_page_size\r
+ The HCA page size to use to register the memory.\r
+\r
+ access_ctrl\r
+ Access rights of the registered region.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo45">ib_access_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo188">[Structures]<a name="Access20Layer2fib5fphys5frange5ft">\r
+Access Layer/ib_phys_range_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_phys_range_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Information describing a physical memory range.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef struct _ib_phys_range\r
+{\r
+ uint64_t base_addr;\r
+ uint64_t size;\r
+\r
+} <strong>ib_phys_range_t</strong>;\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> base_addr\r
+ Physical address of the base of the memory range.\r
+\r
+ size\r
+ size, in bytes, of the memory range.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> The base address must be start and end on an HCA-supported page boundary.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo187">ib_phys_create_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo199">[Structures]<a name="Access20Layer2fib5fport5fattr5fmod5ft">\r
+Access Layer/ib_port_attr_mod_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_port_attr_mod_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Port attributes that may be modified.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef struct _ib_port_attr_mod\r
+{\r
+ <a href="#robo201">ib_port_cap_t</a> cap;\r
+ uint16_t pkey_ctr;\r
+ uint16_t qkey_ctr;\r
+\r
+ <a href="#robo141">ib_init_type_t</a> init_type;\r
+ <a href="#robo895">ib_net64_t</a> system_image_guid;\r
+\r
+} <strong>ib_port_attr_mod_t</strong>;\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo201">ib_port_cap_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo200">[Structures]<a name="Access20Layer2fib5fport5fattr5ft">\r
+Access Layer/ib_port_attr_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_port_attr_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Information about a port on a given channel adapter.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef struct _ib_port_attr\r
+{\r
+ <a href="#robo895">ib_net64_t</a> port_guid;\r
+ uint8_t port_num;\r
+ uint8_t mtu;\r
+ uint64_t max_msg_size;\r
+ <a href="#robo893">ib_net16_t</a> lid;\r
+ uint8_t lmc;\r
+\r
+ /*\r
+ * LinkWidthSupported as defined in PortInfo. Required to calculate\r
+ * inter-packet delay (a.k.a. static rate).\r
+ */\r
+ uint8_t link_width_supported;\r
+\r
+ uint16_t max_vls;\r
+\r
+ <a href="#robo893">ib_net16_t</a> sm_lid;\r
+ uint8_t sm_sl;\r
+ uint8_t link_state;\r
+\r
+ <a href="#robo141">ib_init_type_t</a> init_type_reply; /* Optional */\r
+\r
+ /*\r
+ * subnet_timeout:\r
+ * The maximum expected subnet propagation delay to reach any port on\r
+ * the subnet. This value also determines the rate at which traps can\r
+ * be generated from this node.\r
+ *\r
+ * timeout = 4.096 microseconds * 2^subnet_timeout\r
+ */\r
+ uint8_t subnet_timeout;\r
+\r
+ <a href="#robo201">ib_port_cap_t</a> cap;\r
+ uint16_t pkey_ctr;\r
+ uint16_t qkey_ctr;\r
+\r
+ uint16_t num_gids;\r
+ uint16_t num_pkeys;\r
+ /*\r
+ * Pointers at the end of the structure to allow doing a simple\r
+ * memory comparison of contents up to the first pointer.\r
+ */\r
+ <a href="#robo856">ib_gid_t</a>* __ptr64 p_gid_table;\r
+ <a href="#robo893">ib_net16_t</a>* __ptr64 p_pkey_table;\r
+\r
+} <strong>ib_port_attr_t</strong>;\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> uint8_t, <a href="#robo201">ib_port_cap_t</a>, <a href="#robo720">ib_link_states_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo201">[Structures]<a name="Access20Layer2fib5fport5fcap5ft">\r
+Access Layer/ib_port_cap_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_port_cap_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Indicates which management agents are currently available on the specified\r
+ port.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef struct _ib_port_cap\r
+{\r
+ boolean_t cm;\r
+ boolean_t snmp;\r
+ boolean_t dev_mgmt;\r
+ boolean_t vend;\r
+ boolean_t sm;\r
+ boolean_t sm_disable;\r
+ boolean_t qkey_ctr;\r
+ boolean_t pkey_ctr;\r
+ boolean_t notice;\r
+ boolean_t trap;\r
+ boolean_t apm;\r
+ boolean_t slmap;\r
+ boolean_t pkey_nvram;\r
+ boolean_t mkey_nvram;\r
+ boolean_t sysguid;\r
+ boolean_t dr_notice;\r
+ boolean_t boot_mgmt;\r
+ boolean_t capm_notice;\r
+ boolean_t reinit;\r
+ boolean_t ledinfo;\r
+ boolean_t port_active;\r
+ boolean_t ipd;\r
+ boolean_t pkey_switch_ext_port;\r
+ boolean_t bm;\r
+ boolean_t link_rtl;\r
+ boolean_t client_reregister;\r
+\r
+} <strong>ib_port_cap_t</strong>;\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo205">[Structures]<a name="Access20Layer2fib5fqp5fattr5ft">\r
+Access Layer/ib_qp_attr_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_qp_attr_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Queue pair attributes returned through <a href="./ib_al_h.html#robo218">ib_query_qp</a>.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef struct _ib_qp_attr\r
+{\r
+ ib_pd_handle_t h_pd;\r
+ <a href="#robo210">ib_qp_type_t</a> qp_type;\r
+ <a href="#robo45">ib_access_t</a> access_ctrl;\r
+ uint16_t pkey_index;\r
+\r
+ uint32_t sq_max_inline;\r
+ uint32_t sq_depth;\r
+ uint32_t rq_depth;\r
+ uint32_t sq_sge;\r
+ uint32_t rq_sge;\r
+ uint8_t init_depth;\r
+ uint8_t resp_res;\r
+\r
+ ib_cq_handle_t h_sq_cq;\r
+ ib_cq_handle_t h_rq_cq;\r
+\r
+ boolean_t sq_signaled;\r
+\r
+ <a href="#robo209">ib_qp_state_t</a> state;\r
+ <a href="#robo894">ib_net32_t</a> num;\r
+ <a href="#robo894">ib_net32_t</a> dest_num;\r
+ <a href="#robo894">ib_net32_t</a> qkey;\r
+\r
+ <a href="#robo894">ib_net32_t</a> sq_psn;\r
+ <a href="#robo894">ib_net32_t</a> rq_psn;\r
+\r
+ uint8_t primary_port;\r
+ uint8_t alternate_port;\r
+ <a href="#robo57">ib_av_attr_t</a> primary_av;\r
+ <a href="#robo57">ib_av_attr_t</a> alternate_av;\r
+ <a href="#robo50">ib_apm_state_t</a> apm_state;\r
+\r
+} <strong>ib_qp_attr_t</strong>;\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> h_pd\r
+ This is a handle to a protection domain associated with the QP.\r
+\r
+ sq_max_inline\r
+ Maximum payload that can be inlined directly in a WQE, eliminating\r
+ protection checks and additional DMA operations.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> Other fields are defined by the Infiniband specification.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo210">ib_qp_type_t</a>, <a href="#robo45">ib_access_t</a>, <a href="#robo209">ib_qp_state_t</a>, <a href="#robo57">ib_av_attr_t</a>, <a href="#robo50">ib_apm_state_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo206">[Structures]<a name="Access20Layer2fib5fqp5fcreate5ft">\r
+Access Layer/ib_qp_create_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_qp_create_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Attributes used to initialize a queue pair at creation time.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef struct _ib_qp_create\r
+{\r
+ <a href="#robo210">ib_qp_type_t</a> qp_type;\r
+\r
+ uint32_t sq_depth;\r
+ uint32_t rq_depth;\r
+ uint32_t sq_sge;\r
+ uint32_t rq_sge;\r
+\r
+ ib_cq_handle_t h_sq_cq;\r
+ ib_cq_handle_t h_rq_cq;\r
+\r
+ boolean_t sq_signaled;\r
+\r
+} <strong>ib_qp_create_t</strong>;\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> type\r
+ Specifies the type of queue pair to create.\r
+\r
+ sq_depth\r
+ Indicates the requested maximum number of work requests that may be\r
+ outstanding on the queue pair's send queue. This value must be less\r
+ than or equal to the maximum reported by the channel adapter associated\r
+ with the queue pair.\r
+\r
+ rq_depth\r
+ Indicates the requested maximum number of work requests that may be\r
+ outstanding on the queue pair's receive queue. This value must be less\r
+ than or equal to the maximum reported by the channel adapter associated\r
+ with the queue pair.\r
+\r
+ sq_sge\r
+ Indicates the maximum number scatter-gather elements that may be\r
+ given in a send work request. This value must be less\r
+ than or equal to the maximum reported by the channel adapter associated\r
+ with the queue pair.\r
+\r
+ rq_sge\r
+ Indicates the maximum number scatter-gather elements that may be\r
+ given in a receive work request. This value must be less\r
+ than or equal to the maximum reported by the channel adapter associated\r
+ with the queue pair.\r
+\r
+ h_sq_cq\r
+ A handle to the completion queue that will be used to report send work\r
+ request completions. This handle must be NULL if the type is\r
+ IB_QPT_MAD, IB_QPT_QP0_ALIAS, or IB_QPT_QP1_ALIAS.\r
+\r
+ h_rq_cq\r
+ A handle to the completion queue that will be used to report receive\r
+ work request completions. This handle must be NULL if the type is\r
+ IB_QPT_MAD, IB_QPT_QP0_ALIAS, or IB_QPT_QP1_ALIAS.\r
+\r
+ sq_signaled\r
+ A flag that is used to indicate whether the queue pair will signal\r
+ an event upon completion of a send work request. If set to\r
+ TRUE, send work requests will always generate a completion\r
+ event. If set to FALSE, a completion event will only be\r
+ generated if the send_opt field of the send work request has the\r
+ IB_SEND_OPT_SIGNALED flag set.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo210">ib_qp_type_t</a>, <a href="#robo205">ib_qp_attr_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo207">[Structures]<a name="Access20Layer2fib5fqp5fmod5ft">\r
+Access Layer/ib_qp_mod_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_qp_mod_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Information needed to change the state of a queue pair through the\r
+ <a href="./ib_al_h.html#robo158">ib_modify_qp</a> call.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef struct _ib_qp_mod\r
+{\r
+ <a href="#robo209">ib_qp_state_t</a> req_state;\r
+\r
+ union _qp_state\r
+ {\r
+ struct _qp_init\r
+ {\r
+ uint8_t primary_port;\r
+ <a href="#robo894">ib_net32_t</a> qkey;\r
+ uint16_t pkey_index;\r
+ <a href="#robo45">ib_access_t</a> access_ctrl;\r
+\r
+ } init;\r
+\r
+ struct _qp_rtr\r
+ {\r
+ <a href="#robo894">ib_net32_t</a> rq_psn;\r
+ <a href="#robo894">ib_net32_t</a> dest_qp;\r
+ <a href="#robo57">ib_av_attr_t</a> primary_av;\r
+ uint8_t resp_res;\r
+ uint8_t rnr_nak_timeout;\r
+\r
+ <a href="#robo208">ib_qp_opts_t</a> opts;\r
+ <a href="#robo57">ib_av_attr_t</a> alternate_av;\r
+ <a href="#robo894">ib_net32_t</a> qkey;\r
+ uint16_t pkey_index;\r
+ <a href="#robo45">ib_access_t</a> access_ctrl;\r
+ uint32_t sq_depth;\r
+ uint32_t rq_depth;\r
+\r
+ } rtr;\r
+\r
+ struct _qp_rts\r
+ {\r
+ <a href="#robo894">ib_net32_t</a> sq_psn;\r
+ uint8_t retry_cnt;\r
+ uint8_t rnr_retry_cnt;\r
+ uint8_t local_ack_timeout;\r
+ uint8_t init_depth;\r
+\r
+ <a href="#robo208">ib_qp_opts_t</a> opts;\r
+ uint8_t rnr_nak_timeout;\r
+ <a href="#robo209">ib_qp_state_t</a> current_state;\r
+ <a href="#robo894">ib_net32_t</a> qkey;\r
+ <a href="#robo45">ib_access_t</a> access_ctrl;\r
+ uint8_t resp_res;\r
+\r
+ <a href="#robo57">ib_av_attr_t</a> primary_av;\r
+ <a href="#robo57">ib_av_attr_t</a> alternate_av;\r
+\r
+ uint32_t sq_depth;\r
+ uint32_t rq_depth;\r
+\r
+ <a href="#robo50">ib_apm_state_t</a> apm_state;\r
+ uint8_t primary_port;\r
+ uint16_t pkey_index;\r
+\r
+ } rts;\r
+\r
+ struct _qp_sqd\r
+ {\r
+ boolean_t sqd_event;\r
+\r
+ } sqd;\r
+\r
+ } state;\r
+\r
+} <strong>ib_qp_mod_t</strong>;\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo209">ib_qp_state_t</a>, <a href="#robo45">ib_access_t</a>, <a href="#robo57">ib_av_attr_t</a>, <a href="#robo50">ib_apm_state_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo208">[Definitions]<a name="Access20Layer2fib5fqp5fopts5ft">\r
+Access Layer/ib_qp_opts_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_qp_opts_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Optional fields supplied in the modify QP operation.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef uint32_t <strong>ib_qp_opts_t</strong>;\r
+#define IB_MOD_QP_ALTERNATE_AV 0x00000001\r
+#define IB_MOD_QP_PKEY 0x00000002\r
+#define IB_MOD_QP_APM_STATE 0x00000004\r
+#define IB_MOD_QP_PRIMARY_AV 0x00000008\r
+#define IB_MOD_QP_RNR_NAK_TIMEOUT 0x00000010\r
+#define IB_MOD_QP_RESP_RES 0x00000020\r
+#define IB_MOD_QP_INIT_DEPTH 0x00000040\r
+#define IB_MOD_QP_PRIMARY_PORT 0x00000080\r
+#define IB_MOD_QP_ACCESS_CTRL 0x00000100\r
+#define IB_MOD_QP_QKEY 0x00000200\r
+#define IB_MOD_QP_SQ_DEPTH 0x00000400\r
+#define IB_MOD_QP_RQ_DEPTH 0x00000800\r
+#define IB_MOD_QP_CURRENT_STATE 0x00001000\r
+#define IB_MOD_QP_RETRY_CNT 0x00002000\r
+#define IB_MOD_QP_LOCAL_ACK_TIMEOUT 0x00004000\r
+#define IB_MOD_QP_RNR_RETRY_CNT 0x00008000\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo207">ib_qp_mod_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo209">[Definitions]<a name="Access20Layer2fib5fqp5fstate5ft">\r
+Access Layer/ib_qp_state_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_qp_state_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Indicates or sets the state of a queue pair. The current state of a queue\r
+ pair is returned through the ib_qp_query call and set via the\r
+ ib_qp_modify call.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef uint32_t <strong>ib_qp_state_t</strong>;\r
+#define IB_QPS_RESET 0x00000001\r
+#define IB_QPS_INIT 0x00000002\r
+#define IB_QPS_RTR 0x00000004\r
+#define IB_QPS_RTS 0x00000008\r
+#define IB_QPS_SQD 0x00000010\r
+#define IB_QPS_SQD_DRAINING 0x00000030\r
+#define IB_QPS_SQD_DRAINED 0x00000050\r
+#define IB_QPS_SQERR 0x00000080\r
+#define IB_QPS_ERROR 0x00000100\r
+#define IB_QPS_TIME_WAIT 0xDEAD0000 /* InfiniBand Access Layer */\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo210">[Definitions]<a name="Access20Layer2fib5fqp5ftype5ft">\r
+Access Layer/ib_qp_type_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_qp_type_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Indicates the type of queue pair being created.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef enum _ib_qp_type\r
+{\r
+ IB_QPT_RELIABLE_CONN = 0, /* Matches CM REQ transport type */\r
+ IB_QPT_UNRELIABLE_CONN = 1, /* Matches CM REQ transport type */\r
+ IB_QPT_UNRELIABLE_DGRM = 3, /* Purposefully skip RDD type. */\r
+ IB_QPT_QP0,\r
+ IB_QPT_QP1,\r
+ IB_QPT_RAW_IPV6,\r
+ IB_QPT_RAW_ETHER,\r
+ IB_QPT_MAD, /* InfiniBand Access Layer */\r
+ IB_QPT_QP0_ALIAS, /* InfiniBand Access Layer */\r
+ IB_QPT_QP1_ALIAS /* InfiniBand Access Layer */\r
+\r
+} <strong>ib_qp_type_t</strong>;\r
+</pre>\r
+</span><p><strong>VALUES</strong></p>\r
+<span class="VALUES"><pre> IB_QPT_RELIABLE_CONN\r
+ Reliable, connected queue pair.\r
+\r
+ IB_QPT_UNRELIABLE_CONN\r
+ Unreliable, connected queue pair.\r
+\r
+ IB_QPT_UNRELIABLE_DGRM\r
+ Unreliable, datagram queue pair.\r
+\r
+ IB_QPT_QP0\r
+ Queue pair 0.\r
+\r
+ IB_QPT_QP1\r
+ Queue pair 1.\r
+\r
+ IB_QPT_RAW_DGRM\r
+ Raw datagram queue pair.\r
+\r
+ IB_QPT_RAW_IPV6\r
+ Raw IP version 6 queue pair.\r
+\r
+ IB_QPT_RAW_ETHER\r
+ Raw Ethernet queue pair.\r
+\r
+ IB_QPT_MAD\r
+ Unreliable, datagram queue pair that will send and receive management\r
+ datagrams with assistance from the access layer.\r
+\r
+ IB_QPT_QP0_ALIAS\r
+ Alias to queue pair 0. Aliased QPs can only be created on an aliased\r
+ protection domain.\r
+\r
+ IB_QPT_QP1_ALIAS\r
+ Alias to queue pair 1. Aliased QPs can only be created on an aliased\r
+ protection domain.\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo224">[Definitions]<a name="Access20Layer2fib5frecv5fopt5ft">\r
+Access Layer/ib_recv_opt_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_recv_opt_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Indicates optional fields valid in a receive work completion.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef uint32_t <strong>ib_recv_opt_t</strong>;\r
+#define IB_RECV_OPT_IMMEDIATE 0x00000001\r
+#define IB_RECV_OPT_FORWARD 0x00000002\r
+#define IB_RECV_OPT_GRH_VALID 0x00000004\r
+#define IB_RECV_OPT_VEND_MASK 0xFFFF0000\r
+</pre>\r
+</span><p><strong>VALUES</strong></p>\r
+<span class="VALUES"><pre> IB_RECV_OPT_IMMEDIATE\r
+ Indicates that immediate data is valid for this work completion.\r
+\r
+ IB_RECV_OPT_FORWARD\r
+ Indicates that the received trap should be forwarded to the SM.\r
+\r
+ IB_RECV_OPT_GRH_VALID\r
+ Indicates presence of the global route header. When set, the first\r
+ 40 bytes received are the GRH.\r
+\r
+ IB_RECV_OPT_VEND_MASK\r
+ This mask indicates bits reserved in the receive options that may be\r
+ used by the verbs provider to indicate vendor specific options. Bits\r
+ set in this area of the receive options are ignored by the Access Layer,\r
+ but may have specific meaning to the underlying VPD.\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo225">[Structures]<a name="Access20Layer2fib5frecv5fwr5ft">\r
+Access Layer/ib_recv_wr_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_recv_wr_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Information used to submit a work request to the receive queue of a queue\r
+ pair.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef struct _ib_recv_wr\r
+{\r
+ struct _ib_recv_wr* __ptr64 p_next;\r
+ uint64_t wr_id;\r
+ uint32_t num_ds;\r
+ <a href="#robo148">ib_local_ds_t</a>* __ptr64 ds_array;\r
+\r
+} <strong>ib_recv_wr_t</strong>;\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> p_next\r
+ A pointer used to chain work requests together. This permits multiple\r
+ work requests to be posted to a queue pair through a single function\r
+ call. This value is set to NULL to mark the end of the chain.\r
+\r
+ wr_id\r
+ A 64-bit work request identifier that is returned to the consumer\r
+ as part of the work completion.\r
+\r
+ num_ds\r
+ Number of local data segments specified by this work request.\r
+\r
+ ds_array\r
+ A reference to an array of local data segments used by the send\r
+ operation.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo148">ib_local_ds_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo238">[Definitions]<a name="Access20Layer2fib5frej5fstatus5ft">\r
+Access Layer/ib_rej_status_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_rej_status_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Rejection reasons.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef <a href="#robo893">ib_net16_t</a> <strong>ib_rej_status_t</strong>;\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="./ib_al_h.html#robo90">ib_cm_rej</a>, <a href="./ib_al_h.html#robo91">ib_cm_rej_rec_t</a>\r
+</pre>\r
+</span><p><strong>SOURCE</strong></p>\r
+<span class="SOURCE"><pre>#define IB_REJ_INSUF_QP <a href="../complib/cl_byteswap_h.html#robo279">CL_HTON16</a>(1)\r
+#define IB_REJ_INSUF_EEC <a href="../complib/cl_byteswap_h.html#robo279">CL_HTON16</a>(2)\r
+#define IB_REJ_INSUF_RESOURCES <a href="../complib/cl_byteswap_h.html#robo279">CL_HTON16</a>(3)\r
+#define IB_REJ_TIMEOUT <a href="../complib/cl_byteswap_h.html#robo279">CL_HTON16</a>(4)\r
+#define IB_REJ_UNSUPPORTED <a href="../complib/cl_byteswap_h.html#robo279">CL_HTON16</a>(5)\r
+#define IB_REJ_INVALID_COMM_ID <a href="../complib/cl_byteswap_h.html#robo279">CL_HTON16</a>(6)\r
+#define IB_REJ_INVALID_COMM_INSTANCE <a href="../complib/cl_byteswap_h.html#robo279">CL_HTON16</a>(7)\r
+#define IB_REJ_INVALID_SID <a href="../complib/cl_byteswap_h.html#robo279">CL_HTON16</a>(8)\r
+#define IB_REJ_INVALID_XPORT <a href="../complib/cl_byteswap_h.html#robo279">CL_HTON16</a>(9)\r
+#define IB_REJ_STALE_CONN <a href="../complib/cl_byteswap_h.html#robo279">CL_HTON16</a>(10)\r
+#define IB_REJ_RDC_NOT_EXIST <a href="../complib/cl_byteswap_h.html#robo279">CL_HTON16</a>(11)\r
+#define IB_REJ_INVALID_GID <a href="../complib/cl_byteswap_h.html#robo279">CL_HTON16</a>(12)\r
+#define IB_REJ_INVALID_LID <a href="../complib/cl_byteswap_h.html#robo279">CL_HTON16</a>(13)\r
+#define IB_REJ_INVALID_SL <a href="../complib/cl_byteswap_h.html#robo279">CL_HTON16</a>(14)\r
+#define IB_REJ_INVALID_TRAFFIC_CLASS <a href="../complib/cl_byteswap_h.html#robo279">CL_HTON16</a>(15)\r
+#define IB_REJ_INVALID_HOP_LIMIT <a href="../complib/cl_byteswap_h.html#robo279">CL_HTON16</a>(16)\r
+#define IB_REJ_INVALID_PKT_RATE <a href="../complib/cl_byteswap_h.html#robo279">CL_HTON16</a>(17)\r
+#define IB_REJ_INVALID_ALT_GID <a href="../complib/cl_byteswap_h.html#robo279">CL_HTON16</a>(18)\r
+#define IB_REJ_INVALID_ALT_LID <a href="../complib/cl_byteswap_h.html#robo279">CL_HTON16</a>(19)\r
+#define IB_REJ_INVALID_ALT_SL <a href="../complib/cl_byteswap_h.html#robo279">CL_HTON16</a>(20)\r
+#define IB_REJ_INVALID_ALT_TRAFFIC_CLASS <a href="../complib/cl_byteswap_h.html#robo279">CL_HTON16</a>(21)\r
+#define IB_REJ_INVALID_ALT_HOP_LIMIT <a href="../complib/cl_byteswap_h.html#robo279">CL_HTON16</a>(22)\r
+#define IB_REJ_INVALID_ALT_PKT_RATE <a href="../complib/cl_byteswap_h.html#robo279">CL_HTON16</a>(23)\r
+#define IB_REJ_PORT_REDIRECT <a href="../complib/cl_byteswap_h.html#robo279">CL_HTON16</a>(24)\r
+#define IB_REJ_INVALID_MTU <a href="../complib/cl_byteswap_h.html#robo279">CL_HTON16</a>(26)\r
+#define IB_REJ_INSUFFICIENT_RESP_RES <a href="../complib/cl_byteswap_h.html#robo279">CL_HTON16</a>(27)\r
+#define IB_REJ_USER_DEFINED <a href="../complib/cl_byteswap_h.html#robo279">CL_HTON16</a>(28)\r
+#define IB_REJ_INVALID_RNR_RETRY <a href="../complib/cl_byteswap_h.html#robo279">CL_HTON16</a>(29)\r
+#define IB_REJ_DUPLICATE_LOCAL_COMM_ID <a href="../complib/cl_byteswap_h.html#robo279">CL_HTON16</a>(30)\r
+#define IB_REJ_INVALID_CLASS_VER <a href="../complib/cl_byteswap_h.html#robo279">CL_HTON16</a>(31)\r
+#define IB_REJ_INVALID_FLOW_LBL <a href="../complib/cl_byteswap_h.html#robo279">CL_HTON16</a>(32)\r
+#define IB_REJ_INVALID_ALT_FLOW_LBL <a href="../complib/cl_byteswap_h.html#robo279">CL_HTON16</a>(33)\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo248">[Definitions]<a name="Access20Layer2fib5fsend5fopt5ft">\r
+Access Layer/ib_send_opt_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_send_opt_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Optional flags used when posting send work requests. These flags\r
+ indicate specific processing for the send operation.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef uint32_t <strong>ib_send_opt_t</strong>;\r
+#define IB_SEND_OPT_IMMEDIATE 0x00000001\r
+#define IB_SEND_OPT_FENCE 0x00000002\r
+#define IB_SEND_OPT_SIGNALED 0x00000004\r
+#define IB_SEND_OPT_SOLICITED 0x00000008\r
+#define IB_SEND_OPT_INLINE 0x00000010\r
+#define IB_SEND_OPT_LOCAL 0x00000020\r
+#define IB_SEND_OPT_VEND_MASK 0xFFFF0000\r
+</pre>\r
+</span><p><strong>VALUES</strong></p>\r
+<span class="VALUES"><pre> The following flags determine the behavior of a work request when\r
+ posted to the send side.\r
+\r
+ IB_SEND_OPT_IMMEDIATE\r
+ Send immediate data with the given request.\r
+\r
+ IB_SEND_OPT_FENCE\r
+ The operation is fenced. Complete all pending send operations before\r
+ processing this request.\r
+\r
+ IB_SEND_OPT_SIGNALED\r
+ If the queue pair is configured for signaled completion, then\r
+ generate a completion queue entry when this request completes.\r
+\r
+ IB_SEND_OPT_SOLICITED\r
+ Set the solicited bit on the last packet of this request.\r
+\r
+ IB_SEND_OPT_INLINE\r
+ Indicates that the requested send data should be copied into a VPD\r
+ owned data buffer. This flag permits the user to issue send operations\r
+ without first needing to register the buffer(s) associated with the\r
+ send operation. Verb providers that support this operation may place\r
+ vendor specific restrictions on the size of send operation that may\r
+ be performed as inline.\r
+\r
+ IB_SEND_OPT_LOCAL\r
+ Indicates that a sent MAD request should be given to the local VPD for\r
+ processing. MADs sent using this option are not placed on the wire.\r
+ This send option is only valid for MAD send operations.\r
+\r
+ IB_SEND_OPT_VEND_MASK\r
+ This mask indicates bits reserved in the send options that may be used\r
+ by the verbs provider to indicate vendor specific options. Bits set\r
+ in this area of the send options are ignored by the Access Layer, but\r
+ may have specific meaning to the underlying VPD.\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo249">[Structures]<a name="Access20Layer2fib5fsend5fwr5ft">\r
+Access Layer/ib_send_wr_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_send_wr_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Information used to submit a work request to the send queue of a queue\r
+ pair.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef struct _ib_send_wr\r
+{\r
+ struct _ib_send_wr* __ptr64 p_next;\r
+ uint64_t wr_id;\r
+ <a href="#robo262">ib_wr_type_t</a> wr_type;\r
+ <a href="#robo248">ib_send_opt_t</a> send_opt;\r
+ uint32_t num_ds;\r
+ <a href="#robo148">ib_local_ds_t</a>* __ptr64 ds_array;\r
+ <a href="#robo894">ib_net32_t</a> immediate_data;\r
+\r
+ union _send_dgrm\r
+ {\r
+ struct _send_ud\r
+ {\r
+ <a href="#robo894">ib_net32_t</a> remote_qp;\r
+ <a href="#robo894">ib_net32_t</a> remote_qkey;\r
+ ib_av_handle_t h_av;\r
+ uint16_t pkey_index;\r
+ void* __ptr64 rsvd;\r
+\r
+ } ud;\r
+\r
+ struct _send_raw_ether\r
+ {\r
+ <a href="#robo893">ib_net16_t</a> dest_lid;\r
+ uint8_t path_bits;\r
+ uint8_t sl;\r
+ uint8_t max_static_rate;\r
+ <a href="#robo893">ib_net16_t</a> ether_type;\r
+\r
+ } raw_ether;\r
+\r
+ struct _send_raw_ipv6\r
+ {\r
+ <a href="#robo893">ib_net16_t</a> dest_lid;\r
+ uint8_t path_bits;\r
+ uint8_t sl;\r
+ uint8_t max_static_rate;\r
+\r
+ } raw_ipv6;\r
+\r
+ } dgrm;\r
+\r
+ struct _send_remote_ops\r
+ {\r
+ uint64_t vaddr;\r
+ net32_t rkey;\r
+\r
+ <a href="#robo895">ib_net64_t</a> atomic1;\r
+ <a href="#robo895">ib_net64_t</a> atomic2;\r
+\r
+ } remote_ops;\r
+\r
+} <strong>ib_send_wr_t</strong>;\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> p_next\r
+ A pointer used to chain work requests together. This permits multiple\r
+ work requests to be posted to a queue pair through a single function\r
+ call. This value is set to NULL to mark the end of the chain.\r
+\r
+ wr_id\r
+ A 64-bit work request identifier that is returned to the consumer\r
+ as part of the work completion.\r
+\r
+ wr_type\r
+ The type of work request being submitted to the send queue.\r
+\r
+ send_opt\r
+ Optional send control parameters.\r
+\r
+ num_ds\r
+ Number of local data segments specified by this work request.\r
+\r
+ ds_array\r
+ A reference to an array of local data segments used by the send\r
+ operation.\r
+\r
+ immediate_data\r
+ 32-bit field sent as part of a message send or RDMA write operation.\r
+ This field is only valid if the send_opt flag IB_SEND_OPT_IMMEDIATE\r
+ has been set.\r
+\r
+ dgrm.ud.remote_qp\r
+ Identifies the destination queue pair of an unreliable datagram send\r
+ operation.\r
+\r
+ dgrm.ud.remote_qkey\r
+ The qkey for the destination queue pair.\r
+\r
+ dgrm.ud.h_av\r
+ An address vector that specifies the path information used to route\r
+ the outbound datagram to the destination queue pair.\r
+\r
+ dgrm.ud.pkey_index\r
+ The pkey index for this send work request. This is valid only\r
+ for IB_QPT_QP1 and IB_QPT_QP1_ALIAS QP types. The work request\r
+ is posted to using this pkey index build the GMP's BTH instead\r
+ of the QP's pkey.\r
+\r
+ dgrm.ud.rsvd\r
+ Reserved for use by the Access Layer.\r
+\r
+ dgrm.raw_ether.dest_lid\r
+ The destination LID that will receive this raw ether send.\r
+\r
+ dgrm.raw_ether.path_bits\r
+ path bits...\r
+\r
+ dgrm.raw_ether.sl\r
+ service level...\r
+\r
+ dgrm.raw_ether.max_static_rate\r
+ static rate...\r
+\r
+ dgrm.raw_ether.ether_type\r
+ ether type...\r
+\r
+ dgrm.raw_ipv6.dest_lid\r
+ The destination LID that will receive this raw ether send.\r
+\r
+ dgrm.raw_ipv6.path_bits\r
+ path bits...\r
+\r
+ dgrm.raw_ipv6.sl\r
+ service level...\r
+\r
+ dgrm.raw_ipv6.max_static_rate\r
+ static rate...\r
+\r
+ remote_ops.vaddr\r
+ The registered virtual memory address of the remote memory to access\r
+ with an RDMA or atomic operation.\r
+\r
+ remote_ops.rkey\r
+ The rkey associated with the specified remote vaddr. This data must\r
+ be presented exactly as obtained from the remote node. No swapping\r
+ of data must be performed.\r
+\r
+ atomic1\r
+ The first operand for an atomic operation.\r
+\r
+ atomic2\r
+ The second operand for an atomic operation.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> The format of data sent over the fabric is user-defined and is considered\r
+ opaque to the access layer. The sole exception to this are MADs posted\r
+ to a MAD QP service. MADs are expected to match the format defined by\r
+ the Infiniband specification and must be in network-byte order when posted\r
+ to the MAD QP service.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo262">ib_wr_type_t</a>, <a href="#robo148">ib_local_ds_t</a>, <a href="#robo248">ib_send_opt_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo259">[Definitions]<a name="Access20Layer2fib5fwc5fstatus5ft">\r
+Access Layer/ib_wc_status_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_wc_status_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Indicates the status of a completed work request. These VALUES are\r
+ returned to the user when retrieving completions. Note that success is\r
+ identified as IB_WCS_SUCCESS, which is always zero.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef enum _<strong>ib_wc_status_t</strong>\r
+{\r
+ IB_WCS_SUCCESS,\r
+ IB_WCS_LOCAL_LEN_ERR,\r
+ IB_WCS_LOCAL_OP_ERR,\r
+ IB_WCS_LOCAL_PROTECTION_ERR,\r
+ IB_WCS_WR_FLUSHED_ERR,\r
+ IB_WCS_MEM_WINDOW_BIND_ERR,\r
+ IB_WCS_REM_ACCESS_ERR,\r
+ IB_WCS_REM_OP_ERR,\r
+ IB_WCS_RNR_RETRY_ERR,\r
+ IB_WCS_TIMEOUT_RETRY_ERR,\r
+ IB_WCS_REM_INVALID_REQ_ERR,\r
+ IB_WCS_BAD_RESP_ERR,\r
+ IB_WCS_LOCAL_ACCESS_ERR,\r
+ IB_WCS_GENERAL_ERR,\r
+ IB_WCS_UNMATCHED_RESPONSE, /* InfiniBand Access Layer */\r
+ IB_WCS_CANCELED, /* InfiniBand Access Layer */\r
+ IB_WCS_UNKNOWN /* Must be last. */\r
+\r
+} <strong>ib_wc_status_t</strong>;\r
+</pre>\r
+</span><p><strong>VALUES</strong></p>\r
+<span class="VALUES"><pre> IB_WCS_SUCCESS\r
+ Work request completed successfully.\r
+\r
+ IB_WCS_MAD\r
+ The completed work request was associated with a managmenet datagram\r
+ that requires post processing. The MAD will be returned to the user\r
+ through a callback once all post processing has completed.\r
+\r
+ IB_WCS_LOCAL_LEN_ERR\r
+ Generated for a work request posted to the send queue when the\r
+ total of the data segment lengths exceeds the message length of the\r
+ channel. Generated for a work request posted to the receive queue when\r
+ the total of the data segment lengths is too small for a\r
+ valid incoming message.\r
+\r
+ IB_WCS_LOCAL_OP_ERR\r
+ An internal QP consistency error was generated while processing this\r
+ work request. This may indicate that the QP was in an incorrect state\r
+ for the requested operation.\r
+\r
+ IB_WCS_LOCAL_PROTECTION_ERR\r
+ The data segments of the locally posted work request did not refer to\r
+ a valid memory region. The memory may not have been properly\r
+ registered for the requested operation.\r
+\r
+ IB_WCS_WR_FLUSHED_ERR\r
+ The work request was flushed from the QP before being completed.\r
+\r
+ IB_WCS_MEM_WINDOW_BIND_ERR\r
+ A memory window bind operation failed due to insufficient access\r
+ rights.\r
+\r
+ IB_WCS_REM_ACCESS_ERR,\r
+ A protection error was detected at the remote node for a RDMA or atomic\r
+ operation.\r
+\r
+ IB_WCS_REM_OP_ERR,\r
+ The operation could not be successfully completed at the remote node.\r
+ This may indicate that the remote QP was in an invalid state or\r
+ contained an invalid work request.\r
+\r
+ IB_WCS_RNR_RETRY_ERR,\r
+ The RNR retry count was exceeded while trying to send this message.\r
+\r
+ IB_WCS_TIMEOUT_RETRY_ERR\r
+ The local transport timeout counter expired while trying to send this\r
+ message.\r
+\r
+ IB_WCS_REM_INVALID_REQ_ERR,\r
+ The remote node detected an invalid message on the channel. This error\r
+ is usually a result of one of the following:\r
+ - The operation was not supported on receive queue.\r
+ - There was insufficient buffers to receive a new RDMA request.\r
+ - There was insufficient buffers to receive a new atomic operation.\r
+ - An RDMA request was larger than 2^31 bytes.\r
+\r
+ IB_WCS_BAD_RESP_ERR,\r
+ An unexpected transport layer opcode was returned\r
+ by the responder.\r
+\r
+ IB_WCS_LOCAL_ACCESS_ERR,\r
+ A protection error occurred on a local data buffer\r
+ during the processing of a RDMA Write with Immediate Data \r
+ operation sent from the remote node.\r
+\r
+ IB_WCS_UNMATCHED_RESPONSE\r
+ A response MAD was received for which there was no matching send. The\r
+ send operation may have been canceled by the user or may have timed\r
+ out.\r
+\r
+ IB_WCS_CANCELED\r
+ The completed work request was canceled by the user.\r
+\r
+ IB_WCS_GENERAL_ERR,\r
+ Any other error\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo260">[Structures]<a name="Access20Layer2fib5fwc5ft">\r
+Access Layer/ib_wc_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_wc_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Work completion information.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef struct _ib_wc\r
+{\r
+ struct _ib_wc* __ptr64 p_next;\r
+ uint64_t wr_id;\r
+ <a href="#robo261">ib_wc_type_t</a> wc_type;\r
+\r
+ uint32_t length;\r
+ <a href="#robo259">ib_wc_status_t</a> status;\r
+ uint64_t vendor_specific;\r
+\r
+ union _wc_recv\r
+ {\r
+ struct _wc_conn\r
+ {\r
+ <a href="#robo224">ib_recv_opt_t</a> recv_opt;\r
+ <a href="#robo894">ib_net32_t</a> immediate_data;\r
+\r
+ } conn;\r
+\r
+ struct _wc_ud\r
+ {\r
+ <a href="#robo224">ib_recv_opt_t</a> recv_opt;\r
+ <a href="#robo894">ib_net32_t</a> immediate_data;\r
+ <a href="#robo894">ib_net32_t</a> remote_qp;\r
+ uint16_t pkey_index;\r
+ <a href="#robo893">ib_net16_t</a> remote_lid;\r
+ uint8_t remote_sl;\r
+ uint8_t path_bits;\r
+\r
+ } ud;\r
+\r
+ struct _wc_raw_ipv6\r
+ {\r
+ <a href="#robo893">ib_net16_t</a> remote_lid;\r
+ uint8_t remote_sl;\r
+ uint8_t path_bits;\r
+\r
+ } raw_ipv6;\r
+\r
+ struct _wc_raw_ether\r
+ {\r
+ <a href="#robo893">ib_net16_t</a> remote_lid;\r
+ uint8_t remote_sl;\r
+ uint8_t path_bits;\r
+ <a href="#robo893">ib_net16_t</a> ether_type;\r
+\r
+ } raw_ether;\r
+\r
+ } recv;\r
+\r
+} <strong>ib_wc_t</strong>;\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> p_next\r
+ A pointer used to chain work completions. This permits multiple\r
+ work completions to be retrieved from a completion queue through a\r
+ single function call. This value is set to NULL to mark the end of\r
+ the chain.\r
+\r
+ wr_id\r
+ The 64-bit work request identifier that was specified when posting the\r
+ work request.\r
+\r
+ wc_type\r
+ Indicates the type of work completion.\r
+\r
+ length\r
+ The total length of the data sent or received with the work request.\r
+\r
+ status\r
+ The result of the work request.\r
+\r
+ vendor_specific\r
+ HCA vendor specific information returned as part of the completion.\r
+\r
+ recv.conn.recv_opt\r
+ Indicates optional fields valid as part of a work request that\r
+ completed on a connected (reliable or unreliable) queue pair.\r
+\r
+ recv.conn.immediate_data\r
+ 32-bit field received as part of an inbound message on a connected\r
+ queue pair. This field is only valid if the recv_opt flag\r
+ IB_RECV_OPT_IMMEDIATE has been set.\r
+\r
+ recv.ud.recv_opt\r
+ Indicates optional fields valid as part of a work request that\r
+ completed on an unreliable datagram queue pair.\r
+\r
+ recv.ud.immediate_data\r
+ 32-bit field received as part of an inbound message on a unreliable\r
+ datagram queue pair. This field is only valid if the recv_opt flag\r
+ IB_RECV_OPT_IMMEDIATE has been set.\r
+\r
+ recv.ud.remote_qp\r
+ Identifies the source queue pair of a received datagram.\r
+\r
+ recv.ud.pkey_index\r
+ The pkey index of the source queue pair. This is valid only for\r
+ IB_QPT_QP1 and IB_QPT_QP1_ALIAS QP types.\r
+\r
+ recv.ud.remote_lid\r
+ The source LID of the received datagram.\r
+\r
+ recv.ud.remote_sl\r
+ The service level used by the source of the received datagram.\r
+\r
+ recv.ud.path_bits\r
+ path bits...\r
+\r
+ recv.raw_ipv6.remote_lid\r
+ The source LID of the received message.\r
+\r
+ recv.raw_ipv6.remote_sl\r
+ The service level used by the source of the received message.\r
+\r
+ recv.raw_ipv6.path_bits\r
+ path bits...\r
+\r
+ recv.raw_ether.remote_lid\r
+ The source LID of the received message.\r
+\r
+ recv.raw_ether.remote_sl\r
+ The service level used by the source of the received message.\r
+\r
+ recv.raw_ether.path_bits\r
+ path bits...\r
+\r
+ recv.raw_ether.ether_type\r
+ ether type...\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> When the work request completes with error, the only values that the\r
+ consumer can depend on are the wr_id field, and the status of the\r
+ operation.\r
+\r
+ If the consumer is using the same CQ for completions from more than\r
+ one type of QP (i.e Reliable Connected, Datagram etc), then the consumer\r
+ must have additional information to decide what fields of the union are\r
+ valid.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo261">ib_wc_type_t</a>, <a href="#robo210">ib_qp_type_t</a>, <a href="#robo259">ib_wc_status_t</a>, <a href="#robo224">ib_recv_opt_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo261">[Definitions]<a name="Access20Layer2fib5fwc5ftype5ft">\r
+Access Layer/ib_wc_type_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_wc_type_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Indicates the type of work completion.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef enum _<strong>ib_wc_type_t</strong>\r
+{\r
+ IB_WC_SEND,\r
+ IB_WC_RDMA_WRITE,\r
+ IB_WC_RECV,\r
+ IB_WC_RDMA_READ,\r
+ IB_WC_MW_BIND,\r
+ IB_WC_FETCH_ADD,\r
+ IB_WC_COMPARE_SWAP,\r
+ IB_WC_RECV_RDMA_WRITE,\r
+ IB_WC_UNKNOWN\r
+\r
+} <strong>ib_wc_type_t</strong>;\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo262">[Definitions]<a name="Access20Layer2fib5fwr5ftype5ft">\r
+Access Layer/ib_wr_type_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_wr_type_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Identifies the type of work request posted to a queue pair.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef enum _<strong>ib_wr_type_t</strong>\r
+{\r
+ WR_SEND = 1,\r
+ WR_RDMA_WRITE,\r
+ WR_RDMA_READ,\r
+ WR_COMPARE_SWAP,\r
+ WR_FETCH_ADD,\r
+ WR_UNKNOWN\r
+\r
+} <strong>ib_wr_type_t</strong>;\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo709">[Structures]<a name="IBA20Base3a20Constants2fIB5fCLASS5fCAP5fGETSET">\r
+IBA Base: Constants/IB_CLASS_CAP_GETSET</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>IB_CLASS_CAP_GETSET</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> ClassPortInfo CapabilityMask bits. This bit will be set\r
+ if the class supports Get(Notice) and Set(Notice) MADs (13.4.8.1).\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo839">ib_class_port_info_t</a>, <a href="#robo710">IB_CLASS_CAP_TRAP</a>\r
+</pre>\r
+</span><p><strong>SOURCE</strong></p>\r
+<span class="SOURCE"><pre>#define <strong>IB_CLASS_CAP_GETSET</strong> 0x0002\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo710">[Structures]<a name="IBA20Base3a20Constants2fIB5fCLASS5fCAP5fTRAP">\r
+IBA Base: Constants/IB_CLASS_CAP_TRAP</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>IB_CLASS_CAP_TRAP</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> ClassPortInfo CapabilityMask bits. This bit will be set\r
+ if the class supports Trap() MADs (13.4.8.1).\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo839">ib_class_port_info_t</a>, <a href="#robo709">IB_CLASS_CAP_GETSET</a>\r
+</pre>\r
+</span><p><strong>SOURCE</strong></p>\r
+<span class="SOURCE"><pre>#define <strong>IB_CLASS_CAP_TRAP</strong> 0x0001\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo711">[Structures]<a name="IBA20Base3a20Constants2fIB5fCLASS5fRESP5fTIME5fMASK">\r
+IBA Base: Constants/IB_CLASS_RESP_TIME_MASK</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>IB_CLASS_RESP_TIME_MASK</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Mask bits to extract the reponse time value from the\r
+ resp_time_val field of <a href="#robo839">ib_class_port_info_t</a>.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo839">ib_class_port_info_t</a>\r
+</pre>\r
+</span><p><strong>SOURCE</strong></p>\r
+<span class="SOURCE"><pre>#define <strong>IB_CLASS_RESP_TIME_MASK</strong> 0x1F\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo712">[Definitions]<a name="IBA20Base3a20Constants2fIB5fDEFAULT5fPKEY">\r
+IBA Base: Constants/IB_DEFAULT_PKEY</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>IB_DEFAULT_PKEY</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> P_Key value for the default partition.\r
+</pre>\r
+</span><p><strong>SOURCE</strong></p>\r
+<span class="SOURCE"><pre>#define <strong>IB_DEFAULT_PKEY</strong> 0xFFFF\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo713">[Definitions]<a name="IBA20Base3a20Constants2fIB5fDEFAULT5fSUBNET5fPREFIX">\r
+IBA Base: Constants/IB_DEFAULT_SUBNET_PREFIX</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>IB_DEFAULT_SUBNET_PREFIX</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Default subnet GID prefix.\r
+</pre>\r
+</span><p><strong>SOURCE</strong></p>\r
+<span class="SOURCE"><pre>#define <strong>IB_DEFAULT_SUBNET_PREFIX</strong> (<a href="../complib/cl_byteswap_h.html#robo283">CL_HTON64</a>(CL_CONST64(0xFE80000000000000)))\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo714">[Definitions]<a name="IBA20Base3a20Constants2fIB5fINVALID5fPORT5fNUM">\r
+IBA Base: Constants/IB_INVALID_PORT_NUM</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>IB_INVALID_PORT_NUM</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Value used to indicate an invalid port number (14.2.5.10).\r
+</pre>\r
+</span><p><strong>SOURCE</strong></p>\r
+<span class="SOURCE"><pre>#define <strong>IB_INVALID_PORT_NUM</strong> 0xFF\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo715">[Definitions]<a name="IBA20Base3a20Constants2fIB5fLID5fMCAST5fEND">\r
+IBA Base: Constants/IB_LID_MCAST_END</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>IB_LID_MCAST_END</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Highest valid multicast LID value.\r
+</pre>\r
+</span><p><strong>SOURCE</strong></p>\r
+<span class="SOURCE"><pre>#define IB_LID_MCAST_END_HO 0xFFFE\r
+#define <strong>IB_LID_MCAST_END</strong> (<a href="../complib/cl_byteswap_h.html#robo279">CL_HTON16</a>(IB_LID_MCAST_END_HO))\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo716">[Definitions]<a name="IBA20Base3a20Constants2fIB5fLID5fMCAST5fSTART">\r
+IBA Base: Constants/IB_LID_MCAST_START</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>IB_LID_MCAST_START</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Lowest valid multicast LID value.\r
+</pre>\r
+</span><p><strong>SOURCE</strong></p>\r
+<span class="SOURCE"><pre>#define IB_LID_MCAST_START_HO 0xC000\r
+#define <strong>IB_LID_MCAST_START</strong> (<a href="../complib/cl_byteswap_h.html#robo279">CL_HTON16</a>(IB_LID_MCAST_START_HO))\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo717">[Definitions]<a name="IBA20Base3a20Constants2fIB5fLID5fPERMISSIVE">\r
+IBA Base: Constants/IB_LID_PERMISSIVE</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>IB_LID_PERMISSIVE</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Permissive LID\r
+</pre>\r
+</span><p><strong>SOURCE</strong></p>\r
+<span class="SOURCE"><pre>#define <strong>IB_LID_PERMISSIVE</strong> 0xFFFF\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo718">[Definitions]<a name="IBA20Base3a20Constants2fIB5fLID5fUCAST5fEND">\r
+IBA Base: Constants/IB_LID_UCAST_END</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>IB_LID_UCAST_END</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Highest valid unicast LID value.\r
+</pre>\r
+</span><p><strong>SOURCE</strong></p>\r
+<span class="SOURCE"><pre>#define IB_LID_UCAST_END_HO 0xBFFF\r
+#define <strong>IB_LID_UCAST_END</strong> (<a href="../complib/cl_byteswap_h.html#robo279">CL_HTON16</a>(IB_LID_UCAST_END_HO))\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo719">[Definitions]<a name="IBA20Base3a20Constants2fIB5fLID5fUCAST5fSTART">\r
+IBA Base: Constants/IB_LID_UCAST_START</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>IB_LID_UCAST_START</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Lowest valid unicast LID value.\r
+</pre>\r
+</span><p><strong>SOURCE</strong></p>\r
+<span class="SOURCE"><pre>#define IB_LID_UCAST_START_HO 0x0001\r
+#define <strong>IB_LID_UCAST_START</strong> (<a href="../complib/cl_byteswap_h.html#robo279">CL_HTON16</a>(IB_LID_UCAST_START_HO))\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo720">[Definitions]<a name="IBA20Base3a20Constants2fib5flink5fstates5ft">\r
+IBA Base: Constants/ib_link_states_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_link_states_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Defines the link states of a port.\r
+</pre>\r
+</span><p><strong>SOURCE</strong></p>\r
+<span class="SOURCE"><pre>#define IB_LINK_NO_CHANGE 0\r
+#define IB_LINK_DOWN 1\r
+#define IB_LINK_INIT 2\r
+#define IB_LINK_ARMED 3\r
+#define IB_LINK_ACTIVE 4\r
+#define IB_LINK_ACT_DEFER 5\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo721">[Definitions]<a name="IBA20Base3a20Constants2fIB5fMAD5fATTR5fCLASS5fPORT5fINFO">\r
+IBA Base: Constants/IB_MAD_ATTR_CLASS_PORT_INFO</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>IB_MAD_ATTR_CLASS_PORT_INFO</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> ClassPortInfo attribute (13.4.8)\r
+</pre>\r
+</span><p><strong>SOURCE</strong></p>\r
+<span class="SOURCE"><pre>#define <strong>IB_MAD_ATTR_CLASS_PORT_INFO</strong> (<a href="../complib/cl_byteswap_h.html#robo286">CL_NTOH16</a>(0x0001))\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo722">[Definitions]<a name="IBA20Base3a20Constants2fIB5fMAD5fATTR5fDIAG5fCODE">\r
+IBA Base: Constants/IB_MAD_ATTR_DIAG_CODE</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>IB_MAD_ATTR_DIAG_CODE</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> DiagCode attribute (16.3.3)\r
+</pre>\r
+</span><p><strong>SOURCE</strong></p>\r
+<span class="SOURCE"><pre>#define <strong>IB_MAD_ATTR_DIAG_CODE</strong> (<a href="../complib/cl_byteswap_h.html#robo286">CL_NTOH16</a>(0x0024))\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo723">[Definitions]<a name="IBA20Base3a20Constants2fIB5fMAD5fATTR5fDIAGNOSTIC5fTIMEOUT">\r
+IBA Base: Constants/IB_MAD_ATTR_DIAGNOSTIC_TIMEOUT</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>IB_MAD_ATTR_DIAGNOSTIC_TIMEOUT</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> DiagnosticTimeout attribute (16.3.3)\r
+</pre>\r
+</span><p><strong>SOURCE</strong></p>\r
+<span class="SOURCE"><pre>#define <strong>IB_MAD_ATTR_DIAGNOSTIC_TIMEOUT</strong> (<a href="../complib/cl_byteswap_h.html#robo286">CL_NTOH16</a>(0x0020))\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo724">[Definitions]<a name="IBA20Base3a20Constants2fIB5fMAD5fATTR5fGUID5fINFO">\r
+IBA Base: Constants/IB_MAD_ATTR_GUID_INFO</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>IB_MAD_ATTR_GUID_INFO</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> GUIDInfo attribute (14.2.5)\r
+</pre>\r
+</span><p><strong>SOURCE</strong></p>\r
+<span class="SOURCE"><pre>#define <strong>IB_MAD_ATTR_GUID_INFO</strong> (<a href="../complib/cl_byteswap_h.html#robo286">CL_NTOH16</a>(0x0014))\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo725">[Definitions]<a name="IBA20Base3a20Constants2fIB5fMAD5fATTR5fINFORM5fINFO">\r
+IBA Base: Constants/IB_MAD_ATTR_INFORM_INFO</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>IB_MAD_ATTR_INFORM_INFO</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> InformInfo attribute (13.4.8)\r
+</pre>\r
+</span><p><strong>SOURCE</strong></p>\r
+<span class="SOURCE"><pre>#define <strong>IB_MAD_ATTR_INFORM_INFO</strong> (<a href="../complib/cl_byteswap_h.html#robo286">CL_NTOH16</a>(0x0003))\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo726">[Definitions]<a name="IBA20Base3a20Constants2fIB5fMAD5fATTR5fIO5fUNIT5fINFO">\r
+IBA Base: Constants/IB_MAD_ATTR_IO_UNIT_INFO</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>IB_MAD_ATTR_IO_UNIT_INFO</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> IOUnitInfo attribute (16.3.3)\r
+</pre>\r
+</span><p><strong>SOURCE</strong></p>\r
+<span class="SOURCE"><pre>#define <strong>IB_MAD_ATTR_IO_UNIT_INFO</strong> (<a href="../complib/cl_byteswap_h.html#robo286">CL_NTOH16</a>(0x0010))\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo727">[Definitions]<a name="IBA20Base3a20Constants2fIB5fMAD5fATTR5fIOC5fPROFILE">\r
+IBA Base: Constants/IB_MAD_ATTR_IOC_PROFILE</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>IB_MAD_ATTR_IOC_PROFILE</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> IOControllerProfile attribute (16.3.3)\r
+</pre>\r
+</span><p><strong>SOURCE</strong></p>\r
+<span class="SOURCE"><pre>#define <strong>IB_MAD_ATTR_IOC_PROFILE</strong> (<a href="../complib/cl_byteswap_h.html#robo286">CL_NTOH16</a>(0x0011))\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo728">[Definitions]<a name="IBA20Base3a20Constants2fIB5fMAD5fATTR5fLED5fINFO">\r
+IBA Base: Constants/IB_MAD_ATTR_LED_INFO</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>IB_MAD_ATTR_LED_INFO</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> LedInfo attribute (14.2.5)\r
+</pre>\r
+</span><p><strong>SOURCE</strong></p>\r
+<span class="SOURCE"><pre>#define <strong>IB_MAD_ATTR_LED_INFO</strong> (<a href="../complib/cl_byteswap_h.html#robo286">CL_NTOH16</a>(0x0031))\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo729">[Definitions]<a name="IBA20Base3a20Constants2fIB5fMAD5fATTR5fLFT5fRECORD">\r
+IBA Base: Constants/IB_MAD_ATTR_LFT_RECORD</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>IB_MAD_ATTR_LFT_RECORD</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> LinearForwardingRecord attribute (15.2.5.6)\r
+</pre>\r
+</span><p><strong>SOURCE</strong></p>\r
+<span class="SOURCE"><pre>#define <strong>IB_MAD_ATTR_LFT_RECORD</strong> (<a href="../complib/cl_byteswap_h.html#robo286">CL_NTOH16</a>(0x0015))\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo730">[Definitions]<a name="IBA20Base3a20Constants2fIB5fMAD5fATTR5fLIN5fFWD5fTBL">\r
+IBA Base: Constants/IB_MAD_ATTR_LIN_FWD_TBL</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>IB_MAD_ATTR_LIN_FWD_TBL</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Switch linear forwarding table\r
+</pre>\r
+</span><p><strong>SOURCE</strong></p>\r
+<span class="SOURCE"><pre>#define <strong>IB_MAD_ATTR_LIN_FWD_TBL</strong> (<a href="../complib/cl_byteswap_h.html#robo286">CL_NTOH16</a>(0x0019))\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo731">[Definitions]<a name="IBA20Base3a20Constants2fIB5fMAD5fATTR5fLINK5fRECORD">\r
+IBA Base: Constants/IB_MAD_ATTR_LINK_RECORD</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>IB_MAD_ATTR_LINK_RECORD</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> LinkRecord attribute (15.2.5)\r
+</pre>\r
+</span><p><strong>SOURCE</strong></p>\r
+<span class="SOURCE"><pre>#define <strong>IB_MAD_ATTR_LINK_RECORD</strong> (<a href="../complib/cl_byteswap_h.html#robo286">CL_NTOH16</a>(0x0020))\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo732">[Definitions]<a name="IBA20Base3a20Constants2fIB5fMAD5fATTR5fMCAST5fFWD5fTBL">\r
+IBA Base: Constants/IB_MAD_ATTR_MCAST_FWD_TBL</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>IB_MAD_ATTR_MCAST_FWD_TBL</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Switch multicast forwarding table\r
+</pre>\r
+</span><p><strong>SOURCE</strong></p>\r
+<span class="SOURCE"><pre>#define <strong>IB_MAD_ATTR_MCAST_FWD_TBL</strong> (<a href="../complib/cl_byteswap_h.html#robo286">CL_NTOH16</a>(0x001B))\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo733">[Definitions]<a name="IBA20Base3a20Constants2fIB5fMAD5fATTR5fMCMEMBER5fRECORD">\r
+IBA Base: Constants/IB_MAD_ATTR_MCMEMBER_RECORD</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>IB_MAD_ATTR_MCMEMBER_RECORD</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> MCMemberRecord attribute (15.2.5)\r
+</pre>\r
+</span><p><strong>SOURCE</strong></p>\r
+<span class="SOURCE"><pre>#define <strong>IB_MAD_ATTR_MCMEMBER_RECORD</strong> (<a href="../complib/cl_byteswap_h.html#robo286">CL_NTOH16</a>(0x0038))\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo734">[Definitions]<a name="IBA20Base3a20Constants2fIB5fMAD5fATTR5fMULTIPATH5fRECORD">\r
+IBA Base: Constants/IB_MAD_ATTR_MULTIPATH_RECORD</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>IB_MAD_ATTR_MULTIPATH_RECORD</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> MultiPath attribute (15.2.5)\r
+</pre>\r
+</span><p><strong>SOURCE</strong></p>\r
+<span class="SOURCE"><pre>#define <strong>IB_MAD_ATTR_MULTIPATH_RECORD</strong> (<a href="../complib/cl_byteswap_h.html#robo286">CL_NTOH16</a>(0x003A))\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo735">[Definitions]<a name="IBA20Base3a20Constants2fIB5fMAD5fATTR5fNODE5fDESC">\r
+IBA Base: Constants/IB_MAD_ATTR_NODE_DESC</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>IB_MAD_ATTR_NODE_DESC</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> NodeDescription attribute (14.2.5)\r
+</pre>\r
+</span><p><strong>SOURCE</strong></p>\r
+<span class="SOURCE"><pre>#define <strong>IB_MAD_ATTR_NODE_DESC</strong> (<a href="../complib/cl_byteswap_h.html#robo286">CL_NTOH16</a>(0x0010))\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo736">[Definitions]<a name="IBA20Base3a20Constants2fIB5fMAD5fATTR5fNODE5fINFO">\r
+IBA Base: Constants/IB_MAD_ATTR_NODE_INFO</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>IB_MAD_ATTR_NODE_INFO</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> NodeInfo attribute (14.2.5)\r
+</pre>\r
+</span><p><strong>SOURCE</strong></p>\r
+<span class="SOURCE"><pre>#define <strong>IB_MAD_ATTR_NODE_INFO</strong> (<a href="../complib/cl_byteswap_h.html#robo286">CL_NTOH16</a>(0x0011))\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo737">[Definitions]<a name="IBA20Base3a20Constants2fIB5fMAD5fATTR5fNODE5fRECORD">\r
+IBA Base: Constants/IB_MAD_ATTR_NODE_RECORD</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>IB_MAD_ATTR_NODE_RECORD</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> NodeRecord attribute (15.2.5)\r
+</pre>\r
+</span><p><strong>SOURCE</strong></p>\r
+<span class="SOURCE"><pre>#define <strong>IB_MAD_ATTR_NODE_RECORD</strong> (<a href="../complib/cl_byteswap_h.html#robo286">CL_NTOH16</a>(0x0011))\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo738">[Definitions]<a name="IBA20Base3a20Constants2fIB5fMAD5fATTR5fNOTICE">\r
+IBA Base: Constants/IB_MAD_ATTR_NOTICE</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>IB_MAD_ATTR_NOTICE</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Notice attribute (13.4.8)\r
+</pre>\r
+</span><p><strong>SOURCE</strong></p>\r
+<span class="SOURCE"><pre>#define <strong>IB_MAD_ATTR_NOTICE</strong> (<a href="../complib/cl_byteswap_h.html#robo286">CL_NTOH16</a>(0x0002))\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo739">[Definitions]<a name="IBA20Base3a20Constants2fIB5fMAD5fATTR5fP5fKEY5fTABLE">\r
+IBA Base: Constants/IB_MAD_ATTR_P_KEY_TABLE</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>IB_MAD_ATTR_P_KEY_TABLE</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> PartitionTable attribute (14.2.5)\r
+</pre>\r
+</span><p><strong>SOURCE</strong></p>\r
+<span class="SOURCE"><pre>#define <strong>IB_MAD_ATTR_P_KEY_TABLE</strong> (<a href="../complib/cl_byteswap_h.html#robo286">CL_NTOH16</a>(0x0016))\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo740">[Definitions]<a name="IBA20Base3a20Constants2fIB5fMAD5fATTR5fPATH5fRECORD">\r
+IBA Base: Constants/IB_MAD_ATTR_PATH_RECORD</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>IB_MAD_ATTR_PATH_RECORD</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> PathRecord attribute (15.2.5)\r
+</pre>\r
+</span><p><strong>SOURCE</strong></p>\r
+<span class="SOURCE"><pre>#define <strong>IB_MAD_ATTR_PATH_RECORD</strong> (<a href="../complib/cl_byteswap_h.html#robo286">CL_NTOH16</a>(0x0035))\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo741">[Definitions]<a name="IBA20Base3a20Constants2fIB5fMAD5fATTR5fPKEYTBL5fRECORD">\r
+IBA Base: Constants/IB_MAD_ATTR_PKEYTBL_RECORD</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>IB_MAD_ATTR_PKEYTBL_RECORD</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> P-KEY table attribute (15.2.5)\r
+</pre>\r
+</span><p><strong>SOURCE</strong></p>\r
+<span class="SOURCE"><pre>#define IB_MAD_ATTR_PKEY_TBL_RECORD (<a href="../complib/cl_byteswap_h.html#robo286">CL_NTOH16</a>(0x0033))\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo742">[Definitions]<a name="IBA20Base3a20Constants2fIB5fMAD5fATTR5fPORT5fCNTRS">\r
+IBA Base: Constants/IB_MAD_ATTR_PORT_CNTRS</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>IB_MAD_ATTR_PORT_CNTRS</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> SwitchInfo attribute (16.1.2)\r
+</pre>\r
+</span><p><strong>SOURCE</strong></p>\r
+<span class="SOURCE"><pre>#define <strong>IB_MAD_ATTR_PORT_CNTRS</strong> (<a href="../complib/cl_byteswap_h.html#robo286">CL_NTOH16</a>(0x0012))\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo743">[Definitions]<a name="IBA20Base3a20Constants2fIB5fMAD5fATTR5fPORT5fINFO">\r
+IBA Base: Constants/IB_MAD_ATTR_PORT_INFO</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>IB_MAD_ATTR_PORT_INFO</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> PortInfo attribute (14.2.5)\r
+</pre>\r
+</span><p><strong>SOURCE</strong></p>\r
+<span class="SOURCE"><pre>#define <strong>IB_MAD_ATTR_PORT_INFO</strong> (<a href="../complib/cl_byteswap_h.html#robo286">CL_NTOH16</a>(0x0015))\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo744">[Definitions]<a name="IBA20Base3a20Constants2fIB5fMAD5fATTR5fPORT5fSMPL5fCTRL">\r
+IBA Base: Constants/IB_MAD_ATTR_PORT_SMPL_CTRL</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>IB_MAD_ATTR_PORT_SMPL_CTRL</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> NodeDescription attribute (16.1.2)\r
+</pre>\r
+</span><p><strong>SOURCE</strong></p>\r
+<span class="SOURCE"><pre>#define <strong>IB_MAD_ATTR_PORT_SMPL_CTRL</strong> (<a href="../complib/cl_byteswap_h.html#robo286">CL_NTOH16</a>(0x0010))\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo745">[Definitions]<a name="IBA20Base3a20Constants2fIB5fMAD5fATTR5fPORT5fSMPL5fRSLT">\r
+IBA Base: Constants/IB_MAD_ATTR_PORT_SMPL_RSLT</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>IB_MAD_ATTR_PORT_SMPL_RSLT</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> NodeInfo attribute (16.1.2)\r
+</pre>\r
+</span><p><strong>SOURCE</strong></p>\r
+<span class="SOURCE"><pre>#define <strong>IB_MAD_ATTR_PORT_SMPL_RSLT</strong> (<a href="../complib/cl_byteswap_h.html#robo286">CL_NTOH16</a>(0x0011))\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo746">[Definitions]<a name="IBA20Base3a20Constants2fIB5fMAD5fATTR5fPORTINFO5fRECORD">\r
+IBA Base: Constants/IB_MAD_ATTR_PORTINFO_RECORD</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>IB_MAD_ATTR_PORTINFO_RECORD</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> PortInfoRecord attribute (15.2.5)\r
+</pre>\r
+</span><p><strong>SOURCE</strong></p>\r
+<span class="SOURCE"><pre>#define <strong>IB_MAD_ATTR_PORTINFO_RECORD</strong> (<a href="../complib/cl_byteswap_h.html#robo286">CL_NTOH16</a>(0x0012))\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo747">[Definitions]<a name="IBA20Base3a20Constants2fIB5fMAD5fATTR5fPREPARE5fTO5fTEST">\r
+IBA Base: Constants/IB_MAD_ATTR_PREPARE_TO_TEST</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>IB_MAD_ATTR_PREPARE_TO_TEST</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> PrepareToTest attribute (16.3.3)\r
+</pre>\r
+</span><p><strong>SOURCE</strong></p>\r
+<span class="SOURCE"><pre>#define <strong>IB_MAD_ATTR_PREPARE_TO_TEST</strong> (<a href="../complib/cl_byteswap_h.html#robo286">CL_NTOH16</a>(0x0021))\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo748">[Definitions]<a name="IBA20Base3a20Constants2fIB5fMAD5fATTR5fRND5fFWD5fTBL">\r
+IBA Base: Constants/IB_MAD_ATTR_RND_FWD_TBL</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>IB_MAD_ATTR_RND_FWD_TBL</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Switch random forwarding table\r
+</pre>\r
+</span><p><strong>SOURCE</strong></p>\r
+<span class="SOURCE"><pre>#define <strong>IB_MAD_ATTR_RND_FWD_TBL</strong> (<a href="../complib/cl_byteswap_h.html#robo286">CL_NTOH16</a>(0x001A))\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo749">[Definitions]<a name="IBA20Base3a20Constants2fIB5fMAD5fATTR5fSERVICE5fENTRIES">\r
+IBA Base: Constants/IB_MAD_ATTR_SERVICE_ENTRIES</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>IB_MAD_ATTR_SERVICE_ENTRIES</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> ServiceEntries attribute (16.3.3)\r
+</pre>\r
+</span><p><strong>SOURCE</strong></p>\r
+<span class="SOURCE"><pre>#define <strong>IB_MAD_ATTR_SERVICE_ENTRIES</strong> (<a href="../complib/cl_byteswap_h.html#robo286">CL_NTOH16</a>(0x0012))\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo750">[Definitions]<a name="IBA20Base3a20Constants2fIB5fMAD5fATTR5fSERVICE5fRECORD">\r
+IBA Base: Constants/IB_MAD_ATTR_SERVICE_RECORD</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>IB_MAD_ATTR_SERVICE_RECORD</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> ServiceRecord attribute (15.2.5)\r
+</pre>\r
+</span><p><strong>SOURCE</strong></p>\r
+<span class="SOURCE"><pre>#define <strong>IB_MAD_ATTR_SERVICE_RECORD</strong> (<a href="../complib/cl_byteswap_h.html#robo286">CL_NTOH16</a>(0x0031))\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo751">[Definitions]<a name="IBA20Base3a20Constants2fIB5fMAD5fATTR5fSLVL5fRECORD">\r
+IBA Base: Constants/IB_MAD_ATTR_SLVL_RECORD</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>IB_MAD_ATTR_SLVL_RECORD</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> VSLtoL <a href="../complib/cl_map_h.html#robo17">Map</a> Table attribute (15.2.5)\r
+</pre>\r
+</span><p><strong>SOURCE</strong></p>\r
+<span class="SOURCE"><pre>#define <strong>IB_MAD_ATTR_SLVL_RECORD</strong> (<a href="../complib/cl_byteswap_h.html#robo286">CL_NTOH16</a>(0x0013))\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo752">[Definitions]<a name="IBA20Base3a20Constants2fIB5fMAD5fATTR5fSLVL5fTABLE">\r
+IBA Base: Constants/IB_MAD_ATTR_SLVL_TABLE</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>IB_MAD_ATTR_SLVL_TABLE</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> SL VL Mapping Table attribute (14.2.5)\r
+</pre>\r
+</span><p><strong>SOURCE</strong></p>\r
+<span class="SOURCE"><pre>#define <strong>IB_MAD_ATTR_SLVL_TABLE</strong> (<a href="../complib/cl_byteswap_h.html#robo286">CL_NTOH16</a>(0x0017))\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo753">[Definitions]<a name="IBA20Base3a20Constants2fIB5fMAD5fATTR5fSM5fINFO">\r
+IBA Base: Constants/IB_MAD_ATTR_SM_INFO</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>IB_MAD_ATTR_SM_INFO</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> SMInfo attribute (14.2.5)\r
+</pre>\r
+</span><p><strong>SOURCE</strong></p>\r
+<span class="SOURCE"><pre>#define <strong>IB_MAD_ATTR_SM_INFO</strong> (<a href="../complib/cl_byteswap_h.html#robo286">CL_NTOH16</a>(0x0020))\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo754">[Definitions]<a name="IBA20Base3a20Constants2fIB5fMAD5fATTR5fSMINFO5fRECORD">\r
+IBA Base: Constants/IB_MAD_ATTR_SMINFO_RECORD</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>IB_MAD_ATTR_SMINFO_RECORD</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> SmInfoRecord attribute (15.2.5)\r
+</pre>\r
+</span><p><strong>SOURCE</strong></p>\r
+<span class="SOURCE"><pre>#define <strong>IB_MAD_ATTR_SMINFO_RECORD</strong> (<a href="../complib/cl_byteswap_h.html#robo286">CL_NTOH16</a>(0x0018))\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo755">[Definitions]<a name="IBA20Base3a20Constants2fIB5fMAD5fATTR5fSVC5fASSOCIATION5fRECORD">\r
+IBA Base: Constants/IB_MAD_ATTR_SVC_ASSOCIATION_RECORD</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>IB_MAD_ATTR_SVC_ASSOCIATION_RECORD</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Service Association attribute (15.2.5)\r
+</pre>\r
+</span><p><strong>SOURCE</strong></p>\r
+<span class="SOURCE"><pre>#define <strong>IB_MAD_ATTR_SVC_ASSOCIATION_RECORD</strong> (<a href="../complib/cl_byteswap_h.html#robo286">CL_NTOH16</a>(0x003B))\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo756">[Definitions]<a name="IBA20Base3a20Constants2fIB5fMAD5fATTR5fSWITCH5fINFO">\r
+IBA Base: Constants/IB_MAD_ATTR_SWITCH_INFO</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>IB_MAD_ATTR_SWITCH_INFO</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> SwitchInfo attribute (14.2.5)\r
+</pre>\r
+</span><p><strong>SOURCE</strong></p>\r
+<span class="SOURCE"><pre>#define <strong>IB_MAD_ATTR_SWITCH_INFO</strong> (<a href="../complib/cl_byteswap_h.html#robo286">CL_NTOH16</a>(0x0012))\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo757">[Definitions]<a name="IBA20Base3a20Constants2fIB5fMAD5fATTR5fTEST5fDEVICE5fLOOP">\r
+IBA Base: Constants/IB_MAD_ATTR_TEST_DEVICE_LOOP</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>IB_MAD_ATTR_TEST_DEVICE_LOOP</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> TestDeviceLoop attribute (16.3.3)\r
+</pre>\r
+</span><p><strong>SOURCE</strong></p>\r
+<span class="SOURCE"><pre>#define <strong>IB_MAD_ATTR_TEST_DEVICE_LOOP</strong> (<a href="../complib/cl_byteswap_h.html#robo286">CL_NTOH16</a>(0x0023))\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo758">[Definitions]<a name="IBA20Base3a20Constants2fIB5fMAD5fATTR5fTEST5fDEVICE5fONCE">\r
+IBA Base: Constants/IB_MAD_ATTR_TEST_DEVICE_ONCE</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>IB_MAD_ATTR_TEST_DEVICE_ONCE</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> TestDeviceOnce attribute (16.3.3)\r
+</pre>\r
+</span><p><strong>SOURCE</strong></p>\r
+<span class="SOURCE"><pre>#define <strong>IB_MAD_ATTR_TEST_DEVICE_ONCE</strong> (<a href="../complib/cl_byteswap_h.html#robo286">CL_NTOH16</a>(0x0022))\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo759">[Definitions]<a name="IBA20Base3a20Constants2fIB5fMAD5fATTR5fTRACE5fRECORD">\r
+IBA Base: Constants/IB_MAD_ATTR_TRACE_RECORD</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> IB_MAD_ATTR_MTRACE_RECORD\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> TraceRecord attribute (15.2.5)\r
+</pre>\r
+</span><p><strong>SOURCE</strong></p>\r
+<span class="SOURCE"><pre>#define <strong>IB_MAD_ATTR_TRACE_RECORD</strong> (<a href="../complib/cl_byteswap_h.html#robo286">CL_NTOH16</a>(0x0039))\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo760">[Definitions]<a name="IBA20Base3a20Constants2fIB5fMAD5fATTR5fVENDOR5fDIAG">\r
+IBA Base: Constants/IB_MAD_ATTR_VENDOR_DIAG</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>IB_MAD_ATTR_VENDOR_DIAG</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> VendorDiag attribute (14.2.5)\r
+</pre>\r
+</span><p><strong>SOURCE</strong></p>\r
+<span class="SOURCE"><pre>#define <strong>IB_MAD_ATTR_VENDOR_DIAG</strong> (<a href="../complib/cl_byteswap_h.html#robo286">CL_NTOH16</a>(0x0030))\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo761">[Definitions]<a name="IBA20Base3a20Constants2fIB5fMAD5fATTR5fVL5fARBITRATION">\r
+IBA Base: Constants/IB_MAD_ATTR_VL_ARBITRATION</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>IB_MAD_ATTR_VL_ARBITRATION</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> VL Arbitration Table attribute (14.2.5)\r
+</pre>\r
+</span><p><strong>SOURCE</strong></p>\r
+<span class="SOURCE"><pre>#define <strong>IB_MAD_ATTR_VL_ARBITRATION</strong> (<a href="../complib/cl_byteswap_h.html#robo286">CL_NTOH16</a>(0x0018))\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo762">[Definitions]<a name="IBA20Base3a20Constants2fIB5fMAD5fATTR5fVLARB5fRECORD">\r
+IBA Base: Constants/IB_MAD_ATTR_VLARB_RECORD</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>IB_MAD_ATTR_VLARB_RECORD</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> VL Arbitration Table attribute (15.2.5)\r
+</pre>\r
+</span><p><strong>SOURCE</strong></p>\r
+<span class="SOURCE"><pre>#define <strong>IB_MAD_ATTR_VLARB_RECORD</strong> (<a href="../complib/cl_byteswap_h.html#robo286">CL_NTOH16</a>(0x0036))\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo763">[Definitions]<a name="IBA20Base3a20Constants2fIB5fMAD5fMETHOD5fGET">\r
+IBA Base: Constants/IB_MAD_METHOD_GET</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>IB_MAD_METHOD_GET</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Get() Method (13.4.5)\r
+</pre>\r
+</span><p><strong>SOURCE</strong></p>\r
+<span class="SOURCE"><pre>#define <strong>IB_MAD_METHOD_GET</strong> 0x01\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo764">[Definitions]<a name="IBA20Base3a20Constants2fIB5fMAD5fMETHOD5fGET5fRESP">\r
+IBA Base: Constants/IB_MAD_METHOD_GET_RESP</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>IB_MAD_METHOD_GET_RESP</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> GetResp() Method (13.4.5)\r
+</pre>\r
+</span><p><strong>SOURCE</strong></p>\r
+<span class="SOURCE"><pre>#define <strong>IB_MAD_METHOD_GET_RESP</strong> 0x81\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo765">[Definitions]<a name="IBA20Base3a20Constants2fIB5fMAD5fMETHOD5fGETTABLE">\r
+IBA Base: Constants/IB_MAD_METHOD_GETTABLE</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>IB_MAD_METHOD_GETTABLE</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> SubnAdmGetTable() Method (15.2.2)\r
+</pre>\r
+</span><p><strong>SOURCE</strong></p>\r
+<span class="SOURCE"><pre>#define <strong>IB_MAD_METHOD_GETTABLE</strong> 0x12\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo766">[Definitions]<a name="IBA20Base3a20Constants2fIB5fMAD5fMETHOD5fGETTABLE5fRESP">\r
+IBA Base: Constants/IB_MAD_METHOD_GETTABLE_RESP</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>IB_MAD_METHOD_GETTABLE_RESP</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> SubnAdmGetTableResp() Method (15.2.2)\r
+</pre>\r
+</span><p><strong>SOURCE</strong></p>\r
+<span class="SOURCE"><pre>#define <strong>IB_MAD_METHOD_GETTABLE_RESP</strong> 0x92\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo767">[Definitions]<a name="IBA20Base3a20Constants2fIB5fMAD5fMETHOD5fREPORT">\r
+IBA Base: Constants/IB_MAD_METHOD_REPORT</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>IB_MAD_METHOD_REPORT</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Report() Method (13.4.5)\r
+</pre>\r
+</span><p><strong>SOURCE</strong></p>\r
+<span class="SOURCE"><pre>#define <strong>IB_MAD_METHOD_REPORT</strong> 0x06\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo768">[Definitions]<a name="IBA20Base3a20Constants2fIB5fMAD5fMETHOD5fREPORT5fRESP">\r
+IBA Base: Constants/IB_MAD_METHOD_REPORT_RESP</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>IB_MAD_METHOD_REPORT_RESP</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> ReportResp() Method (13.4.5)\r
+</pre>\r
+</span><p><strong>SOURCE</strong></p>\r
+<span class="SOURCE"><pre>#define <strong>IB_MAD_METHOD_REPORT_RESP</strong> 0x86\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo769">[Definitions]<a name="IBA20Base3a20Constants2fIB5fMAD5fMETHOD5fRESP5fMASK">\r
+IBA Base: Constants/IB_MAD_METHOD_RESP_MASK</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>IB_MAD_METHOD_RESP_MASK</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Response mask to extract 'R' bit from the method field. (13.4.5)\r
+</pre>\r
+</span><p><strong>SOURCE</strong></p>\r
+<span class="SOURCE"><pre>#define <strong>IB_MAD_METHOD_RESP_MASK</strong> 0x80\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo770">[Definitions]<a name="IBA20Base3a20Constants2fIB5fMAD5fMETHOD5fSEND">\r
+IBA Base: Constants/IB_MAD_METHOD_SEND</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>IB_MAD_METHOD_SEND</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Send() Method (13.4.5)\r
+</pre>\r
+</span><p><strong>SOURCE</strong></p>\r
+<span class="SOURCE"><pre>#define <strong>IB_MAD_METHOD_SEND</strong> 0x03\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo771">[Definitions]<a name="IBA20Base3a20Constants2fIB5fMAD5fMETHOD5fSET">\r
+IBA Base: Constants/IB_MAD_METHOD_SET</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>IB_MAD_METHOD_SET</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Set() Method (13.4.5)\r
+</pre>\r
+</span><p><strong>SOURCE</strong></p>\r
+<span class="SOURCE"><pre>#define <strong>IB_MAD_METHOD_SET</strong> 0x02\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo772">[Definitions]<a name="IBA20Base3a20Constants2fIB5fMAD5fMETHOD5fTRAP">\r
+IBA Base: Constants/IB_MAD_METHOD_TRAP</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>IB_MAD_METHOD_TRAP</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Trap() Method (13.4.5)\r
+</pre>\r
+</span><p><strong>SOURCE</strong></p>\r
+<span class="SOURCE"><pre>#define <strong>IB_MAD_METHOD_TRAP</strong> 0x05\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo773">[Definitions]<a name="IBA20Base3a20Constants2fIB5fMAD5fMETHOD5fTRAP5fREPRESS">\r
+IBA Base: Constants/IB_MAD_METHOD_TRAP_REPRESS</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>IB_MAD_METHOD_TRAP_REPRESS</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> TrapRepress() Method (13.4.5)\r
+</pre>\r
+</span><p><strong>SOURCE</strong></p>\r
+<span class="SOURCE"><pre>#define <strong>IB_MAD_METHOD_TRAP_REPRESS</strong> 0x07\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo774">[Definitions]<a name="IBA20Base3a20Constants2fIB5fMAD5fSTATUS5fBUSY">\r
+IBA Base: Constants/IB_MAD_STATUS_BUSY</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>IB_MAD_STATUS_BUSY</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Temporarily busy, MAD discarded (13.4.7)\r
+</pre>\r
+</span><p><strong>SOURCE</strong></p>\r
+<span class="SOURCE"><pre>#define <strong>IB_MAD_STATUS_BUSY</strong> (<a href="../complib/cl_byteswap_h.html#robo279">CL_HTON16</a>(0x0001))\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo775">[Definitions]<a name="IBA20Base3a20Constants2fIB5fMAD5fSTATUS5fINVALID5fFIELD">\r
+IBA Base: Constants/IB_MAD_STATUS_INVALID_FIELD</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>IB_MAD_STATUS_INVALID_FIELD</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Attribute contains one or more invalid fields (13.4.7)\r
+</pre>\r
+</span><p><strong>SOURCE</strong></p>\r
+<span class="SOURCE"><pre>#define <strong>IB_MAD_STATUS_INVALID_FIELD</strong> (<a href="../complib/cl_byteswap_h.html#robo279">CL_HTON16</a>(0x001C))\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo776">[Definitions]<a name="IBA20Base3a20Constants2fIB5fMAD5fSTATUS5fREDIRECT">\r
+IBA Base: Constants/IB_MAD_STATUS_REDIRECT</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>IB_MAD_STATUS_REDIRECT</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> QP Redirection required (13.4.7)\r
+</pre>\r
+</span><p><strong>SOURCE</strong></p>\r
+<span class="SOURCE"><pre>#define <strong>IB_MAD_STATUS_REDIRECT</strong> (<a href="../complib/cl_byteswap_h.html#robo279">CL_HTON16</a>(0x0002))\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo777">[Definitions]<a name="IBA20Base3a20Constants2fIB5fMAD5fSTATUS5fUNSUP5fCLASS5fVER">\r
+IBA Base: Constants/IB_MAD_STATUS_UNSUP_CLASS_VER</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>IB_MAD_STATUS_UNSUP_CLASS_VER</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Unsupported class version (13.4.7)\r
+</pre>\r
+</span><p><strong>SOURCE</strong></p>\r
+<span class="SOURCE"><pre>#define <strong>IB_MAD_STATUS_UNSUP_CLASS_VER</strong> (<a href="../complib/cl_byteswap_h.html#robo279">CL_HTON16</a>(0x0004))\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo778">[Definitions]<a name="IBA20Base3a20Constants2fIB5fMAD5fSTATUS5fUNSUP5fMETHOD">\r
+IBA Base: Constants/IB_MAD_STATUS_UNSUP_METHOD</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>IB_MAD_STATUS_UNSUP_METHOD</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Unsupported method (13.4.7)\r
+</pre>\r
+</span><p><strong>SOURCE</strong></p>\r
+<span class="SOURCE"><pre>#define <strong>IB_MAD_STATUS_UNSUP_METHOD</strong> (<a href="../complib/cl_byteswap_h.html#robo279">CL_HTON16</a>(0x0008))\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo779">[Definitions]<a name="IBA20Base3a20Constants2fIB5fMAD5fSTATUS5fUNSUP5fMETHOD5fATTR">\r
+IBA Base: Constants/IB_MAD_STATUS_UNSUP_METHOD_ATTR</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>IB_MAD_STATUS_UNSUP_METHOD_ATTR</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Unsupported method/attribute combination (13.4.7)\r
+</pre>\r
+</span><p><strong>SOURCE</strong></p>\r
+<span class="SOURCE"><pre>#define <strong>IB_MAD_STATUS_UNSUP_METHOD_ATTR</strong> (<a href="../complib/cl_byteswap_h.html#robo279">CL_HTON16</a>(0x000C))\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo780">[Definitions]<a name="IBA20Base3a20Constants2fIB5fMAX5fMETHOD">\r
+IBA Base: Constants/IB_MAX_METHOD</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>IB_MAX_METHOD</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Total number of methods available to a class, not including the R-bit.\r
+</pre>\r
+</span><p><strong>SOURCE</strong></p>\r
+<span class="SOURCE"><pre>#define IB_MAX_METHODS 128\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo781">[Definitions]<a name="IBA20Base3a20Constants2fIB5fMCAST5fBLOCK5fID5fMASK5fHO">\r
+IBA Base: Constants/IB_MCAST_BLOCK_ID_MASK_HO</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>IB_MCAST_BLOCK_ID_MASK_HO</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Mask (host order) to recover the Multicast block ID.\r
+</pre>\r
+</span><p><strong>SOURCE</strong></p>\r
+<span class="SOURCE"><pre>#define <strong>IB_MCAST_BLOCK_ID_MASK_HO</strong> 0x000001FF\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo782">[Definitions]<a name="IBA20Base3a20Constants2fIB5fMCAST5fBLOCK5fSIZE">\r
+IBA Base: Constants/IB_MCAST_BLOCK_SIZE</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>IB_MCAST_BLOCK_SIZE</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Number of port mask entries in a multicast forwarding table block.\r
+</pre>\r
+</span><p><strong>SOURCE</strong></p>\r
+<span class="SOURCE"><pre>#define <strong>IB_MCAST_BLOCK_SIZE</strong> 32\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo783">[Definitions]<a name="IBA20Base3a20Constants2fIB5fMCAST5fMASK5fSIZE">\r
+IBA Base: Constants/IB_MCAST_MASK_SIZE</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>IB_MCAST_MASK_SIZE</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Number of port mask bits in each entry in the multicast forwarding table.\r
+</pre>\r
+</span><p><strong>SOURCE</strong></p>\r
+<span class="SOURCE"><pre>#define <strong>IB_MCAST_MASK_SIZE</strong> 16\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo784">[Definitions]<a name="IBA20Base3a20Constants2fIB5fMCAST5fMAX5fBLOCK5fID">\r
+IBA Base: Constants/IB_MCAST_MAX_BLOCK_ID</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>IB_MCAST_MAX_BLOCK_ID</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Maximum number of Multicast port mask blocks\r
+</pre>\r
+</span><p><strong>SOURCE</strong></p>\r
+<span class="SOURCE"><pre>#define <strong>IB_MCAST_MAX_BLOCK_ID</strong> 511\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo785">[Definitions]<a name="IBA20Base3a20Constants2fIB5fMCAST5fPOSITION5fMASK5fHO">\r
+IBA Base: Constants/IB_MCAST_POSITION_MASK_HO</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>IB_MCAST_POSITION_MASK_HO</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Mask (host order) to recover the multicast block position.\r
+</pre>\r
+</span><p><strong>SOURCE</strong></p>\r
+<span class="SOURCE"><pre>#define <strong>IB_MCAST_POSITION_MASK_HO</strong> 0xF0000000\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo786">[Definitions]<a name="IBA20Base3a20Constants2fIB5fMCAST5fPOSITION5fMAX">\r
+IBA Base: Constants/IB_MCAST_POSITION_MAX</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>IB_MCAST_POSITION_MAX</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Maximum value for the multicast block position.\r
+</pre>\r
+</span><p><strong>SOURCE</strong></p>\r
+<span class="SOURCE"><pre>#define <strong>IB_MCAST_POSITION_MAX</strong> 0xF\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo787">[Definitions]<a name="IBA20Base3a20Constants2fIB5fMCAST5fPOSITION5fSHIFT">\r
+IBA Base: Constants/IB_MCAST_POSITION_SHIFT</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>IB_MCAST_POSITION_SHIFT</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Shift value to normalize the multicast block position value.\r
+</pre>\r
+</span><p><strong>SOURCE</strong></p>\r
+<span class="SOURCE"><pre>#define <strong>IB_MCAST_POSITION_SHIFT</strong> 28\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo788">[Definitions]<a name="IBA20Base3a20Constants2fIB5fMCLASS5fBM">\r
+IBA Base: Constants/IB_MCLASS_BM</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>IB_MCLASS_BM</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Subnet Management Class, Baseboard Manager (13.4.4)\r
+</pre>\r
+</span><p><strong>SOURCE</strong></p>\r
+<span class="SOURCE"><pre>#define <strong>IB_MCLASS_BM</strong> 0x05\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo789">[Definitions]<a name="IBA20Base3a20Constants2fIB5fMCLASS5fCOMM5fMGMT">\r
+IBA Base: Constants/IB_MCLASS_COMM_MGMT</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>IB_MCLASS_COMM_MGMT</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Subnet Management Class, Communication Management (13.4.4)\r
+</pre>\r
+</span><p><strong>SOURCE</strong></p>\r
+<span class="SOURCE"><pre>#define <strong>IB_MCLASS_COMM_MGMT</strong> 0x07\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo790">[Definitions]<a name="IBA20Base3a20Constants2fIB5fMCLASS5fDEV5fMGMT">\r
+IBA Base: Constants/IB_MCLASS_DEV_MGMT</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>IB_MCLASS_DEV_MGMT</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Subnet Management Class, Device Management (13.4.4)\r
+</pre>\r
+</span><p><strong>SOURCE</strong></p>\r
+<span class="SOURCE"><pre>#define <strong>IB_MCLASS_DEV_MGMT</strong> 0x06\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo791">[Definitions]<a name="IBA20Base3a20Constants2fIB5fMCLASS5fPERF">\r
+IBA Base: Constants/IB_MCLASS_PERF</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>IB_MCLASS_PERF</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Subnet Management Class, Performance Manager (13.4.4)\r
+</pre>\r
+</span><p><strong>SOURCE</strong></p>\r
+<span class="SOURCE"><pre>#define <strong>IB_MCLASS_PERF</strong> 0x04\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo792">[Definitions]<a name="IBA20Base3a20Constants2fIB5fMCLASS5fSNMP">\r
+IBA Base: Constants/IB_MCLASS_SNMP</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>IB_MCLASS_SNMP</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Subnet Management Class, SNMP Tunneling (13.4.4)\r
+</pre>\r
+</span><p><strong>SOURCE</strong></p>\r
+<span class="SOURCE"><pre>#define <strong>IB_MCLASS_SNMP</strong> 0x08\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo793">[Definitions]<a name="IBA20Base3a20Constants2fIB5fMCLASS5fSUBN5fADM">\r
+IBA Base: Constants/IB_MCLASS_SUBN_ADM</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>IB_MCLASS_SUBN_ADM</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Subnet Management Class, Subnet Administration (13.4.4)\r
+</pre>\r
+</span><p><strong>SOURCE</strong></p>\r
+<span class="SOURCE"><pre>#define <strong>IB_MCLASS_SUBN_ADM</strong> 0x03\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo794">[Definitions]<a name="IBA20Base3a20Constants2fIB5fMCLASS5fSUBN5fDIR">\r
+IBA Base: Constants/IB_MCLASS_SUBN_DIR</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>IB_MCLASS_SUBN_DIR</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Subnet Management Class, Subnet Manager directed route (13.4.4)\r
+</pre>\r
+</span><p><strong>SOURCE</strong></p>\r
+<span class="SOURCE"><pre>#define <strong>IB_MCLASS_SUBN_DIR</strong> 0x81\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo795">[Definitions]<a name="IBA20Base3a20Constants2fIB5fMCLASS5fSUBN5fLID">\r
+IBA Base: Constants/IB_MCLASS_SUBN_LID</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>IB_MCLASS_SUBN_LID</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Subnet Management Class, Subnet Manager LID routed (13.4.4)\r
+</pre>\r
+</span><p><strong>SOURCE</strong></p>\r
+<span class="SOURCE"><pre>#define <strong>IB_MCLASS_SUBN_LID</strong> 0x01\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo796">[Definitions]<a name="IBA20Base3a20Constants2fIB5fMCLASS5fVENDOR5fHIGH5fRANGE5fMAX">\r
+IBA Base: Constants/IB_MCLASS_VENDOR_HIGH_RANGE_MAX</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>IB_MCLASS_VENDOR_HIGH_RANGE_MAX</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Subnet Management Class, Vendor Specific High Range End\r
+</pre>\r
+</span><p><strong>SOURCE</strong></p>\r
+<span class="SOURCE"><pre>#define <strong>IB_MCLASS_VENDOR_HIGH_RANGE_MAX</strong> 0x4f\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo797">[Definitions]<a name="IBA20Base3a20Constants2fIB5fMCLASS5fVENDOR5fHIGH5fRANGE5fMIN">\r
+IBA Base: Constants/IB_MCLASS_VENDOR_HIGH_RANGE_MIN</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>IB_MCLASS_VENDOR_HIGH_RANGE_MIN</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Subnet Management Class, Vendor Specific High Range Start\r
+</pre>\r
+</span><p><strong>SOURCE</strong></p>\r
+<span class="SOURCE"><pre>#define <strong>IB_MCLASS_VENDOR_HIGH_RANGE_MIN</strong> 0x30\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo798">[Definitions]<a name="IBA20Base3a20Constants2fIB5fMCLASS5fVENDOR5fLOW5fRANGE5fMAX">\r
+IBA Base: Constants/IB_MCLASS_VENDOR_LOW_RANGE_MAX</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>IB_MCLASS_VENDOR_LOW_RANGE_MAX</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Subnet Management Class, Vendor Specific Low Range End\r
+</pre>\r
+</span><p><strong>SOURCE</strong></p>\r
+<span class="SOURCE"><pre>#define <strong>IB_MCLASS_VENDOR_LOW_RANGE_MAX</strong> 0x0f\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo799">[Definitions]<a name="IBA20Base3a20Constants2fIB5fMCLASS5fVENDOR5fLOW5fRANGE5fMIN">\r
+IBA Base: Constants/IB_MCLASS_VENDOR_LOW_RANGE_MIN</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>IB_MCLASS_VENDOR_LOW_RANGE_MIN</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Subnet Management Class, Vendor Specific Low Range Start\r
+</pre>\r
+</span><p><strong>SOURCE</strong></p>\r
+<span class="SOURCE"><pre>#define <strong>IB_MCLASS_VENDOR_LOW_RANGE_MIN</strong> 0x09\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo800">[Definitions]<a name="IBA20Base3a20Constants2fIB5fMTU5fTYPE">\r
+IBA Base: Constants/IB_MTU_TYPE</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>IB_MTU_TYPE</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Encoded path MTU.\r
+ 1: 256\r
+ 2: 512\r
+ 3: 1024\r
+ 4: 2048\r
+ 5: 4096\r
+ others: reserved\r
+</pre>\r
+</span><p><strong>SOURCE</strong></p>\r
+<span class="SOURCE"><pre>#define IB_MTU_256 1\r
+#define IB_MTU_512 2\r
+#define IB_MTU_1024 3\r
+#define IB_MTU_2048 4\r
+#define IB_MTU_4096 5\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo801">[Definitions]<a name="IBA20Base3a20Constants2fIB5fNODE5fNUM5fPORTS5fMAX">\r
+IBA Base: Constants/IB_NODE_NUM_PORTS_MAX</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>IB_NODE_NUM_PORTS_MAX</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Maximum number of ports in a single node (14.2.5.7).\r
+</pre>\r
+</span><p><strong>SOURCE</strong></p>\r
+<span class="SOURCE"><pre>#define <strong>IB_NODE_NUM_PORTS_MAX</strong> 0xFE\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo802">[Definitions]<a name="IBA20Base3a20Constants2fIB5fNODE5fTYPE5fCA">\r
+IBA Base: Constants/IB_NODE_TYPE_CA</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>IB_NODE_TYPE_CA</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Encoded generic node type used in MAD attributes (13.4.8.2)\r
+</pre>\r
+</span><p><strong>SOURCE</strong></p>\r
+<span class="SOURCE"><pre>#define <strong>IB_NODE_TYPE_CA</strong> 0x01\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo803">[Definitions]<a name="IBA20Base3a20Constants2fIB5fNODE5fTYPE5fROUTER">\r
+IBA Base: Constants/IB_NODE_TYPE_ROUTER</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>IB_NODE_TYPE_ROUTER</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Encoded generic node type used in MAD attributes (13.4.8.2)\r
+</pre>\r
+</span><p><strong>SOURCE</strong></p>\r
+<span class="SOURCE"><pre>#define <strong>IB_NODE_TYPE_ROUTER</strong> 0x03\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo804">[Definitions]<a name="IBA20Base3a20Constants2fIB5fNODE5fTYPE5fSWITCH">\r
+IBA Base: Constants/IB_NODE_TYPE_SWITCH</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>IB_NODE_TYPE_SWITCH</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Encoded generic node type used in MAD attributes (13.4.8.2)\r
+</pre>\r
+</span><p><strong>SOURCE</strong></p>\r
+<span class="SOURCE"><pre>#define <strong>IB_NODE_TYPE_SWITCH</strong> 0x02\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo805">[Definitions]<a name="IBA20Base3a20Constants2fIB5fNOTICE5fNODE5fTYPE5fCA">\r
+IBA Base: Constants/IB_NOTICE_NODE_TYPE_CA</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>IB_NOTICE_NODE_TYPE_CA</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Encoded generic node type used in MAD attributes (13.4.8.2)\r
+</pre>\r
+</span><p><strong>SOURCE</strong></p>\r
+<span class="SOURCE"><pre>#define <strong>IB_NOTICE_NODE_TYPE_CA</strong> (<a href="../complib/cl_byteswap_h.html#robo289">CL_NTOH32</a>(0x000001))\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo806">[Definitions]<a name="IBA20Base3a20Constants2fIB5fNOTICE5fNODE5fTYPE5fROUTER">\r
+IBA Base: Constants/IB_NOTICE_NODE_TYPE_ROUTER</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>IB_NOTICE_NODE_TYPE_ROUTER</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Encoded generic node type used in MAD attributes (13.4.8.2)\r
+</pre>\r
+</span><p><strong>SOURCE</strong></p>\r
+<span class="SOURCE"><pre>#define <strong>IB_NOTICE_NODE_TYPE_ROUTER</strong> (<a href="../complib/cl_byteswap_h.html#robo289">CL_NTOH32</a>(0x000003))\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo807">[Definitions]<a name="IBA20Base3a20Constants2fIB5fNOTICE5fNODE5fTYPE5fSUBN5fMGMT">\r
+IBA Base: Constants/IB_NOTICE_NODE_TYPE_SUBN_MGMT</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>IB_NOTICE_NODE_TYPE_SUBN_MGMT</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Encoded generic node type used in MAD attributes (13.4.8.2).\r
+ Note that this value is not defined for the NodeType field\r
+ of the NodeInfo attribute (14.2.5.3).\r
+</pre>\r
+</span><p><strong>SOURCE</strong></p>\r
+<span class="SOURCE"><pre>#define <strong>IB_NOTICE_NODE_TYPE_SUBN_MGMT</strong> (<a href="../complib/cl_byteswap_h.html#robo289">CL_NTOH32</a>(0x000004))\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo808">[Definitions]<a name="IBA20Base3a20Constants2fIB5fNOTICE5fNODE5fTYPE5fSWITCH">\r
+IBA Base: Constants/IB_NOTICE_NODE_TYPE_SWITCH</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>IB_NOTICE_NODE_TYPE_SWITCH</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Encoded generic node type used in MAD attributes (13.4.8.2)\r
+</pre>\r
+</span><p><strong>SOURCE</strong></p>\r
+<span class="SOURCE"><pre>#define <strong>IB_NOTICE_NODE_TYPE_SWITCH</strong> (<a href="../complib/cl_byteswap_h.html#robo289">CL_NTOH32</a>(0x000002))\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo809">[Definitions]<a name="IBA20Base3a20Constants2fIB5fPATH5fREC5fBASE5fMASK">\r
+IBA Base: Constants/IB_PATH_REC_BASE_MASK</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>IB_PATH_REC_BASE_MASK</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Mask for the base value field for path record MTU, rate\r
+ and packet lifetime.\r
+</pre>\r
+</span><p><strong>SOURCE</strong></p>\r
+<span class="SOURCE"><pre>#define <strong>IB_PATH_REC_BASE_MASK</strong> 0x3F\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo810">[Definitions]<a name="IBA20Base3a20Constants2fIB5fPATH5fREC5fSELECTOR5fMASK">\r
+IBA Base: Constants/IB_PATH_REC_SELECTOR_MASK</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>IB_PATH_REC_SELECTOR_MASK</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Mask for the selector field for path record MTU, rate\r
+ and packet lifetime.\r
+</pre>\r
+</span><p><strong>SOURCE</strong></p>\r
+<span class="SOURCE"><pre>#define <strong>IB_PATH_REC_SELECTOR_MASK</strong> 0xC0\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo811">[Definitions]<a name="IBA20Base3a20Constants2fIB5fPATH5fSELECTOR5fTYPE">\r
+IBA Base: Constants/IB_PATH_SELECTOR_TYPE</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>IB_PATH_SELECTOR_TYPE</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Path selector.\r
+ 0: greater than rate specified\r
+ 1: less than rate specified\r
+ 2: exactly the rate specified\r
+ 3: largest rate available\r
+</pre>\r
+</span><p><strong>SOURCE</strong></p>\r
+<span class="SOURCE"><pre>#define IB_PATH_SELECTOR_GREATER_THAN 0\r
+#define IB_PATH_SELECTOR_LESS_THAN 1\r
+#define IB_PATH_SELECTOR_EXACTLY 2\r
+#define IB_PATH_SELECTOR_LARGEST 3\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo812">[Definitions]<a name="IBA20Base3a20Constants2fIB5fPKEY5fBASE5fMASK">\r
+IBA Base: Constants/IB_PKEY_BASE_MASK</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>IB_PKEY_BASE_MASK</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Masks for the base P_Key value given a P_Key Entry.\r
+</pre>\r
+</span><p><strong>SOURCE</strong></p>\r
+<span class="SOURCE"><pre>#define <strong>IB_PKEY_BASE_MASK</strong> (<a href="../complib/cl_byteswap_h.html#robo286">CL_NTOH16</a>(0x7FFF))\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo813">[Definitions]<a name="IBA20Base3a20Constants2fIB5fPKEY5fENTRIES5fMAX">\r
+IBA Base: Constants/IB_PKEY_ENTRIES_MAX</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>IB_PKEY_ENTRIES_MAX</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Maximum number of PKEY entries per port (14.2.5.7).\r
+</pre>\r
+</span><p><strong>SOURCE</strong></p>\r
+<span class="SOURCE"><pre>#define <strong>IB_PKEY_ENTRIES_MAX</strong> (<a href="#robo814">IB_PKEY_MAX_BLOCKS</a> * IB_PKEY_BLOCK_SIZE)\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo814">[Definitions]<a name="IBA20Base3a20Constants2fIB5fPKEY5fMAX5fBLOCKS">\r
+IBA Base: Constants/IB_PKEY_MAX_BLOCKS</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>IB_PKEY_MAX_BLOCKS</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Maximum number of PKEY blocks (14.2.5.7).\r
+</pre>\r
+</span><p><strong>SOURCE</strong></p>\r
+<span class="SOURCE"><pre>#define <strong>IB_PKEY_MAX_BLOCKS</strong> 2048\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo815">[Definitions]<a name="IBA20Base3a20Constants2fIB5fPKEY5fTYPE5fMASK">\r
+IBA Base: Constants/IB_PKEY_TYPE_MASK</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>IB_PKEY_TYPE_MASK</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Masks for the P_Key membership type given a P_Key Entry.\r
+</pre>\r
+</span><p><strong>SOURCE</strong></p>\r
+<span class="SOURCE"><pre>#define <strong>IB_PKEY_TYPE_MASK</strong> (<a href="../complib/cl_byteswap_h.html#robo286">CL_NTOH16</a>(0x8000))\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo816">[Definitions]<a name="IBA20Base3a20Constants2fIB5fQP15fWELL5fKNOWN5fQ5fKEY">\r
+IBA Base: Constants/IB_QP1_WELL_KNOWN_Q_KEY</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>IB_QP1_WELL_KNOWN_Q_KEY</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Well-known Q_Key for QP1 privileged mode access (15.4.2).\r
+</pre>\r
+</span><p><strong>SOURCE</strong></p>\r
+<span class="SOURCE"><pre>#define <strong>IB_QP1_WELL_KNOWN_Q_KEY</strong> <a href="../complib/cl_byteswap_h.html#robo289">CL_NTOH32</a>(0x80010000)\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo817">[Definitions]<a name="IBA20Base3a20Constants2fIB5fSMINFO5fATTR5fMOD5fACKNOWLEDGE">\r
+IBA Base: Constants/IB_SMINFO_ATTR_MOD_ACKNOWLEDGE</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>IB_SMINFO_ATTR_MOD_ACKNOWLEDGE</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Encoded attribute modifier value used on SubnSet(SMInfo) SMPs.\r
+</pre>\r
+</span><p><strong>SOURCE</strong></p>\r
+<span class="SOURCE"><pre>#define <strong>IB_SMINFO_ATTR_MOD_ACKNOWLEDGE</strong> (<a href="../complib/cl_byteswap_h.html#robo289">CL_NTOH32</a>(0x000002))\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo818">[Definitions]<a name="IBA20Base3a20Constants2fIB5fSMINFO5fATTR5fMOD5fDISABLE">\r
+IBA Base: Constants/IB_SMINFO_ATTR_MOD_DISABLE</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>IB_SMINFO_ATTR_MOD_DISABLE</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Encoded attribute modifier value used on SubnSet(SMInfo) SMPs.\r
+</pre>\r
+</span><p><strong>SOURCE</strong></p>\r
+<span class="SOURCE"><pre>#define <strong>IB_SMINFO_ATTR_MOD_DISABLE</strong> (<a href="../complib/cl_byteswap_h.html#robo289">CL_NTOH32</a>(0x000003))\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo819">[Definitions]<a name="IBA20Base3a20Constants2fIB5fSMINFO5fATTR5fMOD5fDISCOVER">\r
+IBA Base: Constants/IB_SMINFO_ATTR_MOD_DISCOVER</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>IB_SMINFO_ATTR_MOD_DISCOVER</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Encoded attribute modifier value used on SubnSet(SMInfo) SMPs.\r
+</pre>\r
+</span><p><strong>SOURCE</strong></p>\r
+<span class="SOURCE"><pre>#define <strong>IB_SMINFO_ATTR_MOD_DISCOVER</strong> (<a href="../complib/cl_byteswap_h.html#robo289">CL_NTOH32</a>(0x000005))\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo820">[Definitions]<a name="IBA20Base3a20Constants2fIB5fSMINFO5fATTR5fMOD5fHANDOVER">\r
+IBA Base: Constants/IB_SMINFO_ATTR_MOD_HANDOVER</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>IB_SMINFO_ATTR_MOD_HANDOVER</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Encoded attribute modifier value used on SubnSet(SMInfo) SMPs.\r
+</pre>\r
+</span><p><strong>SOURCE</strong></p>\r
+<span class="SOURCE"><pre>#define <strong>IB_SMINFO_ATTR_MOD_HANDOVER</strong> (<a href="../complib/cl_byteswap_h.html#robo289">CL_NTOH32</a>(0x000001))\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo821">[Definitions]<a name="IBA20Base3a20Constants2fIB5fSMINFO5fATTR5fMOD5fSTANDBY">\r
+IBA Base: Constants/IB_SMINFO_ATTR_MOD_STANDBY</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>IB_SMINFO_ATTR_MOD_STANDBY</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Encoded attribute modifier value used on SubnSet(SMInfo) SMPs.\r
+</pre>\r
+</span><p><strong>SOURCE</strong></p>\r
+<span class="SOURCE"><pre>#define <strong>IB_SMINFO_ATTR_MOD_STANDBY</strong> (<a href="../complib/cl_byteswap_h.html#robo289">CL_NTOH32</a>(0x000004))\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo822">[Definitions]<a name="IBA20Base3a20Constants2fIB5fSMINFO5fSTATE5fDISCOVERING">\r
+IBA Base: Constants/IB_SMINFO_STATE_DISCOVERING</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>IB_SMINFO_STATE_DISCOVERING</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Encoded state value used in the SMInfo attribute.\r
+</pre>\r
+</span><p><strong>SOURCE</strong></p>\r
+<span class="SOURCE"><pre>#define <strong>IB_SMINFO_STATE_DISCOVERING</strong> 1\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo823">[Definitions]<a name="IBA20Base3a20Constants2fIB5fSMINFO5fSTATE5fINIT">\r
+IBA Base: Constants/IB_SMINFO_STATE_INIT</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>IB_SMINFO_STATE_INIT</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Encoded state value used in the SMInfo attribute.\r
+</pre>\r
+</span><p><strong>SOURCE</strong></p>\r
+<span class="SOURCE"><pre>#define <strong>IB_SMINFO_STATE_INIT</strong> 4\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo824">[Definitions]<a name="IBA20Base3a20Constants2fIB5fSMINFO5fSTATE5fMASTER">\r
+IBA Base: Constants/IB_SMINFO_STATE_MASTER</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>IB_SMINFO_STATE_MASTER</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Encoded state value used in the SMInfo attribute.\r
+</pre>\r
+</span><p><strong>SOURCE</strong></p>\r
+<span class="SOURCE"><pre>#define <strong>IB_SMINFO_STATE_MASTER</strong> 3\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo825">[Definitions]<a name="IBA20Base3a20Constants2fIB5fSMINFO5fSTATE5fNOTACTIVE">\r
+IBA Base: Constants/IB_SMINFO_STATE_NOTACTIVE</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>IB_SMINFO_STATE_NOTACTIVE</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Encoded state value used in the SMInfo attribute.\r
+</pre>\r
+</span><p><strong>SOURCE</strong></p>\r
+<span class="SOURCE"><pre>#define <strong>IB_SMINFO_STATE_NOTACTIVE</strong> 0\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo826">[Definitions]<a name="IBA20Base3a20Constants2fIB5fSMINFO5fSTATE5fSTANDBY">\r
+IBA Base: Constants/IB_SMINFO_STATE_STANDBY</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>IB_SMINFO_STATE_STANDBY</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Encoded state value used in the SMInfo attribute.\r
+</pre>\r
+</span><p><strong>SOURCE</strong></p>\r
+<span class="SOURCE"><pre>#define <strong>IB_SMINFO_STATE_STANDBY</strong> 2\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo827">[Definitions]<a name="IBA20Base3a20Constants2fIB5fSMP5fDIRECTION">\r
+IBA Base: Constants/IB_SMP_DIRECTION</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>IB_SMP_DIRECTION</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The Direction bit for directed route SMPs.\r
+</pre>\r
+</span><p><strong>SOURCE</strong></p>\r
+<span class="SOURCE"><pre>#define <strong>IB_SMP_DIRECTION</strong> (<a href="../complib/cl_byteswap_h.html#robo279">CL_HTON16</a>(0x8000))\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo828">[Definitions]<a name="IBA20Base3a20Constants2fIB5fSMP5fSTATUS5fMASK">\r
+IBA Base: Constants/IB_SMP_STATUS_MASK</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>IB_SMP_STATUS_MASK</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Mask value for extracting status from a directed route SMP.\r
+</pre>\r
+</span><p><strong>SOURCE</strong></p>\r
+<span class="SOURCE"><pre>#define <strong>IB_SMP_STATUS_MASK</strong> (<a href="../complib/cl_byteswap_h.html#robo279">CL_HTON16</a>(0x7FFF))\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo829">[Definitions]<a name="IBA20Base3a20Constants2fIB5fSUBNET5fPATH5fHOPS5fMAX">\r
+IBA Base: Constants/IB_SUBNET_PATH_HOPS_MAX</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>IB_SUBNET_PATH_HOPS_MAX</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Maximum number of directed route switch hops in a subnet (14.2.1.2).\r
+</pre>\r
+</span><p><strong>SOURCE</strong></p>\r
+<span class="SOURCE"><pre>#define <strong>IB_SUBNET_PATH_HOPS_MAX</strong> 64\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo830">[Definitions]<a name="IBA20Base3a20Constants2fJoin20States">\r
+IBA Base: Constants/Join States</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> Join States\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Defines the join state flags for multicast group management.\r
+</pre>\r
+</span><p><strong>SOURCE</strong></p>\r
+<span class="SOURCE"><pre>#define IB_JOIN_STATE_FULL 1\r
+#define IB_JOIN_STATE_NON 2\r
+#define IB_JOIN_STATE_SEND_ONLY 4\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo831">[Definitions]<a name="IBA20Base3a20Constants2fMAD5fBLOCK5fGRH5fSIZE">\r
+IBA Base: Constants/MAD_BLOCK_GRH_SIZE</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>MAD_BLOCK_GRH_SIZE</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Size of a MAD datagram, including the GRH.\r
+</pre>\r
+</span><p><strong>SOURCE</strong></p>\r
+<span class="SOURCE"><pre>#define <strong>MAD_BLOCK_GRH_SIZE</strong> 296\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo832">[Definitions]<a name="IBA20Base3a20Constants2fMAD5fBLOCK5fSIZE">\r
+IBA Base: Constants/MAD_BLOCK_SIZE</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>MAD_BLOCK_SIZE</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Size of a non-RMPP MAD datagram.\r
+</pre>\r
+</span><p><strong>SOURCE</strong></p>\r
+<span class="SOURCE"><pre>#define <strong>MAD_BLOCK_SIZE</strong> 256\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo833">[Definitions]<a name="IBA20Base3a20Constants2fMAD5fRMPP5fDATA5fSIZE">\r
+IBA Base: Constants/MAD_RMPP_DATA_SIZE</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>MAD_RMPP_DATA_SIZE</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Size of an RMPP transaction data section.\r
+</pre>\r
+</span><p><strong>SOURCE</strong></p>\r
+<span class="SOURCE"><pre>#define <strong>MAD_RMPP_DATA_SIZE</strong> (<a href="#robo832">MAD_BLOCK_SIZE</a> - <a href="#robo834">MAD_RMPP_HDR_SIZE</a>)\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo834">[Definitions]<a name="IBA20Base3a20Constants2fMAD5fRMPP5fHDR5fSIZE">\r
+IBA Base: Constants/MAD_RMPP_HDR_SIZE</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>MAD_RMPP_HDR_SIZE</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Size of an RMPP header, including the common MAD header.\r
+</pre>\r
+</span><p><strong>SOURCE</strong></p>\r
+<span class="SOURCE"><pre>#define <strong>MAD_RMPP_HDR_SIZE</strong> 36\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo835">[Definitions]<a name="IBA20Base3a20Types2fDM5fSVC5fNAME">\r
+IBA Base: Types/DM_SVC_NAME</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>DM_SVC_NAME</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> IBA defined Device Management service name (16.3)\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>#define <strong>DM_SVC_NAME</strong> "DeviceManager.IBTA"\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"></span>\r
+<hr />\r
+\r
+<h2><a name="robo836">[Functions]<a name="IBA20Base3a20Types2fib5fclass5fis5fvendor5fspecific">\r
+IBA Base: Types/ib_class_is_vendor_specific</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_class_is_vendor_specific</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Indicitates if the Class Code if a vendor specific class\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>static inline boolean_t\r
+<strong>ib_class_is_vendor_specific</strong>(\r
+ IN const uint8_t class_code )\r
+{\r
+ return( <a href="#robo838">ib_class_is_vendor_specific_low</a>(class_code) ||\r
+ <a href="#robo837">ib_class_is_vendor_specific_high</a>(class_code) );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> class_code\r
+ [in] The Management Datagram Class Code\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> TRUE if the class is a Vendor Specific MAD\r
+ FALSE otherwise.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"></span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo838">ib_class_is_vendor_specific_low</a>, <a href="#robo837">ib_class_is_vendor_specific_high</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo837">[Functions]<a name="IBA20Base3a20Types2fib5fclass5fis5fvendor5fspecific5fhigh">\r
+IBA Base: Types/ib_class_is_vendor_specific_high</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_class_is_vendor_specific_high</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Indicitates if the Class Code if a vendor specific class from \r
+ the high range\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>static inline boolean_t\r
+<strong>ib_class_is_vendor_specific_high</strong>(\r
+ IN const uint8_t class_code )\r
+{\r
+ return( (class_code >= <a href="#robo797">IB_MCLASS_VENDOR_HIGH_RANGE_MIN</a>) &&\r
+ (class_code <= <a href="#robo796">IB_MCLASS_VENDOR_HIGH_RANGE_MAX</a>)) ;\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> class_code\r
+ [in] The Management Datagram Class Code\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> TRUE if the class is in the High range of Vendor Specific MADs \r
+ FALSE otherwise.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"></span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo797">IB_MCLASS_VENDOR_HIGH_RANGE_MIN</a>, <a href="#robo796">IB_MCLASS_VENDOR_HIGH_RANGE_MAX</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo838">[Functions]<a name="IBA20Base3a20Types2fib5fclass5fis5fvendor5fspecific5flow">\r
+IBA Base: Types/ib_class_is_vendor_specific_low</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_class_is_vendor_specific_low</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Indicitates if the Class Code if a vendor specific class from \r
+ the low range\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>static inline boolean_t\r
+<strong>ib_class_is_vendor_specific_low</strong>(\r
+ IN const uint8_t class_code )\r
+{\r
+ return( (class_code >= <a href="#robo799">IB_MCLASS_VENDOR_LOW_RANGE_MIN</a>) &&\r
+ (class_code <= <a href="#robo798">IB_MCLASS_VENDOR_LOW_RANGE_MAX</a>)) ;\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> class_code\r
+ [in] The Management Datagram Class Code\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> TRUE if the class is in the Low range of Vendor Specific MADs \r
+ FALSE otherwise.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"></span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo799">IB_MCLASS_VENDOR_LOW_RANGE_MIN</a>, <a href="#robo798">IB_MCLASS_VENDOR_LOW_RANGE_MAX</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo839">[Structures]<a name="IBA20Base3a20Types2fib5fclass5fport5finfo5ft">\r
+IBA Base: Types/ib_class_port_info_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_class_port_info_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> IBA defined ClassPortInfo attribute (13.4.8.1)\r
+ route between two end-points on a subnet.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>#include <complib/cl_packon.h>\r
+typedef struct _ib_class_port_info\r
+{\r
+ uint8_t base_ver;\r
+ uint8_t class_ver;\r
+ <a href="#robo893">ib_net16_t</a> cap_mask;\r
+ <a href="#robo894">ib_net32_t</a> resp_time_val;\r
+ <a href="#robo856">ib_gid_t</a> redir_gid;\r
+ <a href="#robo894">ib_net32_t</a> redir_tc_sl_fl;\r
+ <a href="#robo893">ib_net16_t</a> redir_lid;\r
+ <a href="#robo893">ib_net16_t</a> redir_pkey;\r
+ <a href="#robo894">ib_net32_t</a> redir_qp;\r
+ <a href="#robo894">ib_net32_t</a> redir_qkey;\r
+ <a href="#robo856">ib_gid_t</a> trap_gid;\r
+ <a href="#robo894">ib_net32_t</a> trap_tc_sl_fl;\r
+ <a href="#robo893">ib_net16_t</a> trap_lid;\r
+ <a href="#robo893">ib_net16_t</a> trap_pkey;\r
+ <a href="#robo894">ib_net32_t</a> trap_hop_qp;\r
+ <a href="#robo894">ib_net32_t</a> trap_qkey;\r
+\r
+} PACK_SUFFIX <strong>ib_class_port_info_t</strong>;\r
+#include <complib/cl_packoff.h>\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> base_ver\r
+ Maximum supported MAD Base Version.\r
+\r
+ class_ver\r
+ Maximum supported management class version.\r
+\r
+ cap_mask\r
+ Supported capabilities of this management class.\r
+\r
+ resp_time_value\r
+ Maximum expected response time.\r
+\r
+ redr_gid\r
+ GID to use for redirection, or zero\r
+\r
+ recdir_tc_sl_fl\r
+ Traffic class, service level and flow label the requester\r
+ should use if the service is redirected.\r
+\r
+ redir_lid\r
+ LID used for redirection, or zero\r
+\r
+ redir_pkey\r
+ P_Key used for redirection\r
+\r
+ redir_qp\r
+ QP number used for redirection\r
+\r
+ redir_qkey\r
+ Q_Key associated with the redirected QP. This shall be the\r
+ well known Q_Key value.\r
+\r
+ trap_gid\r
+ GID value used for trap messages from this service.\r
+\r
+ trap_tc_sl_fl\r
+ Traffic class, service level and flow label used for\r
+ trap messages originated by this service.\r
+\r
+ trap_lid\r
+ LID used for trap messages, or zero\r
+\r
+ trap_pkey\r
+ P_Key used for trap messages\r
+\r
+ trap_hop_qp\r
+ Hop limit (upper 8 bits) and QP number used for trap messages\r
+\r
+ trap_qkey\r
+ Q_Key associated with the trap messages QP.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo709">IB_CLASS_CAP_GETSET</a>, <a href="#robo710">IB_CLASS_CAP_TRAP</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo840">[Structures]<a name="IBA20Base3a20Types2fib5fdm5fmad5ft">\r
+IBA Base: Types/ib_dm_mad_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_dm_mad_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> IBA defined Device Management MAD (16.3.1)\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>#include <complib/cl_packon.h>\r
+typedef struct _ib_dm_mad\r
+{\r
+ <a href="#robo882">ib_mad_t</a> hdr;\r
+ uint8_t resv[40];\r
+\r
+#define IB_DM_DATA_SIZE 192\r
+ uint8_t data[IB_DM_DATA_SIZE];\r
+\r
+} PACK_SUFFIX <strong>ib_dm_mad_t</strong>;\r
+#include <complib/cl_packoff.h>\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> hdr\r
+ Common MAD header.\r
+\r
+ resv\r
+ Reserved.\r
+\r
+ data\r
+ Device Management payload. The structure and content of this field\r
+ depend upon the method, attr_id, and attr_mod fields in the header.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo882">ib_mad_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo841">[Structures]<a name="IBA20Base3a20Types2fib5ffield325ft">\r
+IBA Base: Types/ib_field32_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_field32_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Represents a 32-bit field, and allows access as a 32-bit network byte\r
+ ordered or a 4-byte array.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>#include <complib/cl_packon.h>\r
+typedef union _<strong>ib_field32_t</strong>\r
+{\r
+ net32_t val;\r
+ uint8_t bytes[4];\r
+\r
+} PACK_SUFFIX <strong>ib_field32_t</strong>;\r
+#include <complib/cl_packoff.h>\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> val\r
+ Full field value.\r
+\r
+ bytes\r
+ Byte array representing the field. The byte array provides identical\r
+ access independently from CPU byte-ordering.\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo842">[Functions]<a name="IBA20Base3a20Types2fib5fget5fasync5fevent5fstr">\r
+IBA Base: Types/ib_get_async_event_str</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_get_async_event_str</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Returns a string for the specified asynchronous event.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_EXPORT const char* AL_API\r
+<strong>ib_get_async_event_str</strong>(\r
+ IN <a href="#robo1155">ib_async_event_t</a> event );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> event\r
+ [in] event value\r
+\r
+ RETURN VALUES\r
+ Pointer to the asynchronous event description string.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"></span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"></span>\r
+<hr />\r
+\r
+<h2><a name="robo843">[Functions]<a name="IBA20Base3a20Types2fib5fget5ferr5fstr">\r
+IBA Base: Types/ib_get_err_str</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_get_err_str</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Returns a string for the specified status value.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_EXPORT const char* AL_API\r
+<strong>ib_get_err_str</strong>(\r
+ IN <a href="#robo49">ib_api_status_t</a> status );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> status\r
+ [in] status value\r
+\r
+ RETURN VALUES\r
+ Pointer to the status description string.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"></span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"></span>\r
+<hr />\r
+\r
+<h2><a name="robo844">[Functions]<a name="IBA20Base3a20Types2fib5fget5fnode5ftype5fstr">\r
+IBA Base: Types/ib_get_node_type_str</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_get_node_type_str</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Returns a string for the specified node type.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_INLINE const char* AL_API\r
+<strong>ib_get_node_type_str</strong>(\r
+ IN uint8_t node_type )\r
+{\r
+ if( node_type >= <a href="#robo803">IB_NODE_TYPE_ROUTER</a> )\r
+ node_type = 0;\r
+ return( __ib_node_type_str[node_type] );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> node_type\r
+ [in] Encoded node type as returned in the NodeInfo attribute.\r
+ RETURN VALUES\r
+ Pointer to the node type string.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"></span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo898">ib_node_info_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo845">[Functions]<a name="IBA20Base3a20Types2fib5fget5fport5fstate5ffrom5fstr">\r
+IBA Base: Types/ib_get_port_state_from_str</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_get_port_state_from_str</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Returns a string for the specified port state.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_INLINE const uint8_t AL_API\r
+<strong>ib_get_port_state_from_str</strong>(\r
+ IN char* p_port_state_str )\r
+{\r
+ if( !strncmp(p_port_state_str,"No State Change (NOP)",12) )\r
+ return(0);\r
+ else if( !strncmp(p_port_state_str, "DOWN",4) )\r
+ return(1);\r
+ else if( !strncmp(p_port_state_str, "INIT", 4) )\r
+ return(2);\r
+ else if( !strncmp(p_port_state_str,"ARMED" , 5) )\r
+ return(3);\r
+ else if( !strncmp(p_port_state_str, "ACTIVE", 6) )\r
+ return(4);\r
+ else if( !strncmp(p_port_state_str, "ACTDEFER", 8) )\r
+ return(5);\r
+ return(6);\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_port_state_str\r
+ [in] A string matching one returned by <a href="#robo846">ib_get_port_state_str</a>\r
+\r
+ RETURN VALUES\r
+ The appropriate code.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"></span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo949">ib_port_info_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo846">[Functions]<a name="IBA20Base3a20Types2fib5fget5fport5fstate5fstr">\r
+IBA Base: Types/ib_get_port_state_str</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_get_port_state_str</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Returns a string for the specified port state.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_INLINE const char* AL_API\r
+<strong>ib_get_port_state_str</strong>(\r
+ IN uint8_t port_state )\r
+{\r
+ if( port_state > IB_LINK_ACTIVE )\r
+ port_state = IB_LINK_ACTIVE + 1;\r
+ return( __ib_port_state_str[port_state] );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> port_state\r
+ [in] Encoded port state as returned in the PortInfo attribute.\r
+ RETURN VALUES\r
+ Pointer to the port state string.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"></span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo949">ib_port_info_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo847">[Functions]<a name="IBA20Base3a20Types2fib5fget5fwc5fstatus5fstr">\r
+IBA Base: Types/ib_get_wc_status_str</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_get_wc_status_str</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Returns a string for the specified work completion status.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_EXPORT const char* AL_API\r
+<strong>ib_get_wc_status_str</strong>(\r
+ IN <a href="#robo259">ib_wc_status_t</a> wc_status );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> wc_status\r
+ [in] work completion status value\r
+\r
+ RETURN VALUES\r
+ Pointer to the work completion status description string.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"></span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"></span>\r
+<hr />\r
+\r
+<h2><a name="robo848">[Functions]<a name="IBA20Base3a20Types2fib5fget5fwc5ftype5fstr">\r
+IBA Base: Types/ib_get_wc_type_str</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_get_wc_type_str</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Returns a string for the specified work completion type.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_EXPORT const char* AL_API\r
+<strong>ib_get_wc_type_str</strong>(\r
+ IN <a href="#robo261">ib_wc_type_t</a> wc_type );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> wc_type\r
+ [in] work completion type value\r
+\r
+ RETURN VALUES\r
+ Pointer to the work completion type description string.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"></span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"></span>\r
+<hr />\r
+\r
+<h2><a name="robo849">[Functions]<a name="IBA20Base3a20Types2fib5fget5fwr5ftype5fstr">\r
+IBA Base: Types/ib_get_wr_type_str</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_get_wr_type_str</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Returns a string for the specified work request type\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_EXPORT const char* AL_API\r
+<strong>ib_get_wr_type_str</strong>(\r
+ IN uint8_t wr_type );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> wr_type\r
+ [in] Encoded work request type as defined in the\r
+ RETURN VALUES\r
+ Pointer to the work request type string.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"></span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo262">ib_wr_type_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo850">[Functions]<a name="IBA20Base3a20Types2fib5fgid5fget5fguid">\r
+IBA Base: Types/ib_gid_get_guid</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_gid_get_guid</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Gets the guid from a GID.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_INLINE <a href="#robo895">ib_net64_t</a> AL_API\r
+<strong>ib_gid_get_guid</strong>(\r
+ IN const <a href="#robo856">ib_gid_t</a>* const p_gid )\r
+{\r
+ return( p_gid->unicast.interface_id );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_gid\r
+ [in] Pointer to the GID object.\r
+\r
+ RETURN VALUES\r
+ 64-bit GUID value.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"></span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo856">ib_gid_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo851">[Functions]<a name="IBA20Base3a20Types2fib5fgid5fget5fsubnet5fprefix">\r
+IBA Base: Types/ib_gid_get_subnet_prefix</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_gid_get_subnet_prefix</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Gets the subnet prefix from a GID.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_INLINE <a href="#robo895">ib_net64_t</a> AL_API\r
+<strong>ib_gid_get_subnet_prefix</strong>(\r
+ IN const <a href="#robo856">ib_gid_t</a>* const p_gid )\r
+{\r
+ return( p_gid->unicast.prefix );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_gid\r
+ [in] Pointer to the GID object.\r
+\r
+ RETURN VALUES\r
+ 64-bit subnet prefix value.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"></span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo856">ib_gid_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo852">[Functions]<a name="IBA20Base3a20Types2fib5fgid5fis5flink5flocal">\r
+IBA Base: Types/ib_gid_is_link_local</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_gid_is_link_local</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Returns TRUE if the unicast GID scoping indicates link local,\r
+ FALSE otherwise.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>static inline boolean_t\r
+<strong>ib_gid_is_link_local</strong>(\r
+ IN const <a href="#robo856">ib_gid_t</a>* const p_gid )\r
+{\r
+ return( <a href="#robo851">ib_gid_get_subnet_prefix</a>( p_gid ) == <a href="#robo713">IB_DEFAULT_SUBNET_PREFIX</a> );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_gid\r
+ [in] Pointer to the GID object.\r
+\r
+ RETURN VALUES\r
+ Returns TRUE if the unicast GID scoping indicates link local,\r
+ FALSE otherwise.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"></span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo856">ib_gid_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo853">[Functions]<a name="IBA20Base3a20Types2fib5fgid5fis5fsite5flocal">\r
+IBA Base: Types/ib_gid_is_site_local</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_gid_is_site_local</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Returns TRUE if the unicast GID scoping indicates site local,\r
+ FALSE otherwise.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>static inline boolean_t\r
+<strong>ib_gid_is_site_local</strong>(\r
+ IN const <a href="#robo856">ib_gid_t</a>* const p_gid )\r
+{\r
+ return( ( <a href="#robo851">ib_gid_get_subnet_prefix</a>( p_gid ) &\r
+ <a href="../complib/cl_byteswap_h.html#robo283">CL_HTON64</a>( CL_CONST64(0xFFFFFFFFFFFF0000) ) ) ==\r
+ <a href="../complib/cl_byteswap_h.html#robo283">CL_HTON64</a>( CL_CONST64(0xFEC0000000000000) ) );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_gid\r
+ [in] Pointer to the GID object.\r
+\r
+ RETURN VALUES\r
+ Returns TRUE if the unicast GID scoping indicates link local,\r
+ FALSE otherwise.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"></span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo856">ib_gid_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo854">[Definitions]<a name="IBA20Base3a20Types2fib5fgid5fprefix5ft">\r
+IBA Base: Types/ib_gid_prefix_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_gid_prefix_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"></span><p><strong>SOURCE</strong></p>\r
+<span class="SOURCE"><pre>typedef <a href="#robo895">ib_net64_t</a> <strong>ib_gid_prefix_t</strong>;\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo855">[Functions]<a name="IBA20Base3a20Types2fib5fgid5fset5fdefault">\r
+IBA Base: Types/ib_gid_set_default</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_gid_set_default</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Sets a GID to the default value.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_INLINE void AL_API\r
+<strong>ib_gid_set_default</strong>(\r
+ IN <a href="#robo856">ib_gid_t</a>* const p_gid,\r
+ IN const <a href="#robo895">ib_net64_t</a> interface_id )\r
+{\r
+ p_gid->unicast.prefix = <a href="#robo713">IB_DEFAULT_SUBNET_PREFIX</a>;\r
+ p_gid->unicast.interface_id = interface_id;\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_gid\r
+ [in] Pointer to the GID object.\r
+\r
+ interface_id\r
+ [in] Manufacturer assigned EUI64 value of a port.\r
+\r
+ RETURN VALUES\r
+ None.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"></span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo856">ib_gid_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo856">[Definitions]<a name="IBA20Base3a20Types2fib5fgid5ft">\r
+IBA Base: Types/ib_gid_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_gid_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"></span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>#include <complib/cl_packon.h>\r
+typedef union _ib_gid\r
+{\r
+ uint8_t raw[16];\r
+ struct _ib_gid_unicast\r
+ {\r
+ <a href="#robo854">ib_gid_prefix_t</a> prefix;\r
+ <a href="#robo895">ib_net64_t</a> interface_id;\r
+\r
+ } PACK_SUFFIX unicast;\r
+\r
+ struct _ib_gid_multicast\r
+ {\r
+ uint8_t header[2];\r
+ uint8_t raw_group_id[14];\r
+\r
+ } PACK_SUFFIX multicast;\r
+\r
+} PACK_SUFFIX <strong>ib_gid_t</strong>;\r
+#include <complib/cl_packoff.h>\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> raw\r
+ GID represented as an unformated byte array.\r
+\r
+ unicast\r
+ Typical unicast representation with subnet prefix and\r
+ port GUID.\r
+\r
+ multicast\r
+ Representation for multicast use.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"></span>\r
+<hr />\r
+\r
+<h2><a name="robo857">[Functions]<a name="IBA20Base3a20Types2fib5fgrh5fget5fver5fclass5fflow">\r
+IBA Base: Types/ib_grh_get_ver_class_flow</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_grh_get_ver_class_flow</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Get encoded version, traffic class and flow label in grh\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_INLINE void AL_API\r
+<strong>ib_grh_get_ver_class_flow</strong>(\r
+ IN const <a href="#robo894">ib_net32_t</a> ver_class_flow,\r
+ OUT uint8_t* const p_ver OPTIONAL,\r
+ OUT uint8_t* const p_tclass OPTIONAL,\r
+ OUT net32_t* const p_flow_lbl OPTIONAL )\r
+{\r
+ <a href="#robo894">ib_net32_t</a> tmp_ver_class_flow;\r
+\r
+ tmp_ver_class_flow = <a href="../complib/cl_byteswap_h.html#robo288">cl_ntoh32</a>( ver_class_flow );\r
+\r
+ if (p_ver)\r
+ *p_ver = (uint8_t)(tmp_ver_class_flow >> 28);\r
+\r
+ if (p_tclass)\r
+ *p_tclass = (uint8_t)(tmp_ver_class_flow >> 20);\r
+\r
+ if (p_flow_lbl)\r
+ *p_flow_lbl = (ver_class_flow & <a href="../complib/cl_byteswap_h.html#robo282">CL_HTON32</a>( 0x000FFFFF ));\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> ver_class_flow\r
+ [in] the version, traffic class and flow label info.\r
+\r
+ RETURN VALUES\r
+ p_ver\r
+ [out] pointer to the version info.\r
+\r
+ p_tclass\r
+ [out] pointer to the traffic class info.\r
+\r
+ p_flow_lbl\r
+ [out] pointer to the flow label info\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"></span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo859">ib_grh_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo858">[Functions]<a name="IBA20Base3a20Types2fib5fgrh5fset5fver5fclass5fflow">\r
+IBA Base: Types/ib_grh_set_ver_class_flow</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_grh_set_ver_class_flow</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Set encoded version, traffic class and flow label in grh\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_INLINE <a href="#robo894">ib_net32_t</a> AL_API\r
+<strong>ib_grh_set_ver_class_flow</strong>(\r
+ IN const uint8_t ver,\r
+ IN const uint8_t tclass,\r
+ IN const net32_t flow_lbl )\r
+{\r
+ <a href="#robo894">ib_net32_t</a> ver_class_flow;\r
+\r
+ ver_class_flow = <a href="../complib/cl_byteswap_h.html#robo281">cl_hton32</a>( (ver << 28) | (tclass << 20) );\r
+ ver_class_flow |= (flow_lbl & <a href="../complib/cl_byteswap_h.html#robo282">CL_HTON32</a>( 0x000FFFFF ));\r
+ return (ver_class_flow);\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> ver\r
+ [in] the version info.\r
+\r
+ tclass\r
+ [in] the traffic class info.\r
+\r
+ flow_lbl\r
+ [in] the flow label info\r
+\r
+ RETURN VALUES\r
+ ver_class_flow\r
+ [out] the version, traffic class and flow label info.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"></span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo859">ib_grh_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo859">[Structures]<a name="IBA20Base3a20Types2fib5fgrh5ft">\r
+IBA Base: Types/ib_grh_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_grh_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Global route header information received with unreliable datagram messages\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>#include <complib/cl_packon.h>\r
+typedef struct _ib_grh\r
+{\r
+ <a href="#robo894">ib_net32_t</a> ver_class_flow;\r
+ <a href="#robo893">ib_net16_t</a> resv1;\r
+ uint8_t resv2;\r
+ uint8_t hop_limit;\r
+ <a href="#robo856">ib_gid_t</a> src_gid;\r
+ <a href="#robo856">ib_gid_t</a> dest_gid;\r
+\r
+} PACK_SUFFIX <strong>ib_grh_t</strong>;\r
+#include <complib/cl_packoff.h>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo860">[Structures]<a name="IBA20Base3a20Types2fib5fguid5finfo5ft">\r
+IBA Base: Types/ib_guid_info_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_guid_info_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> IBA defined GuidInfo. (14.2.5.5)\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>#define GUID_TABLE_MAX_ENTRIES 8\r
+\r
+#include <complib/cl_packon.h>\r
+typedef struct _ib_guid_info\r
+{\r
+ <a href="#robo895">ib_net64_t</a> guid[GUID_TABLE_MAX_ENTRIES];\r
+\r
+} PACK_SUFFIX <strong>ib_guid_info_t</strong>;\r
+#include <complib/cl_packoff.h>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo861">[Functions]<a name="IBA20Base3a20Types2fib5finform5fget5fdev5fid">\r
+IBA Base: Types/ib_inform_get_dev_id</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_inform_get_dev_id</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Retrieves the device ID from a vendor specific inform trap.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_INLINE uint16_t AL_API\r
+<strong>ib_inform_get_dev_id</strong>(\r
+ IN const ib_inform_info_t* const p_inform_info )\r
+{\r
+ return <a href="#robo865">ib_inform_get_trap_num</a>( p_inform_info );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_inform_info\r
+ [in] Pointer to the inform info structure whose\r
+ device ID to return.\r
+\r
+ RETURN VALUES\r
+ Returns the vendor ID of the inform info, in host byte order.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> ib_inform_info_t, <a href="#robo868">ib_inform_set_dev_id</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo862">[Functions]<a name="IBA20Base3a20Types2fib5finform5fget5fprod5ftype">\r
+IBA Base: Types/ib_inform_get_prod_type</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_inform_get_prod_type</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Retrieves the producer type from an inform info structure.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_INLINE uint32_t AL_API\r
+<strong>ib_inform_get_prod_type</strong>(\r
+ IN const ib_inform_info_t* const p_inform_info )\r
+{\r
+ return (<a href="../complib/cl_byteswap_h.html#robo288">cl_ntoh32</a>( p_inform_info->combo3 ) >> 8);\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_inform_info\r
+ [in] Pointer to the inform info structure whose\r
+ prducer type to return.\r
+\r
+ RETURN VALUES\r
+ Returns the producer type of the infrom info, in host byte order.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> ib_inform_info_t, <a href="#robo869">ib_inform_set_prod_type</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo863">[Functions]<a name="IBA20Base3a20Types2fib5finform5fget5fqpn">\r
+IBA Base: Types/ib_inform_get_qpn</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_inform_get_qpn</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Retrieves the QPN from an inform info structure.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_INLINE net32_t AL_API\r
+<strong>ib_inform_get_qpn</strong>(\r
+ IN const ib_inform_info_t* const p_inform_info )\r
+{\r
+ return (p_inform_info->combo2 & <a href="../complib/cl_byteswap_h.html#robo289">CL_NTOH32</a>( 0x00FFFFFF ));\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_inform_info\r
+ [in] Pointer to the inform info structure whose\r
+ QPN to return.\r
+\r
+ RETURN VALUES\r
+ Returns the QPN of the infrom info.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> ib_inform_info_t, <a href="#robo870">ib_inform_set_qpn</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo864">[Functions]<a name="IBA20Base3a20Types2fib5finform5fget5fresp5ftime5fval">\r
+IBA Base: Types/ib_inform_get_resp_time_val</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_inform_get_resp_time_val</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Retrieves the response time value from an inform info structure.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_INLINE uint8_t AL_API\r
+<strong>ib_inform_get_resp_time_val</strong>(\r
+ IN const ib_inform_info_t* const p_inform_info )\r
+{\r
+ return (uint8_t)(<a href="../complib/cl_byteswap_h.html#robo288">cl_ntoh32</a>( p_inform_info->combo2 ) >> 27);\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_inform_info\r
+ [in] Pointer to the inform info structure whose\r
+ response time value to return.\r
+\r
+ RETURN VALUES\r
+ Returns the response time value of the infrom info.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> ib_inform_info_t, <a href="#robo871">ib_inform_set_resp_time_val</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo865">[Functions]<a name="IBA20Base3a20Types2fib5finform5fget5ftrap5fnum">\r
+IBA Base: Types/ib_inform_get_trap_num</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_inform_get_trap_num</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Retrieves the trap number from an inform info structure.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_INLINE uint16_t AL_API\r
+<strong>ib_inform_get_trap_num</strong>(\r
+ IN const ib_inform_info_t* const p_inform_info )\r
+{\r
+ return <a href="../complib/cl_byteswap_h.html#robo287">cl_ntoh16</a>( p_inform_info->combo1 );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_inform_info\r
+ [in] Pointer to the inform info structure whose\r
+ trap number to return.\r
+\r
+ RETURN VALUES\r
+ Returns the trap number of the infrom info, in host byte order.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> ib_inform_info_t, <a href="#robo872">ib_inform_set_trap_num</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo866">[Functions]<a name="IBA20Base3a20Types2fib5finform5fget5fvend5fid">\r
+IBA Base: Types/ib_inform_get_vend_id</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_inform_get_vend_id</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Retrieves the vendor ID from an inform info structure.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_INLINE uint32_t AL_API\r
+<strong>ib_inform_get_vend_id</strong>(\r
+ IN const ib_inform_info_t* const p_inform_info )\r
+{\r
+ return <a href="#robo862">ib_inform_get_prod_type</a>( p_inform_info );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_inform_info\r
+ [in] Pointer to the inform info structure whose\r
+ vendor ID to return.\r
+\r
+ RETURN VALUES\r
+ Returns the vendor ID of the infrom info, in host byte order.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> ib_inform_info_t, <a href="#robo873">ib_inform_set_vend_id</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo867">[Structures]<a name="IBA20Base3a20Types2fib5finform5finfo5frecord5ft">\r
+IBA Base: Types/ib_inform_info_record_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_inform_info_record_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> IBA defined InformInfo Record. (15.2.5.12)\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>#include <complib/cl_packon.h>\r
+typedef struct _ib_inform_info_record\r
+{\r
+ <a href="#robo856">ib_gid_t</a> subscriber_gid;\r
+ net16_t subscriber_enum;\r
+ uint16_t reserved[3];\r
+ ib_inform_info_t inform_info;\r
+\r
+} PACK_SUFFIX <strong>ib_inform_info_record_t</strong>;\r
+#include <complib/cl_packoff.h>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo868">[Functions]<a name="IBA20Base3a20Types2fib5finform5fset5fdev5fid">\r
+IBA Base: Types/ib_inform_set_dev_id</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_inform_set_dev_id</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Sets the producer type of a vendor specific inform trap.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_INLINE void AL_API\r
+<strong>ib_inform_set_dev_id</strong>(\r
+ IN OUT ib_inform_info_t* const p_inform_info,\r
+ IN const uint16_t dev_id )\r
+{\r
+ <a href="#robo872">ib_inform_set_trap_num</a>( p_inform_info, dev_id );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_inform_info\r
+ [in/out] Pointer to the inform info structure\r
+ whose device ID to set.\r
+\r
+ dev_id\r
+ [in] Device ID of inform trap.\r
+\r
+ RETURN VALUES\r
+ This function does not return a value.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> ib_inform_info_t, <a href="#robo861">ib_inform_get_dev_id</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo869">[Functions]<a name="IBA20Base3a20Types2fib5finform5fset5fprod5ftype">\r
+IBA Base: Types/ib_inform_set_prod_type</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_inform_set_prod_type</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Sets the producer type of an inform info structure.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_INLINE void AL_API\r
+<strong>ib_inform_set_prod_type</strong>(\r
+ IN OUT ib_inform_info_t* const p_inform_info,\r
+ IN const uint32_t prod_type )\r
+{\r
+ p_inform_info->combo3 = <a href="../complib/cl_byteswap_h.html#robo281">cl_hton32</a>( prod_type << 8 );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_inform_info\r
+ [in/out] Pointer to the inform info structure\r
+ whose producer type to set.\r
+\r
+ prod_type\r
+ [in] Producer type of inform trap.\r
+\r
+ RETURN VALUES\r
+ This function does not return a value.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> ib_inform_info_t, <a href="#robo862">ib_inform_get_prod_type</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo870">[Functions]<a name="IBA20Base3a20Types2fib5finform5fset5fqpn">\r
+IBA Base: Types/ib_inform_set_qpn</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_inform_set_qpn</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Sets the QPN of an inform info structure.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_INLINE void AL_API\r
+<strong>ib_inform_set_qpn</strong>(\r
+ IN OUT ib_inform_info_t* const p_inform_info,\r
+ IN const net32_t qpn )\r
+{\r
+ p_inform_info->combo2 &= <a href="../complib/cl_byteswap_h.html#robo289">CL_NTOH32</a>( 0xFF000000 );\r
+ p_inform_info->combo2 |= (qpn & <a href="../complib/cl_byteswap_h.html#robo289">CL_NTOH32</a>( 0x00FFFFFF ));\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_inform_info\r
+ [in/out] Pointer to the inform info structure\r
+ whose QPN to set.\r
+\r
+ qpn\r
+ [in] QPN of the inform info.\r
+\r
+ RETURN VALUES\r
+ This function does not return a value.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> ib_inform_info_t, <a href="#robo863">ib_inform_get_qpn</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo871">[Functions]<a name="IBA20Base3a20Types2fib5finform5fset5fresp5ftime5fval">\r
+IBA Base: Types/ib_inform_set_resp_time_val</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_inform_set_resp_time_val</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Sets the response time value of an inform info structure.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_INLINE void AL_API\r
+<strong>ib_inform_set_resp_time_val</strong>(\r
+ IN OUT ib_inform_info_t* const p_inform_info,\r
+ IN const uint8_t resp_time_val )\r
+{\r
+ uint32_t val;\r
+\r
+ val = <a href="../complib/cl_byteswap_h.html#robo288">cl_ntoh32</a>( p_inform_info->combo2 );\r
+ val &= 0x07FFFFFF;\r
+ val |= (resp_time_val << 27);\r
+ p_inform_info->combo2 = <a href="../complib/cl_byteswap_h.html#robo281">cl_hton32</a>( val );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_inform_info\r
+ [in/out] Pointer to the inform info structure\r
+ whose response time value to set.\r
+\r
+ resp_time_val\r
+ [in] Response time value of the inform info.\r
+\r
+ RETURN VALUES\r
+ This function does not return a value.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> ib_inform_info_t, <a href="#robo864">ib_inform_get_resp_time_val</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo872">[Functions]<a name="IBA20Base3a20Types2fib5finform5fset5ftrap5fnum">\r
+IBA Base: Types/ib_inform_set_trap_num</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_inform_set_trap_num</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Sets the trap number of an inform info structure.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_INLINE void AL_API\r
+<strong>ib_inform_set_trap_num</strong>(\r
+ IN OUT ib_inform_info_t* const p_inform_info,\r
+ IN const uint16_t trap_num )\r
+{\r
+ p_inform_info->combo1 = <a href="../complib/cl_byteswap_h.html#robo280">cl_hton16</a>( trap_num );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_inform_info\r
+ [in/out] Pointer to the inform info structure\r
+ whose trap number to set.\r
+\r
+ trap_num\r
+ [in] Trap number to set.\r
+\r
+ RETURN VALUES\r
+ This function does not return a value.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> ib_inform_info_t, <a href="#robo865">ib_inform_get_trap_num</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo873">[Functions]<a name="IBA20Base3a20Types2fib5finform5fset5fvend5fid">\r
+IBA Base: Types/ib_inform_set_vend_id</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_inform_set_vend_id</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Sets the vendor ID of an inform info structure.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_INLINE void AL_API\r
+<strong>ib_inform_set_vend_id</strong>(\r
+ IN OUT ib_inform_info_t* const p_inform_info,\r
+ IN const uint32_t vend_id )\r
+{\r
+ <a href="#robo869">ib_inform_set_prod_type</a>( p_inform_info, vend_id );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_inform_info\r
+ [in/out] Pointer to the inform info structure\r
+ whose vendor ID to set.\r
+\r
+ vend_id\r
+ [in] Vendor ID of inform trap.\r
+\r
+ RETURN VALUES\r
+ This function does not return a value.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> ib_mad_inform_info_t, <a href="#robo866">ib_inform_get_vend_id</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo874">[Structures]<a name="IBA20Base3a20Types2fib5fioc5fprofile5ft">\r
+IBA Base: Types/ib_ioc_profile_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_ioc_profile_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> IBA defined IO Controller profile structure (16.3.3.4)\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>#include <complib/cl_packon.h>\r
+typedef __declspec(align(8)) struct _ib_ioc_profile\r
+{\r
+ <a href="#robo895">ib_net64_t</a> ioc_guid;\r
+\r
+ <a href="#robo894">ib_net32_t</a> vend_id;\r
+\r
+ <a href="#robo894">ib_net32_t</a> dev_id;\r
+ <a href="#robo893">ib_net16_t</a> dev_ver;\r
+ <a href="#robo893">ib_net16_t</a> resv2;\r
+\r
+ <a href="#robo894">ib_net32_t</a> subsys_vend_id;\r
+ <a href="#robo894">ib_net32_t</a> subsys_id;\r
+\r
+ <a href="#robo893">ib_net16_t</a> io_class;\r
+ <a href="#robo893">ib_net16_t</a> io_subclass;\r
+ <a href="#robo893">ib_net16_t</a> protocol;\r
+ <a href="#robo893">ib_net16_t</a> protocol_ver;\r
+\r
+ <a href="#robo894">ib_net32_t</a> resv3;\r
+ <a href="#robo893">ib_net16_t</a> send_msg_depth;\r
+ uint8_t resv4;\r
+ uint8_t rdma_read_depth;\r
+ <a href="#robo894">ib_net32_t</a> send_msg_size;\r
+ <a href="#robo894">ib_net32_t</a> rdma_size;\r
+\r
+ uint8_t ctrl_ops_cap;\r
+#define CTRL_OPS_CAP_ST 0x01\r
+#define CTRL_OPS_CAP_SF 0x02\r
+#define CTRL_OPS_CAP_RT 0x04\r
+#define CTRL_OPS_CAP_RF 0x08\r
+#define CTRL_OPS_CAP_WT 0x10\r
+#define CTRL_OPS_CAP_WF 0x20\r
+#define CTRL_OPS_CAP_AT 0x40\r
+#define CTRL_OPS_CAP_AF 0x80\r
+\r
+ uint8_t resv5;\r
+\r
+ uint8_t num_svc_entries;\r
+#define MAX_NUM_SVC_ENTRIES 0xff\r
+\r
+ uint8_t resv6[9];\r
+\r
+#define CTRL_ID_STRING_LEN 64\r
+ char id_string[CTRL_ID_STRING_LEN];\r
+\r
+} PACK_SUFFIX <strong>ib_ioc_profile_t</strong>;\r
+#include <complib/cl_packoff.h>\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> ioc_guid\r
+ An EUI-64 GUID used to uniquely identify the IO controller.\r
+\r
+ vend_id\r
+ IO controller vendor ID, IEEE format.\r
+\r
+ dev_id\r
+ A number assigned by the vendor to identify the type of controller.\r
+\r
+ dev_ver\r
+ A number assigned by the vendor to identify the divice version.\r
+\r
+ subsys_vend_id\r
+ ID of the vendor of the enclosure, if any, in which the IO controller\r
+ resides in IEEE format; otherwise zero.\r
+\r
+ subsys_id\r
+ A number identifying the subsystem where the controller resides.\r
+\r
+ io_class\r
+ 0x0000 - 0xfffe = reserved for IO classes encompased by InfiniBand\r
+ Architecture. 0xffff = Vendor specific.\r
+\r
+ io_subclass\r
+ 0x0000 - 0xfffe = reserved for IO subclasses encompased by InfiniBand\r
+ Architecture. 0xffff = Vendor specific. This shall be set to 0xfff\r
+ if the io_class component is 0xffff.\r
+\r
+ protocol\r
+ 0x0000 - 0xfffe = reserved for IO subclasses encompased by InfiniBand\r
+ Architecture. 0xffff = Vendor specific. This shall be set to 0xfff\r
+ if the io_class component is 0xffff.\r
+\r
+ protocol_ver\r
+ Protocol specific.\r
+\r
+ send_msg_depth\r
+ Maximum depth of the send message queue.\r
+\r
+ rdma_read_depth\r
+ Maximum depth of the per-channel RDMA read queue.\r
+\r
+ send_msg_size\r
+ Maximum size of send messages.\r
+\r
+ ctrl_ops_cap\r
+ Supported operation types of this IO controller. A bit set to one\r
+ for affirmation of supported capability.\r
+\r
+ num_svc_entries\r
+ Number of entries in the service entries table.\r
+\r
+ id_string\r
+ UTF-8 encoded string for identifying the controller to an operator.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo840">ib_dm_mad_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo875">[Functions]<a name="IBA20Base3a20Types2fib5fiou5finfo5fdiag5fdev5fid">\r
+IBA Base: Types/ib_iou_info_diag_dev_id</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_iou_info_diag_dev_id</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Returns the DiagDeviceID.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_INLINE uint8_t AL_API\r
+<strong>ib_iou_info_diag_dev_id</strong>(\r
+ IN const <a href="#robo877">ib_iou_info_t</a>* const p_iou_info )\r
+{\r
+ return( (uint8_t)(p_iou_info->diag_rom >> 6 & 1) );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_iou_info\r
+ [in] Pointer to the IO Unit information structure.\r
+\r
+ RETURN VALUES\r
+ DiagDeviceID field of the IO Unit information.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"></span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo877">ib_iou_info_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo876">[Functions]<a name="IBA20Base3a20Types2fib5fiou5finfo5foption5from">\r
+IBA Base: Types/ib_iou_info_option_rom</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_iou_info_option_rom</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Returns the OptionROM.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_INLINE uint8_t AL_API\r
+<strong>ib_iou_info_option_rom</strong>(\r
+ IN const <a href="#robo877">ib_iou_info_t</a>* const p_iou_info )\r
+{\r
+ return( (uint8_t)(p_iou_info->diag_rom >> 7) );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_iou_info\r
+ [in] Pointer to the IO Unit information structure.\r
+\r
+ RETURN VALUES\r
+ OptionROM field of the IO Unit information.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"></span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo877">ib_iou_info_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo877">[Structures]<a name="IBA20Base3a20Types2fib5fiou5finfo5ft">\r
+IBA Base: Types/ib_iou_info_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_iou_info_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> IBA defined IO Unit information structure (16.3.3.3)\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>#include <complib/cl_packon.h>\r
+typedef struct _ib_iou_info\r
+{\r
+ <a href="#robo893">ib_net16_t</a> change_id;\r
+ uint8_t max_controllers;\r
+ uint8_t diag_rom;\r
+\r
+#define IB_DM_CTRL_LIST_SIZE 128\r
+#define IB_DM_MAX_CTRL 0xFF;\r
+\r
+ uint8_t controller_list[IB_DM_CTRL_LIST_SIZE];\r
+#define IOC_NOT_INSTALLED 0x0\r
+#define IOC_INSTALLED 0x1\r
+// Reserved values 0x02-0xE\r
+#define SLOT_DOES_NOT_EXIST 0xF\r
+\r
+} PACK_SUFFIX <strong>ib_iou_info_t</strong>;\r
+#include <complib/cl_packoff.h>\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> change_id\r
+ Value incremented, with rollover, by any change to the controller_list.\r
+\r
+ max_controllers\r
+ Number of slots in controller_list.\r
+\r
+ diag_rom\r
+ A byte containing two fields: DiagDeviceID and OptionROM.\r
+ These fields may be read using the <a href="#robo875">ib_iou_info_diag_dev_id</a>\r
+ and <a href="#robo876">ib_iou_info_option_rom</a> functions.\r
+\r
+ controller_list\r
+ A series of 4-bit nibbles, with each nibble representing a slot\r
+ in the IO Unit. Individual nibbles may be read using the\r
+ <a href="#robo977">ioc_at_slot</a> function.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo840">ib_dm_mad_t</a>, <a href="#robo875">ib_iou_info_diag_dev_id</a>, <a href="#robo876">ib_iou_info_option_rom</a>, <a href="#robo977">ioc_at_slot</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo878">[Structures]<a name="IBA20Base3a20Types2fib5flft5frecord5ft">\r
+IBA Base: Types/ib_lft_record_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_lft_record_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> IBA defined LinearForwardingTable. (14.2.5.6)\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>#include <complib/cl_packon.h>\r
+typedef struct _ib_lft_record\r
+{\r
+ <a href="#robo893">ib_net16_t</a> lid;\r
+ <a href="#robo893">ib_net16_t</a> block_num;\r
+ uint32_t resv0;\r
+ uint8_t lft[64];\r
+\r
+} PACK_SUFFIX <strong>ib_lft_record_t</strong>;\r
+#include <complib/cl_packoff.h>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo879">[Functions]<a name="IBA20Base3a20Types2fib5fmad5finit5fnew">\r
+IBA Base: Types/ib_mad_init_new</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_mad_init_new</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Initializes a MAD common header.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_INLINE void AL_API\r
+<strong>ib_mad_init_new</strong>(\r
+ IN <a href="#robo882">ib_mad_t</a>* const p_mad,\r
+ IN const uint8_t mgmt_class,\r
+ IN const uint8_t class_ver,\r
+ IN const uint8_t method,\r
+ IN const <a href="#robo895">ib_net64_t</a> trans_id,\r
+ IN const <a href="#robo893">ib_net16_t</a> attr_id,\r
+ IN const <a href="#robo894">ib_net32_t</a> attr_mod )\r
+{\r
+ CL_ASSERT( p_mad );\r
+ p_mad->base_ver = 1;\r
+ p_mad->mgmt_class = mgmt_class;\r
+ p_mad->class_ver = class_ver;\r
+ p_mad->method = method;\r
+ p_mad->status = 0;\r
+ p_mad->class_spec = 0;\r
+ p_mad->trans_id = trans_id;\r
+ p_mad->attr_id = attr_id;\r
+ p_mad->resv = 0;\r
+ p_mad->attr_mod = attr_mod;\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_mad\r
+ [in] Pointer to the MAD common header.\r
+\r
+ mgmt_class\r
+ [in] Class of operation.\r
+\r
+ class_ver\r
+ [in] Version of MAD class-specific format.\r
+\r
+ method\r
+ [in] Method to perform, including 'R' bit.\r
+\r
+ trans_Id\r
+ [in] Transaction ID.\r
+\r
+ attr_id\r
+ [in] Attribute ID.\r
+\r
+ attr_mod\r
+ [in] Attribute modifier.\r
+\r
+ RETURN VALUES\r
+ None.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"></span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo882">ib_mad_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo880">[Functions]<a name="IBA20Base3a20Types2fib5fmad5finit5fresponse">\r
+IBA Base: Types/ib_mad_init_response</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_mad_init_response</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Initializes a MAD common header as a response.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_INLINE void AL_API\r
+<strong>ib_mad_init_response</strong>(\r
+ IN const <a href="#robo882">ib_mad_t</a>* const p_req_mad,\r
+ IN <a href="#robo882">ib_mad_t</a>* const p_mad,\r
+ IN const <a href="#robo893">ib_net16_t</a> status )\r
+{\r
+ CL_ASSERT( p_req_mad );\r
+ CL_ASSERT( p_mad );\r
+ *p_mad = *p_req_mad;\r
+ p_mad->status = status;\r
+ if( p_mad->method == <a href="#robo771">IB_MAD_METHOD_SET</a> )\r
+ p_mad->method = <a href="#robo763">IB_MAD_METHOD_GET</a>;\r
+ p_mad->method |= <a href="#robo769">IB_MAD_METHOD_RESP_MASK</a>;\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_req_mad\r
+ [in] Pointer to the MAD common header in the original request MAD.\r
+\r
+ p_mad\r
+ [in] Pointer to the MAD common header to initialize.\r
+\r
+ status\r
+ [in] MAD Status value to return;\r
+\r
+ RETURN VALUES\r
+ None.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> p_req_mad and p_mad may point to the same MAD.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo882">ib_mad_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo881">[Functions]<a name="IBA20Base3a20Types2fib5fmad5fis5fresponse">\r
+IBA Base: Types/ib_mad_is_response</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_mad_is_response</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Returns TRUE if the MAD is a response ('R' bit set),\r
+ FALSE otherwise.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_INLINE boolean_t AL_API\r
+<strong>ib_mad_is_response</strong>(\r
+ IN const <a href="#robo882">ib_mad_t</a>* const p_mad )\r
+{\r
+ CL_ASSERT( p_mad );\r
+ return( (p_mad->method & <a href="#robo769">IB_MAD_METHOD_RESP_MASK</a>) ==\r
+ <a href="#robo769">IB_MAD_METHOD_RESP_MASK</a> );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_mad\r
+ [in] Pointer to the MAD.\r
+\r
+ RETURN VALUES\r
+ Returns TRUE if the MAD is a response ('R' bit set),\r
+ FALSE otherwise.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"></span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo882">ib_mad_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo882">[Structures]<a name="IBA20Base3a20Types2fib5fmad5ft">\r
+IBA Base: Types/ib_mad_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_mad_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> IBA defined MAD header (13.4.3)\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>#include <complib/cl_packon.h>\r
+typedef struct _ib_mad\r
+{\r
+ uint8_t base_ver;\r
+ uint8_t mgmt_class;\r
+ uint8_t class_ver;\r
+ uint8_t method;\r
+ <a href="#robo893">ib_net16_t</a> status;\r
+ <a href="#robo893">ib_net16_t</a> class_spec;\r
+ <a href="#robo895">ib_net64_t</a> trans_id;\r
+ <a href="#robo893">ib_net16_t</a> attr_id;\r
+ <a href="#robo893">ib_net16_t</a> resv;\r
+ <a href="#robo894">ib_net32_t</a> attr_mod;\r
+\r
+} PACK_SUFFIX <strong>ib_mad_t</strong>;\r
+#include <complib/cl_packoff.h>\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> base_ver\r
+ MAD base format.\r
+\r
+ mgmt_class\r
+ Class of operation.\r
+\r
+ class_ver\r
+ Version of MAD class-specific format.\r
+\r
+ method\r
+ Method to perform, including 'R' bit.\r
+\r
+ status\r
+ Status of operation.\r
+\r
+ class_spec\r
+ Reserved for subnet management.\r
+\r
+ trans_id\r
+ Transaction ID.\r
+\r
+ attr_id\r
+ Attribute ID.\r
+\r
+ resv\r
+ Reserved field.\r
+\r
+ attr_mod\r
+ Attribute modifier.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"></span>\r
+<hr />\r
+\r
+<h2><a name="robo883">[Functions]<a name="IBA20Base3a20Types2fib5fmember5fget5fscope">\r
+IBA Base: Types/ib_member_get_scope</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_member_get_scope</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Get encoded MGID scope\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_INLINE uint8_t AL_API\r
+<strong>ib_member_get_scope</strong>(\r
+ IN const uint8_t scope_state )\r
+{\r
+ return (scope_state >> 4);\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> scope_state\r
+ [in] the scope and state\r
+\r
+ RETURN VALUES\r
+ Encoded scope.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo887">ib_member_rec_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo884">[Functions]<a name="IBA20Base3a20Types2fib5fmember5fget5fscope5fstate">\r
+IBA Base: Types/ib_member_get_scope_state</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_member_get_scope_state</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Get encoded MGID scope and JoinState\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_INLINE void AL_API\r
+<strong>ib_member_get_scope_state</strong>(\r
+ IN const uint8_t scope_state,\r
+ OUT uint8_t* const p_scope,\r
+ OUT uint8_t* const p_state )\r
+{\r
+ if (p_scope)\r
+ *p_scope = <a href="#robo883">ib_member_get_scope</a>( scope_state );\r
+\r
+ if (p_state)\r
+ *p_state = <a href="#robo886">ib_member_get_state</a>( scope_state );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> scope_state\r
+ [in] the scope and state\r
+\r
+ RETURN VALUES\r
+ p_scope\r
+ [out] pointer to the MGID scope\r
+\r
+ p_state\r
+ [out] pointer to the join state\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"></span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo887">ib_member_rec_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo885">[Functions]<a name="IBA20Base3a20Types2fib5fmember5fget5fsl5fflow5fhop">\r
+IBA Base: Types/ib_member_get_sl_flow_hop</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_member_get_sl_flow_hop</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Get encoded sl flow label and hop limit\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_INLINE void AL_API\r
+<strong>ib_member_get_sl_flow_hop</strong>(\r
+ IN const <a href="#robo894">ib_net32_t</a> sl_flow_hop,\r
+ OUT uint8_t* const p_sl OPTIONAL,\r
+ OUT net32_t* const p_flow_lbl OPTIONAL,\r
+ OUT uint8_t* const p_hop OPTIONAL )\r
+{\r
+ <a href="#robo894">ib_net32_t</a> tmp_sl_flow_hop;\r
+\r
+ if (p_sl)\r
+ *p_sl = (uint8_t)(sl_flow_hop & 0x0f);\r
+\r
+ tmp_sl_flow_hop = sl_flow_hop >> 4;\r
+\r
+ if (p_flow_lbl)\r
+ *p_flow_lbl = (uint32_t)(tmp_sl_flow_hop & 0xffffff);\r
+\r
+ tmp_sl_flow_hop = tmp_sl_flow_hop >> 20;\r
+\r
+ if (p_hop)\r
+ *p_hop = (uint8_t)(tmp_sl_flow_hop & 0xff);\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> sl_flow_hop\r
+ [in] the sl flow label and hop limit of MC Group\r
+\r
+ RETURN VALUES\r
+ p_sl\r
+ [out] pointer to the service level\r
+\r
+ p_flow_lbl\r
+ [out] pointer to the flow label info\r
+\r
+ p_hop\r
+ [out] pointer to the hop count limit.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"></span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo887">ib_member_rec_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo886">[Functions]<a name="IBA20Base3a20Types2fib5fmember5fget5fstate">\r
+IBA Base: Types/ib_member_get_state</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_member_get_state</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Get encoded MGID JoinState\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_INLINE uint8_t AL_API\r
+<strong>ib_member_get_state</strong>(\r
+ IN const uint8_t scope_state )\r
+{\r
+ return (scope_state & 0x0f);\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> scope_state\r
+ [in] the scope and state\r
+\r
+ RETURN VALUES\r
+ Encoded JoinState\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo887">ib_member_rec_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo887">[Structures]<a name="IBA20Base3a20Types2fib5fmember5frec5ft">\r
+IBA Base: Types/ib_member_rec_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_member_rec_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Multicast member record, used to create, join, and leave multicast\r
+ groups.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>#include <complib/cl_packon.h>\r
+typedef struct _ib_member_rec\r
+{\r
+ <a href="#robo856">ib_gid_t</a> mgid;\r
+ <a href="#robo856">ib_gid_t</a> port_gid;\r
+ <a href="#robo894">ib_net32_t</a> qkey;\r
+ <a href="#robo893">ib_net16_t</a> mlid;\r
+ uint8_t mtu;\r
+ uint8_t tclass;\r
+ <a href="#robo893">ib_net16_t</a> pkey;\r
+ uint8_t rate;\r
+ uint8_t pkt_life;\r
+ <a href="#robo894">ib_net32_t</a> sl_flow_hop;\r
+ uint8_t scope_state;\r
+ uint8_t proxy_join;\r
+ uint8_t reserved[2];\r
+ uint8_t pad[4];\r
+\r
+} PACK_SUFFIX <strong>ib_member_rec_t</strong>;\r
+#include <complib/cl_packoff.h>\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> mgid\r
+ Multicast GID address for this multicast group.\r
+\r
+ port_gid\r
+ Valid GID of the endpoint joining this multicast group.\r
+\r
+ requestor_gid\r
+ GID of the endpoint making this request on hehave of port_gid.\r
+\r
+ qkey\r
+ Q_Key to be used by this multicast group.\r
+\r
+ mlid\r
+ Multicast LID for this multicast group.\r
+\r
+ mtu\r
+ MTU and MTU selector fields to use on this path\r
+\r
+ tclass\r
+ Another global routing parameter.\r
+\r
+ pkey\r
+ Partition key (P_Key) to use for this member.\r
+\r
+ rate\r
+ Rate and rate selector fields to use on this path.\r
+\r
+ pkt_life\r
+ Packet lifetime\r
+\r
+ sl_flow_hop\r
+ Global routing parameters: service level, hop count, and flow label.\r
+\r
+ scope_state\r
+ MGID scope and JoinState of multicast request.\r
+\r
+ proxy_join\r
+ Enables others in the Partition to proxy add/remove from the group\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"></span>\r
+<hr />\r
+\r
+<h2><a name="robo888">[Functions]<a name="IBA20Base3a20Types2fib5fmember5fset5fjoin5fstate">\r
+IBA Base: Types/ib_member_set_join_state</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_member_set_join_state</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Set JoinState\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_INLINE void AL_API\r
+<strong>ib_member_set_join_state</strong>(\r
+ IN OUT <a href="#robo887">ib_member_rec_t</a> *p_mc_rec,\r
+ IN const uint8_t state )\r
+{\r
+ p_mc_rec->scope_state &= 0xF0;\r
+ p_mc_rec->scope_state |= (state & 0x0F);\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_mc_rec\r
+ [in] pointer to the member record\r
+\r
+ state\r
+ [in] the JoinState\r
+\r
+ RETURN VALUES\r
+ NONE\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"></span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo887">ib_member_rec_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo889">[Functions]<a name="IBA20Base3a20Types2fib5fmember5fset5fscope">\r
+IBA Base: Types/ib_member_set_scope</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_member_set_scope</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Set encoded scope of a MCR.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_INLINE void AL_API\r
+<strong>ib_member_set_scope</strong>(\r
+ IN OUT uint8_t* const p_scope_state,\r
+ IN const uint8_t scope )\r
+{\r
+ CL_ASSERT( scope <= 0x0F );\r
+ /* Scope is MS 4-bits. */\r
+ *p_scope_state &= 0xF0;\r
+ *p_scope_state |= (scope << 4);\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> scope_state\r
+ [in/out] Pointer to the MCR scope_state field.\r
+\r
+ scope\r
+ [in] The desired scope.\r
+\r
+ RETURN VALUES\r
+ This function does not return a value.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo887">ib_member_rec_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo890">[Functions]<a name="IBA20Base3a20Types2fib5fmember5fset5fscope5fstate">\r
+IBA Base: Types/ib_member_set_scope_state</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_member_set_scope_state</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Set encoded version, MGID scope and JoinState\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_INLINE uint8_t AL_API\r
+<strong>ib_member_set_scope_state</strong>(\r
+ IN const uint8_t scope,\r
+ IN const uint8_t state )\r
+{\r
+ /* Scope is MS 4-bits, state is LS 4-bits */\r
+ return ((scope << 4) | (state & 0xF));\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> scope\r
+ [in] the MGID scope\r
+\r
+ state\r
+ [in] the JoinState\r
+\r
+ RETURN VALUES\r
+ scope_state\r
+ [out] the encoded one\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"></span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo887">ib_member_rec_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo891">[Functions]<a name="IBA20Base3a20Types2fib5fmember5fset5fsl5fflow5fhop">\r
+IBA Base: Types/ib_member_set_sl_flow_hop</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_member_set_sl_flow_hop</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Set encoded version, sl flow and hop\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_INLINE <a href="#robo894">ib_net32_t</a> AL_API\r
+<strong>ib_member_set_sl_flow_hop</strong>(\r
+ IN const uint8_t sl,\r
+ IN const net32_t flow_lbl,\r
+ IN const uint8_t hop_limit )\r
+{\r
+ <a href="#robo894">ib_net32_t</a> sl_flow_hop;\r
+\r
+ sl_flow_hop = sl;\r
+ sl_flow_hop <<= 20;\r
+ sl_flow_hop |= (<a href="../complib/cl_byteswap_h.html#robo288">cl_ntoh32</a>( flow_lbl ) & 0x000FFFFF);\r
+ sl_flow_hop <<= 8;\r
+ sl_flow_hop |= hop_limit;\r
+ return <a href="../complib/cl_byteswap_h.html#robo281">cl_hton32</a>(sl_flow_hop);\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> sl\r
+ [in] the service level.\r
+\r
+ flow_lbl\r
+ [in] the flow label info\r
+\r
+ hop_limit\r
+ [in] the hop limit.\r
+\r
+ RETURN VALUES\r
+ sl_flow_hop\r
+ [out] the sl flow label and hop limit\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"></span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo887">ib_member_rec_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo892">[Functions]<a name="IBA20Base3a20Types2fib5fmember5fset5fstate">\r
+IBA Base: Types/ib_member_set_state</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_member_set_state</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Set encoded JoinState of a MCR.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_INLINE void AL_API\r
+<strong>ib_member_set_state</strong>(\r
+ IN OUT uint8_t* const p_scope_state,\r
+ IN const uint8_t state )\r
+{\r
+ CL_ASSERT( state <= 0x0F );\r
+ /* State is LS 4-bits. */\r
+ *p_scope_state &= 0x0F;\r
+ *p_scope_state |= (state & 0x0F);\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> scope_state\r
+ [in/out] Pointer to the MCR scope_state field to modify.\r
+\r
+ state\r
+ [in] the JoinState\r
+\r
+ RETURN VALUES\r
+ This function does not return a value.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo887">ib_member_rec_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo893">[Definitions]<a name="IBA20Base3a20Types2fib5fnet165ft">\r
+IBA Base: Types/ib_net16_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_net16_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Defines the network ordered type for 16-bit values.\r
+</pre>\r
+</span><p><strong>SOURCE</strong></p>\r
+<span class="SOURCE"><pre>typedef uint16_t <strong>ib_net16_t</strong>;\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo894">[Definitions]<a name="IBA20Base3a20Types2fib5fnet325ft">\r
+IBA Base: Types/ib_net32_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_net32_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Defines the network ordered type for 32-bit values.\r
+</pre>\r
+</span><p><strong>SOURCE</strong></p>\r
+<span class="SOURCE"><pre>typedef uint32_t <strong>ib_net32_t</strong>;\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo895">[Definitions]<a name="IBA20Base3a20Types2fib5fnet645ft">\r
+IBA Base: Types/ib_net64_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_net64_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Defines the network ordered type for 64-bit values.\r
+</pre>\r
+</span><p><strong>SOURCE</strong></p>\r
+<span class="SOURCE"><pre>typedef uint64_t <strong>ib_net64_t</strong>;\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo896">[Functions]<a name="IBA20Base3a20Types2fib5fnode5finfo5fget5flocal5fport5fnum">\r
+IBA Base: Types/ib_node_info_get_local_port_num</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_node_info_get_local_port_num</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Gets a the local port number from the NodeInfo attribute.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_INLINE uint8_t AL_API\r
+<strong>ib_node_info_get_local_port_num</strong>(\r
+ IN const <a href="#robo898">ib_node_info_t</a>* const p_ni )\r
+{\r
+ return( (uint8_t)(( p_ni->port_num_vendor_id &\r
+ IB_NODE_INFO_PORT_NUM_MASK )\r
+ >> IB_NODE_INFO_PORT_NUM_SHIFT ));\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_ni\r
+ [in] Pointer to a NodeInfo attribute.\r
+\r
+ RETURN VALUES\r
+ Local port number that returned the attribute.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"></span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo898">ib_node_info_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo897">[Functions]<a name="IBA20Base3a20Types2fib5fnode5finfo5fget5fvendor5fid">\r
+IBA Base: Types/ib_node_info_get_vendor_id</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_node_info_get_vendor_id</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Gets the VendorID from the NodeInfo attribute.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_INLINE <a href="#robo894">ib_net32_t</a> AL_API\r
+<strong>ib_node_info_get_vendor_id</strong>(\r
+ IN const <a href="#robo898">ib_node_info_t</a>* const p_ni )\r
+{\r
+ return( (<a href="#robo894">ib_net32_t</a>)( p_ni->port_num_vendor_id &\r
+ IB_NODE_INFO_VEND_ID_MASK ) );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_ni\r
+ [in] Pointer to a NodeInfo attribute.\r
+\r
+ RETURN VALUES\r
+ VendorID that returned the attribute.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"></span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo898">ib_node_info_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo898">[Structures]<a name="IBA20Base3a20Types2fib5fnode5finfo5ft">\r
+IBA Base: Types/ib_node_info_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_node_info_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> IBA defined NodeInfo. (14.2.5.3)\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>#include <complib/cl_packon.h>\r
+typedef struct _ib_node_info\r
+{\r
+ uint8_t base_version;\r
+ uint8_t class_version;\r
+ uint8_t node_type;\r
+ uint8_t num_ports;\r
+ <a href="#robo895">ib_net64_t</a> sys_guid;\r
+ <a href="#robo895">ib_net64_t</a> node_guid;\r
+ <a href="#robo895">ib_net64_t</a> port_guid;\r
+ <a href="#robo893">ib_net16_t</a> partition_cap;\r
+ <a href="#robo893">ib_net16_t</a> device_id;\r
+ <a href="#robo894">ib_net32_t</a> revision;\r
+ <a href="#robo894">ib_net32_t</a> port_num_vendor_id;\r
+\r
+} PACK_SUFFIX <strong>ib_node_info_t</strong>;\r
+#include <complib/cl_packoff.h>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo899">[Functions]<a name="IBA20Base3a20Types2fib5fnotice5fget5fcount">\r
+IBA Base: Types/ib_notice_get_count</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_notice_get_count</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Retrieves the notice toggle count from a notice trap.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_INLINE boolean_t AL_API\r
+<strong>ib_notice_get_count</strong>(\r
+ IN const ib_mad_notice_attr_t* const p_notice_attr )\r
+{\r
+ return ((<a href="../complib/cl_byteswap_h.html#robo287">cl_ntoh16</a>( p_notice_attr->combo3 ) & 0xFFFE) >> 1);\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_notice_attr\r
+ [in] Pointer to the notice attribute structure whose\r
+ notice toggle count to return.\r
+\r
+ RETURN VALUES\r
+ Returns the notice toggle count of the notice.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> ib_mad_notice_attr_t, <a href="#robo907">ib_notice_set_count</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo900">[Functions]<a name="IBA20Base3a20Types2fib5fnotice5fget5fdev5fid">\r
+IBA Base: Types/ib_notice_get_dev_id</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_notice_get_dev_id</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Retrieves the device ID from a vendor specific notice trap.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_INLINE uint16_t AL_API\r
+<strong>ib_notice_get_dev_id</strong>(\r
+ IN const ib_mad_notice_attr_t* const p_notice_attr )\r
+{\r
+ return <a href="#robo904">ib_notice_get_trap_num</a>( p_notice_attr );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_notice_attr\r
+ [in] Pointer to the notice attribute structure whose\r
+ device ID to return.\r
+\r
+ RETURN VALUES\r
+ Returns the vendor ID of the notice, in host byte order.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> ib_mad_notice_attr_t, <a href="#robo908">ib_notice_set_dev_id</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo901">[Functions]<a name="IBA20Base3a20Types2fib5fnotice5fget5fgeneric">\r
+IBA Base: Types/ib_notice_get_generic</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_notice_get_generic</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Retrieves whether a notice trap is generic.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_INLINE boolean_t AL_API\r
+<strong>ib_notice_get_generic</strong>(\r
+ IN const ib_mad_notice_attr_t* const p_notice_attr )\r
+{\r
+ if( <a href="../complib/cl_byteswap_h.html#robo288">cl_ntoh32</a>( p_notice_attr->combo1 ) & 0x00000001 )\r
+ return TRUE;\r
+ return FALSE;\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_notice_attr\r
+ [in] Pointer to the notice attribute structure for which to return\r
+ whether it is generic or not.\r
+\r
+ RETURN VALUES\r
+ Returns TRUE if the notice is generic.\r
+\r
+ Returns FALSE if the notice is vendor specific.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> ib_mad_notice_attr_t, <a href="#robo909">ib_notice_set_generic</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo902">[Functions]<a name="IBA20Base3a20Types2fib5fnotice5fget5fprod5ftype">\r
+IBA Base: Types/ib_notice_get_prod_type</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_notice_get_prod_type</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Retrieves the producer type from a generic notice trap.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_INLINE uint32_t AL_API\r
+<strong>ib_notice_get_prod_type</strong>(\r
+ IN const ib_mad_notice_attr_t* const p_notice_attr )\r
+{\r
+ return (<a href="../complib/cl_byteswap_h.html#robo288">cl_ntoh32</a>( p_notice_attr->combo1 ) >> 8);\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_notice_attr\r
+ [in] Pointer to the notice attribute structure whose\r
+ prducer type to return.\r
+\r
+ RETURN VALUES\r
+ Returns the producer type of the notice, in host byte order.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> ib_mad_notice_attr_t, <a href="#robo910">ib_notice_set_prod_type</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo903">[Functions]<a name="IBA20Base3a20Types2fib5fnotice5fget5ftoggle">\r
+IBA Base: Types/ib_notice_get_toggle</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_notice_get_toggle</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Retrieves the notice toggle bit from a notice trap.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_INLINE boolean_t AL_API\r
+<strong>ib_notice_get_toggle</strong>(\r
+ IN const ib_mad_notice_attr_t* const p_notice_attr )\r
+{\r
+ return (<a href="../complib/cl_byteswap_h.html#robo287">cl_ntoh16</a>( p_notice_attr->combo3 ) & 0x0001);\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_notice_attr\r
+ [in] Pointer to the notice attribute structure whose\r
+ notice toggle bit value to return.\r
+\r
+ RETURN VALUES\r
+ Returns TRUE if the notice toggle bit of the notice is set.\r
+\r
+ Returns FALSE otherwise.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> ib_mad_notice_attr_t, <a href="#robo911">ib_notice_set_toggle</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo904">[Functions]<a name="IBA20Base3a20Types2fib5fnotice5fget5ftrap5fnum">\r
+IBA Base: Types/ib_notice_get_trap_num</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_notice_get_trap_num</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Retrieves the trap number from a generic notice trap.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_INLINE uint16_t AL_API\r
+<strong>ib_notice_get_trap_num</strong>(\r
+ IN const ib_mad_notice_attr_t* const p_notice_attr )\r
+{\r
+ return <a href="../complib/cl_byteswap_h.html#robo287">cl_ntoh16</a>( p_notice_attr->combo2 );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_notice_attr\r
+ [in] Pointer to the notice attribute structure whose\r
+ trap number to return.\r
+\r
+ RETURN VALUES\r
+ Returns the vendor ID of the notice, in host byte order.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> ib_mad_notice_attr_t, <a href="#robo912">ib_notice_set_trap_num</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo905">[Functions]<a name="IBA20Base3a20Types2fib5fnotice5fget5ftype">\r
+IBA Base: Types/ib_notice_get_type</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_notice_get_type</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Retrieves the type of a notice trap.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_INLINE uint8_t AL_API\r
+<strong>ib_notice_get_type</strong>(\r
+ IN const ib_mad_notice_attr_t* const p_notice_attr )\r
+{\r
+ return (uint8_t)((<a href="../complib/cl_byteswap_h.html#robo288">cl_ntoh32</a>( p_notice_attr->combo1 ) >> 1) & 0x0000007F);\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_notice_attr\r
+ [in] Pointer to the notice attribute structure whose type to return.\r
+\r
+ RETURN VALUES\r
+ Returns the type of the notice.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> ib_mad_notice_attr_t, <a href="#robo913">ib_notice_set_type</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo906">[Functions]<a name="IBA20Base3a20Types2fib5fnotice5fget5fvend5fid">\r
+IBA Base: Types/ib_notice_get_vend_id</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_notice_get_vend_id</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Retrieves the vendor ID from a vendor specific notice trap.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_INLINE uint32_t AL_API\r
+<strong>ib_notice_get_vend_id</strong>(\r
+ IN const ib_mad_notice_attr_t* const p_notice_attr )\r
+{\r
+ return <a href="#robo902">ib_notice_get_prod_type</a>( p_notice_attr );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_notice_attr\r
+ [in] Pointer to the notice attribute structure whose\r
+ vendor ID to return.\r
+\r
+ RETURN VALUES\r
+ Returns the vendor ID of the notice, in host byte order.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> ib_mad_notice_attr_t, <a href="#robo914">ib_notice_set_vend_id</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo907">[Functions]<a name="IBA20Base3a20Types2fib5fnotice5fset5fcount">\r
+IBA Base: Types/ib_notice_set_count</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_notice_set_count</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Sets the toggle count of a notice trap.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_INLINE void AL_API\r
+<strong>ib_notice_set_count</strong>(\r
+ IN OUT ib_mad_notice_attr_t* const p_notice_attr,\r
+ IN const uint16_t toggle_cnt )\r
+{\r
+ uint16_t val;\r
+ val = <a href="../complib/cl_byteswap_h.html#robo287">cl_ntoh16</a>( p_notice_attr->combo3 );\r
+ val &= 0x0001;\r
+ val |= (toggle_cnt << 1);\r
+ p_notice_attr->combo3 = <a href="../complib/cl_byteswap_h.html#robo280">cl_hton16</a>( val );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_notice_attr\r
+ [in/out] Pointer to the notice attribute structure\r
+ whose device ID to set.\r
+\r
+ toggle_cnt\r
+ [in] Toggle count value of the notice.\r
+\r
+ RETURN VALUES\r
+ This function does not return a value.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> ib_mad_notice_attr_t, <a href="#robo899">ib_notice_get_count</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo908">[Functions]<a name="IBA20Base3a20Types2fib5fnotice5fset5fdev5fid">\r
+IBA Base: Types/ib_notice_set_dev_id</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_notice_set_dev_id</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Sets the producer type of a vendor specific notice trap.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_INLINE void AL_API\r
+<strong>ib_notice_set_dev_id</strong>(\r
+ IN OUT ib_mad_notice_attr_t* const p_notice_attr,\r
+ IN const uint16_t dev_id )\r
+{\r
+ <a href="#robo912">ib_notice_set_trap_num</a>( p_notice_attr, dev_id );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_notice_attr\r
+ [in/out] Pointer to the notice attribute structure\r
+ whose device ID to set.\r
+\r
+ dev_id\r
+ [in] Device ID of notice trap.\r
+\r
+ RETURN VALUES\r
+ This function does not return a value.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> ib_mad_notice_attr_t, <a href="#robo900">ib_notice_get_dev_id</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo909">[Functions]<a name="IBA20Base3a20Types2fib5fnotice5fset5fgeneric">\r
+IBA Base: Types/ib_notice_set_generic</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_notice_set_generic</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Sets whether a notice trap is generic.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_INLINE void AL_API\r
+<strong>ib_notice_set_generic</strong>(\r
+ IN OUT ib_mad_notice_attr_t* const p_notice_attr,\r
+ IN const boolean_t is_generic )\r
+{\r
+ uint32_t val;\r
+\r
+ val = <a href="../complib/cl_byteswap_h.html#robo288">cl_ntoh32</a>( p_notice_attr->combo1 );\r
+ if( is_generic )\r
+ val |= 0x00000001;\r
+ else\r
+ val &= 0xFFFFFFFE;\r
+ p_notice_attr->combo1 = <a href="../complib/cl_byteswap_h.html#robo281">cl_hton32</a>( val );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_notice_attr\r
+ [in/out] Pointer to the notice attribute structure for which to set\r
+ the generic bit.\r
+\r
+ is_generic\r
+ [in] TRUE if the notice is generic, FALSE if vendor specific.\r
+\r
+ RETURN VALUES\r
+ This function does not return a value.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> ib_mad_notice_attr_t, <a href="#robo901">ib_notice_get_generic</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo910">[Functions]<a name="IBA20Base3a20Types2fib5fnotice5fset5fprod5ftype">\r
+IBA Base: Types/ib_notice_set_prod_type</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_notice_set_prod_type</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Sets the producer type of a generic notice trap.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_INLINE void AL_API\r
+<strong>ib_notice_set_prod_type</strong>(\r
+ IN OUT ib_mad_notice_attr_t* const p_notice_attr,\r
+ IN const uint32_t prod_type )\r
+{\r
+ uint32_t val;\r
+\r
+ val = <a href="../complib/cl_byteswap_h.html#robo288">cl_ntoh32</a>( p_notice_attr->combo1 );\r
+ /* Clear the type. */\r
+ val &= 0x000000FF;\r
+ /* Set new value. */\r
+ val |= (prod_type << 8);\r
+ p_notice_attr->combo1 = <a href="../complib/cl_byteswap_h.html#robo281">cl_hton32</a>( val );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_notice_attr\r
+ [in/out] Pointer to the notice attribute structure\r
+ whose producer type to set.\r
+\r
+ prod_type\r
+ [in] Producer type of notice trap.\r
+\r
+ RETURN VALUES\r
+ This function does not return a value.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> ib_mad_notice_attr_t, <a href="#robo902">ib_notice_get_prod_type</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo911">[Functions]<a name="IBA20Base3a20Types2fib5fnotice5fset5ftoggle">\r
+IBA Base: Types/ib_notice_set_toggle</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_notice_set_toggle</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Sets the notice toggle bit of a notice trap.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_INLINE void AL_API\r
+<strong>ib_notice_set_toggle</strong>(\r
+ IN OUT ib_mad_notice_attr_t* const p_notice_attr,\r
+ IN const boolean_t toggle_val )\r
+{\r
+ uint16_t val;\r
+ val = <a href="../complib/cl_byteswap_h.html#robo287">cl_ntoh16</a>( p_notice_attr->combo3 );\r
+ if( toggle_val )\r
+ val |= 0x0001;\r
+ else\r
+ val &= 0xFFFE;\r
+ p_notice_attr->combo3 = <a href="../complib/cl_byteswap_h.html#robo280">cl_hton16</a>( val );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_notice_attr\r
+ [in/out] Pointer to the notice attribute structure\r
+ whose notice toggle bit to set or clear.\r
+\r
+ toggle_val\r
+ [in] Boolean value indicating whether the toggle bit of the notice\r
+ should be set or cleared.\r
+\r
+ RETURN VALUES\r
+ This function does not return a value.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> ib_mad_notice_attr_t, <a href="#robo903">ib_notice_get_toggle</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo912">[Functions]<a name="IBA20Base3a20Types2fib5fnotice5fset5ftrap5fnum">\r
+IBA Base: Types/ib_notice_set_trap_num</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_notice_set_trap_num</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Sets the trap number of a generic notice trap.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_INLINE void AL_API\r
+<strong>ib_notice_set_trap_num</strong>(\r
+ IN OUT ib_mad_notice_attr_t* const p_notice_attr,\r
+ IN const uint16_t trap_num )\r
+{\r
+ p_notice_attr->combo2 = <a href="../complib/cl_byteswap_h.html#robo280">cl_hton16</a>( trap_num );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_notice_attr\r
+ [in/out] Pointer to the notice attribute structure\r
+ whose trap number to set.\r
+\r
+ trap_num\r
+ [in] Trap number to set.\r
+\r
+ RETURN VALUES\r
+ This function does not return a value.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> ib_mad_notice_attr_t, <a href="#robo904">ib_notice_get_trap_num</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo913">[Functions]<a name="IBA20Base3a20Types2fib5fnotice5fset5ftype">\r
+IBA Base: Types/ib_notice_set_type</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_notice_set_type</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Sets the type of a notice trap.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_INLINE void AL_API\r
+<strong>ib_notice_set_type</strong>(\r
+ IN OUT ib_mad_notice_attr_t* const p_notice_attr,\r
+ IN const uint8_t type )\r
+{\r
+ uint32_t val;\r
+\r
+ val = <a href="../complib/cl_byteswap_h.html#robo288">cl_ntoh32</a>( p_notice_attr->combo1 );\r
+ /* Clear the type. */\r
+ val &= 0xFFFFFF01;\r
+ /* Set new value. */\r
+ val |= (((uint32_t)(type & 0x7F)) << 1);\r
+ p_notice_attr->combo1 = <a href="../complib/cl_byteswap_h.html#robo281">cl_hton32</a>( val );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_notice_attr\r
+ [in/out] Pointer to the notice attribute structure whose type to set.\r
+\r
+ type\r
+ [in] Type of notice trap.\r
+\r
+ RETURN VALUES\r
+ This function does not return a value.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> ib_mad_notice_attr_t, <a href="#robo905">ib_notice_get_type</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo914">[Functions]<a name="IBA20Base3a20Types2fib5fnotice5fset5fvend5fid">\r
+IBA Base: Types/ib_notice_set_vend_id</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_notice_set_vend_id</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Sets the vendor ID of a vendor specific notice trap.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_INLINE void AL_API\r
+<strong>ib_notice_set_vend_id</strong>(\r
+ IN OUT ib_mad_notice_attr_t* const p_notice_attr,\r
+ IN const uint32_t vend_id )\r
+{\r
+ <a href="#robo910">ib_notice_set_prod_type</a>( p_notice_attr, vend_id );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_notice_attr\r
+ [in/out] Pointer to the notice attribute structure\r
+ whose vendor ID to set.\r
+\r
+ vend_id\r
+ [in] Vendor ID of notice trap.\r
+\r
+ RETURN VALUES\r
+ This function does not return a value.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> ib_mad_notice_attr_t, <a href="#robo906">ib_notice_get_vend_id</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo915">[Functions]<a name="IBA20Base3a20Types2fib5fpath5fget5fipd">\r
+IBA Base: Types/ib_path_get_ipd</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_path_get_ipd</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Returns the encoded value for the inter packet delay.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_INLINE uint8_t AL_API\r
+<strong>ib_path_get_ipd</strong>(\r
+ IN uint8_t local_link_width_supported,\r
+ IN uint8_t path_rec_rate )\r
+{\r
+ uint8_t ipd = 0;\r
+\r
+ switch(local_link_width_supported)\r
+ {\r
+ //link_width_supported = 1: 1x\r
+ case 1:\r
+ break;\r
+\r
+ //link_width_supported = 3: 1x or 4x\r
+ case 3:\r
+ switch(path_rec_rate & 0x3F)\r
+ {\r
+ case IB_PATH_RECORD_RATE_2_5_GBS:\r
+ ipd = 3;\r
+ break;\r
+ default:\r
+ break;\r
+ }\r
+ break;\r
+\r
+ //link_width_supported = 11: 1x or 4x or 12x\r
+ case 11:\r
+ switch(path_rec_rate & 0x3F)\r
+ {\r
+ case IB_PATH_RECORD_RATE_2_5_GBS:\r
+ ipd = 11;\r
+ break;\r
+ case IB_PATH_RECORD_RATE_10_GBS:\r
+ ipd = 2;\r
+ break;\r
+ default:\r
+ break;\r
+ }\r
+ break;\r
+\r
+ default:\r
+ break;\r
+ }\r
+\r
+ return ipd;\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> local_link_width_supported\r
+ [in] link with supported for this port\r
+\r
+ path_rec_rate\r
+ [in] rate field of the path record\r
+\r
+ RETURN VALUES\r
+ Returns the ipd\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"></span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"></span>\r
+<hr />\r
+\r
+<h2><a name="robo916">[Functions]<a name="IBA20Base3a20Types2fib5fpath5frec5fflow5flbl">\r
+IBA Base: Types/ib_path_rec_flow_lbl</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_path_rec_flow_lbl</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Get flow label.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_INLINE net32_t AL_API\r
+<strong>ib_path_rec_flow_lbl</strong>(\r
+ IN const <a href="#robo927">ib_path_rec_t</a>* const p_rec )\r
+{\r
+ return( <a href="../complib/cl_byteswap_h.html#robo281">cl_hton32</a>( (<a href="../complib/cl_byteswap_h.html#robo288">cl_ntoh32</a>(p_rec->hop_flow_raw.val) >> 8) & 0x000FFFFF ) );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_rec\r
+ [in] Pointer to the path record object.\r
+\r
+ RETURN VALUES\r
+ Flow label of the path record.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"></span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo927">ib_path_rec_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo917">[Functions]<a name="IBA20Base3a20Types2fib5fpath5frec5fhop5flimit">\r
+IBA Base: Types/ib_path_rec_hop_limit</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_path_rec_hop_limit</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Get hop limit.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_INLINE uint8_t AL_API\r
+<strong>ib_path_rec_hop_limit</strong>(\r
+ IN const <a href="#robo927">ib_path_rec_t</a>* const p_rec )\r
+{\r
+ return( p_rec->hop_flow_raw.bytes[3] );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_rec\r
+ [in] Pointer to the path record object.\r
+\r
+ RETURN VALUES\r
+ Hop limit of the path record.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"></span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo927">ib_path_rec_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo918">[Functions]<a name="IBA20Base3a20Types2fib5fpath5frec5finit5flocal">\r
+IBA Base: Types/ib_path_rec_init_local</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_path_rec_init_local</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Initializes a subnet local path record.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_INLINE void AL_API\r
+<strong>ib_path_rec_init_local</strong>(\r
+ IN <a href="#robo927">ib_path_rec_t</a>* const p_rec,\r
+ IN const <a href="#robo856">ib_gid_t</a>* const p_dgid,\r
+ IN const <a href="#robo856">ib_gid_t</a>* const p_sgid,\r
+ IN const <a href="#robo893">ib_net16_t</a> dlid,\r
+ IN const <a href="#robo893">ib_net16_t</a> slid,\r
+ IN const uint8_t num_path,\r
+ IN const <a href="#robo893">ib_net16_t</a> pkey,\r
+ IN const uint8_t sl,\r
+ IN const uint8_t mtu_selector,\r
+ IN const uint8_t mtu,\r
+ IN const uint8_t rate_selector,\r
+ IN const uint8_t rate,\r
+ IN const uint8_t pkt_life_selector,\r
+ IN const uint8_t pkt_life,\r
+ IN const uint8_t preference )\r
+{\r
+ p_rec->dgid = *p_dgid;\r
+ p_rec->sgid = *p_sgid;\r
+ p_rec->dlid = dlid;\r
+ p_rec->slid = slid;\r
+ p_rec->num_path = num_path;\r
+ p_rec->pkey = pkey;\r
+ /* Lower 4 bits of path rec's SL are reserved. */\r
+ p_rec->sl = <a href="../complib/cl_byteswap_h.html#robo287">cl_ntoh16</a>( sl );\r
+ p_rec->mtu = (uint8_t)((mtu & <a href="#robo809">IB_PATH_REC_BASE_MASK</a>) |\r
+ (uint8_t)(mtu_selector << 6));\r
+ p_rec->rate = (uint8_t)((rate & <a href="#robo809">IB_PATH_REC_BASE_MASK</a>) |\r
+ (uint8_t)(rate_selector << 6));\r
+ p_rec->pkt_life = (uint8_t)((pkt_life & <a href="#robo809">IB_PATH_REC_BASE_MASK</a>) |\r
+ (uint8_t)(pkt_life_selector << 6));\r
+ p_rec->preference = preference;\r
+\r
+ /* Clear global routing fields for local path records */\r
+ p_rec->hop_flow_raw.val = 0;\r
+ p_rec->tclass = 0;\r
+\r
+ p_rec->resv0 = 0;\r
+ p_rec->resv1 = 0;\r
+ p_rec->resv2 = 0;\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_rec\r
+ [in] Pointer to the path record object.\r
+\r
+ dgid\r
+ [in] GID of destination port.\r
+\r
+ sgid\r
+ [in] GID of source port.\r
+\r
+ dlid\r
+ [in] LID of destination port.\r
+\r
+ slid\r
+ [in] LID of source port.\r
+\r
+ num_path\r
+ [in] In queries, maximum number of paths to return.\r
+ In responses, undefined.\r
+\r
+ pkey\r
+ [in] Partition key (P_Key) to use on this path.\r
+\r
+ sl\r
+ [in] Service level to use on this path. Lower 4-bits are valid.\r
+\r
+ mtu_selector\r
+ [in] Encoded MTU selector value to use on this path\r
+\r
+ mtu\r
+ [in] Encoded MTU to use on this path\r
+\r
+ rate_selector\r
+ [in] Encoded rate selector value to use on this path.\r
+\r
+ rate\r
+ [in] Encoded rate to use on this path.\r
+\r
+ pkt_life_selector\r
+ [in] Encoded Packet selector value lifetime for this path.\r
+\r
+ pkt_life\r
+ [in] Encoded Packet lifetime for this path.\r
+\r
+ preference\r
+ [in] Indicates the relative merit of this path versus other path\r
+ records returned from the SA. Lower numbers are better.\r
+\r
+ RETURN VALUES\r
+ None.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"></span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo856">ib_gid_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo919">[Functions]<a name="IBA20Base3a20Types2fib5fpath5frec5fmtu">\r
+IBA Base: Types/ib_path_rec_mtu</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_path_rec_mtu</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Get encoded path MTU.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_INLINE uint8_t AL_API\r
+<strong>ib_path_rec_mtu</strong>(\r
+ IN const <a href="#robo927">ib_path_rec_t</a>* const p_rec )\r
+{\r
+ return( (uint8_t)(p_rec->mtu & <a href="#robo809">IB_PATH_REC_BASE_MASK</a>) );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_rec\r
+ [in] Pointer to the path record object.\r
+\r
+ RETURN VALUES\r
+ Encoded path MTU.\r
+ 1: 256\r
+ 2: 512\r
+ 3: 1024\r
+ 4: 2048\r
+ 5: 4096\r
+ others: reserved\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"></span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo927">ib_path_rec_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo920">[Functions]<a name="IBA20Base3a20Types2fib5fpath5frec5fmtu5fsel">\r
+IBA Base: Types/ib_path_rec_mtu_sel</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_path_rec_mtu_sel</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Get encoded path MTU selector.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_INLINE uint8_t AL_API\r
+<strong>ib_path_rec_mtu_sel</strong>(\r
+ IN const <a href="#robo927">ib_path_rec_t</a>* const p_rec )\r
+{\r
+ return( (uint8_t)((p_rec->mtu & <a href="#robo810">IB_PATH_REC_SELECTOR_MASK</a>) >> 6) );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_rec\r
+ [in] Pointer to the path record object.\r
+\r
+ RETURN VALUES\r
+ Encoded path MTU selector value (for queries).\r
+ 0: greater than MTU specified\r
+ 1: less than MTU specified\r
+ 2: exactly the MTU specified\r
+ 3: largest MTU available\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"></span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo927">ib_path_rec_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo921">[Functions]<a name="IBA20Base3a20Types2fib5fpath5frec5fpkt5flife">\r
+IBA Base: Types/ib_path_rec_pkt_life</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_path_rec_pkt_life</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Get encoded path pkt_life.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_INLINE uint8_t AL_API\r
+<strong>ib_path_rec_pkt_life</strong>(\r
+ IN const <a href="#robo927">ib_path_rec_t</a>* const p_rec )\r
+{\r
+ return( (uint8_t)(p_rec->pkt_life & <a href="#robo809">IB_PATH_REC_BASE_MASK</a>) );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_rec\r
+ [in] Pointer to the path record object.\r
+\r
+ RETURN VALUES\r
+ Encoded path pkt_life = 4.096 µsec * 2 PacketLifeTime.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"></span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo927">ib_path_rec_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo922">[Functions]<a name="IBA20Base3a20Types2fib5fpath5frec5fpkt5flife5fsel">\r
+IBA Base: Types/ib_path_rec_pkt_life_sel</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_path_rec_pkt_life_sel</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Get encoded path pkt_lifetime selector.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_INLINE uint8_t AL_API\r
+<strong>ib_path_rec_pkt_life_sel</strong>(\r
+ IN const <a href="#robo927">ib_path_rec_t</a>* const p_rec )\r
+{\r
+ return( (uint8_t)((p_rec->pkt_life & <a href="#robo810">IB_PATH_REC_SELECTOR_MASK</a>) >> 6 ));\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_rec\r
+ [in] Pointer to the path record object.\r
+\r
+ RETURN VALUES\r
+ Encoded path pkt_lifetime selector value (for queries).\r
+ 0: greater than rate specified\r
+ 1: less than rate specified\r
+ 2: exactly the rate specified\r
+ 3: smallest packet lifetime available\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"></span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo927">ib_path_rec_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo923">[Functions]<a name="IBA20Base3a20Types2fib5fpath5frec5frate">\r
+IBA Base: Types/ib_path_rec_rate</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_path_rec_rate</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Get encoded path rate.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_INLINE uint8_t AL_API\r
+<strong>ib_path_rec_rate</strong>(\r
+ IN const <a href="#robo927">ib_path_rec_t</a>* const p_rec )\r
+{\r
+ return( (uint8_t)(p_rec->rate & <a href="#robo809">IB_PATH_REC_BASE_MASK</a>) );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_rec\r
+ [in] Pointer to the path record object.\r
+\r
+ RETURN VALUES\r
+ Encoded path rate.\r
+ 2: 2.5 Gb/sec.\r
+ 3: 10 Gb/sec.\r
+ 4: 30 Gb/sec.\r
+ others: reserved\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"></span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo927">ib_path_rec_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo924">[Functions]<a name="IBA20Base3a20Types2fib5fpath5frec5frate5fsel">\r
+IBA Base: Types/ib_path_rec_rate_sel</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_path_rec_rate_sel</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Get encoded path rate selector.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_INLINE uint8_t AL_API\r
+<strong>ib_path_rec_rate_sel</strong>(\r
+ IN const <a href="#robo927">ib_path_rec_t</a>* const p_rec )\r
+{\r
+ return( (uint8_t)((p_rec->rate & <a href="#robo810">IB_PATH_REC_SELECTOR_MASK</a>) >> 6) );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_rec\r
+ [in] Pointer to the path record object.\r
+\r
+ RETURN VALUES\r
+ Encoded path rate selector value (for queries).\r
+ 0: greater than rate specified\r
+ 1: less than rate specified\r
+ 2: exactly the rate specified\r
+ 3: largest rate available\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"></span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo927">ib_path_rec_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo925">[Functions]<a name="IBA20Base3a20Types2fib5fpath5frec5fset5fhop5fflow5fraw">\r
+IBA Base: Types/ib_path_rec_set_hop_flow_raw</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_path_rec_set_hop_flow_raw</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Sets the hop limit, flow label, and raw traffic bits of a path record.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_INLINE void AL_API\r
+<strong>ib_path_rec_set_hop_flow_raw</strong>(\r
+ OUT <a href="#robo927">ib_path_rec_t</a>* const p_rec,\r
+ IN const uint8_t hop_limit,\r
+ IN const net32_t flow_lbl,\r
+ IN const boolean_t raw )\r
+{\r
+ p_rec->hop_flow_raw.val = (<a href="../complib/cl_byteswap_h.html#robo288">cl_ntoh32</a>( flow_lbl ) & 0x000FFFFF) << 8;\r
+ if( raw )\r
+ p_rec->hop_flow_raw.val |= 0x80000000;\r
+ p_rec->hop_flow_raw.val = <a href="../complib/cl_byteswap_h.html#robo281">cl_hton32</a>( p_rec->hop_flow_raw.val );\r
+ p_rec->hop_flow_raw.bytes[3] = hop_limit;\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_rec\r
+ Pointer to the path record whose hop limit, flow label, and rab\r
+ traffic fields to set.\r
+\r
+ hop_limit\r
+ Hop limit to set in the path record.\r
+\r
+ flow_lbl\r
+ Flow label, in network byte order, to set in the path record.\r
+\r
+ raw\r
+ Boolean flag to indicate whether the path record is for raw traffic.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo927">ib_path_rec_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo926">[Functions]<a name="IBA20Base3a20Types2fib5fpath5frec5fsl">\r
+IBA Base: Types/ib_path_rec_sl</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_path_rec_sl</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Get path service level.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_INLINE uint8_t AL_API\r
+<strong>ib_path_rec_sl</strong>(\r
+ IN const <a href="#robo927">ib_path_rec_t</a>* const p_rec )\r
+{\r
+ return( (uint8_t)((<a href="../complib/cl_byteswap_h.html#robo287">cl_ntoh16</a>( p_rec->sl )) & 0xF) );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_rec\r
+ [in] Pointer to the path record object.\r
+\r
+ RETURN VALUES\r
+ Encoded path MTU.\r
+ 1: 256\r
+ 2: 512\r
+ 3: 1024\r
+ 4: 2048\r
+ 5: 4096\r
+ others: reserved\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"></span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo927">ib_path_rec_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo927">[Structures]<a name="IBA20Base3a20Types2fib5fpath5frec5ft">\r
+IBA Base: Types/ib_path_rec_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_path_rec_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Path records encapsulate the properties of a given\r
+ route between two end-points on a subnet.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>#include <complib/cl_packon.h>\r
+typedef __declspec(align(8)) struct _ib_path_rec\r
+{\r
+ uint64_t resv0;\r
+ <a href="#robo856">ib_gid_t</a> dgid;\r
+ <a href="#robo856">ib_gid_t</a> sgid;\r
+ <a href="#robo893">ib_net16_t</a> dlid;\r
+ <a href="#robo893">ib_net16_t</a> slid;\r
+ <a href="#robo841">ib_field32_t</a> hop_flow_raw;\r
+ uint8_t tclass;\r
+ uint8_t num_path;\r
+ <a href="#robo893">ib_net16_t</a> pkey;\r
+ <a href="#robo893">ib_net16_t</a> sl;\r
+ uint8_t mtu;\r
+ uint8_t rate;\r
+ uint8_t pkt_life;\r
+ uint8_t preference;\r
+ uint16_t resv1;\r
+ uint32_t resv2;\r
+\r
+} PACK_SUFFIX <strong>ib_path_rec_t</strong>;\r
+#include <complib/cl_packoff.h>\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> resv0\r
+ Reserved bytes.\r
+\r
+ dgid\r
+ GID of destination port.\r
+\r
+ sgid\r
+ GID of source port.\r
+\r
+ dlid\r
+ LID of destination port.\r
+\r
+ slid\r
+ LID of source port.\r
+\r
+ hop_flow_raw\r
+ Global routing parameters: hop count, flow label and raw bit.\r
+\r
+ tclass\r
+ Another global routing parameter.\r
+\r
+ num_path\r
+ In queries, maximum number of paths to return.\r
+ In responses, undefined.\r
+\r
+ pkey\r
+ Partition key (P_Key) to use on this path.\r
+\r
+ resv1\r
+ Reserved byte.\r
+\r
+ sl\r
+ Service level to use on this path.\r
+\r
+ mtu\r
+ MTU and MTU selector fields to use on this path\r
+\r
+ rate\r
+ Rate and rate selector fields to use on this path.\r
+\r
+ pkt_life\r
+ Packet lifetime\r
+\r
+ preference\r
+ Indicates the relative merit of this path versus other path\r
+ records returned from the SA. Lower numbers are better.\r
+\r
+ resv1\r
+ Reserved bytes.\r
+\r
+ resv2\r
+ Reserved bytes.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"></span>\r
+<hr />\r
+\r
+<h2><a name="robo928">[Functions]<a name="IBA20Base3a20Types2fib5fpkey5fget5fbase">\r
+IBA Base: Types/ib_pkey_get_base</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_pkey_get_base</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Returns the base P_Key value with the membership bit stripped.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_INLINE <a href="#robo893">ib_net16_t</a> AL_API\r
+<strong>ib_pkey_get_base</strong>(\r
+ IN const <a href="#robo893">ib_net16_t</a> pkey )\r
+{\r
+ return( (<a href="#robo893">ib_net16_t</a>)(pkey & <a href="#robo812">IB_PKEY_BASE_MASK</a>) );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> pkey\r
+ [in] P_Key value\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> Returns the base P_Key value with the membership bit stripped.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"></span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"></span>\r
+<hr />\r
+\r
+<h2><a name="robo929">[Functions]<a name="IBA20Base3a20Types2fib5fpkey5fis5ffull5fmember">\r
+IBA Base: Types/ib_pkey_is_full_member</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_pkey_is_full_member</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Indicitates if the port is a full member of the parition.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_INLINE boolean_t AL_API\r
+<strong>ib_pkey_is_full_member</strong>(\r
+ IN const <a href="#robo893">ib_net16_t</a> pkey )\r
+{\r
+ return( (pkey & <a href="#robo815">IB_PKEY_TYPE_MASK</a>) == <a href="#robo815">IB_PKEY_TYPE_MASK</a> );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> pkey\r
+ [in] P_Key value\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> TRUE if the port is a full member of the partition.\r
+ FALSE otherwise.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"></span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo928">ib_pkey_get_base</a>, <a href="#robo893">ib_net16_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo930">[Structures]<a name="IBA20Base3a20Types2fib5fpkey5ftable5finfo5ft">\r
+IBA Base: Types/ib_pkey_table_info_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_pkey_table_info_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> IBA defined PKey table. (14.2.5.7)\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>#define PKEY_TABLE_MAX_ENTRIES 32\r
+\r
+#include <complib/cl_packon.h>\r
+typedef struct _ib_pkey_table_info\r
+{\r
+ <a href="#robo893">ib_net16_t</a> pkey[PKEY_TABLE_MAX_ENTRIES];\r
+\r
+} PACK_SUFFIX <strong>ib_pkey_table_info_t</strong>;\r
+#include <complib/cl_packoff.h>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo931">[Functions]<a name="IBA20Base3a20Types2fib5fport5finfo5fcompute5frate">\r
+IBA Base: Types/ib_port_info_compute_rate</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_port_info_compute_rate</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Returns the encoded value for the path rate.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_INLINE uint8_t AL_API\r
+<strong>ib_port_info_compute_rate</strong>(\r
+ IN const <a href="#robo949">ib_port_info_t</a>* const p_pi )\r
+{\r
+ switch( p_pi->link_width_active * p_pi->link_width_active *\r
+ <a href="#robo932">ib_port_info_get_link_speed_active</a>( p_pi ) )\r
+ {\r
+ case 1:\r
+ return IB_PATH_RECORD_RATE_2_5_GBS;\r
+\r
+ case 2:\r
+ return IB_PATH_RECORD_RATE_5_GBS;\r
+\r
+ case 4:\r
+ return IB_PATH_RECORD_RATE_10_GBS;\r
+\r
+ case 8:\r
+ return IB_PATH_RECORD_RATE_20_GBS;\r
+\r
+ case 16:\r
+ return IB_PATH_RECORD_RATE_40_GBS;\r
+\r
+ case 64:\r
+ return IB_PATH_RECORD_RATE_30_GBS;\r
+\r
+ case 128:\r
+ return IB_PATH_RECORD_RATE_60_GBS;\r
+\r
+ case 256:\r
+ return IB_PATH_RECORD_RATE_120_GBS;\r
+\r
+ default:\r
+ return IB_PATH_RECORD_RATE_2_5_GBS;\r
+ }\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_pi\r
+ [in] Pointer to a PortInfo attribute.\r
+\r
+ RETURN VALUES\r
+ Returns the encoded value for the link speed supported.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"></span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"></span>\r
+<hr />\r
+\r
+<h2><a name="robo932">[Functions]<a name="IBA20Base3a20Types2fib5fport5finfo5fget5flink5fspeed5factive">\r
+IBA Base: Types/ib_port_info_get_link_speed_active</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_port_info_get_link_speed_active</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Returns the Link Speed Active value assigned to this port.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_INLINE uint8_t AL_API\r
+<strong>ib_port_info_get_link_speed_active</strong>(\r
+ IN const <a href="#robo949">ib_port_info_t</a>* const p_pi )\r
+{\r
+ return( (uint8_t)((p_pi->link_speed & IB_PORT_LINK_SPEED_ACTIVE_MASK) >>\r
+ IB_PORT_LINK_SPEED_SHIFT) );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_pi\r
+ [in] Pointer to a PortInfo attribute.\r
+\r
+ RETURN VALUES\r
+ Returns the link speed active value assigned to this port.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"></span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"></span>\r
+<hr />\r
+\r
+<h2><a name="robo933">[Functions]<a name="IBA20Base3a20Types2fib5fport5finfo5fget5flink5fspeed5fsup">\r
+IBA Base: Types/ib_port_info_get_link_speed_sup</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_port_info_get_link_speed_sup</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Returns the encoded value for the link speed supported.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_INLINE uint8_t AL_API\r
+<strong>ib_port_info_get_link_speed_sup</strong>(\r
+ IN const <a href="#robo949">ib_port_info_t</a>* const p_pi )\r
+{\r
+ return( (uint8_t)((p_pi->state_info1 &\r
+ IB_PORT_LINK_SPEED_SUPPORTED_MASK) >>\r
+ IB_PORT_LINK_SPEED_SHIFT) );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_pi\r
+ [in] Pointer to a PortInfo attribute.\r
+\r
+ RETURN VALUES\r
+ Returns the encoded value for the link speed supported.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"></span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"></span>\r
+<hr />\r
+\r
+<h2><a name="robo934">[Functions]<a name="IBA20Base3a20Types2fib5fport5finfo5fget5flmc">\r
+IBA Base: Types/ib_port_info_get_lmc</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_port_info_get_lmc</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Returns the LMC value assigned to this port.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_INLINE uint8_t AL_API\r
+<strong>ib_port_info_get_lmc</strong>(\r
+ IN const <a href="#robo949">ib_port_info_t</a>* const p_pi )\r
+{\r
+ return( (uint8_t)(p_pi->mkey_lmc & IB_PORT_LMC_MASK) );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_pi\r
+ [in] Pointer to a PortInfo attribute.\r
+\r
+ RETURN VALUES\r
+ Returns the LMC value assigned to this port.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"></span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"></span>\r
+<hr />\r
+\r
+<h2><a name="robo935">[Functions]<a name="IBA20Base3a20Types2fib5fport5finfo5fget5fmpb">\r
+IBA Base: Types/ib_port_info_get_mpb</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_port_info_get_mpb</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Returns the M_Key protect bits assigned to this port.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_INLINE uint8_t AL_API\r
+<strong>ib_port_info_get_mpb</strong>(\r
+ IN const <a href="#robo949">ib_port_info_t</a>* const p_pi )\r
+{\r
+ return( (uint8_t)((p_pi->mkey_lmc & IB_PORT_MPB_MASK) >>\r
+ IB_PORT_MPB_SHIFT) );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_ni\r
+ [in] Pointer to a PortInfo attribute.\r
+\r
+ RETURN VALUES\r
+ Returns the M_Key protect bits assigned to this port.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"></span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"></span>\r
+<hr />\r
+\r
+<h2><a name="robo936">[Functions]<a name="IBA20Base3a20Types2fib5fport5finfo5fget5fmtu5fcap">\r
+IBA Base: Types/ib_port_info_get_mtu_cap</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_port_info_get_mtu_cap</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Returns the encoded value for the maximum MTU supported by this port.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_INLINE uint8_t AL_API\r
+<strong>ib_port_info_get_mtu_cap</strong>(\r
+ IN const <a href="#robo949">ib_port_info_t</a>* const p_pi )\r
+{\r
+ return( (uint8_t)(p_pi->mtu_cap & 0x0F) );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_pi\r
+ [in] Pointer to a PortInfo attribute.\r
+\r
+ RETURN VALUES\r
+ Returns the LMC value assigned to this port.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"></span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"></span>\r
+<hr />\r
+\r
+<h2><a name="robo937">[Functions]<a name="IBA20Base3a20Types2fib5fport5finfo5fget5fneighbor5fmtu">\r
+IBA Base: Types/ib_port_info_get_neighbor_mtu</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_port_info_get_neighbor_mtu</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Returns the encoded value for the neighbor MTU at this port.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_INLINE uint8_t AL_API\r
+<strong>ib_port_info_get_neighbor_mtu</strong>(\r
+ IN const <a href="#robo949">ib_port_info_t</a>* const p_pi )\r
+{\r
+ return( (uint8_t)((p_pi->mtu_smsl & 0xF0) >> 4) );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_pi\r
+ [in] Pointer to a PortInfo attribute.\r
+\r
+ RETURN VALUES\r
+ Returns the encoded value for the neighbor MTU at this port.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"></span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"></span>\r
+<hr />\r
+\r
+<h2><a name="robo938">[Functions]<a name="IBA20Base3a20Types2fib5fport5finfo5fget5fop5fvls">\r
+IBA Base: Types/ib_port_info_get_op_vls</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_port_info_get_op_vls</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Gets the operational VLs on a port.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_INLINE uint8_t AL_API\r
+<strong>ib_port_info_get_op_vls</strong>(\r
+ IN const <a href="#robo949">ib_port_info_t</a>* const p_pi)\r
+{\r
+ return((p_pi->vl_enforce >> 4) & 0x0F);\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_pi\r
+ [in] Pointer to a PortInfo attribute.\r
+\r
+ RETURN VALUES\r
+ OP_VLS field\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"></span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"></span>\r
+<hr />\r
+\r
+<h2><a name="robo939">[Functions]<a name="IBA20Base3a20Types2fib5fport5finfo5fget5fport5fstate">\r
+IBA Base: Types/ib_port_info_get_port_state</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_port_info_get_port_state</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Returns the port state.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_INLINE uint8_t AL_API\r
+<strong>ib_port_info_get_port_state</strong>(\r
+ IN const <a href="#robo949">ib_port_info_t</a>* const p_pi )\r
+{\r
+ return( (uint8_t)(p_pi->state_info1 & IB_PORT_STATE_MASK) );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_pi\r
+ [in] Pointer to a PortInfo attribute.\r
+\r
+ RETURN VALUES\r
+ Port state.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"></span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"></span>\r
+<hr />\r
+\r
+<h2><a name="robo940">[Functions]<a name="IBA20Base3a20Types2fib5fport5finfo5fget5fvl5fcap">\r
+IBA Base: Types/ib_port_info_get_vl_cap</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_port_info_get_vl_cap</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Gets the VL Capability of a port.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_INLINE uint8_t AL_API\r
+<strong>ib_port_info_get_vl_cap</strong>(\r
+ IN const <a href="#robo949">ib_port_info_t</a>* const p_pi)\r
+{\r
+ return((p_pi->vl_cap >> 4) & 0x0F);\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_pi\r
+ [in] Pointer to a PortInfo attribute.\r
+\r
+ RETURN VALUES\r
+ VL_CAP field\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"></span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"></span>\r
+<hr />\r
+\r
+<h2><a name="robo941">[Functions]<a name="IBA20Base3a20Types2fib5fport5finfo5fset5flink5fspeed5fsup">\r
+IBA Base: Types/ib_port_info_set_link_speed_sup</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_port_info_set_link_speed_sup</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Given an integer of the supported link speed supported.\r
+ Set the appropriate bits in state_info1\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_INLINE void AL_API\r
+<strong>ib_port_info_set_link_speed_sup</strong>(\r
+ IN uint8_t const speed,\r
+ IN <a href="#robo949">ib_port_info_t</a>* p_pi )\r
+{\r
+ p_pi->state_info1 =\r
+ ( ~IB_PORT_LINK_SPEED_SUPPORTED_MASK & p_pi->state_info1 ) |\r
+ ( IB_PORT_LINK_SPEED_SUPPORTED_MASK &\r
+ (speed << IB_PORT_LINK_SPEED_SHIFT) );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> speed\r
+ [in] Supported Speeds Code.\r
+\r
+ p_pi\r
+ [in] Pointer to a PortInfo attribute.\r
+\r
+ RETURN VALUES\r
+ This function does not return a value.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"></span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"></span>\r
+<hr />\r
+\r
+<h2><a name="robo942">[Functions]<a name="IBA20Base3a20Types2fib5fport5finfo5fset5flmc">\r
+IBA Base: Types/ib_port_info_set_lmc</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_port_info_set_lmc</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Sets the LMC value in the PortInfo attribute.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_INLINE void AL_API\r
+<strong>ib_port_info_set_lmc</strong>(\r
+ IN <a href="#robo949">ib_port_info_t</a>* const p_pi,\r
+ IN const uint8_t lmc )\r
+{\r
+ CL_ASSERT( lmc <= 0x7 );\r
+ p_pi->mkey_lmc = (uint8_t)((p_pi->mkey_lmc & 0xF8) | lmc);\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_pi\r
+ [in] Pointer to a PortInfo attribute.\r
+\r
+ lmc\r
+ [in] LMC value to set, must be less than 7.\r
+\r
+ RETURN VALUES\r
+ None.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"></span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"></span>\r
+<hr />\r
+\r
+<h2><a name="robo943">[Functions]<a name="IBA20Base3a20Types2fib5fport5finfo5fset5fmpb">\r
+IBA Base: Types/ib_port_info_set_mpb</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_port_info_set_mpb</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Set the M_Key protect bits of this port.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_INLINE void AL_API\r
+<strong>ib_port_info_set_mpb</strong>(\r
+ IN <a href="#robo949">ib_port_info_t</a>* p_pi,\r
+ IN uint8_t mpb )\r
+{\r
+ p_pi->mkey_lmc =\r
+ ((p_pi->mkey_lmc & ~IB_PORT_MPB_MASK) |\r
+ (mpb << IB_PORT_MPB_SHIFT));\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> mpb\r
+ [in] M_Key protect bits\r
+ p_ni\r
+ [in] Pointer to a PortInfo attribute.\r
+\r
+ RETURN VALUES\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"></span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"></span>\r
+<hr />\r
+\r
+<h2><a name="robo944">[Functions]<a name="IBA20Base3a20Types2fib5fport5finfo5fset5fneighbor5fmtu">\r
+IBA Base: Types/ib_port_info_set_neighbor_mtu</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_port_info_set_neighbor_mtu</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Sets the Neighbor MTU value in the PortInfo attribute.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_INLINE void AL_API\r
+<strong>ib_port_info_set_neighbor_mtu</strong>(\r
+ IN <a href="#robo949">ib_port_info_t</a>* const p_pi,\r
+ IN const uint8_t mtu )\r
+{\r
+ CL_ASSERT( mtu <= 5 );\r
+ CL_ASSERT( mtu != 0 );\r
+ p_pi->mtu_smsl = (uint8_t)((p_pi->mtu_smsl & 0x0F) | (mtu << 4));\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_pi\r
+ [in] Pointer to a PortInfo attribute.\r
+\r
+ mtu\r
+ [in] Encoded MTU value to set\r
+\r
+ RETURN VALUES\r
+ None.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"></span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"></span>\r
+<hr />\r
+\r
+<h2><a name="robo945">[Functions]<a name="IBA20Base3a20Types2fib5fport5finfo5fset5fop5fvls">\r
+IBA Base: Types/ib_port_info_set_op_vls</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_port_info_set_op_vls</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Sets the operational VLs on a port.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_INLINE void AL_API\r
+<strong>ib_port_info_set_op_vls</strong>(\r
+ IN <a href="#robo949">ib_port_info_t</a>* const p_pi,\r
+ IN const uint8_t op_vls )\r
+{\r
+ p_pi->vl_enforce = (uint8_t)((p_pi->vl_enforce & 0x0F) | (op_vls << 4) );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_pi\r
+ [in] Pointer to a PortInfo attribute.\r
+\r
+ op_vls\r
+ [in] Encoded operation VLs value.\r
+\r
+ RETURN VALUES\r
+ None.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"></span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"></span>\r
+<hr />\r
+\r
+<h2><a name="robo946">[Functions]<a name="IBA20Base3a20Types2fib5fport5finfo5fset5fport5fstate">\r
+IBA Base: Types/ib_port_info_set_port_state</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_port_info_set_port_state</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Sets the port state.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_INLINE void AL_API\r
+<strong>ib_port_info_set_port_state</strong>(\r
+ IN <a href="#robo949">ib_port_info_t</a>* const p_pi,\r
+ IN const uint8_t port_state )\r
+{\r
+ p_pi->state_info1 = (uint8_t)((p_pi->state_info1 & 0xF0) | port_state );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_pi\r
+ [in] Pointer to a PortInfo attribute.\r
+\r
+ port_state\r
+ [in] Port state value to set.\r
+\r
+ RETURN VALUES\r
+ None.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"></span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"></span>\r
+<hr />\r
+\r
+<h2><a name="robo947">[Functions]<a name="IBA20Base3a20Types2fib5fport5finfo5fset5fstate5fno5fchange">\r
+IBA Base: Types/ib_port_info_set_state_no_change</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_port_info_set_state_no_change</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Sets the port state fields to the value for "no change".\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_INLINE void AL_API\r
+<strong>ib_port_info_set_state_no_change</strong>(\r
+ IN <a href="#robo949">ib_port_info_t</a>* const p_pi )\r
+{\r
+ <a href="#robo946">ib_port_info_set_port_state</a>( p_pi, 0 );\r
+ p_pi->state_info2 = 0;\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_pi\r
+ [in] Pointer to a PortInfo attribute.\r
+\r
+ RETURN VALUES\r
+ None.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"></span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"></span>\r
+<hr />\r
+\r
+<h2><a name="robo948">[Functions]<a name="IBA20Base3a20Types2fib5fport5finfo5fset5ftimeout">\r
+IBA Base: Types/ib_port_info_set_timeout</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_port_info_set_timeout</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Sets the encoded subnet timeout value in the PortInfo attribute.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_INLINE void AL_API\r
+<strong>ib_port_info_set_timeout</strong>(\r
+ IN <a href="#robo949">ib_port_info_t</a>* const p_pi,\r
+ IN const uint8_t timeout )\r
+{\r
+ CL_ASSERT( timeout <= 0x1F );\r
+ p_pi->subnet_timeout = (uint8_t)(timeout & 0x1F);\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_pi\r
+ [in] Pointer to a PortInfo attribute.\r
+\r
+ timeout\r
+ [in] Encoded timeout value to set\r
+\r
+ RETURN VALUES\r
+ None.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"></span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"></span>\r
+<hr />\r
+\r
+<h2><a name="robo949">[Structures]<a name="IBA20Base3a20Types2fib5fport5finfo5ft">\r
+IBA Base: Types/ib_port_info_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_port_info_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> IBA defined PortInfo. (14.2.5.6)\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>#include <complib/cl_packon.h>\r
+typedef struct _ib_port_info\r
+{\r
+ <a href="#robo895">ib_net64_t</a> m_key;\r
+ <a href="#robo895">ib_net64_t</a> subnet_prefix;\r
+ <a href="#robo893">ib_net16_t</a> base_lid;\r
+ <a href="#robo893">ib_net16_t</a> master_sm_base_lid;\r
+ <a href="#robo894">ib_net32_t</a> capability_mask;\r
+ <a href="#robo893">ib_net16_t</a> diag_code;\r
+ <a href="#robo893">ib_net16_t</a> m_key_lease_period;\r
+ uint8_t local_port_num;\r
+ uint8_t link_width_enabled;\r
+ uint8_t link_width_supported;\r
+ uint8_t link_width_active;\r
+ uint8_t state_info1; // LinkSpeedSupported and PortState\r
+ uint8_t state_info2; // PortPhysState and LinkDownDefaultState\r
+ uint8_t mkey_lmc;\r
+ uint8_t link_speed; // LinkSpeedEnabled and LinkSpeedActive\r
+ uint8_t mtu_smsl;\r
+ uint8_t vl_cap; // VlCap and InitType\r
+ uint8_t vl_high_limit;\r
+ uint8_t vl_arb_high_cap;\r
+ uint8_t vl_arb_low_cap;\r
+ uint8_t mtu_cap;\r
+ uint8_t vl_stall_life;\r
+ uint8_t vl_enforce;\r
+ <a href="#robo893">ib_net16_t</a> m_key_violations;\r
+ <a href="#robo893">ib_net16_t</a> p_key_violations;\r
+ <a href="#robo893">ib_net16_t</a> q_key_violations;\r
+ uint8_t guid_cap;\r
+ uint8_t subnet_timeout;\r
+ uint8_t resp_time_value;\r
+ uint8_t error_threshold;\r
+\r
+} PACK_SUFFIX <strong>ib_port_info_t</strong>;\r
+#include <complib/cl_packoff.h>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo950">[Functions]<a name="IBA20Base3a20Types2fib5frmpp5fis5fflag5fset">\r
+IBA Base: Types/ib_rmpp_is_flag_set</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_rmpp_is_flag_set</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Returns TRUE if the MAD has the given RMPP flag set.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_INLINE boolean_t AL_API\r
+<strong>ib_rmpp_is_flag_set</strong>(\r
+ IN const <a href="#robo951">ib_rmpp_mad_t</a>* const p_rmpp_mad,\r
+ IN const uint8_t flag )\r
+{\r
+ CL_ASSERT( p_rmpp_mad );\r
+ return( (p_rmpp_mad->rmpp_flags & flag) == flag );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> <a href="#robo951">ib_rmpp_mad_t</a>\r
+ [in] Pointer to a MAD with an RMPP header.\r
+\r
+ flag\r
+ [in] The RMPP flag being examined.\r
+\r
+ RETURN VALUES\r
+ Returns TRUE if the MAD has the given RMPP flag set.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"></span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo882">ib_mad_t</a>, <a href="#robo951">ib_rmpp_mad_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo951">[Structures]<a name="IBA20Base3a20Types2fib5frmpp5fmad5ft">\r
+IBA Base: Types/ib_rmpp_mad_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_rmpp_mad_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> IBA defined MAD RMPP header (13.6.2.1)\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>#include <complib/cl_packon.h>\r
+typedef struct _ib_rmpp_mad\r
+{\r
+ <a href="#robo882">ib_mad_t</a> common_hdr;\r
+\r
+ uint8_t rmpp_version;\r
+ uint8_t rmpp_type;\r
+ uint8_t rmpp_flags;\r
+ uint8_t rmpp_status;\r
+\r
+ <a href="#robo894">ib_net32_t</a> seg_num;\r
+ <a href="#robo894">ib_net32_t</a> paylen_newwin;\r
+\r
+} PACK_SUFFIX <strong>ib_rmpp_mad_t</strong>;\r
+#include <complib/cl_packoff.h>\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo882">ib_mad_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo952">[Functions]<a name="IBA20Base3a20Types2fib5fsa5fmad5fget5fpayload5fptr">\r
+IBA Base: Types/ib_sa_mad_get_payload_ptr</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_sa_mad_get_payload_ptr</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Gets a pointer to the SA MAD's payload area.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_INLINE void* AL_API\r
+<strong>ib_sa_mad_get_payload_ptr</strong>(\r
+ IN const <a href="#robo953">ib_sa_mad_t</a>* const p_sa_mad )\r
+{\r
+ return( (void*)p_sa_mad->data );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_smp\r
+ [in] Pointer to the SA MAD packet.\r
+\r
+ RETURN VALUES\r
+ Pointer to SA MAD payload area.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"></span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo882">ib_mad_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo953">[Structures]<a name="IBA20Base3a20Types2fib5fsa5fmad5ft">\r
+IBA Base: Types/ib_sa_mad_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_sa_mad_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> IBA defined SA MAD format. (15.2.1)\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>#define IB_SA_DATA_SIZE 200\r
+\r
+#include <complib/cl_packon.h>\r
+typedef struct _ib_sa_mad\r
+{\r
+ uint8_t base_ver;\r
+ uint8_t mgmt_class;\r
+ uint8_t class_ver;\r
+ uint8_t method;\r
+ <a href="#robo893">ib_net16_t</a> status;\r
+ <a href="#robo893">ib_net16_t</a> resv;\r
+ <a href="#robo895">ib_net64_t</a> trans_id;\r
+ <a href="#robo893">ib_net16_t</a> attr_id;\r
+ <a href="#robo893">ib_net16_t</a> resv1;\r
+ <a href="#robo894">ib_net32_t</a> attr_mod;\r
+\r
+ uint8_t rmpp_version;\r
+ uint8_t rmpp_type;\r
+ uint8_t rmpp_flags;\r
+ uint8_t rmpp_status;\r
+\r
+ <a href="#robo894">ib_net32_t</a> seg_num;\r
+ <a href="#robo894">ib_net32_t</a> paylen_newwin;\r
+\r
+ <a href="#robo895">ib_net64_t</a> sm_key;\r
+\r
+ <a href="#robo893">ib_net16_t</a> attr_offset;\r
+ <a href="#robo893">ib_net16_t</a> resv3;\r
+\r
+ <a href="#robo895">ib_net64_t</a> comp_mask;\r
+\r
+ uint8_t data[IB_SA_DATA_SIZE];\r
+} PACK_SUFFIX <strong>ib_sa_mad_t</strong>;\r
+#include <complib/cl_packoff.h>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo954">[Functions]<a name="IBA20Base3a20Types2fib5fslvl5ftable5fget5fvl">\r
+IBA Base: Types/ib_slvl_table_get_vl</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_slvl_table_get_vl</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Retrieves the VL for a given SL from an SL to VL mapping table.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_INLINE uint8_t AL_API\r
+<strong>ib_slvl_table_get_vl</strong>(\r
+ IN const <a href="#robo957">ib_slvl_table_t</a>* const p_slvl_tbl,\r
+ IN const uint8_t sl )\r
+{\r
+ uint8_t vl;\r
+\r
+ /* There are two VL's per byte. */\r
+ vl = p_slvl_tbl->vl_table[sl/2];\r
+ /* If odd, shift down 4 bits. */\r
+ if( sl % 2 )\r
+ vl >>= 4;\r
+\r
+ /* Mask off upper bits and return. */\r
+ return vl & 0x0F;\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_slvl_tbl\r
+ [in] Pointer to the SL to VL mapping table from which to return the VL.\r
+\r
+ sl\r
+ [in] SL in the table for which to return the VL.\r
+\r
+ RETURN VALUES\r
+ Returns the VL value for the specified SL in the provided table.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo957">ib_slvl_table_t</a>, <a href="#robo956">ib_slvl_table_set_vl</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo955">[Structures]<a name="IBA20Base3a20Types2fib5fslvl5ftable5frecord5ft">\r
+IBA Base: Types/ib_slvl_table_record_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_slvl_table_record_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> IBA defined Sl to VL Mapping Table Record for SA Query. (15.2.5.4)\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>#include <complib/cl_packon.h>\r
+typedef struct _ib_slvl_table_record\r
+{\r
+ <a href="#robo893">ib_net16_t</a> lid; // for CA: lid of port, for switch lid of port 0\r
+ uint8_t in_port_num; // reserved for CA's\r
+ uint8_t out_port_num; // reserved for CA's\r
+ uint32_t resv;\r
+ <a href="#robo957">ib_slvl_table_t</a> slvl_tbl;\r
+\r
+} PACK_SUFFIX <strong>ib_slvl_table_record_t</strong>;\r
+#include <complib/cl_packoff.h>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo956">[Functions]<a name="IBA20Base3a20Types2fib5fslvl5ftable5fset5fvl">\r
+IBA Base: Types/ib_slvl_table_set_vl</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_slvl_table_set_vl</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Sets the VL for a given SL in an SL to VL mapping table.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_INLINE void AL_API\r
+<strong>ib_slvl_table_set_vl</strong>(\r
+ IN OUT <a href="#robo957">ib_slvl_table_t</a>* const p_slvl_tbl,\r
+ IN const uint8_t sl,\r
+ IN const uint8_t vl )\r
+{\r
+ uint8_t entry;\r
+\r
+ /* Get the current value for the byte in which the VL is stored. */\r
+ entry = p_slvl_tbl->vl_table[sl/2];\r
+\r
+ /* Clear the appropriate bits and set the new VL value. */\r
+ if( sl % 2 )\r
+ {\r
+ entry &= 0x0F;\r
+ entry |= ((vl & 0x0F) << 4);\r
+ }\r
+ else\r
+ {\r
+ entry &= 0xF0;\r
+ entry |= (vl & 0x0F);\r
+ }\r
+ /* Store the updated entry back into the table. */\r
+ p_slvl_tbl->vl_table[sl/2] = entry;\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> slvl_tbl\r
+ [in/out] Pointer to the SL to VL mapping table in which to store the VL.\r
+\r
+ sl\r
+ [in] SL in the table for which to store the VL.\r
+\r
+ vl\r
+ [in] VL to store at the specifed SL.\r
+\r
+ RETURN VALUES\r
+ This function does not return a value.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo957">ib_slvl_table_t</a>, <a href="#robo954">ib_slvl_table_get_vl</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo957">[Structures]<a name="IBA20Base3a20Types2fib5fslvl5ftable5ft">\r
+IBA Base: Types/ib_slvl_table_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_slvl_table_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> IBA defined SL2VL Mapping Table Attribute. (14.2.5.8)\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>#include <complib/cl_packon.h>\r
+typedef struct _ib_slvl_table\r
+{\r
+ uint8_t vl_table[IB_MAX_NUM_VLS/2];\r
+\r
+} PACK_SUFFIX <strong>ib_slvl_table_t</strong>;\r
+#include <complib/cl_packoff.h>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo958">[Structures]<a name="IBA20Base3a20Types2fib5fsm5finfo5ft">\r
+IBA Base: Types/ib_sm_info_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_sm_info_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> SMInfo structure (14.2.5.13).\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>#include <complib/cl_packon.h>\r
+typedef struct _ib_sm_info\r
+{\r
+ <a href="#robo895">ib_net64_t</a> guid;\r
+ <a href="#robo895">ib_net64_t</a> sm_key;\r
+ <a href="#robo894">ib_net32_t</a> act_count;\r
+ uint8_t pri_state;\r
+\r
+} PACK_SUFFIX <strong>ib_sm_info_t</strong>;\r
+#include <complib/cl_packoff.h>\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> guid\r
+ Port GUID for this SM.\r
+\r
+ sm_key\r
+ SM_Key of this SM.\r
+\r
+ act_count\r
+ Activity counter used as a heartbeat.\r
+\r
+ pri_state\r
+ Priority and State information\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"></span>\r
+<hr />\r
+\r
+<h2><a name="robo959">[Functions]<a name="IBA20Base3a20Types2fib5fsminfo5fget5fpriority">\r
+IBA Base: Types/ib_sminfo_get_priority</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_sminfo_get_priority</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Returns the priority value.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_INLINE uint8_t AL_API\r
+<strong>ib_sminfo_get_priority</strong>(\r
+ IN const <a href="#robo958">ib_sm_info_t</a>* const p_smi )\r
+{\r
+ return( (uint8_t)((p_smi->pri_state & 0xF0)>>4) );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_smi\r
+ [in] Pointer to the SMInfo Attribute.\r
+\r
+ RETURN VALUES\r
+ Returns the priority value.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"></span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"></span>\r
+<hr />\r
+\r
+<h2><a name="robo960">[Functions]<a name="IBA20Base3a20Types2fib5fsminfo5fget5fstate">\r
+IBA Base: Types/ib_sminfo_get_state</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_sminfo_get_state</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Returns the state value.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_INLINE uint8_t AL_API\r
+<strong>ib_sminfo_get_state</strong>(\r
+ IN const <a href="#robo958">ib_sm_info_t</a>* const p_smi )\r
+{\r
+ return( (uint8_t)(p_smi->pri_state & 0x0F) );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_smi\r
+ [in] Pointer to the SMInfo Attribute.\r
+\r
+ RETURN VALUES\r
+ Returns the state value.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"></span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"></span>\r
+<hr />\r
+\r
+<h2><a name="robo961">[Functions]<a name="IBA20Base3a20Types2fib5fsmp5fget5fpayload5fptr">\r
+IBA Base: Types/ib_smp_get_payload_ptr</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_smp_get_payload_ptr</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Gets a pointer to the SMP payload area.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_INLINE void* AL_API\r
+<strong>ib_smp_get_payload_ptr</strong>(\r
+ IN const <a href="#robo966">ib_smp_t</a>* const p_smp )\r
+{\r
+ return( (void*)p_smp->data );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_smp\r
+ [in] Pointer to the SMP packet.\r
+\r
+ RETURN VALUES\r
+ Pointer to SMP payload area.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"></span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo882">ib_mad_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo962">[Functions]<a name="IBA20Base3a20Types2fib5fsmp5fget5fstatus">\r
+IBA Base: Types/ib_smp_get_status</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_smp_get_status</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Returns the SMP status value in network order.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_INLINE <a href="#robo893">ib_net16_t</a> AL_API\r
+<strong>ib_smp_get_status</strong>(\r
+ IN const <a href="#robo966">ib_smp_t</a>* const p_smp )\r
+{\r
+ return( (<a href="#robo893">ib_net16_t</a>)(p_smp->status & <a href="#robo828">IB_SMP_STATUS_MASK</a>) );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_smp\r
+ [in] Pointer to the SMP packet.\r
+\r
+ RETURN VALUES\r
+ Returns the SMP status value in network order.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"></span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo966">ib_smp_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo963">[Functions]<a name="IBA20Base3a20Types2fib5fsmp5finit5fnew">\r
+IBA Base: Types/ib_smp_init_new</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_smp_init_new</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Initializes a MAD common header.\r
+</pre>\r
+</span><p><strong>TODO</strong></p>\r
+<span class="TODO"><pre> This is too big for inlining, but leave it here for now\r
+ since there is not yet another convient spot.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_INLINE void AL_API\r
+<strong>ib_smp_init_new</strong>(\r
+ IN <a href="#robo966">ib_smp_t</a>* const p_smp,\r
+ IN const uint8_t method,\r
+ IN const <a href="#robo895">ib_net64_t</a> trans_id,\r
+ IN const <a href="#robo893">ib_net16_t</a> attr_id,\r
+ IN const <a href="#robo894">ib_net32_t</a> attr_mod,\r
+ IN const uint8_t hop_count,\r
+ IN const <a href="#robo895">ib_net64_t</a> m_key,\r
+ IN const uint8_t* path_out,\r
+ IN const <a href="#robo893">ib_net16_t</a> dr_slid,\r
+ IN const <a href="#robo893">ib_net16_t</a> dr_dlid )\r
+{\r
+ CL_ASSERT( p_smp );\r
+ CL_ASSERT( hop_count < <a href="#robo829">IB_SUBNET_PATH_HOPS_MAX</a> );\r
+ p_smp->base_ver = 1;\r
+ p_smp->mgmt_class = <a href="#robo794">IB_MCLASS_SUBN_DIR</a>;\r
+ p_smp->class_ver = 1;\r
+ p_smp->method = method;\r
+ p_smp->status = 0;\r
+ p_smp->hop_ptr = 0;\r
+ p_smp->hop_count = hop_count;\r
+ p_smp->trans_id = trans_id;\r
+ p_smp->attr_id = attr_id;\r
+ p_smp->resv = 0;\r
+ p_smp->attr_mod = attr_mod;\r
+ p_smp->m_key = m_key;\r
+ p_smp->dr_slid = dr_slid;\r
+ p_smp->dr_dlid = dr_dlid;\r
+\r
+ <a href="../complib/cl_memory_h.html#robo429">cl_memclr</a>( p_smp->resv1,\r
+ sizeof(p_smp->resv1) +\r
+ sizeof(p_smp->data) +\r
+ sizeof(p_smp->initial_path) +\r
+ sizeof(p_smp->return_path) );\r
+\r
+ /* copy the path */\r
+ <a href="../complib/cl_memory_h.html#robo431">cl_memcpy</a>( &p_smp->initial_path, path_out,\r
+ sizeof( p_smp->initial_path ) );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_smp\r
+ [in] Pointer to the SMP packet.\r
+\r
+ method\r
+ [in] Method to perform, including 'R' bit.\r
+\r
+ trans_Id\r
+ [in] Transaction ID.\r
+\r
+ attr_id\r
+ [in] Attribute ID.\r
+\r
+ attr_mod\r
+ [in] Attribute modifier.\r
+\r
+ hop_count\r
+ [in] Number of hops in the path.\r
+\r
+ m_key\r
+ [in] Management key for this SMP.\r
+\r
+ path_out\r
+ [in] Port array for outbound path.\r
+\r
+\r
+ RETURN VALUES\r
+ None.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> Payload area is initialized to zero.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo882">ib_mad_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo964">[Functions]<a name="IBA20Base3a20Types2fib5fsmp5fis5fd">\r
+IBA Base: Types/ib_smp_is_d</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_smp_is_d</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Returns TRUE if the SMP 'D' (direction) bit is set.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_INLINE boolean_t AL_API\r
+<strong>ib_smp_is_d</strong>(\r
+ IN const <a href="#robo966">ib_smp_t</a>* const p_smp )\r
+{\r
+ return( (p_smp->status & <a href="#robo827">IB_SMP_DIRECTION</a>) == <a href="#robo827">IB_SMP_DIRECTION</a> );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_smp\r
+ [in] Pointer to the SMP packet.\r
+\r
+ RETURN VALUES\r
+ Returns TRUE if the SMP 'D' (direction) bit is set.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"></span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo966">ib_smp_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo965">[Functions]<a name="IBA20Base3a20Types2fib5fsmp5fis5fresponse">\r
+IBA Base: Types/ib_smp_is_response</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_smp_is_response</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Returns TRUE if the SMP is a response MAD, FALSE otherwise.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_INLINE boolean_t AL_API\r
+<strong>ib_smp_is_response</strong>(\r
+ IN const <a href="#robo966">ib_smp_t</a>* const p_smp )\r
+{\r
+ return( <a href="#robo881">ib_mad_is_response</a>( (const <a href="#robo882">ib_mad_t</a>*)p_smp ) );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_smp\r
+ [in] Pointer to the SMP packet.\r
+\r
+ RETURN VALUES\r
+ Returns TRUE if the SMP is a response MAD, FALSE otherwise.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"></span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo966">ib_smp_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo966">[Structures]<a name="IBA20Base3a20Types2fib5fsmp5ft">\r
+IBA Base: Types/ib_smp_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_smp_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> IBA defined SMP. (14.2.1.2)\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>#define IB_SMP_DATA_SIZE 64\r
+#include <complib/cl_packon.h>\r
+typedef struct _ib_smp\r
+{\r
+ uint8_t base_ver;\r
+ uint8_t mgmt_class;\r
+ uint8_t class_ver;\r
+ uint8_t method;\r
+ <a href="#robo893">ib_net16_t</a> status;\r
+ uint8_t hop_ptr;\r
+ uint8_t hop_count;\r
+ <a href="#robo895">ib_net64_t</a> trans_id;\r
+ <a href="#robo893">ib_net16_t</a> attr_id;\r
+ <a href="#robo893">ib_net16_t</a> resv;\r
+ <a href="#robo894">ib_net32_t</a> attr_mod;\r
+ <a href="#robo895">ib_net64_t</a> m_key;\r
+ <a href="#robo893">ib_net16_t</a> dr_slid;\r
+ <a href="#robo893">ib_net16_t</a> dr_dlid;\r
+ uint32_t resv1[7];\r
+ uint8_t data[IB_SMP_DATA_SIZE];\r
+ uint8_t initial_path[<a href="#robo829">IB_SUBNET_PATH_HOPS_MAX</a>];\r
+ uint8_t return_path[<a href="#robo829">IB_SUBNET_PATH_HOPS_MAX</a>];\r
+\r
+} PACK_SUFFIX <strong>ib_smp_t</strong>;\r
+#include <complib/cl_packoff.h>\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> base_ver\r
+ MAD base format.\r
+\r
+ mgmt_class\r
+ Class of operation.\r
+\r
+ class_ver\r
+ Version of MAD class-specific format.\r
+\r
+ method\r
+ Method to perform, including 'R' bit.\r
+\r
+ status\r
+ Status of operation.\r
+\r
+ hop_ptr\r
+ Hop pointer for directed route MADs.\r
+\r
+ hop_count\r
+ Hop count for directed route MADs.\r
+\r
+ trans_Id\r
+ Transaction ID.\r
+\r
+ attr_id\r
+ Attribute ID.\r
+\r
+ resv\r
+ Reserved field.\r
+\r
+ attr_mod\r
+ Attribute modifier.\r
+\r
+ m_key\r
+ Management key value.\r
+\r
+ dr_slid\r
+ Directed route source LID.\r
+\r
+ dr_dlid\r
+ Directed route destination LID.\r
+\r
+ resv0\r
+ Reserved for 64 byte alignment.\r
+\r
+ data\r
+ MAD data payload.\r
+\r
+ initial_path\r
+ Outbound port list.\r
+\r
+ return_path\r
+ Inbound port list.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"></span>\r
+<hr />\r
+\r
+<h2><a name="robo967">[Structures]<a name="IBA20Base3a20Types2fib5fsvc5fentries5ft">\r
+IBA Base: Types/ib_svc_entries_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_svc_entries_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> IBA defined IO Controller service entry array (16.3.3.5)\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>#include <complib/cl_packon.h>\r
+typedef struct _ib_svc_entries\r
+{\r
+#define SVC_ENTRY_COUNT 4\r
+ <a href="#robo968">ib_svc_entry_t</a> service_entry[SVC_ENTRY_COUNT];\r
+\r
+} PACK_SUFFIX <strong>ib_svc_entries_t</strong>;\r
+#include <complib/cl_packoff.h>\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> service_entry\r
+ An array of IO controller service entries.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo840">ib_dm_mad_t</a>, <a href="#robo968">ib_svc_entry_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo968">[Structures]<a name="IBA20Base3a20Types2fib5fsvc5fentry5ft">\r
+IBA Base: Types/ib_svc_entry_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_svc_entry_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> IBA defined IO Controller service entry structure (16.3.3.5)\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>#include <complib/cl_packon.h>\r
+typedef struct _ib_svc_entry\r
+{\r
+#define MAX_SVC_ENTRY_NAME_LEN 40\r
+ char name[MAX_SVC_ENTRY_NAME_LEN];\r
+\r
+ <a href="#robo895">ib_net64_t</a> id;\r
+\r
+} PACK_SUFFIX <strong>ib_svc_entry_t</strong>;\r
+#include <complib/cl_packoff.h>\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> name\r
+ UTF-8 encoded, null-terminated name of the service.\r
+\r
+ id\r
+ An identifier of the associated Service.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo967">ib_svc_entries_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo969">[Functions]<a name="IBA20Base3a20Types2fib5fswitch5finfo5fclear5fstate5fchange">\r
+IBA Base: Types/ib_switch_info_clear_state_change</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_switch_info_clear_state_change</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Clears the switch's state change bit.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_INLINE void AL_API\r
+<strong>ib_switch_info_clear_state_change</strong>(\r
+ IN <a href="#robo971">ib_switch_info_t</a>* const p_si )\r
+{\r
+ p_si->life_state = (uint8_t)(p_si->life_state & 0xFB);\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_ni\r
+ [in] Pointer to a PortInfo attribute.\r
+\r
+ RETURN VALUES\r
+ Returns the LMC value assigned to this port.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"></span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"></span>\r
+<hr />\r
+\r
+<h2><a name="robo970">[Functions]<a name="IBA20Base3a20Types2fib5fswitch5finfo5fget5fstate5fchange">\r
+IBA Base: Types/ib_switch_info_get_state_change</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_switch_info_get_state_change</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Returns the value of the state change flag.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_INLINE boolean_t AL_API\r
+<strong>ib_switch_info_get_state_change</strong>(\r
+ IN const <a href="#robo971">ib_switch_info_t</a>* const p_si )\r
+{\r
+ return( (p_si->life_state & IB_SWITCH_PSC) == IB_SWITCH_PSC );\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_si\r
+ [in] Pointer to a SwitchInfo attribute.\r
+\r
+ RETURN VALUES\r
+ Returns the value of the state change flag.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"></span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"></span>\r
+<hr />\r
+\r
+<h2><a name="robo971">[Structures]<a name="IBA20Base3a20Types2fib5fswitch5finfo5ft">\r
+IBA Base: Types/ib_switch_info_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_switch_info_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> IBA defined SwitchInfo. (14.2.5.4)\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>#include <complib/cl_packon.h>\r
+typedef struct _ib_switch_info\r
+{\r
+ <a href="#robo893">ib_net16_t</a> lin_cap;\r
+ <a href="#robo893">ib_net16_t</a> rand_cap;\r
+ <a href="#robo893">ib_net16_t</a> mcast_cap;\r
+ <a href="#robo893">ib_net16_t</a> lin_top;\r
+ uint8_t def_port;\r
+ uint8_t def_mcast_pri_port;\r
+ uint8_t def_mcast_not_port;\r
+ uint8_t life_state;\r
+ <a href="#robo893">ib_net16_t</a> lids_per_port;\r
+ <a href="#robo893">ib_net16_t</a> enforce_cap;\r
+ uint8_t flags;\r
+\r
+} PACK_SUFFIX <strong>ib_switch_info_t</strong>;\r
+#include <complib/cl_packoff.h>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo972">[Functions]<a name="IBA20Base3a20Types2fib5fvl5farb5felement5fget5fvl">\r
+IBA Base: Types/ib_vl_arb_element_get_vl</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_vl_arb_element_get_vl</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Retrieves the VL from a VL arbitration table element.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_INLINE uint8_t AL_API\r
+<strong>ib_vl_arb_element_get_vl</strong>(\r
+ IN const <a href="#robo974">ib_vl_arb_element_t</a> vl_arb_element )\r
+{\r
+ return (vl_arb_element.res_vl >> 4);\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> vl_arb_element\r
+ [in] VL arbitration table element from which to return the VL.\r
+\r
+ RETURN VALUES\r
+ Returns the VL value for the specified VL arbitration table element.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> vl_arb_element, <a href="#robo973">ib_vl_arb_element_set_vl</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo973">[Functions]<a name="IBA20Base3a20Types2fib5fvl5farb5felement5fset5fvl">\r
+IBA Base: Types/ib_vl_arb_element_set_vl</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_vl_arb_element_set_vl</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Retrieves the VL from a VL arbitration table element.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_INLINE void AL_API\r
+<strong>ib_vl_arb_element_set_vl</strong>(\r
+ IN OUT <a href="#robo974">ib_vl_arb_element_t</a>* const p_vl_arb_element,\r
+ IN const uint8_t vl )\r
+{\r
+ p_vl_arb_element->res_vl = vl << 4;\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> vl_arb_element\r
+ [in/out] VL arbitration table element in which to store the VL.\r
+\r
+ vl\r
+ [in] VL to store in the specified element.\r
+\r
+ RETURN VALUES\r
+ This function does not return a value.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> vl_arb_element, <a href="#robo972">ib_vl_arb_element_get_vl</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo974">[Structures]<a name="IBA20Base3a20Types2fib5fvl5farb5felement5ft">\r
+IBA Base: Types/ib_vl_arb_element_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_vl_arb_element_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> IBA defined VL Arbitration Table Element. (14.2.5.9)\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>#include <complib/cl_packon.h>\r
+typedef struct _ib_vl_arb_element\r
+{\r
+ uint8_t res_vl;\r
+ uint8_t weight;\r
+\r
+} PACK_SUFFIX <strong>ib_vl_arb_element_t</strong>;\r
+#include <complib/cl_packoff.h>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo975">[Structures]<a name="IBA20Base3a20Types2fib5fvl5farb5ftable5frecord5ft">\r
+IBA Base: Types/ib_vl_arb_table_record_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_vl_arb_table_record_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> IBA defined VL Arbitration Table Record for SA Query. (15.2.5.9)\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>#include <complib/cl_packon.h>\r
+typedef struct _ib_vl_arb_table_record\r
+{\r
+ <a href="#robo893">ib_net16_t</a> lid; // for CA: lid of port, for switch lid of port 0\r
+ uint8_t port_num;\r
+ uint8_t block_num;\r
+ uint32_t reserved;\r
+ <a href="#robo976">ib_vl_arb_table_t</a> vl_arb_tbl;\r
+\r
+} PACK_SUFFIX <strong>ib_vl_arb_table_record_t</strong>;\r
+#include <complib/cl_packoff.h>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo976">[Structures]<a name="IBA20Base3a20Types2fib5fvl5farb5ftable5ft">\r
+IBA Base: Types/ib_vl_arb_table_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_vl_arb_table_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> IBA defined VL Arbitration Table. (14.2.5.9)\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>#include <complib/cl_packon.h>\r
+typedef struct _ib_vl_arb_table\r
+{\r
+ <a href="#robo974">ib_vl_arb_element_t</a> vl_entry[IB_NUM_VL_ARB_ELEMENTS_IN_BLOCK];\r
+\r
+} PACK_SUFFIX <strong>ib_vl_arb_table_t</strong>;\r
+#include <complib/cl_packoff.h>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo977">[Functions]<a name="IBA20Base3a20Types2fioc5fat5fslot">\r
+IBA Base: Types/ioc_at_slot</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ioc_at_slot</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Returns the IOC value at the specified slot.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>AL_INLINE uint8_t AL_API\r
+<strong>ioc_at_slot</strong>(\r
+ IN const <a href="#robo877">ib_iou_info_t</a>* const p_iou_info,\r
+ IN uint8_t slot )\r
+{\r
+ if( !slot )\r
+ return SLOT_DOES_NOT_EXIST;\r
+ else if( slot-- & 0x01 )\r
+ return (p_iou_info->controller_list[slot >> 1] >> 4);\r
+ else\r
+ return (p_iou_info->controller_list[slot >> 1] & 0x0F);\r
+}\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_iou_info\r
+ [in] Pointer to the IO Unit information structure.\r
+\r
+ slot\r
+ [in] 1-based slot number of the IOC slot to check.\r
+\r
+ RETURN VALUES\r
+ Returns the encoded value for the desired slot. Possible values are\r
+ SLOT_DOES_NOT_EXIST, IOC_NOT_INSTALLED, and IOC_INSTALLED.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> The input slot number is 1-based, not zero based.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo877">ib_iou_info_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo978">[Functions]<a name="IBA20Bases3a20Types2fib5fdm5fget5fslot5flo5fhi">\r
+IBA Bases: Types/ib_dm_get_slot_lo_hi</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Returns the IOC slot number, and the lower and upper bound of the\r
+ service entries given the attribute modifier of ServiceEntries response.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo979">ib_dm_set_slot_lo_hi</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo979">[Functions]<a name="IBA20Bases3a20Types2fib5fdm5fset5fslot5flo5fhi">\r
+IBA Bases: Types/ib_dm_set_slot_lo_hi</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
+<p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Joins the IOC slot number, and the lower and upper bound of the service \r
+ entries and returns it.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo978">ib_dm_get_slot_lo_hi</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1155">[Definitions]<a name="Verbs2fib5fasync5fevent5ft">\r
+Verbs/ib_async_event_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="./ib_ci_h.html#robo39">parent</a>][<a href="../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_async_event_t</strong> -- Async event types\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> This type indicates the reason the async callback was called.\r
+ The context in the <a href="#robo1157">ib_event_rec_t</a> indicates the resource context\r
+ that associated with the callback. For example, for IB_AE_CQ_ERROR\r
+ the context provided during the <a href="./ib_al_h.html#robo105">ib_create_cq</a> is returned in the event.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef enum _<strong>ib_async_event_t</strong>\r
+{\r
+ IB_AE_SQ_ERROR = 1,\r
+ IB_AE_SQ_DRAINED,\r
+ IB_AE_RQ_ERROR,\r
+ IB_AE_CQ_ERROR,\r
+ IB_AE_QP_FATAL,\r
+ IB_AE_QP_COMM,\r
+ IB_AE_QP_APM,\r
+ IB_AE_LOCAL_FATAL,\r
+ IB_AE_PKEY_TRAP,\r
+ IB_AE_QKEY_TRAP,\r
+ IB_AE_MKEY_TRAP,\r
+ IB_AE_PORT_TRAP,\r
+ IB_AE_SYSIMG_GUID_TRAP,\r
+ IB_AE_BUF_OVERRUN,\r
+ IB_AE_LINK_INTEGRITY,\r
+ IB_AE_FLOW_CTRL_ERROR,\r
+ IB_AE_BKEY_TRAP,\r
+ IB_AE_QP_APM_ERROR,\r
+ IB_AE_WQ_REQ_ERROR,\r
+ IB_AE_WQ_ACCESS_ERROR,\r
+ IB_AE_PORT_ACTIVE,\r
+ IB_AE_PORT_DOWN,\r
+ IB_AE_CLIENT_REREGISTER,\r
+ IB_AE_UNKNOWN /* ALWAYS LAST ENUM VALUE */\r
+\r
+} <strong>ib_async_event_t</strong>;\r
+</pre>\r
+</span><p><strong>VALUES</strong></p>\r
+<span class="VALUES"><pre> IB_AE_SQ_ERROR\r
+ An error occurred when accessing the send queue of the QP.\r
+ This event is optional.\r
+\r
+ IB_AE_SQ_DRAINED\r
+ The send queue of the specified QP has completed the outstanding\r
+ messages in progress when the state change was requested and, if\r
+ applicable, has received all acknowledgements for those messages.\r
+\r
+ IB_AE_RQ_ERROR\r
+ An error occurred when accessing the receive queue of the QP.\r
+ This event is optional.\r
+\r
+ IB_AE_CQ_ERROR\r
+ An error occurred when writing an entry to the CQ.\r
+\r
+ IB_AE_QP_FATAL\r
+ A catastrophic error occurred while accessing or processing the\r
+ work queue that prevents reporting of completions.\r
+\r
+ IB_AE_QP_COMM\r
+ The first packet has arrived for the receive work queue where the\r
+ QP is still in the RTR state.\r
+\r
+ IB_AE_QP_APM\r
+ If alternate path migration is supported, this event indicates that\r
+ the QP connection has migrated to the alternate path.\r
+\r
+ IB_AE_LOCAL_FATAL\r
+ A catastrophic HCA error occurred which cannot be attributed to any\r
+ resource; behavior is indeterminate.\r
+\r
+ IB_AE_PKEY_TRAP\r
+ A PKEY violation was detected. This event is optional.\r
+\r
+ IB_AE_QKEY_TRAP\r
+ A QKEY violation was detected. This event is optional.\r
+\r
+ IB_AE_MKEY_TRAP\r
+ An MKEY violation was detected. This event is optional.\r
+\r
+ IB_AE_PORT_TRAP\r
+ A port capability change was detected. This event is optional.\r
+\r
+ IB_AE_SYSIMG_GUID_TRAP\r
+ If the system image GUID is supported, this event indicates that the\r
+ system image GUID of this HCA has been changed. This event is\r
+ optional.\r
+\r
+ IB_AE_BUF_OVERRUN\r
+ The number of consecutive flow control update periods with at least\r
+ one overrun error in each period has exceeded the threshold specified\r
+ in the port info attributes. This event is optional.\r
+\r
+ IB_AE_LINK_INTEGRITY\r
+ The detection of excessively frequent local physical errors has\r
+ exceeded the threshold specified in the port info attributes. This\r
+ event is optional.\r
+\r
+ IB_AE_FLOW_CTRL_ERROR\r
+ An HCA watchdog timer monitoring the arrival of flow control updates\r
+ has expired without receiving an update. This event is optional.\r
+\r
+ IB_AE_BKEY_TRAP\r
+ An BKEY violation was detected. This event is optional.\r
+\r
+ IB_AE_QP_APM_ERROR\r
+ If alternate path migration is supported, this event indicates that\r
+ an incoming path migration request to this QP was not accepted.\r
+\r
+ IB_AE_WQ_REQ_ERROR\r
+ An OpCode violation was detected at the responder.\r
+\r
+ IB_AE_WQ_ACCESS_ERROR\r
+ An access violation was detected at the responder.\r
+\r
+ IB_AE_PORT_ACTIVE\r
+ If the port active event is supported, this event is generated\r
+ when the link becomes active: IB_LINK_ACTIVE.\r
+\r
+ IB_AE_PORT_DOWN\r
+ The link is declared unavailable: IB_LINK_INIT, IB_LINK_ARMED,\r
+ IB_LINK_DOWN.\r
+\r
+ IB_AE_CLIENT_REREGISTER\r
+ The SM idicate to client to reregister its SA records.\r
+\r
+ IB_AE_UNKNOWN\r
+ An unknown error occurred which cannot be attributed to any\r
+ resource; behavior is indeterminate.\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1157">[Structures]<a name="Verbs2fib5fevent5frec5ft">\r
+Verbs/ib_event_rec_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="./ib_ci_h.html#robo39">parent</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_event_rec_t</strong> -- Async event notification record\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> When an async event callback is made, this structure is passed to indicate\r
+ the type of event, the source of event that caused it, and the context\r
+ associated with this event.\r
+\r
+ context -- Context of the resource that caused the event.\r
+ -- ca_context if this is a port/adapter event.\r
+ -- qp_context if the source is a QP event\r
+ -- cq_context if the source is a CQ event.\r
+ -- ee_context if the source is an EE event.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef struct _ib_event_rec\r
+{\r
+ void* __ptr64 context;\r
+ <a href="#robo1155">ib_async_event_t</a> type;\r
+\r
+ /* HCA vendor specific event information. */\r
+ uint64_t vendor_specific;\r
+\r
+ /* The following structures are valid only for trap types. */\r
+ union _trap\r
+ {\r
+ struct\r
+ {\r
+ uint16_t lid;\r
+ <a href="#robo895">ib_net64_t</a> port_guid;\r
+ uint8_t port_num;\r
+\r
+ /*\r
+ * The following structure is valid only for\r
+ * P_KEY, Q_KEY, and M_KEY violation traps.\r
+ */\r
+ struct\r
+ {\r
+ uint8_t sl;\r
+ uint16_t src_lid;\r
+ uint16_t dest_lid;\r
+ union _key\r
+ {\r
+ uint16_t pkey;\r
+ uint32_t qkey;\r
+ uint64_t mkey;\r
+ } key;\r
+ uint32_t src_qp;\r
+ uint32_t dest_qp;\r
+ <a href="#robo856">ib_gid_t</a> src_gid;\r
+ <a href="#robo856">ib_gid_t</a> dest_gid;\r
+\r
+ } violation;\r
+\r
+ } info;\r
+\r
+ <a href="#robo895">ib_net64_t</a> sysimg_guid;\r
+\r
+ } trap;\r
+\r
+} <strong>ib_event_rec_t</strong>;\r
+</pre>\r
+</span>\r
+</body>\r
+</html>\r
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">\r
+<html>\r
+<head>\r
+<link rel="stylesheet" href="../../robodoc.css" type="text/css">\r
+<title>./inc_doc/kernel/complib/cl_bus_ifc_h.html</title>\r
+<!-- Source: ./inc/kernel/complib/cl_bus_ifc.h -->\r
+<!-- Generated with ROBODoc Version 4.99.22 (Mar 6 2006) -->\r
+</head>\r
+<body bgcolor="#FFFFFF">\r
+<a name="robo_top_of_doc">Generated from ./inc/kernel/complib/cl_bus_ifc.h</a> with <a href="http://sourceforge.net/projects/robodoc/">ROBODoc</a> v4.99.22 on Sun Apr 16 2006 17:39:25\r
+<br />\r
+<hr />\r
+\r
+<h2><a name="robo488">[Functions]<a name="Component20Library3a20Plug20and20Play2fcl5ffwd5fquery5fifc">\r
+Component Library: Plug and Play/cl_fwd_query_ifc</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_fwd_query_ifc</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Forwards a IRP_MN_QUERY_INTERFACE request to the device stack\r
+ represented by the input device object.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT NTSTATUS\r
+<strong>cl_fwd_query_ifc</strong>(\r
+ IN DEVICE_OBJECT* const p_dev_obj,\r
+ IN IO_STACK_LOCATION* const p_io_stack );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_dev_obj\r
+ Pointer to the device object that is the IRP target.\r
+\r
+ p_io_stack\r
+ Pointer to the original IRP's I/O stack location, used to format\r
+ the forwarded IRP.\r
+\r
+ RETURN VALUES\r
+ IRP status value.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> The IRP forwarded is synchronous, so this call must be invoked at PASSIVE.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Plug and Play\r
+</pre>\r
+</span>\r
+</body>\r
+</html>\r
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">\r
+<html>\r
+<head>\r
+<link rel="stylesheet" href="../../robodoc.css" type="text/css">\r
+<title>./inc_doc/kernel/complib/cl_pnp_po_h.html</title>\r
+<!-- Source: ./inc/kernel/complib/cl_pnp_po.h -->\r
+<!-- Generated with ROBODoc Version 4.99.22 (Mar 6 2006) -->\r
+</head>\r
+<body bgcolor="#FFFFFF">\r
+<a name="robo_top_of_doc">Generated from ./inc/kernel/complib/cl_pnp_po.h</a> with <a href="http://sourceforge.net/projects/robodoc/">ROBODoc</a> v4.99.22 on Sun Apr 16 2006 17:39:24\r
+<br />\r
+<hr />\r
+\r
+<h2><a name="robo22">[Modules]<a name="Component20Library2fPlug20and20Play">\r
+Component Library/Plug and Play</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../../robo_modules.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> Plug and Play\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Provides plug and play support for kernel drivers.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Callback Types:\r
+ <a href="#robo491">cl_pfn_pnp_po_t</a>\r
+\r
+ Structures:\r
+ cl_vfptr_pnp_t\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo485">[Functions]<a name="Component20Library3a20Plug20and20Play2fcl5falloc5frelations">\r
+Component Library: Plug and Play/cl_alloc_relations</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_alloc_relations</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Allocates device relations and copies existing device relations, if any.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT NTSTATUS\r
+<strong>cl_alloc_relations</strong>(\r
+ IN IRP* const p_irp,\r
+ IN const size_t n_devs );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_irp\r
+ Pointer to the IPR_MN_QUERY_DEVICE_RELATIONS IRP for which the\r
+ relations are being allocated.\r
+\r
+ n_devs\r
+ Number of devices the caller will report in the DEVICE_RELATIONS\r
+ structure stored at pIrp->IoStatus.Infomation upon success.\r
+\r
+ RETURN VALUES\r
+ STATUS_SUCCESS if the DEVICE_RELATIONS structure was allocated successfully.\r
+\r
+ STATUS_INSUFFICIENT_RESOURCES if there was not enough memory to complete\r
+ the operation.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> Upon failure, any original relations buffer is freed. Users should fail\r
+ the IRP with the returned status value.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Plug and Play\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo486">[Functions]<a name="Component20Library3a20Plug20and20Play2fcl5fdo5fremove">\r
+Component Library: Plug and Play/cl_do_remove</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_do_remove</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Propagates an IRP_MN_REMOVE_DEVICE IRP, detaches, and deletes the\r
+ device object. Useable by function and filter drivers only.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT NTSTATUS\r
+<strong>cl_do_remove</strong>(\r
+ IN DEVICE_OBJECT* const pDevObj,\r
+ IN IRP* const pIrp, \r
+ OUT <a href="#robo490">cl_irp_action_t</a>* const pAction );\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo487">[Functions]<a name="Component20Library3a20Plug20and20Play2fcl5fdo5fsync5fpnp">\r
+Component Library: Plug and Play/cl_do_sync_pnp</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_do_sync_pnp</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Sends an IRP to the next driver synchronously. Returns when the lower \r
+ drivers have completed the IRP. Used to process IRPs on the way up the\r
+ device node.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT NTSTATUS\r
+<strong>cl_do_sync_pnp</strong>(\r
+ IN DEVICE_OBJECT* const p_dev_obj,\r
+ IN IRP* const p_irp, \r
+ OUT <a href="#robo490">cl_irp_action_t</a>* const p_action );\r
+/*\r
+* PARAMETER\r
+* p_dev_obj\r
+* Pointer to the device object that is the IRP target.\r
+*\r
+* p_irp\r
+* Pointer to the request IRP.\r
+*\r
+* p_action\r
+* Action to take for propagating the IRP.\r
+*\r
+* RETURN VALUES\r
+* IRP status value returned by lower driver.\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo489">[Functions]<a name="Component20Library3a20Plug20and20Play2fcl5finit5fpnp5fpo5fext">\r
+Component Library: Plug and Play/cl_init_pnp_po_ext</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_init_pnp_po_ext</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Initializes the component library device extension for use.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT void\r
+<strong>cl_init_pnp_po_ext</strong>(\r
+ IN OUT DEVICE_OBJECT* const p_dev_obj,\r
+ IN DEVICE_OBJECT* const p_next_do,\r
+ IN DEVICE_OBJECT* const p_pdo,\r
+ IN const uint32_t pnp_po_dbg_lvl,\r
+ IN const <a href="#robo498">cl_vfptr_pnp_po_t</a>* const vfptr_pnp,\r
+ IN const cl_vfptr_query_txt_t* const vfptr_query_txt OPTIONAL );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_dev_obj\r
+ Pointer to the device object for the device.\r
+\r
+ p_next_do\r
+ Pointer to the next device object in the device stack. Must be NULL\r
+ for PDO objects.\r
+\r
+ p_pdo\r
+ Pointer to the PDO for the device node.\r
+\r
+ pnp_po_dbg_lvl\r
+ Debug level to control flow of debug messages. If the bit for\r
+ CL_DBG_PNP is set, verbose debug messages are generated.\r
+\r
+ vfptr_pnp_po\r
+ Pointer to the function table of PnP and Power Management handlers.\r
+\r
+ vfptr_query_txt\r
+ Pointer to the function table for IRP_MN_QUERY_DEVICE_TEXT handlers.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Plug and Play, <a href="#robo494">cl_pnp_po_ext_t</a>, <a href="#robo498">cl_vfptr_pnp_po_t</a>, cl_vfptr_query_txt_t\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo490">[Definitions]<a name="Component20Library3a20Plug20and20Play2fcl5firp5faction5ft">\r
+Component Library: Plug and Play/cl_irp_action_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_irp_action_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Indicates what kind of action to take in response to an IRP. Used\r
+ when processing PnP IRPs.\r
+\r
+ SYNOPSIS:\r
+\r
+ VALUES:\r
+ IrpPassDown\r
+ Pass the IRP down to the next driver. The IRP's current stack location\r
+ has been setup properly.\r
+\r
+ IrpSkip\r
+ Skip the current IRP stack location but sets the IRP's status.\r
+\r
+ IrpIgnore\r
+ Skip the current IRP without setting its status value since the IRP \r
+ is not interesting.\r
+\r
+ IrpComplete\r
+ Complete the IRP. Sets the status in the IoStatus block, completes the\r
+ IRP, and returns the status.\r
+\r
+ IrpDoNothing\r
+ The routine assumed control of the IRP completion. No further \r
+ processing is required in the dispatch routine. The remove lock should\r
+ not be released.\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo491">[Definitions]<a name="Component20Library3a20Plug20and20Play2fcl5fpfn5fpnp5fpo5ft">\r
+Component Library: Plug and Play/cl_pfn_pnp_po_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_pfn_pnp_po_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Function prototype for PnP and Power Management IRPs handlers.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef NTSTATUS\r
+(*<strong>cl_pfn_pnp_po_t</strong>)(\r
+ IN DEVICE_OBJECT* const p_dev_obj,\r
+ IN IRP* const p_irp, \r
+ OUT <a href="#robo490">cl_irp_action_t</a>* const p_action );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_dev_obj\r
+ Pointer to the device object that is the IRP target.\r
+\r
+ p_irp\r
+ Pointer to the request IRP.\r
+\r
+ p_action\r
+ Action to take for propagating the IRP.\r
+\r
+ RETURN VALUES\r
+ IRP status value.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Plug and Play, <a href="#robo490">cl_irp_action_t</a>, <a href="#robo498">cl_vfptr_pnp_po_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo492">[Definitions]<a name="Component20Library3a20Plug20and20Play2fcl5fpfn5fquery5ftext5ft">\r
+Component Library: Plug and Play/cl_pfn_query_text_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_pfn_query_text_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Function pointer type for handling IRP_MN_QUERY_DEVICE_TEXT IRPs.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef NTSTATUS\r
+(*<strong>cl_pfn_query_text_t</strong>)(\r
+ IN DEVICE_OBJECT* const p_dev_obj,\r
+ OUT IRP* const p_irp );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> pDevObj\r
+ Pointer to the device object that is the IRP target.\r
+\r
+ pIrp\r
+ [out] Pointer to the request IRP. Sets the requested device text in\r
+ pIrp->IoStatus.Information.\r
+\r
+ RETURN VALUES\r
+ NTSTATUS value indicating the result of the query.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> Only bus drivers handle the IRP_MN_QUERY_DEVICE_TEXT IRP for their PDOs.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Plug and Play\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo493">[Definitions]<a name="Component20Library3a20Plug20and20Play2fcl5fpfn5frelease5fresources5ft">\r
+Component Library: Plug and Play/cl_pfn_release_resources_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_pfn_release_resources_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Function prototype for releasing resources associated with a device.\r
+ Called from either the remove handler or the surprise remove handler.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef void\r
+(*<strong>cl_pfn_release_resources_t</strong>)(\r
+ IN DEVICE_OBJECT* const p_dev_obj );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_dev_obj\r
+ Pointer to the device object whose resources to release.\r
+\r
+ RETURN VALUES\r
+ This function does not return a value.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Plug and Play, <a href="#robo498">cl_vfptr_pnp_po_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo494">[Definitions]<a name="Component20Library3a20Plug20and20Play2fcl5fpnp5fpo5fext5ft">\r
+Component Library: Plug and Play/cl_pnp_po_ext_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_pnp_po_ext_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Device extension structure required for using the component library\r
+ plug and play helper routines.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef struct _cl_pnp_po_ext\r
+{\r
+ <a href="#robo495">cl_pnp_state_t</a> pnp_state;\r
+ <a href="#robo495">cl_pnp_state_t</a> last_pnp_state;\r
+\r
+ DEVICE_OBJECT *p_self_do;\r
+ DEVICE_OBJECT *p_next_do;\r
+ DEVICE_OBJECT *p_pdo;\r
+\r
+ IO_REMOVE_LOCK remove_lock;\r
+ IO_REMOVE_LOCK stop_lock;\r
+\r
+ atomic32_t n_paging_files;\r
+ atomic32_t n_crash_files;\r
+ atomic32_t n_hibernate_files;\r
+\r
+ const <a href="#robo498">cl_vfptr_pnp_po_t</a> *vfptr_pnp_po;\r
+ const cl_vfptr_query_txt_t *vfptr_query_txt;\r
+\r
+ void *h_cl_locked_section;\r
+ void *h_user_locked_section;\r
+\r
+ atomic32_t n_ifc_ref;\r
+\r
+ uint32_t dbg_lvl;\r
+\r
+} <strong>cl_pnp_po_ext_t</strong>;\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> pnp_state\r
+ Current PnP device state.\r
+\r
+ last_pnp_state\r
+ Previous PnP device state, to restore in case a query is cancelled.\r
+\r
+ p_self_do\r
+ Pointer to the device's own device object.\r
+\r
+ p_next_do\r
+ Pointer to the next device object. Null if the device is a PDO.\r
+\r
+ p_pdo\r
+ The pointer to the PDO for the device node.\r
+ \r
+ remove_lock\r
+ Remove lock used to synchronize access to the device when handling\r
+ PnP IRPs.\r
+\r
+ stop_lock\r
+ Lock used to track non-PnP and non-Power IO operations. \r
+ \r
+ n_paging_files\r
+ Number of times the device is in a paging file path.\r
+\r
+ n_crash_files\r
+ Number of times the device is in a dump file path.\r
+\r
+ n_hibernate_files\r
+ Number of times the device is in a hibernation files path.\r
+ \r
+ vfptr_pnp\r
+ Funtion pointer table for the PnP and Power Management handlers.\r
+\r
+ vfptr_query_txt\r
+ Function pointer table for IRP_MN_QUERY_DEVICE_TEXT handlers.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> This structure must be first in the device extension so that the device\r
+ extension can successfully be cast to a <strong>cl_pnp_po_ext_t</strong> pointer by the\r
+ IRP handler routines.\r
+\r
+ When performing I/O operations, users should acquire the stop lock and\r
+ check status before starting an I/O operation, and release the stop lock\r
+ after completing an I/O operation using the cl_start_io and cl_end_io\r
+ functions respectively.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Plug and Play, <a href="#robo498">cl_vfptr_pnp_po_t</a>, <a href="#robo495">cl_pnp_state_t</a>, cl_start_io, cl_end_io\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo495">[Definitions]<a name="Component20Library3a20Plug20and20Play2fcl5fpnp5fstate5ft">\r
+Component Library: Plug and Play/cl_pnp_state_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_pnp_state_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> PnP States for device objects managed by this driver.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef enum _cl_pnp_state\r
+{\r
+ NotStarted = 0,\r
+ Started,\r
+ StopPending,\r
+ Stopped,\r
+ RemovePending,\r
+ SurpriseRemoved,\r
+ Deleted,\r
+ UnKnown\r
+\r
+} <strong>cl_pnp_state_t</strong>;\r
+</pre>\r
+</span><p><strong>VALUES</strong></p>\r
+<span class="VALUES"><pre> NotStarted\r
+ Not started yet.\r
+\r
+ Started\r
+ Device has received the IPR_MN_START_DEVICE IRP\r
+\r
+ StopPending\r
+ Device has received the IPR_MN_QUERY_STOP_DEVICE IRP\r
+\r
+ Stopped\r
+ Device has received the IPR_MN_STOP_DEVICE IRP\r
+\r
+ RemovePending\r
+ Device has received the IPR_MN_QUERY_REMOVE_DEVICE IRP\r
+\r
+ SurpriseRemoved\r
+ Device has received the IPR_MN_SURPRISE_REMOVE_DEVICE IRP\r
+\r
+ Deleted\r
+ Device has received the IPR_MN_REMOVE_DEVICE IRP\r
+\r
+ UnKnown\r
+ Unknown state\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Plug and Play, <a href="#robo494">cl_pnp_po_ext_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo496">[Functions]<a name="Component20Library3a20Plug20and20Play2fcl5frollback5fpnp5fstate">\r
+Component Library: Plug and Play/cl_rollback_pnp_state</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_rollback_pnp_state</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Rolls back a PnP state change.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_INLINE void\r
+<strong>cl_rollback_pnp_state</strong>(\r
+ OUT <a href="#robo494">cl_pnp_po_ext_t</a>* const p_ext )\r
+{\r
+ p_ext->pnp_state = p_ext->last_pnp_state;\r
+}\r
+/*\r
+* PARAMTETERS\r
+* p_ext\r
+* Pointer to the device extension whose PnP state to set.\r
+*\r
+* RETURN VALUES\r
+* This function does not return a value.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Plug and Play, <a href="#robo494">cl_pnp_po_ext_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo497">[Functions]<a name="Component20Library3a20Plug20and20Play2fcl5fset5fpnp5fstate">\r
+Component Library: Plug and Play/cl_set_pnp_state</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_set_pnp_state</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Sets the PnP state stored in the common device extension to the desired\r
+ state. Stores the previous state for rollback purposes.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_INLINE void\r
+<strong>cl_set_pnp_state</strong>(\r
+ OUT <a href="#robo494">cl_pnp_po_ext_t</a>* const p_ext,\r
+ IN const <a href="#robo495">cl_pnp_state_t</a> new_state )\r
+{\r
+ p_ext->last_pnp_state = p_ext->pnp_state;\r
+ p_ext->pnp_state = new_state;\r
+}\r
+/*\r
+* PARAMTETERS\r
+* p_ext\r
+* Pointer to the device extension whose PnP state to set.\r
+*\r
+* new_state\r
+* New PnP state to store in the device extension.\r
+*\r
+* RETURN VALUES\r
+* This function does not return a value.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Plug and Play, <a href="#robo494">cl_pnp_po_ext_t</a>, <a href="#robo495">cl_pnp_state_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo498">[Definitions]<a name="Component20Library3a20Plug20and20Play2fcl5fvfptr5fpnp5fpo5ft">\r
+Component Library: Plug and Play/cl_vfptr_pnp_po_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_vfptr_pnp_po_t</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Virtual function pointer table for PnP and Power Management IRPs.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef struct _cl_vfptr_pnp_po\r
+{\r
+ const char* identity;\r
+ <a href="#robo491">cl_pfn_pnp_po_t</a> pfn_start;\r
+ <a href="#robo491">cl_pfn_pnp_po_t</a> pfn_query_stop;\r
+ <a href="#robo491">cl_pfn_pnp_po_t</a> pfn_stop;\r
+ <a href="#robo491">cl_pfn_pnp_po_t</a> pfn_cancel_stop;\r
+ <a href="#robo491">cl_pfn_pnp_po_t</a> pfn_query_remove;\r
+ <a href="#robo493">cl_pfn_release_resources_t</a> pfn_release_resources;\r
+ <a href="#robo491">cl_pfn_pnp_po_t</a> pfn_remove;\r
+ <a href="#robo491">cl_pfn_pnp_po_t</a> pfn_cancel_remove;\r
+ <a href="#robo491">cl_pfn_pnp_po_t</a> pfn_surprise_remove;\r
+ <a href="#robo491">cl_pfn_pnp_po_t</a> pfn_query_capabilities;\r
+ <a href="#robo491">cl_pfn_pnp_po_t</a> pfn_query_pnp_state;\r
+ <a href="#robo491">cl_pfn_pnp_po_t</a> pfn_filter_res_req;\r
+ <a href="#robo491">cl_pfn_pnp_po_t</a> pfn_dev_usage_notification;\r
+ <a href="#robo491">cl_pfn_pnp_po_t</a> pfn_query_bus_relations;\r
+ <a href="#robo491">cl_pfn_pnp_po_t</a> pfn_query_ejection_relations;\r
+ <a href="#robo491">cl_pfn_pnp_po_t</a> pfn_query_removal_relations;\r
+ <a href="#robo491">cl_pfn_pnp_po_t</a> pfn_query_target_relations;\r
+ <a href="#robo491">cl_pfn_pnp_po_t</a> pfn_unknown;\r
+ <a href="#robo491">cl_pfn_pnp_po_t</a> pfn_query_resources;\r
+ <a href="#robo491">cl_pfn_pnp_po_t</a> pfn_query_res_req;\r
+ <a href="#robo491">cl_pfn_pnp_po_t</a> pfn_query_bus_info;\r
+ <a href="#robo491">cl_pfn_pnp_po_t</a> pfn_query_interface;\r
+ <a href="#robo491">cl_pfn_pnp_po_t</a> pfn_read_config;\r
+ <a href="#robo491">cl_pfn_pnp_po_t</a> pfn_write_config;\r
+ <a href="#robo491">cl_pfn_pnp_po_t</a> pfn_eject;\r
+ <a href="#robo491">cl_pfn_pnp_po_t</a> pfn_set_lock;\r
+ <a href="#robo491">cl_pfn_pnp_po_t</a> pfn_query_power;\r
+ <a href="#robo491">cl_pfn_pnp_po_t</a> pfn_set_power;\r
+ <a href="#robo491">cl_pfn_pnp_po_t</a> pfn_power_sequence;\r
+ <a href="#robo491">cl_pfn_pnp_po_t</a> pfn_wait_wake;\r
+\r
+} <strong>cl_vfptr_pnp_po_t</strong>;\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> identity\r
+ string identifying the target, used in generating debug output.\r
+\r
+ pfn_start\r
+ IRP_MN_START_DEVICE handler. Users must send forward the IRP to lower\r
+ devices as required for their driver type.\r
+\r
+ pfn_query_stop\r
+ IRP_MN_QUERY_STOP_DEVICE handler.\r
+\r
+ pfn_stop\r
+ IRP_MN_STOP_DEVICE handler.\r
+\r
+ pfn_cancel_stop\r
+ IRP_MN_CANCEL_STOP_DEVICE handler. Users must send forward the IRP to \r
+ lower devices as required for their driver type.\r
+\r
+ pfn_query_remove\r
+ IRP_MN_QUERY_REMOVE_DEVICE handler.\r
+\r
+ pfn_release_resources\r
+ Called to release resources allocated for the device.\r
+\r
+ pfn_remove\r
+ IRP_MN_REMOVE_DEVICE handler.\r
+\r
+ pfn_cancel_remove\r
+ IRP_MN_CANCEL_REMOVE_DEVICE handler. Users must send forward the IRP\r
+ to lower devices as required for their driver type.\r
+\r
+ pfn_surprise_remove\r
+ IRP_MN_SURPRISE_REMOVE_DEVICE handler.\r
+\r
+ pfn_query_capabilities\r
+ IRP_MN_QUERY_DEVICE_CAPABILITIES handler.\r
+\r
+ pfn_query_pnp_state\r
+ IRP_MN_QUERY_PNP_STATE handler.\r
+\r
+ pfn_filter_res_req\r
+ IRP_MN_FILTER_RESOURCE_REQUIREMENTS handler.\r
+\r
+ pfn_dev_usage_notification\r
+ IRP_MN_QUERY_DEVICE_USAGE_NOTIFICATION handler.\r
+\r
+ pfn_query_bus_relations\r
+ IRP_MN_QUERY_BUS_RELATIONS handler.\r
+\r
+ pfn_query_ejection_relations\r
+ IRP_MN_QUERY_EJECTION_RELATIONS handler.\r
+\r
+ pfn_query_removal_relations\r
+ IRP_MN_QUERY_REMOVAL_RELATIONS handler.\r
+\r
+ pfn_query_target_relations\r
+ IRP_MN_QUERY_TARGET_RELATIONS handler.\r
+\r
+ pfn_unknown\r
+ FDO and Filter drivers should pass this IRP down. Bus drivers should \r
+ complete the request for their PDOs without modifying the status.\r
+ The component library provides the <a href="#robo502">cl_irp_skip</a> and <a href="#robo500">cl_irp_complete</a> \r
+ functions to skip and complete and IRP, respectively. These functions\r
+ can be used to perform the required action. This handler is invoked\r
+ when an undocumented PNP irp is received.\r
+\r
+ pfn_query_resources\r
+ IRP_MN_QUERY_RESOURCES handler.\r
+\r
+ pfn_query_res_req\r
+ IRP_MN_QUERY_RESOURCE_REQUIREMENTS handler.\r
+\r
+ pfn_query_bus_info\r
+ IRP_MN_QUERY_BUS_INFORMATION handler.\r
+\r
+ pfn_query_interface\r
+ IRP_MN_QUERY_INTERFACE handler.\r
+\r
+ pfn_read_config\r
+ IRP_MN_READ_CONFIG handler.\r
+\r
+ pfn_write_config\r
+ IRP_MN_WRITE_CONFIG handler.\r
+\r
+ pfn_eject\r
+ IRP_MN_EJECT handler.\r
+\r
+ pfn_set_lock\r
+ IRP_MN_SET_LOCK handler.\r
+\r
+ pfn_query_power\r
+ IRP_MN_QUERY_POWER handler.\r
+\r
+ pfn_set_power\r
+ IRP_MN_SET_POWER handler.\r
+\r
+ pfn_power_sequence\r
+ IRP_MN_POWER_SEQUENCE handler.\r
+\r
+ pfn_wait_wake\r
+ IRP_MN_WAIT_WAKE handler.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> The component library provides default handlers for skiping the IRP,\r
+ completing the IRP without changing the status, and processing the IRP\r
+ on the way up the device stack. Users can set the handler to \r
+ <a href="#robo502">cl_irp_skip</a>, <a href="#robo500">cl_irp_complete</a>, <a href="#robo487">cl_do_sync_pnp</a>.\r
+\r
+ The handlers specified in pfn_query_power, pfn_set_power, \r
+ pfn_power_sequence, and pfn_wait_wake, if implemented as pageable code,\r
+ should be marked in a single pageable code section. The component library\r
+ will use the first function that is not a component library handler to\r
+ lock down the user's power management code.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Plug and Play, <a href="#robo491">cl_pfn_pnp_po_t</a>, <a href="#robo493">cl_pfn_release_resources_t</a>, <a href="#robo487">cl_do_sync_pnp</a>,\r
+ <a href="#robo502">cl_irp_skip</a>, <a href="#robo500">cl_irp_complete</a>, <a href="#robo504">cl_irp_unsupported</a>, cl_irp_fail\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo499">[Definitions]<a name="Component20Library3a20Plug20and20Play2fcl5fvfptr5fquery5ftxt">\r
+Component Library: Plug and Play/cl_vfptr_query_txt</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../../robo_definitions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_vfptr_query_txt</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Function pointer table for the various type of text requested by\r
+ IRP_MN_QUERY_DEVICE_TEXT IRPs.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef struct _<strong>cl_vfptr_query_txt</strong>\r
+{\r
+ <a href="#robo492">cl_pfn_query_text_t</a> pfn_query_device_id;\r
+ <a href="#robo492">cl_pfn_query_text_t</a> pfn_query_hardware_id;\r
+ <a href="#robo492">cl_pfn_query_text_t</a> pfn_query_compatible_id;\r
+ <a href="#robo492">cl_pfn_query_text_t</a> pfn_query_unique_id;\r
+ <a href="#robo492">cl_pfn_query_text_t</a> pfn_query_description;\r
+ <a href="#robo492">cl_pfn_query_text_t</a> pfn_query_location;\r
+\r
+} cl_vfptr_query_txt_t;\r
+</pre>\r
+</span><p><strong>FIELDS</strong></p>\r
+<span class="FIELDS"><pre> pfn_query_device_id\r
+ The request is for the target device's device ID.\r
+\r
+ pfn_query_hardware_id\r
+ The request is for the target device's device IDs.\r
+\r
+ pfn_query_compatible_id\r
+ The request is for the target device's comptible IDs.\r
+\r
+ pfn_query_unique_id\r
+ The request is for the target device's unique ID.\r
+\r
+ pfn_query_description\r
+ The request is for the target device's description.\r
+\r
+ pfn_query_location\r
+ The request is for the target device's location text.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> Hardware and compatible IDs should be returned in the most specific to\r
+ most general order. The IDs are used to match drivers to devices.\r
+\r
+ The query text function pointer table is maintained separately from the\r
+ PnP function pointer table to allow FDO and filter drivers to not define\r
+ the table since they typically do not handle these requests.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Plug and Play, <a href="#robo492">cl_pfn_query_text_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo500">[Functions]<a name="Component20Library3a20Plug20and20Play3a2fcl5firp5fcomplete">\r
+Component Library: Plug and Play:/cl_irp_complete</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_irp_complete</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Default handler for completeing a PnP or Power Management IRP with no \r
+ action. Should only be used by bus drivers for their PDOs to complete \r
+ an IRP with no change in status.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT NTSTATUS\r
+<strong>cl_irp_complete</strong>(\r
+ IN DEVICE_OBJECT* const p_dev_obj,\r
+ IN IRP* const p_irp, \r
+ OUT <a href="#robo490">cl_irp_action_t</a>* const p_action );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_dev_obj\r
+ Pointer to the device object that is the IRP target.\r
+\r
+ p_irp\r
+ Pointer to the request IRP.\r
+\r
+ p_action\r
+ Action to take for propagating the IRP.\r
+\r
+ RETURN VALUES\r
+ IRP status value.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Plug and Play, <a href="#robo490">cl_irp_action_t</a>, <a href="#robo498">cl_vfptr_pnp_po_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo501">[Functions]<a name="Component20Library3a20Plug20and20Play3a2fcl5firp5fignore">\r
+Component Library: Plug and Play:/cl_irp_ignore</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_irp_ignore</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Default function for skipping a PnP IRP without setting the IRP's status.\r
+ Useable only by function and filter drivers. Bus drivers should use \r
+ <a href="#robo500">cl_irp_complete</a> for their PDOs to complete an IRP with no change in status.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT NTSTATUS\r
+<strong>cl_irp_ignore</strong>(\r
+ IN DEVICE_OBJECT* const p_dev_obj,\r
+ IN IRP* const p_irp, \r
+ OUT <a href="#robo490">cl_irp_action_t</a>* const p_action );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_dev_obj\r
+ Pointer to the device object that is the IRP target.\r
+\r
+ p_irp\r
+ Pointer to the request IRP.\r
+\r
+ p_action\r
+ Action to take for propagating the IRP.\r
+\r
+ RETURN VALUES\r
+ IRP status value.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Plug and Play, <a href="#robo490">cl_irp_action_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo502">[Functions]<a name="Component20Library3a20Plug20and20Play3a2fcl5firp5fskip">\r
+Component Library: Plug and Play:/cl_irp_skip</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_irp_skip</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Default function for skipping a PnP IRP. Sets the IRP's status value.\r
+ Useable only by function and filter drivers. Bus drivers should use \r
+ <a href="#robo500">cl_irp_complete</a> for their PDOs to complete an IRP with no change in status.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT NTSTATUS\r
+<strong>cl_irp_skip</strong>(\r
+ IN DEVICE_OBJECT* const p_dev_obj,\r
+ IN IRP* const p_irp, \r
+ OUT <a href="#robo490">cl_irp_action_t</a>* const p_action );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_dev_obj\r
+ Pointer to the device object that is the IRP target.\r
+\r
+ p_irp\r
+ Pointer to the request IRP.\r
+\r
+ p_action\r
+ Action to take for propagating the IRP.\r
+\r
+ RETURN VALUES\r
+ IRP status value.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Plug and Play, <a href="#robo490">cl_irp_action_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo503">[Functions]<a name="Component20Library3a20Plug20and20Play3a2fcl5firp5fsucceed">\r
+Component Library: Plug and Play:/cl_irp_succeed</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_irp_succeed</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Default handler for succeeding an IRP with STATUS_SUCCESS.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT NTSTATUS\r
+<strong>cl_irp_succeed</strong>(\r
+ IN DEVICE_OBJECT* const p_dev_obj,\r
+ IN IRP* const p_irp, \r
+ OUT <a href="#robo490">cl_irp_action_t</a>* const p_action );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_dev_obj\r
+ Pointer to the device object that is the IRP target.\r
+\r
+ p_irp\r
+ Pointer to the request IRP.\r
+\r
+ p_action\r
+ Action to take for propagating the IRP.\r
+\r
+ RETURN VALUES\r
+ IRP status value.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Plug and Play, <a href="#robo490">cl_irp_action_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo504">[Functions]<a name="Component20Library3a20Plug20and20Play3a2fcl5firp5funsupported">\r
+Component Library: Plug and Play:/cl_irp_unsupported</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_irp_unsupported</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Default handler for failing an IRP with STATUS_UNSUPPORTED.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT NTSTATUS\r
+<strong>cl_irp_unsupported</strong>(\r
+ IN DEVICE_OBJECT* const p_dev_obj,\r
+ IN IRP* const p_irp, \r
+ OUT <a href="#robo490">cl_irp_action_t</a>* const p_action );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_dev_obj\r
+ Pointer to the device object that is the IRP target.\r
+\r
+ p_irp\r
+ Pointer to the request IRP.\r
+\r
+ p_action\r
+ Action to take for propagating the IRP.\r
+\r
+ RETURN VALUES\r
+ IRP status value.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Plug and Play, <a href="#robo490">cl_irp_action_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo505">[Functions]<a name="Component20Library3a20Plug20and20Play3a2fcl5fpnp">\r
+Component Library: Plug and Play:/cl_pnp</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_pnp</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Main PnP entry point for the driver.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT NTSTATUS\r
+<strong>cl_pnp</strong>(\r
+ IN PDEVICE_OBJECT p_dev_obj,\r
+ IN PIRP p_irp );\r
+/*\r
+* PARAMTETERS\r
+* p_dev_obj\r
+* Pointer to the device object that is the target of the PnP IRP.\r
+*\r
+* p_irp\r
+* Pointer to the PnP IRP to perform on the specified device.\r
+*\r
+* RETURN VALUES\r
+* STATUS_SUCCESS if the operation is successful\r
+*\r
+* Other NTSTATUS values in case of error.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Plug and Play\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo506">[Functions]<a name="Component20Library3a20Plug20and20Play3a2fcl5fpower">\r
+Component Library: Plug and Play:/cl_power</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>cl_power</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Main Power Management entry point for the driver.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>CL_EXPORT NTSTATUS\r
+<strong>cl_power</strong>(\r
+ IN PDEVICE_OBJECT p_dev_obj,\r
+ IN PIRP p_irp );\r
+/*\r
+* PARAMTETERS\r
+* p_dev_obj\r
+* Pointer to the device object that is the target of the PnP IRP.\r
+*\r
+* p_irp\r
+* Pointer to the PnP IRP to perform on the specified device.\r
+*\r
+* RETURN VALUES\r
+* STATUS_SUCCESS if the operation is successful\r
+*\r
+* Other NTSTATUS values in case of error.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> Plug and Play\r
+</pre>\r
+</span>\r
+</body>\r
+</html>\r
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">\r
+<html>\r
+<head>\r
+<link rel="stylesheet" href="../../robodoc.css" type="text/css">\r
+<title>./inc_doc/kernel/iba/ib_al_ifc_h.html</title>\r
+<!-- Source: ./inc/kernel/iba/ib_al_ifc.h -->\r
+<!-- Generated with ROBODoc Version 4.99.22 (Mar 6 2006) -->\r
+</head>\r
+<body bgcolor="#FFFFFF">\r
+<a name="robo_top_of_doc">Generated from ./inc/kernel/iba/ib_al_ifc.h</a> with <a href="http://sourceforge.net/projects/robodoc/">ROBODoc</a> v4.99.22 on Sun Apr 16 2006 17:39:23\r
+<br />\r
+<hr />\r
+\r
+<h2><a name="robo0">[Modules]<a name="Access20Layer2fib5fal5fifc2eh">\r
+Access Layer/ib_al_ifc.h</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../../robo_modules.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_al_ifc.h</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Header file for the interface exported to ICT client drivers for access to\r
+ IB resources provided by HCAs.\r
+</pre>\r
+</span>\r
+</body>\r
+</html>\r
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">\r
+<html>\r
+<head>\r
+<link rel="stylesheet" href="../../robodoc.css" type="text/css">\r
+<title>./inc_doc/kernel/iba/ib_ci_ifc_h.html</title>\r
+<!-- Source: ./inc/kernel/iba/ib_ci_ifc.h -->\r
+<!-- Generated with ROBODoc Version 4.99.22 (Mar 6 2006) -->\r
+</head>\r
+<body bgcolor="#FFFFFF">\r
+<a name="robo_top_of_doc">Generated from ./inc/kernel/iba/ib_ci_ifc.h</a> with <a href="http://sourceforge.net/projects/robodoc/">ROBODoc</a> v4.99.22 on Sun Apr 16 2006 17:39:23\r
+<br />\r
+<hr />\r
+\r
+<h2><a name="robo1">[Modules]<a name="Access20Layer2fib5fci5fifc2eh">\r
+Access Layer/ib_ci_ifc.h</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../../robo_modules.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ib_ci_ifc.h</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Header file for the interface exported to HCA drivers to allow them\r
+ to register with AL for use by AL clients.\r
+</pre>\r
+</span>\r
+</body>\r
+</html>\r
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">\r
+<html>\r
+<head>\r
+<link rel="stylesheet" href="../../robodoc.css" type="text/css">\r
+<title>./inc_doc/kernel/iba/ioc_ifc_h.html</title>\r
+<!-- Source: ./inc/kernel/iba/ioc_ifc.h -->\r
+<!-- Generated with ROBODoc Version 4.99.22 (Mar 6 2006) -->\r
+</head>\r
+<body bgcolor="#FFFFFF">\r
+<a name="robo_top_of_doc">Generated from ./inc/kernel/iba/ioc_ifc.h</a> with <a href="http://sourceforge.net/projects/robodoc/">ROBODoc</a> v4.99.22 on Sun Apr 16 2006 17:39:19\r
+<br />\r
+<hr />\r
+\r
+<h2><a name="robo2">[Modules]<a name="Access20Layer2fioc5fifc2eh">\r
+Access Layer/ioc_ifc.h</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../../robo_modules.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ioc_ifc.h</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Header file for the interface exported to IOC client drivers to retrieve\r
+ IOC device information.\r
+\r
+ The interface contains information about the particular instance of an IOC.\r
+</pre>\r
+</span>\r
+</body>\r
+</html>\r
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">\r
+<html>\r
+<head>\r
+<link rel="stylesheet" href="../../robodoc.css" type="text/css">\r
+<title>./inc_doc/kernel/iba/iou_ifc_h.html</title>\r
+<!-- Source: ./inc/kernel/iba/iou_ifc.h -->\r
+<!-- Generated with ROBODoc Version 4.99.22 (Mar 6 2006) -->\r
+</head>\r
+<body bgcolor="#FFFFFF">\r
+<a name="robo_top_of_doc">Generated from ./inc/kernel/iba/iou_ifc.h</a> with <a href="http://sourceforge.net/projects/robodoc/">ROBODoc</a> v4.99.22 on Sun Apr 16 2006 17:39:19\r
+<br />\r
+<hr />\r
+\r
+<h2><a name="robo3">[Modules]<a name="Access20Layer2fiou5fifc2eh">\r
+Access Layer/iou_ifc.h</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../../robo_modules.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>iou_ifc.h</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Header file for the interface exported to IOU client drivers to retrieve\r
+ IOU device information.\r
+\r
+ The interface contains information about the particular instance of an IOU.\r
+</pre>\r
+</span>\r
+</body>\r
+</html>\r
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">\r
+<html>\r
+<head>\r
+<link rel="stylesheet" href="../../robodoc.css" type="text/css">\r
+<title>./inc_doc/kernel/iba/ipoib_ifc_h.html</title>\r
+<!-- Source: ./inc/kernel/iba/ipoib_ifc.h -->\r
+<!-- Generated with ROBODoc Version 4.99.22 (Mar 6 2006) -->\r
+</head>\r
+<body bgcolor="#FFFFFF">\r
+<a name="robo_top_of_doc">Generated from ./inc/kernel/iba/ipoib_ifc.h</a> with <a href="http://sourceforge.net/projects/robodoc/">ROBODoc</a> v4.99.22 on Sun Apr 16 2006 17:39:19\r
+<br />\r
+<hr />\r
+\r
+<h2><a name="robo4">[Modules]<a name="Access20Layer2fipoib5fifc2eh">\r
+Access Layer/ipoib_ifc.h</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../../robo_modules.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>ipoib_ifc.h</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Header file for the interface exported to IPoIB client drivers for access\r
+ to IB resources provided by HCAs.\r
+\r
+ The actual interface returned is an contains information about the\r
+ particular instance of an IPoIB device.\r
+</pre>\r
+</span>\r
+</body>\r
+</html>\r
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">\r
+<html>\r
+<head>\r
+<link rel="stylesheet" href="./robodoc.css" type="text/css">\r
+<title>Index</title>\r
+<!-- Source: ./inc/ -->\r
+<!-- Generated with ROBODoc Version 4.99.22 (Mar 6 2006) -->\r
+</head>\r
+<body bgcolor="#FFFFFF">\r
+<a name="robo_top_of_doc">Generated from ./inc/</a> with <a href="http://sourceforge.net/projects/robodoc/">ROBODoc</a> v4.99.22 on Sun Apr 16 2006 17:39:25\r
+<br />\r
+<p>\r
+[<a href="./robo_sourcefiles.html#top">Sourcefiles</a>]\r
+[<a href="#top">Index</a>]\r
+[<a href="./robo_definitions.html#top">Definitions</a>]\r
+[<a href="./robo_functions.html#top">Functions</a>]\r
+[<a href="./robo_modules.html#top">Modules</a>]\r
+[<a href="./robo_strutures.html#top">Structures</a>]\r
+</p>\r
+<h1>Index</h1>\r
+<table cellspacing="3">\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_debug_h.html#robo305"><tt>\r
+64-bit Print Format</tt></a></td>\r
+<td class="even"><a href="./complib/cl_async_proc_h.html#robo6"><tt>\r
+Asynchronous Processor</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_atomic_h.html#robo7"><tt>\r
+Atomic Operations</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_al_h.html#robo44"><tt>\r
+ATS</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_byteswap_h.html#robo8"><tt>\r
+Byte Swapping</tt></a></td>\r
+<td class="even"><a href="./iba/ib_ci_h.html#robo1109"><tt>\r
+ci_allocate_pd</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_ci_h.html#robo1110"><tt>\r
+ci_async_event_cb_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_ci_h.html#robo1111"><tt>\r
+ci_attach_mcast</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_ci_h.html#robo1112"><tt>\r
+ci_bind_mw</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_ci_h.html#robo1113"><tt>\r
+ci_close_ca</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_ci_h.html#robo1114"><tt>\r
+ci_completion_cb_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_ci_h.html#robo1115"><tt>\r
+ci_create_av</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_ci_h.html#robo1116"><tt>\r
+ci_create_cq</tt></a></td>\r
+<td class="even"><a href="./iba/ib_ci_h.html#robo1117"><tt>\r
+ci_create_mw</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_ci_h.html#robo1118"><tt>\r
+ci_create_qp</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_ci_h.html#robo1119"><tt>\r
+ci_create_spl_qp</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_ci_h.html#robo1120"><tt>\r
+ci_deallocate_pd</tt></a></td>\r
+<td class="even"><a href="./iba/ib_ci_h.html#robo1121"><tt>\r
+ci_deregister_mr</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_ci_h.html#robo1122"><tt>\r
+ci_destroy_av</tt></a></td>\r
+<td class="even"><a href="./iba/ib_ci_h.html#robo1123"><tt>\r
+ci_destroy_cq</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_ci_h.html#robo1124"><tt>\r
+ci_destroy_mw</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_ci_h.html#robo1125"><tt>\r
+ci_destroy_qp</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_ci_h.html#robo1126"><tt>\r
+ci_detach_mcast</tt></a></td>\r
+<td class="even"><a href="./iba/ib_ci_h.html#robo1127"><tt>\r
+ci_enable_cq_notify</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_ci_h.html#robo1128"><tt>\r
+ci_enable_ncomp_cq_notify</tt></a></td>\r
+<td class="even"><a href="./iba/ib_ci_h.html#robo1129"><tt>\r
+ci_interface_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_ci_h.html#robo1130"><tt>\r
+ci_local_mad</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_ci_h.html#robo1131"><tt>\r
+ci_modify_av</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_ci_h.html#robo1132"><tt>\r
+ci_modify_ca</tt></a></td>\r
+<td class="even"><a href="./iba/ib_ci_h.html#robo1133"><tt>\r
+ci_modify_mr</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_ci_h.html#robo1134"><tt>\r
+ci_modify_pmr</tt></a></td>\r
+<td class="even"><a href="./iba/ib_ci_h.html#robo1135"><tt>\r
+ci_modify_qp</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_ci_h.html#robo1136"><tt>\r
+ci_open_ca</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_ci_h.html#robo1137"><tt>\r
+ci_peek_cq</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_ci_h.html#robo1138"><tt>\r
+ci_poll_cq</tt></a></td>\r
+<td class="even"><a href="./iba/ib_ci_h.html#robo1139"><tt>\r
+ci_post_recv</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_ci_h.html#robo1140"><tt>\r
+ci_post_send</tt></a></td>\r
+<td class="even"><a href="./iba/ib_ci_h.html#robo1141"><tt>\r
+ci_query_av</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_ci_h.html#robo1142"><tt>\r
+ci_query_ca</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_ci_h.html#robo1143"><tt>\r
+ci_query_cq</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_ci_h.html#robo1144"><tt>\r
+ci_query_mr</tt></a></td>\r
+<td class="even"><a href="./iba/ib_ci_h.html#robo1145"><tt>\r
+ci_query_mw</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_ci_h.html#robo1146"><tt>\r
+ci_query_qp</tt></a></td>\r
+<td class="even"><a href="./iba/ib_ci_h.html#robo1147"><tt>\r
+ci_register_mr</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_ci_h.html#robo1148"><tt>\r
+ci_register_pmr</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_ci_h.html#robo1149"><tt>\r
+ci_register_smr</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_ci_h.html#robo1150"><tt>\r
+ci_resize_cq</tt></a></td>\r
+<td class="even"><a href="./iba/ib_ci_h.html#robo1151"><tt>\r
+ci_um_close_ca_t</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_ci_h.html#robo1152"><tt>\r
+ci_um_open_ca</tt></a></td>\r
+<td class="even"><a href="./iba/ib_ci_h.html#robo1153"><tt>\r
+ci_umv_buf_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_ci_h.html#robo1154"><tt>\r
+ci_vendor_call</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./kernel/complib/cl_pnp_po_h.html#robo485"><tt>\r
+cl_alloc_relations</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_async_proc_h.html#robo_top_of_doc"><tt>\r
+cl_async_proc.h</tt></a></td>\r
+<td class="even"><a href="./complib/cl_async_proc_h.html#robo266"><tt>\r
+cl_async_proc_construct</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_async_proc_h.html#robo267"><tt>\r
+cl_async_proc_destroy</tt></a></td>\r
+<td class="even"><a href="./complib/cl_async_proc_h.html#robo268"><tt>\r
+cl_async_proc_init</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_async_proc_h.html#robo269"><tt>\r
+cl_async_proc_item_t</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_async_proc_h.html#robo270"><tt>\r
+cl_async_proc_queue</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_async_proc_h.html#robo271"><tt>\r
+cl_async_proc_t</tt></a></td>\r
+<td class="even"><a href="./complib/cl_atomic_h.html#robo_top_of_doc"><tt>\r
+cl_atomic.h</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_atomic_h.html#robo273"><tt>\r
+cl_atomic_add</tt></a></td>\r
+<td class="even"><a href="./complib/cl_atomic_h.html#robo274"><tt>\r
+cl_atomic_comp_xchg</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_atomic_h.html#robo275"><tt>\r
+cl_atomic_dec</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_atomic_h.html#robo276"><tt>\r
+cl_atomic_inc</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_atomic_h.html#robo277"><tt>\r
+cl_atomic_sub</tt></a></td>\r
+<td class="even"><a href="./complib/cl_atomic_h.html#robo278"><tt>\r
+cl_atomic_xchg</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_debug_h.html#robo306"><tt>\r
+cl_break</tt></a></td>\r
+<td class="even"><a href="./kernel/complib/cl_bus_ifc_h.html#robo_top_of_doc"><tt>\r
+cl_bus_ifc.h</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_byteswap_h.html#robo_top_of_doc"><tt>\r
+cl_byteswap.h</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_memory_h.html#robo420"><tt>\r
+cl_check_for_read</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_memory_h.html#robo421"><tt>\r
+cl_check_for_write</tt></a></td>\r
+<td class="even"><a href="./complib/cl_comppool_h.html#robo_top_of_doc"><tt>\r
+cl_comppool.h</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_memory_h.html#robo422"><tt>\r
+cl_copy_from_user</tt></a></td>\r
+<td class="even"><a href="./complib/cl_memory_h.html#robo423"><tt>\r
+cl_copy_to_user</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_comppool_h.html#robo292"><tt>\r
+cl_cpool_construct</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_comppool_h.html#robo293"><tt>\r
+cl_cpool_count</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_comppool_h.html#robo294"><tt>\r
+cl_cpool_destroy</tt></a></td>\r
+<td class="even"><a href="./complib/cl_comppool_h.html#robo295"><tt>\r
+cl_cpool_get</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_comppool_h.html#robo296"><tt>\r
+cl_cpool_grow</tt></a></td>\r
+<td class="even"><a href="./complib/cl_comppool_h.html#robo297"><tt>\r
+cl_cpool_init</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_comppool_h.html#robo298"><tt>\r
+cl_cpool_put</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_comppool_h.html#robo299"><tt>\r
+cl_cpool_t</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_debug_h.html#robo307"><tt>\r
+cl_dbg_out</tt></a></td>\r
+<td class="even"><a href="./complib/cl_debug_h.html#robo_top_of_doc"><tt>\r
+cl_debug.h</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_obj_h.html#robo442"><tt>\r
+cl_destroy_type_t</tt></a></td>\r
+<td class="even"><a href="./kernel/complib/cl_pnp_po_h.html#robo486"><tt>\r
+cl_do_remove</tt></a></td>\r
+<td class="uneven"><a href="./kernel/complib/cl_pnp_po_h.html#robo487"><tt>\r
+cl_do_sync_pnp</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_debug_h.html#robo308"><tt>\r
+CL_ENTER</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_event_h.html#robo_top_of_doc"><tt>\r
+cl_event.h</tt></a></td>\r
+<td class="even"><a href="./complib/cl_event_h.html#robo316"><tt>\r
+cl_event_construct</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_event_h.html#robo317"><tt>\r
+cl_event_destroy</tt></a></td>\r
+<td class="even"><a href="./complib/cl_event_h.html#robo318"><tt>\r
+cl_event_init</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_event_h.html#robo319"><tt>\r
+cl_event_reset</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_event_h.html#robo320"><tt>\r
+cl_event_signal</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_event_h.html#robo321"><tt>\r
+cl_event_wait_on</tt></a></td>\r
+<td class="even"><a href="./complib/cl_debug_h.html#robo309"><tt>\r
+CL_EXIT</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_fleximap_h.html#robo_top_of_doc"><tt>\r
+cl_fleximap.h</tt></a></td>\r
+<td class="even"><a href="./complib/cl_fleximap_h.html#robo323"><tt>\r
+cl_fmap_apply_func</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_fleximap_h.html#robo324"><tt>\r
+cl_fmap_count</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_fleximap_h.html#robo325"><tt>\r
+cl_fmap_delta</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_fleximap_h.html#robo326"><tt>\r
+cl_fmap_end</tt></a></td>\r
+<td class="even"><a href="./complib/cl_fleximap_h.html#robo327"><tt>\r
+cl_fmap_get</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_fleximap_h.html#robo328"><tt>\r
+cl_fmap_head</tt></a></td>\r
+<td class="even"><a href="./complib/cl_fleximap_h.html#robo329"><tt>\r
+cl_fmap_init</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_fleximap_h.html#robo330"><tt>\r
+cl_fmap_insert</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_fleximap_h.html#robo331"><tt>\r
+cl_fmap_item_t</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_fleximap_h.html#robo332"><tt>\r
+cl_fmap_key</tt></a></td>\r
+<td class="even"><a href="./complib/cl_fleximap_h.html#robo333"><tt>\r
+cl_fmap_merge</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_fleximap_h.html#robo334"><tt>\r
+cl_fmap_next</tt></a></td>\r
+<td class="even"><a href="./complib/cl_fleximap_h.html#robo335"><tt>\r
+cl_fmap_prev</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_fleximap_h.html#robo336"><tt>\r
+cl_fmap_remove</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_fleximap_h.html#robo337"><tt>\r
+cl_fmap_remove_all</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_fleximap_h.html#robo338"><tt>\r
+cl_fmap_remove_item</tt></a></td>\r
+<td class="even"><a href="./complib/cl_fleximap_h.html#robo339"><tt>\r
+cl_fmap_t</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_fleximap_h.html#robo340"><tt>\r
+cl_fmap_tail</tt></a></td>\r
+<td class="even"><a href="./complib/cl_memory_h.html#robo424"><tt>\r
+cl_free</tt></a></td>\r
+<td class="uneven"><a href="./kernel/complib/cl_bus_ifc_h.html#robo488"><tt>\r
+cl_fwd_query_ifc</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_memory_h.html#robo425"><tt>\r
+cl_get_pagesize</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_memory_h.html#robo426"><tt>\r
+cl_get_physaddr</tt></a></td>\r
+<td class="even"><a href="./complib/cl_timer_h.html#robo668"><tt>\r
+cl_get_tick_count</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_timer_h.html#robo669"><tt>\r
+cl_get_tick_freq</tt></a></td>\r
+<td class="even"><a href="./complib/cl_timer_h.html#robo670"><tt>\r
+cl_get_time_stamp</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_timer_h.html#robo671"><tt>\r
+cl_get_time_stamp_sec</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_timer_h.html#robo672"><tt>\r
+cl_get_time_stamp_usec</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_byteswap_h.html#robo280"><tt>\r
+cl_hton16</tt></a></td>\r
+<td class="even"><a href="./complib/cl_byteswap_h.html#robo279"><tt>\r
+CL_HTON16</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_byteswap_h.html#robo282"><tt>\r
+CL_HTON32</tt></a></td>\r
+<td class="even"><a href="./complib/cl_byteswap_h.html#robo281"><tt>\r
+cl_hton32</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_byteswap_h.html#robo283"><tt>\r
+CL_HTON64</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_byteswap_h.html#robo284"><tt>\r
+cl_hton64</tt></a></td>\r
+<td class="uneven"><a href="./kernel/complib/cl_pnp_po_h.html#robo489"><tt>\r
+cl_init_pnp_po_ext</tt></a></td>\r
+<td class="even"><a href="./complib/cl_ioctl_h.html#robo_top_of_doc"><tt>\r
+cl_ioctl.h</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_ioctl_h.html#robo344"><tt>\r
+cl_ioctl_cmd</tt></a></td>\r
+<td class="even"><a href="./complib/cl_ioctl_h.html#robo345"><tt>\r
+cl_ioctl_complete</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_ioctl_h.html#robo346"><tt>\r
+cl_ioctl_ctl_code</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_ioctl_h.html#robo347"><tt>\r
+cl_ioctl_handle_t</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_ioctl_h.html#robo348"><tt>\r
+cl_ioctl_in_buf</tt></a></td>\r
+<td class="even"><a href="./complib/cl_ioctl_h.html#robo349"><tt>\r
+cl_ioctl_in_size</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_ioctl_h.html#robo350"><tt>\r
+cl_ioctl_out_buf</tt></a></td>\r
+<td class="even"><a href="./complib/cl_ioctl_h.html#robo351"><tt>\r
+cl_ioctl_out_size</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_ioctl_h.html#robo352"><tt>\r
+cl_ioctl_process</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_ioctl_h.html#robo353"><tt>\r
+cl_ioctl_request</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_ioctl_h.html#robo354"><tt>\r
+cl_ioctl_result</tt></a></td>\r
+<td class="even"><a href="./complib/cl_ioctl_h.html#robo355"><tt>\r
+cl_ioctl_type</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./kernel/complib/cl_pnp_po_h.html#robo490"><tt>\r
+cl_irp_action_t</tt></a></td>\r
+<td class="even"><a href="./kernel/complib/cl_pnp_po_h.html#robo500"><tt>\r
+cl_irp_complete</tt></a></td>\r
+<td class="uneven"><a href="./kernel/complib/cl_pnp_po_h.html#robo501"><tt>\r
+cl_irp_ignore</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./kernel/complib/cl_pnp_po_h.html#robo502"><tt>\r
+cl_irp_skip</tt></a></td>\r
+<td class="uneven"><a href="./kernel/complib/cl_pnp_po_h.html#robo503"><tt>\r
+cl_irp_succeed</tt></a></td>\r
+<td class="even"><a href="./kernel/complib/cl_pnp_po_h.html#robo504"><tt>\r
+cl_irp_unsupported</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_irqlock_h.html#robo_top_of_doc"><tt>\r
+cl_irqlock.h</tt></a></td>\r
+<td class="even"><a href="./complib/cl_irqlock_h.html#robo358"><tt>\r
+cl_irqlock_acquire</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_irqlock_h.html#robo359"><tt>\r
+cl_irqlock_construct</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_irqlock_h.html#robo360"><tt>\r
+cl_irqlock_destroy</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_irqlock_h.html#robo361"><tt>\r
+cl_irqlock_init</tt></a></td>\r
+<td class="even"><a href="./complib/cl_irqlock_h.html#robo362"><tt>\r
+cl_irqlock_release</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_thread_h.html#robo663"><tt>\r
+cl_is_blockable</tt></a></td>\r
+<td class="even"><a href="./complib/cl_comppool_h.html#robo300"><tt>\r
+cl_is_cpool_inited</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_fleximap_h.html#robo341"><tt>\r
+cl_is_fmap_empty</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_qlist_h.html#robo552"><tt>\r
+cl_is_item_in_qlist</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_list_h.html#robo363"><tt>\r
+cl_is_list_empty</tt></a></td>\r
+<td class="even"><a href="./complib/cl_list_h.html#robo364"><tt>\r
+cl_is_list_inited</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_map_h.html#robo396"><tt>\r
+cl_is_map_empty</tt></a></td>\r
+<td class="even"><a href="./complib/cl_map_h.html#robo322"><tt>\r
+cl_is_map_inited</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_list_h.html#robo365"><tt>\r
+cl_is_object_in_list</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_pool_h.html#robo528"><tt>\r
+cl_is_pool_inited</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_qcomppool_h.html#robo539"><tt>\r
+cl_is_qcpool_inited</tt></a></td>\r
+<td class="even"><a href="./complib/cl_qlist_h.html#robo553"><tt>\r
+cl_is_qlist_empty</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_qmap_h.html#robo592"><tt>\r
+cl_is_qmap_empty</tt></a></td>\r
+<td class="even"><a href="./complib/cl_qpool_h.html#robo615"><tt>\r
+cl_is_qpool_inited</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_rbmap_h.html#robo627"><tt>\r
+cl_is_rbmap_empty</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_types_h.html#robo441"><tt>\r
+cl_is_state_valid</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_syscallback_h.html#robo653"><tt>\r
+cl_is_sys_callback_inited</tt></a></td>\r
+<td class="even"><a href="./complib/cl_list_h.html#robo_top_of_doc"><tt>\r
+cl_list.h</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_list_h.html#robo366"><tt>\r
+cl_list_apply_func</tt></a></td>\r
+<td class="even"><a href="./complib/cl_list_h.html#robo367"><tt>\r
+cl_list_construct</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_list_h.html#robo368"><tt>\r
+cl_list_count</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_list_h.html#robo369"><tt>\r
+cl_list_destroy</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_list_h.html#robo370"><tt>\r
+cl_list_end</tt></a></td>\r
+<td class="even"><a href="./complib/cl_list_h.html#robo371"><tt>\r
+cl_list_find_from_head</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_list_h.html#robo372"><tt>\r
+cl_list_find_from_tail</tt></a></td>\r
+<td class="even"><a href="./complib/cl_list_h.html#robo373"><tt>\r
+cl_list_head</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_list_h.html#robo374"><tt>\r
+cl_list_init</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_list_h.html#robo375"><tt>\r
+cl_list_insert_array_head</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_list_h.html#robo376"><tt>\r
+cl_list_insert_array_tail</tt></a></td>\r
+<td class="even"><a href="./complib/cl_list_h.html#robo377"><tt>\r
+cl_list_insert_head</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_list_h.html#robo378"><tt>\r
+cl_list_insert_next</tt></a></td>\r
+<td class="even"><a href="./complib/cl_list_h.html#robo379"><tt>\r
+cl_list_insert_prev</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_list_h.html#robo380"><tt>\r
+cl_list_insert_tail</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_qlist_h.html#robo554"><tt>\r
+cl_list_item_t</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_list_h.html#robo381"><tt>\r
+cl_list_iterator_t</tt></a></td>\r
+<td class="even"><a href="./complib/cl_list_h.html#robo382"><tt>\r
+cl_list_next</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_list_h.html#robo383"><tt>\r
+cl_list_obj</tt></a></td>\r
+<td class="even"><a href="./complib/cl_qlist_h.html#robo555"><tt>\r
+cl_list_obj_t</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_list_h.html#robo384"><tt>\r
+cl_list_prev</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_list_h.html#robo385"><tt>\r
+cl_list_remove_all</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_list_h.html#robo386"><tt>\r
+cl_list_remove_head</tt></a></td>\r
+<td class="even"><a href="./complib/cl_list_h.html#robo387"><tt>\r
+cl_list_remove_item</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_list_h.html#robo388"><tt>\r
+cl_list_remove_object</tt></a></td>\r
+<td class="even"><a href="./complib/cl_list_h.html#robo389"><tt>\r
+cl_list_remove_tail</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_list_h.html#robo390"><tt>\r
+cl_list_t</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_list_h.html#robo391"><tt>\r
+cl_list_tail</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_log_h.html#robo_top_of_doc"><tt>\r
+cl_log.h</tt></a></td>\r
+<td class="even"><a href="./complib/cl_log_h.html#robo394"><tt>\r
+cl_log_event</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_log_h.html#robo395"><tt>\r
+cl_log_type_t</tt></a></td>\r
+<td class="even"><a href="./complib/cl_memory_h.html#robo427"><tt>\r
+cl_malloc</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_map_h.html#robo_top_of_doc"><tt>\r
+cl_map.h</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_map_h.html#robo397"><tt>\r
+cl_map_construct</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_map_h.html#robo398"><tt>\r
+cl_map_count</tt></a></td>\r
+<td class="even"><a href="./complib/cl_map_h.html#robo399"><tt>\r
+cl_map_delta</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_map_h.html#robo400"><tt>\r
+cl_map_destroy</tt></a></td>\r
+<td class="even"><a href="./complib/cl_map_h.html#robo401"><tt>\r
+cl_map_end</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_map_h.html#robo402"><tt>\r
+cl_map_get</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_map_h.html#robo403"><tt>\r
+cl_map_head</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_map_h.html#robo404"><tt>\r
+cl_map_init</tt></a></td>\r
+<td class="even"><a href="./complib/cl_map_h.html#robo405"><tt>\r
+cl_map_insert</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_qmap_h.html#robo593"><tt>\r
+cl_map_item_t</tt></a></td>\r
+<td class="even"><a href="./complib/cl_map_h.html#robo406"><tt>\r
+cl_map_iterator_t</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_map_h.html#robo407"><tt>\r
+cl_map_key</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_map_h.html#robo408"><tt>\r
+cl_map_merge</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_map_h.html#robo409"><tt>\r
+cl_map_next</tt></a></td>\r
+<td class="even"><a href="./complib/cl_map_h.html#robo410"><tt>\r
+cl_map_obj</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_qmap_h.html#robo594"><tt>\r
+cl_map_obj_t</tt></a></td>\r
+<td class="even"><a href="./complib/cl_map_h.html#robo411"><tt>\r
+cl_map_prev</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_map_h.html#robo412"><tt>\r
+cl_map_remove</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_map_h.html#robo413"><tt>\r
+cl_map_remove_all</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_map_h.html#robo414"><tt>\r
+cl_map_remove_item</tt></a></td>\r
+<td class="even"><a href="./complib/cl_map_h.html#robo415"><tt>\r
+cl_map_t</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_map_h.html#robo416"><tt>\r
+cl_map_tail</tt></a></td>\r
+<td class="even"><a href="./complib/cl_math_h.html#robo_top_of_doc"><tt>\r
+cl_math.h</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_memory_h.html#robo428"><tt>\r
+cl_mem_display</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_memory_h.html#robo429"><tt>\r
+cl_memclr</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_memory_h.html#robo430"><tt>\r
+cl_memcmp</tt></a></td>\r
+<td class="even"><a href="./complib/cl_memory_h.html#robo431"><tt>\r
+cl_memcpy</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_memory_h.html#robo_top_of_doc"><tt>\r
+cl_memory.h</tt></a></td>\r
+<td class="even"><a href="./complib/cl_memory_h.html#robo432"><tt>\r
+cl_memset</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_debug_h.html#robo310"><tt>\r
+cl_msg_out</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_mutex_h.html#robo_top_of_doc"><tt>\r
+cl_mutex.h</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_mutex_h.html#robo436"><tt>\r
+cl_mutex_acquire</tt></a></td>\r
+<td class="even"><a href="./complib/cl_mutex_h.html#robo437"><tt>\r
+cl_mutex_construct</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_mutex_h.html#robo438"><tt>\r
+cl_mutex_destroy</tt></a></td>\r
+<td class="even"><a href="./complib/cl_mutex_h.html#robo439"><tt>\r
+cl_mutex_init</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_mutex_h.html#robo440"><tt>\r
+cl_mutex_release</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_byteswap_h.html#robo285"><tt>\r
+cl_ntoh</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_byteswap_h.html#robo287"><tt>\r
+cl_ntoh16</tt></a></td>\r
+<td class="even"><a href="./complib/cl_byteswap_h.html#robo286"><tt>\r
+CL_NTOH16</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_byteswap_h.html#robo289"><tt>\r
+CL_NTOH32</tt></a></td>\r
+<td class="even"><a href="./complib/cl_byteswap_h.html#robo288"><tt>\r
+cl_ntoh32</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_byteswap_h.html#robo290"><tt>\r
+CL_NTOH64</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_byteswap_h.html#robo291"><tt>\r
+cl_ntoh64</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_obj_h.html#robo_top_of_doc"><tt>\r
+cl_obj.h</tt></a></td>\r
+<td class="even"><a href="./complib/cl_obj_h.html#robo443"><tt>\r
+cl_obj_construct</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_obj_h.html#robo444"><tt>\r
+cl_obj_deinit</tt></a></td>\r
+<td class="even"><a href="./complib/cl_obj_h.html#robo445"><tt>\r
+cl_obj_deref</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_obj_h.html#robo446"><tt>\r
+cl_obj_destroy</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_obj_h.html#robo447"><tt>\r
+cl_obj_init</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_obj_h.html#robo448"><tt>\r
+cl_obj_insert_rel</tt></a></td>\r
+<td class="even"><a href="./complib/cl_obj_h.html#robo449"><tt>\r
+cl_obj_insert_rel_parent_locked</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_obj_h.html#robo450"><tt>\r
+cl_obj_lock</tt></a></td>\r
+<td class="even"><a href="./complib/cl_obj_h.html#robo451"><tt>\r
+cl_obj_mgr_create</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_obj_h.html#robo452"><tt>\r
+cl_obj_mgr_destroy</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_obj_h.html#robo453"><tt>\r
+cl_obj_mgr_t</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_obj_h.html#robo454"><tt>\r
+cl_obj_ref</tt></a></td>\r
+<td class="even"><a href="./complib/cl_obj_h.html#robo455"><tt>\r
+cl_obj_rel_t</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_obj_h.html#robo456"><tt>\r
+cl_obj_remove_rel</tt></a></td>\r
+<td class="even"><a href="./complib/cl_obj_h.html#robo457"><tt>\r
+cl_obj_reset</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_obj_h.html#robo458"><tt>\r
+cl_obj_t</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_obj_h.html#robo459"><tt>\r
+cl_obj_type</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_obj_h.html#robo460"><tt>\r
+cl_obj_unlock</tt></a></td>\r
+<td class="even"><a href="./complib/cl_memory_h.html#robo433"><tt>\r
+cl_palloc</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_types_h.html#robo315"><tt>\r
+cl_panic</tt></a></td>\r
+<td class="even"><a href="./complib/cl_passivelock_h.html#robo_top_of_doc"><tt>\r
+cl_passivelock.h</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_perf_h.html#robo_top_of_doc"><tt>\r
+cl_perf.h</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_perf_h.html#robo471"><tt>\r
+cl_perf_clr</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_perf_h.html#robo472"><tt>\r
+cl_perf_construct</tt></a></td>\r
+<td class="even"><a href="./complib/cl_perf_h.html#robo473"><tt>\r
+cl_perf_destroy</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_perf_h.html#robo474"><tt>\r
+cl_perf_display</tt></a></td>\r
+<td class="even"><a href="./complib/cl_perf_h.html#robo475"><tt>\r
+cl_perf_inc</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_perf_h.html#robo476"><tt>\r
+cl_perf_init</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_perf_h.html#robo477"><tt>\r
+cl_perf_log</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_perf_h.html#robo478"><tt>\r
+cl_perf_reset</tt></a></td>\r
+<td class="even"><a href="./complib/cl_perf_h.html#robo479"><tt>\r
+cl_perf_start</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_perf_h.html#robo480"><tt>\r
+cl_perf_stop</tt></a></td>\r
+<td class="even"><a href="./complib/cl_perf_h.html#robo481"><tt>\r
+cl_perf_update</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_perf_h.html#robo482"><tt>\r
+cl_perf_update_ctr</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_async_proc_h.html#robo272"><tt>\r
+cl_pfn_async_proc_cb_t</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_comppool_h.html#robo301"><tt>\r
+cl_pfn_cpool_dtor_t</tt></a></td>\r
+<td class="even"><a href="./complib/cl_comppool_h.html#robo302"><tt>\r
+cl_pfn_cpool_init_t</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_fleximap_h.html#robo342"><tt>\r
+cl_pfn_fmap_apply_t</tt></a></td>\r
+<td class="even"><a href="./complib/cl_fleximap_h.html#robo343"><tt>\r
+cl_pfn_fmap_cmp_t</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_ioctl_h.html#robo356"><tt>\r
+cl_pfn_ioctl_handler_t</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_list_h.html#robo392"><tt>\r
+cl_pfn_list_apply_t</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_list_h.html#robo393"><tt>\r
+cl_pfn_list_find_t</tt></a></td>\r
+<td class="even"><a href="./complib/cl_obj_h.html#robo461"><tt>\r
+cl_pfn_obj_call_t</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./kernel/complib/cl_pnp_po_h.html#robo491"><tt>\r
+cl_pfn_pnp_po_t</tt></a></td>\r
+<td class="even"><a href="./complib/cl_pool_h.html#robo529"><tt>\r
+cl_pfn_pool_dtor_t</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_pool_h.html#robo530"><tt>\r
+cl_pfn_pool_init_t</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_ptr_vector_h.html#robo509"><tt>\r
+cl_pfn_ptr_vec_apply_t</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_ptr_vector_h.html#robo510"><tt>\r
+cl_pfn_ptr_vec_find_t</tt></a></td>\r
+<td class="even"><a href="./complib/cl_qcomppool_h.html#robo540"><tt>\r
+cl_pfn_qcpool_dtor_t</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_qcomppool_h.html#robo541"><tt>\r
+cl_pfn_qcpool_init_t</tt></a></td>\r
+<td class="even"><a href="./complib/cl_qlist_h.html#robo556"><tt>\r
+cl_pfn_qlist_apply_t</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_qlist_h.html#robo557"><tt>\r
+cl_pfn_qlist_find_t</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_qmap_h.html#robo595"><tt>\r
+cl_pfn_qmap_apply_t</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_qpool_h.html#robo616"><tt>\r
+cl_pfn_qpool_dtor_t</tt></a></td>\r
+<td class="even"><a href="./complib/cl_qpool_h.html#robo617"><tt>\r
+cl_pfn_qpool_init_t</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./kernel/complib/cl_pnp_po_h.html#robo492"><tt>\r
+cl_pfn_query_text_t</tt></a></td>\r
+<td class="even"><a href="./kernel/complib/cl_pnp_po_h.html#robo493"><tt>\r
+cl_pfn_release_resources_t</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_reqmgr_h.html#robo639"><tt>\r
+cl_pfn_req_cb_t</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_reqmgr_h.html#robo640"><tt>\r
+cl_pfn_reqmgr_get_count_t</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_syscallback_h.html#robo654"><tt>\r
+cl_pfn_sys_callback_t</tt></a></td>\r
+<td class="even"><a href="./complib/cl_thread_h.html#robo664"><tt>\r
+cl_pfn_thread_callback_t</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_timer_h.html#robo673"><tt>\r
+cl_pfn_timer_callback_t</tt></a></td>\r
+<td class="even"><a href="./complib/cl_vector_h.html#robo681"><tt>\r
+cl_pfn_vec_apply_t</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_vector_h.html#robo682"><tt>\r
+cl_pfn_vec_dtor_t</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_vector_h.html#robo683"><tt>\r
+cl_pfn_vec_find_t</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_vector_h.html#robo684"><tt>\r
+cl_pfn_vec_init_t</tt></a></td>\r
+<td class="even"><a href="./complib/cl_passivelock_h.html#robo464"><tt>\r
+cl_plock_acquire</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_passivelock_h.html#robo465"><tt>\r
+cl_plock_construct</tt></a></td>\r
+<td class="even"><a href="./complib/cl_passivelock_h.html#robo466"><tt>\r
+cl_plock_destroy</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_passivelock_h.html#robo467"><tt>\r
+cl_plock_excl_acquire</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_passivelock_h.html#robo468"><tt>\r
+cl_plock_init</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_passivelock_h.html#robo469"><tt>\r
+cl_plock_release</tt></a></td>\r
+<td class="even"><a href="./complib/cl_passivelock_h.html#robo470"><tt>\r
+cl_plock_t</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./kernel/complib/cl_pnp_po_h.html#robo505"><tt>\r
+cl_pnp</tt></a></td>\r
+<td class="even"><a href="./kernel/complib/cl_pnp_po_h.html#robo_top_of_doc"><tt>\r
+cl_pnp_po.h</tt></a></td>\r
+<td class="uneven"><a href="./kernel/complib/cl_pnp_po_h.html#robo494"><tt>\r
+cl_pnp_po_ext_t</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./kernel/complib/cl_pnp_po_h.html#robo495"><tt>\r
+cl_pnp_state_t</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_pool_h.html#robo_top_of_doc"><tt>\r
+cl_pool.h</tt></a></td>\r
+<td class="even"><a href="./complib/cl_pool_h.html#robo531"><tt>\r
+cl_pool_construct</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_pool_h.html#robo532"><tt>\r
+cl_pool_count</tt></a></td>\r
+<td class="even"><a href="./complib/cl_pool_h.html#robo533"><tt>\r
+cl_pool_destroy</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_pool_h.html#robo534"><tt>\r
+cl_pool_get</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_pool_h.html#robo535"><tt>\r
+cl_pool_grow</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_pool_h.html#robo536"><tt>\r
+cl_pool_init</tt></a></td>\r
+<td class="even"><a href="./complib/cl_qcomppool_h.html#robo542"><tt>\r
+cl_pool_item_t</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_pool_h.html#robo537"><tt>\r
+cl_pool_put</tt></a></td>\r
+<td class="even"><a href="./complib/cl_pool_h.html#robo538"><tt>\r
+cl_pool_t</tt></a></td>\r
+<td class="uneven"><a href="./kernel/complib/cl_pnp_po_h.html#robo506"><tt>\r
+cl_power</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_debug_h.html#robo311"><tt>\r
+CL_PRINT</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_thread_h.html#robo665"><tt>\r
+cl_proc_count</tt></a></td>\r
+<td class="even"><a href="./complib/cl_ptr_vector_h.html#robo_top_of_doc"><tt>\r
+cl_ptr_vector.h</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_ptr_vector_h.html#robo511"><tt>\r
+cl_ptr_vector_apply_func</tt></a></td>\r
+<td class="even"><a href="./complib/cl_ptr_vector_h.html#robo512"><tt>\r
+cl_ptr_vector_at</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_ptr_vector_h.html#robo513"><tt>\r
+cl_ptr_vector_construct</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_ptr_vector_h.html#robo514"><tt>\r
+cl_ptr_vector_destroy</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_ptr_vector_h.html#robo515"><tt>\r
+cl_ptr_vector_find_from_end</tt></a></td>\r
+<td class="even"><a href="./complib/cl_ptr_vector_h.html#robo516"><tt>\r
+cl_ptr_vector_find_from_start</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_ptr_vector_h.html#robo517"><tt>\r
+cl_ptr_vector_get</tt></a></td>\r
+<td class="even"><a href="./complib/cl_ptr_vector_h.html#robo518"><tt>\r
+cl_ptr_vector_get_capacity</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_ptr_vector_h.html#robo519"><tt>\r
+cl_ptr_vector_get_size</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_ptr_vector_h.html#robo520"><tt>\r
+cl_ptr_vector_init</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_ptr_vector_h.html#robo521"><tt>\r
+cl_ptr_vector_insert</tt></a></td>\r
+<td class="even"><a href="./complib/cl_ptr_vector_h.html#robo522"><tt>\r
+cl_ptr_vector_remove</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_ptr_vector_h.html#robo523"><tt>\r
+cl_ptr_vector_set</tt></a></td>\r
+<td class="even"><a href="./complib/cl_ptr_vector_h.html#robo524"><tt>\r
+cl_ptr_vector_set_capacity</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_ptr_vector_h.html#robo525"><tt>\r
+cl_ptr_vector_set_min_size</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_ptr_vector_h.html#robo526"><tt>\r
+cl_ptr_vector_set_size</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_ptr_vector_h.html#robo527"><tt>\r
+cl_ptr_vector_t</tt></a></td>\r
+<td class="even"><a href="./complib/cl_memory_h.html#robo434"><tt>\r
+cl_pzalloc</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_qcomppool_h.html#robo_top_of_doc"><tt>\r
+cl_qcomppool.h</tt></a></td>\r
+<td class="even"><a href="./complib/cl_qcomppool_h.html#robo543"><tt>\r
+cl_qcpool_construct</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_qcomppool_h.html#robo544"><tt>\r
+cl_qcpool_count</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_qcomppool_h.html#robo545"><tt>\r
+cl_qcpool_destroy</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_qcomppool_h.html#robo546"><tt>\r
+cl_qcpool_get</tt></a></td>\r
+<td class="even"><a href="./complib/cl_qcomppool_h.html#robo547"><tt>\r
+cl_qcpool_grow</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_qcomppool_h.html#robo548"><tt>\r
+cl_qcpool_init</tt></a></td>\r
+<td class="even"><a href="./complib/cl_qcomppool_h.html#robo549"><tt>\r
+cl_qcpool_put</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_qcomppool_h.html#robo550"><tt>\r
+cl_qcpool_put_list</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_qcomppool_h.html#robo551"><tt>\r
+cl_qcpool_t</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_qlist_h.html#robo_top_of_doc"><tt>\r
+cl_qlist.h</tt></a></td>\r
+<td class="even"><a href="./complib/cl_qlist_h.html#robo558"><tt>\r
+cl_qlist_apply_func</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_qlist_h.html#robo559"><tt>\r
+cl_qlist_count</tt></a></td>\r
+<td class="even"><a href="./complib/cl_qlist_h.html#robo560"><tt>\r
+cl_qlist_end</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_qlist_h.html#robo561"><tt>\r
+cl_qlist_find_from_head</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_qlist_h.html#robo562"><tt>\r
+cl_qlist_find_from_tail</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_qlist_h.html#robo563"><tt>\r
+cl_qlist_find_next</tt></a></td>\r
+<td class="even"><a href="./complib/cl_qlist_h.html#robo564"><tt>\r
+cl_qlist_find_prev</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_qlist_h.html#robo565"><tt>\r
+cl_qlist_head</tt></a></td>\r
+<td class="even"><a href="./complib/cl_qlist_h.html#robo566"><tt>\r
+cl_qlist_init</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_qlist_h.html#robo567"><tt>\r
+cl_qlist_insert_array_head</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_qlist_h.html#robo568"><tt>\r
+cl_qlist_insert_array_tail</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_qlist_h.html#robo569"><tt>\r
+cl_qlist_insert_head</tt></a></td>\r
+<td class="even"><a href="./complib/cl_qlist_h.html#robo570"><tt>\r
+cl_qlist_insert_list_head</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_qlist_h.html#robo571"><tt>\r
+cl_qlist_insert_list_tail</tt></a></td>\r
+<td class="even"><a href="./complib/cl_qlist_h.html#robo572"><tt>\r
+cl_qlist_insert_next</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_qlist_h.html#robo573"><tt>\r
+cl_qlist_insert_prev</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_qlist_h.html#robo574"><tt>\r
+cl_qlist_insert_tail</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_qlist_h.html#robo575"><tt>\r
+cl_qlist_move_items</tt></a></td>\r
+<td class="even"><a href="./complib/cl_qlist_h.html#robo576"><tt>\r
+cl_qlist_next</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_qlist_h.html#robo577"><tt>\r
+cl_qlist_obj</tt></a></td>\r
+<td class="even"><a href="./complib/cl_qlist_h.html#robo578"><tt>\r
+cl_qlist_prev</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_qlist_h.html#robo579"><tt>\r
+cl_qlist_remove_all</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_qlist_h.html#robo580"><tt>\r
+cl_qlist_remove_head</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_qlist_h.html#robo581"><tt>\r
+cl_qlist_remove_item</tt></a></td>\r
+<td class="even"><a href="./complib/cl_qlist_h.html#robo582"><tt>\r
+cl_qlist_remove_tail</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_qlist_h.html#robo583"><tt>\r
+cl_qlist_set_obj</tt></a></td>\r
+<td class="even"><a href="./complib/cl_qlist_h.html#robo584"><tt>\r
+cl_qlist_t</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_qlist_h.html#robo585"><tt>\r
+cl_qlist_tail</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_qlockpool_h.html#robo586"><tt>\r
+cl_qlock_pool_construct</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_qlockpool_h.html#robo587"><tt>\r
+cl_qlock_pool_destroy</tt></a></td>\r
+<td class="even"><a href="./complib/cl_qlockpool_h.html#robo588"><tt>\r
+cl_qlock_pool_get</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_qlockpool_h.html#robo589"><tt>\r
+cl_qlock_pool_init</tt></a></td>\r
+<td class="even"><a href="./complib/cl_qlockpool_h.html#robo590"><tt>\r
+cl_qlock_pool_put</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_qlockpool_h.html#robo591"><tt>\r
+cl_qlock_pool_t</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_qlockpool_h.html#robo_top_of_doc"><tt>\r
+cl_qlockpool.h</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_qmap_h.html#robo_top_of_doc"><tt>\r
+cl_qmap.h</tt></a></td>\r
+<td class="even"><a href="./complib/cl_qmap_h.html#robo596"><tt>\r
+cl_qmap_apply_func</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_qmap_h.html#robo597"><tt>\r
+cl_qmap_count</tt></a></td>\r
+<td class="even"><a href="./complib/cl_qmap_h.html#robo598"><tt>\r
+cl_qmap_delta</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_qmap_h.html#robo599"><tt>\r
+cl_qmap_end</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_qmap_h.html#robo600"><tt>\r
+cl_qmap_get</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_qmap_h.html#robo601"><tt>\r
+cl_qmap_head</tt></a></td>\r
+<td class="even"><a href="./complib/cl_qmap_h.html#robo602"><tt>\r
+cl_qmap_init</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_qmap_h.html#robo603"><tt>\r
+cl_qmap_insert</tt></a></td>\r
+<td class="even"><a href="./complib/cl_qmap_h.html#robo604"><tt>\r
+cl_qmap_key</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_qmap_h.html#robo605"><tt>\r
+cl_qmap_merge</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_qmap_h.html#robo606"><tt>\r
+cl_qmap_next</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_qmap_h.html#robo607"><tt>\r
+cl_qmap_obj</tt></a></td>\r
+<td class="even"><a href="./complib/cl_qmap_h.html#robo608"><tt>\r
+cl_qmap_prev</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_qmap_h.html#robo609"><tt>\r
+cl_qmap_remove</tt></a></td>\r
+<td class="even"><a href="./complib/cl_qmap_h.html#robo610"><tt>\r
+cl_qmap_remove_all</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_qmap_h.html#robo611"><tt>\r
+cl_qmap_remove_item</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_qmap_h.html#robo612"><tt>\r
+cl_qmap_set_obj</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_qmap_h.html#robo613"><tt>\r
+cl_qmap_t</tt></a></td>\r
+<td class="even"><a href="./complib/cl_qmap_h.html#robo614"><tt>\r
+cl_qmap_tail</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_qpool_h.html#robo_top_of_doc"><tt>\r
+cl_qpool.h</tt></a></td>\r
+<td class="even"><a href="./complib/cl_qpool_h.html#robo618"><tt>\r
+cl_qpool_construct</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_qpool_h.html#robo619"><tt>\r
+cl_qpool_count</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_qpool_h.html#robo620"><tt>\r
+cl_qpool_destroy</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_qpool_h.html#robo621"><tt>\r
+cl_qpool_get</tt></a></td>\r
+<td class="even"><a href="./complib/cl_qpool_h.html#robo622"><tt>\r
+cl_qpool_grow</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_qpool_h.html#robo623"><tt>\r
+cl_qpool_init</tt></a></td>\r
+<td class="even"><a href="./complib/cl_qpool_h.html#robo624"><tt>\r
+cl_qpool_put</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_qpool_h.html#robo625"><tt>\r
+cl_qpool_put_list</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_qpool_h.html#robo626"><tt>\r
+cl_qpool_t</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_rbmap_h.html#robo_top_of_doc"><tt>\r
+cl_rbmap.h</tt></a></td>\r
+<td class="even"><a href="./complib/cl_rbmap_h.html#robo628"><tt>\r
+cl_rbmap_count</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_rbmap_h.html#robo629"><tt>\r
+cl_rbmap_end</tt></a></td>\r
+<td class="even"><a href="./complib/cl_rbmap_h.html#robo630"><tt>\r
+cl_rbmap_init</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_rbmap_h.html#robo631"><tt>\r
+cl_rbmap_insert</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_rbmap_h.html#robo632"><tt>\r
+cl_rbmap_item_t</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_rbmap_h.html#robo633"><tt>\r
+cl_rbmap_left</tt></a></td>\r
+<td class="even"><a href="./complib/cl_rbmap_h.html#robo634"><tt>\r
+cl_rbmap_remove_item</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_rbmap_h.html#robo635"><tt>\r
+cl_rbmap_reset</tt></a></td>\r
+<td class="even"><a href="./complib/cl_rbmap_h.html#robo636"><tt>\r
+cl_rbmap_right</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_rbmap_h.html#robo637"><tt>\r
+cl_rbmap_root</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_rbmap_h.html#robo638"><tt>\r
+cl_rbmap_t</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_obj_h.html#robo462"><tt>\r
+cl_rel_alloc</tt></a></td>\r
+<td class="even"><a href="./complib/cl_obj_h.html#robo463"><tt>\r
+cl_rel_free</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_reqmgr_h.html#robo641"><tt>\r
+cl_req_mgr_construct</tt></a></td>\r
+<td class="even"><a href="./complib/cl_reqmgr_h.html#robo642"><tt>\r
+cl_req_mgr_destroy</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_reqmgr_h.html#robo643"><tt>\r
+cl_req_mgr_get</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_reqmgr_h.html#robo644"><tt>\r
+cl_req_mgr_init</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_reqmgr_h.html#robo645"><tt>\r
+cl_req_mgr_resume</tt></a></td>\r
+<td class="even"><a href="./complib/cl_reqmgr_h.html#robo646"><tt>\r
+cl_req_mgr_t</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_reqmgr_h.html#robo647"><tt>\r
+cl_req_type_t</tt></a></td>\r
+<td class="even"><a href="./complib/cl_reqmgr_h.html#robo_top_of_doc"><tt>\r
+cl_reqmgr.h</tt></a></td>\r
+<td class="uneven"><a href="./kernel/complib/cl_pnp_po_h.html#robo496"><tt>\r
+cl_rollback_pnp_state</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./kernel/complib/cl_pnp_po_h.html#robo497"><tt>\r
+cl_set_pnp_state</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_spinlock_h.html#robo_top_of_doc"><tt>\r
+cl_spinlock.h</tt></a></td>\r
+<td class="even"><a href="./complib/cl_spinlock_h.html#robo648"><tt>\r
+cl_spinlock_acquire</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_spinlock_h.html#robo649"><tt>\r
+cl_spinlock_construct</tt></a></td>\r
+<td class="even"><a href="./complib/cl_spinlock_h.html#robo650"><tt>\r
+cl_spinlock_destroy</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_spinlock_h.html#robo651"><tt>\r
+cl_spinlock_init</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_spinlock_h.html#robo652"><tt>\r
+cl_spinlock_release</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_types_h.html#robo303"><tt>\r
+CL_STATUS_MSG</tt></a></td>\r
+<td class="even"><a href="./complib/cl_types_h.html#robo304"><tt>\r
+cl_status_t</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_syscallback_h.html#robo655"><tt>\r
+cl_sys_callback_get</tt></a></td>\r
+<td class="even"><a href="./complib/cl_syscallback_h.html#robo656"><tt>\r
+cl_sys_callback_put</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_syscallback_h.html#robo657"><tt>\r
+cl_sys_callback_queue</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_syscallback_h.html#robo_top_of_doc"><tt>\r
+cl_syscallback.h</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_thread_h.html#robo_top_of_doc"><tt>\r
+cl_thread.h</tt></a></td>\r
+<td class="even"><a href="./complib/cl_threadpool_h.html#robo658"><tt>\r
+cl_thread_pool_construct</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_threadpool_h.html#robo659"><tt>\r
+cl_thread_pool_destroy</tt></a></td>\r
+<td class="even"><a href="./complib/cl_threadpool_h.html#robo660"><tt>\r
+cl_thread_pool_init</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_threadpool_h.html#robo661"><tt>\r
+cl_thread_pool_signal</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_threadpool_h.html#robo662"><tt>\r
+cl_thread_pool_t</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_thread_h.html#robo666"><tt>\r
+cl_thread_stall</tt></a></td>\r
+<td class="even"><a href="./complib/cl_thread_h.html#robo667"><tt>\r
+cl_thread_suspend</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_threadpool_h.html#robo_top_of_doc"><tt>\r
+cl_threadpool.h</tt></a></td>\r
+<td class="even"><a href="./complib/cl_timer_h.html#robo_top_of_doc"><tt>\r
+cl_timer.h</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_timer_h.html#robo674"><tt>\r
+cl_timer_construct</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_timer_h.html#robo675"><tt>\r
+cl_timer_destroy</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_timer_h.html#robo676"><tt>\r
+cl_timer_init</tt></a></td>\r
+<td class="even"><a href="./complib/cl_timer_h.html#robo677"><tt>\r
+cl_timer_start</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_timer_h.html#robo678"><tt>\r
+cl_timer_stop</tt></a></td>\r
+<td class="even"><a href="./complib/cl_timer_h.html#robo679"><tt>\r
+cl_timer_trim</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_debug_h.html#robo312"><tt>\r
+CL_TRACE</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_debug_h.html#robo313"><tt>\r
+CL_TRACE_EXIT</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_types_h.html#robo_top_of_doc"><tt>\r
+cl_types.h</tt></a></td>\r
+<td class="even"><a href="./complib/cl_vector_h.html#robo_top_of_doc"><tt>\r
+cl_vector.h</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_vector_h.html#robo685"><tt>\r
+cl_vector_apply_func</tt></a></td>\r
+<td class="even"><a href="./complib/cl_vector_h.html#robo686"><tt>\r
+cl_vector_at</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_vector_h.html#robo687"><tt>\r
+cl_vector_construct</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_vector_h.html#robo688"><tt>\r
+cl_vector_destroy</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_vector_h.html#robo689"><tt>\r
+cl_vector_find_from_end</tt></a></td>\r
+<td class="even"><a href="./complib/cl_vector_h.html#robo690"><tt>\r
+cl_vector_find_from_start</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_vector_h.html#robo691"><tt>\r
+cl_vector_get</tt></a></td>\r
+<td class="even"><a href="./complib/cl_vector_h.html#robo692"><tt>\r
+cl_vector_get_capacity</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_vector_h.html#robo693"><tt>\r
+cl_vector_get_ptr</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_vector_h.html#robo694"><tt>\r
+cl_vector_get_size</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_vector_h.html#robo695"><tt>\r
+cl_vector_init</tt></a></td>\r
+<td class="even"><a href="./complib/cl_vector_h.html#robo696"><tt>\r
+cl_vector_set</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_vector_h.html#robo697"><tt>\r
+cl_vector_set_capacity</tt></a></td>\r
+<td class="even"><a href="./complib/cl_vector_h.html#robo698"><tt>\r
+cl_vector_set_min_size</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_vector_h.html#robo699"><tt>\r
+cl_vector_set_size</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_vector_h.html#robo700"><tt>\r
+cl_vector_t</tt></a></td>\r
+<td class="uneven"><a href="./kernel/complib/cl_pnp_po_h.html#robo498"><tt>\r
+cl_vfptr_pnp_po_t</tt></a></td>\r
+<td class="even"><a href="./kernel/complib/cl_pnp_po_h.html#robo499"><tt>\r
+cl_vfptr_query_txt</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_waitobj_h.html#robo_top_of_doc"><tt>\r
+cl_waitobj.h</tt></a></td>\r
+<td class="even"><a href="./complib/cl_waitobj_h.html#robo701"><tt>\r
+cl_waitobj_create</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_waitobj_h.html#robo702"><tt>\r
+cl_waitobj_deref</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_waitobj_h.html#robo703"><tt>\r
+cl_waitobj_destroy</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_waitobj_h.html#robo704"><tt>\r
+cl_waitobj_handle_t</tt></a></td>\r
+<td class="even"><a href="./complib/cl_waitobj_h.html#robo705"><tt>\r
+cl_waitobj_ref</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_waitobj_h.html#robo706"><tt>\r
+cl_waitobj_reset</tt></a></td>\r
+<td class="even"><a href="./complib/cl_waitobj_h.html#robo707"><tt>\r
+cl_waitobj_signal</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_waitobj_h.html#robo708"><tt>\r
+cl_waitobj_wait_on</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_memory_h.html#robo435"><tt>\r
+cl_zalloc</tt></a></td>\r
+<td class="uneven"><a href="./complib/comp_lib_h.html#robo_top_of_doc"><tt>\r
+comp_lib.h</tt></a></td>\r
+<td class="even"><a href="./complib/cl_comppool_h.html#robo9"><tt>\r
+Composite Pool</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo40"><tt>\r
+Constants</tt></a></td>\r
+<td class="even"><a href="./complib/cl_types_h.html#robo263"><tt>\r
+Data Types</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_debug_h.html#robo314"><tt>\r
+Debug Levels</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_debug_h.html#robo10"><tt>\r
+Debug Output</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo835"><tt>\r
+DM_SVC_NAME</tt></a></td>\r
+<td class="even"><a href="./complib/cl_event_h.html#robo11"><tt>\r
+Event</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_fleximap_h.html#robo12"><tt>\r
+Flexi Map</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo45"><tt>\r
+ib_access_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo46"><tt>\r
+ib_add_svc_entry</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_al_h.html#robo_top_of_doc"><tt>\r
+ib_al.h</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo47"><tt>\r
+ib_al_flags_t</tt></a></td>\r
+<td class="even"><a href="./kernel/iba/ib_al_ifc_h.html#robo_top_of_doc"><tt>\r
+ib_al_ifc.h</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./kernel/iba/ib_al_ifc_h.html#robo0"><tt>\r
+ib_al_ifc.h</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_ioctl_h.html#robo_top_of_doc"><tt>\r
+ib_al_ioctl.h</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo48"><tt>\r
+ib_alloc_pd</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_types_h.html#robo49"><tt>\r
+ib_api_status_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo50"><tt>\r
+ib_apm_state_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_h.html#robo51"><tt>\r
+ib_apr_info_t</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo52"><tt>\r
+ib_apr_pdata_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo53"><tt>\r
+ib_apr_status_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo54"><tt>\r
+ib_ari_t</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_al_h.html#robo55"><tt>\r
+ib_async_event_rec_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo1155"><tt>\r
+ib_async_event_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo56"><tt>\r
+ib_atomic_t</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo57"><tt>\r
+ib_av_attr_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_h.html#robo58"><tt>\r
+ib_bind_mw</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo59"><tt>\r
+ib_bind_wr_t</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_types_h.html#robo60"><tt>\r
+ib_ca_attr_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo61"><tt>\r
+ib_ca_mod_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_h.html#robo62"><tt>\r
+ib_cancel_mad</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo63"><tt>\r
+ib_cancel_query</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_h.html#robo64"><tt>\r
+ib_cep_listen_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_ci_h.html#robo_top_of_doc"><tt>\r
+ib_ci.h</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_al_h.html#robo65"><tt>\r
+ib_ci_call</tt></a></td>\r
+<td class="uneven"><a href="./kernel/iba/ib_ci_ifc_h.html#robo_top_of_doc"><tt>\r
+ib_ci_ifc.h</tt></a></td>\r
+<td class="even"><a href="./kernel/iba/ib_ci_ifc_h.html#robo1"><tt>\r
+ib_ci_ifc.h</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo66"><tt>\r
+ib_ci_op_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo709"><tt>\r
+IB_CLASS_CAP_GETSET</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo710"><tt>\r
+IB_CLASS_CAP_TRAP</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_types_h.html#robo836"><tt>\r
+ib_class_is_vendor_specific</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo837"><tt>\r
+ib_class_is_vendor_specific_high</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo838"><tt>\r
+ib_class_is_vendor_specific_low</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo839"><tt>\r
+ib_class_port_info_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo711"><tt>\r
+IB_CLASS_RESP_TIME_MASK</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo67"><tt>\r
+ib_close_al</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_al_h.html#robo68"><tt>\r
+ib_close_ca</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo69"><tt>\r
+ib_cm_apr</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_h.html#robo70"><tt>\r
+ib_cm_apr_rec_t</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo71"><tt>\r
+ib_cm_apr_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_h.html#robo72"><tt>\r
+ib_cm_cancel</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo73"><tt>\r
+ib_cm_cap_mask_t</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_al_h.html#robo74"><tt>\r
+ib_cm_drep</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo75"><tt>\r
+ib_cm_drep_rec_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_h.html#robo76"><tt>\r
+ib_cm_drep_t</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo77"><tt>\r
+ib_cm_dreq</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_h.html#robo78"><tt>\r
+ib_cm_dreq_rec_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo79"><tt>\r
+ib_cm_dreq_t</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_al_h.html#robo80"><tt>\r
+ib_cm_failover_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo81"><tt>\r
+ib_cm_handoff</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_h.html#robo82"><tt>\r
+ib_cm_lap</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo83"><tt>\r
+ib_cm_lap_rec_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_h.html#robo84"><tt>\r
+ib_cm_lap_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo85"><tt>\r
+ib_cm_listen</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_al_h.html#robo86"><tt>\r
+ib_cm_listen_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo87"><tt>\r
+ib_cm_mra</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_h.html#robo88"><tt>\r
+ib_cm_mra_rec_t</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo89"><tt>\r
+ib_cm_mra_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_h.html#robo90"><tt>\r
+ib_cm_rej</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo91"><tt>\r
+ib_cm_rej_rec_t</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_al_h.html#robo92"><tt>\r
+ib_cm_rej_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo93"><tt>\r
+ib_cm_rep</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_h.html#robo94"><tt>\r
+ib_cm_rep_rec_t</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo95"><tt>\r
+ib_cm_rep_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_h.html#robo96"><tt>\r
+ib_cm_req</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo97"><tt>\r
+ib_cm_req_rec_t</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_al_h.html#robo98"><tt>\r
+ib_cm_req_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo99"><tt>\r
+ib_cm_rtu</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_h.html#robo100"><tt>\r
+ib_cm_rtu_rec_t</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo101"><tt>\r
+ib_cm_rtu_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo102"><tt>\r
+ib_copy_ca_attr</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo103"><tt>\r
+ib_cq_create_t</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_al_h.html#robo104"><tt>\r
+ib_create_av</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo105"><tt>\r
+ib_create_cq</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_h.html#robo106"><tt>\r
+ib_create_ioc</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo107"><tt>\r
+ib_create_mad_pool</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_h.html#robo108"><tt>\r
+ib_create_mw</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo109"><tt>\r
+ib_create_qp</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_al_h.html#robo110"><tt>\r
+ib_dealloc_pd</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo712"><tt>\r
+IB_DEFAULT_PKEY</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo713"><tt>\r
+IB_DEFAULT_SUBNET_PREFIX</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo111"><tt>\r
+ib_dereg_mad_pool</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_h.html#robo112"><tt>\r
+ib_dereg_mr</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo113"><tt>\r
+ib_dereg_pnp</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_al_h.html#robo114"><tt>\r
+ib_dereg_svc</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_ci_h.html#robo1156"><tt>\r
+ib_deregister_ca</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_h.html#robo115"><tt>\r
+ib_destroy_av</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo116"><tt>\r
+ib_destroy_cq</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_h.html#robo117"><tt>\r
+ib_destroy_ioc</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo118"><tt>\r
+ib_destroy_mad_pool</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_al_h.html#robo119"><tt>\r
+ib_destroy_mw</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo120"><tt>\r
+ib_destroy_qp</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_h.html#robo121"><tt>\r
+ib_device_attr_mask_t</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo122"><tt>\r
+ib_dgrm_info_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo978"><tt>\r
+ib_dm_get_slot_lo_hi</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo840"><tt>\r
+ib_dm_mad_t</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_types_h.html#robo979"><tt>\r
+ib_dm_set_slot_lo_hi</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo123"><tt>\r
+ib_drep_pdata_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_h.html#robo124"><tt>\r
+ib_dreq_pdata_t</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo1157"><tt>\r
+ib_event_rec_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo841"><tt>\r
+ib_field32_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo125"><tt>\r
+ib_force_apm</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_types_h.html#robo842"><tt>\r
+ib_get_async_event_str</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo126"><tt>\r
+ib_get_ca_by_gid</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_h.html#robo127"><tt>\r
+ib_get_ca_guids</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo843"><tt>\r
+ib_get_err_str</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_h.html#robo128"><tt>\r
+ib_get_guid</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo129"><tt>\r
+ib_get_mad</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_al_h.html#robo130"><tt>\r
+ib_get_mad_buf</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo844"><tt>\r
+ib_get_node_type_str</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_h.html#robo131"><tt>\r
+ib_get_port_by_gid</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo845"><tt>\r
+ib_get_port_state_from_str</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo846"><tt>\r
+ib_get_port_state_str</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo132"><tt>\r
+ib_get_query_node_rec</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_al_h.html#robo133"><tt>\r
+ib_get_query_path_rec</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo134"><tt>\r
+ib_get_query_portinfo_rec</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_h.html#robo135"><tt>\r
+ib_get_query_result</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo136"><tt>\r
+ib_get_query_svc_rec</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_h.html#robo137"><tt>\r
+ib_get_spl_qp</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo847"><tt>\r
+ib_get_wc_status_str</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_types_h.html#robo848"><tt>\r
+ib_get_wc_type_str</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo849"><tt>\r
+ib_get_wr_type_str</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo850"><tt>\r
+ib_gid_get_guid</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo851"><tt>\r
+ib_gid_get_subnet_prefix</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo852"><tt>\r
+ib_gid_is_link_local</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo853"><tt>\r
+ib_gid_is_site_local</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_al_h.html#robo138"><tt>\r
+ib_gid_pair_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo854"><tt>\r
+ib_gid_prefix_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo855"><tt>\r
+ib_gid_set_default</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo856"><tt>\r
+ib_gid_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo857"><tt>\r
+ib_grh_get_ver_class_flow</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo858"><tt>\r
+ib_grh_set_ver_class_flow</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_types_h.html#robo859"><tt>\r
+ib_grh_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo860"><tt>\r
+ib_guid_info_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_h.html#robo139"><tt>\r
+ib_guid_pair_t</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo861"><tt>\r
+ib_inform_get_dev_id</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo862"><tt>\r
+ib_inform_get_prod_type</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo863"><tt>\r
+ib_inform_get_qpn</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_types_h.html#robo864"><tt>\r
+ib_inform_get_resp_time_val</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo865"><tt>\r
+ib_inform_get_trap_num</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo866"><tt>\r
+ib_inform_get_vend_id</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo867"><tt>\r
+ib_inform_info_record_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo868"><tt>\r
+ib_inform_set_dev_id</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo869"><tt>\r
+ib_inform_set_prod_type</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_types_h.html#robo870"><tt>\r
+ib_inform_set_qpn</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo871"><tt>\r
+ib_inform_set_resp_time_val</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo872"><tt>\r
+ib_inform_set_trap_num</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo873"><tt>\r
+ib_inform_set_vend_id</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_h.html#robo140"><tt>\r
+ib_init_dgrm_svc</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo141"><tt>\r
+ib_init_type_t</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_types_h.html#robo714"><tt>\r
+IB_INVALID_PORT_NUM</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo874"><tt>\r
+ib_ioc_profile_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo875"><tt>\r
+ib_iou_info_diag_dev_id</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo876"><tt>\r
+ib_iou_info_option_rom</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo877"><tt>\r
+ib_iou_info_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo142"><tt>\r
+ib_join_mcast</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_al_h.html#robo143"><tt>\r
+ib_lap_pdata_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo144"><tt>\r
+ib_leave_mcast</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo878"><tt>\r
+ib_lft_record_t</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo715"><tt>\r
+IB_LID_MCAST_END</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo716"><tt>\r
+IB_LID_MCAST_START</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo145"><tt>\r
+ib_lid_pair_t</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_types_h.html#robo717"><tt>\r
+IB_LID_PERMISSIVE</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo718"><tt>\r
+IB_LID_UCAST_END</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo719"><tt>\r
+IB_LID_UCAST_START</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo720"><tt>\r
+ib_link_states_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_h.html#robo146"><tt>\r
+ib_listen_err_rec_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo147"><tt>\r
+ib_listen_info_t</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_types_h.html#robo148"><tt>\r
+ib_local_ds_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo149"><tt>\r
+ib_local_mad</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo721"><tt>\r
+IB_MAD_ATTR_CLASS_PORT_INFO</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo722"><tt>\r
+IB_MAD_ATTR_DIAG_CODE</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo723"><tt>\r
+IB_MAD_ATTR_DIAGNOSTIC_TIMEOUT</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo724"><tt>\r
+IB_MAD_ATTR_GUID_INFO</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_types_h.html#robo725"><tt>\r
+IB_MAD_ATTR_INFORM_INFO</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo726"><tt>\r
+IB_MAD_ATTR_IO_UNIT_INFO</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo727"><tt>\r
+IB_MAD_ATTR_IOC_PROFILE</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo728"><tt>\r
+IB_MAD_ATTR_LED_INFO</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo729"><tt>\r
+IB_MAD_ATTR_LFT_RECORD</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo730"><tt>\r
+IB_MAD_ATTR_LIN_FWD_TBL</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_types_h.html#robo731"><tt>\r
+IB_MAD_ATTR_LINK_RECORD</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo732"><tt>\r
+IB_MAD_ATTR_MCAST_FWD_TBL</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo733"><tt>\r
+IB_MAD_ATTR_MCMEMBER_RECORD</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo734"><tt>\r
+IB_MAD_ATTR_MULTIPATH_RECORD</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo735"><tt>\r
+IB_MAD_ATTR_NODE_DESC</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo736"><tt>\r
+IB_MAD_ATTR_NODE_INFO</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_types_h.html#robo737"><tt>\r
+IB_MAD_ATTR_NODE_RECORD</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo738"><tt>\r
+IB_MAD_ATTR_NOTICE</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo739"><tt>\r
+IB_MAD_ATTR_P_KEY_TABLE</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo740"><tt>\r
+IB_MAD_ATTR_PATH_RECORD</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo741"><tt>\r
+IB_MAD_ATTR_PKEYTBL_RECORD</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo742"><tt>\r
+IB_MAD_ATTR_PORT_CNTRS</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_types_h.html#robo743"><tt>\r
+IB_MAD_ATTR_PORT_INFO</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo744"><tt>\r
+IB_MAD_ATTR_PORT_SMPL_CTRL</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo745"><tt>\r
+IB_MAD_ATTR_PORT_SMPL_RSLT</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo746"><tt>\r
+IB_MAD_ATTR_PORTINFO_RECORD</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo747"><tt>\r
+IB_MAD_ATTR_PREPARE_TO_TEST</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo748"><tt>\r
+IB_MAD_ATTR_RND_FWD_TBL</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_types_h.html#robo749"><tt>\r
+IB_MAD_ATTR_SERVICE_ENTRIES</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo750"><tt>\r
+IB_MAD_ATTR_SERVICE_RECORD</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo751"><tt>\r
+IB_MAD_ATTR_SLVL_RECORD</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo752"><tt>\r
+IB_MAD_ATTR_SLVL_TABLE</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo753"><tt>\r
+IB_MAD_ATTR_SM_INFO</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo754"><tt>\r
+IB_MAD_ATTR_SMINFO_RECORD</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_types_h.html#robo755"><tt>\r
+IB_MAD_ATTR_SVC_ASSOCIATION_RECORD</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo756"><tt>\r
+IB_MAD_ATTR_SWITCH_INFO</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo757"><tt>\r
+IB_MAD_ATTR_TEST_DEVICE_LOOP</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo758"><tt>\r
+IB_MAD_ATTR_TEST_DEVICE_ONCE</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo759"><tt>\r
+IB_MAD_ATTR_TRACE_RECORD</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo760"><tt>\r
+IB_MAD_ATTR_VENDOR_DIAG</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_types_h.html#robo761"><tt>\r
+IB_MAD_ATTR_VL_ARBITRATION</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo762"><tt>\r
+IB_MAD_ATTR_VLARB_RECORD</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_h.html#robo150"><tt>\r
+ib_mad_element_t</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo879"><tt>\r
+ib_mad_init_new</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo880"><tt>\r
+ib_mad_init_response</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo881"><tt>\r
+ib_mad_is_response</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_types_h.html#robo763"><tt>\r
+IB_MAD_METHOD_GET</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo764"><tt>\r
+IB_MAD_METHOD_GET_RESP</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo765"><tt>\r
+IB_MAD_METHOD_GETTABLE</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo766"><tt>\r
+IB_MAD_METHOD_GETTABLE_RESP</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo767"><tt>\r
+IB_MAD_METHOD_REPORT</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo768"><tt>\r
+IB_MAD_METHOD_REPORT_RESP</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_types_h.html#robo769"><tt>\r
+IB_MAD_METHOD_RESP_MASK</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo770"><tt>\r
+IB_MAD_METHOD_SEND</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo771"><tt>\r
+IB_MAD_METHOD_SET</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo772"><tt>\r
+IB_MAD_METHOD_TRAP</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo773"><tt>\r
+IB_MAD_METHOD_TRAP_REPRESS</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo774"><tt>\r
+IB_MAD_STATUS_BUSY</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_types_h.html#robo775"><tt>\r
+IB_MAD_STATUS_INVALID_FIELD</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo776"><tt>\r
+IB_MAD_STATUS_REDIRECT</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo777"><tt>\r
+IB_MAD_STATUS_UNSUP_CLASS_VER</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo778"><tt>\r
+IB_MAD_STATUS_UNSUP_METHOD</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo779"><tt>\r
+IB_MAD_STATUS_UNSUP_METHOD_ATTR</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo151"><tt>\r
+ib_mad_svc_t</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_al_h.html#robo152"><tt>\r
+ib_mad_svc_type_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo882"><tt>\r
+ib_mad_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo780"><tt>\r
+IB_MAX_METHOD</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo781"><tt>\r
+IB_MCAST_BLOCK_ID_MASK_HO</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo782"><tt>\r
+IB_MCAST_BLOCK_SIZE</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo783"><tt>\r
+IB_MCAST_MASK_SIZE</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_types_h.html#robo784"><tt>\r
+IB_MCAST_MAX_BLOCK_ID</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo785"><tt>\r
+IB_MCAST_POSITION_MASK_HO</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo786"><tt>\r
+IB_MCAST_POSITION_MAX</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo787"><tt>\r
+IB_MCAST_POSITION_SHIFT</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_h.html#robo153"><tt>\r
+ib_mcast_rec_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo154"><tt>\r
+ib_mcast_req_t</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_types_h.html#robo788"><tt>\r
+IB_MCLASS_BM</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo789"><tt>\r
+IB_MCLASS_COMM_MGMT</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo790"><tt>\r
+IB_MCLASS_DEV_MGMT</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo791"><tt>\r
+IB_MCLASS_PERF</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo792"><tt>\r
+IB_MCLASS_SNMP</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo793"><tt>\r
+IB_MCLASS_SUBN_ADM</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_types_h.html#robo794"><tt>\r
+IB_MCLASS_SUBN_DIR</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo795"><tt>\r
+IB_MCLASS_SUBN_LID</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo796"><tt>\r
+IB_MCLASS_VENDOR_HIGH_RANGE_MAX</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo797"><tt>\r
+IB_MCLASS_VENDOR_HIGH_RANGE_MIN</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo798"><tt>\r
+IB_MCLASS_VENDOR_LOW_RANGE_MAX</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo799"><tt>\r
+IB_MCLASS_VENDOR_LOW_RANGE_MIN</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_types_h.html#robo883"><tt>\r
+ib_member_get_scope</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo884"><tt>\r
+ib_member_get_scope_state</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo885"><tt>\r
+ib_member_get_sl_flow_hop</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo886"><tt>\r
+ib_member_get_state</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo887"><tt>\r
+ib_member_rec_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo888"><tt>\r
+ib_member_set_join_state</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_types_h.html#robo889"><tt>\r
+ib_member_set_scope</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo890"><tt>\r
+ib_member_set_scope_state</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo891"><tt>\r
+ib_member_set_sl_flow_hop</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo892"><tt>\r
+ib_member_set_state</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_h.html#robo155"><tt>\r
+ib_modify_av</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo156"><tt>\r
+ib_modify_ca</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_al_h.html#robo157"><tt>\r
+ib_modify_cq</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo158"><tt>\r
+ib_modify_qp</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo159"><tt>\r
+ib_mr_attr_t</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo160"><tt>\r
+ib_mr_create_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo161"><tt>\r
+ib_mr_mod_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo162"><tt>\r
+ib_mra_pdata_t</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_types_h.html#robo800"><tt>\r
+IB_MTU_TYPE</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo893"><tt>\r
+ib_net16_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo894"><tt>\r
+ib_net32_t</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo895"><tt>\r
+ib_net64_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo896"><tt>\r
+ib_node_info_get_local_port_num</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo897"><tt>\r
+ib_node_info_get_vendor_id</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_types_h.html#robo898"><tt>\r
+ib_node_info_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo801"><tt>\r
+IB_NODE_NUM_PORTS_MAX</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo802"><tt>\r
+IB_NODE_TYPE_CA</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo803"><tt>\r
+IB_NODE_TYPE_ROUTER</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo804"><tt>\r
+IB_NODE_TYPE_SWITCH</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo899"><tt>\r
+ib_notice_get_count</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_types_h.html#robo900"><tt>\r
+ib_notice_get_dev_id</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo901"><tt>\r
+ib_notice_get_generic</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo902"><tt>\r
+ib_notice_get_prod_type</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo903"><tt>\r
+ib_notice_get_toggle</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo904"><tt>\r
+ib_notice_get_trap_num</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo905"><tt>\r
+ib_notice_get_type</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_types_h.html#robo906"><tt>\r
+ib_notice_get_vend_id</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo805"><tt>\r
+IB_NOTICE_NODE_TYPE_CA</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo806"><tt>\r
+IB_NOTICE_NODE_TYPE_ROUTER</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo807"><tt>\r
+IB_NOTICE_NODE_TYPE_SUBN_MGMT</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo808"><tt>\r
+IB_NOTICE_NODE_TYPE_SWITCH</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo907"><tt>\r
+ib_notice_set_count</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_types_h.html#robo908"><tt>\r
+ib_notice_set_dev_id</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo909"><tt>\r
+ib_notice_set_generic</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo910"><tt>\r
+ib_notice_set_prod_type</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo911"><tt>\r
+ib_notice_set_toggle</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo912"><tt>\r
+ib_notice_set_trap_num</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo913"><tt>\r
+ib_notice_set_type</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_types_h.html#robo914"><tt>\r
+ib_notice_set_vend_id</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo163"><tt>\r
+ib_open_al</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_h.html#robo164"><tt>\r
+ib_open_ca</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo915"><tt>\r
+ib_path_get_ipd</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo809"><tt>\r
+IB_PATH_REC_BASE_MASK</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo916"><tt>\r
+ib_path_rec_flow_lbl</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_types_h.html#robo917"><tt>\r
+ib_path_rec_hop_limit</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo918"><tt>\r
+ib_path_rec_init_local</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo919"><tt>\r
+ib_path_rec_mtu</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo920"><tt>\r
+ib_path_rec_mtu_sel</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo921"><tt>\r
+ib_path_rec_pkt_life</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo922"><tt>\r
+ib_path_rec_pkt_life_sel</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_types_h.html#robo923"><tt>\r
+ib_path_rec_rate</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo924"><tt>\r
+ib_path_rec_rate_sel</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo810"><tt>\r
+IB_PATH_REC_SELECTOR_MASK</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo925"><tt>\r
+ib_path_rec_set_hop_flow_raw</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo926"><tt>\r
+ib_path_rec_sl</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo927"><tt>\r
+ib_path_rec_t</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_types_h.html#robo811"><tt>\r
+IB_PATH_SELECTOR_TYPE</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo165"><tt>\r
+ib_pd_type_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_h.html#robo166"><tt>\r
+ib_peek_cq</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo167"><tt>\r
+ib_pfn_cm_apr_cb_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_h.html#robo168"><tt>\r
+ib_pfn_cm_drep_cb_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo169"><tt>\r
+ib_pfn_cm_dreq_cb_t</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_al_h.html#robo170"><tt>\r
+ib_pfn_cm_lap_cb_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo171"><tt>\r
+ib_pfn_cm_mra_cb_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_h.html#robo172"><tt>\r
+ib_pfn_cm_rej_cb_t</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo173"><tt>\r
+ib_pfn_cm_rep_cb_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_h.html#robo174"><tt>\r
+ib_pfn_cm_req_cb_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo175"><tt>\r
+ib_pfn_cm_rtu_cb_t</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_al_h.html#robo176"><tt>\r
+ib_pfn_comp_cb_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo177"><tt>\r
+ib_pfn_destroy_cb_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_h.html#robo178"><tt>\r
+ib_pfn_event_cb_t</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo179"><tt>\r
+ib_pfn_listen_err_cb_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_h.html#robo180"><tt>\r
+ib_pfn_mad_comp_cb_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo181"><tt>\r
+ib_pfn_mcast_cb_t</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_al_h.html#robo182"><tt>\r
+ib_pfn_pnp_cb_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo183"><tt>\r
+ib_pfn_query_cb_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_h.html#robo184"><tt>\r
+ib_pfn_reg_svc_cb_t</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo185"><tt>\r
+ib_pfn_report_cb_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_h.html#robo186"><tt>\r
+ib_pfn_sub_cb_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo187"><tt>\r
+ib_phys_create_t</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_types_h.html#robo188"><tt>\r
+ib_phys_range_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo812"><tt>\r
+IB_PKEY_BASE_MASK</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo813"><tt>\r
+IB_PKEY_ENTRIES_MAX</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo928"><tt>\r
+ib_pkey_get_base</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo929"><tt>\r
+ib_pkey_is_full_member</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo814"><tt>\r
+IB_PKEY_MAX_BLOCKS</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_types_h.html#robo930"><tt>\r
+ib_pkey_table_info_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo815"><tt>\r
+IB_PKEY_TYPE_MASK</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_h.html#robo189"><tt>\r
+ib_pnp_ca_rec_t</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo190"><tt>\r
+ib_pnp_class_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_h.html#robo191"><tt>\r
+ib_pnp_event_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo192"><tt>\r
+ib_pnp_ioc_path_rec_t</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_al_h.html#robo193"><tt>\r
+ib_pnp_ioc_rec_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo194"><tt>\r
+ib_pnp_iou_rec_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_h.html#robo195"><tt>\r
+ib_pnp_port_rec_t</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo196"><tt>\r
+ib_pnp_rec_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_h.html#robo197"><tt>\r
+ib_pnp_req_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo198"><tt>\r
+ib_poll_cq</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_types_h.html#robo199"><tt>\r
+ib_port_attr_mod_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo200"><tt>\r
+ib_port_attr_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo201"><tt>\r
+ib_port_cap_t</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo931"><tt>\r
+ib_port_info_compute_rate</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo932"><tt>\r
+ib_port_info_get_link_speed_active</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo933"><tt>\r
+ib_port_info_get_link_speed_sup</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_types_h.html#robo934"><tt>\r
+ib_port_info_get_lmc</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo935"><tt>\r
+ib_port_info_get_mpb</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo936"><tt>\r
+ib_port_info_get_mtu_cap</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo937"><tt>\r
+ib_port_info_get_neighbor_mtu</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo938"><tt>\r
+ib_port_info_get_op_vls</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo939"><tt>\r
+ib_port_info_get_port_state</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_types_h.html#robo940"><tt>\r
+ib_port_info_get_vl_cap</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo941"><tt>\r
+ib_port_info_set_link_speed_sup</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo942"><tt>\r
+ib_port_info_set_lmc</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo943"><tt>\r
+ib_port_info_set_mpb</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo944"><tt>\r
+ib_port_info_set_neighbor_mtu</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo945"><tt>\r
+ib_port_info_set_op_vls</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_types_h.html#robo946"><tt>\r
+ib_port_info_set_port_state</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo947"><tt>\r
+ib_port_info_set_state_no_change</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo948"><tt>\r
+ib_port_info_set_timeout</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo949"><tt>\r
+ib_port_info_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_h.html#robo202"><tt>\r
+ib_post_recv</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo203"><tt>\r
+ib_post_send</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_al_h.html#robo204"><tt>\r
+ib_put_mad</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo816"><tt>\r
+IB_QP1_WELL_KNOWN_Q_KEY</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo205"><tt>\r
+ib_qp_attr_t</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo206"><tt>\r
+ib_qp_create_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo207"><tt>\r
+ib_qp_mod_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo208"><tt>\r
+ib_qp_opts_t</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_types_h.html#robo209"><tt>\r
+ib_qp_state_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo210"><tt>\r
+ib_qp_type_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_h.html#robo211"><tt>\r
+ib_query</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo212"><tt>\r
+ib_query_av</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_h.html#robo213"><tt>\r
+ib_query_ca</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo214"><tt>\r
+ib_query_ca_by_guid</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_al_h.html#robo215"><tt>\r
+ib_query_cq</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo216"><tt>\r
+ib_query_mr</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_h.html#robo217"><tt>\r
+ib_query_mw</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo218"><tt>\r
+ib_query_qp</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_h.html#robo219"><tt>\r
+ib_query_rec_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo220"><tt>\r
+ib_query_req_t</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_al_h.html#robo221"><tt>\r
+ib_query_type_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo222"><tt>\r
+ib_rearm_cq</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_h.html#robo223"><tt>\r
+ib_rearm_n_cq</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo224"><tt>\r
+ib_recv_opt_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo225"><tt>\r
+ib_recv_wr_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo226"><tt>\r
+ib_reg_ioc</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_al_h.html#robo227"><tt>\r
+ib_reg_mad_pool</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo228"><tt>\r
+ib_reg_mad_svc</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_h.html#robo229"><tt>\r
+ib_reg_mem</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo230"><tt>\r
+ib_reg_phys</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_h.html#robo231"><tt>\r
+ib_reg_pnp</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo232"><tt>\r
+ib_reg_shared</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_al_h.html#robo233"><tt>\r
+ib_reg_shmid</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo234"><tt>\r
+ib_reg_svc</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_h.html#robo235"><tt>\r
+ib_reg_svc_rec_t</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo236"><tt>\r
+ib_reg_svc_req_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_ci_h.html#robo1158"><tt>\r
+ib_register_ca</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo237"><tt>\r
+ib_rej_pdata_t</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_types_h.html#robo238"><tt>\r
+ib_rej_status_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo239"><tt>\r
+ib_reject_ioc</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_h.html#robo240"><tt>\r
+ib_remove_svc_entry</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo241"><tt>\r
+ib_rep_pdata_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_h.html#robo242"><tt>\r
+ib_report_rec_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo243"><tt>\r
+ib_req_pdata_t</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_al_h.html#robo244"><tt>\r
+ib_rereg_mem</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo245"><tt>\r
+ib_rereg_phys</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo950"><tt>\r
+ib_rmpp_is_flag_set</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo951"><tt>\r
+ib_rmpp_mad_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_h.html#robo246"><tt>\r
+ib_rtu_pdata_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo952"><tt>\r
+ib_sa_mad_get_payload_ptr</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_types_h.html#robo953"><tt>\r
+ib_sa_mad_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo247"><tt>\r
+ib_send_mad</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo248"><tt>\r
+ib_send_opt_t</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo249"><tt>\r
+ib_send_wr_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_h.html#robo250"><tt>\r
+ib_shmid_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo251"><tt>\r
+ib_sidr_rep_pdata_t</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_al_h.html#robo252"><tt>\r
+ib_sidr_req_pdata_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo954"><tt>\r
+ib_slvl_table_get_vl</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo955"><tt>\r
+ib_slvl_table_record_t</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo956"><tt>\r
+ib_slvl_table_set_vl</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo957"><tt>\r
+ib_slvl_table_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo958"><tt>\r
+ib_sm_info_t</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_types_h.html#robo817"><tt>\r
+IB_SMINFO_ATTR_MOD_ACKNOWLEDGE</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo818"><tt>\r
+IB_SMINFO_ATTR_MOD_DISABLE</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo819"><tt>\r
+IB_SMINFO_ATTR_MOD_DISCOVER</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo820"><tt>\r
+IB_SMINFO_ATTR_MOD_HANDOVER</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo821"><tt>\r
+IB_SMINFO_ATTR_MOD_STANDBY</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo959"><tt>\r
+ib_sminfo_get_priority</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_types_h.html#robo960"><tt>\r
+ib_sminfo_get_state</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo822"><tt>\r
+IB_SMINFO_STATE_DISCOVERING</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo823"><tt>\r
+IB_SMINFO_STATE_INIT</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo824"><tt>\r
+IB_SMINFO_STATE_MASTER</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo825"><tt>\r
+IB_SMINFO_STATE_NOTACTIVE</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo826"><tt>\r
+IB_SMINFO_STATE_STANDBY</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_types_h.html#robo827"><tt>\r
+IB_SMP_DIRECTION</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo961"><tt>\r
+ib_smp_get_payload_ptr</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo962"><tt>\r
+ib_smp_get_status</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo963"><tt>\r
+ib_smp_init_new</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo964"><tt>\r
+ib_smp_is_d</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo965"><tt>\r
+ib_smp_is_response</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_types_h.html#robo828"><tt>\r
+IB_SMP_STATUS_MASK</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo966"><tt>\r
+ib_smp_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_h.html#robo253"><tt>\r
+ib_sub_rec_t</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo254"><tt>\r
+ib_sub_req_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo829"><tt>\r
+IB_SUBNET_PATH_HOPS_MAX</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo255"><tt>\r
+ib_subscribe</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_types_h.html#robo967"><tt>\r
+ib_svc_entries_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo968"><tt>\r
+ib_svc_entry_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo969"><tt>\r
+ib_switch_info_clear_state_change</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo970"><tt>\r
+ib_switch_info_get_state_change</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo971"><tt>\r
+ib_switch_info_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo256"><tt>\r
+ib_sync_destroy</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_types_h.html#robo_top_of_doc"><tt>\r
+ib_types.h</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo257"><tt>\r
+ib_unsubscribe</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_h.html#robo258"><tt>\r
+ib_user_query_t</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./user/iba/ib_uvp_h.html#robo_top_of_doc"><tt>\r
+ib_uvp.h</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo972"><tt>\r
+ib_vl_arb_element_get_vl</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo973"><tt>\r
+ib_vl_arb_element_set_vl</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_types_h.html#robo974"><tt>\r
+ib_vl_arb_element_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo975"><tt>\r
+ib_vl_arb_table_record_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo976"><tt>\r
+ib_vl_arb_table_t</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo259"><tt>\r
+ib_wc_status_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo260"><tt>\r
+ib_wc_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo261"><tt>\r
+ib_wc_type_t</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_types_h.html#robo262"><tt>\r
+ib_wr_type_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo977"><tt>\r
+ioc_at_slot</tt></a></td>\r
+<td class="even"><a href="./kernel/iba/ioc_ifc_h.html#robo_top_of_doc"><tt>\r
+ioc_ifc.h</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./kernel/iba/ioc_ifc_h.html#robo2"><tt>\r
+ioc_ifc.h</tt></a></td>\r
+<td class="even"><a href="./complib/cl_ioctl_h.html#robo13"><tt>\r
+IOCTL Object</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_ioctl_h.html#robo357"><tt>\r
+IOCTL_CODE</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./kernel/iba/iou_ifc_h.html#robo3"><tt>\r
+iou_ifc.h</tt></a></td>\r
+<td class="uneven"><a href="./kernel/iba/iou_ifc_h.html#robo_top_of_doc"><tt>\r
+iou_ifc.h</tt></a></td>\r
+<td class="even"><a href="./kernel/iba/ipoib_ifc_h.html#robo_top_of_doc"><tt>\r
+ipoib_ifc.h</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./kernel/iba/ipoib_ifc_h.html#robo4"><tt>\r
+ipoib_ifc.h</tt></a></td>\r
+<td class="even"><a href="./complib/cl_irqlock_h.html#robo14"><tt>\r
+Irqlock</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo830"><tt>\r
+Join States</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_list_h.html#robo15"><tt>\r
+List</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_log_h.html#robo16"><tt>\r
+Log Provider</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo831"><tt>\r
+MAD_BLOCK_GRH_SIZE</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo832"><tt>\r
+MAD_BLOCK_SIZE</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo833"><tt>\r
+MAD_RMPP_DATA_SIZE</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo834"><tt>\r
+MAD_RMPP_HDR_SIZE</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_map_h.html#robo17"><tt>\r
+Map</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_math_h.html#robo417"><tt>\r
+MAX</tt></a></td>\r
+<td class="even"><a href="./complib/cl_memory_h.html#robo42"><tt>\r
+Memory Management</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_math_h.html#robo418"><tt>\r
+MIN</tt></a></td>\r
+<td class="even"><a href="./complib/cl_mutex_h.html#robo5"><tt>\r
+Mutex</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_obj_h.html#robo18"><tt>\r
+Object</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_types_h.html#robo264"><tt>\r
+Object States</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_types_h.html#robo507"><tt>\r
+offsetof</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_h.html#robo38"><tt>\r
+Overview</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/comp_lib_h.html#robo19"><tt>\r
+Overview</tt></a></td>\r
+<td class="even"><a href="./user/iba/ib_uvp_h.html#robo43"><tt>\r
+Overview user-mode Verbs</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_types_h.html#robo265"><tt>\r
+Parameter Keywords</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_types_h.html#robo508"><tt>\r
+PARENT_STRUCT</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_passivelock_h.html#robo20"><tt>\r
+Passive Lock</tt></a></td>\r
+<td class="even"><a href="./complib/cl_perf_h.html#robo483"><tt>\r
+PERF_DECLARE</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_perf_h.html#robo484"><tt>\r
+PERF_DECLARE_START</tt></a></td>\r
+<td class="even"><a href="./complib/cl_perf_h.html#robo21"><tt>\r
+Performance Counters</tt></a></td>\r
+<td class="uneven"><a href="./kernel/complib/cl_pnp_po_h.html#robo22"><tt>\r
+Plug and Play</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_ptr_vector_h.html#robo23"><tt>\r
+Pointer Vector</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_pool_h.html#robo24"><tt>\r
+Pool</tt></a></td>\r
+<td class="even"><a href="./complib/cl_qcomppool_h.html#robo25"><tt>\r
+Quick Composite Pool</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_qlist_h.html#robo26"><tt>\r
+Quick List</tt></a></td>\r
+<td class="even"><a href="./complib/cl_qlockpool_h.html#robo27"><tt>\r
+Quick Locking Pool</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_qmap_h.html#robo28"><tt>\r
+Quick Map</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_qpool_h.html#robo29"><tt>\r
+Quick Pool</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_rbmap_h.html#robo30"><tt>\r
+RB Map</tt></a></td>\r
+<td class="even"><a href="./complib/cl_reqmgr_h.html#robo31"><tt>\r
+Request Manager</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_math_h.html#robo419"><tt>\r
+ROUNDUP</tt></a></td>\r
+<td class="even"><a href="./complib/cl_spinlock_h.html#robo32"><tt>\r
+Spinlock</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_syscallback_h.html#robo33"><tt>\r
+System Callback</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_threadpool_h.html#robo34"><tt>\r
+Thread Pool</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_timer_h.html#robo35"><tt>\r
+Timer</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo41"><tt>\r
+Type Definitions</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_al_ioctl_h.html#robo980"><tt>\r
+ual_alloc_pd_ioctl_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_ioctl_h.html#robo981"><tt>\r
+ual_attach_mcast_ioctl_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_ioctl_h.html#robo982"><tt>\r
+ual_bind_file_ioctl_t</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_al_ioctl_h.html#robo983"><tt>\r
+ual_bind_mw_ioctl_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_ioctl_h.html#robo984"><tt>\r
+ual_cancel_mad_ioctl_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_ioctl_h.html#robo985"><tt>\r
+ual_cancel_sa_req_ioctl_t</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_al_ioctl_h.html#robo986"><tt>\r
+ual_cep_apr_ioctl_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_ioctl_h.html#robo987"><tt>\r
+ual_cep_drep_ioctl_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_ioctl_h.html#robo988"><tt>\r
+ual_cep_dreq_ioctl_t</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_al_ioctl_h.html#robo989"><tt>\r
+ual_cep_get_rtr_ioctl_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_ioctl_h.html#robo990"><tt>\r
+ual_cep_get_rts_ioctl_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_ioctl_h.html#robo991"><tt>\r
+ual_cep_get_timewait_ioctl_t</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_al_ioctl_h.html#robo992"><tt>\r
+ual_cep_handoff_ioctl_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_ioctl_h.html#robo993"><tt>\r
+ual_cep_lap_ioctl_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_ioctl_h.html#robo994"><tt>\r
+ual_cep_listen_ioctl_t</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_al_ioctl_h.html#robo995"><tt>\r
+ual_cep_mra_ioctl_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_ioctl_h.html#robo996"><tt>\r
+ual_cep_poll_ioctl_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_ioctl_h.html#robo997"><tt>\r
+ual_cep_rej_ioctl_t</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_al_ioctl_h.html#robo998"><tt>\r
+ual_cep_rep_ioctl_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_ioctl_h.html#robo999"><tt>\r
+ual_cep_rtu_ioctl_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_ioctl_h.html#robo1000"><tt>\r
+ual_ci_call_ioctl_t</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_al_ioctl_h.html#robo1001"><tt>\r
+ual_close_ca_ioctl_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_ioctl_h.html#robo1002"><tt>\r
+ual_cm_req_ioctl_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_ioctl_h.html#robo1003"><tt>\r
+ual_create_av_ioctl_t</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_al_ioctl_h.html#robo1004"><tt>\r
+ual_create_cep_ioctl_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_ioctl_h.html#robo1005"><tt>\r
+ual_create_cq_ioctl_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_ioctl_h.html#robo1006"><tt>\r
+ual_create_mw_ioctl_t</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_al_ioctl_h.html#robo1007"><tt>\r
+ual_create_qp_ioctl_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_ioctl_h.html#robo1008"><tt>\r
+ual_dealloc_pd_ioctl_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_ioctl_h.html#robo1009"><tt>\r
+ual_dereg_mad_pool_ioctl_t</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_al_ioctl_h.html#robo1010"><tt>\r
+ual_dereg_mad_svc_ioctl_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_ioctl_h.html#robo1011"><tt>\r
+ual_dereg_mr_ioctl_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_ioctl_h.html#robo1012"><tt>\r
+ual_dereg_pnp_ioctl_t</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_al_ioctl_h.html#robo1013"><tt>\r
+ual_destroy_av_ioctl_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_ioctl_h.html#robo1014"><tt>\r
+ual_destroy_cq_ioctl_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_ioctl_h.html#robo1015"><tt>\r
+ual_destroy_mw_ioctl_t</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_al_ioctl_h.html#robo1016"><tt>\r
+ual_destroy_qp_ioctl_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_ioctl_h.html#robo1017"><tt>\r
+ual_detach_mcast_ioctl_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_ioctl_h.html#robo1018"><tt>\r
+ual_force_apm_ioctl_t</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_al_ioctl_h.html#robo1019"><tt>\r
+ual_get_uvp_name_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_ioctl_h.html#robo1020"><tt>\r
+ual_mad_recv_ioctl_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_ioctl_h.html#robo1021"><tt>\r
+ual_modify_av_ioctl_t</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_al_ioctl_h.html#robo1022"><tt>\r
+ual_modify_ca_ioctl_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_ioctl_h.html#robo1023"><tt>\r
+ual_modify_cq_ioctl_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_ioctl_h.html#robo1024"><tt>\r
+ual_modify_qp_ioctl_t</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_al_ioctl_h.html#robo1025"><tt>\r
+ual_open_ca_ioctl_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_ioctl_h.html#robo1026"><tt>\r
+ual_peek_cq_ioctl_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_ioctl_h.html#robo1027"><tt>\r
+ual_poll_cq_ioctl_t</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_al_ioctl_h.html#robo1028"><tt>\r
+ual_poll_pnp_ioctl_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_ioctl_h.html#robo1029"><tt>\r
+ual_post_recv_ioctl_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_ioctl_h.html#robo1030"><tt>\r
+ual_post_send_ioctl_t</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_al_ioctl_h.html#robo1031"><tt>\r
+ual_query_av_ioctl_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_ioctl_h.html#robo1032"><tt>\r
+ual_query_ca_ioctl_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_ioctl_h.html#robo1033"><tt>\r
+ual_query_cq_ioctl_t</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_al_ioctl_h.html#robo1034"><tt>\r
+ual_query_mr_ioctl_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_ioctl_h.html#robo1035"><tt>\r
+ual_query_mw_ioctl_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_ioctl_h.html#robo1036"><tt>\r
+ual_query_qp_ioctl_t</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_al_ioctl_h.html#robo1037"><tt>\r
+ual_rearm_cq_ioctl_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_ioctl_h.html#robo1038"><tt>\r
+ual_rearm_n_cq_ioctl_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_ioctl_h.html#robo1039"><tt>\r
+ual_rearm_pnp_ioctl_in_t</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_al_ioctl_h.html#robo1040"><tt>\r
+ual_rearm_pnp_ioctl_out_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_ioctl_h.html#robo1041"><tt>\r
+ual_reg_mad_pool_ioctl_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_ioctl_h.html#robo1042"><tt>\r
+ual_reg_mad_svc_ioctl_t</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_al_ioctl_h.html#robo1043"><tt>\r
+ual_reg_mem_ioctl_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_ioctl_h.html#robo1044"><tt>\r
+ual_reg_pnp_ioctl_in_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_ioctl_h.html#robo1045"><tt>\r
+ual_reg_shared_ioctl_t</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_al_ioctl_h.html#robo1046"><tt>\r
+ual_reg_shmid_ioctl_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_ioctl_h.html#robo1047"><tt>\r
+ual_rereg_mem_ioctl_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_ioctl_h.html#robo1048"><tt>\r
+ual_send_mad_ioctl_t</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_al_ioctl_h.html#robo1049"><tt>\r
+ual_send_sa_req_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_ioctl_h.html#robo1050"><tt>\r
+ual_spl_qp_ioctl_t</tt></a></td>\r
+<td class="even"><a href="./user/iba/ib_uvp_h.html#robo1051"><tt>\r
+unsupported functions</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_types_h.html#robo680"><tt>\r
+UNUSED_PARAM</tt></a></td>\r
+<td class="even"><a href="./user/iba/ib_uvp_h.html#robo1052"><tt>\r
+uvp_bind_mw</tt></a></td>\r
+<td class="uneven"><a href="./user/iba/ib_uvp_h.html#robo1053"><tt>\r
+uvp_get_interface</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./user/iba/ib_uvp_h.html#robo1054"><tt>\r
+uvp_interface_t</tt></a></td>\r
+<td class="uneven"><a href="./user/iba/ib_uvp_h.html#robo1055"><tt>\r
+uvp_peek_cq</tt></a></td>\r
+<td class="even"><a href="./user/iba/ib_uvp_h.html#robo1056"><tt>\r
+uvp_poll_cq</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./user/iba/ib_uvp_h.html#robo1057"><tt>\r
+uvp_post_allocate_pd_t</tt></a></td>\r
+<td class="even"><a href="./user/iba/ib_uvp_h.html#robo1058"><tt>\r
+uvp_post_attach_mcast_t</tt></a></td>\r
+<td class="uneven"><a href="./user/iba/ib_uvp_h.html#robo1059"><tt>\r
+uvp_post_ci_call</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./user/iba/ib_uvp_h.html#robo1060"><tt>\r
+uvp_post_close_ca_t</tt></a></td>\r
+<td class="uneven"><a href="./user/iba/ib_uvp_h.html#robo1061"><tt>\r
+uvp_post_create_av_t</tt></a></td>\r
+<td class="even"><a href="./user/iba/ib_uvp_h.html#robo1062"><tt>\r
+uvp_post_create_cq_t</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./user/iba/ib_uvp_h.html#robo1063"><tt>\r
+uvp_post_create_mw_t</tt></a></td>\r
+<td class="even"><a href="./user/iba/ib_uvp_h.html#robo1064"><tt>\r
+uvp_post_create_qp_t</tt></a></td>\r
+<td class="uneven"><a href="./user/iba/ib_uvp_h.html#robo1065"><tt>\r
+uvp_post_deallocate_pd_t</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./user/iba/ib_uvp_h.html#robo1066"><tt>\r
+uvp_post_destroy_av_t</tt></a></td>\r
+<td class="uneven"><a href="./user/iba/ib_uvp_h.html#robo1067"><tt>\r
+uvp_post_destroy_cq_t</tt></a></td>\r
+<td class="even"><a href="./user/iba/ib_uvp_h.html#robo1068"><tt>\r
+uvp_post_destroy_mw_t</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./user/iba/ib_uvp_h.html#robo1069"><tt>\r
+uvp_post_destroy_qp_t</tt></a></td>\r
+<td class="even"><a href="./user/iba/ib_uvp_h.html#robo1070"><tt>\r
+uvp_post_detach_mcast_t</tt></a></td>\r
+<td class="uneven"><a href="./user/iba/ib_uvp_h.html#robo1071"><tt>\r
+uvp_post_modify_av_t</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./user/iba/ib_uvp_h.html#robo1072"><tt>\r
+uvp_post_modify_ca_t</tt></a></td>\r
+<td class="uneven"><a href="./user/iba/ib_uvp_h.html#robo1073"><tt>\r
+uvp_post_modify_qp_t</tt></a></td>\r
+<td class="even"><a href="./user/iba/ib_uvp_h.html#robo1074"><tt>\r
+uvp_post_open_ca_t</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./user/iba/ib_uvp_h.html#robo1075"><tt>\r
+uvp_post_query_av_t</tt></a></td>\r
+<td class="even"><a href="./user/iba/ib_uvp_h.html#robo1076"><tt>\r
+uvp_post_query_ca_t</tt></a></td>\r
+<td class="uneven"><a href="./user/iba/ib_uvp_h.html#robo1077"><tt>\r
+uvp_post_query_cq_t</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./user/iba/ib_uvp_h.html#robo1078"><tt>\r
+uvp_post_query_mw_t</tt></a></td>\r
+<td class="uneven"><a href="./user/iba/ib_uvp_h.html#robo1079"><tt>\r
+uvp_post_query_qp_t</tt></a></td>\r
+<td class="even"><a href="./user/iba/ib_uvp_h.html#robo1080"><tt>\r
+uvp_post_recv</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./user/iba/ib_uvp_h.html#robo1081"><tt>\r
+uvp_post_resize_cq_t</tt></a></td>\r
+<td class="even"><a href="./user/iba/ib_uvp_h.html#robo1082"><tt>\r
+uvp_post_send</tt></a></td>\r
+<td class="uneven"><a href="./user/iba/ib_uvp_h.html#robo1083"><tt>\r
+uvp_pre_allocate_pd</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./user/iba/ib_uvp_h.html#robo1084"><tt>\r
+uvp_pre_attach_mcast</tt></a></td>\r
+<td class="uneven"><a href="./user/iba/ib_uvp_h.html#robo1085"><tt>\r
+uvp_pre_ci_call</tt></a></td>\r
+<td class="even"><a href="./user/iba/ib_uvp_h.html#robo1086"><tt>\r
+uvp_pre_close_ca_t</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./user/iba/ib_uvp_h.html#robo1087"><tt>\r
+uvp_pre_create_av</tt></a></td>\r
+<td class="even"><a href="./user/iba/ib_uvp_h.html#robo1088"><tt>\r
+uvp_pre_create_cq</tt></a></td>\r
+<td class="uneven"><a href="./user/iba/ib_uvp_h.html#robo1089"><tt>\r
+uvp_pre_create_mw</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./user/iba/ib_uvp_h.html#robo1090"><tt>\r
+uvp_pre_create_qp</tt></a></td>\r
+<td class="uneven"><a href="./user/iba/ib_uvp_h.html#robo1091"><tt>\r
+uvp_pre_deallocate_pd</tt></a></td>\r
+<td class="even"><a href="./user/iba/ib_uvp_h.html#robo1092"><tt>\r
+uvp_pre_destroy_av</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./user/iba/ib_uvp_h.html#robo1093"><tt>\r
+uvp_pre_destroy_cq</tt></a></td>\r
+<td class="even"><a href="./user/iba/ib_uvp_h.html#robo1094"><tt>\r
+uvp_pre_destroy_mw</tt></a></td>\r
+<td class="uneven"><a href="./user/iba/ib_uvp_h.html#robo1095"><tt>\r
+uvp_pre_destroy_qp</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./user/iba/ib_uvp_h.html#robo1096"><tt>\r
+uvp_pre_detach_mcast</tt></a></td>\r
+<td class="uneven"><a href="./user/iba/ib_uvp_h.html#robo1097"><tt>\r
+uvp_pre_modify_av</tt></a></td>\r
+<td class="even"><a href="./user/iba/ib_uvp_h.html#robo1098"><tt>\r
+uvp_pre_modify_ca</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./user/iba/ib_uvp_h.html#robo1099"><tt>\r
+uvp_pre_modify_qp</tt></a></td>\r
+<td class="even"><a href="./user/iba/ib_uvp_h.html#robo1100"><tt>\r
+uvp_pre_open_ca_t</tt></a></td>\r
+<td class="uneven"><a href="./user/iba/ib_uvp_h.html#robo1101"><tt>\r
+uvp_pre_query_av</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./user/iba/ib_uvp_h.html#robo1102"><tt>\r
+uvp_pre_query_ca</tt></a></td>\r
+<td class="uneven"><a href="./user/iba/ib_uvp_h.html#robo1103"><tt>\r
+uvp_pre_query_cq</tt></a></td>\r
+<td class="even"><a href="./user/iba/ib_uvp_h.html#robo1104"><tt>\r
+uvp_pre_query_mw</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./user/iba/ib_uvp_h.html#robo1105"><tt>\r
+uvp_pre_query_qp</tt></a></td>\r
+<td class="even"><a href="./user/iba/ib_uvp_h.html#robo1106"><tt>\r
+uvp_pre_resize_cq</tt></a></td>\r
+<td class="uneven"><a href="./user/iba/ib_uvp_h.html#robo1107"><tt>\r
+uvp_rearm_cq</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./user/iba/ib_uvp_h.html#robo1108"><tt>\r
+uvp_rearm_n_cq</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_vector_h.html#robo36"><tt>\r
+Vector</tt></a></td>\r
+<td class="even"><a href="./iba/ib_ci_h.html#robo39"><tt>\r
+Verbs</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_waitobj_h.html#robo37"><tt>\r
+Wait Object</tt></a></td>\r
+<td></td>\r
+<td></td>\r
+</tr>\r
+</table>\r
+</body>\r
+</html>\r
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">\r
+<html>\r
+<head>\r
+<link rel="stylesheet" href="./robodoc.css" type="text/css">\r
+<title>Definitions</title>\r
+<!-- Source: ./inc/ -->\r
+<!-- Generated with ROBODoc Version 4.99.22 (Mar 6 2006) -->\r
+</head>\r
+<body bgcolor="#FFFFFF">\r
+<a name="robo_top_of_doc">Generated from ./inc/</a> with <a href="http://sourceforge.net/projects/robodoc/">ROBODoc</a> v4.99.22 on Sun Apr 16 2006 17:39:25\r
+<br />\r
+<p>\r
+[<a href="./robo_sourcefiles.html#top">Sourcefiles</a>]\r
+[<a href="./masterindex.html#top">Index</a>]\r
+[<a href="#top">Definitions</a>]\r
+[<a href="./robo_functions.html#top">Functions</a>]\r
+[<a href="./robo_modules.html#top">Modules</a>]\r
+[<a href="./robo_strutures.html#top">Structures</a>]\r
+</p>\r
+<h1>Definitions</h1>\r
+<table cellspacing="3">\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_debug_h.html#robo305"><tt>\r
+64-bit Print Format</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_h.html#robo44"><tt>\r
+ATS</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_obj_h.html#robo442"><tt>\r
+cl_destroy_type_t</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_debug_h.html#robo308"><tt>\r
+CL_ENTER</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_debug_h.html#robo309"><tt>\r
+CL_EXIT</tt></a></td>\r
+<td class="even"><a href="./complib/cl_byteswap_h.html#robo279"><tt>\r
+CL_HTON16</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_byteswap_h.html#robo282"><tt>\r
+CL_HTON32</tt></a></td>\r
+<td class="even"><a href="./complib/cl_byteswap_h.html#robo283"><tt>\r
+CL_HTON64</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_ioctl_h.html#robo347"><tt>\r
+cl_ioctl_handle_t</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./kernel/complib/cl_pnp_po_h.html#robo490"><tt>\r
+cl_irp_action_t</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_types_h.html#robo441"><tt>\r
+cl_is_state_valid</tt></a></td>\r
+<td class="even"><a href="./complib/cl_list_h.html#robo381"><tt>\r
+cl_list_iterator_t</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_log_h.html#robo395"><tt>\r
+cl_log_type_t</tt></a></td>\r
+<td class="even"><a href="./complib/cl_map_h.html#robo406"><tt>\r
+cl_map_iterator_t</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_byteswap_h.html#robo286"><tt>\r
+CL_NTOH16</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_byteswap_h.html#robo289"><tt>\r
+CL_NTOH32</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_byteswap_h.html#robo290"><tt>\r
+CL_NTOH64</tt></a></td>\r
+<td class="even"><a href="./complib/cl_perf_h.html#robo471"><tt>\r
+cl_perf_clr</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_perf_h.html#robo475"><tt>\r
+cl_perf_inc</tt></a></td>\r
+<td class="even"><a href="./complib/cl_perf_h.html#robo477"><tt>\r
+cl_perf_log</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_perf_h.html#robo479"><tt>\r
+cl_perf_start</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_perf_h.html#robo480"><tt>\r
+cl_perf_stop</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_perf_h.html#robo481"><tt>\r
+cl_perf_update</tt></a></td>\r
+<td class="even"><a href="./complib/cl_perf_h.html#robo482"><tt>\r
+cl_perf_update_ctr</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_async_proc_h.html#robo272"><tt>\r
+cl_pfn_async_proc_cb_t</tt></a></td>\r
+<td class="even"><a href="./complib/cl_comppool_h.html#robo301"><tt>\r
+cl_pfn_cpool_dtor_t</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_comppool_h.html#robo302"><tt>\r
+cl_pfn_cpool_init_t</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_fleximap_h.html#robo342"><tt>\r
+cl_pfn_fmap_apply_t</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_fleximap_h.html#robo343"><tt>\r
+cl_pfn_fmap_cmp_t</tt></a></td>\r
+<td class="even"><a href="./complib/cl_ioctl_h.html#robo356"><tt>\r
+cl_pfn_ioctl_handler_t</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_list_h.html#robo392"><tt>\r
+cl_pfn_list_apply_t</tt></a></td>\r
+<td class="even"><a href="./complib/cl_list_h.html#robo393"><tt>\r
+cl_pfn_list_find_t</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_obj_h.html#robo461"><tt>\r
+cl_pfn_obj_call_t</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./kernel/complib/cl_pnp_po_h.html#robo491"><tt>\r
+cl_pfn_pnp_po_t</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_pool_h.html#robo529"><tt>\r
+cl_pfn_pool_dtor_t</tt></a></td>\r
+<td class="even"><a href="./complib/cl_pool_h.html#robo530"><tt>\r
+cl_pfn_pool_init_t</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_ptr_vector_h.html#robo509"><tt>\r
+cl_pfn_ptr_vec_apply_t</tt></a></td>\r
+<td class="even"><a href="./complib/cl_ptr_vector_h.html#robo510"><tt>\r
+cl_pfn_ptr_vec_find_t</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_qcomppool_h.html#robo540"><tt>\r
+cl_pfn_qcpool_dtor_t</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_qcomppool_h.html#robo541"><tt>\r
+cl_pfn_qcpool_init_t</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_qlist_h.html#robo556"><tt>\r
+cl_pfn_qlist_apply_t</tt></a></td>\r
+<td class="even"><a href="./complib/cl_qlist_h.html#robo557"><tt>\r
+cl_pfn_qlist_find_t</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_qmap_h.html#robo595"><tt>\r
+cl_pfn_qmap_apply_t</tt></a></td>\r
+<td class="even"><a href="./complib/cl_qpool_h.html#robo616"><tt>\r
+cl_pfn_qpool_dtor_t</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_qpool_h.html#robo617"><tt>\r
+cl_pfn_qpool_init_t</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./kernel/complib/cl_pnp_po_h.html#robo492"><tt>\r
+cl_pfn_query_text_t</tt></a></td>\r
+<td class="uneven"><a href="./kernel/complib/cl_pnp_po_h.html#robo493"><tt>\r
+cl_pfn_release_resources_t</tt></a></td>\r
+<td class="even"><a href="./complib/cl_reqmgr_h.html#robo639"><tt>\r
+cl_pfn_req_cb_t</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_reqmgr_h.html#robo640"><tt>\r
+cl_pfn_reqmgr_get_count_t</tt></a></td>\r
+<td class="even"><a href="./complib/cl_syscallback_h.html#robo654"><tt>\r
+cl_pfn_sys_callback_t</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_thread_h.html#robo664"><tt>\r
+cl_pfn_thread_callback_t</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_timer_h.html#robo673"><tt>\r
+cl_pfn_timer_callback_t</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_vector_h.html#robo681"><tt>\r
+cl_pfn_vec_apply_t</tt></a></td>\r
+<td class="even"><a href="./complib/cl_vector_h.html#robo682"><tt>\r
+cl_pfn_vec_dtor_t</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_vector_h.html#robo683"><tt>\r
+cl_pfn_vec_find_t</tt></a></td>\r
+<td class="even"><a href="./complib/cl_vector_h.html#robo684"><tt>\r
+cl_pfn_vec_init_t</tt></a></td>\r
+<td class="uneven"><a href="./kernel/complib/cl_pnp_po_h.html#robo494"><tt>\r
+cl_pnp_po_ext_t</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./kernel/complib/cl_pnp_po_h.html#robo495"><tt>\r
+cl_pnp_state_t</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_debug_h.html#robo311"><tt>\r
+CL_PRINT</tt></a></td>\r
+<td class="even"><a href="./complib/cl_reqmgr_h.html#robo647"><tt>\r
+cl_req_type_t</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_types_h.html#robo303"><tt>\r
+CL_STATUS_MSG</tt></a></td>\r
+<td class="even"><a href="./complib/cl_types_h.html#robo304"><tt>\r
+cl_status_t</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_debug_h.html#robo312"><tt>\r
+CL_TRACE</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_debug_h.html#robo313"><tt>\r
+CL_TRACE_EXIT</tt></a></td>\r
+<td class="uneven"><a href="./kernel/complib/cl_pnp_po_h.html#robo498"><tt>\r
+cl_vfptr_pnp_po_t</tt></a></td>\r
+<td class="even"><a href="./kernel/complib/cl_pnp_po_h.html#robo499"><tt>\r
+cl_vfptr_query_txt</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_waitobj_h.html#robo704"><tt>\r
+cl_waitobj_handle_t</tt></a></td>\r
+<td class="even"><a href="./complib/cl_types_h.html#robo263"><tt>\r
+Data Types</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_debug_h.html#robo314"><tt>\r
+Debug Levels</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_types_h.html#robo835"><tt>\r
+DM_SVC_NAME</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo45"><tt>\r
+ib_access_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_h.html#robo47"><tt>\r
+ib_al_flags_t</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo49"><tt>\r
+ib_api_status_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo50"><tt>\r
+ib_apm_state_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo53"><tt>\r
+ib_apr_status_t</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_types_h.html#robo1155"><tt>\r
+ib_async_event_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo56"><tt>\r
+ib_atomic_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo61"><tt>\r
+ib_ca_mod_t</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo73"><tt>\r
+ib_cm_cap_mask_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_h.html#robo80"><tt>\r
+ib_cm_failover_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo712"><tt>\r
+IB_DEFAULT_PKEY</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_types_h.html#robo713"><tt>\r
+IB_DEFAULT_SUBNET_PREFIX</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo121"><tt>\r
+ib_device_attr_mask_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo854"><tt>\r
+ib_gid_prefix_t</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo856"><tt>\r
+ib_gid_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo141"><tt>\r
+ib_init_type_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo714"><tt>\r
+IB_INVALID_PORT_NUM</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_types_h.html#robo715"><tt>\r
+IB_LID_MCAST_END</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo716"><tt>\r
+IB_LID_MCAST_START</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo717"><tt>\r
+IB_LID_PERMISSIVE</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo718"><tt>\r
+IB_LID_UCAST_END</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo719"><tt>\r
+IB_LID_UCAST_START</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo720"><tt>\r
+ib_link_states_t</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_al_h.html#robo147"><tt>\r
+ib_listen_info_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo721"><tt>\r
+IB_MAD_ATTR_CLASS_PORT_INFO</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo722"><tt>\r
+IB_MAD_ATTR_DIAG_CODE</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo723"><tt>\r
+IB_MAD_ATTR_DIAGNOSTIC_TIMEOUT</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo724"><tt>\r
+IB_MAD_ATTR_GUID_INFO</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo725"><tt>\r
+IB_MAD_ATTR_INFORM_INFO</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_types_h.html#robo726"><tt>\r
+IB_MAD_ATTR_IO_UNIT_INFO</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo727"><tt>\r
+IB_MAD_ATTR_IOC_PROFILE</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo728"><tt>\r
+IB_MAD_ATTR_LED_INFO</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo729"><tt>\r
+IB_MAD_ATTR_LFT_RECORD</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo730"><tt>\r
+IB_MAD_ATTR_LIN_FWD_TBL</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo731"><tt>\r
+IB_MAD_ATTR_LINK_RECORD</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_types_h.html#robo732"><tt>\r
+IB_MAD_ATTR_MCAST_FWD_TBL</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo733"><tt>\r
+IB_MAD_ATTR_MCMEMBER_RECORD</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo734"><tt>\r
+IB_MAD_ATTR_MULTIPATH_RECORD</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo735"><tt>\r
+IB_MAD_ATTR_NODE_DESC</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo736"><tt>\r
+IB_MAD_ATTR_NODE_INFO</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo737"><tt>\r
+IB_MAD_ATTR_NODE_RECORD</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_types_h.html#robo738"><tt>\r
+IB_MAD_ATTR_NOTICE</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo739"><tt>\r
+IB_MAD_ATTR_P_KEY_TABLE</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo740"><tt>\r
+IB_MAD_ATTR_PATH_RECORD</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo741"><tt>\r
+IB_MAD_ATTR_PKEYTBL_RECORD</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo742"><tt>\r
+IB_MAD_ATTR_PORT_CNTRS</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo743"><tt>\r
+IB_MAD_ATTR_PORT_INFO</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_types_h.html#robo744"><tt>\r
+IB_MAD_ATTR_PORT_SMPL_CTRL</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo745"><tt>\r
+IB_MAD_ATTR_PORT_SMPL_RSLT</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo746"><tt>\r
+IB_MAD_ATTR_PORTINFO_RECORD</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo747"><tt>\r
+IB_MAD_ATTR_PREPARE_TO_TEST</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo748"><tt>\r
+IB_MAD_ATTR_RND_FWD_TBL</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo749"><tt>\r
+IB_MAD_ATTR_SERVICE_ENTRIES</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_types_h.html#robo750"><tt>\r
+IB_MAD_ATTR_SERVICE_RECORD</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo751"><tt>\r
+IB_MAD_ATTR_SLVL_RECORD</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo752"><tt>\r
+IB_MAD_ATTR_SLVL_TABLE</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo753"><tt>\r
+IB_MAD_ATTR_SM_INFO</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo754"><tt>\r
+IB_MAD_ATTR_SMINFO_RECORD</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo755"><tt>\r
+IB_MAD_ATTR_SVC_ASSOCIATION_RECORD</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_types_h.html#robo756"><tt>\r
+IB_MAD_ATTR_SWITCH_INFO</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo757"><tt>\r
+IB_MAD_ATTR_TEST_DEVICE_LOOP</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo758"><tt>\r
+IB_MAD_ATTR_TEST_DEVICE_ONCE</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo759"><tt>\r
+IB_MAD_ATTR_TRACE_RECORD</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo760"><tt>\r
+IB_MAD_ATTR_VENDOR_DIAG</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo761"><tt>\r
+IB_MAD_ATTR_VL_ARBITRATION</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_types_h.html#robo762"><tt>\r
+IB_MAD_ATTR_VLARB_RECORD</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo763"><tt>\r
+IB_MAD_METHOD_GET</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo764"><tt>\r
+IB_MAD_METHOD_GET_RESP</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo765"><tt>\r
+IB_MAD_METHOD_GETTABLE</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo766"><tt>\r
+IB_MAD_METHOD_GETTABLE_RESP</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo767"><tt>\r
+IB_MAD_METHOD_REPORT</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_types_h.html#robo768"><tt>\r
+IB_MAD_METHOD_REPORT_RESP</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo769"><tt>\r
+IB_MAD_METHOD_RESP_MASK</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo770"><tt>\r
+IB_MAD_METHOD_SEND</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo771"><tt>\r
+IB_MAD_METHOD_SET</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo772"><tt>\r
+IB_MAD_METHOD_TRAP</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo773"><tt>\r
+IB_MAD_METHOD_TRAP_REPRESS</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_types_h.html#robo774"><tt>\r
+IB_MAD_STATUS_BUSY</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo775"><tt>\r
+IB_MAD_STATUS_INVALID_FIELD</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo776"><tt>\r
+IB_MAD_STATUS_REDIRECT</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo777"><tt>\r
+IB_MAD_STATUS_UNSUP_CLASS_VER</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo778"><tt>\r
+IB_MAD_STATUS_UNSUP_METHOD</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo779"><tt>\r
+IB_MAD_STATUS_UNSUP_METHOD_ATTR</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_al_h.html#robo152"><tt>\r
+ib_mad_svc_type_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo780"><tt>\r
+IB_MAX_METHOD</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo781"><tt>\r
+IB_MCAST_BLOCK_ID_MASK_HO</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo782"><tt>\r
+IB_MCAST_BLOCK_SIZE</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo783"><tt>\r
+IB_MCAST_MASK_SIZE</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo784"><tt>\r
+IB_MCAST_MAX_BLOCK_ID</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_types_h.html#robo785"><tt>\r
+IB_MCAST_POSITION_MASK_HO</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo786"><tt>\r
+IB_MCAST_POSITION_MAX</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo787"><tt>\r
+IB_MCAST_POSITION_SHIFT</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo788"><tt>\r
+IB_MCLASS_BM</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo789"><tt>\r
+IB_MCLASS_COMM_MGMT</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo790"><tt>\r
+IB_MCLASS_DEV_MGMT</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_types_h.html#robo791"><tt>\r
+IB_MCLASS_PERF</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo792"><tt>\r
+IB_MCLASS_SNMP</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo793"><tt>\r
+IB_MCLASS_SUBN_ADM</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo794"><tt>\r
+IB_MCLASS_SUBN_DIR</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo795"><tt>\r
+IB_MCLASS_SUBN_LID</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo796"><tt>\r
+IB_MCLASS_VENDOR_HIGH_RANGE_MAX</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_types_h.html#robo797"><tt>\r
+IB_MCLASS_VENDOR_HIGH_RANGE_MIN</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo798"><tt>\r
+IB_MCLASS_VENDOR_LOW_RANGE_MAX</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo799"><tt>\r
+IB_MCLASS_VENDOR_LOW_RANGE_MIN</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo161"><tt>\r
+ib_mr_mod_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo800"><tt>\r
+IB_MTU_TYPE</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo893"><tt>\r
+ib_net16_t</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_types_h.html#robo894"><tt>\r
+ib_net32_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo895"><tt>\r
+ib_net64_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo801"><tt>\r
+IB_NODE_NUM_PORTS_MAX</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo802"><tt>\r
+IB_NODE_TYPE_CA</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo803"><tt>\r
+IB_NODE_TYPE_ROUTER</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo804"><tt>\r
+IB_NODE_TYPE_SWITCH</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_types_h.html#robo805"><tt>\r
+IB_NOTICE_NODE_TYPE_CA</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo806"><tt>\r
+IB_NOTICE_NODE_TYPE_ROUTER</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo807"><tt>\r
+IB_NOTICE_NODE_TYPE_SUBN_MGMT</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo808"><tt>\r
+IB_NOTICE_NODE_TYPE_SWITCH</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo809"><tt>\r
+IB_PATH_REC_BASE_MASK</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo810"><tt>\r
+IB_PATH_REC_SELECTOR_MASK</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_types_h.html#robo811"><tt>\r
+IB_PATH_SELECTOR_TYPE</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo165"><tt>\r
+ib_pd_type_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo812"><tt>\r
+IB_PKEY_BASE_MASK</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo813"><tt>\r
+IB_PKEY_ENTRIES_MAX</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo814"><tt>\r
+IB_PKEY_MAX_BLOCKS</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo815"><tt>\r
+IB_PKEY_TYPE_MASK</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_al_h.html#robo190"><tt>\r
+ib_pnp_class_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo191"><tt>\r
+ib_pnp_event_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo816"><tt>\r
+IB_QP1_WELL_KNOWN_Q_KEY</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo208"><tt>\r
+ib_qp_opts_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo209"><tt>\r
+ib_qp_state_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo210"><tt>\r
+ib_qp_type_t</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_al_h.html#robo221"><tt>\r
+ib_query_type_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo224"><tt>\r
+ib_recv_opt_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo238"><tt>\r
+ib_rej_status_t</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo248"><tt>\r
+ib_send_opt_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo817"><tt>\r
+IB_SMINFO_ATTR_MOD_ACKNOWLEDGE</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo818"><tt>\r
+IB_SMINFO_ATTR_MOD_DISABLE</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_types_h.html#robo819"><tt>\r
+IB_SMINFO_ATTR_MOD_DISCOVER</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo820"><tt>\r
+IB_SMINFO_ATTR_MOD_HANDOVER</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo821"><tt>\r
+IB_SMINFO_ATTR_MOD_STANDBY</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo822"><tt>\r
+IB_SMINFO_STATE_DISCOVERING</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo823"><tt>\r
+IB_SMINFO_STATE_INIT</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo824"><tt>\r
+IB_SMINFO_STATE_MASTER</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_types_h.html#robo825"><tt>\r
+IB_SMINFO_STATE_NOTACTIVE</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo826"><tt>\r
+IB_SMINFO_STATE_STANDBY</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo827"><tt>\r
+IB_SMP_DIRECTION</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo828"><tt>\r
+IB_SMP_STATUS_MASK</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo829"><tt>\r
+IB_SUBNET_PATH_HOPS_MAX</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo259"><tt>\r
+ib_wc_status_t</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_types_h.html#robo261"><tt>\r
+ib_wc_type_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo262"><tt>\r
+ib_wr_type_t</tt></a></td>\r
+<td class="even"><a href="./complib/cl_ioctl_h.html#robo357"><tt>\r
+IOCTL_CODE</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo830"><tt>\r
+Join States</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo831"><tt>\r
+MAD_BLOCK_GRH_SIZE</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo832"><tt>\r
+MAD_BLOCK_SIZE</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_types_h.html#robo833"><tt>\r
+MAD_RMPP_DATA_SIZE</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo834"><tt>\r
+MAD_RMPP_HDR_SIZE</tt></a></td>\r
+<td class="even"><a href="./complib/cl_math_h.html#robo417"><tt>\r
+MAX</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_math_h.html#robo418"><tt>\r
+MIN</tt></a></td>\r
+<td class="even"><a href="./complib/cl_types_h.html#robo264"><tt>\r
+Object States</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_types_h.html#robo507"><tt>\r
+offsetof</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_types_h.html#robo265"><tt>\r
+Parameter Keywords</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_types_h.html#robo508"><tt>\r
+PARENT_STRUCT</tt></a></td>\r
+<td class="even"><a href="./complib/cl_perf_h.html#robo483"><tt>\r
+PERF_DECLARE</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_perf_h.html#robo484"><tt>\r
+PERF_DECLARE_START</tt></a></td>\r
+<td class="even"><a href="./complib/cl_math_h.html#robo419"><tt>\r
+ROUNDUP</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_types_h.html#robo680"><tt>\r
+UNUSED_PARAM</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td></td>\r
+<td></td>\r
+<td></td>\r
+</tr>\r
+</table>\r
+</body>\r
+</html>\r
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">\r
+<html>\r
+<head>\r
+<link rel="stylesheet" href="./robodoc.css" type="text/css">\r
+<title>Functions</title>\r
+<!-- Source: ./inc/ -->\r
+<!-- Generated with ROBODoc Version 4.99.22 (Mar 6 2006) -->\r
+</head>\r
+<body bgcolor="#FFFFFF">\r
+<a name="robo_top_of_doc">Generated from ./inc/</a> with <a href="http://sourceforge.net/projects/robodoc/">ROBODoc</a> v4.99.22 on Sun Apr 16 2006 17:39:25\r
+<br />\r
+<p>\r
+[<a href="./robo_sourcefiles.html#top">Sourcefiles</a>]\r
+[<a href="./masterindex.html#top">Index</a>]\r
+[<a href="./robo_definitions.html#top">Definitions</a>]\r
+[<a href="#top">Functions</a>]\r
+[<a href="./robo_modules.html#top">Modules</a>]\r
+[<a href="./robo_strutures.html#top">Structures</a>]\r
+</p>\r
+<h1>Functions</h1>\r
+<table cellspacing="3">\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_ci_h.html#robo1109"><tt>\r
+ci_allocate_pd</tt></a></td>\r
+<td class="even"><a href="./iba/ib_ci_h.html#robo1110"><tt>\r
+ci_async_event_cb_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_ci_h.html#robo1111"><tt>\r
+ci_attach_mcast</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_ci_h.html#robo1112"><tt>\r
+ci_bind_mw</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_ci_h.html#robo1113"><tt>\r
+ci_close_ca</tt></a></td>\r
+<td class="even"><a href="./iba/ib_ci_h.html#robo1114"><tt>\r
+ci_completion_cb_t</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_ci_h.html#robo1115"><tt>\r
+ci_create_av</tt></a></td>\r
+<td class="even"><a href="./iba/ib_ci_h.html#robo1116"><tt>\r
+ci_create_cq</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_ci_h.html#robo1117"><tt>\r
+ci_create_mw</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_ci_h.html#robo1118"><tt>\r
+ci_create_qp</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_ci_h.html#robo1119"><tt>\r
+ci_create_spl_qp</tt></a></td>\r
+<td class="even"><a href="./iba/ib_ci_h.html#robo1120"><tt>\r
+ci_deallocate_pd</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_ci_h.html#robo1121"><tt>\r
+ci_deregister_mr</tt></a></td>\r
+<td class="even"><a href="./iba/ib_ci_h.html#robo1122"><tt>\r
+ci_destroy_av</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_ci_h.html#robo1123"><tt>\r
+ci_destroy_cq</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_ci_h.html#robo1124"><tt>\r
+ci_destroy_mw</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_ci_h.html#robo1125"><tt>\r
+ci_destroy_qp</tt></a></td>\r
+<td class="even"><a href="./iba/ib_ci_h.html#robo1126"><tt>\r
+ci_detach_mcast</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_ci_h.html#robo1127"><tt>\r
+ci_enable_cq_notify</tt></a></td>\r
+<td class="even"><a href="./iba/ib_ci_h.html#robo1128"><tt>\r
+ci_enable_ncomp_cq_notify</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_ci_h.html#robo1130"><tt>\r
+ci_local_mad</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_ci_h.html#robo1131"><tt>\r
+ci_modify_av</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_ci_h.html#robo1132"><tt>\r
+ci_modify_ca</tt></a></td>\r
+<td class="even"><a href="./iba/ib_ci_h.html#robo1133"><tt>\r
+ci_modify_mr</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_ci_h.html#robo1134"><tt>\r
+ci_modify_pmr</tt></a></td>\r
+<td class="even"><a href="./iba/ib_ci_h.html#robo1135"><tt>\r
+ci_modify_qp</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_ci_h.html#robo1136"><tt>\r
+ci_open_ca</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_ci_h.html#robo1137"><tt>\r
+ci_peek_cq</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_ci_h.html#robo1138"><tt>\r
+ci_poll_cq</tt></a></td>\r
+<td class="even"><a href="./iba/ib_ci_h.html#robo1139"><tt>\r
+ci_post_recv</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_ci_h.html#robo1140"><tt>\r
+ci_post_send</tt></a></td>\r
+<td class="even"><a href="./iba/ib_ci_h.html#robo1141"><tt>\r
+ci_query_av</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_ci_h.html#robo1142"><tt>\r
+ci_query_ca</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_ci_h.html#robo1143"><tt>\r
+ci_query_cq</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_ci_h.html#robo1144"><tt>\r
+ci_query_mr</tt></a></td>\r
+<td class="even"><a href="./iba/ib_ci_h.html#robo1145"><tt>\r
+ci_query_mw</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_ci_h.html#robo1146"><tt>\r
+ci_query_qp</tt></a></td>\r
+<td class="even"><a href="./iba/ib_ci_h.html#robo1147"><tt>\r
+ci_register_mr</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_ci_h.html#robo1148"><tt>\r
+ci_register_pmr</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_ci_h.html#robo1149"><tt>\r
+ci_register_smr</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_ci_h.html#robo1150"><tt>\r
+ci_resize_cq</tt></a></td>\r
+<td class="even"><a href="./iba/ib_ci_h.html#robo1151"><tt>\r
+ci_um_close_ca_t</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_ci_h.html#robo1152"><tt>\r
+ci_um_open_ca</tt></a></td>\r
+<td class="even"><a href="./iba/ib_ci_h.html#robo1154"><tt>\r
+ci_vendor_call</tt></a></td>\r
+<td class="uneven"><a href="./kernel/complib/cl_pnp_po_h.html#robo485"><tt>\r
+cl_alloc_relations</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_async_proc_h.html#robo266"><tt>\r
+cl_async_proc_construct</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_async_proc_h.html#robo267"><tt>\r
+cl_async_proc_destroy</tt></a></td>\r
+<td class="even"><a href="./complib/cl_async_proc_h.html#robo268"><tt>\r
+cl_async_proc_init</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_async_proc_h.html#robo270"><tt>\r
+cl_async_proc_queue</tt></a></td>\r
+<td class="even"><a href="./complib/cl_atomic_h.html#robo273"><tt>\r
+cl_atomic_add</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_atomic_h.html#robo274"><tt>\r
+cl_atomic_comp_xchg</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_atomic_h.html#robo275"><tt>\r
+cl_atomic_dec</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_atomic_h.html#robo276"><tt>\r
+cl_atomic_inc</tt></a></td>\r
+<td class="even"><a href="./complib/cl_atomic_h.html#robo277"><tt>\r
+cl_atomic_sub</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_atomic_h.html#robo278"><tt>\r
+cl_atomic_xchg</tt></a></td>\r
+<td class="even"><a href="./complib/cl_debug_h.html#robo306"><tt>\r
+cl_break</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_memory_h.html#robo420"><tt>\r
+cl_check_for_read</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_memory_h.html#robo421"><tt>\r
+cl_check_for_write</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_memory_h.html#robo422"><tt>\r
+cl_copy_from_user</tt></a></td>\r
+<td class="even"><a href="./complib/cl_memory_h.html#robo423"><tt>\r
+cl_copy_to_user</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_comppool_h.html#robo292"><tt>\r
+cl_cpool_construct</tt></a></td>\r
+<td class="even"><a href="./complib/cl_comppool_h.html#robo293"><tt>\r
+cl_cpool_count</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_comppool_h.html#robo294"><tt>\r
+cl_cpool_destroy</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_comppool_h.html#robo295"><tt>\r
+cl_cpool_get</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_comppool_h.html#robo296"><tt>\r
+cl_cpool_grow</tt></a></td>\r
+<td class="even"><a href="./complib/cl_comppool_h.html#robo297"><tt>\r
+cl_cpool_init</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_comppool_h.html#robo298"><tt>\r
+cl_cpool_put</tt></a></td>\r
+<td class="even"><a href="./complib/cl_debug_h.html#robo307"><tt>\r
+cl_dbg_out</tt></a></td>\r
+<td class="uneven"><a href="./kernel/complib/cl_pnp_po_h.html#robo486"><tt>\r
+cl_do_remove</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./kernel/complib/cl_pnp_po_h.html#robo487"><tt>\r
+cl_do_sync_pnp</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_event_h.html#robo316"><tt>\r
+cl_event_construct</tt></a></td>\r
+<td class="even"><a href="./complib/cl_event_h.html#robo317"><tt>\r
+cl_event_destroy</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_event_h.html#robo318"><tt>\r
+cl_event_init</tt></a></td>\r
+<td class="even"><a href="./complib/cl_event_h.html#robo319"><tt>\r
+cl_event_reset</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_event_h.html#robo320"><tt>\r
+cl_event_signal</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_event_h.html#robo321"><tt>\r
+cl_event_wait_on</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_fleximap_h.html#robo323"><tt>\r
+cl_fmap_apply_func</tt></a></td>\r
+<td class="even"><a href="./complib/cl_fleximap_h.html#robo324"><tt>\r
+cl_fmap_count</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_fleximap_h.html#robo325"><tt>\r
+cl_fmap_delta</tt></a></td>\r
+<td class="even"><a href="./complib/cl_fleximap_h.html#robo326"><tt>\r
+cl_fmap_end</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_fleximap_h.html#robo327"><tt>\r
+cl_fmap_get</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_fleximap_h.html#robo328"><tt>\r
+cl_fmap_head</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_fleximap_h.html#robo329"><tt>\r
+cl_fmap_init</tt></a></td>\r
+<td class="even"><a href="./complib/cl_fleximap_h.html#robo330"><tt>\r
+cl_fmap_insert</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_fleximap_h.html#robo332"><tt>\r
+cl_fmap_key</tt></a></td>\r
+<td class="even"><a href="./complib/cl_fleximap_h.html#robo333"><tt>\r
+cl_fmap_merge</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_fleximap_h.html#robo334"><tt>\r
+cl_fmap_next</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_fleximap_h.html#robo335"><tt>\r
+cl_fmap_prev</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_fleximap_h.html#robo336"><tt>\r
+cl_fmap_remove</tt></a></td>\r
+<td class="even"><a href="./complib/cl_fleximap_h.html#robo337"><tt>\r
+cl_fmap_remove_all</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_fleximap_h.html#robo338"><tt>\r
+cl_fmap_remove_item</tt></a></td>\r
+<td class="even"><a href="./complib/cl_fleximap_h.html#robo340"><tt>\r
+cl_fmap_tail</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_memory_h.html#robo424"><tt>\r
+cl_free</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./kernel/complib/cl_bus_ifc_h.html#robo488"><tt>\r
+cl_fwd_query_ifc</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_memory_h.html#robo425"><tt>\r
+cl_get_pagesize</tt></a></td>\r
+<td class="even"><a href="./complib/cl_memory_h.html#robo426"><tt>\r
+cl_get_physaddr</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_timer_h.html#robo668"><tt>\r
+cl_get_tick_count</tt></a></td>\r
+<td class="even"><a href="./complib/cl_timer_h.html#robo669"><tt>\r
+cl_get_tick_freq</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_timer_h.html#robo670"><tt>\r
+cl_get_time_stamp</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_timer_h.html#robo671"><tt>\r
+cl_get_time_stamp_sec</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_timer_h.html#robo672"><tt>\r
+cl_get_time_stamp_usec</tt></a></td>\r
+<td class="even"><a href="./complib/cl_byteswap_h.html#robo280"><tt>\r
+cl_hton16</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_byteswap_h.html#robo281"><tt>\r
+cl_hton32</tt></a></td>\r
+<td class="even"><a href="./complib/cl_byteswap_h.html#robo284"><tt>\r
+cl_hton64</tt></a></td>\r
+<td class="uneven"><a href="./kernel/complib/cl_pnp_po_h.html#robo489"><tt>\r
+cl_init_pnp_po_ext</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_ioctl_h.html#robo344"><tt>\r
+cl_ioctl_cmd</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_ioctl_h.html#robo345"><tt>\r
+cl_ioctl_complete</tt></a></td>\r
+<td class="even"><a href="./complib/cl_ioctl_h.html#robo346"><tt>\r
+cl_ioctl_ctl_code</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_ioctl_h.html#robo348"><tt>\r
+cl_ioctl_in_buf</tt></a></td>\r
+<td class="even"><a href="./complib/cl_ioctl_h.html#robo349"><tt>\r
+cl_ioctl_in_size</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_ioctl_h.html#robo350"><tt>\r
+cl_ioctl_out_buf</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_ioctl_h.html#robo351"><tt>\r
+cl_ioctl_out_size</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_ioctl_h.html#robo352"><tt>\r
+cl_ioctl_process</tt></a></td>\r
+<td class="even"><a href="./complib/cl_ioctl_h.html#robo353"><tt>\r
+cl_ioctl_request</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_ioctl_h.html#robo354"><tt>\r
+cl_ioctl_result</tt></a></td>\r
+<td class="even"><a href="./complib/cl_ioctl_h.html#robo355"><tt>\r
+cl_ioctl_type</tt></a></td>\r
+<td class="uneven"><a href="./kernel/complib/cl_pnp_po_h.html#robo500"><tt>\r
+cl_irp_complete</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./kernel/complib/cl_pnp_po_h.html#robo501"><tt>\r
+cl_irp_ignore</tt></a></td>\r
+<td class="uneven"><a href="./kernel/complib/cl_pnp_po_h.html#robo502"><tt>\r
+cl_irp_skip</tt></a></td>\r
+<td class="even"><a href="./kernel/complib/cl_pnp_po_h.html#robo503"><tt>\r
+cl_irp_succeed</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./kernel/complib/cl_pnp_po_h.html#robo504"><tt>\r
+cl_irp_unsupported</tt></a></td>\r
+<td class="even"><a href="./complib/cl_irqlock_h.html#robo358"><tt>\r
+cl_irqlock_acquire</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_irqlock_h.html#robo359"><tt>\r
+cl_irqlock_construct</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_irqlock_h.html#robo360"><tt>\r
+cl_irqlock_destroy</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_irqlock_h.html#robo361"><tt>\r
+cl_irqlock_init</tt></a></td>\r
+<td class="even"><a href="./complib/cl_irqlock_h.html#robo362"><tt>\r
+cl_irqlock_release</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_thread_h.html#robo663"><tt>\r
+cl_is_blockable</tt></a></td>\r
+<td class="even"><a href="./complib/cl_comppool_h.html#robo300"><tt>\r
+cl_is_cpool_inited</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_fleximap_h.html#robo341"><tt>\r
+cl_is_fmap_empty</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_qlist_h.html#robo552"><tt>\r
+cl_is_item_in_qlist</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_list_h.html#robo363"><tt>\r
+cl_is_list_empty</tt></a></td>\r
+<td class="even"><a href="./complib/cl_list_h.html#robo364"><tt>\r
+cl_is_list_inited</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_map_h.html#robo396"><tt>\r
+cl_is_map_empty</tt></a></td>\r
+<td class="even"><a href="./complib/cl_map_h.html#robo322"><tt>\r
+cl_is_map_inited</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_list_h.html#robo365"><tt>\r
+cl_is_object_in_list</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_pool_h.html#robo528"><tt>\r
+cl_is_pool_inited</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_qcomppool_h.html#robo539"><tt>\r
+cl_is_qcpool_inited</tt></a></td>\r
+<td class="even"><a href="./complib/cl_qlist_h.html#robo553"><tt>\r
+cl_is_qlist_empty</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_qmap_h.html#robo592"><tt>\r
+cl_is_qmap_empty</tt></a></td>\r
+<td class="even"><a href="./complib/cl_qpool_h.html#robo615"><tt>\r
+cl_is_qpool_inited</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_rbmap_h.html#robo627"><tt>\r
+cl_is_rbmap_empty</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_syscallback_h.html#robo653"><tt>\r
+cl_is_sys_callback_inited</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_list_h.html#robo366"><tt>\r
+cl_list_apply_func</tt></a></td>\r
+<td class="even"><a href="./complib/cl_list_h.html#robo367"><tt>\r
+cl_list_construct</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_list_h.html#robo368"><tt>\r
+cl_list_count</tt></a></td>\r
+<td class="even"><a href="./complib/cl_list_h.html#robo369"><tt>\r
+cl_list_destroy</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_list_h.html#robo370"><tt>\r
+cl_list_end</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_list_h.html#robo371"><tt>\r
+cl_list_find_from_head</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_list_h.html#robo372"><tt>\r
+cl_list_find_from_tail</tt></a></td>\r
+<td class="even"><a href="./complib/cl_list_h.html#robo373"><tt>\r
+cl_list_head</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_list_h.html#robo374"><tt>\r
+cl_list_init</tt></a></td>\r
+<td class="even"><a href="./complib/cl_list_h.html#robo375"><tt>\r
+cl_list_insert_array_head</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_list_h.html#robo376"><tt>\r
+cl_list_insert_array_tail</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_list_h.html#robo377"><tt>\r
+cl_list_insert_head</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_list_h.html#robo378"><tt>\r
+cl_list_insert_next</tt></a></td>\r
+<td class="even"><a href="./complib/cl_list_h.html#robo379"><tt>\r
+cl_list_insert_prev</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_list_h.html#robo380"><tt>\r
+cl_list_insert_tail</tt></a></td>\r
+<td class="even"><a href="./complib/cl_list_h.html#robo382"><tt>\r
+cl_list_next</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_list_h.html#robo383"><tt>\r
+cl_list_obj</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_list_h.html#robo384"><tt>\r
+cl_list_prev</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_list_h.html#robo385"><tt>\r
+cl_list_remove_all</tt></a></td>\r
+<td class="even"><a href="./complib/cl_list_h.html#robo386"><tt>\r
+cl_list_remove_head</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_list_h.html#robo387"><tt>\r
+cl_list_remove_item</tt></a></td>\r
+<td class="even"><a href="./complib/cl_list_h.html#robo388"><tt>\r
+cl_list_remove_object</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_list_h.html#robo389"><tt>\r
+cl_list_remove_tail</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_list_h.html#robo391"><tt>\r
+cl_list_tail</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_log_h.html#robo394"><tt>\r
+cl_log_event</tt></a></td>\r
+<td class="even"><a href="./complib/cl_memory_h.html#robo427"><tt>\r
+cl_malloc</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_map_h.html#robo397"><tt>\r
+cl_map_construct</tt></a></td>\r
+<td class="even"><a href="./complib/cl_map_h.html#robo398"><tt>\r
+cl_map_count</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_map_h.html#robo399"><tt>\r
+cl_map_delta</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_map_h.html#robo400"><tt>\r
+cl_map_destroy</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_map_h.html#robo401"><tt>\r
+cl_map_end</tt></a></td>\r
+<td class="even"><a href="./complib/cl_map_h.html#robo402"><tt>\r
+cl_map_get</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_map_h.html#robo403"><tt>\r
+cl_map_head</tt></a></td>\r
+<td class="even"><a href="./complib/cl_map_h.html#robo404"><tt>\r
+cl_map_init</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_map_h.html#robo405"><tt>\r
+cl_map_insert</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_map_h.html#robo407"><tt>\r
+cl_map_key</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_map_h.html#robo408"><tt>\r
+cl_map_merge</tt></a></td>\r
+<td class="even"><a href="./complib/cl_map_h.html#robo409"><tt>\r
+cl_map_next</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_map_h.html#robo410"><tt>\r
+cl_map_obj</tt></a></td>\r
+<td class="even"><a href="./complib/cl_map_h.html#robo411"><tt>\r
+cl_map_prev</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_map_h.html#robo412"><tt>\r
+cl_map_remove</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_map_h.html#robo413"><tt>\r
+cl_map_remove_all</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_map_h.html#robo414"><tt>\r
+cl_map_remove_item</tt></a></td>\r
+<td class="even"><a href="./complib/cl_map_h.html#robo416"><tt>\r
+cl_map_tail</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_memory_h.html#robo428"><tt>\r
+cl_mem_display</tt></a></td>\r
+<td class="even"><a href="./complib/cl_memory_h.html#robo429"><tt>\r
+cl_memclr</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_memory_h.html#robo430"><tt>\r
+cl_memcmp</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_memory_h.html#robo431"><tt>\r
+cl_memcpy</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_memory_h.html#robo432"><tt>\r
+cl_memset</tt></a></td>\r
+<td class="even"><a href="./complib/cl_debug_h.html#robo310"><tt>\r
+cl_msg_out</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_mutex_h.html#robo436"><tt>\r
+cl_mutex_acquire</tt></a></td>\r
+<td class="even"><a href="./complib/cl_mutex_h.html#robo437"><tt>\r
+cl_mutex_construct</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_mutex_h.html#robo438"><tt>\r
+cl_mutex_destroy</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_mutex_h.html#robo439"><tt>\r
+cl_mutex_init</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_mutex_h.html#robo440"><tt>\r
+cl_mutex_release</tt></a></td>\r
+<td class="even"><a href="./complib/cl_byteswap_h.html#robo285"><tt>\r
+cl_ntoh</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_byteswap_h.html#robo287"><tt>\r
+cl_ntoh16</tt></a></td>\r
+<td class="even"><a href="./complib/cl_byteswap_h.html#robo288"><tt>\r
+cl_ntoh32</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_byteswap_h.html#robo291"><tt>\r
+cl_ntoh64</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_obj_h.html#robo443"><tt>\r
+cl_obj_construct</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_obj_h.html#robo444"><tt>\r
+cl_obj_deinit</tt></a></td>\r
+<td class="even"><a href="./complib/cl_obj_h.html#robo445"><tt>\r
+cl_obj_deref</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_obj_h.html#robo446"><tt>\r
+cl_obj_destroy</tt></a></td>\r
+<td class="even"><a href="./complib/cl_obj_h.html#robo447"><tt>\r
+cl_obj_init</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_obj_h.html#robo448"><tt>\r
+cl_obj_insert_rel</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_obj_h.html#robo449"><tt>\r
+cl_obj_insert_rel_parent_locked</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_obj_h.html#robo450"><tt>\r
+cl_obj_lock</tt></a></td>\r
+<td class="even"><a href="./complib/cl_obj_h.html#robo451"><tt>\r
+cl_obj_mgr_create</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_obj_h.html#robo452"><tt>\r
+cl_obj_mgr_destroy</tt></a></td>\r
+<td class="even"><a href="./complib/cl_obj_h.html#robo454"><tt>\r
+cl_obj_ref</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_obj_h.html#robo456"><tt>\r
+cl_obj_remove_rel</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_obj_h.html#robo457"><tt>\r
+cl_obj_reset</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_obj_h.html#robo459"><tt>\r
+cl_obj_type</tt></a></td>\r
+<td class="even"><a href="./complib/cl_obj_h.html#robo460"><tt>\r
+cl_obj_unlock</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_memory_h.html#robo433"><tt>\r
+cl_palloc</tt></a></td>\r
+<td class="even"><a href="./complib/cl_types_h.html#robo315"><tt>\r
+cl_panic</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_perf_h.html#robo472"><tt>\r
+cl_perf_construct</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_perf_h.html#robo473"><tt>\r
+cl_perf_destroy</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_perf_h.html#robo474"><tt>\r
+cl_perf_display</tt></a></td>\r
+<td class="even"><a href="./complib/cl_perf_h.html#robo476"><tt>\r
+cl_perf_init</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_perf_h.html#robo478"><tt>\r
+cl_perf_reset</tt></a></td>\r
+<td class="even"><a href="./complib/cl_passivelock_h.html#robo464"><tt>\r
+cl_plock_acquire</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_passivelock_h.html#robo465"><tt>\r
+cl_plock_construct</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_passivelock_h.html#robo466"><tt>\r
+cl_plock_destroy</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_passivelock_h.html#robo467"><tt>\r
+cl_plock_excl_acquire</tt></a></td>\r
+<td class="even"><a href="./complib/cl_passivelock_h.html#robo468"><tt>\r
+cl_plock_init</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_passivelock_h.html#robo469"><tt>\r
+cl_plock_release</tt></a></td>\r
+<td class="even"><a href="./kernel/complib/cl_pnp_po_h.html#robo505"><tt>\r
+cl_pnp</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_pool_h.html#robo531"><tt>\r
+cl_pool_construct</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_pool_h.html#robo532"><tt>\r
+cl_pool_count</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_pool_h.html#robo533"><tt>\r
+cl_pool_destroy</tt></a></td>\r
+<td class="even"><a href="./complib/cl_pool_h.html#robo534"><tt>\r
+cl_pool_get</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_pool_h.html#robo535"><tt>\r
+cl_pool_grow</tt></a></td>\r
+<td class="even"><a href="./complib/cl_pool_h.html#robo536"><tt>\r
+cl_pool_init</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_pool_h.html#robo537"><tt>\r
+cl_pool_put</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./kernel/complib/cl_pnp_po_h.html#robo506"><tt>\r
+cl_power</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_thread_h.html#robo665"><tt>\r
+cl_proc_count</tt></a></td>\r
+<td class="even"><a href="./complib/cl_ptr_vector_h.html#robo511"><tt>\r
+cl_ptr_vector_apply_func</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_ptr_vector_h.html#robo512"><tt>\r
+cl_ptr_vector_at</tt></a></td>\r
+<td class="even"><a href="./complib/cl_ptr_vector_h.html#robo513"><tt>\r
+cl_ptr_vector_construct</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_ptr_vector_h.html#robo514"><tt>\r
+cl_ptr_vector_destroy</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_ptr_vector_h.html#robo515"><tt>\r
+cl_ptr_vector_find_from_end</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_ptr_vector_h.html#robo516"><tt>\r
+cl_ptr_vector_find_from_start</tt></a></td>\r
+<td class="even"><a href="./complib/cl_ptr_vector_h.html#robo517"><tt>\r
+cl_ptr_vector_get</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_ptr_vector_h.html#robo518"><tt>\r
+cl_ptr_vector_get_capacity</tt></a></td>\r
+<td class="even"><a href="./complib/cl_ptr_vector_h.html#robo519"><tt>\r
+cl_ptr_vector_get_size</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_ptr_vector_h.html#robo520"><tt>\r
+cl_ptr_vector_init</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_ptr_vector_h.html#robo521"><tt>\r
+cl_ptr_vector_insert</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_ptr_vector_h.html#robo522"><tt>\r
+cl_ptr_vector_remove</tt></a></td>\r
+<td class="even"><a href="./complib/cl_ptr_vector_h.html#robo523"><tt>\r
+cl_ptr_vector_set</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_ptr_vector_h.html#robo524"><tt>\r
+cl_ptr_vector_set_capacity</tt></a></td>\r
+<td class="even"><a href="./complib/cl_ptr_vector_h.html#robo525"><tt>\r
+cl_ptr_vector_set_min_size</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_ptr_vector_h.html#robo526"><tt>\r
+cl_ptr_vector_set_size</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_memory_h.html#robo434"><tt>\r
+cl_pzalloc</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_qcomppool_h.html#robo543"><tt>\r
+cl_qcpool_construct</tt></a></td>\r
+<td class="even"><a href="./complib/cl_qcomppool_h.html#robo544"><tt>\r
+cl_qcpool_count</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_qcomppool_h.html#robo545"><tt>\r
+cl_qcpool_destroy</tt></a></td>\r
+<td class="even"><a href="./complib/cl_qcomppool_h.html#robo546"><tt>\r
+cl_qcpool_get</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_qcomppool_h.html#robo547"><tt>\r
+cl_qcpool_grow</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_qcomppool_h.html#robo548"><tt>\r
+cl_qcpool_init</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_qcomppool_h.html#robo549"><tt>\r
+cl_qcpool_put</tt></a></td>\r
+<td class="even"><a href="./complib/cl_qcomppool_h.html#robo550"><tt>\r
+cl_qcpool_put_list</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_qlist_h.html#robo558"><tt>\r
+cl_qlist_apply_func</tt></a></td>\r
+<td class="even"><a href="./complib/cl_qlist_h.html#robo559"><tt>\r
+cl_qlist_count</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_qlist_h.html#robo560"><tt>\r
+cl_qlist_end</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_qlist_h.html#robo561"><tt>\r
+cl_qlist_find_from_head</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_qlist_h.html#robo562"><tt>\r
+cl_qlist_find_from_tail</tt></a></td>\r
+<td class="even"><a href="./complib/cl_qlist_h.html#robo563"><tt>\r
+cl_qlist_find_next</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_qlist_h.html#robo564"><tt>\r
+cl_qlist_find_prev</tt></a></td>\r
+<td class="even"><a href="./complib/cl_qlist_h.html#robo565"><tt>\r
+cl_qlist_head</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_qlist_h.html#robo566"><tt>\r
+cl_qlist_init</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_qlist_h.html#robo567"><tt>\r
+cl_qlist_insert_array_head</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_qlist_h.html#robo568"><tt>\r
+cl_qlist_insert_array_tail</tt></a></td>\r
+<td class="even"><a href="./complib/cl_qlist_h.html#robo569"><tt>\r
+cl_qlist_insert_head</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_qlist_h.html#robo570"><tt>\r
+cl_qlist_insert_list_head</tt></a></td>\r
+<td class="even"><a href="./complib/cl_qlist_h.html#robo571"><tt>\r
+cl_qlist_insert_list_tail</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_qlist_h.html#robo572"><tt>\r
+cl_qlist_insert_next</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_qlist_h.html#robo573"><tt>\r
+cl_qlist_insert_prev</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_qlist_h.html#robo574"><tt>\r
+cl_qlist_insert_tail</tt></a></td>\r
+<td class="even"><a href="./complib/cl_qlist_h.html#robo575"><tt>\r
+cl_qlist_move_items</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_qlist_h.html#robo576"><tt>\r
+cl_qlist_next</tt></a></td>\r
+<td class="even"><a href="./complib/cl_qlist_h.html#robo577"><tt>\r
+cl_qlist_obj</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_qlist_h.html#robo578"><tt>\r
+cl_qlist_prev</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_qlist_h.html#robo579"><tt>\r
+cl_qlist_remove_all</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_qlist_h.html#robo580"><tt>\r
+cl_qlist_remove_head</tt></a></td>\r
+<td class="even"><a href="./complib/cl_qlist_h.html#robo581"><tt>\r
+cl_qlist_remove_item</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_qlist_h.html#robo582"><tt>\r
+cl_qlist_remove_tail</tt></a></td>\r
+<td class="even"><a href="./complib/cl_qlist_h.html#robo583"><tt>\r
+cl_qlist_set_obj</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_qlist_h.html#robo585"><tt>\r
+cl_qlist_tail</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_qlockpool_h.html#robo586"><tt>\r
+cl_qlock_pool_construct</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_qlockpool_h.html#robo587"><tt>\r
+cl_qlock_pool_destroy</tt></a></td>\r
+<td class="even"><a href="./complib/cl_qlockpool_h.html#robo588"><tt>\r
+cl_qlock_pool_get</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_qlockpool_h.html#robo589"><tt>\r
+cl_qlock_pool_init</tt></a></td>\r
+<td class="even"><a href="./complib/cl_qlockpool_h.html#robo590"><tt>\r
+cl_qlock_pool_put</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_qmap_h.html#robo596"><tt>\r
+cl_qmap_apply_func</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_qmap_h.html#robo597"><tt>\r
+cl_qmap_count</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_qmap_h.html#robo598"><tt>\r
+cl_qmap_delta</tt></a></td>\r
+<td class="even"><a href="./complib/cl_qmap_h.html#robo599"><tt>\r
+cl_qmap_end</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_qmap_h.html#robo600"><tt>\r
+cl_qmap_get</tt></a></td>\r
+<td class="even"><a href="./complib/cl_qmap_h.html#robo601"><tt>\r
+cl_qmap_head</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_qmap_h.html#robo602"><tt>\r
+cl_qmap_init</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_qmap_h.html#robo603"><tt>\r
+cl_qmap_insert</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_qmap_h.html#robo604"><tt>\r
+cl_qmap_key</tt></a></td>\r
+<td class="even"><a href="./complib/cl_qmap_h.html#robo605"><tt>\r
+cl_qmap_merge</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_qmap_h.html#robo606"><tt>\r
+cl_qmap_next</tt></a></td>\r
+<td class="even"><a href="./complib/cl_qmap_h.html#robo607"><tt>\r
+cl_qmap_obj</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_qmap_h.html#robo608"><tt>\r
+cl_qmap_prev</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_qmap_h.html#robo609"><tt>\r
+cl_qmap_remove</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_qmap_h.html#robo610"><tt>\r
+cl_qmap_remove_all</tt></a></td>\r
+<td class="even"><a href="./complib/cl_qmap_h.html#robo611"><tt>\r
+cl_qmap_remove_item</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_qmap_h.html#robo612"><tt>\r
+cl_qmap_set_obj</tt></a></td>\r
+<td class="even"><a href="./complib/cl_qmap_h.html#robo614"><tt>\r
+cl_qmap_tail</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_qpool_h.html#robo618"><tt>\r
+cl_qpool_construct</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_qpool_h.html#robo619"><tt>\r
+cl_qpool_count</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_qpool_h.html#robo620"><tt>\r
+cl_qpool_destroy</tt></a></td>\r
+<td class="even"><a href="./complib/cl_qpool_h.html#robo621"><tt>\r
+cl_qpool_get</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_qpool_h.html#robo622"><tt>\r
+cl_qpool_grow</tt></a></td>\r
+<td class="even"><a href="./complib/cl_qpool_h.html#robo623"><tt>\r
+cl_qpool_init</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_qpool_h.html#robo624"><tt>\r
+cl_qpool_put</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_qpool_h.html#robo625"><tt>\r
+cl_qpool_put_list</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_rbmap_h.html#robo628"><tt>\r
+cl_rbmap_count</tt></a></td>\r
+<td class="even"><a href="./complib/cl_rbmap_h.html#robo629"><tt>\r
+cl_rbmap_end</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_rbmap_h.html#robo630"><tt>\r
+cl_rbmap_init</tt></a></td>\r
+<td class="even"><a href="./complib/cl_rbmap_h.html#robo631"><tt>\r
+cl_rbmap_insert</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_rbmap_h.html#robo633"><tt>\r
+cl_rbmap_left</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_rbmap_h.html#robo634"><tt>\r
+cl_rbmap_remove_item</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_rbmap_h.html#robo635"><tt>\r
+cl_rbmap_reset</tt></a></td>\r
+<td class="even"><a href="./complib/cl_rbmap_h.html#robo636"><tt>\r
+cl_rbmap_right</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_rbmap_h.html#robo637"><tt>\r
+cl_rbmap_root</tt></a></td>\r
+<td class="even"><a href="./complib/cl_obj_h.html#robo462"><tt>\r
+cl_rel_alloc</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_obj_h.html#robo463"><tt>\r
+cl_rel_free</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_reqmgr_h.html#robo641"><tt>\r
+cl_req_mgr_construct</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_reqmgr_h.html#robo642"><tt>\r
+cl_req_mgr_destroy</tt></a></td>\r
+<td class="even"><a href="./complib/cl_reqmgr_h.html#robo643"><tt>\r
+cl_req_mgr_get</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_reqmgr_h.html#robo644"><tt>\r
+cl_req_mgr_init</tt></a></td>\r
+<td class="even"><a href="./complib/cl_reqmgr_h.html#robo645"><tt>\r
+cl_req_mgr_resume</tt></a></td>\r
+<td class="uneven"><a href="./kernel/complib/cl_pnp_po_h.html#robo496"><tt>\r
+cl_rollback_pnp_state</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./kernel/complib/cl_pnp_po_h.html#robo497"><tt>\r
+cl_set_pnp_state</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_spinlock_h.html#robo648"><tt>\r
+cl_spinlock_acquire</tt></a></td>\r
+<td class="even"><a href="./complib/cl_spinlock_h.html#robo649"><tt>\r
+cl_spinlock_construct</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_spinlock_h.html#robo650"><tt>\r
+cl_spinlock_destroy</tt></a></td>\r
+<td class="even"><a href="./complib/cl_spinlock_h.html#robo651"><tt>\r
+cl_spinlock_init</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_spinlock_h.html#robo652"><tt>\r
+cl_spinlock_release</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_syscallback_h.html#robo655"><tt>\r
+cl_sys_callback_get</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_syscallback_h.html#robo656"><tt>\r
+cl_sys_callback_put</tt></a></td>\r
+<td class="even"><a href="./complib/cl_syscallback_h.html#robo657"><tt>\r
+cl_sys_callback_queue</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_threadpool_h.html#robo658"><tt>\r
+cl_thread_pool_construct</tt></a></td>\r
+<td class="even"><a href="./complib/cl_threadpool_h.html#robo659"><tt>\r
+cl_thread_pool_destroy</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_threadpool_h.html#robo660"><tt>\r
+cl_thread_pool_init</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_threadpool_h.html#robo661"><tt>\r
+cl_thread_pool_signal</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_thread_h.html#robo666"><tt>\r
+cl_thread_stall</tt></a></td>\r
+<td class="even"><a href="./complib/cl_thread_h.html#robo667"><tt>\r
+cl_thread_suspend</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_timer_h.html#robo674"><tt>\r
+cl_timer_construct</tt></a></td>\r
+<td class="even"><a href="./complib/cl_timer_h.html#robo675"><tt>\r
+cl_timer_destroy</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_timer_h.html#robo676"><tt>\r
+cl_timer_init</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_timer_h.html#robo677"><tt>\r
+cl_timer_start</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_timer_h.html#robo678"><tt>\r
+cl_timer_stop</tt></a></td>\r
+<td class="even"><a href="./complib/cl_timer_h.html#robo679"><tt>\r
+cl_timer_trim</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_vector_h.html#robo685"><tt>\r
+cl_vector_apply_func</tt></a></td>\r
+<td class="even"><a href="./complib/cl_vector_h.html#robo686"><tt>\r
+cl_vector_at</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_vector_h.html#robo687"><tt>\r
+cl_vector_construct</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_vector_h.html#robo688"><tt>\r
+cl_vector_destroy</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_vector_h.html#robo689"><tt>\r
+cl_vector_find_from_end</tt></a></td>\r
+<td class="even"><a href="./complib/cl_vector_h.html#robo690"><tt>\r
+cl_vector_find_from_start</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_vector_h.html#robo691"><tt>\r
+cl_vector_get</tt></a></td>\r
+<td class="even"><a href="./complib/cl_vector_h.html#robo692"><tt>\r
+cl_vector_get_capacity</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_vector_h.html#robo693"><tt>\r
+cl_vector_get_ptr</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_vector_h.html#robo694"><tt>\r
+cl_vector_get_size</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_vector_h.html#robo695"><tt>\r
+cl_vector_init</tt></a></td>\r
+<td class="even"><a href="./complib/cl_vector_h.html#robo696"><tt>\r
+cl_vector_set</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_vector_h.html#robo697"><tt>\r
+cl_vector_set_capacity</tt></a></td>\r
+<td class="even"><a href="./complib/cl_vector_h.html#robo698"><tt>\r
+cl_vector_set_min_size</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_vector_h.html#robo699"><tt>\r
+cl_vector_set_size</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_waitobj_h.html#robo701"><tt>\r
+cl_waitobj_create</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_waitobj_h.html#robo702"><tt>\r
+cl_waitobj_deref</tt></a></td>\r
+<td class="even"><a href="./complib/cl_waitobj_h.html#robo703"><tt>\r
+cl_waitobj_destroy</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_waitobj_h.html#robo705"><tt>\r
+cl_waitobj_ref</tt></a></td>\r
+<td class="even"><a href="./complib/cl_waitobj_h.html#robo706"><tt>\r
+cl_waitobj_reset</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_waitobj_h.html#robo707"><tt>\r
+cl_waitobj_signal</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_waitobj_h.html#robo708"><tt>\r
+cl_waitobj_wait_on</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_memory_h.html#robo435"><tt>\r
+cl_zalloc</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_h.html#robo46"><tt>\r
+ib_add_svc_entry</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo48"><tt>\r
+ib_alloc_pd</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_h.html#robo58"><tt>\r
+ib_bind_mw</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo62"><tt>\r
+ib_cancel_mad</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_al_h.html#robo63"><tt>\r
+ib_cancel_query</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo65"><tt>\r
+ib_ci_call</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo836"><tt>\r
+ib_class_is_vendor_specific</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo837"><tt>\r
+ib_class_is_vendor_specific_high</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo838"><tt>\r
+ib_class_is_vendor_specific_low</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo67"><tt>\r
+ib_close_al</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_al_h.html#robo68"><tt>\r
+ib_close_ca</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo69"><tt>\r
+ib_cm_apr</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_h.html#robo72"><tt>\r
+ib_cm_cancel</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo74"><tt>\r
+ib_cm_drep</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_h.html#robo77"><tt>\r
+ib_cm_dreq</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo81"><tt>\r
+ib_cm_handoff</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_al_h.html#robo82"><tt>\r
+ib_cm_lap</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo85"><tt>\r
+ib_cm_listen</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_h.html#robo87"><tt>\r
+ib_cm_mra</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo90"><tt>\r
+ib_cm_rej</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_h.html#robo93"><tt>\r
+ib_cm_rep</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo96"><tt>\r
+ib_cm_req</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_al_h.html#robo99"><tt>\r
+ib_cm_rtu</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo102"><tt>\r
+ib_copy_ca_attr</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_h.html#robo104"><tt>\r
+ib_create_av</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo105"><tt>\r
+ib_create_cq</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_h.html#robo106"><tt>\r
+ib_create_ioc</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo107"><tt>\r
+ib_create_mad_pool</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_al_h.html#robo108"><tt>\r
+ib_create_mw</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo109"><tt>\r
+ib_create_qp</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_h.html#robo110"><tt>\r
+ib_dealloc_pd</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo111"><tt>\r
+ib_dereg_mad_pool</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_h.html#robo112"><tt>\r
+ib_dereg_mr</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo113"><tt>\r
+ib_dereg_pnp</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_al_h.html#robo114"><tt>\r
+ib_dereg_svc</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_ci_h.html#robo1156"><tt>\r
+ib_deregister_ca</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_h.html#robo115"><tt>\r
+ib_destroy_av</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo116"><tt>\r
+ib_destroy_cq</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_h.html#robo117"><tt>\r
+ib_destroy_ioc</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo118"><tt>\r
+ib_destroy_mad_pool</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_al_h.html#robo119"><tt>\r
+ib_destroy_mw</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo120"><tt>\r
+ib_destroy_qp</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo978"><tt>\r
+ib_dm_get_slot_lo_hi</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo979"><tt>\r
+ib_dm_set_slot_lo_hi</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_h.html#robo125"><tt>\r
+ib_force_apm</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo842"><tt>\r
+ib_get_async_event_str</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_al_h.html#robo126"><tt>\r
+ib_get_ca_by_gid</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo127"><tt>\r
+ib_get_ca_guids</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo843"><tt>\r
+ib_get_err_str</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo128"><tt>\r
+ib_get_guid</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_h.html#robo129"><tt>\r
+ib_get_mad</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo130"><tt>\r
+ib_get_mad_buf</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_types_h.html#robo844"><tt>\r
+ib_get_node_type_str</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo131"><tt>\r
+ib_get_port_by_gid</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo845"><tt>\r
+ib_get_port_state_from_str</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo846"><tt>\r
+ib_get_port_state_str</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_h.html#robo132"><tt>\r
+ib_get_query_node_rec</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo133"><tt>\r
+ib_get_query_path_rec</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_al_h.html#robo134"><tt>\r
+ib_get_query_portinfo_rec</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo135"><tt>\r
+ib_get_query_result</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_h.html#robo136"><tt>\r
+ib_get_query_svc_rec</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo137"><tt>\r
+ib_get_spl_qp</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo847"><tt>\r
+ib_get_wc_status_str</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo848"><tt>\r
+ib_get_wc_type_str</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_types_h.html#robo849"><tt>\r
+ib_get_wr_type_str</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo850"><tt>\r
+ib_gid_get_guid</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo851"><tt>\r
+ib_gid_get_subnet_prefix</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo852"><tt>\r
+ib_gid_is_link_local</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo853"><tt>\r
+ib_gid_is_site_local</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo855"><tt>\r
+ib_gid_set_default</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_types_h.html#robo857"><tt>\r
+ib_grh_get_ver_class_flow</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo858"><tt>\r
+ib_grh_set_ver_class_flow</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo861"><tt>\r
+ib_inform_get_dev_id</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo862"><tt>\r
+ib_inform_get_prod_type</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo863"><tt>\r
+ib_inform_get_qpn</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo864"><tt>\r
+ib_inform_get_resp_time_val</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_types_h.html#robo865"><tt>\r
+ib_inform_get_trap_num</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo866"><tt>\r
+ib_inform_get_vend_id</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo868"><tt>\r
+ib_inform_set_dev_id</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo869"><tt>\r
+ib_inform_set_prod_type</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo870"><tt>\r
+ib_inform_set_qpn</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo871"><tt>\r
+ib_inform_set_resp_time_val</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_types_h.html#robo872"><tt>\r
+ib_inform_set_trap_num</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo873"><tt>\r
+ib_inform_set_vend_id</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_h.html#robo140"><tt>\r
+ib_init_dgrm_svc</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo875"><tt>\r
+ib_iou_info_diag_dev_id</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo876"><tt>\r
+ib_iou_info_option_rom</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo142"><tt>\r
+ib_join_mcast</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_al_h.html#robo144"><tt>\r
+ib_leave_mcast</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo149"><tt>\r
+ib_local_mad</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo879"><tt>\r
+ib_mad_init_new</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo880"><tt>\r
+ib_mad_init_response</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo881"><tt>\r
+ib_mad_is_response</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo883"><tt>\r
+ib_member_get_scope</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_types_h.html#robo884"><tt>\r
+ib_member_get_scope_state</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo885"><tt>\r
+ib_member_get_sl_flow_hop</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo886"><tt>\r
+ib_member_get_state</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo888"><tt>\r
+ib_member_set_join_state</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo889"><tt>\r
+ib_member_set_scope</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo890"><tt>\r
+ib_member_set_scope_state</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_types_h.html#robo891"><tt>\r
+ib_member_set_sl_flow_hop</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo892"><tt>\r
+ib_member_set_state</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_h.html#robo155"><tt>\r
+ib_modify_av</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo156"><tt>\r
+ib_modify_ca</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_h.html#robo157"><tt>\r
+ib_modify_cq</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo158"><tt>\r
+ib_modify_qp</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_types_h.html#robo896"><tt>\r
+ib_node_info_get_local_port_num</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo897"><tt>\r
+ib_node_info_get_vendor_id</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo899"><tt>\r
+ib_notice_get_count</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo900"><tt>\r
+ib_notice_get_dev_id</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo901"><tt>\r
+ib_notice_get_generic</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo902"><tt>\r
+ib_notice_get_prod_type</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_types_h.html#robo903"><tt>\r
+ib_notice_get_toggle</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo904"><tt>\r
+ib_notice_get_trap_num</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo905"><tt>\r
+ib_notice_get_type</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo906"><tt>\r
+ib_notice_get_vend_id</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo907"><tt>\r
+ib_notice_set_count</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo908"><tt>\r
+ib_notice_set_dev_id</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_types_h.html#robo909"><tt>\r
+ib_notice_set_generic</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo910"><tt>\r
+ib_notice_set_prod_type</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo911"><tt>\r
+ib_notice_set_toggle</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo912"><tt>\r
+ib_notice_set_trap_num</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo913"><tt>\r
+ib_notice_set_type</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo914"><tt>\r
+ib_notice_set_vend_id</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_al_h.html#robo163"><tt>\r
+ib_open_al</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo164"><tt>\r
+ib_open_ca</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo915"><tt>\r
+ib_path_get_ipd</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo916"><tt>\r
+ib_path_rec_flow_lbl</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo917"><tt>\r
+ib_path_rec_hop_limit</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo918"><tt>\r
+ib_path_rec_init_local</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_types_h.html#robo919"><tt>\r
+ib_path_rec_mtu</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo920"><tt>\r
+ib_path_rec_mtu_sel</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo921"><tt>\r
+ib_path_rec_pkt_life</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo922"><tt>\r
+ib_path_rec_pkt_life_sel</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo923"><tt>\r
+ib_path_rec_rate</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo924"><tt>\r
+ib_path_rec_rate_sel</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_types_h.html#robo925"><tt>\r
+ib_path_rec_set_hop_flow_raw</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo926"><tt>\r
+ib_path_rec_sl</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_h.html#robo166"><tt>\r
+ib_peek_cq</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo167"><tt>\r
+ib_pfn_cm_apr_cb_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_h.html#robo168"><tt>\r
+ib_pfn_cm_drep_cb_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo169"><tt>\r
+ib_pfn_cm_dreq_cb_t</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_al_h.html#robo170"><tt>\r
+ib_pfn_cm_lap_cb_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo171"><tt>\r
+ib_pfn_cm_mra_cb_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_h.html#robo172"><tt>\r
+ib_pfn_cm_rej_cb_t</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo173"><tt>\r
+ib_pfn_cm_rep_cb_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_h.html#robo174"><tt>\r
+ib_pfn_cm_req_cb_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo175"><tt>\r
+ib_pfn_cm_rtu_cb_t</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_al_h.html#robo176"><tt>\r
+ib_pfn_comp_cb_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo177"><tt>\r
+ib_pfn_destroy_cb_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_h.html#robo178"><tt>\r
+ib_pfn_event_cb_t</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo179"><tt>\r
+ib_pfn_listen_err_cb_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_h.html#robo180"><tt>\r
+ib_pfn_mad_comp_cb_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo181"><tt>\r
+ib_pfn_mcast_cb_t</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_al_h.html#robo182"><tt>\r
+ib_pfn_pnp_cb_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo183"><tt>\r
+ib_pfn_query_cb_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_h.html#robo184"><tt>\r
+ib_pfn_reg_svc_cb_t</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo185"><tt>\r
+ib_pfn_report_cb_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_h.html#robo186"><tt>\r
+ib_pfn_sub_cb_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo928"><tt>\r
+ib_pkey_get_base</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_types_h.html#robo929"><tt>\r
+ib_pkey_is_full_member</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo198"><tt>\r
+ib_poll_cq</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo931"><tt>\r
+ib_port_info_compute_rate</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo932"><tt>\r
+ib_port_info_get_link_speed_active</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo933"><tt>\r
+ib_port_info_get_link_speed_sup</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo934"><tt>\r
+ib_port_info_get_lmc</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_types_h.html#robo935"><tt>\r
+ib_port_info_get_mpb</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo936"><tt>\r
+ib_port_info_get_mtu_cap</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo937"><tt>\r
+ib_port_info_get_neighbor_mtu</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo938"><tt>\r
+ib_port_info_get_op_vls</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo939"><tt>\r
+ib_port_info_get_port_state</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo940"><tt>\r
+ib_port_info_get_vl_cap</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_types_h.html#robo941"><tt>\r
+ib_port_info_set_link_speed_sup</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo942"><tt>\r
+ib_port_info_set_lmc</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo943"><tt>\r
+ib_port_info_set_mpb</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo944"><tt>\r
+ib_port_info_set_neighbor_mtu</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo945"><tt>\r
+ib_port_info_set_op_vls</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo946"><tt>\r
+ib_port_info_set_port_state</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_types_h.html#robo947"><tt>\r
+ib_port_info_set_state_no_change</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo948"><tt>\r
+ib_port_info_set_timeout</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_h.html#robo202"><tt>\r
+ib_post_recv</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo203"><tt>\r
+ib_post_send</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_h.html#robo204"><tt>\r
+ib_put_mad</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo211"><tt>\r
+ib_query</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_al_h.html#robo212"><tt>\r
+ib_query_av</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo213"><tt>\r
+ib_query_ca</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_h.html#robo214"><tt>\r
+ib_query_ca_by_guid</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo215"><tt>\r
+ib_query_cq</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_h.html#robo216"><tt>\r
+ib_query_mr</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo217"><tt>\r
+ib_query_mw</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_al_h.html#robo218"><tt>\r
+ib_query_qp</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo222"><tt>\r
+ib_rearm_cq</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_h.html#robo223"><tt>\r
+ib_rearm_n_cq</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo226"><tt>\r
+ib_reg_ioc</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_h.html#robo227"><tt>\r
+ib_reg_mad_pool</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo228"><tt>\r
+ib_reg_mad_svc</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_al_h.html#robo229"><tt>\r
+ib_reg_mem</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo230"><tt>\r
+ib_reg_phys</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_h.html#robo231"><tt>\r
+ib_reg_pnp</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo232"><tt>\r
+ib_reg_shared</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_h.html#robo233"><tt>\r
+ib_reg_shmid</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo234"><tt>\r
+ib_reg_svc</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_ci_h.html#robo1158"><tt>\r
+ib_register_ca</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo239"><tt>\r
+ib_reject_ioc</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_h.html#robo240"><tt>\r
+ib_remove_svc_entry</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo244"><tt>\r
+ib_rereg_mem</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_h.html#robo245"><tt>\r
+ib_rereg_phys</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo950"><tt>\r
+ib_rmpp_is_flag_set</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_types_h.html#robo952"><tt>\r
+ib_sa_mad_get_payload_ptr</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo247"><tt>\r
+ib_send_mad</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo954"><tt>\r
+ib_slvl_table_get_vl</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo956"><tt>\r
+ib_slvl_table_set_vl</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo959"><tt>\r
+ib_sminfo_get_priority</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo960"><tt>\r
+ib_sminfo_get_state</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_types_h.html#robo961"><tt>\r
+ib_smp_get_payload_ptr</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo962"><tt>\r
+ib_smp_get_status</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo963"><tt>\r
+ib_smp_init_new</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo964"><tt>\r
+ib_smp_is_d</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo965"><tt>\r
+ib_smp_is_response</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo255"><tt>\r
+ib_subscribe</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_types_h.html#robo969"><tt>\r
+ib_switch_info_clear_state_change</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo970"><tt>\r
+ib_switch_info_get_state_change</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_h.html#robo256"><tt>\r
+ib_sync_destroy</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo257"><tt>\r
+ib_unsubscribe</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo972"><tt>\r
+ib_vl_arb_element_get_vl</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo973"><tt>\r
+ib_vl_arb_element_set_vl</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_types_h.html#robo977"><tt>\r
+ioc_at_slot</tt></a></td>\r
+<td class="uneven"><a href="./user/iba/ib_uvp_h.html#robo1051"><tt>\r
+unsupported functions</tt></a></td>\r
+<td class="even"><a href="./user/iba/ib_uvp_h.html#robo1052"><tt>\r
+uvp_bind_mw</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./user/iba/ib_uvp_h.html#robo1053"><tt>\r
+uvp_get_interface</tt></a></td>\r
+<td class="even"><a href="./user/iba/ib_uvp_h.html#robo1055"><tt>\r
+uvp_peek_cq</tt></a></td>\r
+<td class="uneven"><a href="./user/iba/ib_uvp_h.html#robo1056"><tt>\r
+uvp_poll_cq</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./user/iba/ib_uvp_h.html#robo1057"><tt>\r
+uvp_post_allocate_pd_t</tt></a></td>\r
+<td class="uneven"><a href="./user/iba/ib_uvp_h.html#robo1058"><tt>\r
+uvp_post_attach_mcast_t</tt></a></td>\r
+<td class="even"><a href="./user/iba/ib_uvp_h.html#robo1059"><tt>\r
+uvp_post_ci_call</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./user/iba/ib_uvp_h.html#robo1060"><tt>\r
+uvp_post_close_ca_t</tt></a></td>\r
+<td class="even"><a href="./user/iba/ib_uvp_h.html#robo1061"><tt>\r
+uvp_post_create_av_t</tt></a></td>\r
+<td class="uneven"><a href="./user/iba/ib_uvp_h.html#robo1062"><tt>\r
+uvp_post_create_cq_t</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./user/iba/ib_uvp_h.html#robo1063"><tt>\r
+uvp_post_create_mw_t</tt></a></td>\r
+<td class="uneven"><a href="./user/iba/ib_uvp_h.html#robo1064"><tt>\r
+uvp_post_create_qp_t</tt></a></td>\r
+<td class="even"><a href="./user/iba/ib_uvp_h.html#robo1065"><tt>\r
+uvp_post_deallocate_pd_t</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./user/iba/ib_uvp_h.html#robo1066"><tt>\r
+uvp_post_destroy_av_t</tt></a></td>\r
+<td class="even"><a href="./user/iba/ib_uvp_h.html#robo1067"><tt>\r
+uvp_post_destroy_cq_t</tt></a></td>\r
+<td class="uneven"><a href="./user/iba/ib_uvp_h.html#robo1068"><tt>\r
+uvp_post_destroy_mw_t</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./user/iba/ib_uvp_h.html#robo1069"><tt>\r
+uvp_post_destroy_qp_t</tt></a></td>\r
+<td class="uneven"><a href="./user/iba/ib_uvp_h.html#robo1070"><tt>\r
+uvp_post_detach_mcast_t</tt></a></td>\r
+<td class="even"><a href="./user/iba/ib_uvp_h.html#robo1071"><tt>\r
+uvp_post_modify_av_t</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./user/iba/ib_uvp_h.html#robo1072"><tt>\r
+uvp_post_modify_ca_t</tt></a></td>\r
+<td class="even"><a href="./user/iba/ib_uvp_h.html#robo1073"><tt>\r
+uvp_post_modify_qp_t</tt></a></td>\r
+<td class="uneven"><a href="./user/iba/ib_uvp_h.html#robo1074"><tt>\r
+uvp_post_open_ca_t</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./user/iba/ib_uvp_h.html#robo1075"><tt>\r
+uvp_post_query_av_t</tt></a></td>\r
+<td class="uneven"><a href="./user/iba/ib_uvp_h.html#robo1076"><tt>\r
+uvp_post_query_ca_t</tt></a></td>\r
+<td class="even"><a href="./user/iba/ib_uvp_h.html#robo1077"><tt>\r
+uvp_post_query_cq_t</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./user/iba/ib_uvp_h.html#robo1078"><tt>\r
+uvp_post_query_mw_t</tt></a></td>\r
+<td class="even"><a href="./user/iba/ib_uvp_h.html#robo1079"><tt>\r
+uvp_post_query_qp_t</tt></a></td>\r
+<td class="uneven"><a href="./user/iba/ib_uvp_h.html#robo1080"><tt>\r
+uvp_post_recv</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./user/iba/ib_uvp_h.html#robo1081"><tt>\r
+uvp_post_resize_cq_t</tt></a></td>\r
+<td class="uneven"><a href="./user/iba/ib_uvp_h.html#robo1082"><tt>\r
+uvp_post_send</tt></a></td>\r
+<td class="even"><a href="./user/iba/ib_uvp_h.html#robo1083"><tt>\r
+uvp_pre_allocate_pd</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./user/iba/ib_uvp_h.html#robo1084"><tt>\r
+uvp_pre_attach_mcast</tt></a></td>\r
+<td class="even"><a href="./user/iba/ib_uvp_h.html#robo1085"><tt>\r
+uvp_pre_ci_call</tt></a></td>\r
+<td class="uneven"><a href="./user/iba/ib_uvp_h.html#robo1086"><tt>\r
+uvp_pre_close_ca_t</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./user/iba/ib_uvp_h.html#robo1087"><tt>\r
+uvp_pre_create_av</tt></a></td>\r
+<td class="uneven"><a href="./user/iba/ib_uvp_h.html#robo1088"><tt>\r
+uvp_pre_create_cq</tt></a></td>\r
+<td class="even"><a href="./user/iba/ib_uvp_h.html#robo1089"><tt>\r
+uvp_pre_create_mw</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./user/iba/ib_uvp_h.html#robo1090"><tt>\r
+uvp_pre_create_qp</tt></a></td>\r
+<td class="even"><a href="./user/iba/ib_uvp_h.html#robo1091"><tt>\r
+uvp_pre_deallocate_pd</tt></a></td>\r
+<td class="uneven"><a href="./user/iba/ib_uvp_h.html#robo1092"><tt>\r
+uvp_pre_destroy_av</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./user/iba/ib_uvp_h.html#robo1093"><tt>\r
+uvp_pre_destroy_cq</tt></a></td>\r
+<td class="uneven"><a href="./user/iba/ib_uvp_h.html#robo1094"><tt>\r
+uvp_pre_destroy_mw</tt></a></td>\r
+<td class="even"><a href="./user/iba/ib_uvp_h.html#robo1095"><tt>\r
+uvp_pre_destroy_qp</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./user/iba/ib_uvp_h.html#robo1096"><tt>\r
+uvp_pre_detach_mcast</tt></a></td>\r
+<td class="even"><a href="./user/iba/ib_uvp_h.html#robo1097"><tt>\r
+uvp_pre_modify_av</tt></a></td>\r
+<td class="uneven"><a href="./user/iba/ib_uvp_h.html#robo1098"><tt>\r
+uvp_pre_modify_ca</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./user/iba/ib_uvp_h.html#robo1099"><tt>\r
+uvp_pre_modify_qp</tt></a></td>\r
+<td class="uneven"><a href="./user/iba/ib_uvp_h.html#robo1100"><tt>\r
+uvp_pre_open_ca_t</tt></a></td>\r
+<td class="even"><a href="./user/iba/ib_uvp_h.html#robo1101"><tt>\r
+uvp_pre_query_av</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./user/iba/ib_uvp_h.html#robo1102"><tt>\r
+uvp_pre_query_ca</tt></a></td>\r
+<td class="even"><a href="./user/iba/ib_uvp_h.html#robo1103"><tt>\r
+uvp_pre_query_cq</tt></a></td>\r
+<td class="uneven"><a href="./user/iba/ib_uvp_h.html#robo1104"><tt>\r
+uvp_pre_query_mw</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./user/iba/ib_uvp_h.html#robo1105"><tt>\r
+uvp_pre_query_qp</tt></a></td>\r
+<td class="uneven"><a href="./user/iba/ib_uvp_h.html#robo1106"><tt>\r
+uvp_pre_resize_cq</tt></a></td>\r
+<td class="even"><a href="./user/iba/ib_uvp_h.html#robo1107"><tt>\r
+uvp_rearm_cq</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./user/iba/ib_uvp_h.html#robo1108"><tt>\r
+uvp_rearm_n_cq</tt></a></td>\r
+<td></td>\r
+<td></td>\r
+</tr>\r
+</table>\r
+</body>\r
+</html>\r
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">\r
+<html>\r
+<head>\r
+<link rel="stylesheet" href="./robodoc.css" type="text/css">\r
+<title>Modules</title>\r
+<!-- Source: ./inc/ -->\r
+<!-- Generated with ROBODoc Version 4.99.22 (Mar 6 2006) -->\r
+</head>\r
+<body bgcolor="#FFFFFF">\r
+<a name="robo_top_of_doc">Generated from ./inc/</a> with <a href="http://sourceforge.net/projects/robodoc/">ROBODoc</a> v4.99.22 on Sun Apr 16 2006 17:39:25\r
+<br />\r
+<p>\r
+[<a href="./robo_sourcefiles.html#top">Sourcefiles</a>]\r
+[<a href="./masterindex.html#top">Index</a>]\r
+[<a href="./robo_definitions.html#top">Definitions</a>]\r
+[<a href="./robo_functions.html#top">Functions</a>]\r
+[<a href="#top">Modules</a>]\r
+[<a href="./robo_strutures.html#top">Structures</a>]\r
+</p>\r
+<h1>Modules</h1>\r
+<table cellspacing="3">\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_async_proc_h.html#robo6"><tt>\r
+Asynchronous Processor</tt></a></td>\r
+<td class="even"><a href="./complib/cl_atomic_h.html#robo7"><tt>\r
+Atomic Operations</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_byteswap_h.html#robo8"><tt>\r
+Byte Swapping</tt></a></td>\r
+<td class="even"><a href="./complib/cl_comppool_h.html#robo9"><tt>\r
+Composite Pool</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo40"><tt>\r
+Constants</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_debug_h.html#robo10"><tt>\r
+Debug Output</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_event_h.html#robo11"><tt>\r
+Event</tt></a></td>\r
+<td class="even"><a href="./complib/cl_fleximap_h.html#robo12"><tt>\r
+Flexi Map</tt></a></td>\r
+<td class="uneven"><a href="./kernel/iba/ib_al_ifc_h.html#robo0"><tt>\r
+ib_al_ifc.h</tt></a></td>\r
+<td class="even"><a href="./kernel/iba/ib_ci_ifc_h.html#robo1"><tt>\r
+ib_ci_ifc.h</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./kernel/iba/ioc_ifc_h.html#robo2"><tt>\r
+ioc_ifc.h</tt></a></td>\r
+<td class="even"><a href="./complib/cl_ioctl_h.html#robo13"><tt>\r
+IOCTL Object</tt></a></td>\r
+<td class="uneven"><a href="./kernel/iba/iou_ifc_h.html#robo3"><tt>\r
+iou_ifc.h</tt></a></td>\r
+<td class="even"><a href="./kernel/iba/ipoib_ifc_h.html#robo4"><tt>\r
+ipoib_ifc.h</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_irqlock_h.html#robo14"><tt>\r
+Irqlock</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_list_h.html#robo15"><tt>\r
+List</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_log_h.html#robo16"><tt>\r
+Log Provider</tt></a></td>\r
+<td class="even"><a href="./complib/cl_map_h.html#robo17"><tt>\r
+Map</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_memory_h.html#robo42"><tt>\r
+Memory Management</tt></a></td>\r
+<td class="even"><a href="./complib/cl_mutex_h.html#robo5"><tt>\r
+Mutex</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_obj_h.html#robo18"><tt>\r
+Object</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_h.html#robo38"><tt>\r
+Overview</tt></a></td>\r
+<td class="uneven"><a href="./complib/comp_lib_h.html#robo19"><tt>\r
+Overview</tt></a></td>\r
+<td class="even"><a href="./user/iba/ib_uvp_h.html#robo43"><tt>\r
+Overview user-mode Verbs</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_passivelock_h.html#robo20"><tt>\r
+Passive Lock</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_perf_h.html#robo21"><tt>\r
+Performance Counters</tt></a></td>\r
+<td class="uneven"><a href="./kernel/complib/cl_pnp_po_h.html#robo22"><tt>\r
+Plug and Play</tt></a></td>\r
+<td class="even"><a href="./complib/cl_ptr_vector_h.html#robo23"><tt>\r
+Pointer Vector</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_pool_h.html#robo24"><tt>\r
+Pool</tt></a></td>\r
+<td class="even"><a href="./complib/cl_qcomppool_h.html#robo25"><tt>\r
+Quick Composite Pool</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_qlist_h.html#robo26"><tt>\r
+Quick List</tt></a></td>\r
+<td class="even"><a href="./complib/cl_qlockpool_h.html#robo27"><tt>\r
+Quick Locking Pool</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_qmap_h.html#robo28"><tt>\r
+Quick Map</tt></a></td>\r
+<td class="even"><a href="./complib/cl_qpool_h.html#robo29"><tt>\r
+Quick Pool</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_rbmap_h.html#robo30"><tt>\r
+RB Map</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_reqmgr_h.html#robo31"><tt>\r
+Request Manager</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_spinlock_h.html#robo32"><tt>\r
+Spinlock</tt></a></td>\r
+<td class="even"><a href="./complib/cl_syscallback_h.html#robo33"><tt>\r
+System Callback</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_threadpool_h.html#robo34"><tt>\r
+Thread Pool</tt></a></td>\r
+<td class="even"><a href="./complib/cl_timer_h.html#robo35"><tt>\r
+Timer</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo41"><tt>\r
+Type Definitions</tt></a></td>\r
+<td class="even"><a href="./complib/cl_vector_h.html#robo36"><tt>\r
+Vector</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_ci_h.html#robo39"><tt>\r
+Verbs</tt></a></td>\r
+<td class="even"><a href="./complib/cl_waitobj_h.html#robo37"><tt>\r
+Wait Object</tt></a></td>\r
+<td></td>\r
+</tr>\r
+</table>\r
+</body>\r
+</html>\r
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">\r
+<html>\r
+<head>\r
+<link rel="stylesheet" href="./robodoc.css" type="text/css">\r
+<title>Sourcefiles</title>\r
+<!-- Source: ./inc/ -->\r
+<!-- Generated with ROBODoc Version 4.99.22 (Mar 6 2006) -->\r
+</head>\r
+<body bgcolor="#FFFFFF">\r
+<a name="robo_top_of_doc">Generated from ./inc/</a> with <a href="http://sourceforge.net/projects/robodoc/">ROBODoc</a> v4.99.22 on Sun Apr 16 2006 17:39:25\r
+<br />\r
+<p>\r
+[<a href="#top">Sourcefiles</a>]\r
+[<a href="./masterindex.html#top">Index</a>]\r
+[<a href="./robo_definitions.html#top">Definitions</a>]\r
+[<a href="./robo_functions.html#top">Functions</a>]\r
+[<a href="./robo_modules.html#top">Modules</a>]\r
+[<a href="./robo_strutures.html#top">Structures</a>]\r
+</p>\r
+<ul>\r
+<li>\r
+./inc/<ul>\r
+<li>\r
+./inc/complib/<ul>\r
+<li>\r
+<a href="./complib/cl_async_proc_h.html#robo_top_of_doc"><tt>\r
+cl_async_proc.h</tt></a></li>\r
+<li>\r
+<a href="./complib/cl_atomic_h.html#robo_top_of_doc"><tt>\r
+cl_atomic.h</tt></a></li>\r
+<li>\r
+<a href="./complib/cl_byteswap_h.html#robo_top_of_doc"><tt>\r
+cl_byteswap.h</tt></a></li>\r
+<li>\r
+<a href="./complib/cl_comppool_h.html#robo_top_of_doc"><tt>\r
+cl_comppool.h</tt></a></li>\r
+<li>\r
+<a href="./complib/cl_debug_h.html#robo_top_of_doc"><tt>\r
+cl_debug.h</tt></a></li>\r
+<li>\r
+<a href="./complib/cl_event_h.html#robo_top_of_doc"><tt>\r
+cl_event.h</tt></a></li>\r
+<li>\r
+<a href="./complib/cl_fleximap_h.html#robo_top_of_doc"><tt>\r
+cl_fleximap.h</tt></a></li>\r
+<li>\r
+<a href="./complib/cl_ioctl_h.html#robo_top_of_doc"><tt>\r
+cl_ioctl.h</tt></a></li>\r
+<li>\r
+<a href="./complib/cl_irqlock_h.html#robo_top_of_doc"><tt>\r
+cl_irqlock.h</tt></a></li>\r
+<li>\r
+<a href="./complib/cl_list_h.html#robo_top_of_doc"><tt>\r
+cl_list.h</tt></a></li>\r
+<li>\r
+<a href="./complib/cl_log_h.html#robo_top_of_doc"><tt>\r
+cl_log.h</tt></a></li>\r
+<li>\r
+<a href="./complib/cl_map_h.html#robo_top_of_doc"><tt>\r
+cl_map.h</tt></a></li>\r
+<li>\r
+<a href="./complib/cl_math_h.html#robo_top_of_doc"><tt>\r
+cl_math.h</tt></a></li>\r
+<li>\r
+<a href="./complib/cl_memory_h.html#robo_top_of_doc"><tt>\r
+cl_memory.h</tt></a></li>\r
+<li>\r
+<a href="./complib/cl_mutex_h.html#robo_top_of_doc"><tt>\r
+cl_mutex.h</tt></a></li>\r
+<li>\r
+<a href="./complib/cl_obj_h.html#robo_top_of_doc"><tt>\r
+cl_obj.h</tt></a></li>\r
+<li>\r
+<a href="./complib/cl_passivelock_h.html#robo_top_of_doc"><tt>\r
+cl_passivelock.h</tt></a></li>\r
+<li>\r
+<a href="./complib/cl_perf_h.html#robo_top_of_doc"><tt>\r
+cl_perf.h</tt></a></li>\r
+<li>\r
+<a href="./complib/cl_pool_h.html#robo_top_of_doc"><tt>\r
+cl_pool.h</tt></a></li>\r
+<li>\r
+<a href="./complib/cl_ptr_vector_h.html#robo_top_of_doc"><tt>\r
+cl_ptr_vector.h</tt></a></li>\r
+<li>\r
+<a href="./complib/cl_qcomppool_h.html#robo_top_of_doc"><tt>\r
+cl_qcomppool.h</tt></a></li>\r
+<li>\r
+<a href="./complib/cl_qlist_h.html#robo_top_of_doc"><tt>\r
+cl_qlist.h</tt></a></li>\r
+<li>\r
+<a href="./complib/cl_qlockpool_h.html#robo_top_of_doc"><tt>\r
+cl_qlockpool.h</tt></a></li>\r
+<li>\r
+<a href="./complib/cl_qmap_h.html#robo_top_of_doc"><tt>\r
+cl_qmap.h</tt></a></li>\r
+<li>\r
+<a href="./complib/cl_qpool_h.html#robo_top_of_doc"><tt>\r
+cl_qpool.h</tt></a></li>\r
+<li>\r
+<a href="./complib/cl_rbmap_h.html#robo_top_of_doc"><tt>\r
+cl_rbmap.h</tt></a></li>\r
+<li>\r
+<a href="./complib/cl_reqmgr_h.html#robo_top_of_doc"><tt>\r
+cl_reqmgr.h</tt></a></li>\r
+<li>\r
+<a href="./complib/cl_spinlock_h.html#robo_top_of_doc"><tt>\r
+cl_spinlock.h</tt></a></li>\r
+<li>\r
+<a href="./complib/cl_syscallback_h.html#robo_top_of_doc"><tt>\r
+cl_syscallback.h</tt></a></li>\r
+<li>\r
+<a href="./complib/cl_thread_h.html#robo_top_of_doc"><tt>\r
+cl_thread.h</tt></a></li>\r
+<li>\r
+<a href="./complib/cl_threadpool_h.html#robo_top_of_doc"><tt>\r
+cl_threadpool.h</tt></a></li>\r
+<li>\r
+<a href="./complib/cl_timer_h.html#robo_top_of_doc"><tt>\r
+cl_timer.h</tt></a></li>\r
+<li>\r
+<a href="./complib/cl_types_h.html#robo_top_of_doc"><tt>\r
+cl_types.h</tt></a></li>\r
+<li>\r
+<a href="./complib/cl_vector_h.html#robo_top_of_doc"><tt>\r
+cl_vector.h</tt></a></li>\r
+<li>\r
+<a href="./complib/cl_waitobj_h.html#robo_top_of_doc"><tt>\r
+cl_waitobj.h</tt></a></li>\r
+<li>\r
+<a href="./complib/comp_lib_h.html#robo_top_of_doc"><tt>\r
+comp_lib.h</tt></a></li>\r
+</ul>\r
+</li>\r
+<li>\r
+./inc/iba/<ul>\r
+<li>\r
+<a href="./iba/ib_al_h.html#robo_top_of_doc"><tt>\r
+ib_al.h</tt></a></li>\r
+<li>\r
+<a href="./iba/ib_al_ioctl_h.html#robo_top_of_doc"><tt>\r
+ib_al_ioctl.h</tt></a></li>\r
+<li>\r
+<a href="./iba/ib_ci_h.html#robo_top_of_doc"><tt>\r
+ib_ci.h</tt></a></li>\r
+<li>\r
+<a href="./iba/ib_types_h.html#robo_top_of_doc"><tt>\r
+ib_types.h</tt></a></li>\r
+</ul>\r
+</li>\r
+<li>\r
+./inc/kernel/<ul>\r
+<li>\r
+./inc/kernel/complib/<ul>\r
+<li>\r
+<a href="./kernel/complib/cl_bus_ifc_h.html#robo_top_of_doc"><tt>\r
+cl_bus_ifc.h</tt></a></li>\r
+<li>\r
+<a href="./kernel/complib/cl_pnp_po_h.html#robo_top_of_doc"><tt>\r
+cl_pnp_po.h</tt></a></li>\r
+</ul>\r
+</li>\r
+<li>\r
+./inc/kernel/iba/<ul>\r
+<li>\r
+<a href="./kernel/iba/ib_al_ifc_h.html#robo_top_of_doc"><tt>\r
+ib_al_ifc.h</tt></a></li>\r
+<li>\r
+<a href="./kernel/iba/ib_ci_ifc_h.html#robo_top_of_doc"><tt>\r
+ib_ci_ifc.h</tt></a></li>\r
+<li>\r
+<a href="./kernel/iba/ioc_ifc_h.html#robo_top_of_doc"><tt>\r
+ioc_ifc.h</tt></a></li>\r
+<li>\r
+<a href="./kernel/iba/iou_ifc_h.html#robo_top_of_doc"><tt>\r
+iou_ifc.h</tt></a></li>\r
+<li>\r
+<a href="./kernel/iba/ipoib_ifc_h.html#robo_top_of_doc"><tt>\r
+ipoib_ifc.h</tt></a></li>\r
+</ul>\r
+</li>\r
+</ul>\r
+</li>\r
+<li>\r
+./inc/mthca/<ul>\r
+</ul>\r
+</li>\r
+<li>\r
+./inc/user/<ul>\r
+<li>\r
+./inc/user/complib/<ul>\r
+</ul>\r
+</li>\r
+<li>\r
+./inc/user/iba/<ul>\r
+<li>\r
+<a href="./user/iba/ib_uvp_h.html#robo_top_of_doc"><tt>\r
+ib_uvp.h</tt></a></li>\r
+</ul>\r
+</li>\r
+<li>\r
+./inc/user/wsd/<ul>\r
+</ul>\r
+</li>\r
+</ul>\r
+</li>\r
+</ul>\r
+</li>\r
+</ul>\r
+</body>\r
+</html>\r
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">\r
+<html>\r
+<head>\r
+<link rel="stylesheet" href="./robodoc.css" type="text/css">\r
+<title>Structures</title>\r
+<!-- Source: ./inc/ -->\r
+<!-- Generated with ROBODoc Version 4.99.22 (Mar 6 2006) -->\r
+</head>\r
+<body bgcolor="#FFFFFF">\r
+<a name="robo_top_of_doc">Generated from ./inc/</a> with <a href="http://sourceforge.net/projects/robodoc/">ROBODoc</a> v4.99.22 on Sun Apr 16 2006 17:39:25\r
+<br />\r
+<p>\r
+[<a href="./robo_sourcefiles.html#top">Sourcefiles</a>]\r
+[<a href="./masterindex.html#top">Index</a>]\r
+[<a href="./robo_definitions.html#top">Definitions</a>]\r
+[<a href="./robo_functions.html#top">Functions</a>]\r
+[<a href="./robo_modules.html#top">Modules</a>]\r
+[<a href="#top">Structures</a>]\r
+</p>\r
+<h1>Structures</h1>\r
+<table cellspacing="3">\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_ci_h.html#robo1129"><tt>\r
+ci_interface_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_ci_h.html#robo1153"><tt>\r
+ci_umv_buf_t</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_async_proc_h.html#robo269"><tt>\r
+cl_async_proc_item_t</tt></a></td>\r
+<td class="even"><a href="./complib/cl_async_proc_h.html#robo271"><tt>\r
+cl_async_proc_t</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_comppool_h.html#robo299"><tt>\r
+cl_cpool_t</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_fleximap_h.html#robo331"><tt>\r
+cl_fmap_item_t</tt></a></td>\r
+<td class="even"><a href="./complib/cl_fleximap_h.html#robo339"><tt>\r
+cl_fmap_t</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_qlist_h.html#robo554"><tt>\r
+cl_list_item_t</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_qlist_h.html#robo555"><tt>\r
+cl_list_obj_t</tt></a></td>\r
+<td class="even"><a href="./complib/cl_list_h.html#robo390"><tt>\r
+cl_list_t</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_qmap_h.html#robo593"><tt>\r
+cl_map_item_t</tt></a></td>\r
+<td class="even"><a href="./complib/cl_qmap_h.html#robo594"><tt>\r
+cl_map_obj_t</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_map_h.html#robo415"><tt>\r
+cl_map_t</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_obj_h.html#robo453"><tt>\r
+cl_obj_mgr_t</tt></a></td>\r
+<td class="even"><a href="./complib/cl_obj_h.html#robo455"><tt>\r
+cl_obj_rel_t</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_obj_h.html#robo458"><tt>\r
+cl_obj_t</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_passivelock_h.html#robo470"><tt>\r
+cl_plock_t</tt></a></td>\r
+<td class="even"><a href="./complib/cl_qcomppool_h.html#robo542"><tt>\r
+cl_pool_item_t</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_pool_h.html#robo538"><tt>\r
+cl_pool_t</tt></a></td>\r
+<td class="even"><a href="./complib/cl_ptr_vector_h.html#robo527"><tt>\r
+cl_ptr_vector_t</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_qcomppool_h.html#robo551"><tt>\r
+cl_qcpool_t</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_qlist_h.html#robo584"><tt>\r
+cl_qlist_t</tt></a></td>\r
+<td class="even"><a href="./complib/cl_qlockpool_h.html#robo591"><tt>\r
+cl_qlock_pool_t</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_qmap_h.html#robo613"><tt>\r
+cl_qmap_t</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./complib/cl_qpool_h.html#robo626"><tt>\r
+cl_qpool_t</tt></a></td>\r
+<td class="even"><a href="./complib/cl_rbmap_h.html#robo632"><tt>\r
+cl_rbmap_item_t</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_rbmap_h.html#robo638"><tt>\r
+cl_rbmap_t</tt></a></td>\r
+<td class="even"><a href="./complib/cl_reqmgr_h.html#robo646"><tt>\r
+cl_req_mgr_t</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./complib/cl_threadpool_h.html#robo662"><tt>\r
+cl_thread_pool_t</tt></a></td>\r
+<td class="uneven"><a href="./complib/cl_vector_h.html#robo700"><tt>\r
+cl_vector_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_h.html#robo51"><tt>\r
+ib_apr_info_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo52"><tt>\r
+ib_apr_pdata_t</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo54"><tt>\r
+ib_ari_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_h.html#robo55"><tt>\r
+ib_async_event_rec_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo57"><tt>\r
+ib_av_attr_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo59"><tt>\r
+ib_bind_wr_t</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_types_h.html#robo60"><tt>\r
+ib_ca_attr_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo64"><tt>\r
+ib_cep_listen_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo66"><tt>\r
+ib_ci_op_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo709"><tt>\r
+IB_CLASS_CAP_GETSET</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo710"><tt>\r
+IB_CLASS_CAP_TRAP</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo839"><tt>\r
+ib_class_port_info_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo711"><tt>\r
+IB_CLASS_RESP_TIME_MASK</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_h.html#robo70"><tt>\r
+ib_cm_apr_rec_t</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_al_h.html#robo71"><tt>\r
+ib_cm_apr_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo75"><tt>\r
+ib_cm_drep_rec_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_h.html#robo76"><tt>\r
+ib_cm_drep_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo78"><tt>\r
+ib_cm_dreq_rec_t</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo79"><tt>\r
+ib_cm_dreq_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_h.html#robo83"><tt>\r
+ib_cm_lap_rec_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo84"><tt>\r
+ib_cm_lap_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_h.html#robo86"><tt>\r
+ib_cm_listen_t</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_al_h.html#robo88"><tt>\r
+ib_cm_mra_rec_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo89"><tt>\r
+ib_cm_mra_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_h.html#robo91"><tt>\r
+ib_cm_rej_rec_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo92"><tt>\r
+ib_cm_rej_t</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo94"><tt>\r
+ib_cm_rep_rec_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_h.html#robo95"><tt>\r
+ib_cm_rep_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo97"><tt>\r
+ib_cm_req_rec_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_h.html#robo98"><tt>\r
+ib_cm_req_t</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_al_h.html#robo100"><tt>\r
+ib_cm_rtu_rec_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo101"><tt>\r
+ib_cm_rtu_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_h.html#robo103"><tt>\r
+ib_cq_create_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo122"><tt>\r
+ib_dgrm_info_t</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo840"><tt>\r
+ib_dm_mad_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_h.html#robo123"><tt>\r
+ib_drep_pdata_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo124"><tt>\r
+ib_dreq_pdata_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo1157"><tt>\r
+ib_event_rec_t</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_types_h.html#robo841"><tt>\r
+ib_field32_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo138"><tt>\r
+ib_gid_pair_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo859"><tt>\r
+ib_grh_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo860"><tt>\r
+ib_guid_info_t</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo139"><tt>\r
+ib_guid_pair_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo867"><tt>\r
+ib_inform_info_record_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo874"><tt>\r
+ib_ioc_profile_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo877"><tt>\r
+ib_iou_info_t</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_al_h.html#robo143"><tt>\r
+ib_lap_pdata_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo878"><tt>\r
+ib_lft_record_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_h.html#robo145"><tt>\r
+ib_lid_pair_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo146"><tt>\r
+ib_listen_err_rec_t</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo148"><tt>\r
+ib_local_ds_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_h.html#robo150"><tt>\r
+ib_mad_element_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo151"><tt>\r
+ib_mad_svc_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo882"><tt>\r
+ib_mad_t</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_al_h.html#robo153"><tt>\r
+ib_mcast_rec_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo154"><tt>\r
+ib_mcast_req_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo887"><tt>\r
+ib_member_rec_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo159"><tt>\r
+ib_mr_attr_t</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo160"><tt>\r
+ib_mr_create_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_h.html#robo162"><tt>\r
+ib_mra_pdata_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo898"><tt>\r
+ib_node_info_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo927"><tt>\r
+ib_path_rec_t</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_types_h.html#robo187"><tt>\r
+ib_phys_create_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo188"><tt>\r
+ib_phys_range_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo930"><tt>\r
+ib_pkey_table_info_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo189"><tt>\r
+ib_pnp_ca_rec_t</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo192"><tt>\r
+ib_pnp_ioc_path_rec_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_h.html#robo193"><tt>\r
+ib_pnp_ioc_rec_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo194"><tt>\r
+ib_pnp_iou_rec_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_h.html#robo195"><tt>\r
+ib_pnp_port_rec_t</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_al_h.html#robo196"><tt>\r
+ib_pnp_rec_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo197"><tt>\r
+ib_pnp_req_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo199"><tt>\r
+ib_port_attr_mod_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo200"><tt>\r
+ib_port_attr_t</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo201"><tt>\r
+ib_port_cap_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo949"><tt>\r
+ib_port_info_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo205"><tt>\r
+ib_qp_attr_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo206"><tt>\r
+ib_qp_create_t</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_types_h.html#robo207"><tt>\r
+ib_qp_mod_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo219"><tt>\r
+ib_query_rec_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_h.html#robo220"><tt>\r
+ib_query_req_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo225"><tt>\r
+ib_recv_wr_t</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo235"><tt>\r
+ib_reg_svc_rec_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_h.html#robo236"><tt>\r
+ib_reg_svc_req_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo237"><tt>\r
+ib_rej_pdata_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_h.html#robo241"><tt>\r
+ib_rep_pdata_t</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_al_h.html#robo242"><tt>\r
+ib_report_rec_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo243"><tt>\r
+ib_req_pdata_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo951"><tt>\r
+ib_rmpp_mad_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo246"><tt>\r
+ib_rtu_pdata_t</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo953"><tt>\r
+ib_sa_mad_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo249"><tt>\r
+ib_send_wr_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo250"><tt>\r
+ib_shmid_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_h.html#robo251"><tt>\r
+ib_sidr_rep_pdata_t</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_al_h.html#robo252"><tt>\r
+ib_sidr_req_pdata_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo955"><tt>\r
+ib_slvl_table_record_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo957"><tt>\r
+ib_slvl_table_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo958"><tt>\r
+ib_sm_info_t</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo966"><tt>\r
+ib_smp_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_h.html#robo253"><tt>\r
+ib_sub_rec_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_h.html#robo254"><tt>\r
+ib_sub_req_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo967"><tt>\r
+ib_svc_entries_t</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_types_h.html#robo968"><tt>\r
+ib_svc_entry_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo971"><tt>\r
+ib_switch_info_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_h.html#robo258"><tt>\r
+ib_user_query_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo974"><tt>\r
+ib_vl_arb_element_t</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo975"><tt>\r
+ib_vl_arb_table_record_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_types_h.html#robo976"><tt>\r
+ib_vl_arb_table_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_types_h.html#robo260"><tt>\r
+ib_wc_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_ioctl_h.html#robo980"><tt>\r
+ual_alloc_pd_ioctl_t</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_al_ioctl_h.html#robo981"><tt>\r
+ual_attach_mcast_ioctl_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_ioctl_h.html#robo982"><tt>\r
+ual_bind_file_ioctl_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_ioctl_h.html#robo983"><tt>\r
+ual_bind_mw_ioctl_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_ioctl_h.html#robo984"><tt>\r
+ual_cancel_mad_ioctl_t</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_al_ioctl_h.html#robo985"><tt>\r
+ual_cancel_sa_req_ioctl_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_ioctl_h.html#robo986"><tt>\r
+ual_cep_apr_ioctl_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_ioctl_h.html#robo987"><tt>\r
+ual_cep_drep_ioctl_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_ioctl_h.html#robo988"><tt>\r
+ual_cep_dreq_ioctl_t</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_al_ioctl_h.html#robo989"><tt>\r
+ual_cep_get_rtr_ioctl_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_ioctl_h.html#robo990"><tt>\r
+ual_cep_get_rts_ioctl_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_ioctl_h.html#robo991"><tt>\r
+ual_cep_get_timewait_ioctl_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_ioctl_h.html#robo992"><tt>\r
+ual_cep_handoff_ioctl_t</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_al_ioctl_h.html#robo993"><tt>\r
+ual_cep_lap_ioctl_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_ioctl_h.html#robo994"><tt>\r
+ual_cep_listen_ioctl_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_ioctl_h.html#robo995"><tt>\r
+ual_cep_mra_ioctl_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_ioctl_h.html#robo996"><tt>\r
+ual_cep_poll_ioctl_t</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_al_ioctl_h.html#robo997"><tt>\r
+ual_cep_rej_ioctl_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_ioctl_h.html#robo998"><tt>\r
+ual_cep_rep_ioctl_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_ioctl_h.html#robo999"><tt>\r
+ual_cep_rtu_ioctl_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_ioctl_h.html#robo1000"><tt>\r
+ual_ci_call_ioctl_t</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_al_ioctl_h.html#robo1001"><tt>\r
+ual_close_ca_ioctl_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_ioctl_h.html#robo1002"><tt>\r
+ual_cm_req_ioctl_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_ioctl_h.html#robo1003"><tt>\r
+ual_create_av_ioctl_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_ioctl_h.html#robo1004"><tt>\r
+ual_create_cep_ioctl_t</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_al_ioctl_h.html#robo1005"><tt>\r
+ual_create_cq_ioctl_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_ioctl_h.html#robo1006"><tt>\r
+ual_create_mw_ioctl_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_ioctl_h.html#robo1007"><tt>\r
+ual_create_qp_ioctl_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_ioctl_h.html#robo1008"><tt>\r
+ual_dealloc_pd_ioctl_t</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_al_ioctl_h.html#robo1009"><tt>\r
+ual_dereg_mad_pool_ioctl_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_ioctl_h.html#robo1010"><tt>\r
+ual_dereg_mad_svc_ioctl_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_ioctl_h.html#robo1011"><tt>\r
+ual_dereg_mr_ioctl_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_ioctl_h.html#robo1012"><tt>\r
+ual_dereg_pnp_ioctl_t</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_al_ioctl_h.html#robo1013"><tt>\r
+ual_destroy_av_ioctl_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_ioctl_h.html#robo1014"><tt>\r
+ual_destroy_cq_ioctl_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_ioctl_h.html#robo1015"><tt>\r
+ual_destroy_mw_ioctl_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_ioctl_h.html#robo1016"><tt>\r
+ual_destroy_qp_ioctl_t</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_al_ioctl_h.html#robo1017"><tt>\r
+ual_detach_mcast_ioctl_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_ioctl_h.html#robo1018"><tt>\r
+ual_force_apm_ioctl_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_ioctl_h.html#robo1019"><tt>\r
+ual_get_uvp_name_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_ioctl_h.html#robo1020"><tt>\r
+ual_mad_recv_ioctl_t</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_al_ioctl_h.html#robo1021"><tt>\r
+ual_modify_av_ioctl_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_ioctl_h.html#robo1022"><tt>\r
+ual_modify_ca_ioctl_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_ioctl_h.html#robo1023"><tt>\r
+ual_modify_cq_ioctl_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_ioctl_h.html#robo1024"><tt>\r
+ual_modify_qp_ioctl_t</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_al_ioctl_h.html#robo1025"><tt>\r
+ual_open_ca_ioctl_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_ioctl_h.html#robo1026"><tt>\r
+ual_peek_cq_ioctl_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_ioctl_h.html#robo1027"><tt>\r
+ual_poll_cq_ioctl_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_ioctl_h.html#robo1028"><tt>\r
+ual_poll_pnp_ioctl_t</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_al_ioctl_h.html#robo1029"><tt>\r
+ual_post_recv_ioctl_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_ioctl_h.html#robo1030"><tt>\r
+ual_post_send_ioctl_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_ioctl_h.html#robo1031"><tt>\r
+ual_query_av_ioctl_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_ioctl_h.html#robo1032"><tt>\r
+ual_query_ca_ioctl_t</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_al_ioctl_h.html#robo1033"><tt>\r
+ual_query_cq_ioctl_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_ioctl_h.html#robo1034"><tt>\r
+ual_query_mr_ioctl_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_ioctl_h.html#robo1035"><tt>\r
+ual_query_mw_ioctl_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_ioctl_h.html#robo1036"><tt>\r
+ual_query_qp_ioctl_t</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_al_ioctl_h.html#robo1037"><tt>\r
+ual_rearm_cq_ioctl_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_ioctl_h.html#robo1038"><tt>\r
+ual_rearm_n_cq_ioctl_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_ioctl_h.html#robo1039"><tt>\r
+ual_rearm_pnp_ioctl_in_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_ioctl_h.html#robo1040"><tt>\r
+ual_rearm_pnp_ioctl_out_t</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_al_ioctl_h.html#robo1041"><tt>\r
+ual_reg_mad_pool_ioctl_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_ioctl_h.html#robo1042"><tt>\r
+ual_reg_mad_svc_ioctl_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_ioctl_h.html#robo1043"><tt>\r
+ual_reg_mem_ioctl_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_ioctl_h.html#robo1044"><tt>\r
+ual_reg_pnp_ioctl_in_t</tt></a></td>\r
+</tr>\r
+<tr class="uneven">\r
+<td class="even"><a href="./iba/ib_al_ioctl_h.html#robo1045"><tt>\r
+ual_reg_shared_ioctl_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_ioctl_h.html#robo1046"><tt>\r
+ual_reg_shmid_ioctl_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_ioctl_h.html#robo1047"><tt>\r
+ual_rereg_mem_ioctl_t</tt></a></td>\r
+<td class="uneven"><a href="./iba/ib_al_ioctl_h.html#robo1048"><tt>\r
+ual_send_mad_ioctl_t</tt></a></td>\r
+</tr>\r
+<tr class="even">\r
+<td class="uneven"><a href="./iba/ib_al_ioctl_h.html#robo1049"><tt>\r
+ual_send_sa_req_t</tt></a></td>\r
+<td class="even"><a href="./iba/ib_al_ioctl_h.html#robo1050"><tt>\r
+ual_spl_qp_ioctl_t</tt></a></td>\r
+<td class="uneven"><a href="./user/iba/ib_uvp_h.html#robo1054"><tt>\r
+uvp_interface_t</tt></a></td>\r
+<td></td>\r
+</tr>\r
+</table>\r
+</body>\r
+</html>\r
--- /dev/null
+body\r
+{\r
+ background-color: #ffffff;\r
+ color: #000000;\r
+ font-family: 'Lucida Grande', Verdana, \r
+ Geneva, Lucida, Arial, \r
+ Helvetica, sans-serif;\r
+ font-size: 10pt;\r
+ margin: 2% 5%;\r
+}\r
+h1, h2, h3, h4, h5, h6, h7\r
+{\r
+ background-color: #dddddd;\r
+ color: #000000;\r
+ text-align: right;\r
+ font-size: 11pt;\r
+}\r
+td.even, td.uneven\r
+{\r
+ color: #000000;\r
+ font-size: 10pt;\r
+}\r
+td.even\r
+{\r
+ background-color: #eeeeee;\r
+}\r
+span.SOURCE\r
+{\r
+ white-space: pre;\r
+}\r
+pre\r
+{\r
+ background-color: #ffffff;\r
+ color: #000000;\r
+ font-size: 10pt;\r
+}\r
--- /dev/null
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">\r
+<html>\r
+<head>\r
+<link rel="stylesheet" href="../../robodoc.css" type="text/css">\r
+<title>./inc_doc/user/iba/ib_uvp_h.html</title>\r
+<!-- Source: ./inc/user/iba/ib_uvp.h -->\r
+<!-- Generated with ROBODoc Version 4.99.22 (Mar 6 2006) -->\r
+</head>\r
+<body bgcolor="#FFFFFF">\r
+<a name="robo_top_of_doc">Generated from ./inc/user/iba/ib_uvp.h</a> with <a href="http://sourceforge.net/projects/robodoc/">ROBODoc</a> v4.99.22 on Sun Apr 16 2006 17:39:19\r
+<br />\r
+<hr />\r
+\r
+<h2><a name="robo43">[Modules]<a name="UAL5fUVP5fInterface2fOverview20user2dmode20Verbs">\r
+UAL_UVP_Interface/Overview user-mode Verbs</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../../robo_modules.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> User-mode <a href="../../iba/ib_ci_h.html#robo39">Verbs</a> -- User-mode <a href="../../iba/ib_ci_h.html#robo39">Verbs</a> implements the HCA specific\r
+ user-mode functions to plug in to the Usermode Access Layer\r
+ Architecture (UAL)\r
+</pre>\r
+</span><p><strong>COPYRIGHT</strong></p>\r
+<span class="COPYRIGHT"><pre> Copyright© 2001 Intel Corporation - All Rights Reserved.\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> The user-mode <a href="../../iba/ib_ci_h.html#robo39">Verbs</a> Interface defines the mechanism for a HCA vendor\r
+ to plug into the User-mode Access Layer (UAL) architecture.\r
+ Access Layer API is what is exposed to the user-mode applications.\r
+ The interface described here is not <a href="../../iba/ib_ci_h.html#robo39">Verbs</a> API. In this interface model,\r
+ UAL provides a generic mechanism to exchange vendor specific info\r
+ in the implementation of verbs within the UAL architecture. UAL provides\r
+ the support for callback processing. For instance, AL provides a\r
+ QP error callback when a qp incurs error. Such asynchronous events are\r
+ handled with the support of UAL and not by the vendor interface described\r
+ here.\r
+\r
+ For verbs related AL APIs, UAL packages the parameters in an IOCTL\r
+ and sends it to the kernel AL. In the UAL design, this is broken down\r
+ into 3 steps.\r
+\r
+ a. Pre-ioctl step\r
+ A vendor specified pre-ioctl function is called with relevant input\r
+ parameters including a private buffer template (<a href="../../iba/ib_ci_h.html#robo1153">ci_umv_buf_t</a>)\r
+ for the vendor to communicate with the corresponding HCA driver.\r
+ For calls that does not go to the HCA driver (for e.g. <a href="../../iba/ib_al_h.html#robo164">ib_open_ca</a>())\r
+ no private buffer will be passed.\r
+ b. Sending IOCTL to kernel AL\r
+ Following step (a), UAL prepares an IOCTL with the relevant parameters\r
+ including the vendor's private buffer. UAL/user-mode proxy does not\r
+ interpret the contents of the private buffer.\r
+ UAL sends the IOCTL to the user-mode proxy in kernel. The proxy\r
+ interfaces with kernel AL to act on behalf the user. AL passes the\r
+ parameters to the <a href="../../iba/ib_ci_h.html#robo39">Verbs</a> Provider Driver and the results are returned\r
+ back to UAL.\r
+ c. Post-ioctl step.\r
+ Following the return from IOCTL in step (b), UAL calls a\r
+ vendor-specified post-ioctl function with relevant parameters.\r
+ UAL will call the post-ioctl function whether or not step (b)\r
+ succeeded. The ioctl itself could have successfully returned but\r
+ a vendor-specific status in <a href="../../iba/ib_ci_h.html#robo1153">ci_umv_buf_t</a> may indicate a failure.\r
+ UAL also passes the ioctl status to the vendor library so that\r
+ the appropriate action can be taken in the post call.\r
+\r
+ Use of <a href="../../iba/ib_ci_h.html#robo1153">ci_umv_buf_t</a> and pre/post return values\r
+\r
+ 1. ci_umv_buf is provided by UAL as a unique buffer template for\r
+ a given verbs call. Vendor could keep any info relevant to\r
+ the specific verbs call in this buffer. This buffer is sufficient\r
+ for uniquely identifying which call it is intended for. For instance,\r
+ the umv buffer set up by vendor in a <a href="#robo1090">uvp_pre_create_qp</a>() could later\r
+ tell the <a href="#robo1064">uvp_post_create_qp_t</a>() which QP it is intended for.\r
+\r
+ 2. The success of pre/post-ioctl step to UAL means IB_SUCCESS.\r
+ Any value other than IB_SUCCESS is treated as failure.\r
+\r
+ 3. The Vendor could exchange a status in <a href="../../iba/ib_ci_h.html#robo1153">ci_umv_buf_t</a>. However, this\r
+ interface does not enumerate the status in <a href="../../iba/ib_ci_h.html#robo1153">ci_umv_buf_t</a>.\r
+ However, the vendor could check the status in <a href="../../iba/ib_ci_h.html#robo1153">ci_umv_buf_t</a>\r
+ returned from the pre-ioctl step and act accordingly.\r
+</pre>\r
+</span><p><strong>AUTHOR</strong></p>\r
+<span class="AUTHOR"><pre> Intel Corporation\r
+</pre>\r
+</span><p><strong>CREATION DATE</strong></p>\r
+<span class="CREATION_DATE"><pre> XX.XX.XX\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> 1. For user mode verbs that require a kernel transition, handles passed\r
+ to kernel are validated in the user-mode proxy running in kernel.\r
+ Those <a href="../../iba/ib_ci_h.html#robo39">Verbs</a> that are entirely done in user mode that would affect\r
+ speed path do not perform consistency checks. So invalid pointers\r
+ would lead to application crash with core dumps.\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1051">[Functions]<a name="user2dmode20Verbs2funsupported20functions">\r
+user-mode Verbs/unsupported functions</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> 1. Register physical memory region with HCA (<a href="../../iba/ib_ci_h.html#robo1148">ci_register_pmr</a>)\r
+ 2. Modify physical memory region with HCA (<a href="../../iba/ib_ci_h.html#robo1134">ci_modify_pmr</a>)\r
+ 3. Create Special QP (<a href="../../iba/ib_ci_h.html#robo1119">ci_create_spl_qp</a>)\r
+ 4. Local Mad (<a href="../../iba/ib_ci_h.html#robo1130">ci_local_mad</a>)\r
+\r
+ For all these functions, the vendor does NOT provide support\r
+ and UAL will return IB_UNSUPPORTED to the caller of Access Layer.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"></span>\r
+<hr />\r
+\r
+<h2><a name="robo1052">[Functions]<a name="user2dmode20Verbs2fuvp5fbind5fmw">\r
+user-mode Verbs/uvp_bind_mw</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>uvp_bind_mw</strong> -- Bind a memory window to a memory region.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef <a href="../../iba/ib_types_h.html#robo49">ib_api_status_t</a>\r
+(AL_API *<strong>uvp_bind_mw</strong>) (\r
+ IN const ib_mw_handle_t h_uvp_mw,\r
+ IN const ib_qp_handle_t h_uvp_qp,\r
+ IN <a href="../../iba/ib_types_h.html#robo59">ib_bind_wr_t</a> *p_mw_bind,\r
+ OUT net32_t* const p_rkey );\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> This routine posts a request to bind a memory window to a registered\r
+ memory region. If the queue pair was created with selectable signaling,\r
+ once the operation is completed successfully then a completion queue entry\r
+ is generated indicating the bind operation has completed. The IB_POST_FENCE\r
+ option could be specified to cause the requestor to wait until outstanding\r
+ RDMA operations can be completed.\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_uvp_mw\r
+ [in] Vendor's Handle (in user-mode library) to memory window\r
+ that needs to be bound to a memory region.\r
+ h_uvp_qp\r
+ [in] Vendor's QP Handle (in user-mode library) to which\r
+ this bind request is to be posted.\r
+ p_mw_bind\r
+ [in] Input parameters for this bind request, consisting of virtual\r
+ addr range of bind request etc. On successful completion, the new R_KEY\r
+ is returned.\r
+ p_rkey\r
+ [out] Current R_KEY associated with this mw_handle\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> IB_SUCCESS\r
+ The memory bind operation was posted successfully.\r
+ IB_INSUFFICIENT_RESOURCES\r
+ Insufficient resources to complete the request.\r
+ No more WQE's to post this request\r
+ No more free WQE's to post this request\r
+ IB_INVALID_MW_HANDLE\r
+ memw_handle supplied is an invalid memory window handle.\r
+ IB_INVALID_PERMISSION\r
+ Invalid access rights specified in request\r
+ IB_INVALID_SERVICE_TYPE\r
+ Invalid service type for this qp_handle.\r
+ IB_INVALID_PARAMETER\r
+ Address or length parameter specified is invalid.\r
+ IB_INVALID_RKEY\r
+ R_KEY specified is invalid for the memory region being bound.\r
+</pre>\r
+</span><p><strong>PORTABILITY</strong></p>\r
+<span class="PORTABILITY"><pre> User mode.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo1089">uvp_pre_create_mw</a>, <a href="#robo1063">uvp_post_create_mw_t</a>, <a href="#robo1104">uvp_pre_query_mw</a>,\r
+ <a href="#robo1078">uvp_post_query_mw_t</a>, <a href="#robo1094">uvp_pre_destroy_mw</a>, <a href="#robo1068">uvp_post_destroy_mw_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1053">[Functions]<a name="user2dmode20Verbs2fuvp5fget5finterface">\r
+user-mode Verbs/uvp_get_interface</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>uvp_get_interface</strong> -- Get the Vendor's supported <a href="../../iba/ib_ci_h.html#robo39">Verbs</a> calls\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef <a href="../../iba/ib_types_h.html#robo49">ib_api_status_t</a>\r
+(AL_API *uvp_get_interface_t)(\r
+ IN OUT <a href="#robo1054">uvp_interface_t</a>* const p_uvp );\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> This routine is called by UAL to get the functions supported by\r
+ a vendor's library. Upon discovering a new CA, UAL will look for\r
+ the appropriate vendor library, load the library and query using\r
+ this function to get the supported interfaces.\r
+\r
+ If the vendor does not support an interface function, it should be\r
+ set to NULL in the interface structure returned.\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> p_uvp\r
+ [in out] Pointer to the <a href="#robo1054">uvp_interface_t</a> structure that has the function\r
+ vector to support verbs functionality.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> IB_SUCCESS\r
+ The registration is successful.\r
+ IB_INSUFFICIENT_MEMORY\r
+ Insufficient memory to satisfy request\r
+</pre>\r
+</span><p><strong>PORTABILITY</strong></p>\r
+<span class="PORTABILITY"><pre> User mode\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo1054">uvp_interface_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1054">[Structures]<a name="user2dmode20Verbs2fuvp5finterface5ft">\r
+user-mode Verbs/uvp_interface_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../../robo_strutures.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>uvp_interface_t</strong> -- Interface holding supported Vendor APIs\r
+</pre>\r
+</span><p><strong>PURPOSE</strong></p>\r
+<span class="PURPOSE"><pre> The following structure is supplied by a Vendor library\r
+ providing verbs functionality.\r
+</pre>\r
+</span><p><strong>SOURCE</strong></p>\r
+<span class="SOURCE"><pre>typedef struct _uvp_interface\r
+{\r
+ <a href="../../iba/ib_types_h.html#robo895">ib_net64_t</a> guid;\r
+ /*\r
+ * Version of the header file this interface export can handle\r
+ */\r
+ uint32_t version;\r
+\r
+ /*\r
+ * HCA Access <a href="../../iba/ib_ci_h.html#robo39">Verbs</a>\r
+ */\r
+ <a href="#robo1100">uvp_pre_open_ca_t</a> pre_open_ca;\r
+ <a href="#robo1074">uvp_post_open_ca_t</a> post_open_ca;\r
+\r
+ <a href="#robo1102">uvp_pre_query_ca</a> pre_query_ca;\r
+ <a href="#robo1076">uvp_post_query_ca_t</a> post_query_ca;\r
+\r
+ <a href="#robo1098">uvp_pre_modify_ca</a> pre_modify_ca;\r
+ <a href="#robo1072">uvp_post_modify_ca_t</a> post_modify_ca;\r
+\r
+ <a href="#robo1086">uvp_pre_close_ca_t</a> pre_close_ca;\r
+ <a href="#robo1060">uvp_post_close_ca_t</a> post_close_ca;\r
+\r
+ <a href="#robo1085">uvp_pre_ci_call</a> pre_ci_call;\r
+ <a href="#robo1059">uvp_post_ci_call</a> post_ci_call;\r
+\r
+\r
+ /*\r
+ * Protection Domain\r
+ */\r
+ <a href="#robo1083">uvp_pre_allocate_pd</a> pre_allocate_pd;\r
+ <a href="#robo1057">uvp_post_allocate_pd_t</a> post_allocate_pd;\r
+ <a href="#robo1091">uvp_pre_deallocate_pd</a> pre_deallocate_pd;\r
+ <a href="#robo1065">uvp_post_deallocate_pd_t</a> post_deallocate_pd;\r
+\r
+ /*\r
+ * Address <a href="../../complib/cl_vector_h.html#robo36">Vector</a> Management <a href="../../iba/ib_ci_h.html#robo39">Verbs</a>\r
+ */\r
+\r
+ <a href="#robo1087">uvp_pre_create_av</a> pre_create_av;\r
+ <a href="#robo1061">uvp_post_create_av_t</a> post_create_av;\r
+\r
+ <a href="#robo1101">uvp_pre_query_av</a> pre_query_av;\r
+ <a href="#robo1075">uvp_post_query_av_t</a> post_query_av;\r
+\r
+ <a href="#robo1097">uvp_pre_modify_av</a> pre_modify_av;\r
+ <a href="#robo1071">uvp_post_modify_av_t</a> post_modify_av;\r
+ <a href="#robo1092">uvp_pre_destroy_av</a> pre_destroy_av;\r
+ <a href="#robo1066">uvp_post_destroy_av_t</a> post_destroy_av;\r
+\r
+ /*\r
+ * QP Management <a href="../../iba/ib_ci_h.html#robo39">Verbs</a>\r
+ */\r
+ <a href="#robo1090">uvp_pre_create_qp</a> pre_create_qp;\r
+ <a href="#robo1064">uvp_post_create_qp_t</a> post_create_qp;\r
+\r
+ /* No support for create_spl_qp, UAL will return error */\r
+\r
+ <a href="#robo1099">uvp_pre_modify_qp</a> pre_modify_qp;\r
+ <a href="#robo1073">uvp_post_modify_qp_t</a> post_modify_qp;\r
+\r
+ <a href="#robo1105">uvp_pre_query_qp</a> pre_query_qp;\r
+ <a href="#robo1079">uvp_post_query_qp_t</a> post_query_qp;\r
+\r
+ <a href="#robo1095">uvp_pre_destroy_qp</a> pre_destroy_qp;\r
+ <a href="#robo1069">uvp_post_destroy_qp_t</a> post_destroy_qp;\r
+\r
+ /*\r
+ * Completion Queue Management <a href="../../iba/ib_ci_h.html#robo39">Verbs</a>\r
+ */\r
+ <a href="#robo1088">uvp_pre_create_cq</a> pre_create_cq;\r
+ <a href="#robo1062">uvp_post_create_cq_t</a> post_create_cq;\r
+\r
+ <a href="#robo1103">uvp_pre_query_cq</a> pre_query_cq;\r
+ <a href="#robo1077">uvp_post_query_cq_t</a> post_query_cq;\r
+\r
+ <a href="#robo1106">uvp_pre_resize_cq</a> pre_resize_cq;\r
+ <a href="#robo1081">uvp_post_resize_cq_t</a> post_resize_cq;\r
+\r
+ <a href="#robo1093">uvp_pre_destroy_cq</a> pre_destroy_cq;\r
+ <a href="#robo1067">uvp_post_destroy_cq_t</a> post_destroy_cq;\r
+\r
+ /*\r
+ * Memory Window <a href="../../iba/ib_ci_h.html#robo39">Verbs</a>\r
+ */\r
+ <a href="#robo1089">uvp_pre_create_mw</a> pre_create_mw;\r
+ <a href="#robo1063">uvp_post_create_mw_t</a> post_create_mw;\r
+ <a href="#robo1104">uvp_pre_query_mw</a> pre_query_mw;\r
+ <a href="#robo1078">uvp_post_query_mw_t</a> post_query_mw;\r
+ <a href="#robo1094">uvp_pre_destroy_mw</a> pre_destroy_mw;\r
+ <a href="#robo1068">uvp_post_destroy_mw_t</a> post_destroy_mw;\r
+\r
+ /* No pre/post functions for bind */\r
+ <a href="#robo1052">uvp_bind_mw</a> bind_mw;\r
+\r
+ /*\r
+ * Work Request Processing <a href="../../iba/ib_ci_h.html#robo39">Verbs</a>\r
+ * Should the types be same as <a href="../../iba/ib_ci_h.html#robo39">Verbs</a>?\r
+ */\r
+ <a href="#robo1082">uvp_post_send</a> post_send;\r
+ <a href="#robo1080">uvp_post_recv</a> post_recv;\r
+\r
+ /*\r
+ * Completion Processing and\r
+ * Completion Notification Request <a href="../../iba/ib_ci_h.html#robo39">Verbs</a>.\r
+ * Should the types be same as <a href="../../iba/ib_ci_h.html#robo39">Verbs</a>?\r
+ */\r
+ <a href="#robo1055">uvp_peek_cq</a> peek_cq;\r
+ <a href="#robo1056">uvp_poll_cq</a> poll_cq;\r
+ <a href="#robo1107">uvp_rearm_cq</a> rearm_cq;\r
+ <a href="#robo1108">uvp_rearm_n_cq</a> rearm_n_cq;\r
+\r
+ /*\r
+ * Multicast Support <a href="../../iba/ib_ci_h.html#robo39">Verbs</a>\r
+ */\r
+ <a href="#robo1084">uvp_pre_attach_mcast</a> pre_attach_mcast;\r
+ <a href="#robo1058">uvp_post_attach_mcast_t</a> post_attach_mcast;\r
+ <a href="#robo1096">uvp_pre_detach_mcast</a> pre_detach_mcast;\r
+ <a href="#robo1070">uvp_post_detach_mcast_t</a> post_detach_mcast;\r
+\r
+} <strong>uvp_interface_t</strong>;\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1055">[Functions]<a name="user2dmode20Verbs2fuvp5fpeek5fcq">\r
+user-mode Verbs/uvp_peek_cq</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>uvp_peek_cq</strong>\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> Returns the number of entries currently on the completion queue.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef <a href="../../iba/ib_types_h.html#robo49">ib_api_status_t</a>\r
+(AL_API *<strong>uvp_peek_cq</strong>) (\r
+ IN const void* __ptr64 h_cq,\r
+ OUT uint32_t* const p_n_cqes );\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_cq\r
+ [in] Type-cast as appropriate for user/kernel mode, this is the\r
+ CQ handle for the completion queue being peeked.\r
+\r
+ p_n_cqes\r
+ [out] Upon successful completion of this call, contains the number\r
+ of completion queue entries currently on the completion queue.\r
+\r
+ RETURN VALUES\r
+ IB_SUCCESS\r
+ The peek operation completed successfully.\r
+\r
+ IB_INVALID_CQ_HANDLE\r
+ The completion queue handle was invalid.\r
+\r
+ IB_INVALID_PARAMETER\r
+ A reference to the completion queue entry count was not provided.\r
+</pre>\r
+</span><p><strong>PORTABILITY</strong></p>\r
+<span class="PORTABILITY"><pre> Kernel and User mode\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo1088">uvp_pre_create_cq</a>, <a href="#robo1062">uvp_post_create_cq_t</a>, <a href="#robo1056">uvp_poll_cq</a>, <a href="#robo1107">uvp_rearm_cq</a>,\r
+ <a href="#robo1108">uvp_rearm_n_cq</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1056">[Functions]<a name="user2dmode20Verbs2fuvp5fpoll5fcq">\r
+user-mode Verbs/uvp_poll_cq</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>uvp_poll_cq</strong> -- Retrieve a work completion record from a completion queue\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef <a href="../../iba/ib_types_h.html#robo49">ib_api_status_t</a>\r
+(AL_API *<strong>uvp_poll_cq</strong>) (\r
+ IN const void* __ptr64 h_cq,\r
+ IN OUT <a href="../../iba/ib_types_h.html#robo260">ib_wc_t</a>** const pp_free_wclist,\r
+ OUT <a href="../../iba/ib_types_h.html#robo260">ib_wc_t</a>** const pp_done_wclist );\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> This routine retrieves a work completion entry from the specified\r
+ completion queue. The contents of the data returned in a work completion\r
+ is specified in <a href="../../iba/ib_types_h.html#robo260">ib_wc_t</a>.\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_cq\r
+ [in] Type-cast as appropriate for user/kernel mode, this is\r
+ the CQ handle for the completion queue being polled.\r
+ pp_free_wclist\r
+ [in out] A list of work request structures provided by the consumer\r
+ for the channel interface to return completed Completion Queue\r
+ entries. If not all the entries are consumed, this list holds the\r
+ list of un-utilized completion entries provided back to the consumer.\r
+ pp_done_wclist\r
+ [out] A list of work completions retrieved from the completion queue\r
+ and successfully processed.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> IB_SUCCESS\r
+ Poll completed successfully. If on completion the wc_free list is\r
+ empty, then there are potentially more entries and the consumer must\r
+ be ready to retrieve entries further.\r
+ IB_INVALID_CQ_HANDLE\r
+ The cq_handle supplied is not valid.\r
+ IB_NOT_FOUND\r
+ There are no more entries found in the specified CQ.\r
+</pre>\r
+</span><p><strong>PORTABILITY</strong></p>\r
+<span class="PORTABILITY"><pre> Kernel & User mode.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo1088">uvp_pre_create_cq</a>, <a href="#robo1062">uvp_post_create_cq_t</a>, <a href="#robo1107">uvp_rearm_cq</a>,\r
+ <a href="#robo1108">uvp_rearm_n_cq</a>, <a href="#robo1082">uvp_post_send</a>, <a href="#robo1080">uvp_post_recv</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1057">[Functions]<a name="user2dmode20Verbs2fuvp5fpost5fallocate5fpd5ft">\r
+user-mode Verbs/uvp_post_allocate_pd_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>uvp_post_allocate_pd_t</strong> -- Post-ioctl function to allocate PD\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef void\r
+(AL_API *<strong>uvp_post_allocate_pd_t</strong>) (\r
+ IN ib_ca_handle_t h_uvp_ca,\r
+ IN <a href="../../iba/ib_types_h.html#robo49">ib_api_status_t</a> ioctl_status,\r
+ OUT ib_pd_handle_t *ph_uvp_pd,\r
+ IN <a href="../../iba/ib_ci_h.html#robo1153">ci_umv_buf_t</a> *p_umv_buf );\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> <strong>uvp_post_allocate_pd_t</strong>() is implemented by vendor. It is the post-ioctl\r
+ routine for the AL call <a href="../../iba/ib_al_h.html#robo48">ib_alloc_pd</a>().\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_uvp_ca\r
+ [in] Vendor's user-mode library CA handle.\r
+ ioctl_status\r
+ [in] The ioctl status of the AL API.\r
+ ph_uvp_pd\r
+ [out] The vendor library handle to the newly created protection domain.\r
+ p_umv_buf\r
+ [in] This contains any vendor-specific private information\r
+ exchanged with the vendor's <a href="../../iba/ib_ci_h.html#robo39">Verbs</a> Provider Driver (<a href="#robo1083">uvp_pre_allocate_pd</a>).\r
+ Vendor is expected to check vendor-specific status in\r
+ umv_buf as appropriate.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> This function does not return a value.\r
+</pre>\r
+</span><p><strong>PORTABILITY</strong></p>\r
+<span class="PORTABILITY"><pre> User Mode\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo1083">uvp_pre_allocate_pd</a>, <a href="#robo1091">uvp_pre_deallocate_pd</a>, <a href="#robo1065">uvp_post_deallocate_pd_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1058">[Functions]<a name="user2dmode20Verbs2fuvp5fpost5fattach5fmcast5ft">\r
+user-mode Verbs/uvp_post_attach_mcast_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>uvp_post_attach_mcast_t</strong> -- Post-ioctl function to Attach a queue pair\r
+ to a multicast group\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef void\r
+(AL_API *<strong>uvp_post_attach_mcast_t</strong>) (\r
+ IN const ib_qp_handle_t h_uvp_qp,\r
+ IN <a href="../../iba/ib_types_h.html#robo49">ib_api_status_t</a> ioctl_status,\r
+ OUT ib_mcast_handle_t *ph_mcast,\r
+ IN <a href="../../iba/ib_ci_h.html#robo1153">ci_umv_buf_t</a> *p_umv_buf );\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> <strong>uvp_post_attach_mcast_t</strong>() is the post-ioctl routine implemented by vendor\r
+ to attach a queue pair to a multicast group.\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_uvp_qp\r
+ [in] Vendor's Queue pair handle (in user-mode library)\r
+ which needs to be added to\r
+ the multicast group on the adapter.\r
+ ioctl_status\r
+ [in] The ioctl status of the AL API.\r
+ ph_mcast\r
+ [out] Vendor's Multicast handle (in user-mode library)\r
+ holding the association of this queue pair to the multicast group.\r
+ p_umv_buf\r
+ [in out] On input, it contains any vendor-specific private information\r
+ exchanged with the vendor's <a href="../../iba/ib_ci_h.html#robo39">Verbs</a> Provider Driver (<a href="#robo1084">uvp_pre_attach_mcast</a>)\r
+ Vendor is expected to check vendor-specific status in\r
+ umv_buf as appropriate.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> This function does not return a value.\r
+</pre>\r
+</span><p><strong>PORTABILITY</strong></p>\r
+<span class="PORTABILITY"><pre> Kernel & User mode.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo1090">uvp_pre_create_qp</a>, <a href="#robo1064">uvp_post_create_qp_t</a>, <a href="#robo1084">uvp_pre_attach_mcast</a>,\r
+ <a href="#robo1096">uvp_pre_detach_mcast</a>, <a href="#robo1070">uvp_post_detach_mcast_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1059">[Functions]<a name="user2dmode20Verbs2fuvp5fpost5fci5fcall">\r
+user-mode Verbs/uvp_post_ci_call</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>uvp_post_ci_call</strong> -- Post-ioctl function to <a href="../../iba/ib_al_h.html#robo65">ib_ci_call</a>\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef void\r
+(AL_API *<strong>uvp_post_ci_call</strong>) (\r
+ IN const ib_ca_handle_t h_uvp_ca,\r
+ IN <a href="../../iba/ib_types_h.html#robo49">ib_api_status_t</a> ioctl_status,\r
+ IN const void* __ptr64 * const handle_array OPTIONAL,\r
+ IN uint32_t num_handles,\r
+ IN <a href="../../iba/ib_types_h.html#robo66">ib_ci_op_t</a>* const p_ci_op,\r
+ IN OUT <a href="../../iba/ib_ci_h.html#robo1153">ci_umv_buf_t</a> *p_umv_buf);\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> <strong>uvp_post_ci_call</strong>() is implemented by vendor. It is the pre-ioctl\r
+ routine for <a href="../../iba/ib_al_h.html#robo65">ib_ci_call</a>().\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_uvp_ca\r
+ [in] Vendor's user-mode library handle to the CA\r
+ ioctl_status\r
+ [in] The ioctl status of the AL API.\r
+ handle_array\r
+ [in] An array of uvp handles. For valid types, refer to <a href="../../iba/ib_ci_h.html#robo_top_of_doc">ib_ci.h</a> or\r
+ <a href="../../iba/ib_al_h.html#robo_top_of_doc">ib_al.h</a>. This is an optional parameter.\r
+ num_handles\r
+ [in] The number of handles in the array.\r
+ p_ci_op\r
+ [in] The operation that is requested by the client. For more info,\r
+ refer <a href="../../iba/ib_types_h.html#robo_top_of_doc">ib_types.h</a>\r
+ p_umv_buf\r
+ [in out] On input, UAL provides this buffer template.\r
+ On return from this function, p_umv_buf contains\r
+ any vendor-specific record to be exchanged with the vendor's\r
+ HCA driver.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> This function does not return a value.\r
+</pre>\r
+</span><p><strong>PORTABILITY</strong></p>\r
+<span class="PORTABILITY"><pre> User Mode\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo1085">uvp_pre_ci_call</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1060">[Functions]<a name="user2dmode20Verbs2fuvp5fpost5fclose5fca5ft">\r
+user-mode Verbs/uvp_post_close_ca_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>uvp_post_close_ca_t</strong> -- Post-ioctl operation for user-mode <a href="../../iba/ib_al_h.html#robo68">ib_close_ca</a>().\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef <a href="../../iba/ib_types_h.html#robo49">ib_api_status_t</a>\r
+(AL_API *<strong>uvp_post_close_ca_t</strong>) (\r
+ IN ib_ca_handle_t h_uvp_ca,\r
+ IN <a href="../../iba/ib_types_h.html#robo49">ib_api_status_t</a> ioctl_status );\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> <strong>uvp_post_close_ca_t</strong>() is implemented by vendor. It is the post-ioctl routine\r
+ for the AL call <a href="../../iba/ib_al_h.html#robo68">ib_close_ca</a>().\r
+ UAL calls this function in the context of the asynchronous callback\r
+ from AL notifying the successful destruction of CA.\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_uvp_ca\r
+ [in] Vendor's user-mode library handle to the open instance of the CA\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> IB_SUCCESS\r
+ The post-ioctl for <a href="../../iba/ib_al_h.html#robo68">ib_close_ca</a>() successfully completed.\r
+</pre>\r
+</span><p><strong>PORTABILITY</strong></p>\r
+<span class="PORTABILITY"><pre> User Mode\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo1100">uvp_pre_open_ca_t</a>, <a href="#robo1074">uvp_post_open_ca_t</a>, <a href="#robo1102">uvp_pre_query_ca</a>, <a href="#robo1076">uvp_post_query_ca_t</a>,\r
+ <a href="#robo1098">uvp_pre_modify_ca</a>, <a href="#robo1072">uvp_post_modify_ca_t</a>, <a href="#robo1086">uvp_pre_close_ca_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1061">[Functions]<a name="user2dmode20Verbs2fuvp5fpost5fcreate5fav5ft">\r
+user-mode Verbs/uvp_post_create_av_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>uvp_post_create_av_t</strong> -- Post-ioctl function to create AV\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef void\r
+(AL_API *<strong>uvp_post_create_av_t</strong>) (\r
+ IN const ib_pd_handle_t h_uvp_pd,\r
+ IN <a href="../../iba/ib_types_h.html#robo49">ib_api_status_t</a> ioctl_status,\r
+ OUT ib_av_handle_t *ph_uvp_av,\r
+ IN <a href="../../iba/ib_ci_h.html#robo1153">ci_umv_buf_t</a> *p_umv_buf );\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> <strong>uvp_post_create_av_t</strong>() is implemented by vendor. It is the post-ioctl routine\r
+ for <a href="../../iba/ib_al_h.html#robo104">ib_create_av</a>().\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_uvp_pd\r
+ [in] Vendor's user-mode library handle to the Protection domain\r
+ to which this AV is associated\r
+ ioctl_status\r
+ [in] The ioctl status of the AL API.\r
+ ph_uvp_av\r
+ [out] Vendor's address vector handle.\r
+ p_umv_buf\r
+ [in] On input, it contains any vendor-specific private information\r
+ exchanged with the vendor's <a href="../../iba/ib_ci_h.html#robo39">Verbs</a> Provider Driver (<a href="#robo1087">uvp_pre_create_av</a>).\r
+ Vendor is expected to check vendor-specific status in\r
+ umv_buf as appropriate.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> This function does not return a value.\r
+</pre>\r
+</span><p><strong>PORTABILITY</strong></p>\r
+<span class="PORTABILITY"><pre> User Mode\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo1087">uvp_pre_create_av</a>, <a href="#robo1101">uvp_pre_query_av</a>, <a href="#robo1075">uvp_post_query_av_t</a>, <a href="#robo1097">uvp_pre_modify_av</a>,\r
+ <a href="#robo1071">uvp_post_modify_av_t</a>, <a href="#robo1092">uvp_pre_destroy_av</a>, <a href="#robo1066">uvp_post_destroy_av_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1062">[Functions]<a name="user2dmode20Verbs2fuvp5fpost5fcreate5fcq5ft">\r
+user-mode Verbs/uvp_post_create_cq_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>uvp_post_create_cq_t</strong> -- Post-ioctl function to Create a completion queue (CQ)\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef void\r
+(AL_API *<strong>uvp_post_create_cq_t</strong>) (\r
+ IN const ib_ca_handle_t h_uvp_ca,\r
+ IN <a href="../../iba/ib_types_h.html#robo49">ib_api_status_t</a> ioctl_status,\r
+ IN const uint32_t size,\r
+ OUT ib_cq_handle_t *ph_uvp_cq,\r
+ IN <a href="../../iba/ib_ci_h.html#robo1153">ci_umv_buf_t</a> *p_umv_buf );\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> <strong>uvp_post_create_cq_t</strong>() is implemented by vendor to create CQ.\r
+ It is the post-ioctl routine for <a href="../../iba/ib_al_h.html#robo105">ib_create_cq</a>().\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_uvp_pd\r
+ [in] Vendor's handle to an existing protection domain (in user-mode\r
+ library)\r
+ ioctl_status\r
+ [in] The ioctl status of the AL API.\r
+ size\r
+ [in] size of the CQ that was created by the provider.\r
+ If VPD created the CQ in kernel, this is the value as set by\r
+ VPD. If UVP creates the CQ in user-mode, then uvp already knows\r
+ the size of the CQ in the pre-ioctl.\r
+ ph_uvp_cq\r
+ [out] Vendor's Handle to the newly created CQ (in user-mode library).\r
+ p_umv_buf\r
+ [in out] On input, it contains any vendor-specific private information\r
+ exchanged with the vendor's <a href="../../iba/ib_ci_h.html#robo39">Verbs</a> Provider Driver (<a href="#robo1088">uvp_pre_create_cq</a>).\r
+ Vendor is expected to check vendor-specific status in\r
+ umv_buf as appropriate.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> This function does not return a value.\r
+</pre>\r
+</span><p><strong>PORTABILITY</strong></p>\r
+<span class="PORTABILITY"><pre> User mode.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo1088">uvp_pre_create_cq</a>, <a href="#robo1106">uvp_pre_resize_cq</a>, <a href="#robo1081">uvp_post_resize_cq_t</a>,\r
+ <a href="#robo1103">uvp_pre_query_cq</a>, <a href="#robo1077">uvp_post_query_cq_t</a>, <a href="#robo1093">uvp_pre_destroy_cq</a>,\r
+ <a href="#robo1067">uvp_post_destroy_cq_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1063">[Functions]<a name="user2dmode20Verbs2fuvp5fpost5fcreate5fmw5ft">\r
+user-mode Verbs/uvp_post_create_mw_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>uvp_post_create_mw_t</strong> -- Post-ioctl function to create a memory window\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef void\r
+(AL_API *<strong>uvp_post_create_mw_t</strong>) (\r
+ IN const ib_pd_handle_t h_uvp_pd,\r
+ IN <a href="../../iba/ib_types_h.html#robo49">ib_api_status_t</a> ioctl_status,\r
+ IN net32_t rkey,\r
+ OUT ib_mw_handle_t *ph_uvp_mw,\r
+ IN <a href="../../iba/ib_ci_h.html#robo1153">ci_umv_buf_t</a> *p_umv_buf );\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> <strong>uvp_post_create_mw_t</strong>() is implemented by vendor. It is the post-ioctl routine\r
+ for <a href="../../iba/ib_al_h.html#robo108">ib_create_mw</a>().\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_uvp_pd\r
+ [in] Vendor's Protection domain handle (in user-mode library)\r
+ to use for this memory window\r
+ ioctl_status\r
+ [in] The ioctl status of the AL API.\r
+ p_rkey\r
+ [in] Remote access key that can be exchanged with a remote node to\r
+ perform RDMA transactions on this memory window.\r
+ ph_uvp_mw\r
+ [out] Vendor's Handle (in user-mode library) to the newly created\r
+ memory window.\r
+ p_umv_buf\r
+ [in out] On input, it contains any vendor-specific private information\r
+ exchanged with the vendor's <a href="../../iba/ib_ci_h.html#robo39">Verbs</a> Provider Driver (<a href="#robo1089">uvp_pre_create_mw</a>).\r
+ Vendor is expected to check vendor-specific status in\r
+ umv_buf as appropriate.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> This function does not return an error.\r
+</pre>\r
+</span><p><strong>PORTABILITY</strong></p>\r
+<span class="PORTABILITY"><pre> User mode\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo1089">uvp_pre_create_mw</a>, <a href="#robo1104">uvp_pre_query_mw</a>, <a href="#robo1078">uvp_post_query_mw_t</a>,\r
+ <a href="#robo1052">uvp_bind_mw</a>, <a href="#robo1094">uvp_pre_destroy_mw</a>, <a href="#robo1068">uvp_post_destroy_mw_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1064">[Functions]<a name="user2dmode20Verbs2fuvp5fpost5fcreate5fqp5ft">\r
+user-mode Verbs/uvp_post_create_qp_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>uvp_post_create_qp_t</strong> -- Post-ioctl function to Create a Queue Pair.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef void\r
+(AL_API *<strong>uvp_post_create_qp_t</strong>) (\r
+ IN const ib_pd_handle_t h_uvp_pd,\r
+ IN <a href="../../iba/ib_types_h.html#robo49">ib_api_status_t</a> ioctl_status,\r
+ OUT ib_qp_handle_t *ph_uvp_qp,\r
+ IN <a href="../../iba/ib_ci_h.html#robo1153">ci_umv_buf_t</a> *p_umv_buf );\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> <strong>uvp_post_create_qp_t</strong>() is implemented by vendor. It is the post-ioctl routine\r
+ for <a href="../../iba/ib_al_h.html#robo109">ib_create_qp</a>().\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_uvp_pd\r
+ [in] Vendor's Protection domain handle in user-mode library.\r
+ ioctl_status\r
+ [in] The ioctl status of the AL API.\r
+ ph_uvp_qp\r
+ [out] Vendor's QP handle for the newly created QP (in user-mode\r
+ library).\r
+ p_umv_buf\r
+ [in out] On input, it contains any vendor-specific private information\r
+ exchanged with the vendor's <a href="../../iba/ib_ci_h.html#robo39">Verbs</a> Provider Driver (<a href="#robo1090">uvp_pre_create_qp</a>).\r
+ Vendor is expected to check vendor-specific status in\r
+ umv_buf as appropriate.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> This function does not return a value.\r
+</pre>\r
+</span><p><strong>PORTABILITY</strong></p>\r
+<span class="PORTABILITY"><pre> User Mode\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo1090">uvp_pre_create_qp</a>, <a href="#robo1105">uvp_pre_query_qp</a>, <a href="#robo1079">uvp_post_query_qp_t</a>, <a href="#robo1099">uvp_pre_modify_qp</a>,\r
+ <a href="#robo1073">uvp_post_modify_qp_t</a>, <a href="#robo1095">uvp_pre_destroy_qp</a>, <a href="#robo1069">uvp_post_destroy_qp_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1065">[Functions]<a name="user2dmode20Verbs2fuvp5fpost5fdeallocate5fpd5ft">\r
+user-mode Verbs/uvp_post_deallocate_pd_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>uvp_post_deallocate_pd_t</strong> -- Post-ioctl function to deallocate PD\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef void\r
+(AL_API *<strong>uvp_post_deallocate_pd_t</strong>) (\r
+ IN const ib_pd_handle_t h_uvp_pd,\r
+ IN <a href="../../iba/ib_types_h.html#robo49">ib_api_status_t</a> ioctl_status );\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> <strong>uvp_post_deallocate_pd_t</strong>() is implemented by the vendor. It is the\r
+ post-ioctl routine for the AL call <a href="../../iba/ib_al_h.html#robo110">ib_dealloc_pd</a>().\r
+\r
+ When all the resouces associated with a PD are destroyed,\r
+ UAL invokes this post-ioctl routine to deallocate PD. Since the\r
+ completion of the resource deallocation (e.g QP/CQ) is asynchronous,\r
+ this function is called from a UAL asynchronous callback\r
+ processing thread.\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_uvp_pd\r
+ [in] Vendor's user-mode library PD handle.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> This function does not return a value.\r
+</pre>\r
+</span><p><strong>PORTABILITY</strong></p>\r
+<span class="PORTABILITY"><pre> User Mode\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo1083">uvp_pre_allocate_pd</a>, <a href="#robo1057">uvp_post_allocate_pd_t</a>, <a href="#robo1091">uvp_pre_deallocate_pd</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1066">[Functions]<a name="user2dmode20Verbs2fuvp5fpost5fdestroy5fav5ft">\r
+user-mode Verbs/uvp_post_destroy_av_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>uvp_post_destroy_av_t</strong> -- Post-ioctl function to destroy AV\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef void\r
+(AL_API *<strong>uvp_post_destroy_av_t</strong>) (\r
+ IN const ib_av_handle_t h_uvp_av,\r
+ IN <a href="../../iba/ib_types_h.html#robo49">ib_api_status_t</a> ioctl_status );\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> <strong>uvp_post_destroy_av_t</strong>() is implemented by vendor. It is the post-ioctl\r
+ routine for <a href="../../iba/ib_al_h.html#robo115">ib_destroy_av</a>().\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_uvp_av\r
+ [in] Vendor's AV handle in user-mode library.\r
+ p_umv_buf\r
+ [in out]\r
+ On input, it contains any vendor-specific private information\r
+ exchanged with the vendor's <a href="../../iba/ib_ci_h.html#robo39">Verbs</a> Provider Driver (<a href="#robo1092">uvp_pre_destroy_av</a>).\r
+ Vendor is expected to check vendor-specific status in\r
+ umv_buf as appropriate.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> This function does not return a value.\r
+</pre>\r
+</span><p><strong>PORTABILITY</strong></p>\r
+<span class="PORTABILITY"><pre> User Mode\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo1087">uvp_pre_create_av</a>, <a href="#robo1061">uvp_post_create_av_t</a>, <a href="#robo1101">uvp_pre_query_av</a>, <a href="#robo1075">uvp_post_query_av_t</a>,\r
+ <a href="#robo1097">uvp_pre_modify_av</a>, <a href="#robo1071">uvp_post_modify_av_t</a>, <a href="#robo1092">uvp_pre_destroy_av</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1067">[Functions]<a name="user2dmode20Verbs2fuvp5fpost5fdestroy5fcq5ft">\r
+user-mode Verbs/uvp_post_destroy_cq_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>uvp_post_destroy_cq_t</strong> -- Post-ioctl function to Destroy a CQ.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef void\r
+(AL_API *<strong>uvp_post_destroy_cq_t</strong>) (\r
+ IN const ib_cq_handle_t h_uvp_cq,\r
+ IN <a href="../../iba/ib_types_h.html#robo49">ib_api_status_t</a> ioctl_status );\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> <strong>uvp_post_destroy_cq_t</strong>() is implemented by vendor to destroy CQ.\r
+ It is the post-ioctl routine for <a href="../../iba/ib_al_h.html#robo116">ib_destroy_cq</a>().\r
+ UAL invokes this post-ioctl routine to destroy CQ when it receives\r
+ asynchronous notification from the user-mode proxy.\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_uvp_cq\r
+ [in] Vendor's Handle to the cq (in user-mode library)\r
+ that needs to be destroyed.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> This function does not return a value.\r
+</pre>\r
+</span><p><strong>PORTABILITY</strong></p>\r
+<span class="PORTABILITY"><pre> User mode.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo1088">uvp_pre_create_cq</a>, <a href="#robo1062">uvp_post_create_cq_t</a>, <a href="#robo1106">uvp_pre_resize_cq</a>,\r
+ <a href="#robo1081">uvp_post_resize_cq_t</a>, <a href="#robo1103">uvp_pre_query_cq</a>, <a href="#robo1077">uvp_post_query_cq_t</a>,\r
+ <a href="#robo1093">uvp_pre_destroy_cq</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1068">[Functions]<a name="user2dmode20Verbs2fuvp5fpost5fdestroy5fmw5ft">\r
+user-mode Verbs/uvp_post_destroy_mw_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>uvp_post_destroy_mw_t</strong> -- Post-ioctl function to destroy a memory window\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef void\r
+(AL_API *<strong>uvp_post_destroy_mw_t</strong>) (\r
+ IN const ib_mw_handle_t h_uvp_mw,\r
+ IN <a href="../../iba/ib_types_h.html#robo49">ib_api_status_t</a> ioctl_status );\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> <strong>uvp_post_destroy_mw_t</strong>() is implemented by vendor. It is the post-ioctl\r
+ routine to destroy a memory window.\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_uvp_mw\r
+ [in] Vendor's handle to the memory window\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> IB_SUCCESS\r
+ Destroy operation successful.\r
+</pre>\r
+</span><p><strong>PORTABILITY</strong></p>\r
+<span class="PORTABILITY"><pre> User mode\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo1089">uvp_pre_create_mw</a>, <a href="#robo1063">uvp_post_create_mw_t</a>, <a href="#robo1104">uvp_pre_query_mw</a>,\r
+ <a href="#robo1078">uvp_post_query_mw_t</a>, <a href="#robo1052">uvp_bind_mw</a>, <a href="#robo1094">uvp_pre_destroy_mw</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1069">[Functions]<a name="user2dmode20Verbs2fuvp5fpost5fdestroy5fqp5ft">\r
+user-mode Verbs/uvp_post_destroy_qp_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>uvp_post_destroy_qp_t</strong> -- Post-ioctl function to Destroy a Queue Pair.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef void\r
+(AL_API *<strong>uvp_post_destroy_qp_t</strong>) (\r
+ IN const ib_qp_handle_t h_uvp_qp,\r
+ IN <a href="../../iba/ib_types_h.html#robo49">ib_api_status_t</a> ioctl_status );\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> <strong>uvp_post_destroy_qp_t</strong>() is implemented by vendor. It is the post-ioctl\r
+ routine for <a href="../../iba/ib_al_h.html#robo120">ib_destroy_qp</a>().\r
+ UAL invokes this post-ioctl routine to destroy QP when it receives\r
+ asynchronous notification from the user-mode proxy in kernel.\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_uvp_qp\r
+ [in] Vendor's Handle to the qp (in user-mode library)\r
+ that needs to be destroyed.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> IB_SUCCESS\r
+ The post-ioctl call is successful.\r
+</pre>\r
+</span><p><strong>PORTABILITY</strong></p>\r
+<span class="PORTABILITY"><pre> User mode.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo1090">uvp_pre_create_qp</a>, <a href="#robo1064">uvp_post_create_qp_t</a>, <a href="#robo1105">uvp_pre_query_qp</a>, <a href="#robo1079">uvp_post_query_qp_t</a>,\r
+ <a href="#robo1099">uvp_pre_modify_qp</a>, <a href="#robo1073">uvp_post_modify_qp_t</a>, <a href="#robo1095">uvp_pre_destroy_qp</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1070">[Functions]<a name="user2dmode20Verbs2fuvp5fpost5fdetach5fmcast5ft">\r
+user-mode Verbs/uvp_post_detach_mcast_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>uvp_post_detach_mcast_t</strong> -- Post-ioctl function to detach a queue pair\r
+ from a multicast group\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef void\r
+(AL_API *<strong>uvp_post_detach_mcast_t</strong>) (\r
+ IN ib_mcast_handle_t h_uvp_mcast,\r
+ IN <a href="../../iba/ib_types_h.html#robo49">ib_api_status_t</a> ioctl_status );\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> <strong>uvp_post_detach_mcast_t</strong>() is the post-ioctl routine implemented by vendor\r
+ to attach a queue pair to a multicast group.\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_uvp_mcast\r
+ [out] Vendor's Multicast handle holding the association of this\r
+ queue pair to the multicast group.\r
+ ioctl_status\r
+ [in] The ioctl status of the AL API.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> This function does not return a value.\r
+</pre>\r
+</span><p><strong>PORTABILITY</strong></p>\r
+<span class="PORTABILITY"><pre> Kernel & User mode.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo1090">uvp_pre_create_qp</a>, <a href="#robo1064">uvp_post_create_qp_t</a>, <a href="#robo1084">uvp_pre_attach_mcast</a>,\r
+ <a href="#robo1058">uvp_post_attach_mcast_t</a>, <a href="#robo1096">uvp_pre_detach_mcast</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1071">[Functions]<a name="user2dmode20Verbs2fuvp5fpost5fmodify5fav5ft">\r
+user-mode Verbs/uvp_post_modify_av_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>uvp_post_modify_av_t</strong> -- Post-ioctl function to modify AV\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef void\r
+(AL_API *<strong>uvp_post_modify_av_t</strong>) (\r
+ IN const ib_av_handle_t h_uvp_av,\r
+ IN <a href="../../iba/ib_types_h.html#robo49">ib_api_status_t</a> ioctl_status,\r
+ IN <a href="../../iba/ib_ci_h.html#robo1153">ci_umv_buf_t</a> *p_umv_buf );\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> <strong>uvp_post_modify_av_t</strong>() is implemented by vendor to modify the attributes\r
+ of AV. It is the post-ioctl routine for <a href="../../iba/ib_al_h.html#robo155">ib_modify_av</a>().\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_uvp_av\r
+ [in] Vendor's av handle in user-mode library.\r
+ ioctl_status\r
+ [in] The ioctl status of the AL API.\r
+ p_umv_buf\r
+ [in out] On input, it contains any vendor-specific private information\r
+ exchanged with the vendor's <a href="../../iba/ib_ci_h.html#robo39">Verbs</a> Provider Driver (<a href="#robo1097">uvp_pre_modify_av</a>).\r
+ Vendor is expected to check vendor-specific status in\r
+ umv_buf as appropriate.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> This function does not return a value.\r
+</pre>\r
+</span><p><strong>PORTABILITY</strong></p>\r
+<span class="PORTABILITY"><pre> User Mode\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo1087">uvp_pre_create_av</a>, <a href="#robo1061">uvp_post_create_av_t</a>, <a href="#robo1101">uvp_pre_query_av</a>, <a href="#robo1075">uvp_post_query_av_t</a>,\r
+ <a href="#robo1097">uvp_pre_modify_av</a>, <a href="#robo1092">uvp_pre_destroy_av</a>, <a href="#robo1066">uvp_post_destroy_av_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1072">[Functions]<a name="user2dmode20Verbs2fuvp5fpost5fmodify5fca5ft">\r
+user-mode Verbs/uvp_post_modify_ca_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>uvp_post_modify_ca_t</strong> -- Post-ioctl operation for user-mode <a href="../../iba/ib_al_h.html#robo156">ib_modify_ca</a>()\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef void\r
+(AL_API *<strong>uvp_post_modify_ca_t</strong>) (\r
+ IN ib_ca_handle_t h_uvp_ca,\r
+ IN <a href="../../iba/ib_types_h.html#robo49">ib_api_status_t</a> ioctl_status );\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> <strong>uvp_post_modify_ca_t</strong>() is implemented by vendor. It is the post-ioctl routine\r
+ for the AL call <a href="../../iba/ib_al_h.html#robo156">ib_modify_ca</a>() in user-mode.\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_uvp_ca\r
+ [in] Vendor's user-mode library handle to the open instance of the CA\r
+ ioctl_status\r
+ [in] The ioctl status of the AL API.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> This function does not return a value.\r
+</pre>\r
+</span><p><strong>PORTABILITY</strong></p>\r
+<span class="PORTABILITY"><pre> User Mode\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo1100">uvp_pre_open_ca_t</a>, <a href="#robo1074">uvp_post_open_ca_t</a>, <a href="#robo1102">uvp_pre_query_ca</a>, <a href="#robo1076">uvp_post_query_ca_t</a>,\r
+ <a href="#robo1098">uvp_pre_modify_ca</a>, <a href="#robo1086">uvp_pre_close_ca_t</a>, <a href="#robo1060">uvp_post_close_ca_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1073">[Functions]<a name="user2dmode20Verbs2fuvp5fpost5fmodify5fqp5ft">\r
+user-mode Verbs/uvp_post_modify_qp_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>uvp_post_modify_qp_t</strong> -- Post-ioctl function to Modify attributes of\r
+ the specified QP.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef void\r
+(AL_API *<strong>uvp_post_modify_qp_t</strong>) (\r
+ IN const ib_qp_handle_t h_uvp_qp,\r
+ IN <a href="../../iba/ib_types_h.html#robo49">ib_api_status_t</a> ioctl_status,\r
+ IN <a href="../../iba/ib_ci_h.html#robo1153">ci_umv_buf_t</a> *p_umv_buf );\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> <strong>uvp_post_modify_qp_t</strong>() is implemented by vendor to modify the qp attributes.\r
+ It is the post-ioctl routine for <a href="../../iba/ib_al_h.html#robo158">ib_modify_qp</a>().\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_uvp_qp\r
+ [in] Vendor's qp Handle to the queue pair (in user-mode library)\r
+ whose state is modified.\r
+ ioctl_status\r
+ [in] The ioctl status of the AL API.\r
+ p_umv_buf\r
+ [in out] On input, it contains any vendor-specific private information\r
+ exchanged with the vendor's <a href="../../iba/ib_ci_h.html#robo39">Verbs</a> Provider Driver (<a href="#robo1099">uvp_pre_modify_qp</a>).\r
+ Vendor is expected to check vendor-specific status in\r
+ umv_buf as appropriate.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> This function does not return a value.\r
+</pre>\r
+</span><p><strong>PORTABILITY</strong></p>\r
+<span class="PORTABILITY"><pre> User mode\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo1090">uvp_pre_create_qp</a>, <a href="#robo1064">uvp_post_create_qp_t</a>, <a href="#robo1105">uvp_pre_query_qp</a>, <a href="#robo1079">uvp_post_query_qp_t</a>,\r
+ <a href="#robo1099">uvp_pre_modify_qp</a>, <a href="#robo1095">uvp_pre_destroy_qp</a>, <a href="#robo1069">uvp_post_destroy_qp_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1074">[Functions]<a name="user2dmode20Verbs2fuvp5fpost5fopen5fca5ft">\r
+user-mode Verbs/uvp_post_open_ca_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>uvp_post_open_ca_t</strong> -- Post-ioctl operation for user-mode <a href="../../iba/ib_al_h.html#robo164">ib_open_ca</a>()\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef <a href="../../iba/ib_types_h.html#robo49">ib_api_status_t</a>\r
+(AL_API *<strong>uvp_post_open_ca_t</strong>) (\r
+ IN const <a href="../../iba/ib_types_h.html#robo895">ib_net64_t</a> ca_guid,\r
+ IN <a href="../../iba/ib_types_h.html#robo49">ib_api_status_t</a> ioctl_status,\r
+ OUT ib_ca_handle_t *ph_uvp_ca,\r
+ IN <a href="../../iba/ib_ci_h.html#robo1153">ci_umv_buf_t</a> *p_umv_buf );\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> <strong>uvp_post_open_ca_t</strong>() is implemented by vendor. It is the post-ioctl routine\r
+ for the AL call <a href="../../iba/ib_al_h.html#robo164">ib_open_ca</a>() in user-mode.\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> ca_guid\r
+ [in] The HCA adapter's EUI64 identifier.\r
+ ioctl_status\r
+ [in] The ioctl status of the AL API.\r
+ ph_uvp_ca\r
+ [out] Pointer to vendor's handle to the newly opened instance of\r
+ the CA.\r
+ p_umv_buf\r
+ [in] This contains any vendor-specific private information\r
+ exchanged with the vendor's <a href="../../iba/ib_ci_h.html#robo39">Verbs</a> Provider Driver (uvp_pre_open_ca).\r
+ Vendor is expected to check vendor-specific status in\r
+ umv_buf as appropriate.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> IB_SUCCESS\r
+ The HCA is return handle is valid.\r
+ IB_INSUFFICIENT_RESOURCES\r
+ Insufficient resources to satisfy request.\r
+</pre>\r
+</span><p><strong>PORTABILITY</strong></p>\r
+<span class="PORTABILITY"><pre> User Mode\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo1100">uvp_pre_open_ca_t</a>, <a href="#robo1102">uvp_pre_query_ca</a>, <a href="#robo1076">uvp_post_query_ca_t</a>, <a href="#robo1098">uvp_pre_modify_ca</a>,\r
+ <a href="#robo1072">uvp_post_modify_ca_t</a>, <a href="#robo1086">uvp_pre_close_ca_t</a>, <a href="#robo1060">uvp_post_close_ca_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1075">[Functions]<a name="user2dmode20Verbs2fuvp5fpost5fquery5fav5ft">\r
+user-mode Verbs/uvp_post_query_av_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> Vendor-specific post-ioctl operation for user-mode <a href="../../iba/ib_al_h.html#robo213">ib_query_ca</a>()\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef void\r
+(AL_API *<strong>uvp_post_query_av_t</strong>) (\r
+ IN const ib_av_handle_t h_uvp_av,\r
+ IN <a href="../../iba/ib_types_h.html#robo49">ib_api_status_t</a> ioctl_status,\r
+ IN OUT <a href="../../iba/ib_types_h.html#robo57">ib_av_attr_t</a> *p_addr_vector,\r
+ IN OUT ib_pd_handle_t *ph_pd,\r
+ IN <a href="../../iba/ib_ci_h.html#robo1153">ci_umv_buf_t</a> *p_umv_buf );\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> <strong>uvp_post_query_av_t</strong>() is implemented by vendor. It is the post-ioctl routine\r
+ for the AL call <a href="../../iba/ib_al_h.html#robo212">ib_query_av</a>() in user-mode.\r
+ UAL provides the results of the query to the vendor library in this\r
+ post-ioctl routine.\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_uvp_av\r
+ [in] Vendor's handle to the address vector in user-mode library\r
+ ioctl_status\r
+ [in] The ioctl status of the AL API.\r
+ p_addr_vector\r
+ [in out] AV attribute (as returned by the ioctl).\r
+ ph_pd\r
+ [out] The vendor library PD handle associated with this AV.\r
+ p_umv_buf\r
+ [in]\r
+ On input, it contains any vendor-specific private information\r
+ exchanged with the vendor's <a href="../../iba/ib_ci_h.html#robo39">Verbs</a> Provider Driver (<a href="#robo1101">uvp_pre_query_av</a>).\r
+ Vendor is expected to check vendor-specific status in\r
+ umv_buf as appropriate.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> This function does not return a value.\r
+</pre>\r
+</span><p><strong>PORTABILITY</strong></p>\r
+<span class="PORTABILITY"><pre> User Mode\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo1087">uvp_pre_create_av</a>, <a href="#robo1061">uvp_post_create_av_t</a>, <a href="#robo1101">uvp_pre_query_av</a>, <a href="#robo1097">uvp_pre_modify_av</a>,\r
+ <a href="#robo1071">uvp_post_modify_av_t</a>, <a href="#robo1092">uvp_pre_destroy_av</a>, <a href="#robo1066">uvp_post_destroy_av_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1076">[Functions]<a name="user2dmode20Verbs2fuvp5fpost5fquery5fca5ft">\r
+user-mode Verbs/uvp_post_query_ca_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>uvp_post_query_ca_t</strong> -- Post-ioctl operation for user-mode <a href="../../iba/ib_al_h.html#robo213">ib_query_ca</a>()\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef void\r
+(AL_API *<strong>uvp_post_query_ca_t</strong>) (\r
+ IN ib_ca_handle_t h_uvp_ca,\r
+ IN <a href="../../iba/ib_types_h.html#robo49">ib_api_status_t</a> ioctl_status,\r
+ IN <a href="../../iba/ib_types_h.html#robo60">ib_ca_attr_t</a> *p_ca_attr,\r
+ IN size_t byte_count,\r
+ IN <a href="../../iba/ib_ci_h.html#robo1153">ci_umv_buf_t</a> *p_umv_buf );\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> <strong>uvp_post_query_ca_t</strong>() is implemented by vendor. It is the post-ioctl routine\r
+ for the AL call <a href="../../iba/ib_al_h.html#robo213">ib_query_ca</a>() in user-mode. UAL provides the results\r
+ of querying the CA attributes to the vendor's post-ioctl routine.\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_uvp_ca\r
+ [in] Vendor's user-mode library handle to the open instance of the CA\r
+ ioctl_status\r
+ [in] The ioctl status of the AL API.\r
+ p_ca_attr\r
+ [in] CA attribute of this Host Channel adapter (as returned by\r
+ from ioctl to kernel AL).\r
+ byte_count\r
+ [in] Number of bytes in ca_attr buffer.\r
+ p_umv_buf\r
+ [in ] This contains any vendor-specific private information\r
+ exchanged with the vendor's <a href="../../iba/ib_ci_h.html#robo39">Verbs</a> Provider Driver (<a href="#robo1102">uvp_pre_query_ca</a>).\r
+ Vendor is expected to check vendor-specific status in\r
+ umv_buf as appropriate.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> This function does not return a value.\r
+</pre>\r
+</span><p><strong>PORTABILITY</strong></p>\r
+<span class="PORTABILITY"><pre> User Mode\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo1100">uvp_pre_open_ca_t</a>, <a href="#robo1074">uvp_post_open_ca_t</a>, <a href="#robo1102">uvp_pre_query_ca</a>, <a href="#robo1098">uvp_pre_modify_ca</a>,\r
+ <a href="#robo1072">uvp_post_modify_ca_t</a>, <a href="#robo1086">uvp_pre_close_ca_t</a>, <a href="#robo1060">uvp_post_close_ca_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1077">[Functions]<a name="user2dmode20Verbs2fuvp5fpost5fquery5fcq5ft">\r
+user-mode Verbs/uvp_post_query_cq_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>uvp_post_query_cq_t</strong> -- Post-ioctl to Query the number of entries\r
+ configured for the CQ.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef void\r
+(AL_API *<strong>uvp_post_query_cq_t</strong>) (\r
+ IN const ib_cq_handle_t h_uvp_cq,\r
+ IN <a href="../../iba/ib_types_h.html#robo49">ib_api_status_t</a> ioctl_status,\r
+ IN const uint32_t size,\r
+ IN <a href="../../iba/ib_ci_h.html#robo1153">ci_umv_buf_t</a> *p_umv_buf );\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> <strong>uvp_post_query_cq_t</strong>() is implemented by vendor to query CQ.\r
+ It is the post-ioctl routine for <a href="../../iba/ib_al_h.html#robo215">ib_query_cq</a>().\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_uvp_cq\r
+ [in] Vendor's Handle to the already created CQ (in user-mode library).\r
+ ioctl_status\r
+ [in] The ioctl status of the AL API.\r
+ size\r
+ [in] The size of the CQ retuned by the IOCTL.\r
+ p_umv_buf\r
+ [in out] On input, it contains any vendor-specific private information\r
+ exchanged with the vendor's <a href="../../iba/ib_ci_h.html#robo39">Verbs</a> Provider Driver (<a href="#robo1103">uvp_pre_query_cq</a>).\r
+ Vendor is expected to check vendor-specific status in\r
+ umv_buf as appropriate.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> This function does not return a value.\r
+</pre>\r
+</span><p><strong>PORTABILITY</strong></p>\r
+<span class="PORTABILITY"><pre> User mode.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo1088">uvp_pre_create_cq</a>, <a href="#robo1062">uvp_post_create_cq_t</a>, <a href="#robo1106">uvp_pre_resize_cq</a>,\r
+ <a href="#robo1081">uvp_post_resize_cq_t</a>, <a href="#robo1103">uvp_pre_query_cq</a>, <a href="#robo1093">uvp_pre_destroy_cq</a>,\r
+ <a href="#robo1067">uvp_post_destroy_cq_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1078">[Functions]<a name="user2dmode20Verbs2fuvp5fpost5fquery5fmw5ft">\r
+user-mode Verbs/uvp_post_query_mw_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>uvp_post_query_mw_t</strong> -- Post-ioctl to Query a memory window\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef void\r
+(AL_API *<strong>uvp_post_query_mw_t</strong>) (\r
+ IN const ib_mw_handle_t h_uvp_mw,\r
+ IN <a href="../../iba/ib_types_h.html#robo49">ib_api_status_t</a> ioctl_status,\r
+ IN net32_t rkey,\r
+ OUT ib_pd_handle_t *ph_pd,\r
+ IN <a href="../../iba/ib_ci_h.html#robo1153">ci_umv_buf_t</a> *p_umv_buf );\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> <strong>uvp_post_query_mw_t</strong> is implemented by vendor. It is the post-ioctl routine\r
+ for <a href="../../iba/ib_al_h.html#robo217">ib_query_mw</a>().\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_uvp_mw\r
+ [in] Vendor's Memory window handle (in user-mode library)\r
+ whose attributes are being retrieved.\r
+ ioctl_status\r
+ [in] The ioctl status of the AL API.\r
+ rkey\r
+ [in] Current R_KEY associated with this mw_handle\r
+ ph_pd\r
+ [in] Protection domain handle associated with this mw_handle\r
+ p_umv_buf\r
+ [in out] On input, it contains any vendor-specific private information\r
+ exchanged with the vendor's <a href="../../iba/ib_ci_h.html#robo39">Verbs</a> Provider Driver (<a href="#robo1104">uvp_pre_query_mw</a>).\r
+ Vendor is expected to check vendor-specific status in\r
+ umv_buf as appropriate.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> IB_SUCCESS\r
+ The query operation completed successfully.\r
+</pre>\r
+</span><p><strong>PORTABILITY</strong></p>\r
+<span class="PORTABILITY"><pre> User mode\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo1089">uvp_pre_create_mw</a>, <a href="#robo1063">uvp_post_create_mw_t</a>, <a href="#robo1104">uvp_pre_query_mw</a>,\r
+ <a href="#robo1052">uvp_bind_mw</a>, <a href="#robo1094">uvp_pre_destroy_mw</a>, <a href="#robo1068">uvp_post_destroy_mw_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1079">[Functions]<a name="user2dmode20Verbs2fuvp5fpost5fquery5fqp5ft">\r
+user-mode Verbs/uvp_post_query_qp_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>uvp_post_query_qp_t</strong> -- Post-ioctl operation for user-mode <a href="../../iba/ib_al_h.html#robo218">ib_query_qp</a>()\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef void\r
+(AL_API *<strong>uvp_post_query_qp_t</strong>) (\r
+ IN ib_qp_handle_t h_uvp_qp,\r
+ IN <a href="../../iba/ib_types_h.html#robo49">ib_api_status_t</a> ioctl_status,\r
+ IN <a href="../../iba/ib_types_h.html#robo205">ib_qp_attr_t</a> *p_query_attr,\r
+ IN <a href="../../iba/ib_ci_h.html#robo1153">ci_umv_buf_t</a> *p_umv_buf );\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> <strong>uvp_post_query_qp_t</strong>() is implemented by vendor. It is the post-ioctl routine\r
+ for <a href="../../iba/ib_al_h.html#robo218">ib_query_qp</a>().\r
+ UAL provides the results of the query to the vendor library in this\r
+ post-ioctl routine.\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_uvp_qp\r
+ [in] Vendor's handle to the QP (in user-mode library).\r
+ ioctl_status\r
+ [in] The ioctl status of the AL API.\r
+ p_query_attr\r
+ [in] QP attribute as returned by the ioctl.\r
+ p_umv_buf\r
+ [in out] On input, it contains any vendor-specific private information\r
+ exchanged with the vendor's <a href="../../iba/ib_ci_h.html#robo39">Verbs</a> Provider Driver (<a href="#robo1105">uvp_pre_query_qp</a>).\r
+ Vendor is expected to check vendor-specific status in\r
+ umv_buf as appropriate.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> This function does not return a value.\r
+</pre>\r
+</span><p><strong>PORTABILITY</strong></p>\r
+<span class="PORTABILITY"><pre> User Mode\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo1090">uvp_pre_create_qp</a>, <a href="#robo1064">uvp_post_create_qp_t</a>, <a href="#robo1105">uvp_pre_query_qp</a>, <a href="#robo1099">uvp_pre_modify_qp</a>,\r
+ <a href="#robo1073">uvp_post_modify_qp_t</a>, <a href="#robo1095">uvp_pre_destroy_qp</a>, <a href="#robo1069">uvp_post_destroy_qp_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1080">[Functions]<a name="user2dmode20Verbs2fuvp5fpost5frecv">\r
+user-mode Verbs/uvp_post_recv</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>uvp_post_recv</strong> -- Post a work request to the receive queue of a queue pair.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef <a href="../../iba/ib_types_h.html#robo49">ib_api_status_t</a>\r
+(AL_API *<strong>uvp_post_recv</strong>) (\r
+ IN const void* __ptr64 h_qp,\r
+ IN <a href="../../iba/ib_types_h.html#robo225">ib_recv_wr_t</a>* const p_recv_wr,\r
+ OUT <a href="../../iba/ib_types_h.html#robo225">ib_recv_wr_t</a>** pp_recv_failure );\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> This routine allows to queue a work request to the receive side of a\r
+ queue pair. The work_req holds necessary data to satisfy an incoming\r
+ receive message. If an attempt is made to queue more work requests than\r
+ what is available, an error is returned.\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_qp\r
+ [in] Type-cast as appropriate for user/kernel mode, this is\r
+ the Queue pair handle to which the receive work request is being\r
+ posted.\r
+ p_recv_wr\r
+ [in] <a href="../../complib/cl_list_h.html#robo15">List</a> of recv work requests that needs to be posted.\r
+ pp_recv_failure\r
+ [out] The work requests that failed.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> Any unsuccessful status indicates the status of the first failed request.\r
+\r
+ IB_SUCCESS\r
+ The work request was successfully queued to the receive side of the QP.\r
+ IB_INVALID_QP_HANDLE\r
+ qp_handle supplied is not valid.\r
+ IB_INSUFFICIENT_RESOURCES\r
+ The qp has exceeded its receive queue depth than what is has been\r
+ configured.\r
+ IB_INVALID_WR_TYPE\r
+ Invalid work request type found in the request.\r
+ IB_INVALID_QP_STATE\r
+ QP was in reset or init state.\r
+ (TBD: there may be an errata that allows posting in init state)\r
+</pre>\r
+</span><p><strong>PORTABILITY</strong></p>\r
+<span class="PORTABILITY"><pre> Kernel & User mode.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo1082">uvp_post_send</a>, <a href="#robo1056">uvp_poll_cq</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1081">[Functions]<a name="user2dmode20Verbs2fuvp5fpost5fresize5fcq5ft">\r
+user-mode Verbs/uvp_post_resize_cq_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>uvp_post_resize_cq_t</strong> -- Post-ioctl function to resize a CQ.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef void\r
+(AL_API *<strong>uvp_post_resize_cq_t</strong>) (\r
+ IN const ib_cq_handle_t h_uvp_cq,\r
+ IN <a href="../../iba/ib_types_h.html#robo49">ib_api_status_t</a> ioctl_status,\r
+ IN const uint32_t size,\r
+ IN <a href="../../iba/ib_ci_h.html#robo1153">ci_umv_buf_t</a> *p_umv_buf );\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> <strong>uvp_post_resize_cq_t</strong>() is implemented by vendor to resize the CQ.\r
+ It is the post-ioctl routine for ib_resize_cq().\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_uvp_cq\r
+ [in] Vendor's Handle to the already created CQ (in user-mode library).\r
+ ioctl_status\r
+ [in] The ioctl status of the AL API.\r
+ size\r
+ [in] size of the CQ that was created by the provider.\r
+ If VPD resized the CQ in kernel, this is the value as set by\r
+ VPD. If UVP resizes the CQ in user-mode, then uvp already knows\r
+ the size of the CQ in the pre-ioctl.\r
+ p_umv_buf\r
+ [in out] On input, it contains any vendor-specific private information\r
+ exchanged with the vendor's <a href="../../iba/ib_ci_h.html#robo39">Verbs</a> Provider Driver (<a href="#robo1106">uvp_pre_resize_cq</a>).\r
+ Vendor is expected to check vendor-specific status in\r
+ umv_buf as appropriate.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> This function does not return a value.\r
+</pre>\r
+</span><p><strong>PORTABILITY</strong></p>\r
+<span class="PORTABILITY"><pre> User mode.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo1088">uvp_pre_create_cq</a>, <a href="#robo1062">uvp_post_create_cq_t</a>, <a href="#robo1106">uvp_pre_resize_cq</a>,\r
+ <a href="#robo1103">uvp_pre_query_cq</a>, <a href="#robo1077">uvp_post_query_cq_t</a>, <a href="#robo1093">uvp_pre_destroy_cq</a>,\r
+ <a href="#robo1067">uvp_post_destroy_cq_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1082">[Functions]<a name="user2dmode20Verbs2fuvp5fpost5fsend">\r
+user-mode Verbs/uvp_post_send</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>uvp_post_send</strong> -- Post a work request to the send side of a queue pair.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef <a href="../../iba/ib_types_h.html#robo49">ib_api_status_t</a>\r
+(AL_API *<strong>uvp_post_send</strong>) (\r
+ IN const void* __ptr64 h_qp,\r
+ IN <a href="../../iba/ib_types_h.html#robo249">ib_send_wr_t</a>* const p_send_wr,\r
+ OUT <a href="../../iba/ib_types_h.html#robo249">ib_send_wr_t</a>** pp_send_failure );\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> This routine posts a work request to the send side of the queue pair.\r
+ The different types of work request that can be posted are explained in\r
+ the ib_wr_t structure. For exact details on ordering rules please consult\r
+ the Volume 1, of the InfiniBand Specifications. If there is more\r
+ outstanding requests posted that what the queue is configured for, an\r
+ immediate error is returned.\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_qp\r
+ [in] Type-cast as appropriate for user/kernel mode, this is\r
+ the Queue pair handle to which the receive work request is being\r
+ posted.\r
+ p_send_wr\r
+ [in] <a href="../../complib/cl_list_h.html#robo15">List</a> of work requests that needs to be send.\r
+ pp_send_failure\r
+ [out] The work requests that failed.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> Any unsuccessful status indicates the status of the first failed request.\r
+\r
+ IB_SUCCESS\r
+ All the work requests are completed successfully\r
+ IB_INVALID_QP_HANDLE\r
+ The qp_handle supplied is invalid.\r
+ IB_INSUFFICIENT_RESOURCES\r
+ Insufficient resources to complete the request.\r
+ There are no more work elements in the channel interface to\r
+ process this request, and the total outstanding work request has\r
+ been exceeded.\r
+ IB_INVALID_WR_TYPE\r
+ The work request type was not valid.\r
+ IB_INVALID_QP_STATE\r
+ The queue pair is either in Reset, Init, RTR or Error state.\r
+ IB_INVALID_MAX_SGE\r
+ The work request has too many scatter gather elements than what the\r
+ QP is configured.\r
+ IB_UNSUPPORTED\r
+ Atomics or Reliable datagram request is not supported by this HCA.\r
+ IB_INVALID_ADDR_HANDLE\r
+ Address handle supplied in the work request is invalid.\r
+</pre>\r
+</span><p><strong>PORTABILITY</strong></p>\r
+<span class="PORTABILITY"><pre> Kernel & User mode.\r
+</pre>\r
+</span><p><strong>NOTES</strong></p>\r
+<span class="NOTES"><pre> Please refer to Table 81 and Table 82 for allowed operation types\r
+ on different types of queue pairs, and the different modifiers\r
+ acceptable for the work request for different QP service types.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo1080">uvp_post_recv</a>, <a href="#robo1056">uvp_poll_cq</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1083">[Functions]<a name="user2dmode20Verbs2fuvp5fpre5fallocate5fpd">\r
+user-mode Verbs/uvp_pre_allocate_pd</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>uvp_pre_allocate_pd</strong> -- Pre-ioctl function to allocate PD\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef <a href="../../iba/ib_types_h.html#robo49">ib_api_status_t</a>\r
+(AL_API *<strong>uvp_pre_allocate_pd</strong>) (\r
+ IN ib_ca_handle_t h_uvp_ca,\r
+ IN OUT <a href="../../iba/ib_ci_h.html#robo1153">ci_umv_buf_t</a> *p_umv_buf );\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> <strong>uvp_pre_allocate_pd</strong>() is implemented by vendor. It is the pre-ioctl routine\r
+ for the AL call <a href="../../iba/ib_al_h.html#robo48">ib_alloc_pd</a>() in user-mode.\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_uvp_ca\r
+ [in] Vendor's user-mode library handle to the open instance of the CA\r
+ p_umv_buf\r
+ [in out] On input, UAL provides this buffer template.\r
+ On return from this function, p_umv_buf contains\r
+ any vendor-specific record to be exchanged with the vendor's\r
+ HCA driver.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> IB_SUCCESS\r
+ The pre-ioctl call is successful.\r
+ IB_INVALID_CA_HANDLE\r
+ CA handle is invalid.\r
+ IB_INSUFFICIENT_RESOURCES\r
+ Insufficient resources in Vendor library to complete the call\r
+</pre>\r
+</span><p><strong>PORTABILITY</strong></p>\r
+<span class="PORTABILITY"><pre> User Mode\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo1057">uvp_post_allocate_pd_t</a>, <a href="#robo1091">uvp_pre_deallocate_pd</a>, <a href="#robo1065">uvp_post_deallocate_pd_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1084">[Functions]<a name="user2dmode20Verbs2fuvp5fpre5fattach5fmcast">\r
+user-mode Verbs/uvp_pre_attach_mcast</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>uvp_pre_attach_mcast</strong> -- Pre-ioctl function to Attach a queue pair\r
+ to a multicast group\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef <a href="../../iba/ib_types_h.html#robo49">ib_api_status_t</a>\r
+(AL_API *<strong>uvp_pre_attach_mcast</strong>) (\r
+ IN const ib_qp_handle_t h_uvp_qp,\r
+ IN const <a href="../../iba/ib_types_h.html#robo856">ib_gid_t</a> *p_mcast_gid,\r
+ IN const uint16_t mcast_lid,\r
+ IN OUT <a href="../../iba/ib_ci_h.html#robo1153">ci_umv_buf_t</a> *p_umv_buf );\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> <strong>uvp_pre_attach_mcast</strong>() is the pre-ioctl routine implemented by vendor\r
+ to attach a queue pair to a multicast group.\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_uvp_qp\r
+ [in] Vendor's Queue pair handle (in user-mode library)\r
+ which needs to be added to the multicast group on the adapter.\r
+ mcast_lid\r
+ [in] The multicast group LID value.\r
+ p_mcast_gid\r
+ [in] IPv6 address associated with this multicast group.\r
+ p_umv_buf\r
+ [in out] On input, UAL provides this buffer template.\r
+ On return from this function, p_umv_buf contains\r
+ any vendor-specific record to be exchanged with the vendor's\r
+ HCA driver.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> IB_SUCCESS\r
+ The queue pair handle was successfully added to the multicast\r
+ group.\r
+ IB_INVALID_QP_HANDLE\r
+ qp_handle supplied is invalid.\r
+ IB_INVALID_SERVICE_TYPE\r
+ Queue pair handle supplied is not of unreliable datagram type.\r
+ IB_INVALID_GID\r
+ The supplied addr is not a valid multicast ipv6 address.\r
+ IB_INSUFFICIENT_RESOURCES\r
+ Insufficient resources to complete the request.\r
+</pre>\r
+</span><p><strong>PORTABILITY</strong></p>\r
+<span class="PORTABILITY"><pre> User mode.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo1090">uvp_pre_create_qp</a>, <a href="#robo1064">uvp_post_create_qp_t</a>, <a href="#robo1058">uvp_post_attach_mcast_t</a>,\r
+ <a href="#robo1096">uvp_pre_detach_mcast</a>, <a href="#robo1070">uvp_post_detach_mcast_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1085">[Functions]<a name="user2dmode20Verbs2fuvp5fpre5fci5fcall">\r
+user-mode Verbs/uvp_pre_ci_call</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>uvp_pre_ci_call</strong> -- Pre-ioctl function to <a href="../../iba/ib_al_h.html#robo65">ib_ci_call</a>\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef <a href="../../iba/ib_types_h.html#robo49">ib_api_status_t</a>\r
+(AL_API *<strong>uvp_pre_ci_call</strong>) (\r
+ IN const ib_ca_handle_t h_uvp_ca,\r
+ IN const void* __ptr64 * const handle_array OPTIONAL,\r
+ IN uint32_t num_handles,\r
+ IN <a href="../../iba/ib_types_h.html#robo66">ib_ci_op_t</a>* const p_ci_op,\r
+ IN OUT <a href="../../iba/ib_ci_h.html#robo1153">ci_umv_buf_t</a> *p_umv_buf);\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> <strong>uvp_pre_ci_call</strong>() is implemented by vendor. It is the pre-ioctl\r
+ routine for <a href="../../iba/ib_al_h.html#robo65">ib_ci_call</a>().\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_uvp_ca\r
+ [in] Vendor's user-mode library handle to the CA\r
+ handle_array\r
+ [in] An array of uvp handles. For valid types, refer to <a href="../../iba/ib_ci_h.html#robo_top_of_doc">ib_ci.h</a> or\r
+ <a href="../../iba/ib_al_h.html#robo_top_of_doc">ib_al.h</a>. This is an optional parameter.\r
+ num_handles\r
+ [in] The number of handles in the array.\r
+ p_ci_op\r
+ [in] The operation that is requested by the client. For more info,\r
+ refer <a href="../../iba/ib_types_h.html#robo_top_of_doc">ib_types.h</a>\r
+ p_umv_buf\r
+ [in out] On input, UAL provides this buffer template.\r
+ On return from this function, p_umv_buf contains\r
+ any vendor-specific record to be exchanged with the vendor's\r
+ HCA driver.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> IB_SUCCESS\r
+ The pre-ioctl is successful.\r
+ IB_INSUFFICIENT_RESOURCES\r
+ Insufficient resources in Vendor library to complete the call\r
+</pre>\r
+</span><p><strong>PORTABILITY</strong></p>\r
+<span class="PORTABILITY"><pre> User Mode\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo1059">uvp_post_ci_call</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1086">[Functions]<a name="user2dmode20Verbs2fuvp5fpre5fclose5fca5ft">\r
+user-mode Verbs/uvp_pre_close_ca_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>uvp_pre_close_ca_t</strong> -- Pre-ioctl operation for user-mode <a href="../../iba/ib_al_h.html#robo68">ib_close_ca</a>().\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef <a href="../../iba/ib_types_h.html#robo49">ib_api_status_t</a>\r
+(AL_API *<strong>uvp_pre_close_ca_t</strong>) (\r
+ IN ib_ca_handle_t h_uvp_ca );\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> <strong>uvp_pre_close_ca_t</strong>() is implemented by vendor. It is the pre-ioctl routine\r
+ for the AL call <a href="../../iba/ib_al_h.html#robo68">ib_close_ca</a>() in user-mode.\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_uvp_ca\r
+ [in] Vendor's user-mode library handle to the open instance of the CA\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> IB_SUCCESS\r
+ Successfully completed the pre-ioctl.\r
+</pre>\r
+</span><p><strong>PORTABILITY</strong></p>\r
+<span class="PORTABILITY"><pre> User Mode\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo1100">uvp_pre_open_ca_t</a>, <a href="#robo1074">uvp_post_open_ca_t</a>, <a href="#robo1102">uvp_pre_query_ca</a>, <a href="#robo1076">uvp_post_query_ca_t</a>,\r
+ <a href="#robo1098">uvp_pre_modify_ca</a>, <a href="#robo1072">uvp_post_modify_ca_t</a>, <a href="#robo1060">uvp_post_close_ca_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1087">[Functions]<a name="user2dmode20Verbs2fuvp5fpre5fcreate5fav">\r
+user-mode Verbs/uvp_pre_create_av</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>uvp_pre_create_av</strong> -- Pre-ioctl function to create AV\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef <a href="../../iba/ib_types_h.html#robo49">ib_api_status_t</a>\r
+(AL_API *<strong>uvp_pre_create_av</strong>) (\r
+ IN const ib_pd_handle_t h_uvp_pd,\r
+ IN const <a href="../../iba/ib_types_h.html#robo57">ib_av_attr_t</a> *p_addr_vector,\r
+ IN OUT <a href="../../iba/ib_ci_h.html#robo1153">ci_umv_buf_t</a> *p_umv_buf);\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> <strong>uvp_pre_create_av</strong>() is implemented by vendor. It is the pre-ioctl\r
+ routine for <a href="../../iba/ib_al_h.html#robo104">ib_create_av</a>().\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_uvp_pd\r
+ [in] Vendor's user-mode library handle to the Protection domain\r
+ to which this AV is associated.\r
+ p_addr_vector\r
+ [in] Parameters to create the address vector.\r
+ p_umv_buf\r
+ [in out] On input, UAL provides this buffer template.\r
+ On return from this function, p_umv_buf contains\r
+ any vendor-specific record to be exchanged with the vendor's\r
+ HCA driver.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> IB_SUCCESS\r
+ The pre-ioctl is successful.\r
+ IB_INVALID_SETTING\r
+ Values in the vector is not valid\r
+ IB_INVALID_PD_HANDLE\r
+ The PD handle is invalid.\r
+ IB_INSUFFICIENT_RESOURCES\r
+ Insufficient resources in Vendor library to complete the call\r
+</pre>\r
+</span><p><strong>PORTABILITY</strong></p>\r
+<span class="PORTABILITY"><pre> User Mode\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo1061">uvp_post_create_av_t</a>, <a href="#robo1101">uvp_pre_query_av</a>, <a href="#robo1075">uvp_post_query_av_t</a>, <a href="#robo1097">uvp_pre_modify_av</a>,\r
+ <a href="#robo1071">uvp_post_modify_av_t</a>, <a href="#robo1092">uvp_pre_destroy_av</a>, <a href="#robo1066">uvp_post_destroy_av_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1088">[Functions]<a name="user2dmode20Verbs2fuvp5fpre5fcreate5fcq">\r
+user-mode Verbs/uvp_pre_create_cq</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>uvp_pre_create_cq</strong> -- Pre-ioctl function to Create a completion queue (CQ)\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef <a href="../../iba/ib_types_h.html#robo49">ib_api_status_t</a>\r
+(AL_API *<strong>uvp_pre_create_cq</strong>) (\r
+ IN const ib_ca_handle_t h_uvp_ca,\r
+ IN OUT uint32_t* const p_size,\r
+ IN OUT <a href="../../iba/ib_ci_h.html#robo1153">ci_umv_buf_t</a> *p_umv_buf );\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> <strong>uvp_pre_create_cq</strong>() is implemented by vendor. It is the pre-ioctl routine\r
+ for <a href="../../iba/ib_al_h.html#robo105">ib_create_cq</a>().\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_uvp_pd\r
+ [in] Vendor's handle to an existing protection domain (in user-mode\r
+ library)\r
+ p_size\r
+ [in out] Points to a variable containing the number of CQ entries\r
+ requested by the consumer.\r
+ On return, points to the size of the CQ that was created\r
+ by the provider.\r
+ p_umv_buf\r
+ [in out] On input, UAL provides this buffer template.\r
+ On return from this function, p_umv_buf contains\r
+ any vendor-specific record to be exchanged with the vendor's\r
+ HCA driver.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> IB_SUCCESS\r
+ The operation was successful.\r
+ IB_INVALID_PD_HANDLE\r
+ The h_uvp_pd passed is invalid.\r
+ IB_INSUFFICIENT_RESOURCES\r
+ Insufficient resources to complete request.\r
+ IB_INVALID_CQ_SIZE\r
+ Requested CQ Size is not supported.\r
+</pre>\r
+</span><p><strong>PORTABILITY</strong></p>\r
+<span class="PORTABILITY"><pre> User mode.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo1062">uvp_post_create_cq_t</a>, <a href="#robo1106">uvp_pre_resize_cq</a>, <a href="#robo1081">uvp_post_resize_cq_t</a>,\r
+ <a href="#robo1103">uvp_pre_query_cq</a>, <a href="#robo1077">uvp_post_query_cq_t</a>, <a href="#robo1093">uvp_pre_destroy_cq</a>,\r
+ <a href="#robo1067">uvp_post_destroy_cq_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1089">[Functions]<a name="user2dmode20Verbs2fuvp5fpre5fcreate5fmw">\r
+user-mode Verbs/uvp_pre_create_mw</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>uvp_pre_create_mw</strong> -- Pre-ioctl function to create a memory window\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef <a href="../../iba/ib_types_h.html#robo49">ib_api_status_t</a>\r
+(AL_API *<strong>uvp_pre_create_mw</strong>) (\r
+ IN const ib_pd_handle_t h_uvp_pd,\r
+ IN OUT <a href="../../iba/ib_ci_h.html#robo1153">ci_umv_buf_t</a> *p_umv_buf );\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> <strong>uvp_pre_create_mw</strong>() is implemented by vendor. It is the pre-ioctl routine\r
+ for <a href="../../iba/ib_al_h.html#robo108">ib_create_mw</a>().\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_uvp_pd\r
+ [in] Vendor's Protection domain handle (in user-mode library)\r
+ to use for this memory window\r
+ p_umv_buf\r
+ [in out] On input, UAL provides this buffer template.\r
+ On return from this function, p_umv_buf contains\r
+ any vendor-specific record to be exchanged with the vendor's\r
+ HCA driver.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> IB_SUCCESS\r
+ The memory window allocation completed successfully.\r
+ IB_INSUFFICIENT_RESOURCES\r
+ Not enough resources to complete the request.\r
+ IB_INVALID_PD_HANDLE\r
+ pd_handle supplied is invalid.\r
+</pre>\r
+</span><p><strong>PORTABILITY</strong></p>\r
+<span class="PORTABILITY"><pre> User mode\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo1063">uvp_post_create_mw_t</a>, <a href="#robo1104">uvp_pre_query_mw</a>, <a href="#robo1078">uvp_post_query_mw_t</a>,\r
+ <a href="#robo1052">uvp_bind_mw</a>, <a href="#robo1094">uvp_pre_destroy_mw</a>, <a href="#robo1068">uvp_post_destroy_mw_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1090">[Functions]<a name="user2dmode20Verbs2fuvp5fpre5fcreate5fqp">\r
+user-mode Verbs/uvp_pre_create_qp</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>uvp_pre_create_qp</strong> -- Pre-ioctl function to Create a Queue Pair.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef <a href="../../iba/ib_types_h.html#robo49">ib_api_status_t</a>\r
+(AL_API *<strong>uvp_pre_create_qp</strong>) (\r
+ IN const ib_pd_handle_t h_uvp_pd,\r
+ IN const <a href="../../iba/ib_types_h.html#robo206">ib_qp_create_t</a> *p_create_attr,\r
+ IN OUT <a href="../../iba/ib_ci_h.html#robo1153">ci_umv_buf_t</a> *p_umv_buf );\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> <strong>uvp_pre_create_qp</strong>() is implemented by vendor. It is the pre-ioctl routine\r
+ for <a href="../../iba/ib_al_h.html#robo109">ib_create_qp</a>().\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_uvp_pd\r
+ [in] Vendor's Protection domain handle in user-mode library.\r
+ p_create_attr\r
+ [in] Initial attributes with which the qp must be created.\r
+ p_umv_buf\r
+ [in out] On input, UAL provides this buffer template.\r
+ On return from this function, p_umv_buf contains\r
+ any vendor-specific record to be exchanged with the vendor's\r
+ HCA driver.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> IB_SUCCESS\r
+ The pre-ioctl call is successful.\r
+ IB_INVALID_PD_HANDLE\r
+ The PD handle is invalid.\r
+ IB_INVALID_CQ_HANDLE\r
+ The send or receive completion queue to associate with the queue pair\r
+ is invalid.\r
+ IB_UNSUPPORTED\r
+ The specified queue pair type was not supported by the channel adapter.\r
+ IB_INVALID_MAX_WRS\r
+ The requested maximum send or receive work request depth could not be\r
+ supported.\r
+ IB_INVALID_MAX_SGE\r
+ The requested maximum number of scatter-gather entries for the send or\r
+ receive queue could not be supported.\r
+ IB_INSUFFICIENT_RESOURCES\r
+ Insufficient resources in Vendor library to complete the call.\r
+ IB_INVALID_PARAMETER\r
+ At least one parameter is invalid.\r
+</pre>\r
+</span><p><strong>PORTABILITY</strong></p>\r
+<span class="PORTABILITY"><pre> User Mode\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo1064">uvp_post_create_qp_t</a>, <a href="#robo1105">uvp_pre_query_qp</a>, <a href="#robo1079">uvp_post_query_qp_t</a>, <a href="#robo1099">uvp_pre_modify_qp</a>,\r
+ <a href="#robo1073">uvp_post_modify_qp_t</a>, <a href="#robo1095">uvp_pre_destroy_qp</a>, <a href="#robo1069">uvp_post_destroy_qp_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1091">[Functions]<a name="user2dmode20Verbs2fuvp5fpre5fdeallocate5fpd">\r
+user-mode Verbs/uvp_pre_deallocate_pd</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>uvp_pre_deallocate_pd</strong> -- Pre-ioctl function to deallocate PD\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef <a href="../../iba/ib_types_h.html#robo49">ib_api_status_t</a>\r
+(AL_API *<strong>uvp_pre_deallocate_pd</strong>) (\r
+ IN const ib_pd_handle_t h_uvp_pd );\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> <strong>uvp_pre_deallocate_pd</strong>() is implemented by vendor. It is the pre-ioctl\r
+ routine for the AL call ib_deallocate_pd().\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_uvp_pd\r
+ [in] Vendor's user-mode library PD handle.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> IB_SUCCESS\r
+ The pre-ioctl call is successful.\r
+</pre>\r
+</span><p><strong>PORTABILITY</strong></p>\r
+<span class="PORTABILITY"><pre> User Mode\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo1083">uvp_pre_allocate_pd</a>, <a href="#robo1057">uvp_post_allocate_pd_t</a>, <a href="#robo1065">uvp_post_deallocate_pd_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1092">[Functions]<a name="user2dmode20Verbs2fuvp5fpre5fdestroy5fav">\r
+user-mode Verbs/uvp_pre_destroy_av</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>uvp_pre_destroy_av</strong> -- Pre-ioctl function to destroy AV\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef <a href="../../iba/ib_types_h.html#robo49">ib_api_status_t</a>\r
+(AL_API *<strong>uvp_pre_destroy_av</strong>) (\r
+ IN const ib_av_handle_t h_uvp_av );\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> <strong>uvp_pre_destroy_av</strong>() is implemented by vendor to destroy the AV.\r
+ It is the pre-ioctl routine for <a href="../../iba/ib_al_h.html#robo115">ib_destroy_av</a>().\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_uvp_av\r
+ [in] Vendor's AV handle in user-mode library.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> IB_SUCCESS\r
+ The pre-ioctl is successful.\r
+</pre>\r
+</span><p><strong>PORTABILITY</strong></p>\r
+<span class="PORTABILITY"><pre> User Mode\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo1087">uvp_pre_create_av</a>, <a href="#robo1061">uvp_post_create_av_t</a>, <a href="#robo1101">uvp_pre_query_av</a>, <a href="#robo1075">uvp_post_query_av_t</a>,\r
+ <a href="#robo1097">uvp_pre_modify_av</a>, <a href="#robo1071">uvp_post_modify_av_t</a>, <a href="#robo1066">uvp_post_destroy_av_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1093">[Functions]<a name="user2dmode20Verbs2fuvp5fpre5fdestroy5fcq">\r
+user-mode Verbs/uvp_pre_destroy_cq</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>uvp_pre_destroy_cq</strong> -- Pre-ioctl function to Destroy a CQ.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef <a href="../../iba/ib_types_h.html#robo49">ib_api_status_t</a>\r
+(AL_API *<strong>uvp_pre_destroy_cq</strong>) (\r
+ IN const ib_cq_handle_t h_uvp_cq );\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> <strong>uvp_pre_destroy_cq</strong>() is implemented by vendor to destroy CQ.\r
+ It is the pre-ioctl routine for <a href="../../iba/ib_al_h.html#robo116">ib_destroy_cq</a>().\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_uvp_cq\r
+ [in] Vendor's Handle to the cq (in user-mode library)\r
+ that needs to be destroyed.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> IB_SUCCESS\r
+ The pre-ioctl call is successful.\r
+</pre>\r
+</span><p><strong>PORTABILITY</strong></p>\r
+<span class="PORTABILITY"><pre> User mode.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo1088">uvp_pre_create_cq</a>, <a href="#robo1062">uvp_post_create_cq_t</a>, <a href="#robo1106">uvp_pre_resize_cq</a>,\r
+ <a href="#robo1081">uvp_post_resize_cq_t</a>, <a href="#robo1103">uvp_pre_query_cq</a>, <a href="#robo1077">uvp_post_query_cq_t</a>,\r
+ <a href="#robo1067">uvp_post_destroy_cq_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1094">[Functions]<a name="user2dmode20Verbs2fuvp5fpre5fdestroy5fmw">\r
+user-mode Verbs/uvp_pre_destroy_mw</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>uvp_pre_destroy_mw</strong> -- Pre-ioctl function to destroy a memory window\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef <a href="../../iba/ib_types_h.html#robo49">ib_api_status_t</a>\r
+(AL_API *<strong>uvp_pre_destroy_mw</strong>) (\r
+ IN const ib_mw_handle_t h_uvp_mw );\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> <strong>uvp_pre_destroy_mw</strong>() is implemented by vendor. It is the pre-ioctl routine\r
+ for <a href="../../iba/ib_al_h.html#robo119">ib_destroy_mw</a>().\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_uvp_mw\r
+ [in] Vendor's handle (in user-mode library) to the memory window\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> IB_SUCCESS\r
+ Pre-ioctl succeeded.\r
+</pre>\r
+</span><p><strong>PORTABILITY</strong></p>\r
+<span class="PORTABILITY"><pre> User mode\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo1089">uvp_pre_create_mw</a>, <a href="#robo1063">uvp_post_create_mw_t</a>, <a href="#robo1104">uvp_pre_query_mw</a>,\r
+ <a href="#robo1078">uvp_post_query_mw_t</a>, <a href="#robo1052">uvp_bind_mw</a>, <a href="#robo1068">uvp_post_destroy_mw_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1095">[Functions]<a name="user2dmode20Verbs2fuvp5fpre5fdestroy5fqp">\r
+user-mode Verbs/uvp_pre_destroy_qp</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>uvp_pre_destroy_qp</strong> -- Pre-ioctl function to Destroy a Queue Pair.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef <a href="../../iba/ib_types_h.html#robo49">ib_api_status_t</a>\r
+(AL_API *<strong>uvp_pre_destroy_qp</strong>) (\r
+ IN const ib_qp_handle_t h_uvp_qp );\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> <strong>uvp_pre_destroy_qp</strong>() is the pre-ioctl routine implemented by vendor\r
+ to destroy QP.\r
+ UAL invokes this pre-ioctl routine to destroy QP.\r
+ The vendor is expected to perform any preliminary steps in preparation\r
+ for destroying the QP and perform any book-keeping.\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_uvp_qp\r
+ [in] Vendor's Handle to the qp (in user-mode library)\r
+ that needs to be destroyed.\r
+ p_umv_buf\r
+ [in out] On input, UAL provides this buffer template.\r
+ On return from this function, p_umv_buf contains\r
+ any vendor-specific record to be exchanged with the vendor's\r
+ HCA driver.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> IB_SUCCESS\r
+ The pre-ioctl call is successful.\r
+</pre>\r
+</span><p><strong>PORTABILITY</strong></p>\r
+<span class="PORTABILITY"><pre> User mode.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo1090">uvp_pre_create_qp</a>, <a href="#robo1064">uvp_post_create_qp_t</a>, <a href="#robo1105">uvp_pre_query_qp</a>, <a href="#robo1079">uvp_post_query_qp_t</a>,\r
+ <a href="#robo1099">uvp_pre_modify_qp</a>, <a href="#robo1073">uvp_post_modify_qp_t</a>, <a href="#robo1069">uvp_post_destroy_qp_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1096">[Functions]<a name="user2dmode20Verbs2fuvp5fpre5fdetach5fmcast">\r
+user-mode Verbs/uvp_pre_detach_mcast</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>uvp_pre_detach_mcast</strong> -- Pre-ioctl function to detach a queue pair\r
+ to a multicast group\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef <a href="../../iba/ib_types_h.html#robo49">ib_api_status_t</a>\r
+(AL_API *<strong>uvp_pre_detach_mcast</strong>) (\r
+ IN ib_mcast_handle_t h_uvp_mcast );\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> <a href="#robo1084">uvp_pre_attach_mcast</a>() is the pre-ioctl routine implemented by vendor\r
+ to attach a queue pair to a multicast group.\r
+ Upon return from the pre-ioctl function, UAL packages up the UMV buffer\r
+ in an IOCTL and passes it on to the user-mode proxy. UAL passes the\r
+ info to the user-mode proxy stating that it no longer wishes to receive\r
+ callback for mcast join for the caller. Note that UAL takes care of\r
+ handling callbcak.\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_uvp_mcast\r
+ [in] Vendor's Multicast handle (in user-mode library)\r
+ holding the association of this queue pair to the multicast group.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> IB_SUCCESS\r
+ The queue pair handle was successfully added to the multicast\r
+ group.\r
+</pre>\r
+</span><p><strong>PORTABILITY</strong></p>\r
+<span class="PORTABILITY"><pre> Kernel & User mode.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo1090">uvp_pre_create_qp</a>, <a href="#robo1064">uvp_post_create_qp_t</a>, <a href="#robo1084">uvp_pre_attach_mcast</a>,\r
+ <a href="#robo1058">uvp_post_attach_mcast_t</a>, <a href="#robo1070">uvp_post_detach_mcast_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1097">[Functions]<a name="user2dmode20Verbs2fuvp5fpre5fmodify5fav">\r
+user-mode Verbs/uvp_pre_modify_av</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>uvp_pre_modify_av</strong> -- Pre-ioctl function to modify AV\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef <a href="../../iba/ib_types_h.html#robo49">ib_api_status_t</a>\r
+(AL_API *<strong>uvp_pre_modify_av</strong>) (\r
+ IN const ib_av_handle_t h_uvp_av,\r
+ IN const <a href="../../iba/ib_types_h.html#robo57">ib_av_attr_t</a> *p_addr_vector,\r
+ IN OUT <a href="../../iba/ib_ci_h.html#robo1153">ci_umv_buf_t</a> *p_umv_buf );\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> <strong>uvp_pre_modify_av</strong>() is implemented by vendor. It is the pre-ioctl routine\r
+ for <a href="../../iba/ib_al_h.html#robo155">ib_modify_av</a>().\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_uvp_av\r
+ [in] Vendor's AV handle in user-mode library.\r
+ p_addr_vector\r
+ [in] Parameters to modify the address vector handle\r
+ p_umv_buf\r
+ [in out] On input, UAL provides this buffer template.\r
+ On return from this function, p_umv_buf contains\r
+ any vendor-specific record to be exchanged with the vendor's\r
+ HCA driver.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> IB_SUCCESS\r
+ The pre-ioctl is successful.\r
+ IB_INVALID_SETTING\r
+ Values in the vector is not valid.\r
+ IB_INVALID_AV_HANDLE\r
+ The AV handle is invalid.\r
+ IB_INSUFFICIENT_RESOURCES\r
+ Insufficient resources in Vendor library to complete the call.\r
+</pre>\r
+</span><p><strong>PORTABILITY</strong></p>\r
+<span class="PORTABILITY"><pre> User Mode\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo1087">uvp_pre_create_av</a>, <a href="#robo1061">uvp_post_create_av_t</a>, <a href="#robo1101">uvp_pre_query_av</a>, <a href="#robo1075">uvp_post_query_av_t</a>,\r
+ <a href="#robo1071">uvp_post_modify_av_t</a>, <a href="#robo1092">uvp_pre_destroy_av</a>, <a href="#robo1066">uvp_post_destroy_av_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1098">[Functions]<a name="user2dmode20Verbs2fuvp5fpre5fmodify5fca">\r
+user-mode Verbs/uvp_pre_modify_ca</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>uvp_pre_modify_ca</strong> -- Pre-ioctl operation for user-mode <a href="../../iba/ib_al_h.html#robo156">ib_modify_ca</a>()\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef <a href="../../iba/ib_types_h.html#robo49">ib_api_status_t</a>\r
+(AL_API *<strong>uvp_pre_modify_ca</strong>) (\r
+ IN ib_ca_handle_t h_uvp_ca,\r
+ IN uint8_t port_num,\r
+ IN <a href="../../iba/ib_types_h.html#robo61">ib_ca_mod_t</a> ca_mod,\r
+ IN const <a href="../../iba/ib_types_h.html#robo199">ib_port_attr_mod_t</a>* const p_port_attr_mod );\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> <strong>uvp_pre_modify_ca</strong>() is implemented by vendor. It is the pre-ioctl routine\r
+ for the AL call <a href="../../iba/ib_al_h.html#robo156">ib_modify_ca</a>() in user-mode.\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_uvp_ca\r
+ [in] Vendor's user-mode library handle to the open instance of the CA\r
+ port_num\r
+ [in] An index to the port that is being modified. The port_num matches\r
+ the index of the port as returned through the <a href="../../iba/ib_al_h.html#robo213">ib_query_ca</a> call.\r
+ ca_mod\r
+ [in] A mask of the attributes and counters to modify.\r
+ p_port_attr_mod\r
+ [in] A list of the specific port attribute information to modify. For\r
+ the access layer to modify an attribute, its corresponding bit must be\r
+ set in the ca_mod parameter.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> IB_SUCCESS\r
+ The pre-ioctl function succeeded.\r
+ IB_INVALID_CA_HANDLE\r
+ CA handle is invalid.\r
+ IB_INVALID_PARAMETER\r
+ One or more parameters is invalid.\r
+</pre>\r
+</span><p><strong>PORTABILITY</strong></p>\r
+<span class="PORTABILITY"><pre> User Mode\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo1100">uvp_pre_open_ca_t</a>, <a href="#robo1074">uvp_post_open_ca_t</a>, <a href="#robo1102">uvp_pre_query_ca</a>, <a href="#robo1076">uvp_post_query_ca_t</a>,\r
+ <a href="#robo1072">uvp_post_modify_ca_t</a>, <a href="#robo1086">uvp_pre_close_ca_t</a>, <a href="#robo1060">uvp_post_close_ca_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1099">[Functions]<a name="user2dmode20Verbs2fuvp5fpre5fmodify5fqp">\r
+user-mode Verbs/uvp_pre_modify_qp</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>uvp_pre_modify_qp</strong> -- Pre-ioctl function to Modify attributes of the\r
+ specified QP.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>*/\r
+\r
+typedef <a href="../../iba/ib_types_h.html#robo49">ib_api_status_t</a>\r
+(AL_API *<strong>uvp_pre_modify_qp</strong>) (\r
+ IN const ib_qp_handle_t h_uvp_qp,\r
+ IN const <a href="../../iba/ib_types_h.html#robo207">ib_qp_mod_t</a> *p_modify_attr,\r
+ IN OUT <a href="../../iba/ib_ci_h.html#robo1153">ci_umv_buf_t</a> *p_umv_buf );\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> <strong>uvp_pre_modify_qp</strong>() is implemented by vendor to modify the attributes of a\r
+ QP. It is the pre-ioctl routine for <a href="../../iba/ib_al_h.html#robo158">ib_modify_qp</a>().\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_uvp_qp\r
+ [in] Vendor's qp Handle to the queue pair (in user-mode library)\r
+ whose state is to be modified.\r
+ p_modify_attr\r
+ [in] Specifies what attributes need to be modified in the qp.\r
+ p_umv_buf\r
+ [in out] On input, UAL provides this buffer template.\r
+ On return from this function, p_umv_buf contains\r
+ any vendor-specific record to be exchanged with the vendor's\r
+ HCA driver.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> IB_SUCCESS\r
+ The pre-ioctl call is successful.\r
+ IB_INSUFFICIENT_RESOURCES\r
+ Insufficient resources to complete the requested operation.\r
+ IB_INVALID_QP_HANDLE\r
+ Invalid QP handle.\r
+ IB_UNSUPPORTED\r
+ Requested operation is not supported, for e.g. Atomic operations.\r
+ IB_QP_INVALID_STATE\r
+ Invalid state transition request. Current QP state not in allowable\r
+ state.\r
+ IB_INVALID_PKEY\r
+ Pkey specified in modify request not valid entry in P_KEY table. Or\r
+ index is out of range.\r
+ IB_INVALID_PMIG_STATE\r
+ Invalid path migration state specified in the request.\r
+</pre>\r
+</span><p><strong>PORTABILITY</strong></p>\r
+<span class="PORTABILITY"><pre> User mode\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo1090">uvp_pre_create_qp</a>, <a href="#robo1064">uvp_post_create_qp_t</a>, <a href="#robo1105">uvp_pre_query_qp</a>, <a href="#robo1079">uvp_post_query_qp_t</a>,\r
+ <a href="#robo1073">uvp_post_modify_qp_t</a>, <a href="#robo1095">uvp_pre_destroy_qp</a>, <a href="#robo1069">uvp_post_destroy_qp_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1100">[Functions]<a name="user2dmode20Verbs2fuvp5fpre5fopen5fca5ft">\r
+user-mode Verbs/uvp_pre_open_ca_t</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>uvp_pre_open_ca_t</strong> -- Pre-ioctl operation for user-mode <a href="../../iba/ib_al_h.html#robo164">ib_open_ca</a>()\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef <a href="../../iba/ib_types_h.html#robo49">ib_api_status_t</a>\r
+(AL_API *<strong>uvp_pre_open_ca_t</strong>) (\r
+ IN const <a href="../../iba/ib_types_h.html#robo895">ib_net64_t</a> ca_guid,\r
+ IN OUT <a href="../../iba/ib_ci_h.html#robo1153">ci_umv_buf_t</a> *p_umv_buf );\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> <strong>uvp_pre_open_ca_t</strong>() is implemented by vendor. It is the pre-ioctl routine\r
+ for the AL call <a href="../../iba/ib_al_h.html#robo164">ib_open_ca</a>() in user-mode.\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> ca_guid\r
+ [in] The HCA adapter's EUI64 identifier. Clients would use other\r
+ enumeration API's to locate all available adapters and their\r
+ guids in a system, e.g. GetCaGuids(), maintained by the IB\r
+ Access Layer.\r
+\r
+ p_umv_buf\r
+ [in out] On input, UAL provides this buffer template.\r
+ On return from this function, p_umv_buf contains any vendor-specific\r
+ record to be exchanged with the vendor's HCA driver.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> IB_SUCCESS\r
+ The pre-ioctl function succeeded.\r
+ IB_INSUFFICIENT_RESOURCES\r
+ Insufficient resources to satisfy request.\r
+ IB_INVALID_PARAMETER\r
+ Invalid GUID.\r
+</pre>\r
+</span><p><strong>PORTABILITY</strong></p>\r
+<span class="PORTABILITY"><pre> User Mode\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo1074">uvp_post_open_ca_t</a>, <a href="#robo1102">uvp_pre_query_ca</a>, <a href="#robo1076">uvp_post_query_ca_t</a>, <a href="#robo1098">uvp_pre_modify_ca</a>,\r
+ <a href="#robo1072">uvp_post_modify_ca_t</a>, <a href="#robo1086">uvp_pre_close_ca_t</a>, <a href="#robo1060">uvp_post_close_ca_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1101">[Functions]<a name="user2dmode20Verbs2fuvp5fpre5fquery5fav">\r
+user-mode Verbs/uvp_pre_query_av</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>uvp_pre_query_av</strong> -- Pre-ioctl operation for <a href="../../iba/ib_al_h.html#robo213">ib_query_ca</a>()\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef <a href="../../iba/ib_types_h.html#robo49">ib_api_status_t</a>\r
+(AL_API *<strong>uvp_pre_query_av</strong>) (\r
+ IN const ib_av_handle_t h_uvp_av,\r
+ IN OUT <a href="../../iba/ib_ci_h.html#robo1153">ci_umv_buf_t</a> *p_umv_buf );\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> <strong>uvp_pre_query_av</strong>() is implemented by vendor. It is the pre-ioctl routine\r
+ for the AL call <a href="../../iba/ib_al_h.html#robo212">ib_query_av</a>() in user-mode.\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_uvp_av\r
+ [in] Vendor's handle to the address vector in user-mode library\r
+ p_umv_buf\r
+ [in out] On input, UAL provides this buffer template.\r
+ On return from this function, p_umv_buf contains\r
+ any vendor-specific record to be exchanged with the vendor's\r
+ HCA driver.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> IB_SUCCESS\r
+ The pre-ioctl function succeeded.\r
+ IB_INVALID_AV_HANDLE\r
+ AV handle was invalid\r
+ IB_INSUFFICIENT_RESOURCES\r
+ Insufficient resources in Vendor library to complete the call.\r
+</pre>\r
+</span><p><strong>PORTABILITY</strong></p>\r
+<span class="PORTABILITY"><pre> User Mode\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo1087">uvp_pre_create_av</a>, <a href="#robo1061">uvp_post_create_av_t</a>, <a href="#robo1075">uvp_post_query_av_t</a>, <a href="#robo1097">uvp_pre_modify_av</a>,\r
+ <a href="#robo1071">uvp_post_modify_av_t</a>, <a href="#robo1092">uvp_pre_destroy_av</a>, <a href="#robo1066">uvp_post_destroy_av_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1102">[Functions]<a name="user2dmode20Verbs2fuvp5fpre5fquery5fca">\r
+user-mode Verbs/uvp_pre_query_ca</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>uvp_pre_query_ca</strong> -- Pre-ioctl operation for user-mode <a href="../../iba/ib_al_h.html#robo213">ib_query_ca</a>()\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef <a href="../../iba/ib_types_h.html#robo49">ib_api_status_t</a>\r
+(AL_API *<strong>uvp_pre_query_ca</strong>) (\r
+ IN ib_ca_handle_t h_uvp_ca,\r
+ IN <a href="../../iba/ib_types_h.html#robo60">ib_ca_attr_t</a> *p_ca_attr,\r
+ IN size_t byte_count,\r
+ IN <a href="../../iba/ib_ci_h.html#robo1153">ci_umv_buf_t</a> *p_umv_buf );\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> <strong>uvp_pre_query_ca</strong>() is implemented by vendor. It is the pre-ioctl routine\r
+ for the AL call <a href="../../iba/ib_al_h.html#robo213">ib_query_ca</a>() in user-mode.\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_uvp_ca\r
+ [in] Vendor's user-mode library handle to the open instance of the CA\r
+ p_ca_attr\r
+ [in] Pointer to the user's CA attribute buffer.\r
+ byte_count\r
+ [in] User-supplied size of the CA attribute buffer.\r
+ p_umv_buf\r
+ [in out] On input, UAL provides this buffer template.\r
+ On return from this function, p_umv_buf contains any vendor-specific\r
+ record to be exchanged with the vendor's HCA driver.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> IB_SUCCESS\r
+ The pre-ioctl function succeeded.\r
+ IB_INVALID_CA_HANDLE\r
+ CA handle is invalid\r
+ IB_INSUFFICIENT_RESOURCES\r
+ Insufficient resources to satisfy request.\r
+</pre>\r
+</span><p><strong>PORTABILITY</strong></p>\r
+<span class="PORTABILITY"><pre> User Mode\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo1100">uvp_pre_open_ca_t</a>, <a href="#robo1074">uvp_post_open_ca_t</a>, <a href="#robo1076">uvp_post_query_ca_t</a>, <a href="#robo1098">uvp_pre_modify_ca</a>,\r
+ <a href="#robo1072">uvp_post_modify_ca_t</a>, <a href="#robo1086">uvp_pre_close_ca_t</a>, <a href="#robo1060">uvp_post_close_ca_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1103">[Functions]<a name="user2dmode20Verbs2fuvp5fpre5fquery5fcq">\r
+user-mode Verbs/uvp_pre_query_cq</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>uvp_pre_query_cq</strong> -- Pre-ioctl to Query the number of entries\r
+ configured for the CQ.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef <a href="../../iba/ib_types_h.html#robo49">ib_api_status_t</a>\r
+(AL_API *<strong>uvp_pre_query_cq</strong>) (\r
+ IN const ib_cq_handle_t h_uvp_cq,\r
+ IN OUT uint32_t* const p_size,\r
+ IN OUT <a href="../../iba/ib_ci_h.html#robo1153">ci_umv_buf_t</a> *p_umv_buf );\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> <strong>uvp_pre_query_cq</strong>() is implemented by vendor. It is the pre-ioctl routine\r
+ for <a href="../../iba/ib_al_h.html#robo215">ib_query_cq</a>().\r
+ Can we always go to the kernel to query even if it is created\r
+ in vendor library in user-mode?\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_uvp_cq\r
+ [in] Vendor's Handle to the already created CQ (in user-mode library).\r
+\r
+ p_size\r
+ [out] Size of the CQ if processing ends in user-mode.\r
+\r
+ p_umv_buf\r
+ [in out] On input, UAL provides this buffer template.\r
+ On return from this function, p_umv_buf contains\r
+ any vendor-specific record to be exchanged with the vendor's\r
+ HCA driver.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> IB_SUCCESS\r
+ The operation was successful.\r
+ IB_INVALID_CQ_HANDLE\r
+ The CQ handle is invalid.\r
+ IB_INSUFFICIENT_RESOURCES\r
+ Insufficient resources in Vendor library to complete the call.\r
+ IB_VERBS_PROCESSING_DONE\r
+ The UVP fully processed the request. The post_query_cq handler\r
+ will not be invoked.\r
+</pre>\r
+</span><p><strong>PORTABILITY</strong></p>\r
+<span class="PORTABILITY"><pre> User mode.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo1088">uvp_pre_create_cq</a>, <a href="#robo1062">uvp_post_create_cq_t</a>, <a href="#robo1106">uvp_pre_resize_cq</a>,\r
+ <a href="#robo1081">uvp_post_resize_cq_t</a>, <a href="#robo1077">uvp_post_query_cq_t</a>, <a href="#robo1093">uvp_pre_destroy_cq</a>,\r
+ <a href="#robo1067">uvp_post_destroy_cq_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1104">[Functions]<a name="user2dmode20Verbs2fuvp5fpre5fquery5fmw">\r
+user-mode Verbs/uvp_pre_query_mw</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>uvp_pre_query_mw</strong> -- Pre-ioctl to Query a memory window\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef <a href="../../iba/ib_types_h.html#robo49">ib_api_status_t</a>\r
+(AL_API *<strong>uvp_pre_query_mw</strong>) (\r
+ IN const ib_mw_handle_t h_uvp_mw,\r
+ IN OUT <a href="../../iba/ib_ci_h.html#robo1153">ci_umv_buf_t</a> *p_umv_buf );\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> <strong>uvp_pre_query_mw</strong> is implemented by vendor. It is the pre-ioctl routine\r
+ for <a href="../../iba/ib_al_h.html#robo217">ib_query_mw</a>().\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_uvp_mw\r
+ [in] Vendor's Memory window handle (in user-mode library)\r
+ whose attributes are being retrieved.\r
+ p_umv_buf\r
+ [in out] On input, UAL provides this buffer template.\r
+ On return from this function, p_umv_buf contains\r
+ any vendor-specific record to be exchanged with the vendor's\r
+ HCA driver.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> IB_SUCCESS\r
+ The pre-ioctl call completed successfully.\r
+ IB_INVALID_MW_HANDLE\r
+ mw_handle supplied is an invalid handle.\r
+ IB_INSUFFICIENT_RESOURCES\r
+ Not enough resources to complete the request.\r
+</pre>\r
+</span><p><strong>PORTABILITY</strong></p>\r
+<span class="PORTABILITY"><pre> User mode\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo1089">uvp_pre_create_mw</a>, <a href="#robo1063">uvp_post_create_mw_t</a>, <a href="#robo1078">uvp_post_query_mw_t</a>,\r
+ <a href="#robo1052">uvp_bind_mw</a>, <a href="#robo1094">uvp_pre_destroy_mw</a>, <a href="#robo1068">uvp_post_destroy_mw_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1105">[Functions]<a name="user2dmode20Verbs2fuvp5fpre5fquery5fqp">\r
+user-mode Verbs/uvp_pre_query_qp</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>uvp_pre_query_qp</strong> -- Pre-ioctl function to Query the attributes of the QP\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef <a href="../../iba/ib_types_h.html#robo49">ib_api_status_t</a>\r
+(AL_API *<strong>uvp_pre_query_qp</strong>) (\r
+ IN ib_qp_handle_t h_uvp_qp,\r
+ IN OUT <a href="../../iba/ib_ci_h.html#robo1153">ci_umv_buf_t</a> *p_umv_buf );\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> <strong>uvp_pre_query_qp</strong>() is implemented by vendor. It is the pre-ioctl routine\r
+ for the AL call <a href="../../iba/ib_al_h.html#robo218">ib_query_qp</a>().\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_uvp_qp\r
+ [in] Vendor's handle to the QP (in user-mode library).\r
+ p_umv_buf\r
+ [in out] On input, UAL provides this buffer template.\r
+ On return from this function, p_umv_buf contains\r
+ any vendor-specific record to be exchanged with the vendor's\r
+ HCA driver.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> IB_SUCCESS\r
+ The pre-ioctl function succeeded.\r
+ IB_INVALID_QP_HANDLE\r
+ QP handle is invalid\r
+ IB_INSUFFICIENT_RESOURCES\r
+ Insufficient resources in Vendor library to complete the call.\r
+</pre>\r
+</span><p><strong>PORTABILITY</strong></p>\r
+<span class="PORTABILITY"><pre> User Mode\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo1090">uvp_pre_create_qp</a>, <a href="#robo1064">uvp_post_create_qp_t</a>, <a href="#robo1079">uvp_post_query_qp_t</a>, <a href="#robo1099">uvp_pre_modify_qp</a>,\r
+ <a href="#robo1073">uvp_post_modify_qp_t</a>, <a href="#robo1095">uvp_pre_destroy_qp</a>, <a href="#robo1069">uvp_post_destroy_qp_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1106">[Functions]<a name="user2dmode20Verbs2fuvp5fpre5fresize5fcq">\r
+user-mode Verbs/uvp_pre_resize_cq</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>uvp_pre_resize_cq</strong> -- Pre-ioctl function to resize a CQ.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef <a href="../../iba/ib_types_h.html#robo49">ib_api_status_t</a>\r
+(AL_API *<strong>uvp_pre_resize_cq</strong>) (\r
+ IN const ib_cq_handle_t h_uvp_cq,\r
+ IN OUT uint32_t* const p_size,\r
+ IN OUT <a href="../../iba/ib_ci_h.html#robo1153">ci_umv_buf_t</a> *p_umv_buf );\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> <strong>uvp_pre_resize_cq</strong>() is implemented by vendor to resize the CQ.\r
+ It is the pre-ioctl routine for ib_resize_cq().\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_uvp_cq\r
+ [in] Vendor's Handle to the already created CQ (in user-mode library).\r
+ p_size\r
+ [in out] On input, points to a variable containing the number\r
+ of CQ entries requested by the consumer.\r
+ On completion points to the size of the CQ that was resized by\r
+ the provider.\r
+ p_umv_buf\r
+ [in out] On input, UAL provides this buffer template.\r
+ On return from this function, p_umv_buf contains\r
+ any vendor-specific record to be exchanged with the vendor's\r
+ HCA driver.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> IB_SUCCESS\r
+ The operation was successful.\r
+ IB_INVALID_CQ_HANDLE\r
+ The CQ handle is invalid.\r
+ IB_INSUFFICIENT_RESOURCES\r
+ Insufficient resources to complete request.\r
+ IB_INVALID_CQ_SIZE\r
+ Requested CQ Size is not supported.\r
+ IB_OVERFLOW\r
+ The CQ has more entries than the resize request. The CQ is not\r
+ modified, and old entries still exist.\r
+</pre>\r
+</span><p><strong>PORTABILITY</strong></p>\r
+<span class="PORTABILITY"><pre> User mode.\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo1088">uvp_pre_create_cq</a>, <a href="#robo1062">uvp_post_create_cq_t</a>, <a href="#robo1081">uvp_post_resize_cq_t</a>,\r
+ <a href="#robo1103">uvp_pre_query_cq</a>, <a href="#robo1077">uvp_post_query_cq_t</a>, <a href="#robo1093">uvp_pre_destroy_cq</a>,\r
+ <a href="#robo1067">uvp_post_destroy_cq_t</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1107">[Functions]<a name="user2dmode20Verbs2fuvp5frearm5fcq">\r
+user-mode Verbs/uvp_rearm_cq</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>uvp_rearm_cq</strong> -- Invoke the Completion handler, on next entry added.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef <a href="../../iba/ib_types_h.html#robo49">ib_api_status_t</a>\r
+(AL_API *<strong>uvp_rearm_cq</strong>) (\r
+ IN const void* __ptr64 h_cq,\r
+ IN const boolean_t solicited );\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> This routine instructs the channel interface to invoke the completion\r
+ handler when the next completion queue entry is added to this CQ.\r
+ Please refer to Volume 1, of the InfiniBand specification for a complete\r
+ description.\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_cq\r
+ [in] Type-cast as appropriate for user/kernel mode, this is the\r
+ CQ handle for the completion queue being armed.\r
+ solicited\r
+ [in] A boolean flag indicating whether the request is to generate a\r
+ notification on the next entry or on the next solicited entry\r
+ being added to the completion queue.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> IB_SUCCESS\r
+ The notification request was registered successfully.\r
+ IB_INVALID_CQ_HANDLE\r
+ cq_handle supplied is not a valid handle.\r
+</pre>\r
+</span><p><strong>PORTABILITY</strong></p>\r
+<span class="PORTABILITY"><pre> Kernel and User mode\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo1088">uvp_pre_create_cq</a>, <a href="#robo1062">uvp_post_create_cq_t</a>, <a href="#robo1055">uvp_peek_cq</a>, <a href="#robo1056">uvp_poll_cq</a>,\r
+ <a href="#robo1108">uvp_rearm_n_cq</a>\r
+</pre>\r
+</span>\r
+<hr />\r
+\r
+<h2><a name="robo1108">[Functions]<a name="user2dmode20Verbs2fuvp5frearm5fn5fcq">\r
+user-mode Verbs/uvp_rearm_n_cq</a></h2>\r
+\r
+<p>[<a href="#robo_top_of_doc">top</a>][<a href="../../robo_functions.html#top">index</a>]</p>\r
+<p><strong>NAME</strong></p>\r
+<span class="NAME"><pre> <strong>uvp_rearm_n_cq</strong> -- Invoke the Completion handler, when next\r
+ N completions have been added to this CQ.\r
+</pre>\r
+</span><p><strong>SYNOPSIS</strong></p>\r
+<span class="SYNOPSIS"><pre>typedef <a href="../../iba/ib_types_h.html#robo49">ib_api_status_t</a>\r
+(AL_API *<strong>uvp_rearm_n_cq</strong>) (\r
+ IN const void* __ptr64 h_cq,\r
+ IN const uint32_t n_cqes );\r
+</pre>\r
+</span><p><strong>DESCRIPTION</strong></p>\r
+<span class="DESCRIPTION"><pre> This routine instructs the channel interface to invoke the completion\r
+ handler when the next N completions are added to this CQ.\r
+</pre>\r
+</span><p><strong>PARAMETERS</strong></p>\r
+<span class="PARAMETERS"><pre> h_cq\r
+ [in] Type-cast as appropriate for user/kernel mode, this is the\r
+ CQ handle for the completion queue being armed.\r
+ n_cqes\r
+ [in] The number of completion queue entries to be added to the\r
+ completion queue before notifying the client. This value must\r
+ greater than or equal to one and less than or equal to the size\r
+ of the completion queue.\r
+</pre>\r
+</span><p><strong>RETURN VALUE</strong></p>\r
+<span class="RETURN_VALUE"><pre> IB_SUCCESS\r
+ The notification request was registered successfully.\r
+ IB_INVALID_CQ_HANDLE\r
+ cq_handle supplied is not a valid handle.\r
+ IB_INVALID_PARAMETER\r
+ The requested number of completion queue entries was invalid.\r
+</pre>\r
+</span><p><strong>PORTABILITY</strong></p>\r
+<span class="PORTABILITY"><pre> Kernel and User mode\r
+</pre>\r
+</span><p><strong>SEE ALSO</strong></p>\r
+<span class="SEE_ALSO"><pre> <a href="#robo1088">uvp_pre_create_cq</a>, <a href="#robo1062">uvp_post_create_cq_t</a>, <a href="#robo1055">uvp_peek_cq</a>, <a href="#robo1056">uvp_poll_cq</a>,\r
+ <a href="#robo1107">uvp_rearm_cq</a>\r
+</pre>\r
+</span>\r
+</body>\r
+</html>\r