[IPoIB] ip_packet.h moved to globally shared inc/kernel
[mirror/winof/.git] / docs / iba / ib_ci_h.html
1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">\r
2 <html>\r
3 <head>\r
4 <link rel="stylesheet" href="../robodoc.css" type="text/css">\r
5 <title>./inc_doc/iba/ib_ci_h.html</title>\r
6 <!-- Source: ./inc/iba/ib_ci.h -->\r
7 <!-- Generated with ROBODoc Version 4.99.17 (Aug  2 2005) -->\r
8 </head>\r
9 <body bgcolor="#FFFFFF">\r
10 <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.17 on Sun Aug 27 2006 10:20:31\r
11 <br />\r
12 <hr />\r
13 \r
14 <h2><a name="robo39">[Modules]<a name="IB5fAPI2fVerbs">\r
15 IB_API/Verbs</a></h2>\r
16 \r
17 <p>[<a href="#robo_top_of_doc">top</a>][<a href="../robo_modules.html#top">index</a>]</p>\r
18 <p><strong>NAME</strong></p>\r
19 <span class="NAME"><pre>       <strong>Verbs</strong> -- <strong>Verbs</strong> implements the hardware and software glue to the OS layer.\r
20 </pre>\r
21 </span><p><strong>COPYRIGHT</strong></p>\r
22 <span class="COPYRIGHT"><pre>       Copyright© 2001 Intel Corporation - All Rights Reserved.\r
23 </pre>\r
24 </span><p><strong>DESCRIPTION</strong></p>\r
25 <span class="DESCRIPTION"><pre>       The <strong>Verbs</strong> API definition defines the interface mechanism between an IHV\r
26        supplied driver component. It implements verbs functionality as defined\r
27        Volume 1, of the InfiniBand(tm) specifications.\r
28 </pre>\r
29 </span><p><strong>AUTHOR</strong></p>\r
30 <span class="AUTHOR"><pre>       Intel Corporation\r
31 </pre>\r
32 </span><p><strong>CREATION DATE</strong></p>\r
33 <span class="CREATION_DATE"><pre>       XX.XX.XX\r
34 </pre>\r
35 </span><p><strong>NOTES</strong></p>\r
36 <span class="NOTES"><pre>       Evolving Spec!!\r
37        Invalid Handle checks are a mere signature checks in kernel mode. Hence\r
38        passing invalid pointer would lead to panics in the kernel. For user mode\r
39        These are verified for most verbs that need to take a kernel transition.\r
40        <strong>Verbs</strong> those are entirely done in user mode that would affect speed path\r
41        do not perform consistency checks. So invalid pointers would lead to\r
42        application crash with core dumps.\r
43 </pre>\r
44 </span>\r
45 <hr />\r
46 \r
47 <h2><a name="robo1117">[Functions]<a name="Verbs2fci5falloc5fmlnx5ffmr">\r
48 Verbs/ci_alloc_mlnx_fmr</a></h2>\r
49 \r
50 <p>[<a href="#robo_top_of_doc">top</a>][<a href="#robo39">parent</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
51 <p><strong>NAME</strong></p>\r
52 <span class="NAME"><pre>       <strong>ci_alloc_mlnx_fmr</strong> -- Allocate a Mellanox fast memory region with the HCA.\r
53 </pre>\r
54 </span><p><strong>SYNOPSIS</strong></p>\r
55 <span class="SYNOPSIS"><pre>typedef <a href="./ib_types_h.html#robo49">ib_api_status_t</a>\r
56 (*<strong>ci_alloc_mlnx_fmr</strong>) (\r
57         IN              const   ib_pd_handle_t                          h_pd,\r
58         IN                              <a href="./ib_types_h.html#robo265">mlnx_fmr_create_t</a> const         *p_fmr_ctreate,\r
59                 OUT                     mlnx_fmr_handle_t* const        ph_fmr);\r
60 </pre>\r
61 </span><p><strong>DESCRIPTION</strong></p>\r
62 <span class="DESCRIPTION"><pre>       //TODO \r
63 </pre>\r
64 </span><p><strong>PARAMETERS</strong></p>\r
65 <span class="PARAMETERS"><pre>       h_pd\r
66                [in] Handle to the PD on which fast memory is being registered\r
67        mr_access_flags\r
68                [in] mask of the access rights to the memory region\r
69        p_fmr_attr\r
70                [in] attribute of this fmr\r
71        ph_fmr\r
72                [out] Handle to the fast memory region. This handle is used when\r
73                mapin/unmaping fmr\r
74 </pre>\r
75 </span><p><strong>RETURN VALUE</strong></p>\r
76 <span class="RETURN_VALUE"><pre>       IB_SUCCESS\r
77                Registration with the adapter was successful.\r
78        IB_INSUFFICIENT_RESOURCES\r
79                Insufficient resources to satisfy request.\r
80        IB_INVALID_PARAMETER\r
81                One of the input pointers was NULL.\r
82        IB_INVALID_PD_HANDLE\r
83                Invalid pd handle\r
84        IB_INVALID_PERMISSION\r
85                Invalid access rights.\r
86 </pre>\r
87 </span><p><strong>NOTES</strong></p>\r
88 <span class="NOTES"><pre>       The Alloc operation does not map nor pinned any memory.\r
89        In order to use the FMR the user need to call map\r
90 \r
91        This is a Mellanox specific extension to verbs.\r
92 </pre>\r
93 </span><p><strong>SEE ALSO</strong></p>\r
94 <span class="SEE_ALSO"><pre>       <a href="#robo1129">ci_dealloc_mlnx_fmr</a>, <a href="#robo1141">ci_map_phys_mlnx_fmr</a>, <a href="#robo1165">ci_unmap_mlnx_fmr</a>\r
95 </pre>\r
96 </span>\r
97 <hr />\r
98 \r
99 <h2><a name="robo1118">[Functions]<a name="Verbs2fci5fallocate5fpd">\r
100 Verbs/ci_allocate_pd</a></h2>\r
101 \r
102 <p>[<a href="#robo_top_of_doc">top</a>][<a href="#robo39">parent</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
103 <p><strong>NAME</strong></p>\r
104 <span class="NAME"><pre>       <strong>ci_allocate_pd</strong> -- Allocate a protection domain for this adapter.\r
105 </pre>\r
106 </span><p><strong>SYNOPSIS</strong></p>\r
107 <span class="SYNOPSIS"><pre>typedef <a href="./ib_types_h.html#robo49">ib_api_status_t</a>\r
108 (*<strong>ci_allocate_pd</strong>) (\r
109         IN              const   ib_ca_handle_t                          h_ca,\r
110         IN              const   <a href="./ib_types_h.html#robo165">ib_pd_type_t</a>                            type,\r
111                 OUT                     ib_pd_handle_t                          *ph_pd,\r
112         IN      OUT                     <a href="#robo1164">ci_umv_buf_t</a>                            *p_umv_buf OPTIONAL );\r
113 </pre>\r
114 </span><p><strong>DESCRIPTION</strong></p>\r
115 <span class="DESCRIPTION"><pre>       This routine allocates a protection domain handle, which is later\r
116        used to create QP's, Register Memory Regions, Bind Memory Windows\r
117        and address vectors. Protection domain has no InfiniBand architectural\r
118        attributes but the OS implements policy on its usage and allocation.\r
119 </pre>\r
120 </span><p><strong>PARAMETERS</strong></p>\r
121 <span class="PARAMETERS"><pre>       h_ca\r
122                [in] Handle returned by <a href="#robo1147">ci_open_ca</a>()\r
123 \r
124        type\r
125                [in] Type of the protection domain.  CA vendors may use this\r
126                information to optimize how the PD is allocated.\r
127 \r
128        ph_pd\r
129                [out] The handle to the newly created protection domain\r
130 \r
131        p_umv_buf\r
132                [in/out] Vendor specific parameter to support user mode IO.\r
133 </pre>\r
134 </span><p><strong>RETURN VALUE</strong></p>\r
135 <span class="RETURN_VALUE"><pre>       IB_SUCCESS\r
136                PD is successfully allocated and the ph_pd is valid.\r
137 \r
138        IB_INSUFFICIENT_RESOURCES\r
139                No more PD's available for this adapter.\r
140 \r
141        IB_INVALID_CA_HANDLE\r
142                HCA handle is not valid\r
143 </pre>\r
144 </span><p><strong>SEE ALSO</strong></p>\r
145 <span class="SEE_ALSO"><pre>       <a href="#robo1130">ci_deallocate_pd</a>\r
146 </pre>\r
147 </span>\r
148 <hr />\r
149 \r
150 <h2><a name="robo1119">[Functions]<a name="Verbs2fci5fasync5fevent5fcb5ft">\r
151 Verbs/ci_async_event_cb_t</a></h2>\r
152 \r
153 <p>[<a href="#robo_top_of_doc">top</a>][<a href="#robo39">parent</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
154 <p><strong>NAME</strong></p>\r
155 <span class="NAME"><pre>       <strong>ci_async_event_cb_t</strong>\r
156 </pre>\r
157 </span><p><strong>DESCRIPTION</strong></p>\r
158 <span class="DESCRIPTION"><pre>       Asynchronous event notification routine.\r
159 </pre>\r
160 </span><p><strong>SYNOPSIS</strong></p>\r
161 <span class="SYNOPSIS"><pre>typedef void\r
162 (*<strong>ci_async_event_cb_t</strong>)(\r
163         IN      const   <a href="./ib_types_h.html#robo1169">ib_event_rec_t</a>* const                   p_event_record );\r
164 </pre>\r
165 </span><p><strong>PARAMETERS</strong></p>\r
166 <span class="PARAMETERS"><pre>       p_event_record\r
167                [in] Information describing the type of event that has occurred.\r
168 </pre>\r
169 </span><p><strong>NOTES</strong></p>\r
170 <span class="NOTES"><pre>       This routine is called when an asynchronous event is generated by a\r
171        channel adapter.  The event notification record passed has relevant\r
172        information on the type of the event, the source that caused the event,\r
173        and the context associated.\r
174 </pre>\r
175 </span>\r
176 <hr />\r
177 \r
178 <h2><a name="robo1120">[Functions]<a name="Verbs2fci5fattach5fmcast">\r
179 Verbs/ci_attach_mcast</a></h2>\r
180 \r
181 <p>[<a href="#robo_top_of_doc">top</a>][<a href="#robo39">parent</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
182 <p><strong>NAME</strong></p>\r
183 <span class="NAME"><pre>       <strong>ci_attach_mcast</strong> -- Attach a queue pair to a multicast group\r
184 </pre>\r
185 </span><p><strong>SYNOPSIS</strong></p>\r
186 <span class="SYNOPSIS"><pre>typedef <a href="./ib_types_h.html#robo49">ib_api_status_t</a>\r
187 (*<strong>ci_attach_mcast</strong>) (\r
188         IN              const   ib_qp_handle_t                          h_qp,\r
189         IN              const   <a href="./ib_types_h.html#robo861">ib_gid_t</a>                                        *p_mcast_gid,\r
190         IN              const   <a href="./ib_types_h.html#robo899">ib_net16_t</a>                                      mcast_lid,\r
191                 OUT                     ib_mcast_handle_t                       *ph_mcast,\r
192         IN      OUT                     <a href="#robo1164">ci_umv_buf_t</a>                            *p_umv_buf OPTIONAL );\r
193 </pre>\r
194 </span><p><strong>DESCRIPTION</strong></p>\r
195 <span class="DESCRIPTION"><pre>       This routine attaches the given qp_handle to a multicast gid as specified\r
196        by mcast_gid parameter.\r
197 </pre>\r
198 </span><p><strong>PARAMETERS</strong></p>\r
199 <span class="PARAMETERS"><pre>       h_qp\r
200                [in] Queue pair handle which needs to be added to the multicast group\r
201                on the adapter.\r
202        mcast_lid\r
203                [in] The multicast group LID value.\r
204        p_mcast_gid\r
205                [in] IPv6 address associated with this multicast group.\r
206        ph_mcast\r
207                [out] Multicast handle holding the association of this queue pair\r
208                to the multicast group.\r
209        p_umv_buf\r
210                [in out] Vendor specific parameter to support user mode IO.\r
211 </pre>\r
212 </span><p><strong>RETURN VALUE</strong></p>\r
213 <span class="RETURN_VALUE"><pre>       IB_SUCCESS\r
214                The queue pair handle was successfully added to the multicast\r
215                group.\r
216        IB_INVALID_QP_HANDLE\r
217                qp_handle supplied is invalid.\r
218        IB_INVALID_SERVICE_TYPE\r
219                Queue pair handle supplied is not of unreliable datagram type.\r
220        IB_INVALID_GID\r
221                The supplied addr is not a valid multicast ipv6 address.\r
222        IB_INVALID_LID\r
223                The supplied lid is not a valid multicast lid.\r
224        IB_UNSUPPORTED\r
225                Multicast is not supported by this HCA.\r
226        IB_INSUFFICIENT_RESOURCES\r
227                Insufficient resources to complete request.\r
228        IB_INVALID_PARAMETER\r
229                One of the parameters was NULL.\r
230 </pre>\r
231 </span><p><strong>SEE ALSO</strong></p>\r
232 <span class="SEE_ALSO"><pre>       <a href="#robo1127">ci_create_qp</a>, <a href="#robo1136">ci_detach_mcast</a>\r
233 </pre>\r
234 </span>\r
235 <hr />\r
236 \r
237 <h2><a name="robo1121">[Functions]<a name="Verbs2fci5fbind5fmw">\r
238 Verbs/ci_bind_mw</a></h2>\r
239 \r
240 <p>[<a href="#robo_top_of_doc">top</a>][<a href="#robo39">parent</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
241 <p><strong>NAME</strong></p>\r
242 <span class="NAME"><pre>       <strong>ci_bind_mw</strong> -- Bind a memory window to a memory region.\r
243 </pre>\r
244 </span><p><strong>SYNOPSIS</strong></p>\r
245 <span class="SYNOPSIS"><pre>typedef <a href="./ib_types_h.html#robo49">ib_api_status_t</a>\r
246 (*<strong>ci_bind_mw</strong>) (\r
247         IN              const   ib_mw_handle_t                          h_mw,\r
248         IN              const   ib_qp_handle_t                          h_qp,\r
249         IN                              <a href="./ib_types_h.html#robo59">ib_bind_wr_t</a>* const                     p_mw_bind,\r
250                 OUT                     net32_t* const                          p_rkey );\r
251 </pre>\r
252 </span><p><strong>DESCRIPTION</strong></p>\r
253 <span class="DESCRIPTION"><pre>       This routine posts a request to bind a memory window to a registered\r
254        memory region. If the queue pair was created with selectable signaling,\r
255        once the operation is completed successfully then a completion queue entry\r
256        is generated indicating the bind operation has completed. The IB_POST_FENCE\r
257        option could be specified to cause the requestor to wait until outstanding\r
258        RDMA operations can be completed.\r
259 </pre>\r
260 </span><p><strong>PARAMETERS</strong></p>\r
261 <span class="PARAMETERS"><pre>       h_mw\r
262                [in] Handle to memory window that needs to be bound to a memory region.\r
263        h_qp\r
264                [in] Queue Pair to which this bind request is to be posted.\r
265        p_mw_bind\r
266                [in] Input parameters for this bind request, consisting of virtual\r
267                addr range of bind request etc.\r
268        p_rkey\r
269                [out] On successful completion, the new R_KEY is returned.\r
270                VPD is required to give this in the expected ordering on the wire. When\r
271                rkey's are exchanged between remote nodes, no swapping of this data\r
272                will be performed.\r
273 </pre>\r
274 </span><p><strong>RETURN VALUE</strong></p>\r
275 <span class="RETURN_VALUE"><pre>       IB_SUCCESS\r
276                The memory bind operation was posted successfully.\r
277        IB_INSUFFICIENT_RESOURCES\r
278                Insufficient resources to complete the request.\r
279                No more WQE's to post this request\r
280                No more free WQE's to post this request\r
281        IB_INVALID_MW_HANDLE\r
282                memw_handle supplied is an invalid memory window handle.\r
283        IB_INVALID_PERMISSION\r
284                Invalid access rights specified in request\r
285        IB_INVALID_SERVICE_TYPE\r
286                Invalid service type for this qp_handle.\r
287        IB_INVALID_PARAMETER\r
288                One of the pointers was not valid.\r
289        IB_INVALID_RKEY\r
290                R_KEY specified is invalid for the memory region being bound.\r
291        IB_INVALID_QP_HANDLE\r
292                h_qp supplied was an invalid QP handle.\r
293 </pre>\r
294 </span><p><strong>NOTES</strong></p>\r
295 <span class="NOTES"><pre>       - A previously bound memory window can be bound to the same or different\r
296        memory region.\r
297 \r
298        - A bind operation with length of 0, invalidates any previous binding\r
299        and returns an R_KEY in the unbound state.\r
300 </pre>\r
301 </span><p><strong>SEE ALSO</strong></p>\r
302 <span class="SEE_ALSO"><pre>       <a href="#robo1126">ci_create_mw</a>\r
303 </pre>\r
304 </span>\r
305 <hr />\r
306 \r
307 <h2><a name="robo1122">[Functions]<a name="Verbs2fci5fclose5fca">\r
308 Verbs/ci_close_ca</a></h2>\r
309 \r
310 <p>[<a href="#robo_top_of_doc">top</a>][<a href="#robo39">parent</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
311 <p><strong>NAME</strong></p>\r
312 <span class="NAME"><pre>       <strong>ci_close_ca</strong> -- Close access to adapter via this h_ca\r
313 </pre>\r
314 </span><p><strong>SYNOPSIS</strong></p>\r
315 <span class="SYNOPSIS"><pre>typedef <a href="./ib_types_h.html#robo49">ib_api_status_t</a>\r
316 (*<strong>ci_close_ca</strong>) (\r
317         IN              ib_ca_handle_t  h_ca );\r
318 </pre>\r
319 </span><p><strong>DESCRIPTION</strong></p>\r
320 <span class="DESCRIPTION"><pre>       This routine is called when the client no longer wishes to use HCA\r
321        resources obtained via this h_ca. All resources allocated as part\r
322        this handle during the <a href="#robo1147">ci_open_ca</a> are destroyed.\r
323 </pre>\r
324 </span><p><strong>PARAMETERS</strong></p>\r
325 <span class="PARAMETERS"><pre>       h_ca\r
326                [in] CA handle returned via the <a href="#robo1147">ci_open_ca</a>() call.\r
327 </pre>\r
328 </span><p><strong>RETURN VALUE</strong></p>\r
329 <span class="RETURN_VALUE"><pre>       IB_SUCCESS\r
330                The intend to destroy is registered. No further calls for\r
331                completion or async event will be sent to this instance. When it is\r
332                appropriate to destroy this instance, the event h_kevent is signaled.\r
333        IB_RESOURCE_BUSY\r
334                Some resource allocated via this handle is not freed.\r
335        IB_INVALID_CA_HANDLE\r
336                h_ca is invalid\r
337 </pre>\r
338 </span><p><strong>NOTES</strong></p>\r
339 <span class="NOTES"><pre>       This call cannot be called from any of the notification functions invoked\r
340        by the <a href="#robo39">Verbs</a> driver. For e.g. the completion handler or the async error\r
341        callback provided during the <a href="#robo1147">ci_open_ca</a>() call. The call will block until\r
342        all references to this adapter object is closed which includes all the\r
343        pending callbacks returning back to the verbs provider driver.\r
344 \r
345        Resources allocated during the <a href="#robo1147">ci_open_ca</a>() is deallocated. Other resource\r
346        cleanup are responsibility of the consumer .\r
347 </pre>\r
348 </span><p><strong>SEE ALSO</strong></p>\r
349 <span class="SEE_ALSO"><pre>       <a href="#robo1147">ci_open_ca</a>\r
350 </pre>\r
351 </span>\r
352 <hr />\r
353 \r
354 <h2><a name="robo1123">[Functions]<a name="Verbs2fci5fcompletion5fcb5ft">\r
355 Verbs/ci_completion_cb_t</a></h2>\r
356 \r
357 <p>[<a href="#robo_top_of_doc">top</a>][<a href="#robo39">parent</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
358 <p><strong>NAME</strong></p>\r
359 <span class="NAME"><pre>       <strong>ci_completion_cb_t</strong> -- Completion Notification callback.\r
360 </pre>\r
361 </span><p><strong>SYNOPSIS</strong></p>\r
362 <span class="SYNOPSIS"><pre>typedef void\r
363 (*<strong>ci_completion_cb_t</strong>)(\r
364         IN      void    *cq_context );\r
365 </pre>\r
366 </span><p><strong>DESCRIPTION</strong></p>\r
367 <span class="DESCRIPTION"><pre>       This function prototype indicates the parameter passed to <a href="#robo1147">ci_open_ca</a>()\r
368        to receive completion callbacks.\r
369 </pre>\r
370 </span><p><strong>PARAMETERS</strong></p>\r
371 <span class="PARAMETERS"><pre>       cq_context\r
372                [in] Completion queue context passed during the <a href="#robo1125">ci_create_cq</a>\r
373 </pre>\r
374 </span><p><strong>RETURN VALUE</strong></p>\r
375 <span class="RETURN_VALUE"><pre>       None\r
376 </pre>\r
377 </span><p><strong>NOTES</strong></p>\r
378 <span class="NOTES"><pre>       The consumer only gets the cq_context and ca_context. It is the client\r
379        responsibility to store the cq_handle in the context after the creation\r
380        time. So it can call <a href="#robo1149">ci_poll_cq</a>() after the arrival of the notification.\r
381 </pre>\r
382 </span><p><strong>SEE ALSO</strong></p>\r
383 <span class="SEE_ALSO"><pre>       <a href="#robo1147">ci_open_ca</a>, <a href="#robo1125">ci_create_cq</a>\r
384 </pre>\r
385 </span>\r
386 <hr />\r
387 \r
388 <h2><a name="robo1124">[Functions]<a name="Verbs2fci5fcreate5fav">\r
389 Verbs/ci_create_av</a></h2>\r
390 \r
391 <p>[<a href="#robo_top_of_doc">top</a>][<a href="#robo39">parent</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
392 <p><strong>NAME</strong></p>\r
393 <span class="NAME"><pre>       <strong>ci_create_av</strong> -- Create an address vector for use in UD.\r
394 </pre>\r
395 </span><p><strong>SYNOPSIS</strong></p>\r
396 <span class="SYNOPSIS"><pre>typedef <a href="./ib_types_h.html#robo49">ib_api_status_t</a>\r
397 (*<strong>ci_create_av</strong>) (\r
398         IN              const   ib_pd_handle_t                          h_pd,\r
399         IN              const   <a href="./ib_types_h.html#robo57">ib_av_attr_t</a>                            *p_av_attr,\r
400                 OUT                     ib_av_handle_t                          *ph_av,\r
401         IN      OUT                     <a href="#robo1164">ci_umv_buf_t</a>                            *p_umv_buf OPTIONAL );\r
402 </pre>\r
403 </span><p><strong>DESCRIPTION</strong></p>\r
404 <span class="DESCRIPTION"><pre>       This routine creates an address vector for use in unreliable datagram\r
405        queue pairs. The information necessary to create the address vector\r
406        handle is supplied in the <a href="./ib_types_h.html#robo57">ib_av_attr_t</a> parameter.\r
407 </pre>\r
408 </span><p><strong>PARAMETERS</strong></p>\r
409 <span class="PARAMETERS"><pre>       h_pd\r
410                [in] Protection domain to which this av is associated.\r
411        p_av_attr\r
412                [in] Parameters to create the address vector handle\r
413        ph_av\r
414                [out] Handle to use for datagram sends.\r
415        p_umv_buf\r
416                [in out] Vendor specific parameter to support user mode IO.\r
417 </pre>\r
418 </span><p><strong>RETURN VALUE</strong></p>\r
419 <span class="RETURN_VALUE"><pre>       IB_SUCCESS\r
420                The create operation was successful\r
421        IB_INSUFFICIENT_RESOURCES\r
422                No more address handles are available\r
423        IB_INVALID_PD_HANDLE\r
424                The specified protection domain handle is invalid\r
425        IB_INVALID_PORT\r
426                Invalid port number supplied.\r
427        IB_INVALID_PARAMETER\r
428                One of the p_av_attr or p_av_attr was NULL.\r
429 </pre>\r
430 </span><p><strong>NOTES</strong></p>\r
431 <span class="NOTES"><pre>       The values in the p_av_attr is not validated for correctness. The values\r
432        in the attribute such as port number, protection domain etc are also\r
433        validated during processing by the channel adapter. If the attribute\r
434        validation fails a processing error IB_WCS_LOCAL_OP_ERR.\r
435 </pre>\r
436 </span><p><strong>SEE ALSO</strong></p>\r
437 <span class="SEE_ALSO"><pre>       <a href="#robo1118">ci_allocate_pd</a>\r
438 </pre>\r
439 </span>\r
440 <hr />\r
441 \r
442 <h2><a name="robo1125">[Functions]<a name="Verbs2fci5fcreate5fcq">\r
443 Verbs/ci_create_cq</a></h2>\r
444 \r
445 <p>[<a href="#robo_top_of_doc">top</a>][<a href="#robo39">parent</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
446 <p><strong>NAME</strong></p>\r
447 <span class="NAME"><pre>       <strong>ci_create_cq</strong> -- Create a completion queue (CQ) on the specified HCA.\r
448 </pre>\r
449 </span><p><strong>SYNOPSIS</strong></p>\r
450 <span class="SYNOPSIS"><pre>typedef <a href="./ib_types_h.html#robo49">ib_api_status_t</a>\r
451 (*<strong>ci_create_cq</strong>) (\r
452         IN              const   ib_ca_handle_t                          h_ca,\r
453         IN              const   void                                            *cq_context,\r
454         IN      OUT                     uint32_t* const                         p_size,\r
455                 OUT                     ib_cq_handle_t                          *ph_cq,\r
456         IN      OUT                     <a href="#robo1164">ci_umv_buf_t</a>                            *p_umv_buf OPTIONAL );\r
457 </pre>\r
458 </span><p><strong>DESCRIPTION</strong></p>\r
459 <span class="DESCRIPTION"><pre>       The consumer must specify the minimum number of entries in the CQ. The\r
460        exact number of entries the Channel Interface created is returned to the\r
461        client. If the requested number of entries is larger than what this\r
462        HCA can support, an error is returned.\r
463 </pre>\r
464 </span><p><strong>PARAMETERS</strong></p>\r
465 <span class="PARAMETERS"><pre>       h_ca\r
466                [in] A handle to the open HCA\r
467        cq_context\r
468                [in] The context that is passed during the completion callbacks.\r
469        p_size\r
470                [in out] Points to a variable containing the number of CQ entries\r
471                requested by the consumer. On completion points to the size of the\r
472                CQ that was created by the provider.\r
473        ph_cq\r
474                [out] Handle to the newly created CQ on successful creation.\r
475        p_umv_buf\r
476                [in out] Vendor specific parameter to support user mode IO.\r
477 </pre>\r
478 </span><p><strong>RETURN VALUE</strong></p>\r
479 <span class="RETURN_VALUE"><pre>       IB_SUCCESS\r
480                The operation was successful.\r
481        IB_INVALID_CA_HANDLE\r
482                The h_ca passed is invalid.\r
483        IB_INSUFFICIENT_RESOURCES\r
484                Insufficient resources to complete request.\r
485        IB_INVALID_CQ_SIZE\r
486                Requested CQ Size is not supported.\r
487        IB_INVALID_PARAMETER\r
488                one of the parameters was NULL.\r
489 </pre>\r
490 </span><p><strong>NOTES</strong></p>\r
491 <span class="NOTES"><pre>       The consumer would need a way to retrieve the cq_handle associated with\r
492        context being returned, so it can perform <a href="#robo1149">ci_poll_cq</a>() to retrieve\r
493        completion queue entries. The handle as such is not being passed, since\r
494        there is no information in the handle that is visible to the consumer.\r
495        Passing a context directly would help avoid any reverse lookup that the\r
496        consumer would need to perform in order to identify it's own internal\r
497        data-structures needed to process this completion completely.\r
498 </pre>\r
499 </span><p><strong>SEE ALSO</strong></p>\r
500 <span class="SEE_ALSO"><pre>       <a href="#robo1133">ci_destroy_cq</a>, <a href="#robo1154">ci_query_cq</a>, <a href="#robo1161">ci_resize_cq</a>\r
501 </pre>\r
502 </span>\r
503 <hr />\r
504 \r
505 <h2><a name="robo1126">[Functions]<a name="Verbs2fci5fcreate5fmw">\r
506 Verbs/ci_create_mw</a></h2>\r
507 \r
508 <p>[<a href="#robo_top_of_doc">top</a>][<a href="#robo39">parent</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
509 <p><strong>NAME</strong></p>\r
510 <span class="NAME"><pre>       <strong>ci_create_mw</strong> -- Create a memory window entry for later use\r
511 </pre>\r
512 </span><p><strong>SYNOPSIS</strong></p>\r
513 <span class="SYNOPSIS"><pre>typedef <a href="./ib_types_h.html#robo49">ib_api_status_t</a>\r
514 (*<strong>ci_create_mw</strong>) (\r
515         IN              const   ib_pd_handle_t                          h_pd,\r
516                 OUT                     net32_t* const                          p_rkey,\r
517                 OUT                     ib_mw_handle_t                          *ph_mw,\r
518         IN      OUT                     <a href="#robo1164">ci_umv_buf_t</a>                            *p_umv_buf OPTIONAL );\r
519 </pre>\r
520 </span><p><strong>DESCRIPTION</strong></p>\r
521 <span class="DESCRIPTION"><pre>       This routine allocates a memory window. This window entry cannot be used\r
522        for remote access unless this window is bound to a memory region\r
523        via the <a href="#robo1121">ci_bind_mw</a> call.\r
524 </pre>\r
525 </span><p><strong>PARAMETERS</strong></p>\r
526 <span class="PARAMETERS"><pre>       h_pd\r
527                [in] Protection domain handle to use for this memory window\r
528        p_rkey\r
529                [out] Remote access key that can be exchanged with a remote node to\r
530                perform RDMA transactions on this memory window. This R_KEY is still not\r
531                bound to any memory regions, until a successful call to <a href="#robo1121">ci_bind_mw</a>.\r
532                VPD is required to give this in the expected ordering on the wire. When\r
533                rkey's are exchanged between remote nodes, no swapping of this data\r
534                will be performed.\r
535        ph_mw\r
536                [out] Handle to the newly created memory window.\r
537        p_umv_buf\r
538                [in out] Vendor specific parameter to support user mode IO.\r
539 </pre>\r
540 </span><p><strong>RETURN VALUE</strong></p>\r
541 <span class="RETURN_VALUE"><pre>       IB_SUCCESS\r
542                The memory window allocation completed successfully.\r
543        IB_INSUFFICIENT_RESOURCES\r
544                Not enough resources to complete the request.\r
545        IB_INVALID_PD_HANDLE\r
546                pd_handle supplied is invalid.\r
547        IB_INVALID_PARAMETER\r
548                One of the pointers was not valid.\r
549 </pre>\r
550 </span><p><strong>SEE ALSO</strong></p>\r
551 <span class="SEE_ALSO"><pre>       <a href="#robo1134">ci_destroy_mw</a>, <a href="#robo1156">ci_query_mw</a>, <a href="#robo1121">ci_bind_mw</a>\r
552 </pre>\r
553 </span>\r
554 <hr />\r
555 \r
556 <h2><a name="robo1127">[Functions]<a name="Verbs2fci5fcreate5fqp">\r
557 Verbs/ci_create_qp</a></h2>\r
558 \r
559 <p>[<a href="#robo_top_of_doc">top</a>][<a href="#robo39">parent</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
560 <p><strong>NAME</strong></p>\r
561 <span class="NAME"><pre>       <strong>ci_create_qp</strong> -- Create a Queue Pair for the specified HCA\r
562 </pre>\r
563 </span><p><strong>SYNOPSIS</strong></p>\r
564 <span class="SYNOPSIS"><pre>typedef <a href="./ib_types_h.html#robo49">ib_api_status_t</a>\r
565 (*<strong>ci_create_qp</strong>) (\r
566         IN              const   ib_pd_handle_t                          h_pd,\r
567         IN              const   void                                            *qp_context,\r
568         IN              const   <a href="./ib_types_h.html#robo206">ib_qp_create_t</a>                          *p_create_attr,\r
569                 OUT                     <a href="./ib_types_h.html#robo205">ib_qp_attr_t</a>                            *p_qp_attr,\r
570                 OUT                     ib_qp_handle_t                          *ph_qp,\r
571         IN      OUT                     <a href="#robo1164">ci_umv_buf_t</a>                            *p_umv_buf OPTIONAL );\r
572 </pre>\r
573 </span><p><strong>DESCRIPTION</strong></p>\r
574 <span class="DESCRIPTION"><pre>       A new queue pair is created on the specified HCA. The initial set of\r
575        parameters is provided by the qp_create_attr parameter. The newly created\r
576        queue pair, with its attributes such as the qp number is returned\r
577        in the qp_query_attr structure.\r
578 </pre>\r
579 </span><p><strong>PARAMETERS</strong></p>\r
580 <span class="PARAMETERS"><pre>       h_pd\r
581                [in] Handle to Protection Domain\r
582        qp_context\r
583                [in] A user specified context passed in a asynchronous error callback.\r
584        p_create_attr\r
585                [in] Initial attributes with which the qp must be created.\r
586        p_qp_attr\r
587                [out] Attributes of the newly created queue pair.\r
588        ph_qp\r
589                [out] Handle to the queue pair newly created.\r
590        p_umv_buf\r
591                [in out] Vendor specific parameter to support user mode IO.\r
592 </pre>\r
593 </span><p><strong>RETURN VALUE</strong></p>\r
594 <span class="RETURN_VALUE"><pre>       IB_SUCCESS\r
595                The queue pair is successfully created with the provided initial\r
596                attributes.\r
597        IB_INSUFFICIENT_RESOURCES\r
598                Insufficient resources to complete request.\r
599        IB_INVALID_PD_HANDLE\r
600                pd_handle supplied in the qp_create_attr is invalid\r
601        IB_INVALID_CQ_HANDLE\r
602                cq_handle supplied for send/receive is invalid.\r
603        IB_INVALID_SERVICE_TYPE\r
604                Invalid service type.\r
605        IB_INVALID_MAX_WRS\r
606                Max WRS capacity exceeded\r
607        IB_INVALID_MAX_SGE\r
608                Max Scatter gather element request exceeds HCA capability\r
609        IB_UNSUPPORTED\r
610                Unreliable datagram not supported\r
611        IB_INVALID_PARAMETER\r
612                The parameter p_create_attr is invalid.\r
613 </pre>\r
614 </span><p><strong>NOTES</strong></p>\r
615 <span class="NOTES"><pre>       If any of the initial parameters is not valid, the queue pair is not\r
616        created. If the routine call is not successful then the contents of\r
617        qp_query_attr and qp_handle is undefined.\r
618 </pre>\r
619 </span><p><strong>SEE ALSO</strong></p>\r
620 <span class="SEE_ALSO"><pre>       <a href="#robo1128">ci_create_spl_qp</a>, <a href="#robo1157">ci_query_qp</a>, <a href="#robo1146">ci_modify_qp</a>, <a href="#robo1135">ci_destroy_qp</a>\r
621 </pre>\r
622 </span>\r
623 <hr />\r
624 \r
625 <h2><a name="robo1128">[Functions]<a name="Verbs2fci5fcreate5fspl5fqp">\r
626 Verbs/ci_create_spl_qp</a></h2>\r
627 \r
628 <p>[<a href="#robo_top_of_doc">top</a>][<a href="#robo39">parent</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
629 <p><strong>NAME</strong></p>\r
630 <span class="NAME"><pre>       <strong>ci_create_spl_qp</strong> -- Create a special queue pair.\r
631 </pre>\r
632 </span><p><strong>SYNOPSIS</strong></p>\r
633 <span class="SYNOPSIS"><pre>typedef <a href="./ib_types_h.html#robo49">ib_api_status_t</a>\r
634 (*<strong>ci_create_spl_qp</strong>) (\r
635         IN              const   ib_pd_handle_t          h_pd,\r
636         IN              const   uint8_t                         port_num,\r
637         IN              const   void                            *qp_context,\r
638         IN              const   <a href="./ib_types_h.html#robo206">ib_qp_create_t</a>          *p_create_attr,\r
639                 OUT                     <a href="./ib_types_h.html#robo205">ib_qp_attr_t</a>            *p_qp_attr,\r
640                 OUT                     ib_qp_handle_t          *ph_qp );\r
641 </pre>\r
642 </span><p><strong>DESCRIPTION</strong></p>\r
643 <span class="DESCRIPTION"><pre>       Create and return a handle to for the indicated service type on the\r
644        specified port. QP service types can be one of SMI, GSI, Raw IPv6 or\r
645        Raw ether type as specified in qp_type_t.\r
646 </pre>\r
647 </span><p><strong>PARAMETERS</strong></p>\r
648 <span class="PARAMETERS"><pre>       h_pd\r
649                [in] Handle to the PD on which the special queue pair is to be created.\r
650        port_num\r
651                [in] Port number for which this special queue pair is created.\r
652        qp_context\r
653                [in] User specified context passed during the async error callback\r
654                routine.\r
655        p_create_attr\r
656                [in] Initial set of attributes with which the queue pair is to be\r
657                created.\r
658        p_qp_attr\r
659                [out] QP attributes after the qp is successfully created.\r
660 \r
661        ph_qp\r
662                [out] Handle to the special qp after its creation.\r
663 </pre>\r
664 </span><p><strong>RETURN VALUE</strong></p>\r
665 <span class="RETURN_VALUE"><pre>       IB_SUCCESS\r
666                The special queue pair of the requested service type is created.\r
667        IB_INSUFFICIENT_RESOURCES\r
668                Insufficient resources to satisfy the request.\r
669        IB_NOT_FOUND\r
670                Indicated port guid is not found on this HCA.\r
671        IB_INVALID_CQ_HANDLE\r
672                Invalid cq handle passed to send/receive side.\r
673        IB_INVALID_MAX_WRS\r
674                Max WRS capacity exceeded\r
675        IB_INVALID_MAX_SGE\r
676                Max Scatter gather element request exceeds HCA capability\r
677        IB_RESOURCE_BUSY\r
678                Applicable to SMI/GSI qp's. This return code means that the SMI/GSI\r
679                QP is already allocated.\r
680        IB_INVALID_PD\r
681                Invalid protection domain supplied.\r
682        IB_INVALID_PORT\r
683                Invalid port number supplied.\r
684        IB_UNSUPPORTED\r
685                Raw datagram unsupported.\r
686        IB_INVALID_PARAMETER\r
687                The parameter p_create_attr is not valid.\r
688 </pre>\r
689 </span><p><strong>NOTES</strong></p>\r
690 <span class="NOTES"><pre>       This verb is privileged and only available in kernel mode. The User mode\r
691        clients that need access to SMI/GSI qp's is recommended to do this via\r
692        a higher level of abstraction.\r
693 </pre>\r
694 </span><p><strong>SEE ALSO</strong></p>\r
695 <span class="SEE_ALSO"><pre>       <a href="#robo1127">ci_create_qp</a>, <a href="#robo1157">ci_query_qp</a>, <a href="#robo1146">ci_modify_qp</a>, <a href="#robo1135">ci_destroy_qp</a>\r
696 </pre>\r
697 </span>\r
698 <hr />\r
699 \r
700 <h2><a name="robo1129">[Functions]<a name="Verbs2fci5fdealloc5fmlnx5ffmr">\r
701 Verbs/ci_dealloc_mlnx_fmr</a></h2>\r
702 \r
703 <p>[<a href="#robo_top_of_doc">top</a>][<a href="#robo39">parent</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
704 <p><strong>NAME</strong></p>\r
705 <span class="NAME"><pre>       <strong>ci_dealloc_mlnx_fmr</strong> -- Deallocate a Mellanox fast memory region.\r
706 </pre>\r
707 </span><p><strong>SYNOPSIS</strong></p>\r
708 <span class="SYNOPSIS"><pre>typedef <a href="./ib_types_h.html#robo49">ib_api_status_t</a>\r
709 (*<strong>ci_dealloc_mlnx_fmr</strong>) (\r
710         IN                      mlnx_fmr_handle_t       const           h_fmr);\r
711 </pre>\r
712 </span><p><strong>DESCRIPTION</strong></p>\r
713 <span class="DESCRIPTION"><pre>       //TODO\r
714 </pre>\r
715 </span><p><strong>PARAMETERS</strong></p>\r
716 <span class="PARAMETERS"><pre>       h_fmr\r
717                [in] Handle to the fast memory region. This handle is used when\r
718                mapin/unmaping fmr\r
719 </pre>\r
720 </span><p><strong>RETURN VALUE</strong></p>\r
721 <span class="RETURN_VALUE"><pre>       IB_SUCCESS\r
722                Registration with the adapter was successful.\r
723        IB_INSUFFICIENT_RESOURCES\r
724                Insufficient resources to satisfy request.\r
725        IB_INVALID_PARAMETER\r
726                One of the input pointers was NULL.\r
727        IB_INVALID_PD_HANDLE\r
728                Invalid pd handle\r
729        IB_INVALID_PERMISSION\r
730                Invalid access rights.\r
731 </pre>\r
732 </span><p><strong>NOTES</strong></p>\r
733 <span class="NOTES"><pre>       This is a Mellanox specific extension to verbs.\r
734 </pre>\r
735 </span><p><strong>SEE ALSO</strong></p>\r
736 <span class="SEE_ALSO"><pre>       <strong>ci_dealloc_mlnx_fmr</strong>, <a href="#robo1141">ci_map_phys_mlnx_fmr</a>, <a href="#robo1165">ci_unmap_mlnx_fmr</a>\r
737 </pre>\r
738 </span>\r
739 <hr />\r
740 \r
741 <h2><a name="robo1130">[Functions]<a name="Verbs2fci5fdeallocate5fpd">\r
742 Verbs/ci_deallocate_pd</a></h2>\r
743 \r
744 <p>[<a href="#robo_top_of_doc">top</a>][<a href="#robo39">parent</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
745 <p><strong>NAME</strong></p>\r
746 <span class="NAME"><pre>       <strong>ci_deallocate_pd</strong> -- Deallocate a protection domain object.\r
747 </pre>\r
748 </span><p><strong>SYNOPSIS</strong></p>\r
749 <span class="SYNOPSIS"><pre>typedef <a href="./ib_types_h.html#robo49">ib_api_status_t</a>\r
750 (*<strong>ci_deallocate_pd</strong>) (\r
751         IN              ib_pd_handle_t          h_pd );\r
752 </pre>\r
753 </span><p><strong>DESCRIPTION</strong></p>\r
754 <span class="DESCRIPTION"><pre>       This routine deallocates a pd that is allocated via the <a href="#robo1118">ci_allocate_pd</a>()\r
755        call. The PD cannot be deallocated if it is still bound to a QP, any memory\r
756        region, memory window or address vector.\r
757 </pre>\r
758 </span><p><strong>PARAMETERS</strong></p>\r
759 <span class="PARAMETERS"><pre>       h_pd\r
760                [in] Handle allocated via the <a href="#robo1118">ci_allocate_pd</a>()\r
761 </pre>\r
762 </span><p><strong>RETURN VALUE</strong></p>\r
763 <span class="RETURN_VALUE"><pre>       IB_SUCCESS\r
764                PD is freed successfully\r
765        IB_INVALID_PD_HANDLE\r
766                pd_handle is invalid\r
767        IB_RESOURCE_BUSY\r
768                PD is probably still bound to some resource\r
769 </pre>\r
770 </span><p><strong>SEE ALSO</strong></p>\r
771 <span class="SEE_ALSO"><pre>       <a href="#robo1118">ci_allocate_pd</a>\r
772 </pre>\r
773 </span>\r
774 <hr />\r
775 \r
776 <h2><a name="robo1131">[Functions]<a name="Verbs2fci5fderegister5fmr">\r
777 Verbs/ci_deregister_mr</a></h2>\r
778 \r
779 <p>[<a href="#robo_top_of_doc">top</a>][<a href="#robo39">parent</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
780 <p><strong>NAME</strong></p>\r
781 <span class="NAME"><pre>       <strong>ci_deregister_mr</strong> -- Deregister a memory region\r
782 </pre>\r
783 </span><p><strong>SYNOPSIS</strong></p>\r
784 <span class="SYNOPSIS"><pre>typedef <a href="./ib_types_h.html#robo49">ib_api_status_t</a>\r
785 (*<strong>ci_deregister_mr</strong>) (\r
786         IN      const   ib_mr_handle_t          h_mr );\r
787 </pre>\r
788 </span><p><strong>DESCRIPTION</strong></p>\r
789 <span class="DESCRIPTION"><pre>       This routine deregisters  a memory region from the HCA. The region can\r
790        de-registered only if there are no existing memory windows bound to\r
791        this region, and if no existing shared memory regions were registered\r
792        that refers to the same set of physical pages associated with the memory\r
793        handle.  If there are outstanding work requests referring to this memory\r
794        region, then after this call is successful, those work requests will\r
795        complete with WRS_LOCAL_PROTECTION_ERR.\r
796 </pre>\r
797 </span><p><strong>PARAMETERS</strong></p>\r
798 <span class="PARAMETERS"><pre>       h_mr\r
799                [in] Memory handle that is being de-registered.\r
800 </pre>\r
801 </span><p><strong>RETURN VALUE</strong></p>\r
802 <span class="RETURN_VALUE"><pre>       IB_SUCCESS\r
803                The memory de-registration was successful\r
804        IB_INVALID_MR_HANDLE\r
805                The memory handle supplied is not a valid memory handle.\r
806        IB_RESOURCE_BUSY\r
807                The memory region has active windows bound.\r
808 </pre>\r
809 </span><p><strong>NOTES</strong></p>\r
810 <span class="NOTES"></span><p><strong>SEE ALSO</strong></p>\r
811 <span class="SEE_ALSO"><pre>       <a href="#robo1158">ci_register_mr</a>, <a href="#robo1159">ci_register_pmr</a>, <a href="#robo1160">ci_register_smr</a>\r
812 </pre>\r
813 </span>\r
814 <hr />\r
815 \r
816 <h2><a name="robo1132">[Functions]<a name="Verbs2fci5fdestroy5fav">\r
817 Verbs/ci_destroy_av</a></h2>\r
818 \r
819 <p>[<a href="#robo_top_of_doc">top</a>][<a href="#robo39">parent</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
820 <p><strong>NAME</strong></p>\r
821 <span class="NAME"><pre>       <strong>ci_destroy_av</strong> -- Destroy the address vector\r
822 </pre>\r
823 </span><p><strong>SYNOPSIS</strong></p>\r
824 <span class="SYNOPSIS"><pre>typedef <a href="./ib_types_h.html#robo49">ib_api_status_t</a>\r
825 (*<strong>ci_destroy_av</strong>) (\r
826         IN      const   ib_av_handle_t          h_av );\r
827 </pre>\r
828 </span><p><strong>DESCRIPTION</strong></p>\r
829 <span class="DESCRIPTION"><pre>       This routine destroys the specified address handle. After the routine\r
830        returns, this address handle cannot be used to reference the destination.\r
831 </pre>\r
832 </span><p><strong>PARAMETERS</strong></p>\r
833 <span class="PARAMETERS"><pre>       h_av\r
834                [in] Handle that needs to be destroyed.\r
835 </pre>\r
836 </span><p><strong>RETURN VALUE</strong></p>\r
837 <span class="RETURN_VALUE"><pre>       IB_SUCCESS\r
838                Operation was successful.\r
839        IB_INVALID_AV_HANDLE\r
840                The address vector handle was invalid\r
841 </pre>\r
842 </span><p><strong>SEE ALSO</strong></p>\r
843 <span class="SEE_ALSO"><pre>       <a href="#robo1124">ci_create_av</a>\r
844 </pre>\r
845 </span>\r
846 <hr />\r
847 \r
848 <h2><a name="robo1133">[Functions]<a name="Verbs2fci5fdestroy5fcq">\r
849 Verbs/ci_destroy_cq</a></h2>\r
850 \r
851 <p>[<a href="#robo_top_of_doc">top</a>][<a href="#robo39">parent</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
852 <p><strong>NAME</strong></p>\r
853 <span class="NAME"><pre>       <strong>ci_destroy_cq</strong> -- Destroy a completion queue.\r
854 </pre>\r
855 </span><p><strong>SYNOPSIS</strong></p>\r
856 <span class="SYNOPSIS"><pre>typedef <a href="./ib_types_h.html#robo49">ib_api_status_t</a>\r
857 (*<strong>ci_destroy_cq</strong>) (\r
858         IN      const   ib_cq_handle_t          h_cq );\r
859 </pre>\r
860 </span><p><strong>DESCRIPTION</strong></p>\r
861 <span class="DESCRIPTION"><pre>       Destroys a completion queue. If any queue pairs are still bound\r
862        to this CQ, the attempt to destroy will fail, and the CQ and associated\r
863        resources are *NOT* destroyed.\r
864 </pre>\r
865 </span><p><strong>PARAMETERS</strong></p>\r
866 <span class="PARAMETERS"><pre>       cq_handle\r
867                [in] Handle to the cq that is to be destroyed.\r
868 </pre>\r
869 </span><p><strong>RETURN VALUE</strong></p>\r
870 <span class="RETURN_VALUE"><pre>       IB_SUCCESS\r
871                The intend to destroy the completion queue is registered successfully.\r
872                The destroy_callback function will be invoked when it is safe and\r
873                guarantees that no more completion callbacks will be invoked for\r
874                this CQ. Any pending CQ notifications are discarded.\r
875        IB_INVALID_CQ_HANDLE\r
876                The CQ handle is invalid.\r
877        IB_RESOURCE_BUSY\r
878                Queue pairs may still be bound to this completion queue.\r
879        IB_INVALID_PARAMETER\r
880                one of the parameters was NULL.\r
881 </pre>\r
882 </span><p><strong>SEE ALSO</strong></p>\r
883 <span class="SEE_ALSO"><pre>       <a href="#robo1125">ci_create_cq</a>\r
884 </pre>\r
885 </span><p><strong>NOTES</strong></p>\r
886 <span class="NOTES"><pre>       This call cannot be called from any of the notification functions invoked\r
887        by the <a href="#robo39">Verbs</a> driver. For e.g. the completion handler or the async error\r
888        callback provided during the <a href="#robo1147">ci_open_ca</a>() call. The call will block until\r
889        all references to this adapter object is closed which includes all the\r
890        pending callbacks returning back to the verbs provider driver.\r
891 </pre>\r
892 </span>\r
893 <hr />\r
894 \r
895 <h2><a name="robo1134">[Functions]<a name="Verbs2fci5fdestroy5fmw">\r
896 Verbs/ci_destroy_mw</a></h2>\r
897 \r
898 <p>[<a href="#robo_top_of_doc">top</a>][<a href="#robo39">parent</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
899 <p><strong>NAME</strong></p>\r
900 <span class="NAME"><pre>       <strong>ci_destroy_mw</strong> -- Destroy a memory window.\r
901 </pre>\r
902 </span><p><strong>SYNOPSIS</strong></p>\r
903 <span class="SYNOPSIS"><pre>typedef <a href="./ib_types_h.html#robo49">ib_api_status_t</a>\r
904 (*<strong>ci_destroy_mw</strong>) (\r
905         IN      const   ib_mw_handle_t          h_mw );\r
906 </pre>\r
907 </span><p><strong>DESCRIPTION</strong></p>\r
908 <span class="DESCRIPTION"><pre>       This routine deallocates a window entry created via a <a href="#robo1126">ci_create_mw</a>.\r
909        Once this operation is complete, the channel interface guarantees that\r
910        no future remote accesses will be permitted to this window entry.\r
911 </pre>\r
912 </span><p><strong>PARAMETERS</strong></p>\r
913 <span class="PARAMETERS"><pre>       h_mw\r
914                [in] Handle to the memory window that is being destroyed.\r
915 </pre>\r
916 </span><p><strong>RETURN VALUE</strong></p>\r
917 <span class="RETURN_VALUE"><pre>       IB_SUCCESS\r
918                The destroy window request completed successfully.\r
919        IB_INVALID_MW_HANDLE\r
920                memw_handle supplied is invalid.\r
921 </pre>\r
922 </span><p><strong>NOTES</strong></p>\r
923 <span class="NOTES"><pre>       Deallocate memory window implicitly means the window is also unbound\r
924        once the call completes successfully. Any future remote access with\r
925        the same R_KEY should fail with protection violation.\r
926 </pre>\r
927 </span><p><strong>SEE ALSO</strong></p>\r
928 <span class="SEE_ALSO"><pre>       <a href="#robo1126">ci_create_mw</a>\r
929 </pre>\r
930 </span>\r
931 <hr />\r
932 \r
933 <h2><a name="robo1135">[Functions]<a name="Verbs2fci5fdestroy5fqp">\r
934 Verbs/ci_destroy_qp</a></h2>\r
935 \r
936 <p>[<a href="#robo_top_of_doc">top</a>][<a href="#robo39">parent</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
937 <p><strong>NAME</strong></p>\r
938 <span class="NAME"><pre>       <strong>ci_destroy_qp</strong> -- Destroy the specified Queue Pair.\r
939 </pre>\r
940 </span><p><strong>SYNOPSIS</strong></p>\r
941 <span class="SYNOPSIS"><pre>typedef <a href="./ib_types_h.html#robo49">ib_api_status_t</a>\r
942 (*<strong>ci_destroy_qp</strong>) (\r
943         IN      const   ib_qp_handle_t          h_qp,\r
944         IN      const   uint64_t                        timewait );\r
945 </pre>\r
946 </span><p><strong>DESCRIPTION</strong></p>\r
947 <span class="DESCRIPTION"><pre>       Destroys the associated QP. The QP could have outstanding work requests\r
948        when this call is made. Any outstanding work requests *SHALL NOT* be\r
949        completed after this routine returns.\r
950 </pre>\r
951 </span><p><strong>PARAMETERS</strong></p>\r
952 <span class="PARAMETERS"><pre>       h_qp\r
953                [in] Handle to the qp that needs to be destroyed.\r
954        timewait\r
955                [in] Time (in microseconds) at which the QP should leave\r
956                the timewait state and can be reused.\r
957 </pre>\r
958 </span><p><strong>RETURN VALUE</strong></p>\r
959 <span class="RETURN_VALUE"><pre>       IB_SUCCESS\r
960                The intend to destroy this queue pair is registered and no further\r
961                work requests will be processed. When no pending callbacks are in\r
962                progress, the destroy_callback function is invoked which marks the\r
963                destruction of the resource. The consumer can be guaranteed that\r
964                no future callbacks will be propagated on behalf of this resource.\r
965        IB_INVALID_QP_HANDLE\r
966                The handle passed is invalid.\r
967        IB_RESOURCE_BUSY\r
968                If the queue pair is a unreliable datagram service type, and\r
969                is still bound to a multicast group.\r
970 </pre>\r
971 </span><p><strong>NOTES</strong></p>\r
972 <span class="NOTES"><pre>       This call cannot be called from any of the notification functions invoked\r
973        by the <a href="#robo39">Verbs</a> driver. For e.g. the completion handler or the async error\r
974        callback provided during the <a href="#robo1147">ci_open_ca</a>() call. The call will block until\r
975        all references to this adapter object is closed which includes all the\r
976        pending callbacks returning back to the verbs provider driver.\r
977 \r
978        If the CQ associated with this QP is still not destroyed, the completions\r
979        on behalf of this QP can still be pulled via the <a href="#robo1149">ci_poll_cq</a>() call. Any\r
980        resources allocated by the Channel Interface must be deallocated as part\r
981        of this call.\r
982 </pre>\r
983 </span><p><strong>SEE ALSO</strong></p>\r
984 <span class="SEE_ALSO"><pre>       <a href="#robo1127">ci_create_qp</a>, <a href="#robo1128">ci_create_spl_qp</a>\r
985 </pre>\r
986 </span>\r
987 <hr />\r
988 \r
989 <h2><a name="robo1136">[Functions]<a name="Verbs2fci5fdetach5fmcast">\r
990 Verbs/ci_detach_mcast</a></h2>\r
991 \r
992 <p>[<a href="#robo_top_of_doc">top</a>][<a href="#robo39">parent</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
993 <p><strong>NAME</strong></p>\r
994 <span class="NAME"><pre>       <strong>ci_detach_mcast</strong> -- Detach a queue pair from a multicast group\r
995 </pre>\r
996 </span><p><strong>SYNOPSIS</strong></p>\r
997 <span class="SYNOPSIS"><pre>typedef <a href="./ib_types_h.html#robo49">ib_api_status_t</a>\r
998 (*<strong>ci_detach_mcast</strong>) (\r
999         IN      const   ib_mcast_handle_t               h_mcast );\r
1000 </pre>\r
1001 </span><p><strong>DESCRIPTION</strong></p>\r
1002 <span class="DESCRIPTION"><pre>       This routine detaches a queue pair from its previously associated multicast\r
1003        group.\r
1004 </pre>\r
1005 </span><p><strong>PARAMETERS</strong></p>\r
1006 <span class="PARAMETERS"><pre>       h_mcast\r
1007                [in] The multicast handle passed back to consumer after the\r
1008                ci_mcast_attach call.\r
1009 </pre>\r
1010 </span><p><strong>RETURN VALUE</strong></p>\r
1011 <span class="RETURN_VALUE"><pre>       IB_SUCCESS\r
1012                The qp was successfully detached from the multicast group.\r
1013        IB_INVALID_MCAST_HANDLE\r
1014                mcast_handle supplied is an invalid handle\r
1015        IB_INVALID_PARAMETER\r
1016                One of the parameters was NULL.\r
1017 </pre>\r
1018 </span><p><strong>SEE ALSO</strong></p>\r
1019 <span class="SEE_ALSO"><pre>       <a href="#robo1120">ci_attach_mcast</a>\r
1020 </pre>\r
1021 </span>\r
1022 <hr />\r
1023 \r
1024 <h2><a name="robo1137">[Functions]<a name="Verbs2fci5fenable5fcq5fnotify">\r
1025 Verbs/ci_enable_cq_notify</a></h2>\r
1026 \r
1027 <p>[<a href="#robo_top_of_doc">top</a>][<a href="#robo39">parent</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
1028 <p><strong>NAME</strong></p>\r
1029 <span class="NAME"><pre>       <strong>ci_enable_cq_notify</strong> -- Invoke the Completion handler, on next entry added.\r
1030 </pre>\r
1031 </span><p><strong>SYNOPSIS</strong></p>\r
1032 <span class="SYNOPSIS"><pre>typedef <a href="./ib_types_h.html#robo49">ib_api_status_t</a>\r
1033 (*<strong>ci_enable_cq_notify</strong>) (\r
1034         IN      const   ib_cq_handle_t          h_cq,\r
1035         IN      const   boolean_t                       solicited );\r
1036 </pre>\r
1037 </span><p><strong>DESCRIPTION</strong></p>\r
1038 <span class="DESCRIPTION"><pre>       This routine instructs the channel interface to invoke the completion\r
1039        handler when the next completion queue entry is added to this CQ.\r
1040        Please refer to Volume 1, of the InfiniBand specification for a complete\r
1041        description.\r
1042 </pre>\r
1043 </span><p><strong>PARAMETERS</strong></p>\r
1044 <span class="PARAMETERS"><pre>       h_cq\r
1045                [in] Handle to the CQ on which the notification is being enabled.\r
1046        solicited\r
1047                [in] A boolean flag indicating whether the request is to generate a\r
1048                notification on the next entry or on the next solicited entry\r
1049                being added to the completion queue.\r
1050 </pre>\r
1051 </span><p><strong>RETURN VALUE</strong></p>\r
1052 <span class="RETURN_VALUE"><pre>       IB_SUCCESS\r
1053                The notification request was registered successfully.\r
1054        IB_INVALID_CQ_HANDLE\r
1055                cq_handle supplied is not a valid handle.\r
1056 </pre>\r
1057 </span><p><strong>NOTES</strong></p>\r
1058 <span class="NOTES"><pre>       The consumer cannot call a request for notification without emptying\r
1059        entries from the CQ. i.e if a consumer registers for a notification\r
1060        request in the completion callback before pulling entries from the\r
1061        CQ via <a href="#robo1149">ci_poll_cq</a>, the notification is not generated for completions\r
1062        already in the CQ. For e.g. in the example below, if there are no calls\r
1063    to <a href="#robo1149">ci_poll_cq</a>()     after the <strong>ci_enable_cq_notify</strong>(). For any CQ entries added\r
1064        before calling this <strong>ci_enable_cq_notify</strong>() call, the consumer does not\r
1065        get a completion notification callback. In order to comply with the verb\r
1066        spec, consumer is supposed to perform a <a href="#robo1149">ci_poll_cq</a>() after the\r
1067        <strong>ci_enable_cq_notify</strong>() is made to retrive any entries that might have\r
1068        been added to the CQ before the CI registers the notification enable.\r
1069 \r
1070                        while ((ret_val = <a href="#robo1149">ci_poll_cq</a>(cq_handle, &amp;free_list, &amp;done_list)\r
1071                                == FSUCCESS))\r
1072                        {\r
1073                                process entries;\r
1074                        }\r
1075                        if (ret_val == IB_NOT_FOUND)\r
1076                                <strong>ci_enable_cq_notify</strong>(cq_handle);\r
1077                        // Need to perform a <a href="#robo1149">ci_poll_cq</a>()\r
1078            // after the enable.\r
1079 </pre>\r
1080 </span><p><strong>SEE ALSO</strong></p>\r
1081 <span class="SEE_ALSO"><pre>       <a href="#robo1125">ci_create_cq</a>, <a href="#robo1148">ci_peek_cq</a>, <a href="#robo1149">ci_poll_cq</a>, <a href="#robo1138">ci_enable_ncomp_cq_notify</a>\r
1082 </pre>\r
1083 </span>\r
1084 <hr />\r
1085 \r
1086 <h2><a name="robo1138">[Functions]<a name="Verbs2fci5fenable5fncomp5fcq5fnotify">\r
1087 Verbs/ci_enable_ncomp_cq_notify</a></h2>\r
1088 \r
1089 <p>[<a href="#robo_top_of_doc">top</a>][<a href="#robo39">parent</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
1090 <p><strong>NAME</strong></p>\r
1091 <span class="NAME"><pre>       <strong>ci_enable_ncomp_cq_notify</strong> -- Invoke the Completion handler when the next\r
1092        N completions are added.\r
1093 </pre>\r
1094 </span><p><strong>SYNOPSIS</strong></p>\r
1095 <span class="SYNOPSIS"><pre>typedef <a href="./ib_types_h.html#robo49">ib_api_status_t</a>\r
1096 (*<strong>ci_enable_ncomp_cq_notify</strong>) (\r
1097         IN              const   ib_cq_handle_t                          h_cq,\r
1098         IN              const   uint32_t                                        n_cqes );\r
1099 </pre>\r
1100 </span><p><strong>DESCRIPTION</strong></p>\r
1101 <span class="DESCRIPTION"><pre>       This routine instructs the channel interface to invoke the completion\r
1102        handler when the next N completions have been added to this CQ.\r
1103 </pre>\r
1104 </span><p><strong>PARAMETERS</strong></p>\r
1105 <span class="PARAMETERS"><pre>       h_cq\r
1106                [in] Handle to the CQ on which the notification is being enabled.\r
1107        n_cqes\r
1108                [in] The number of completion queue entries to be added to the\r
1109                completion queue before notifying the client.  This value must\r
1110                greater than or equal to one and less than or equal to the size\r
1111                of the completion queue.\r
1112 </pre>\r
1113 </span><p><strong>RETURN VALUE</strong></p>\r
1114 <span class="RETURN_VALUE"><pre>       IB_SUCCESS\r
1115                The notification request was registered successfully.\r
1116        IB_INVALID_CQ_HANDLE\r
1117                cq_handle supplied is not a valid handle.\r
1118        IB_INVALID_PARAMETER\r
1119                The requested number of completion queue entries was invalid.\r
1120        IB_UNSUPPORTED\r
1121                This operation is not supported by the channel adapter.\r
1122 </pre>\r
1123 </span><p><strong>NOTES</strong></p>\r
1124 <span class="NOTES"><pre>       This routine instructs the channel interface to invoke the completion\r
1125        handler when the next N completions have been added to this CQ regardless\r
1126        of the completion type (solicited or unsolicited).  Any CQ entries that\r
1127        existed before the rearm is enabled will not result in a call to the\r
1128        handler.  Support for this operation is optional by a channel adapter\r
1129        vendor.\r
1130 </pre>\r
1131 </span><p><strong>SEE ALSO</strong></p>\r
1132 <span class="SEE_ALSO"><pre>       <a href="#robo1125">ci_create_cq</a>, <a href="#robo1148">ci_peek_cq</a>, <a href="#robo1149">ci_poll_cq</a>, <a href="#robo1137">ci_enable_cq_notify</a>\r
1133 </pre>\r
1134 </span>\r
1135 <hr />\r
1136 \r
1137 <h2><a name="robo1139">[Structures]<a name="Verbs2fci5finterface5ft">\r
1138 Verbs/ci_interface_t</a></h2>\r
1139 \r
1140 <p>[<a href="#robo_top_of_doc">top</a>][<a href="#robo39">parent</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
1141 <p><strong>NAME</strong></p>\r
1142 <span class="NAME"><pre>       <strong>ci_interface_t</strong> -- Interface holding Channel Interface API's\r
1143 </pre>\r
1144 </span><p><strong>PURPOSE</strong></p>\r
1145 <span class="PURPOSE"><pre>       The following structure is supplied by a Channel Interface\r
1146        providing verbs functionality.\r
1147 </pre>\r
1148 </span><p><strong>SOURCE</strong></p>\r
1149 <span class="SOURCE"><pre>typedef struct _ci_interface\r
1150 {\r
1151         net64_t                         guid;\r
1152 \r
1153         /*\r
1154          * Device object of the HCA.  In Windows, this is a pointer to the PDO\r
1155          * for the HCA device.\r
1156          */\r
1157         void                            *p_hca_dev;\r
1158 \r
1159         /*\r
1160          * Vendor ID, Device ID, Device Revision of the HCA\r
1161          * libname refers to the user mode library to load\r
1162          * to support direct user mode IO. If vendor does not support one\r
1163          * then the fields must be initialized to all zero's.\r
1164          */\r
1165         uint32_t                        vend_id;\r
1166         uint16_t                        dev_id;\r
1167         uint16_t                        dev_revision;\r
1168         char                            libname[MAX_LIB_NAME];\r
1169         /*\r
1170          * Version of the header file this interface export can handle\r
1171          */\r
1172         uint32_t                        version;\r
1173 \r
1174         /*\r
1175          * HCA Access <a href="#robo39">Verbs</a>\r
1176          */\r
1177         <a href="#robo1147">ci_open_ca</a>                      open_ca;\r
1178         ci_um_open_ca_t         um_open_ca;\r
1179         <a href="#robo1153">ci_query_ca</a>                     query_ca;\r
1180         <a href="#robo1143">ci_modify_ca</a>            modify_ca;\r
1181         <a href="#robo1122">ci_close_ca</a>                     close_ca;\r
1182         <a href="#robo1162">ci_um_close_ca_t</a>        um_close_ca;\r
1183 \r
1184         <a href="#robo1166">ci_vendor_call</a>          vendor_call;\r
1185 \r
1186         /*\r
1187          * Protection Domain\r
1188          */\r
1189         <a href="#robo1118">ci_allocate_pd</a>          allocate_pd;\r
1190         <a href="#robo1130">ci_deallocate_pd</a>        deallocate_pd;\r
1191 \r
1192         /*\r
1193          * Address <a href="../complib/cl_vector_h.html#robo36">Vector</a> Management <a href="#robo39">Verbs</a>\r
1194          */\r
1195 \r
1196         <a href="#robo1124">ci_create_av</a>            create_av;\r
1197         <a href="#robo1152">ci_query_av</a>                     query_av;\r
1198         <a href="#robo1142">ci_modify_av</a>            modify_av;\r
1199         <a href="#robo1132">ci_destroy_av</a>           destroy_av;\r
1200 \r
1201         /*\r
1202          * QP Management <a href="#robo39">Verbs</a>\r
1203          */\r
1204         <a href="#robo1127">ci_create_qp</a>            create_qp;\r
1205         <a href="#robo1128">ci_create_spl_qp</a>        create_spl_qp;\r
1206         <a href="#robo1146">ci_modify_qp</a>            modify_qp;\r
1207         <a href="#robo1157">ci_query_qp</a>                     query_qp;\r
1208         <a href="#robo1135">ci_destroy_qp</a>           destroy_qp;\r
1209 \r
1210         /*\r
1211          * Completion Queue Management <a href="#robo39">Verbs</a>\r
1212          */\r
1213         <a href="#robo1125">ci_create_cq</a>            create_cq;\r
1214         <a href="#robo1161">ci_resize_cq</a>            resize_cq;\r
1215         <a href="#robo1154">ci_query_cq</a>                     query_cq;\r
1216         <a href="#robo1133">ci_destroy_cq</a>           destroy_cq;\r
1217 \r
1218         /*\r
1219          * Memory Management <a href="#robo39">Verbs</a>\r
1220          */\r
1221         <a href="#robo1158">ci_register_mr</a>          register_mr;\r
1222         <a href="#robo1159">ci_register_pmr</a>         register_pmr;\r
1223         <a href="#robo1155">ci_query_mr</a>                     query_mr;\r
1224         <a href="#robo1144">ci_modify_mr</a>            modify_mr;\r
1225         <a href="#robo1145">ci_modify_pmr</a>           modify_pmr;\r
1226         <a href="#robo1160">ci_register_smr</a>         register_smr;\r
1227         <a href="#robo1131">ci_deregister_mr</a>        deregister_mr;\r
1228 \r
1229         /*\r
1230          * Mellanox Fast Memory Management <a href="#robo39">Verbs</a>\r
1231          */\r
1232         <a href="#robo1117">ci_alloc_mlnx_fmr</a>               alloc_mlnx_fmr;\r
1233         <a href="#robo1141">ci_map_phys_mlnx_fmr</a>    map_phys_mlnx_fmr;\r
1234         <a href="#robo1165">ci_unmap_mlnx_fmr</a>               unmap_mlnx_fmr;\r
1235         <a href="#robo1129">ci_dealloc_mlnx_fmr</a>             dealloc_mlnx_fmr;\r
1236 \r
1237 \r
1238         /*\r
1239          * Memory Window <a href="#robo39">Verbs</a>\r
1240          */\r
1241         <a href="#robo1126">ci_create_mw</a>            create_mw;\r
1242         <a href="#robo1156">ci_query_mw</a>                     query_mw;\r
1243         <a href="#robo1121">ci_bind_mw</a>                      bind_mw;\r
1244         <a href="#robo1134">ci_destroy_mw</a>           destroy_mw;\r
1245 \r
1246         /*\r
1247          * Work Request Processing <a href="#robo39">Verbs</a>\r
1248          */\r
1249         <a href="#robo1151">ci_post_send</a>            post_send;\r
1250         <a href="#robo1150">ci_post_recv</a>            post_recv;\r
1251 \r
1252         /*\r
1253          * Completion Processing and\r
1254          * Completion Notification Request <a href="#robo39">Verbs</a>.\r
1255          */\r
1256         <a href="#robo1148">ci_peek_cq</a>                                      peek_cq;                                /* Optional */\r
1257         <a href="#robo1149">ci_poll_cq</a>                                      poll_cq;\r
1258         <a href="#robo1137">ci_enable_cq_notify</a>                     enable_cq_notify;\r
1259         <a href="#robo1138">ci_enable_ncomp_cq_notify</a>       enable_ncomp_cq_notify; /* Optional */\r
1260 \r
1261         /*\r
1262          * Multicast Support <a href="#robo39">Verbs</a>\r
1263          */\r
1264         <a href="#robo1120">ci_attach_mcast</a>         attach_mcast;\r
1265         <a href="#robo1136">ci_detach_mcast</a>         detach_mcast;\r
1266 \r
1267         /*\r
1268          * Local MAD support, for HCA's that do not support\r
1269          * Agents in the HW.\r
1270          */\r
1271         <a href="#robo1140">ci_local_mad</a>            local_mad;\r
1272 \r
1273 } <strong>ci_interface_t</strong>;\r
1274 </pre>\r
1275 </span>\r
1276 <hr />\r
1277 \r
1278 <h2><a name="robo1140">[Functions]<a name="Verbs2fci5flocal5fmad">\r
1279 Verbs/ci_local_mad</a></h2>\r
1280 \r
1281 <p>[<a href="#robo_top_of_doc">top</a>][<a href="#robo39">parent</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
1282 <p><strong>NAME</strong></p>\r
1283 <span class="NAME"><pre>       <strong>ci_local_mad</strong> -- Request a mad to be processed by the local adapter.\r
1284 </pre>\r
1285 </span><p><strong>SYNOPSIS</strong></p>\r
1286 <span class="SYNOPSIS"><pre>typedef <a href="./ib_types_h.html#robo49">ib_api_status_t</a>\r
1287 (*<strong>ci_local_mad</strong>) (\r
1288         IN              const   ib_ca_handle_t          h_ca,\r
1289         IN              const   uint8_t                         port_num,\r
1290         IN              const   <a href="./ib_types_h.html#robo888">ib_mad_t</a>                        *p_mad_in,\r
1291                 OUT                     <a href="./ib_types_h.html#robo888">ib_mad_t</a>                        *p_mad_out );\r
1292 </pre>\r
1293 </span><p><strong>DESCRIPTION</strong></p>\r
1294 <span class="DESCRIPTION"><pre>       This routine is OPTIONAL for the channel interface. This is required\r
1295        for adapters which do not have the agents such as Subnet Management\r
1296        agent (SMA) Or the GSA in the <a href="#robo39">Verbs</a> Provider driver.\r
1297        hardware, for all such adapters the exact queue pair management of\r
1298        special queue pairs happen above the channel interface. This routine\r
1299        is used to perform local operations, since there is no agent below the\r
1300        channel interface. For e.g: If a Subnet Management packet (SMP) to\r
1301        set PORT_STATE is received, this reception is processed above the channel\r
1302        interface, then this call is done to set the port state on the local\r
1303        adapter. On successful return, the response is generated and sent to the\r
1304        Subnet Manager.\r
1305 </pre>\r
1306 </span><p><strong>PARAMETERS</strong></p>\r
1307 <span class="PARAMETERS"><pre>       h_ca\r
1308                [in] A handle to the channel adapter that should process the MAD.\r
1309                This must be the same adapter that the MAD was received on.\r
1310        port_num\r
1311                [in] port number to which this request is directed is to be sent.\r
1312        p_mad_in\r
1313                [in] pointer to a management datagram (MAD) structure containing\r
1314                the command to be processed.\r
1315        p_mad_out\r
1316                [out] Response packet after processing the command. The storage to this\r
1317                must be allocated by the consumer.\r
1318 </pre>\r
1319 </span><p><strong>RETURN VALUE</strong></p>\r
1320 <span class="RETURN_VALUE"><pre>       IB_SUCCESS\r
1321                Command processed successfully.\r
1322        IB_INVALID_CA_HANDLE\r
1323                The HCA handle supplied is not valid.\r
1324        IB_INVALID_PORT\r
1325                The port number supplied is invalid.\r
1326 </pre>\r
1327 </span><p><strong>PORTABILITY</strong></p>\r
1328 <span class="PORTABILITY"><pre>       Kernel Mode only\r
1329 </pre>\r
1330 </span><p><strong>NOTES</strong></p>\r
1331 <span class="NOTES"><pre>       This call is provided to aid adapters that don't have a agent functionality\r
1332        built in the channel interface. Some adapters do have a local processor\r
1333        to process these packets, hence even for local port management, we can\r
1334        use the same mechanism we use to configure external nodes by using a\r
1335        hop counter = 1 in the MAD packets. If the SMA indicates it has a local\r
1336        sma in the <a href="./ib_types_h.html#robo60">ib_ca_attr_t</a>, then the packets are posted to the adapter\r
1337        instead of making a private call to the adapter.\r
1338 </pre>\r
1339 </span><p><strong>SEE ALSO</strong></p>\r
1340 <span class="SEE_ALSO"><pre>       <a href="#robo1153">ci_query_ca</a>, ci_ca_attr_t\r
1341 </pre>\r
1342 </span>\r
1343 <hr />\r
1344 \r
1345 <h2><a name="robo1141">[Functions]<a name="Verbs2fci5fmap5fphys5fmlnx5ffmr">\r
1346 Verbs/ci_map_phys_mlnx_fmr</a></h2>\r
1347 \r
1348 <p>[<a href="#robo_top_of_doc">top</a>][<a href="#robo39">parent</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
1349 <p><strong>NAME</strong></p>\r
1350 <span class="NAME"><pre>       <strong>ci_map_phys_mlnx_fmr</strong> -- <a href="../complib/cl_map_h.html#robo17">Map</a> a Mellanox fast memory region with a\r
1351        given page list.\r
1352 </pre>\r
1353 </span><p><strong>SYNOPSIS</strong></p>\r
1354 <span class="SYNOPSIS"><pre>typedef <a href="./ib_types_h.html#robo49">ib_api_status_t</a>\r
1355 (*<strong>ci_map_phys_mlnx_fmr</strong>) (\r
1356         IN              const   mlnx_fmr_handle_t                       h_fmr,\r
1357         IN              const   uint64_t* const                         paddr_list,\r
1358         IN              const   int                                                     list_len,\r
1359         IN      OUT                     uint64_t* const                         p_vaddr,\r
1360                 OUT                     net32_t* const                          p_lkey,\r
1361                 OUT                     net32_t* const                          p_rkey);\r
1362 </pre>\r
1363 </span><p><strong>DESCRIPTION</strong></p>\r
1364 <span class="DESCRIPTION"><pre>       //TODO\r
1365 </pre>\r
1366 </span><p><strong>PARAMETERS</strong></p>\r
1367 <span class="PARAMETERS"><pre>       h_fmr\r
1368                [in] Handle to the fast memory region that  these pages map to \r
1369        page_list\r
1370                [in] array of phys address\r
1371        list_len\r
1372                [in] number of pages in the list\r
1373        p_vaddr\r
1374                [in/out] On input, references the requested virtual address for the\r
1375                start of the FMR.  On output, references the actual\r
1376                virtual address assigned to the FMR.\r
1377        p_lkey\r
1378                [out] The local access key associated with this registered memory\r
1379                region.\r
1380        p_rkey\r
1381                [out] A key that may be used by a remote end-point when performing\r
1382                RDMA or atomic operations to this registered memory region.\r
1383 </pre>\r
1384 </span><p><strong>RETURN VALUE</strong></p>\r
1385 <span class="RETURN_VALUE"><pre>       IB_SUCCESS\r
1386                Registration with the adapter was successful.\r
1387        IB_INSUFFICIENT_RESOURCES\r
1388                Insufficient resources to satisfy request.\r
1389        IB_INVALID_PARAMETER\r
1390                One of the input pointers was NULL.\r
1391        IB_INVALID_PD_HANDLE\r
1392                Invalid pd handle\r
1393        IB_INVALID_PERMISSION\r
1394                Invalid access rights.\r
1395 </pre>\r
1396 </span><p><strong>NOTES</strong></p>\r
1397 <span class="NOTES"><pre>       The Alloc operation does not map nor pinned any memory.\r
1398        In order to use the FMR the user need to call map \r
1399 \r
1400        This is a Mellanox specific extension to verbs.\r
1401 </pre>\r
1402 </span><p><strong>SEE ALSO</strong></p>\r
1403 <span class="SEE_ALSO"><pre>       <a href="#robo1129">ci_dealloc_mlnx_fmr</a>, <a href="#robo1117">ci_alloc_mlnx_fmr</a>, <a href="#robo1165">ci_unmap_mlnx_fmr</a>\r
1404 </pre>\r
1405 </span>\r
1406 <hr />\r
1407 \r
1408 <h2><a name="robo1142">[Functions]<a name="Verbs2fci5fmodify5fav">\r
1409 Verbs/ci_modify_av</a></h2>\r
1410 \r
1411 <p>[<a href="#robo_top_of_doc">top</a>][<a href="#robo39">parent</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
1412 <p><strong>NAME</strong></p>\r
1413 <span class="NAME"><pre>       <strong>ci_modify_av</strong> -- Change the address vector referred by the av_handle\r
1414 </pre>\r
1415 </span><p><strong>SYNOPSIS</strong></p>\r
1416 <span class="SYNOPSIS"><pre>typedef <a href="./ib_types_h.html#robo49">ib_api_status_t</a>\r
1417 (*<strong>ci_modify_av</strong>) (\r
1418         IN              const   ib_av_handle_t                          h_av,\r
1419         IN              const   <a href="./ib_types_h.html#robo57">ib_av_attr_t</a>                            *p_av_attr,\r
1420         IN      OUT                     <a href="#robo1164">ci_umv_buf_t</a>                            *p_umv_buf OPTIONAL );\r
1421 </pre>\r
1422 </span><p><strong>DESCRIPTION</strong></p>\r
1423 <span class="DESCRIPTION"><pre>       This routine allows a consumer to modify the address information\r
1424        passed.\r
1425 </pre>\r
1426 </span><p><strong>PARAMETERS</strong></p>\r
1427 <span class="PARAMETERS"><pre>       h_av\r
1428                [in] Address handle that needs to be updated with new info.\r
1429        p_av_attr\r
1430                [in] New address vector to associate with the addr_handle.\r
1431        p_umv_buf\r
1432                [in out] Vendor specific parameter to support user mode IO.\r
1433 </pre>\r
1434 </span><p><strong>RETURN VALUE</strong></p>\r
1435 <span class="RETURN_VALUE"><pre>       IB_SUCCESS\r
1436                Operation was successful\r
1437        IB_INVALID_AV_HANDLE\r
1438                The address vector handle was invalid\r
1439        IB_INVALID_PORT\r
1440                Invalid port number passed in the Address <a href="../complib/cl_vector_h.html#robo36">Vector</a>.\r
1441        IB_INVALID_PARAMETER\r
1442                The parameter p_av_attr is not valid.\r
1443 </pre>\r
1444 </span><p><strong>NOTES</strong></p>\r
1445 <span class="NOTES"><pre>       The values in the p_av_attr is not validated for correctness. The values\r
1446        in the attribute such as port number, protection domain etc are validated\r
1447        during processing by the channel adapter. If the attribute validation fails\r
1448        a processing error IB_WCS_LOCAL_OP_ERR.\r
1449 </pre>\r
1450 </span><p><strong>SEE ALSO</strong></p>\r
1451 <span class="SEE_ALSO"><pre>       <a href="#robo1124">ci_create_av</a>, <a href="#robo1152">ci_query_av</a>\r
1452 </pre>\r
1453 </span>\r
1454 <hr />\r
1455 \r
1456 <h2><a name="robo1143">[Functions]<a name="Verbs2fci5fmodify5fca">\r
1457 Verbs/ci_modify_ca</a></h2>\r
1458 \r
1459 <p>[<a href="#robo_top_of_doc">top</a>][<a href="#robo39">parent</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
1460 <p><strong>NAME</strong></p>\r
1461 <span class="NAME"><pre>       <strong>ci_modify_ca</strong> -- Modify port attributes and error counters\r
1462 </pre>\r
1463 </span><p><strong>SYNOPSIS</strong></p>\r
1464 <span class="SYNOPSIS"><pre>typedef <a href="./ib_types_h.html#robo49">ib_api_status_t</a>\r
1465 (*<strong>ci_modify_ca</strong>) (\r
1466         IN      const ib_ca_handle_t            h_ca,\r
1467         IN      const uint8_t                           port_num,\r
1468         IN      const <a href="./ib_types_h.html#robo61">ib_ca_mod_t</a>                       ca_mod,\r
1469         IN      const <a href="./ib_types_h.html#robo199">ib_port_attr_mod_t</a>        *p_port_attr_mod );\r
1470 </pre>\r
1471 </span><p><strong>DESCRIPTION</strong></p>\r
1472 <span class="DESCRIPTION"><pre>       Modifies either the P_KEY/Q_KEY violation counters, or sets the capability\r
1473        mask in the port attributes. This is effectively translated to PORTINFO\r
1474        values responded later when a MAD from SM or another node arrives to\r
1475        retrieve port related attributes.\r
1476 </pre>\r
1477 </span><p><strong>PARAMETERS</strong></p>\r
1478 <span class="PARAMETERS"><pre>       h_ca\r
1479                [in] Handle returned by previous call to <a href="#robo1147">ci_open_ca</a>()\r
1480        port_num\r
1481                [in] Port number, which needs to be modified.\r
1482        ca_mod\r
1483                [in] Command mask to perform operations on.\r
1484        p_port_attr_mod\r
1485                [in] port attribute which needs this change to be performed.\r
1486                if the capability bit is set, then that corresponding\r
1487                port capability is turned on.\r
1488 </pre>\r
1489 </span><p><strong>RETURN VALUE</strong></p>\r
1490 <span class="RETURN_VALUE"><pre>       IB_SUCCESS\r
1491                Modify port attributes was performed\r
1492        IB_INVALID_PORT\r
1493                Invalid port number supplied in port_att.\r
1494        IB_INVALID_PARAMETER\r
1495                Unknown Command supplied in port_attr.\r
1496        IB_UNSUPPORTED\r
1497                Optional Q_KEY and P_KEY violation counters are not supported.\r
1498        IB_INVALID_CA_HANDLE\r
1499                h_ca is invalid\r
1500 </pre>\r
1501 </span><p><strong>NOTES</strong></p>\r
1502 <span class="NOTES"><pre> No ownership checks are performed in the <a href="#robo39">Verbs</a> Provider Driver.\r
1503  All such permission checks are to be performed by the IB access layer\r
1504  before passing requests down to the HCA driver. These operations can be\r
1505  performed only by the special QP owner. Either the QP0 or QP1. Since port\r
1506  attributes is really maintained by the QP0 for SMA to respond with correct\r
1507  values, but the agent capability is really a QP1 functionality.\r
1508 </pre>\r
1509 </span><p><strong>SEE ALSO</strong></p>\r
1510 <span class="SEE_ALSO"><pre>       <a href="#robo1147">ci_open_ca</a>, <a href="#robo1153">ci_query_ca</a>, <a href="#robo1122">ci_close_ca</a>\r
1511 </pre>\r
1512 </span>\r
1513 <hr />\r
1514 \r
1515 <h2><a name="robo1144">[Functions]<a name="Verbs2fci5fmodify5fmr">\r
1516 Verbs/ci_modify_mr</a></h2>\r
1517 \r
1518 <p>[<a href="#robo_top_of_doc">top</a>][<a href="#robo39">parent</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
1519 <p><strong>NAME</strong></p>\r
1520 <span class="NAME"><pre>       <strong>ci_modify_mr</strong> -- Modify some or all parameters of a memory region.\r
1521 </pre>\r
1522 </span><p><strong>SYNOPSIS</strong></p>\r
1523 <span class="SYNOPSIS"><pre>typedef <a href="./ib_types_h.html#robo49">ib_api_status_t</a>\r
1524 (*<strong>ci_modify_mr</strong>) (\r
1525         IN              const   ib_mr_handle_t                          h_mr,\r
1526         IN              const   <a href="./ib_types_h.html#robo161">ib_mr_mod_t</a>                                     mr_modify_mask,\r
1527         IN              const   <a href="./ib_types_h.html#robo160">ib_mr_create_t</a>* const           p_mr_create OPTIONAL,\r
1528                 OUT                     net32_t* const                          p_lkey,\r
1529                 OUT                     net32_t* const                          p_rkey,\r
1530         IN              const   ib_pd_handle_t                          h_pd OPTIONAL,\r
1531         IN                              boolean_t                                       um_call );\r
1532 </pre>\r
1533 </span><p><strong>DESCRIPTION</strong></p>\r
1534 <span class="DESCRIPTION"><pre>       This routine modifies attributes of the specified memory region\r
1535        irrespective of whether the handle was obtained via <a href="#robo1158">ci_register_mr</a>\r
1536        or <a href="#robo1159">ci_register_pmr</a>. This verb conceptually performs a de-registration\r
1537        followed by a <a href="#robo1158">ci_register_mr</a>.\r
1538 </pre>\r
1539 </span><p><strong>PARAMETERS</strong></p>\r
1540 <span class="PARAMETERS"><pre>       h_mr\r
1541                [in] Handle to the memory region whose attributes are to be modified.\r
1542        mr_modify_mask\r
1543                [in] Command specifying which parts of the mem_region is valid. The\r
1544                command is specified as a bit mask.\r
1545        p_mr_create\r
1546                [in] Desired attributes that need to be modified for mem_handle.\r
1547                This is an optional parameter which can be NULL if mr_modify_mask\r
1548                is set to IB_MR_MOD_PD.\r
1549        p_lkey\r
1550                [out] The new l_key for this newly registered memory region.\r
1551        p_rkey\r
1552                [out] The new r_key for this newly registered memory region.\r
1553                The verbs provider is required to give this in the expected ordering\r
1554                on the wire. When rkey's are exchanged between remote nodes, no\r
1555                swapping of this data will be performed.\r
1556        h_pd\r
1557                [in] This parameter is valid only if the IB_MR_MOD_PD flag is set\r
1558                in the mr_modify_req parameter. This field supplies the new\r
1559                protection domain to which the modified region should be\r
1560                associated with.\r
1561        um_call\r
1562                [in] Boolean indicating whether the registration originated in user-mode.\r
1563 </pre>\r
1564 </span><p><strong>RETURN VALUE</strong></p>\r
1565 <span class="RETURN_VALUE"><pre>       IB_SUCCESS\r
1566                The modify memory region request completed successfully.\r
1567        IB_RESOURCE_BUSY\r
1568                The memory region has windows bound to it.\r
1569        IB_INSUFFICIENT_RESOURCES\r
1570                Insufficient resources to complete the request.\r
1571        IB_INVALID_MR_HANDLE\r
1572                The memory handle supplied is not a valid memory region handle.\r
1573        IB_INVALID_PERMISSION\r
1574                Invalid access rights specified.\r
1575        IB_INVALID_PARAMETER\r
1576                A reference to the lkey or rkey was not provided or the specified\r
1577                modify mask is invalid.\r
1578        IB_INVALID_SETTING\r
1579                The specified memory region attributes are invalid.\r
1580        IB_INVALID_PD_HANDLE\r
1581                Protection domain handle supplied is not valid.\r
1582 </pre>\r
1583 </span><p><strong>NOTES</strong></p>\r
1584 <span class="NOTES"><pre>       Remote and Atomic access settings in ib_access_ctrl_t, requires local\r
1585        write access to be enabled.\r
1586        TBD: How to handle shared memory region being passed to modify_mem?\r
1587 </pre>\r
1588 </span><p><strong>SEE ALSO</strong></p>\r
1589 <span class="SEE_ALSO"><pre>       <a href="#robo1158">ci_register_mr</a>, <a href="#robo1159">ci_register_pmr</a>, <a href="#robo1160">ci_register_smr</a>\r
1590 </pre>\r
1591 </span>\r
1592 <hr />\r
1593 \r
1594 <h2><a name="robo1145">[Functions]<a name="Verbs2fci5fmodify5fpmr">\r
1595 Verbs/ci_modify_pmr</a></h2>\r
1596 \r
1597 <p>[<a href="#robo_top_of_doc">top</a>][<a href="#robo39">parent</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
1598 <p><strong>NAME</strong></p>\r
1599 <span class="NAME"><pre>       <strong>ci_modify_pmr</strong> -- Modify some or all parameters of a memory region.\r
1600 </pre>\r
1601 </span><p><strong>SYNOPSIS</strong></p>\r
1602 <span class="SYNOPSIS"><pre>typedef <a href="./ib_types_h.html#robo49">ib_api_status_t</a>\r
1603 (*<strong>ci_modify_pmr</strong>) (\r
1604         IN              const   ib_mr_handle_t                          h_mr,\r
1605         IN              const   <a href="./ib_types_h.html#robo161">ib_mr_mod_t</a>                                     mr_modify_mask,\r
1606         IN              const   <a href="./ib_types_h.html#robo187">ib_phys_create_t</a>* const         p_pmr_create,\r
1607         IN      OUT                     uint64_t* const                         p_vaddr,\r
1608                 OUT                     net32_t* const                          p_lkey,\r
1609                 OUT                     net32_t* const                          p_rkey,\r
1610         IN              const   ib_pd_handle_t                          h_pd OPTIONAL,\r
1611         IN                              boolean_t                                       um_call );\r
1612 </pre>\r
1613 </span><p><strong>DESCRIPTION</strong></p>\r
1614 <span class="DESCRIPTION"><pre>       This routine modifies attributes of the specified memory region\r
1615        irrespective of whether the handle was obtained via <a href="#robo1158">ci_register_mr</a>\r
1616        or <a href="#robo1159">ci_register_pmr</a>. This verb conceptually performs a de-registration\r
1617        followed by a <a href="#robo1159">ci_register_pmr</a>.\r
1618 </pre>\r
1619 </span><p><strong>PARAMETERS</strong></p>\r
1620 <span class="PARAMETERS"><pre>       h_mr\r
1621                [in] Handle to the memory region whose attributes are to be modified.\r
1622        mr_modify_mask\r
1623                [in] Command specifying which parts of the mem_region is valid. The\r
1624                command is specified as a bit mask.\r
1625        p_pmr_create\r
1626                [in] Desired attributes that need to be modified for mem_handle.\r
1627        p_vaddr\r
1628                [in/out] On input, references the requested virtual address for the\r
1629                start of the physical region.  On output, references the actual\r
1630                virtual address assigned to the registered region.\r
1631        p_lkey\r
1632                [out] The new l_key for this newly registered physical memory region.\r
1633        p_rkey\r
1634                [out] The new r_key for this newly registered physical memory region.\r
1635                VPD is required to give this in the expected ordering on the wire. When\r
1636                rkey's are exchanged between remote nodes, no swapping of this data\r
1637                will be performed.\r
1638        h_pd\r
1639                [in] This parameter is valid only if the IB_MR_MOD_PD flag is set\r
1640                in the mr_modify_req parameter. This field supplies the new\r
1641                protection domain to which the modified region should be\r
1642                associated with.\r
1643        um_call\r
1644                [in] Boolean indicating whether the registration originated in user-mode.\r
1645 </pre>\r
1646 </span><p><strong>RETURN VALUE</strong></p>\r
1647 <span class="RETURN_VALUE"><pre>       IB_SUCCESS\r
1648                The modify memory region request completed successfully.\r
1649        IB_RESOURCE_BUSY\r
1650                The memory region has windows bound to it.\r
1651        IB_INSUFFICIENT_RESOURCES\r
1652                Insufficient resources to complete the request.\r
1653        IB_INVALID_MR_HANDLE\r
1654                The memory handle supplied is not a valid memory region handle.\r
1655        IB_INVALID_PERMISSION\r
1656                Invalid access rights specified.\r
1657        IB_INVALID_PARAMETER\r
1658                A reference to the virtual address, lkey, rkey was not provided or\r
1659                the specified modify mask is invalid.\r
1660        IB_INVALID_SETTING\r
1661                The specified memory region attributes are invalid.\r
1662 </pre>\r
1663 </span><p><strong>PORTABILITY</strong></p>\r
1664 <span class="PORTABILITY"><pre>       Kernel Mode only\r
1665 </pre>\r
1666 </span><p><strong>NOTES</strong></p>\r
1667 <span class="NOTES"><pre>       Remote and Atomic access settings in ib_access_ctrl_t, requires local\r
1668        write access to be enabled.\r
1669 </pre>\r
1670 </span><p><strong>SEE ALSO</strong></p>\r
1671 <span class="SEE_ALSO"><pre>       <a href="#robo1158">ci_register_mr</a>, <a href="#robo1159">ci_register_pmr</a>, <a href="#robo1160">ci_register_smr</a>\r
1672 </pre>\r
1673 </span>\r
1674 <hr />\r
1675 \r
1676 <h2><a name="robo1146">[Functions]<a name="Verbs2fci5fmodify5fqp">\r
1677 Verbs/ci_modify_qp</a></h2>\r
1678 \r
1679 <p>[<a href="#robo_top_of_doc">top</a>][<a href="#robo39">parent</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
1680 <p><strong>NAME</strong></p>\r
1681 <span class="NAME"><pre>       <strong>ci_modify_qp</strong> -- Modify attributes of the specified QP.\r
1682 </pre>\r
1683 </span><p><strong>SYNOPSIS</strong></p>\r
1684 <span class="SYNOPSIS"><pre>typedef <a href="./ib_types_h.html#robo49">ib_api_status_t</a>\r
1685 (*<strong>ci_modify_qp</strong>) (\r
1686         IN              const   ib_qp_handle_t                          h_qp,\r
1687         IN              const   <a href="./ib_types_h.html#robo207">ib_qp_mod_t</a>                                     *p_modify_attr,\r
1688                 OUT                     <a href="./ib_types_h.html#robo205">ib_qp_attr_t</a>                            *p_qp_attr OPTIONAL,\r
1689         IN      OUT                     <a href="#robo1164">ci_umv_buf_t</a>                            *p_umv_buf OPTIONAL );\r
1690 </pre>\r
1691 </span><p><strong>DESCRIPTION</strong></p>\r
1692 <span class="DESCRIPTION"><pre>       This routine is used to modify the qp states or other attributes of the\r
1693        QP. On successful completion, the requested state transition is performed\r
1694        and the QP is transitioned to the required state.\r
1695 </pre>\r
1696 </span><p><strong>PARAMETERS</strong></p>\r
1697 <span class="PARAMETERS"><pre>       h_qp\r
1698                [in] Handle to the queue pair whose state is to be modified.\r
1699        p_modify_attr\r
1700                [in] Specifies what attributes need to be modified in the qp.\r
1701        p_qp_attr\r
1702                [out] QP attributes after the qp is successfully created.\r
1703        p_umv_buf\r
1704                [in out] Vendor specific parameter to support user mode IO.\r
1705 </pre>\r
1706 </span><p><strong>RETURN VALUE</strong></p>\r
1707 <span class="RETURN_VALUE"><pre>       IB_SUCCESS\r
1708                The operation was successful and the QP attributes are modified\r
1709                to the requested state.\r
1710        IB_INSUFFICIENT_RESOURCES\r
1711                Insufficient resources to complete the requested operation.\r
1712        IB_INVALID_QP_HANDLE\r
1713                Invalid QP handle was passed.\r
1714        IB_UNSUPPORTED\r
1715                Requested operation is not supported, for e.g. Atomic operations.\r
1716        IB_QP_INVALID_STATE\r
1717                Invalid state transition request. Current QP state not in allowable\r
1718                state.\r
1719        IB_INVALID_PKEY\r
1720                Pkey specified in modify request not valid entry in P_KEY table. Or\r
1721                index is out of range.\r
1722        IB_INVALID_APM_STATE\r
1723                Invalid automatic path migration state specified in the request.\r
1724        IB_INVALID_PARAMETER\r
1725                The parameter p_modify_attr is not valid.\r
1726 </pre>\r
1727 </span><p><strong>NOTES</strong></p>\r
1728 <span class="NOTES"><pre>       Refer to Table 79 in chapter 11, Volume 1 of the InfiniBand Specifications.\r
1729 </pre>\r
1730 </span><p><strong>SEE ALSO</strong></p>\r
1731 <span class="SEE_ALSO"><pre>       <a href="#robo1127">ci_create_qp</a>, <a href="#robo1128">ci_create_spl_qp</a>, <a href="#robo1157">ci_query_qp</a>\r
1732 </pre>\r
1733 </span>\r
1734 <hr />\r
1735 \r
1736 <h2><a name="robo1147">[Functions]<a name="Verbs2fci5fopen5fca">\r
1737 Verbs/ci_open_ca</a></h2>\r
1738 \r
1739 <p>[<a href="#robo_top_of_doc">top</a>][<a href="#robo39">parent</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
1740 <p><strong>NAME</strong></p>\r
1741 <span class="NAME"><pre>       <strong>ci_open_ca</strong> -- open and possibly obtain a handle to access the HCA.\r
1742 </pre>\r
1743 </span><p><strong>SYNOPSIS</strong></p>\r
1744 <span class="SYNOPSIS"><pre>typedef <a href="./ib_types_h.html#robo49">ib_api_status_t</a>\r
1745 (*<strong>ci_open_ca</strong>) (\r
1746         IN              const   <a href="./ib_types_h.html#robo901">ib_net64_t</a>                                      ca_guid,\r
1747         IN              const   <a href="#robo1123">ci_completion_cb_t</a>                      pfn_completion_cb,\r
1748         IN              const   <a href="#robo1119">ci_async_event_cb_t</a>                     pfn_async_event_cb,\r
1749         IN              const   void* const                                     ca_context,\r
1750                 OUT                     ib_ca_handle_t                          *ph_ca );\r
1751 </pre>\r
1752 </span><p><strong>DESCRIPTION</strong></p>\r
1753 <span class="DESCRIPTION"><pre>       This routine returns a handle to an open instance of a HCA. Client can call\r
1754        this routine to retrieve a new open instance. Only one instance of the\r
1755        open call is active at any time. If a duplicate open is called by the\r
1756        consumer or any other consumer, it IB_RESOURCE_BUSY error status is\r
1757        returned.\r
1758 </pre>\r
1759 </span><p><strong>PARAMETERS</strong></p>\r
1760 <span class="PARAMETERS"><pre>       ca_guid\r
1761                [in] The HCA adapter's EUI64 identifier. Clients would use other\r
1762                enumeration API's to locate all available adapters and their\r
1763                guids in a system, e.g. GetCaGuids(), maintained by the IB\r
1764                Access Layer. User mode consumers also have the same mechanism\r
1765                to retrieve this information.\r
1766        pfn_completion_cb\r
1767                [in] Completion Handler, one per open instance.\r
1768        pfn_async_event_cb\r
1769                [in] Asynchronous event handler, one per open instance.\r
1770        ca_context\r
1771                [in] <a href="#robo39">Verbs</a> consumer supplied value, which is returned on calls to\r
1772                handlers which in turn is used by clients to identify the\r
1773                open instance.\r
1774        ph_ca\r
1775                [out] Pointer to a handle to the newly open instance of the CA returned\r
1776                by the <a href="#robo39">Verbs</a> Provider.\r
1777 </pre>\r
1778 </span><p><strong>RETURN VALUE</strong></p>\r
1779 <span class="RETURN_VALUE"><pre>       IB_SUCCESS\r
1780                The HCA is successfully opened and returned handle is valid.\r
1781        IB_INSUFFICIENT_RESOURCES\r
1782                Insufficient resources to satisfy request.\r
1783        IB_INVALID_PARAMETER\r
1784                Callback routine are not provided, GUID value is zero, or ph_ca is NULL\r
1785        IB_RESOURCE_BUSY\r
1786                The interface is already open by another consumer.\r
1787        IB_NOT_FOUND\r
1788                ca_guid passed is not valid\r
1789 </pre>\r
1790 </span><p><strong>SEE ALSO</strong></p>\r
1791 <span class="SEE_ALSO"><pre>       <a href="#robo1153">ci_query_ca</a>, <a href="#robo1143">ci_modify_ca</a>, <a href="#robo1122">ci_close_ca</a>\r
1792 </pre>\r
1793 </span>\r
1794 <hr />\r
1795 \r
1796 <h2><a name="robo1148">[Functions]<a name="Verbs2fci5fpeek5fcq">\r
1797 Verbs/ci_peek_cq</a></h2>\r
1798 \r
1799 <p>[<a href="#robo_top_of_doc">top</a>][<a href="#robo39">parent</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
1800 <p><strong>NAME</strong></p>\r
1801 <span class="NAME"><pre>       <strong>ci_peek_cq</strong>\r
1802 </pre>\r
1803 </span><p><strong>DESCRIPTION</strong></p>\r
1804 <span class="DESCRIPTION"><pre>       Returns the number of entries currently on the completion queue.\r
1805 </pre>\r
1806 </span><p><strong>SYNOPSIS</strong></p>\r
1807 <span class="SYNOPSIS"><pre>typedef <a href="./ib_types_h.html#robo49">ib_api_status_t</a>\r
1808 (*<strong>ci_peek_cq</strong>) (\r
1809         IN              const   ib_cq_handle_t                          h_cq,\r
1810         OUT                             uint32_t* const                         p_n_cqes );\r
1811 </pre>\r
1812 </span><p><strong>PARAMETERS</strong></p>\r
1813 <span class="PARAMETERS"><pre>       h_cq\r
1814                [in] Handle to the completion queue to peek.\r
1815 \r
1816        p_n_cqes\r
1817                [out] The number of completion entries on the CQ.\r
1818 \r
1819  RETURN VALUES\r
1820        IB_SUCCESS\r
1821                The peek operation completed successfully.\r
1822        IB_INVALID_CQ_HANDLE\r
1823                The completion queue handle was invalid.\r
1824        IB_INVALID_PARAMETER\r
1825                A reference to the completion queue entry count was not provided.\r
1826        IB_UNSUPPORTED\r
1827                This operation is not supported by the channel adapter.\r
1828 </pre>\r
1829 </span><p><strong>NOTES</strong></p>\r
1830 <span class="NOTES"><pre>       The value returned is a snapshot of the number of compleiton queue\r
1831        entries curently on the completion queue.  Support for this operation\r
1832        is optional by a channel adapter vendor.\r
1833 </pre>\r
1834 </span><p><strong>SEE ALSO</strong></p>\r
1835 <span class="SEE_ALSO"><pre>       <a href="#robo1125">ci_create_cq</a>, <a href="#robo1149">ci_poll_cq</a>, <a href="#robo1137">ci_enable_cq_notify</a>, <a href="#robo1138">ci_enable_ncomp_cq_notify</a>\r
1836 </pre>\r
1837 </span>\r
1838 <hr />\r
1839 \r
1840 <h2><a name="robo1149">[Functions]<a name="Verbs2fci5fpoll5fcq">\r
1841 Verbs/ci_poll_cq</a></h2>\r
1842 \r
1843 <p>[<a href="#robo_top_of_doc">top</a>][<a href="#robo39">parent</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
1844 <p><strong>NAME</strong></p>\r
1845 <span class="NAME"><pre>       <strong>ci_poll_cq</strong> -- Retrieve a work completion record from a completion queue\r
1846 </pre>\r
1847 </span><p><strong>SYNOPSIS</strong></p>\r
1848 <span class="SYNOPSIS"><pre>typedef <a href="./ib_types_h.html#robo49">ib_api_status_t</a>\r
1849 (*<strong>ci_poll_cq</strong>) (\r
1850         IN              const   ib_cq_handle_t                          h_cq,\r
1851         IN      OUT                     <a href="./ib_types_h.html#robo260">ib_wc_t</a>** const                         pp_free_wclist,\r
1852                 OUT                     <a href="./ib_types_h.html#robo260">ib_wc_t</a>** const                         pp_done_wclist );\r
1853 </pre>\r
1854 </span><p><strong>DESCRIPTION</strong></p>\r
1855 <span class="DESCRIPTION"><pre>       This routine retrieves a work completion entry from the specified\r
1856        completion queue. The contents of the data returned in a work completion\r
1857        is specified in <a href="./ib_types_h.html#robo260">ib_wc_t</a>.\r
1858 </pre>\r
1859 </span><p><strong>PARAMETERS</strong></p>\r
1860 <span class="PARAMETERS"><pre>       h_cq\r
1861                [in] Handle to the completion queue being polled.\r
1862        pp_free_wclist\r
1863                [in out] A list of work request structures provided by the consumer\r
1864                for the channel interface to return completed Completion Queue\r
1865                entries.  If not all the entries are consumed, this list holds the\r
1866                list of un-utilized completion entries provided back to the consumer.\r
1867        pp_done_wclist\r
1868                [out] A list of work completions retrieved from the completion queue\r
1869                and successfully processed.\r
1870 </pre>\r
1871 </span><p><strong>RETURN VALUE</strong></p>\r
1872 <span class="RETURN_VALUE"><pre>       IB_SUCCESS\r
1873                Poll completed successfully and found one or more entries. If on\r
1874                completion the pp_free_wclist is empty, then there are potentially more\r
1875                entries and the consumer must continue to retrieve entries.\r
1876        IB_INVALID_CQ_HANDLE\r
1877                The cq_handle supplied is not valid.\r
1878        IB_NOT_FOUND\r
1879                There were no completion entries found in the specified CQ.\r
1880 </pre>\r
1881 </span><p><strong>SEE ALSO</strong></p>\r
1882 <span class="SEE_ALSO"><pre>       <a href="#robo1125">ci_create_cq</a>, <a href="#robo1151">ci_post_send</a>, <a href="#robo1150">ci_post_recv</a>, <a href="#robo1121">ci_bind_mw</a>\r
1883 </pre>\r
1884 </span>\r
1885 <hr />\r
1886 \r
1887 <h2><a name="robo1150">[Functions]<a name="Verbs2fci5fpost5frecv">\r
1888 Verbs/ci_post_recv</a></h2>\r
1889 \r
1890 <p>[<a href="#robo_top_of_doc">top</a>][<a href="#robo39">parent</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
1891 <p><strong>NAME</strong></p>\r
1892 <span class="NAME"><pre>       <strong>ci_post_recv</strong> -- Post a work request to the receive queue of a queue pair.\r
1893 </pre>\r
1894 </span><p><strong>SYNOPSIS</strong></p>\r
1895 <span class="SYNOPSIS"><pre>typedef <a href="./ib_types_h.html#robo49">ib_api_status_t</a>\r
1896 (*<strong>ci_post_recv</strong>) (\r
1897         IN              const   ib_qp_handle_t                  h_qp,\r
1898         IN                              <a href="./ib_types_h.html#robo225">ib_recv_wr_t</a>*   const   p_recv_wr,\r
1899                 OUT                     <a href="./ib_types_h.html#robo225">ib_recv_wr_t</a>                    **pp_failed );\r
1900 </pre>\r
1901 </span><p><strong>DESCRIPTION</strong></p>\r
1902 <span class="DESCRIPTION"><pre>       This routine allows to queue a work request to the receive side of a\r
1903        queue pair. The work_req holds necessary data to satisfy an incoming\r
1904        receive message. If an attempt is made to queue more work requests than\r
1905        what is available, an error is returned.\r
1906 </pre>\r
1907 </span><p><strong>PARAMETERS</strong></p>\r
1908 <span class="PARAMETERS"><pre>       h_qp\r
1909                [in] Handle to the queue pair to which the receive work request is being\r
1910                posted.\r
1911        p_recv_wr\r
1912                [in] Holds the WRs to be posted to the receive queue.\r
1913        pp_failed\r
1914                [out] If any entry could not be posted with the CI, then this points\r
1915                to the first WR that completed unsuccessfully. If all entries are\r
1916                posted, then this field is set to NULL on successful exit.\r
1917 </pre>\r
1918 </span><p><strong>RETURN VALUE</strong></p>\r
1919 <span class="RETURN_VALUE"><pre>       Any unsuccessful status indicates the status of the first failed request.\r
1920 \r
1921        IB_SUCCESS\r
1922                The work request was successfully queued to the receive side of the QP.\r
1923        IB_INVALID_QP_HANDLE\r
1924                qp_handle supplied is not valid.\r
1925        IB_INSUFFICIENT_RESOURCES\r
1926                The qp has exceeded its receive queue depth than what is has been\r
1927                configured.\r
1928        IB_INVALID_WR_TYPE\r
1929                Invalid work request type found in the request.\r
1930        IB_INVALID_QP_STATE\r
1931                QP was in reset or init state.\r
1932                (TBD: there may be an errata that allows posting in init state)\r
1933 </pre>\r
1934 </span><p><strong>SEE ALSO</strong></p>\r
1935 <span class="SEE_ALSO"><pre>       <a href="#robo1151">ci_post_send</a>, <a href="#robo1149">ci_poll_cq</a>.\r
1936 </pre>\r
1937 </span>\r
1938 <hr />\r
1939 \r
1940 <h2><a name="robo1151">[Functions]<a name="Verbs2fci5fpost5fsend">\r
1941 Verbs/ci_post_send</a></h2>\r
1942 \r
1943 <p>[<a href="#robo_top_of_doc">top</a>][<a href="#robo39">parent</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
1944 <p><strong>NAME</strong></p>\r
1945 <span class="NAME"><pre>       <strong>ci_post_send</strong> -- Post a work request to the send side of a queue pair.\r
1946 </pre>\r
1947 </span><p><strong>SYNOPSIS</strong></p>\r
1948 <span class="SYNOPSIS"><pre>typedef <a href="./ib_types_h.html#robo49">ib_api_status_t</a>\r
1949 (*<strong>ci_post_send</strong>) (\r
1950         IN              const   ib_qp_handle_t                  h_qp,\r
1951         IN                              <a href="./ib_types_h.html#robo249">ib_send_wr_t</a>*   const   p_send_wr,\r
1952                 OUT                     <a href="./ib_types_h.html#robo249">ib_send_wr_t</a>                    **pp_failed );\r
1953 </pre>\r
1954 </span><p><strong>DESCRIPTION</strong></p>\r
1955 <span class="DESCRIPTION"><pre>       This routine posts a work request to the send side of the queue pair.\r
1956        The different types of work request that can be posted are explained in\r
1957        the ib_wr_t structure. For exact details on ordering rules please consult\r
1958        the Volume 1, of the InfiniBand Specifications. If there is more\r
1959        outstanding requests posted that what the queue is configured for, an\r
1960        immediate error is returned.\r
1961 </pre>\r
1962 </span><p><strong>PARAMETERS</strong></p>\r
1963 <span class="PARAMETERS"><pre>       h_qp\r
1964                [in] The queue pair to which this work request is being submitted.\r
1965        p_send_wr\r
1966                [in] A pointer to the head of the list that must be posted to the\r
1967                Send Queue.\r
1968        pp_failed\r
1969                [out] A pointer to the head of the list that holds the failed WRs.\r
1970                If all the entries provided are posted with the CI, then this parameter\r
1971                would be set to NULL.\r
1972 </pre>\r
1973 </span><p><strong>RETURN VALUE</strong></p>\r
1974 <span class="RETURN_VALUE"><pre>       Any unsuccessful status indicates the status of the first failed request.\r
1975 \r
1976        IB_SUCCESS\r
1977                All the work requests are completed successfully\r
1978        IB_INVALID_QP_HANDLE\r
1979                The qp_handle supplied is invalid.\r
1980        IB_INSUFFICIENT_RESOURCES\r
1981                Insufficient resources to complete the request.\r
1982                There are no more work elements in the channel interface to\r
1983                process this request, and the total outstanding work request has\r
1984                been exceeded.\r
1985        IB_INVALID_WR_TYPE\r
1986                The work request type was not valid.\r
1987        IB_INVALID_QP_STATE\r
1988                The queue pair is either in Reset, Init, RTR or Error state.\r
1989        IB_INVALID_MAX_SGE\r
1990                The work request has too many scatter gather elements than what the\r
1991                QP is configured.\r
1992        IB_UNSUPPORTED\r
1993                Atomics or Reliable datagram request is not supported by this HCA.\r
1994        IB_INVALID_ADDR_HANDLE\r
1995                Address handle supplied in the work request is invalid.\r
1996 </pre>\r
1997 </span><p><strong>NOTES</strong></p>\r
1998 <span class="NOTES"><pre>       Please refer to Table 81 and Table 82 for allowed operation types\r
1999        on different types of queue pairs, and the different modifiers\r
2000        acceptable for the work request for different QP service types.\r
2001 </pre>\r
2002 </span><p><strong>SEE ALSO</strong></p>\r
2003 <span class="SEE_ALSO"><pre>       <a href="#robo1150">ci_post_recv</a>, <a href="#robo1149">ci_poll_cq</a>\r
2004 </pre>\r
2005 </span>\r
2006 <hr />\r
2007 \r
2008 <h2><a name="robo1152">[Functions]<a name="Verbs2fci5fquery5fav">\r
2009 Verbs/ci_query_av</a></h2>\r
2010 \r
2011 <p>[<a href="#robo_top_of_doc">top</a>][<a href="#robo39">parent</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
2012 <p><strong>NAME</strong></p>\r
2013 <span class="NAME"><pre>       <strong>ci_query_av</strong> -- Obtain the address vector associated with the handle\r
2014 </pre>\r
2015 </span><p><strong>SYNOPSIS</strong></p>\r
2016 <span class="SYNOPSIS"><pre>typedef <a href="./ib_types_h.html#robo49">ib_api_status_t</a>\r
2017 (*<strong>ci_query_av</strong>) (\r
2018         IN              const   ib_av_handle_t                          h_av,\r
2019                 OUT                     <a href="./ib_types_h.html#robo57">ib_av_attr_t</a>                            *p_av_attr,\r
2020                 OUT                     ib_pd_handle_t                          *ph_pd,\r
2021         IN      OUT                     <a href="#robo1164">ci_umv_buf_t</a>                            *p_umv_buf OPTIONAL );\r
2022 </pre>\r
2023 </span><p><strong>DESCRIPTION</strong></p>\r
2024 <span class="DESCRIPTION"><pre>       This routine returns the address vector and pd_handle associated with the\r
2025        av_handle.\r
2026 </pre>\r
2027 </span><p><strong>PARAMETERS</strong></p>\r
2028 <span class="PARAMETERS"><pre>       h_av\r
2029                [in] Handle to the address vector\r
2030        p_av_attr\r
2031                [out] address vector data referred by the av_handle\r
2032        ph_pd\r
2033                [out] pd handle associated with the av_handle\r
2034        p_umv_buf\r
2035                [in out] Vendor specific parameter to support user mode IO.\r
2036 </pre>\r
2037 </span><p><strong>RETURN VALUE</strong></p>\r
2038 <span class="RETURN_VALUE"><pre>       IB_SUCCESS\r
2039                returned values are valid\r
2040        IB_INVALID_AV_HANDLE\r
2041                The address vector handle was invalid\r
2042        IB_INVALID_PARAMETER\r
2043                One of the p_av_attr or ph_pd parameters was NULL.\r
2044        IB_INVALID_PORT\r
2045                Invalid port number passed in the Address <a href="../complib/cl_vector_h.html#robo36">Vector</a>.\r
2046 </pre>\r
2047 </span><p><strong>SEE ALSO</strong></p>\r
2048 <span class="SEE_ALSO"><pre>       <a href="#robo1124">ci_create_av</a>, <a href="#robo1142">ci_modify_av</a>\r
2049 </pre>\r
2050 </span>\r
2051 <hr />\r
2052 \r
2053 <h2><a name="robo1153">[Functions]<a name="Verbs2fci5fquery5fca">\r
2054 Verbs/ci_query_ca</a></h2>\r
2055 \r
2056 <p>[<a href="#robo_top_of_doc">top</a>][<a href="#robo39">parent</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
2057 <p><strong>NAME</strong></p>\r
2058 <span class="NAME"><pre>       <strong>ci_query_ca</strong> -- Query the attributes of the HCA\r
2059 </pre>\r
2060 </span><p><strong>SYNOPSIS</strong></p>\r
2061 <span class="SYNOPSIS"><pre>typedef <a href="./ib_types_h.html#robo49">ib_api_status_t</a>\r
2062 (*<strong>ci_query_ca</strong>) (\r
2063         IN              const   ib_ca_handle_t                          h_ca,\r
2064                 OUT                     <a href="./ib_types_h.html#robo60">ib_ca_attr_t</a>                            *p_ca_attr OPTIONAL,\r
2065         IN      OUT                     uint32_t                                        *p_size,\r
2066         IN      OUT                     <a href="#robo1164">ci_umv_buf_t</a>                            *p_umv_buf OPTIONAL );\r
2067 </pre>\r
2068 </span><p><strong>DESCRIPTION</strong></p>\r
2069 <span class="DESCRIPTION"><pre>       This routine retrieves vital information about this hca. It returns\r
2070        necessary information about HCA guid, port guids, LID's assigned by\r
2071        the master SM. Clients can use this information to communicate with the\r
2072        Master SM node to perform path queries etc.\r
2073 </pre>\r
2074 </span><p><strong>PARAMETERS</strong></p>\r
2075 <span class="PARAMETERS"><pre>       h_ca\r
2076                [in] Handle returned by an earlier call to <a href="#robo1147">ci_open_ca</a>()\r
2077        p_ca_attr\r
2078                [out] CA attribute of this Host Channel adapter\r
2079        p_size\r
2080                [in/out] On input, this references the size of the data buffer\r
2081                referenced by the p_ca_attr parameter.\r
2082                On output, the number of bytes used or needed to copy all CA\r
2083                attribute information.\r
2084        p_umv_buf\r
2085                [in out] Vendor specific parameter to support user mode IO.\r
2086 </pre>\r
2087 </span><p><strong>RETURN VALUE</strong></p>\r
2088 <span class="RETURN_VALUE"><pre>       IB_SUCCESS\r
2089                The attribute structure is returned completely.\r
2090        IB_INSUFFICIENT_MEMORY\r
2091                The size of the p_ca_attr buffer, specified through p_size, is\r
2092                insufficient to store all of the CA attribute information.\r
2093        IB_INVALID_CA_HANDLE\r
2094                h_ca is invalid\r
2095        IB_INVALID_PARAMETER\r
2096                p_size is NULL.\r
2097 </pre>\r
2098 </span><p><strong>NOTES</strong></p>\r
2099 <span class="NOTES"><pre>       Users may obtain the size of the data buffer required to obtain the\r
2100        CA attributes by calling this function with p_ca_attr set to NULL.\r
2101        The channel interface will then return the necessary size in the\r
2102        variable referenced by the p_size parameter.  The caller can then allocate\r
2103        exact size and call this routine again. No partial information is returned\r
2104        if the size is not sufficient.\r
2105 </pre>\r
2106 </span><p><strong>SEE ALSO</strong></p>\r
2107 <span class="SEE_ALSO"><pre>       <a href="#robo1147">ci_open_ca</a>, <a href="#robo1143">ci_modify_ca</a>\r
2108 </pre>\r
2109 </span>\r
2110 <hr />\r
2111 \r
2112 <h2><a name="robo1154">[Functions]<a name="Verbs2fci5fquery5fcq">\r
2113 Verbs/ci_query_cq</a></h2>\r
2114 \r
2115 <p>[<a href="#robo_top_of_doc">top</a>][<a href="#robo39">parent</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
2116 <p><strong>NAME</strong></p>\r
2117 <span class="NAME"><pre>       <strong>ci_query_cq</strong> -- Query the number of entries configured for the CQ.\r
2118 </pre>\r
2119 </span><p><strong>SYNOPSIS</strong></p>\r
2120 <span class="SYNOPSIS"><pre>typedef <a href="./ib_types_h.html#robo49">ib_api_status_t</a>\r
2121 (*<strong>ci_query_cq</strong>) (\r
2122         IN              const   ib_cq_handle_t                          h_cq,\r
2123                 OUT                     uint32_t                                        *p_size,\r
2124         IN      OUT                     <a href="#robo1164">ci_umv_buf_t</a>                            *p_umv_buf OPTIONAL );\r
2125 </pre>\r
2126 </span><p><strong>DESCRIPTION</strong></p>\r
2127 <span class="DESCRIPTION"><pre>       This routine returns the maximum number of entries this completion\r
2128        queue is configured.\r
2129 </pre>\r
2130 </span><p><strong>PARAMETERS</strong></p>\r
2131 <span class="PARAMETERS"><pre>       h_cq\r
2132                [in] Handle to the completion queue\r
2133        p_size\r
2134                [out] The number of entries the completion queue is configured to hold\r
2135        p_umv_buf\r
2136                [in out] Vendor specific parameter to support user mode IO.\r
2137 </pre>\r
2138 </span><p><strong>RETURN VALUE</strong></p>\r
2139 <span class="RETURN_VALUE"><pre>       IB_SUCCESS\r
2140                The call completed successfully, and the returned values are valid\r
2141        IB_INVALID_CQ_HANDLE\r
2142                The cq_handle passed is invalid.\r
2143        IB_INVALID_PARAMETER\r
2144                one of the parameters was NULL.\r
2145 </pre>\r
2146 </span><p><strong>SEE ALSO</strong></p>\r
2147 <span class="SEE_ALSO"><pre>       <a href="#robo1125">ci_create_cq</a>, <a href="#robo1161">ci_resize_cq</a>\r
2148 </pre>\r
2149 </span>\r
2150 <hr />\r
2151 \r
2152 <h2><a name="robo1155">[Functions]<a name="Verbs2fci5fquery5fmr">\r
2153 Verbs/ci_query_mr</a></h2>\r
2154 \r
2155 <p>[<a href="#robo_top_of_doc">top</a>][<a href="#robo39">parent</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
2156 <p><strong>NAME</strong></p>\r
2157 <span class="NAME"><pre>       <strong>ci_query_mr</strong> -- Query attributes of a registered memory region\r
2158 </pre>\r
2159 </span><p><strong>SYNOPSIS</strong></p>\r
2160 <span class="SYNOPSIS"><pre>typedef <a href="./ib_types_h.html#robo49">ib_api_status_t</a>\r
2161 (*<strong>ci_query_mr</strong>) (\r
2162         IN              const   ib_mr_handle_t                  h_mr,\r
2163                 OUT                     <a href="./ib_types_h.html#robo159">ib_mr_attr_t</a>*   const   p_mr_query );\r
2164 </pre>\r
2165 </span><p><strong>DESCRIPTION</strong></p>\r
2166 <span class="DESCRIPTION"><pre>       This routine retrieves the memory region attributed of a\r
2167        registered memory region. The memory handle could have been\r
2168        obtained via <a href="#robo1158">ci_register_mr</a> or <a href="#robo1159">ci_register_pmr</a>.\r
2169 </pre>\r
2170 </span><p><strong>PARAMETERS</strong></p>\r
2171 <span class="PARAMETERS"><pre>       h_mr\r
2172                [in] Memory handle for which the attributes need to be retrieved.\r
2173        p_mr_query\r
2174                [out] Attributes of the memory region associated with memory handle.\r
2175 </pre>\r
2176 </span><p><strong>RETURN VALUE</strong></p>\r
2177 <span class="RETURN_VALUE"><pre>       IB_SUCCESS\r
2178                The routine completed successfully and attributes returned\r
2179                are valid.\r
2180        IB_INVALID_MR_HANDLE\r
2181                The memory handle is not valid.\r
2182        IB_INVALID_PARAMETER\r
2183                One of the input pointers was NULL.\r
2184 </pre>\r
2185 </span><p><strong>NOTES</strong></p>\r
2186 <span class="NOTES"><pre>       Invalid handle checks are a mere signature checks in kernel mode.\r
2187        Drivers in kernel are expected to be good corporate citizens.\r
2188        In user mode, proper ownership is determined before passing handles\r
2189        down to kernel to protect from rogue applications.\r
2190 </pre>\r
2191 </span><p><strong>SEE ALSO</strong></p>\r
2192 <span class="SEE_ALSO"><pre>       <a href="#robo1158">ci_register_mr</a>, <a href="#robo1159">ci_register_pmr</a>\r
2193 </pre>\r
2194 </span>\r
2195 <hr />\r
2196 \r
2197 <h2><a name="robo1156">[Functions]<a name="Verbs2fci5fquery5fmw">\r
2198 Verbs/ci_query_mw</a></h2>\r
2199 \r
2200 <p>[<a href="#robo_top_of_doc">top</a>][<a href="#robo39">parent</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
2201 <p><strong>NAME</strong></p>\r
2202 <span class="NAME"><pre>       <strong>ci_query_mw</strong> -- Query memory window attributes for memory window handle\r
2203 </pre>\r
2204 </span><p><strong>SYNOPSIS</strong></p>\r
2205 <span class="SYNOPSIS"><pre>typedef <a href="./ib_types_h.html#robo49">ib_api_status_t</a>\r
2206 (*<strong>ci_query_mw</strong>) (\r
2207         IN              const   ib_mw_handle_t                          h_mw,\r
2208                 OUT                     ib_pd_handle_t                          *ph_pd,\r
2209                 OUT                     net32_t* const                          p_rkey,\r
2210         IN      OUT                     <a href="#robo1164">ci_umv_buf_t</a>                            *p_umv_buf OPTIONAL );\r
2211 </pre>\r
2212 </span><p><strong>DESCRIPTION</strong></p>\r
2213 <span class="DESCRIPTION"><pre>       This routine retrieves the current R_KEY and protection domain\r
2214        handle associated with this mw_handle.\r
2215 </pre>\r
2216 </span><p><strong>PARAMETERS</strong></p>\r
2217 <span class="PARAMETERS"><pre>       h_mw\r
2218                [in] Memory window handle whose attributes are being retrieved.\r
2219        ph_pd\r
2220                [out] Protection domain handle associated with this mw_handle\r
2221        p_rkey\r
2222                [out] Current R_KEY associated with this mw_handle.The verbs provider\r
2223                is required to give this in the expected ordering on the wire. When\r
2224                rkey's are exchanged between remote nodes, no swapping of this data\r
2225                will be performed.\r
2226        p_umv_buf\r
2227                [in out] Vendor specific parameter to support user mode IO.\r
2228 </pre>\r
2229 </span><p><strong>RETURN VALUE</strong></p>\r
2230 <span class="RETURN_VALUE"><pre>       IB_SUCCESS\r
2231                The query operation completed successfully.\r
2232        IB_INVALID_MW_HANDLE\r
2233                mw_handle supplied is an invalid handle\r
2234        IB_INVALID_PARAMETER\r
2235                One of the pointers was not valid.\r
2236 </pre>\r
2237 </span><p><strong>SEE ALSO</strong></p>\r
2238 <span class="SEE_ALSO"><pre>       <a href="#robo1126">ci_create_mw</a>, <a href="#robo1121">ci_bind_mw</a>\r
2239 </pre>\r
2240 </span>\r
2241 <hr />\r
2242 \r
2243 <h2><a name="robo1157">[Functions]<a name="Verbs2fci5fquery5fqp">\r
2244 Verbs/ci_query_qp</a></h2>\r
2245 \r
2246 <p>[<a href="#robo_top_of_doc">top</a>][<a href="#robo39">parent</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
2247 <p><strong>NAME</strong></p>\r
2248 <span class="NAME"><pre>       <strong>ci_query_qp</strong> -- Query the current QP attributes\r
2249 </pre>\r
2250 </span><p><strong>SYNOPSIS</strong></p>\r
2251 <span class="SYNOPSIS"><pre>typedef <a href="./ib_types_h.html#robo49">ib_api_status_t</a>\r
2252 (*<strong>ci_query_qp</strong>) (\r
2253         IN              const   ib_qp_handle_t                          h_qp,\r
2254                 OUT                     <a href="./ib_types_h.html#robo205">ib_qp_attr_t</a>* const                     p_qp_attr,\r
2255         IN      OUT                     <a href="#robo1164">ci_umv_buf_t</a>                            *p_umv_buf OPTIONAL );\r
2256 </pre>\r
2257 </span><p><strong>DESCRIPTION</strong></p>\r
2258 <span class="DESCRIPTION"><pre>       This routine queries the current attributes for the QP\r
2259        corresponding to h_qp. The attributes are returned in p_query_attr.\r
2260        Depending on the current state of the QP, some of the fields in the\r
2261        attribute structure may not be valid.\r
2262 </pre>\r
2263 </span><p><strong>PARAMETERS</strong></p>\r
2264 <span class="PARAMETERS"><pre>       h_qp\r
2265                [in] Handle to the QP for which the attributes are being retrieved\r
2266        p_qp_attr\r
2267                [out] Pointer to the ib_qp_query_t structure where the current\r
2268                attributes of the QP is returned.\r
2269        p_umv_buf\r
2270                [in out] Vendor specific parameter to support user mode IO.\r
2271 </pre>\r
2272 </span><p><strong>RETURN VALUE</strong></p>\r
2273 <span class="RETURN_VALUE"><pre>       IB_SUCCESS\r
2274                The values returned in p_qp_attr are valid.\r
2275        IB_INVALID_QP_HANDLE\r
2276                The h_qp supplied is not a valid handle.\r
2277        IB_INVALID_PARAMETER\r
2278                Parameter p_qp_attr is not valid.\r
2279 </pre>\r
2280 </span><p><strong>SEE ALSO</strong></p>\r
2281 <span class="SEE_ALSO"><pre>       <a href="#robo1127">ci_create_qp</a>\r
2282 </pre>\r
2283 </span>\r
2284 <hr />\r
2285 \r
2286 <h2><a name="robo1158">[Functions]<a name="Verbs2fci5fregister5fmr">\r
2287 Verbs/ci_register_mr</a></h2>\r
2288 \r
2289 <p>[<a href="#robo_top_of_doc">top</a>][<a href="#robo39">parent</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
2290 <p><strong>NAME</strong></p>\r
2291 <span class="NAME"><pre>       <strong>ci_register_mr</strong> -- Register a memory region with the HCA.\r
2292 </pre>\r
2293 </span><p><strong>SYNOPSIS</strong></p>\r
2294 <span class="SYNOPSIS"><pre>typedef <a href="./ib_types_h.html#robo49">ib_api_status_t</a>\r
2295 (*<strong>ci_register_mr</strong>) (\r
2296         IN              const   ib_pd_handle_t                          h_pd,\r
2297         IN              const   <a href="./ib_types_h.html#robo160">ib_mr_create_t</a>* const           p_mr_create,\r
2298                 OUT                     net32_t* const                          p_lkey,\r
2299                 OUT                     net32_t* const                          p_rkey,\r
2300                 OUT                     ib_mr_handle_t* const           ph_mr,\r
2301         IN                              boolean_t                                       um_call );\r
2302 </pre>\r
2303 </span><p><strong>DESCRIPTION</strong></p>\r
2304 <span class="DESCRIPTION"><pre>       This routine registers a virtually contiguous region of memory with the\r
2305        HCA. All memory regions that need to be used by the HCA must be registered\r
2306        prior to use in data transfer operations. On successful completion\r
2307        the region handle, lkey are returned. If remote access rights are specified\r
2308        then the rkey is also returned.\r
2309 </pre>\r
2310 </span><p><strong>PARAMETERS</strong></p>\r
2311 <span class="PARAMETERS"><pre>       h_pd\r
2312                [in] Handle to the PD on which memory is being registered\r
2313        p_mr_create\r
2314                [in] Holds attributes for the region being registered. Look at\r
2315                <a href="./ib_types_h.html#robo160">ib_mr_create_t</a> for more details.\r
2316        p_lkey\r
2317                [out] Local Key Attributes of the registered memory region\r
2318        p_rkey\r
2319                [out] Remote key of the registered memory region. The verbs provider\r
2320                is required to give this in the expected ordering on the wire. When\r
2321                rkey's are exchanged between remote nodes, no swapping of this data\r
2322                will be performed.\r
2323        ph_mr\r
2324                [out] Handle to the registered memory region. This handle is used when\r
2325                submitting work requests to refer to this region of memory.\r
2326        um_call\r
2327                [in] Boolean indicating whether the registration originated in user-mode.\r
2328 </pre>\r
2329 </span><p><strong>RETURN VALUE</strong></p>\r
2330 <span class="RETURN_VALUE"><pre>       IB_SUCCESS\r
2331                Registration with the adapter was successful.\r
2332        IB_INSUFFICIENT_RESOURCES\r
2333                Insufficient resources to satisfy request.\r
2334        IB_INVALID_PARAMETER\r
2335                One of the input pointers was NULL.\r
2336        IB_INVALID_PD_HANDLE\r
2337                Invalid mr_pdhandle\r
2338        IB_INVALID_PERMISSION\r
2339                Invalid access rights.\r
2340 </pre>\r
2341 </span><p><strong>NOTES</strong></p>\r
2342 <span class="NOTES"><pre>       In addition to registration, the routine also pins memory, so that the\r
2343        physical page associated with the virtual address does not get swapped\r
2344        out during the time the HCA is attempting to transfer data to this\r
2345        address. If the memory is not pinned, this could lead to data-corruption\r
2346        and unpredictable behavior by the operating environment.\r
2347 </pre>\r
2348 </span><p><strong>SEE ALSO</strong></p>\r
2349 <span class="SEE_ALSO"><pre>       <a href="#robo1131">ci_deregister_mr</a>, <a href="#robo1155">ci_query_mr</a>, <a href="#robo1159">ci_register_pmr</a>, <a href="#robo1144">ci_modify_mr</a>,\r
2350        <a href="#robo1160">ci_register_smr</a>\r
2351 </pre>\r
2352 </span>\r
2353 <hr />\r
2354 \r
2355 <h2><a name="robo1159">[Functions]<a name="Verbs2fci5fregister5fpmr">\r
2356 Verbs/ci_register_pmr</a></h2>\r
2357 \r
2358 <p>[<a href="#robo_top_of_doc">top</a>][<a href="#robo39">parent</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
2359 <p><strong>NAME</strong></p>\r
2360 <span class="NAME"><pre>       <strong>ci_register_pmr</strong> -- Register a physical memory region with the HCA.\r
2361 </pre>\r
2362 </span><p><strong>SYNOPSIS</strong></p>\r
2363 <span class="SYNOPSIS"><pre>typedef <a href="./ib_types_h.html#robo49">ib_api_status_t</a>\r
2364 (*<strong>ci_register_pmr</strong>) (\r
2365         IN              const   ib_pd_handle_t                          h_pd,\r
2366         IN              const   <a href="./ib_types_h.html#robo187">ib_phys_create_t</a>*const          p_pmr_create,\r
2367         IN      OUT                     uint64_t* const                         p_vaddr,\r
2368                 OUT                     net32_t* const                          p_lkey,\r
2369                 OUT                     net32_t* const                          p_rkey,\r
2370                 OUT                     ib_mr_handle_t* const           ph_mr,\r
2371         IN                              boolean_t                                       um_call );\r
2372 </pre>\r
2373 </span><p><strong>DESCRIPTION</strong></p>\r
2374 <span class="DESCRIPTION"><pre>       This routine registers an array of physical pages as a single virtually\r
2375        contiguous region with the HCA. All memory regions that need to be used by\r
2376        the HCA must be registered prior to use in data transfer operations.\r
2377        On successful completion the region handle, lkey and rkey used for\r
2378        local and remote access authentication are returned.\r
2379 </pre>\r
2380 </span><p><strong>PARAMETERS</strong></p>\r
2381 <span class="PARAMETERS"><pre>       h_pd\r
2382                [in] Handle to the PD on which memory is being registered\r
2383        p_pmr_create\r
2384                [in] Holds attributes for the region being registered.\r
2385        p_vaddr\r
2386                [in/out] On input, references the requested virtual address for the\r
2387                start of the physical region.  On output, references the actual\r
2388                virtual address assigned to the registered region.\r
2389        p_lkey\r
2390                [out] Local key of the registered memory region\r
2391        p_rkey\r
2392                [out] Remote key of the registered memory region.The verbs provider\r
2393                is required to give this in the expected ordering on the wire. When\r
2394                rkey's are exchanged between remote nodes, no swapping of this data\r
2395                will be performed.\r
2396        ph_mr\r
2397                [out] Handle to the registered memory region. This handle is used when\r
2398                submitting work requests to refer to this region of memory.\r
2399        um_call\r
2400                [in] Boolean indicating whether the registration originated in user-mode.\r
2401 </pre>\r
2402 </span><p><strong>RETURN VALUE</strong></p>\r
2403 <span class="RETURN_VALUE"><pre>       IB_SUCCESS\r
2404                Registration with the adapter was successful.\r
2405        IB_INSUFFICIENT_RESOURCES\r
2406                Insufficient resources to satisfy request.\r
2407        IB_INVALID_PARAMETER\r
2408                Invalid length or address in p_mr_create. Also returned if the page_size\r
2409                passed is not one of supported page sizes by the HCA.\r
2410        IB_INVALID_PD_HANDLE\r
2411                Invalid mr_pdhandle\r
2412        IB_INVALID_PERMISSION\r
2413                Invalid access rights.\r
2414 </pre>\r
2415 </span><p><strong>PORTABILITY</strong></p>\r
2416 <span class="PORTABILITY"><pre>       Kernel Mode only\r
2417 </pre>\r
2418 </span><p><strong>NOTES</strong></p>\r
2419 <span class="NOTES"><pre>       Remote and Atomic access settings in ib_access_ctrl_t, requires local\r
2420        write access to be enabled, otherwise IB_INVALID_PERMISSION is returned.\r
2421        The p_vaddr returned could be different from the vaddr specified in\r
2422        p_pmr_create.  If the requested virtual addr offset in a page does not\r
2423        match, the channel interface is free to pick and assign a pseudo virtual\r
2424        address. The address constructed is not a system virtual address, and only\r
2425        meaningful to the adapter to which this registration is targeted.\r
2426 </pre>\r
2427 </span><p><strong>SEE ALSO</strong></p>\r
2428 <span class="SEE_ALSO"><pre>       <a href="#robo1131">ci_deregister_mr</a>, <a href="#robo1155">ci_query_mr</a>, <a href="#robo1158">ci_register_mr</a>, <a href="#robo1144">ci_modify_mr</a>,\r
2429        <a href="#robo1160">ci_register_smr</a>\r
2430 </pre>\r
2431 </span>\r
2432 <hr />\r
2433 \r
2434 <h2><a name="robo1160">[Functions]<a name="Verbs2fci5fregister5fsmr">\r
2435 Verbs/ci_register_smr</a></h2>\r
2436 \r
2437 <p>[<a href="#robo_top_of_doc">top</a>][<a href="#robo39">parent</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
2438 <p><strong>NAME</strong></p>\r
2439 <span class="NAME"><pre>       <strong>ci_register_smr</strong> -- Register a memory region using same physical pages as\r
2440                       an existing memory region.\r
2441 </pre>\r
2442 </span><p><strong>SYNOPSIS</strong></p>\r
2443 <span class="SYNOPSIS"><pre>typedef <a href="./ib_types_h.html#robo49">ib_api_status_t</a>\r
2444 (*<strong>ci_register_smr</strong>) (\r
2445         IN              const   ib_mr_handle_t                          h_mr,\r
2446         IN              const   ib_pd_handle_t                          h_pd,\r
2447         IN              const   <a href="./ib_types_h.html#robo45">ib_access_t</a>                                     access_ctrl,\r
2448         IN      OUT                     uint64_t* const                         p_vaddr,\r
2449                 OUT                     net32_t* const                          p_lkey,\r
2450                 OUT                     net32_t* const                          p_rkey,\r
2451                 OUT                     ib_mr_handle_t* const           ph_mr,\r
2452         IN                              boolean_t                                       um_call );\r
2453 </pre>\r
2454 </span><p><strong>DESCRIPTION</strong></p>\r
2455 <span class="DESCRIPTION"><pre>       This routine registers a new memory region but shares the same set of\r
2456        physical pages associated with memory handle. For user mode applications\r
2457        the process *must* be owning memory handle for this call to be successful.\r
2458 </pre>\r
2459 </span><p><strong>PARAMETERS</strong></p>\r
2460 <span class="PARAMETERS"><pre>       h_mr\r
2461                [in] Handle to memory region whose physical pages are being registered\r
2462                by this shared registration.\r
2463        h_pd\r
2464                [in] Handle to the PD on which memory is being registered\r
2465        access_ctrl\r
2466                [in] Memory access restrictions on the registered memory.\r
2467        p_vaddr\r
2468                [in/out] On input, references the requested virtual address for the\r
2469                start of the physical region.  On output, references the actual\r
2470                virtual address assigned to the registered region.\r
2471        p_lkey\r
2472                [out] L_KEY for this memory region.\r
2473        p_rkey\r
2474                [out] R_KEY for this memory region. This is valid only when remote\r
2475                access is enabled for this region. The verbs provider\r
2476                is required to give this in the expected ordering on the wire. When\r
2477                rkey's are exchanged between remote nodes, no swapping of this data\r
2478                will be performed.\r
2479        ph_mr\r
2480                [out] Handle to the registered memory region. This handle is used when\r
2481                submitting work requests to refer to this region of memory.\r
2482        um_call\r
2483                [in] Boolean indicating whether the registration originated in user-mode.\r
2484 </pre>\r
2485 </span><p><strong>RETURN VALUE</strong></p>\r
2486 <span class="RETURN_VALUE"><pre>       IB_SUCCESS\r
2487                The call is successful and a new region handle returned is valid.\r
2488        IB_INVALID_MR_HANDLE\r
2489                mr_handle is invalid.\r
2490        IB_INVALID_PD_HANDLE\r
2491                mr_pdhandle supplied is invalid.\r
2492        IB_INVALID_PERMISSION\r
2493                Invalid access rights passed in mr_access.\r
2494 </pre>\r
2495 </span><p><strong>NOTES</strong></p>\r
2496 <span class="NOTES"><pre>       ISSUE: how to deal with <a href="#robo1131">ci_deregister_mr</a>, <a href="#robo1144">ci_modify_mr</a>, <a href="#robo1145">ci_modify_pmr</a>\r
2497        should we treat them as memory windows and fail those if a shared region\r
2498        was registered?\r
2499 </pre>\r
2500 </span><p><strong>SEE ALSO</strong></p>\r
2501 <span class="SEE_ALSO"><pre>       <a href="#robo1158">ci_register_mr</a>, <a href="#robo1159">ci_register_pmr</a>, <a href="#robo1144">ci_modify_mr</a>, <a href="#robo1145">ci_modify_pmr</a>\r
2502 </pre>\r
2503 </span>\r
2504 <hr />\r
2505 \r
2506 <h2><a name="robo1161">[Functions]<a name="Verbs2fci5fresize5fcq">\r
2507 Verbs/ci_resize_cq</a></h2>\r
2508 \r
2509 <p>[<a href="#robo_top_of_doc">top</a>][<a href="#robo39">parent</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
2510 <p><strong>NAME</strong></p>\r
2511 <span class="NAME"><pre>       <strong>ci_resize_cq</strong> -- Modify the maximum number of entries the CQ could hold.\r
2512 </pre>\r
2513 </span><p><strong>SYNOPSIS</strong></p>\r
2514 <span class="SYNOPSIS"><pre>typedef <a href="./ib_types_h.html#robo49">ib_api_status_t</a>\r
2515 (*<strong>ci_resize_cq</strong>) (\r
2516         IN              const   ib_cq_handle_t                          h_cq,\r
2517         IN      OUT                     uint32_t* const                         p_size,\r
2518         IN      OUT                     <a href="#robo1164">ci_umv_buf_t</a>                            *p_umv_buf OPTIONAL );\r
2519 </pre>\r
2520 </span><p><strong>DESCRIPTION</strong></p>\r
2521 <span class="DESCRIPTION"><pre>       This routine allows the caller to modify the maximum number of entries\r
2522        the CQ could hold. It is possible to resize the CQ while there are\r
2523        entries in the CQ, and with outstanding work requests that will generate\r
2524        completions. If the entries in the CQ are more than the new size which is\r
2525        being created, an error is returned.\r
2526 </pre>\r
2527 </span><p><strong>PARAMETERS</strong></p>\r
2528 <span class="PARAMETERS"><pre>       h_cq\r
2529                [in] Completion Queue handle\r
2530        p_size\r
2531                [in out] This parameter indicates the requested size of the CQ. On\r
2532                successful completion, the current size allocated is returned in\r
2533                this same parameter.\r
2534        p_umv_buf\r
2535                [in out] Vendor specific parameter to support user mode IO.\r
2536 </pre>\r
2537 </span><p><strong>RETURN VALUE</strong></p>\r
2538 <span class="RETURN_VALUE"><pre>       IB_SUCCESS\r
2539                The resize operation was successful.\r
2540        IB_INVALID_CQ_HANDLE\r
2541                The CQ handle is invalid.\r
2542        IB_INSUFFICIENT_RESOURCES\r
2543                Insufficient resources to complete request.\r
2544        IB_INVALID_PARAMETER\r
2545                one of the parameters was NULL.\r
2546        IB_INVALID_CQ_SIZE\r
2547                Requested CQ Size is not supported.\r
2548        IB_OVERFLOW\r
2549                The CQ has more entries than the resize request. The CQ is not\r
2550                modified, and old entries still exist.\r
2551 </pre>\r
2552 </span><p><strong>NOTES</strong></p>\r
2553 <span class="NOTES"><pre>       If the consumer wishes to resize the CQ smaller than originally created,\r
2554        it is recommended to retrieve all entries before performing a CQ resize\r
2555        operation. It is left to the verb implementer on resize operations, to\r
2556        actually reduce the entries, or leave it as it. The consumer must make no\r
2557        assumptions on the successful completion, and should only rely on the\r
2558        size returned in p_size.\r
2559 </pre>\r
2560 </span><p><strong>SEE ALSO</strong></p>\r
2561 <span class="SEE_ALSO"><pre>       <a href="#robo1125">ci_create_cq</a>\r
2562 </pre>\r
2563 </span>\r
2564 <hr />\r
2565 \r
2566 <h2><a name="robo1162">[Functions]<a name="Verbs2fci5fum5fclose5fca5ft">\r
2567 Verbs/ci_um_close_ca_t</a></h2>\r
2568 \r
2569 <p>[<a href="#robo_top_of_doc">top</a>][<a href="#robo39">parent</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
2570 <p><strong>NAME</strong></p>\r
2571 <span class="NAME"><pre>       <strong>ci_um_close_ca_t</strong> -- Close user-mode access to adapter via this h_ca\r
2572 </pre>\r
2573 </span><p><strong>SYNOPSIS</strong></p>\r
2574 <span class="SYNOPSIS"><pre>typedef void\r
2575 (*<strong>ci_um_close_ca_t</strong>) (\r
2576         IN                              ib_ca_handle_t                          h_ca,\r
2577         IN                              ib_ca_handle_t                          h_um_ca );\r
2578 </pre>\r
2579 </span><p><strong>DESCRIPTION</strong></p>\r
2580 <span class="DESCRIPTION"><pre>       This routine is called when the client no longer wishes to use HCA\r
2581        resources obtained via this h_ca. All resources allocated as part\r
2582        this handle during the <a href="#robo1163">ci_um_open_ca</a> are destroyed.\r
2583 </pre>\r
2584 </span><p><strong>PARAMETERS</strong></p>\r
2585 <span class="PARAMETERS"><pre>       h_ca\r
2586                [in] CA handle returned via the <a href="#robo1147">ci_open_ca</a>() call.\r
2587        h_um_ca\r
2588                [in] CA handle returned via the <a href="#robo1163">ci_um_open_ca</a>() call.\r
2589 </pre>\r
2590 </span><p><strong>RETURN VALUE</strong></p>\r
2591 <span class="RETURN_VALUE"><pre>       This funtion does not return a value.\r
2592 </pre>\r
2593 </span><p><strong>NOTES</strong></p>\r
2594 <span class="NOTES"><pre>       This call is invoked from the context of a UM application when such an\r
2595        appliation closes the HCA in user-mode.\r
2596 \r
2597        Resources allocated during the <a href="#robo1163">ci_um_open_ca</a>() are deallocated.\r
2598 </pre>\r
2599 </span><p><strong>SEE ALSO</strong></p>\r
2600 <span class="SEE_ALSO"><pre>       <a href="#robo1163">ci_um_open_ca</a>\r
2601 </pre>\r
2602 </span>\r
2603 <hr />\r
2604 \r
2605 <h2><a name="robo1163">[Functions]<a name="Verbs2fci5fum5fopen5fca">\r
2606 Verbs/ci_um_open_ca</a></h2>\r
2607 \r
2608 <p>[<a href="#robo_top_of_doc">top</a>][<a href="#robo39">parent</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
2609 <p><strong>NAME</strong></p>\r
2610 <span class="NAME"><pre>       <strong>ci_um_open_ca</strong> -- Create a CA context for use by user-mode processes.\r
2611 </pre>\r
2612 </span><p><strong>SYNOPSIS</strong></p>\r
2613 <span class="SYNOPSIS"><pre>typedef <a href="./ib_types_h.html#robo49">ib_api_status_t</a>\r
2614 (*ci_um_open_ca_t) (\r
2615         IN              const   ib_ca_handle_t                          h_ca,\r
2616         IN      OUT                     <a href="#robo1164">ci_umv_buf_t</a>* const                     p_umv_buf,\r
2617                 OUT                     ib_ca_handle_t* const           ph_um_ca );\r
2618 </pre>\r
2619 </span><p><strong>DESCRIPTION</strong></p>\r
2620 <span class="DESCRIPTION"><pre>       This routine is used called on behalf of a user-mode application to\r
2621        establish a per-CA context in user-mode.\r
2622 </pre>\r
2623 </span><p><strong>PARAMETERS</strong></p>\r
2624 <span class="PARAMETERS"><pre>       h_ca\r
2625                [in] Handle returned by an earlier call to <a href="#robo1147">ci_open_ca</a>()\r
2626        p_umv_buf\r
2627                [in/out] Vendor specific parameter to support user mode IO.\r
2628        ph_um_ca\r
2629                [out] Handle to pass into ci_um_close_ca call to free any kernel\r
2630                resources allocated for the user-mode appliation.\r
2631 </pre>\r
2632 </span><p><strong>RETURN VALUE</strong></p>\r
2633 <span class="RETURN_VALUE"><pre>       IB_SUCCESS\r
2634                The user-mode context information is returned successfully.\r
2635        IB_INSUFFICIENT_MEMORY\r
2636                The size of the p_ca_attr buffer, specified through p_size, is\r
2637                insufficient to store all of the CA attribute information.\r
2638        IB_INVALID_CA_HANDLE\r
2639                h_ca is invalid\r
2640        IB_INVALID_PARAMETER\r
2641                The p_umv_buf parameters are insufficient to complete the request.\r
2642 </pre>\r
2643 </span><p><strong>SEE ALSO</strong></p>\r
2644 <span class="SEE_ALSO"><pre>       <a href="#robo1153">ci_query_ca</a>, <a href="#robo1143">ci_modify_ca</a>, <a href="#robo1122">ci_close_ca</a>\r
2645 </pre>\r
2646 </span>\r
2647 <hr />\r
2648 \r
2649 <h2><a name="robo1164">[Structures]<a name="Verbs2fci5fumv5fbuf5ft">\r
2650 Verbs/ci_umv_buf_t</a></h2>\r
2651 \r
2652 <p>[<a href="#robo_top_of_doc">top</a>][<a href="#robo39">parent</a>][<a href="../robo_strutures.html#top">index</a>]</p>\r
2653 <p><strong>NAME</strong></p>\r
2654 <span class="NAME"><pre>       <strong>ci_umv_buf_t</strong> -- Vendor specific structure to facilitate user mode IO\r
2655 </pre>\r
2656 </span><p><strong>DESCRIPTION</strong></p>\r
2657 <span class="DESCRIPTION"><pre>       This structure is provided to assist the vendor specific user mode\r
2658        library to exchange information with its kernel mode driver. The\r
2659        user mode InfiniBand(tm) Access Layer will call the vendor specific\r
2660        module before a call is made to the kernel mode driver. The kernel mode\r
2661        driver is expected to know the format and data in the p_inout_buf,\r
2662        and copy any necessary data that must be handed to the user mode\r
2663        vendor library.\r
2664 </pre>\r
2665 </span><p><strong>PURPOSE</strong></p>\r
2666 <span class="PURPOSE"><pre>       command\r
2667                A command code that is understood by the vendor specific kernel\r
2668                mode driver.\r
2669        p_inout_buf\r
2670                The user mode component of the vendor specific library allocates\r
2671                this memory and passes information in this buffer. vendor is expected\r
2672                to set both the input and output buffer sizes appropriately.\r
2673                This information is required since the kernel mode proxy that passes\r
2674                this buffer to the kernel mode vendor specific library will copy the\r
2675                content of this buffer to a kernel mode buffer. The kernel mode\r
2676                vendor specific driver would copy the data that needs to be returned\r
2677                to the user mode component, and set the output size appropriately\r
2678                so that the proxy can now copy the data back to user mode buffer.\r
2679 \r
2680                In the Infiniband Access Layer, it is important to know the\r
2681                usage of umv_buf and whether the contents of the p_inout_buf\r
2682                can have embedded user-mode pointers. When invoked from an\r
2683                arbitrary thread context, Vendor driver can NOT access user-mode\r
2684                pointers of a user-process.\r
2685        input_size\r
2686                Size of the input buffer, must be set by the user mode vendor\r
2687                specific library.\r
2688        output_size\r
2689                Size of the output buffer. Must be set by the user mode component\r
2690                to specify the maximum size of the data expected from its kernel\r
2691                mode driver. The kernel mode driver would set the size to the exact\r
2692                size that needs to be returned to its user mode counterpart.\r
2693        status\r
2694                Indicates the status of the operation from the kernel mode vendor\r
2695                specific driver. The caller is supposed to initialize it appropriately\r
2696                to identify if an operation succeded, or failed. For e.g. when\r
2697                the user mode library is called after a resource creation, the user\r
2698                mode vendor specific code must be able to identify if there is\r
2699                post processing required, or if any resource allocation failed.\r
2700 </pre>\r
2701 </span><p><strong>SOURCE</strong></p>\r
2702 <span class="SOURCE"><pre>typedef struct _umv_buf\r
2703 {\r
2704         uint32_t                command;\r
2705         uint32_t                status;\r
2706         uint32_t                input_size;\r
2707         uint32_t                output_size;\r
2708         void* __ptr64   p_inout_buf;\r
2709 } <strong>ci_umv_buf_t</strong>;\r
2710 </pre>\r
2711 </span>\r
2712 <hr />\r
2713 \r
2714 <h2><a name="robo1165">[Functions]<a name="Verbs2fci5funmap5fmlnx5ffmr">\r
2715 Verbs/ci_unmap_mlnx_fmr</a></h2>\r
2716 \r
2717 <p>[<a href="#robo_top_of_doc">top</a>][<a href="#robo39">parent</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
2718 <p><strong>NAME</strong></p>\r
2719 <span class="NAME"><pre>       <strong>ci_unmap_mlnx_fmr</strong> -- UnMap a Mellanox fast memory region.\r
2720 </pre>\r
2721 </span><p><strong>SYNOPSIS</strong></p>\r
2722 <span class="SYNOPSIS"><pre>typedef <a href="./ib_types_h.html#robo49">ib_api_status_t</a>\r
2723 (*<strong>ci_unmap_mlnx_fmr</strong>) (\r
2724         IN              const   mlnx_fmr_handle_t                       h_fmr);\r
2725 </pre>\r
2726 </span><p><strong>DESCRIPTION</strong></p>\r
2727 <span class="DESCRIPTION"><pre>       //TODO\r
2728 </pre>\r
2729 </span><p><strong>PARAMETERS</strong></p>\r
2730 <span class="PARAMETERS"><pre>       h_fmr\r
2731                [in] Handle to the fast memory region that  these pages map to \r
2732 </pre>\r
2733 </span><p><strong>RETURN VALUE</strong></p>\r
2734 <span class="RETURN_VALUE"><pre>       IB_SUCCESS\r
2735                Registration with the adapter was successful.\r
2736        IB_INSUFFICIENT_RESOURCES\r
2737                Insufficient resources to satisfy request.\r
2738        IB_INVALID_PARAMETER\r
2739                One of the input pointers was NULL.\r
2740        IB_INVALID_PD_HANDLE\r
2741                Invalid pd handle\r
2742        IB_INVALID_PERMISSION\r
2743                Invalid access rights.\r
2744 </pre>\r
2745 </span><p><strong>NOTES</strong></p>\r
2746 <span class="NOTES"><pre>       The Alloc operation does not map nor pinned any memory.\r
2747        In order to use the FMR the user need to call map \r
2748 \r
2749        This is a Mellanox specific extension to verbs.\r
2750 </pre>\r
2751 </span><p><strong>SEE ALSO</strong></p>\r
2752 <span class="SEE_ALSO"><pre>       <a href="#robo1129">ci_dealloc_mlnx_fmr</a>, <a href="#robo1117">ci_alloc_mlnx_fmr</a>, ci_map_phy_mlnx_fmr\r
2753 </pre>\r
2754 </span>\r
2755 <hr />\r
2756 \r
2757 <h2><a name="robo1166">[Functions]<a name="Verbs2fci5fvendor5fcall">\r
2758 Verbs/ci_vendor_call</a></h2>\r
2759 \r
2760 <p>[<a href="#robo_top_of_doc">top</a>][<a href="#robo39">parent</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
2761 <p><strong>NAME</strong></p>\r
2762 <span class="NAME"><pre>       <strong>ci_vendor_call</strong>\r
2763 </pre>\r
2764 </span><p><strong>DESCRIPTION</strong></p>\r
2765 <span class="DESCRIPTION"><pre>       Performs a vendor specific CA interface function call.\r
2766 </pre>\r
2767 </span><p><strong>SYNOPSIS</strong></p>\r
2768 <span class="SYNOPSIS"><pre>typedef <a href="./ib_types_h.html#robo49">ib_api_status_t</a>\r
2769 (*<strong>ci_vendor_call</strong>)(\r
2770         IN              const   ib_ca_handle_t                          h_ca,\r
2771         IN              const   void* __ptr64* const            handle_array    OPTIONAL,\r
2772         IN                              uint32_t                                        num_handles,\r
2773         IN                              <a href="./ib_types_h.html#robo66">ib_ci_op_t</a>* const                       p_ci_op,\r
2774         IN      OUT                     <a href="#robo1164">ci_umv_buf_t</a>                            *p_umv_buf OPTIONAL );\r
2775 </pre>\r
2776 </span><p><strong>PARAMETERS</strong></p>\r
2777 <span class="PARAMETERS"><pre>       h_ca\r
2778                [in] A handle to an opened CA.\r
2779 \r
2780        handle_array\r
2781                [in] This parameter references an array containing handles of\r
2782                existing CA resources.  This array should contain all of the\r
2783                handles specified in the vendor specific data provided with this\r
2784                call.  All handles specified through this array are validated by\r
2785                the verbs provider driver to ensure that the number and type of\r
2786                handles are correct for the requested operation.\r
2787 \r
2788        num_handles\r
2789                [in] The number of the handles in handle array.  This count is\r
2790                verified by the access layer.\r
2791 \r
2792        p_ci_op\r
2793                [in] A reference to the vendor specific CA interface data\r
2794                structure containing the operation parameters.\r
2795 \r
2796        p_umv_buf\r
2797                [in out] Vendor specific parameter to support user mode IO.\r
2798 \r
2799  RETURN VALUES\r
2800        IB_SUCCESS\r
2801                The operation was successful.\r
2802 \r
2803        IB_INVALID_CA_HANDLE\r
2804                The CA handle was invalid.\r
2805 \r
2806        IB_INVALID_PARAMETER\r
2807                A reference to the vendor specific data was not provided.\r
2808 \r
2809        IB_INVALID_HANDLE\r
2810                A handle specified in the handle array was invalid.\r
2811 \r
2812        IB_INSUFFICIENT_MEMORY\r
2813                There was insufficient memory to perform the operation.\r
2814 \r
2815        IB_ERROR\r
2816                An error occurred while processing the command.  Additional\r
2817                error information is provided in the p_ci_op status field.\r
2818 </pre>\r
2819 </span><p><strong>NOTES</strong></p>\r
2820 <span class="NOTES"><pre>       This routine performs a vendor specific CA interface function call.\r
2821        The p_ci_op structure provides a means to pass vendor specific data to\r
2822        the verbs provider driver.  If the vendor specific data contains handles,\r
2823        the client should provide the optional handle array that lists all of\r
2824         all of the handles specified in the vendor specific data.  The handles\r
2825        in the handle array are restricted to the following types:  ib_ca_handle_t,\r
2826        ib_pd_handle_t, ib_cq_handle_t, ib_av_handle_t, ib_qp_handle_t,\r
2827        ib_mr_handle_t, or ib_mw_handle_t\r
2828        The contents of the handle array are verified by the\r
2829        access layer and the verbs provider driver.\r
2830 </pre>\r
2831 </span><p><strong>SEE ALSO</strong></p>\r
2832 <span class="SEE_ALSO"><pre>       <a href="#robo1147">ci_open_ca</a>, <a href="#robo1118">ci_allocate_pd</a>, <a href="#robo1124">ci_create_av</a>, <a href="#robo1125">ci_create_cq</a>,\r
2833        <a href="#robo1127">ci_create_qp</a>, <a href="#robo1158">ci_register_mr</a>, <a href="#robo1159">ci_register_pmr</a>,\r
2834        <a href="#robo1160">ci_register_smr</a>, <a href="#robo1126">ci_create_mw</a>, <a href="./ib_types_h.html#robo66">ib_ci_op_t</a>\r
2835 </pre>\r
2836 </span>\r
2837 <hr />\r
2838 \r
2839 <h2><a name="robo1168">[Functions]<a name="Verbs2fib5fderegister5fca">\r
2840 Verbs/ib_deregister_ca</a></h2>\r
2841 \r
2842 <p>[<a href="#robo_top_of_doc">top</a>][<a href="#robo39">parent</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
2843 <p><strong>NAME</strong></p>\r
2844 <span class="NAME"><pre>       <strong>ib_deregister_ca</strong> -- Inform the IB Access Layer that this HCA is no longer available\r
2845 </pre>\r
2846 </span><p><strong>SYNOPSIS</strong></p>\r
2847 <span class="SYNOPSIS"><pre>AL_EXPORT <a href="./ib_types_h.html#robo49">ib_api_status_t</a>\r
2848 <strong>ib_deregister_ca</strong> (\r
2849         IN              const   net64_t                                         ca_guid );\r
2850 </pre>\r
2851 </span><p><strong>DESCRIPTION</strong></p>\r
2852 <span class="DESCRIPTION"><pre>       This routine is called by the HCA driver when this HCA would no longer be\r
2853        available for services. The access layer is expected to return all resources\r
2854        back to the HCA driver, and perform a <a href="#robo1122">ci_close_ca</a> on this interface.\r
2855 </pre>\r
2856 </span><p><strong>PARAMETERS</strong></p>\r
2857 <span class="PARAMETERS"><pre>       ca_guid\r
2858                [in] GUID of the HCA that is being removed.\r
2859 </pre>\r
2860 </span><p><strong>RETURN VALUE</strong></p>\r
2861 <span class="RETURN_VALUE"><pre>       IB_SUCCESS\r
2862                The deregistration is successful.\r
2863 \r
2864        IB_NOT_FOUND\r
2865                No HCA with the specified GUID is registered.\r
2866 \r
2867        IB_BUSY\r
2868                The HCA is still in use and cannot be released.\r
2869 </pre>\r
2870 </span><p><strong>PORTABILITY</strong></p>\r
2871 <span class="PORTABILITY"><pre>       Kernel Mode only\r
2872 </pre>\r
2873 </span><p><strong>SEE ALSO</strong></p>\r
2874 <span class="SEE_ALSO"><pre>       <a href="#robo1170">ib_register_ca</a>, <a href="#robo1139">ci_interface_t</a>\r
2875 </pre>\r
2876 </span>\r
2877 <hr />\r
2878 \r
2879 <h2><a name="robo1170">[Functions]<a name="Verbs2fib5fregister5fca">\r
2880 Verbs/ib_register_ca</a></h2>\r
2881 \r
2882 <p>[<a href="#robo_top_of_doc">top</a>][<a href="#robo39">parent</a>][<a href="../robo_functions.html#top">index</a>]</p>\r
2883 <p><strong>NAME</strong></p>\r
2884 <span class="NAME"><pre>       <strong>ib_register_ca</strong> -- Inform the IB Access Layer about a new HCA\r
2885 </pre>\r
2886 </span><p><strong>SYNOPSIS</strong></p>\r
2887 <span class="SYNOPSIS"><pre>AL_EXPORT <a href="./ib_types_h.html#robo49">ib_api_status_t</a>\r
2888 <strong>ib_register_ca</strong> (\r
2889         IN              const   <a href="#robo1139">ci_interface_t</a>                          *p_ci );\r
2890 </pre>\r
2891 </span><p><strong>DESCRIPTION</strong></p>\r
2892 <span class="DESCRIPTION"><pre>       This routine is called by a HCA kernel mode driver to inform the\r
2893        IB Access Layer about a new HCA that is ready for use. It is expected\r
2894        that the Access Layer could immediatly turn around and call for services\r
2895        even before the call returns back the HCA driver code. The HCA driver\r
2896        must initialize all resources and be ready to service any calls before adding\r
2897        its services to the IB Access Layer.\r
2898 </pre>\r
2899 </span><p><strong>PARAMETERS</strong></p>\r
2900 <span class="PARAMETERS"><pre>       p_ci\r
2901                [in] Pointer to the <a href="#robo1139">ci_interface_t</a> structure that has the function\r
2902                vector to support verbs functionality.\r
2903 </pre>\r
2904 </span><p><strong>RETURN VALUE</strong></p>\r
2905 <span class="RETURN_VALUE"><pre>       IB_SUCCESS\r
2906                The registration is successful.\r
2907 \r
2908        IB_INVALID_PARAMETER\r
2909                A reference to the CI interface structure was not provided.\r
2910 \r
2911        IB_INSUFFICIENT_RESOURCES\r
2912                Insufficient memory to satisfy resource requirements.\r
2913 \r
2914        IB_DUPLICATE_CA\r
2915                HCA GUID is already registered with the IB Access Layer\r
2916 </pre>\r
2917 </span><p><strong>PORTABILITY</strong></p>\r
2918 <span class="PORTABILITY"><pre>       Kernel Mode only\r
2919 </pre>\r
2920 </span><p><strong>SEE ALSO</strong></p>\r
2921 <span class="SEE_ALSO"><pre>       <a href="#robo1168">ib_deregister_ca</a>, <a href="#robo1139">ci_interface_t</a>\r
2922 </pre>\r
2923 </span>\r
2924 </body>\r
2925 </html>\r