xref: /freebsd-11-stable/sys/dev/vxge/include/vxgehal-types.h (revision 4ab2e064d7950be84256d671a7ae93f87cc6aa36)
1 /*-
2  * Copyright(c) 2002-2011 Exar Corp.
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification are permitted provided the following conditions are met:
7  *
8  *    1. Redistributions of source code must retain the above copyright notice,
9  *       this list of conditions and the following disclaimer.
10  *
11  *    2. Redistributions in binary form must reproduce the above copyright
12  *       notice, this list of conditions and the following disclaimer in the
13  *       documentation and/or other materials provided with the distribution.
14  *
15  *    3. Neither the name of the Exar Corporation nor the names of its
16  *       contributors may be used to endorse or promote products derived from
17  *       this software without specific prior written permission.
18  *
19  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
20  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
22  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
23  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
24  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
25  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
26  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
27  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
28  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
29  * POSSIBILITY OF SUCH DAMAGE.
30  */
31 /*$FreeBSD$*/
32 
33 #ifndef	VXGE_HAL_TYPES_H
34 #define	VXGE_HAL_TYPES_H
35 
36 __EXTERN_BEGIN_DECLS
37 
38 /*
39  * enum vxge_hal_reopen_e - Open, close, or reopen option.
40  * @VXGE_HAL_RESET_ONLY: Do not (de)allocate
41  * @VXGE_HAL_OPEN_NORMAL: Do (de)allocate
42  *
43  * Enumerates options used with ring, fifo, sq, srq, cqrq, dmq and umq
44  * open and close operations. The @VXGE_HAL_RESET_ONLY can be used when
45  * resetting the device; in this case there is actually no need to free
46  * and then again malloc the memory (including DMA-able memory).
47  */
48 typedef enum vxge_hal_reopen_e {
49 	VXGE_HAL_RESET_ONLY	= 1,
50 	VXGE_HAL_OPEN_NORMAL	= 2
51 } vxge_hal_reopen_e;
52 
53 /*
54  * struct vxge_hal_version_t - HAL version info
55  * @version_major: Major version
56  * @version_minor: Minor version
57  * @version_fix: version fix
58  * @version_build: Version Build
59  *
60  * Structure to store version info
61  */
62 typedef struct vxge_hal_version_t {
63 	u32	version_major;
64 	u32	version_minor;
65 	u32	version_fix;
66 	u32	version_build;
67 } vxge_hal_version_t;
68 
69 /*
70  * VXGE_HAL_ETH_ALEN
71  */
72 #define	VXGE_HAL_ETH_ALEN				6
73 
74 /*
75  * typedef macaddr_t - Ethernet address type
76  */
77 typedef u8 macaddr_t[VXGE_HAL_ETH_ALEN];
78 
79 /*
80  * struct vxge_hal_ipv4 - IP version 4 address type
81  * @addr: IP address
82  */
83 typedef struct vxge_hal_ipv4 {
84 	u32	addr;
85 } vxge_hal_ipv4;
86 
87 /*
88  * struct vxge_hal_ipv6 - IP version 6 address type
89  * @addr: IP address
90  */
91 typedef struct vxge_hal_ipv6 {
92 	u64	addr[2];
93 } vxge_hal_ipv6;
94 
95 /*
96  * union vxge_hal_ipaddr_t - IP address type
97  * @ipv4: IP V4 address
98  * @ipv6: IP V6 address
99  */
100 typedef union vxge_hal_ipaddr_t {
101 	vxge_hal_ipv4 ipv4;
102 	vxge_hal_ipv6 ipv6;
103 } vxge_hal_ipaddr_t;
104 
105 /*
106  * typedef vxge_hal_obj_id_t - Object Id type used for Session,
107  *		  SRQ, CQRQ, STAG, LRO, SPDM etc objects
108  */
109 typedef u64 vxge_hal_obj_id_t;
110 
111 /* basic handles */
112 
113 /*
114  * typedef vxge_hal_device_h - Handle to the adapter object
115  */
116 typedef void *vxge_hal_device_h;
117 
118 /*
119  * typedef vxge_hal_vpath_h - Handle to the virtual path object returned to LL
120  */
121 typedef void *vxge_hal_vpath_h;
122 
123 /*
124  * typedef vxge_hal_client_h - Handle passed by client for client's private data
125  */
126 typedef void *vxge_hal_client_h;
127 
128 /*
129  * typedef vxge_hal_ring_h - Handle to the ring object used for non offload
130  *		receive
131  */
132 typedef void *vxge_hal_ring_h;
133 
134 /*
135  * typedef vxge_hal_fifo_h - Handle to the fifo object used for non offload send
136  */
137 typedef void *vxge_hal_fifo_h;
138 
139 
140 /*
141  * typedef vxge_hal_txdl_h - Handle to the transmit desriptor list object used
142  *		for nonoffload send
143  */
144 typedef void *vxge_hal_txdl_h;
145 
146 /*
147  * typedef vxge_hal_rxd_h - Handle to the receive desriptor object used for
148  *		nonoffload receive
149  */
150 typedef void *vxge_hal_rxd_h;
151 
152 /*
153  * typedef vxge_hal_up_msg_h - Handle to the up message queue
154  */
155 typedef void *vxge_hal_up_msg_h;
156 
157 /*
158  * typedef vxge_hal_down_msg_h - Handle to the down message queue
159  */
160 typedef void *vxge_hal_down_msg_h;
161 
162 
163 /*
164  * typedef vxge_hal_callback_h - Handle to callback function
165  */
166 typedef void *vxge_hal_callback_h;
167 
168 /*
169  * enum vxge_hal_message_type_e - Enumerated message types.
170  *
171  * @VXGE_HAL_MSG_TYPE_NCE_CREATE_REQ: The NCE Create Request
172  *		 message is used by the host to create an NCE on the adapter.
173  * @VXGE_HAL_MSG_TYPE_NCE_CREATE_RESP:The NCE Create Response
174  *		 message is sent in response to the NCE Create Request
175  *		 message from the host to indicate the status of the operation
176  *		 and return the NCE ID.
177  * @VXGE_HAL_MSG_TYPE_NCE_DELETE_REQ:The NCE Delete Request
178  *		 messag is sent by the host to delete an NCE after it is no
179  *		 longer required.
180  * @VXGE_HAL_MSG_TYPE_NCE_DELETE_RESP:The NCE Delete Response
181  *		 message is sent in response to the NCE Delete Request
182  *		 message from the host to indicate the status of the operation.
183  * @VXGE_HAL_MSG_TYPE_NCE_UPDATE_MAC_REQ:The NCE Update MAC Request
184  *		  message is used by the host to modify the MAC address for
185  *		 an NCE on the adapter.
186  * @VXGE_HAL_MSG_TYPE_NCE_UPDATE_MAC_RESP:The NCE Update MAC Response
187  *		  message is sent in response to the NCE Update MAC Request
188  *		  message from the host to indicate the status of the
189  *		 operation.
190  * @VXGE_HAL_MSG_TYPE_NCE_UPDATE_RCH_TIME_REQ:The NCE Update Rch Time
191  *		 Request  message is used by the host to update the
192  *		 Reachability time for an NCE on the adapter.
193  * @VXGE_HAL_MSG_TYPE_NCE_UPDATE_RCH_TIME_RESP:The NCE Update
194  *		 Rch Time Response  message is sent in response to the NCE
195  *		 Update Rch Time Request  message from the host to indicate
196  *		 the status of updating the reachability time for the NCE.
197  * @VXGE_HAL_MSG_TYPE_NCE_QUERY_REQ:The NCE Query Request  message
198  *		 is used by the host to query an NCE on the adapter.
199  * @VXGE_HAL_MSG_TYPE_NCE_QUERY_RESP:The NCE Query Response
200  *		 message is sent in response to the NCE Query Request  message
201  *		 from the host to indicate the status of the operation.
202  * @VXGE_HAL_MSG_TYPE_NCE_RCH_TIME_EXCEEDED:This is an unsolicited message
203  *		 sent to the host by the adapter when the NCE Reach Time has
204  *		 been exceeded.
205  * @VXGE_HAL_MSG_TYPE_CQRQ_CREATE_REQ:The CQRQ Create Request
206  *		 message is used by the host to create a CQRQ on the adapter.
207  * @VXGE_HAL_MSG_TYPE_CQRQ_CREATE_RESP:The CQRQ Create Response
208  *		 message is sent in response to the CQRQ Create Request
209  *		 message from the host to indicate the status of the operation.
210  * @VXGE_HAL_MSG_TYPE_CQRQ_DELETE_REQ:The CQRQ Delete Request
211  *		 message is used by the host to destroy a CQRQ on the adapter.
212  * @VXGE_HAL_MSG_TYPE_CQRQ_DELETE_RESP:The CQRQ Delete Response
213  *		 message is sent in response to the CQRQ Delete Request
214  *		 message from the host to indicate the status of the operation.
215  * @VXGE_HAL_MSG_TYPE_CQRQ_MODIFY_REQ:The CQRQ Modify Request
216  *		 message is used by the host to modify fields for an
217  *		 CQRQ on the adapter. The adapter will make the following
218  *		 checks
219  *		 - The CQRQ ID is valid
220  *		 All other checks must be performed by the host software.
221  * @VXGE_HAL_MSG_TYPE_CQRQ_MODIFY_RESP:The CQRQ Modify Response
222  *		 message is sent in response to the CQRQ Modify Request
223  *		 message from the host to indicate the status of the operation.
224  * @VXGE_HAL_MSG_TYPE_CQRQ_QUERY_REQ:The CQRQ Query Request
225  *		 message is used by the host to query the properties of a CQRQ
226  *		 on the adapter
227  * @VXGE_HAL_MSG_TYPE_CQRQ_QUERY_RESP:The CQRQ Query Response
228  *		 message is sent in response to the CQRQ Query Request
229  *		 message from the host to indicate the status of the operation
230  *		 and return any CQRQ properties to the host.
231  * @VXGE_HAL_MSG_TYPE_CQRQ_ARM_REQ:The CQRQ Arm Request  message
232  *		 is used by the host to change the armed state of a CQRQ on the
233  *		 adapter. The armed state determines how the adapter will
234  *		 interrupt the host when RDMA messages arrive.
235  * @VXGE_HAL_MSG_TYPE_CQRQ_ARM_RESP:The CQRQ Arm Response  message
236  *		 is sent in response to the CQRQ Arm Request  message from the
237  *		 host to indicate the status of arming the CQRQ
238  * @VXGE_HAL_MSG_TYPE_CQRQ_EVENT_NOTIF:The CQRQ Event Notification
239  *		  message is sent to host when the adapter encounters a
240  *		 problem when DMAing CQEs from host memory. There are three
241  *		 conditions, EOL, Low Threshold, Drained
242  * @VXGE_HAL_MSG_TYPE_CQRQ_FIRST_CQE_BW_NOTIF_REQ:The CQRQ
243  *		 First CQE BW Notification Request  message is used by the
244  *		 host to notify the adapter after it has configured the first
245  *		 CQE block wrapper(s). It is required to pass the host address
246  *		 and number of bytes of the first CQE block wrapper in host
247  *		 memory.
248  * @VXGE_HAL_MSG_TYPE_CQRQ_FIRST_CQE_BW_NOTIF_RESP:The CQRQ
249  *		 First CQE BW Notification Response  message is sent in
250  *		 response to the CQRQ First CQE BW Notification Request
251  *		 message from the host to acknowledge the notification from
252  *		 host and return the status of updating the CQRQ record with
253  *		 the address and bytes of the first CQE block wrapper.
254  * @VXGE_HAL_MSG_TYPE_SRQ_CREATE_REQ:The SRQ Create Request
255  *		 message is used by the host to create an SRQ on the adapter.
256  * @VXGE_HAL_MSG_TYPE_SRQ_CREATE_RESP:The SRQ Create Response
257  *		 message is sent in response to the SRQ Create Request
258  *		 message from the host to indicate the status of the operation
259  *		 and return the SRQ ID to the host.
260  * @VXGE_HAL_MSG_TYPE_SRQ_DELETE_REQ:The SRQ Delete Request
261  *		 message is used by the host to delete an SRQ on the adapter.
262  * @VXGE_HAL_MSG_TYPE_SRQ_DELETE_RESP:The SRQ Delete Response
263  *		 message is sent in response to the SRQ Delete Request
264  *		 message from the host to indicate the status of the operation.
265  * @VXGE_HAL_MSG_TYPE_SRQ_MODIFY_REQ:The SRQ Modify Request
266  *		 message is used by the host to modify an SRQ on the adapter.
267  *		 The host must send down all the fields to modify. To simplify
268  *		 the adapter firmware there will be no mask to modify individual
269  *		 fields.
270  * @VXGE_HAL_MSG_TYPE_SRQ_MODIFY_RESP:The SRQ Modify Response
271  *		 message is sent in response to the SRQ Modify Request
272  *		 message from the host to indicate the status of the operation.
273  * @VXGE_HAL_MSG_TYPE_SRQ_QUERY_REQ:The SRQ Query Request  message
274  *		 is used by the host to query the properties of an SRQ on the
275  *		 adapter.
276  * @VXGE_HAL_MSG_TYPE_SRQ_QUERY_RESP:The SRQ Query Response
277  *		 message is sent in response to the SRQ Query Request  message
278  *		 from the host to indicate the status of the operation and
279  *		 return any SRQ properties to the host
280  * @VXGE_HAL_MSG_TYPE_SRQ_ARM_REQ:The SRQ Arm Request  message is
281  *		 sent to the adapter to arm or re-arm the SRQ limit.
282  * @VXGE_HAL_MSG_TYPE_SRQ_ARM_RESP:The SRQ Arm Response  is sent
283  *		 to the host to acknowledge the SRQ Arm Request  and indicate
284  *		 the status of arming or re-arming the SRQ limit.
285  * @VXGE_HAL_MSG_TYPE_SRQ_EVENT_NOTIF:The SRQ Event Notification
286  *		 iMSG is used to alert the host that the adapter has encountered
287  *		 one of the following conditions when DMAing WQEs from host
288  *		 memory - EOL (End of list of WQEs in host memory),Low Threshold
289  *		 (The adapter is running low on available WQEs),Drained (Adapter
290  *		 out of WQEs because of EOL condition or adapter use faster than
291  *		 DMA), SRQ Limit (The number of available WQEs on adapter + host
292  *		 less than SRQ limit and the SRQ limit is armed).
293  * @VXGE_HAL_MSG_TYPE_SRQ_FIRST_WQE_BW_NOTIF_REQ:The SRQ First
294  *		 WQE BW Notification Request  is used to alert the adapter of
295  *		 the location of the first WQE block wrapper after initially
296  *		 creating the SRQ. It is required because the host cannot
297  *		 pre-post WQEs when creating the SRQ.
298  * @VXGE_HAL_MSG_TYPE_SRQ_FIRST_WQE_BW_NOTIF_RESP:The SRQ First
299  *		 WQE BW Notification Response  message is sent in response to
300  *		 the SRQ First WQE BW Notification Request  message from the
301  *		 host to indicate the status of the operation.
302  * @VXGE_HAL_MSG_TYPE_SRQ_WQE_BLOCKS_ADDED_NOTIF_REQ:The SRQ
303  *		 WQE Blocks Added Notification Request  is used to alert the
304  *		 adapter that new WQEs have been posted in host memory. This is
305  *		 required in order for the adapter to support the concept of SRQ
306  *		 limit.
307  * @VXGE_HAL_MSG_TYPE_SRQ_WQE_BLOCKS_ADDED_NOTIF_RESP:The SRQ
308  *		 WQE Blocks Added Notification Response  is sent by the adapter
309  *		 in response to the SRQ WQE Blocks Added Notification Request
310  *		 to acknowledge the notification from the host and to return any
311  *		 status in the event a problem occurred.
312  * @VXGE_HAL_MSG_TYPE_SRQ_RETURN_UNUSED_WQES_REQ:The SRQ Return WQEs
313  *		 Request  message may be sent by the host to reclaim unused
314  *		 WQEs from the head of the WQE block wrapper list. Its purpose
315  *		 is to reclaim over-provisioned WQEs for an SRQ. The host may
316  *		 choose to reclaim WQEs from an SRQ at any time.
317  * @VXGE_HAL_MSG_TYPE_SRQ_RETURN_UNUSED_WQES_RESP:The SRQ Return WQEs
318  *		  is sent in reply to the SRQ Return WQEs Request  message
319  *		 to reclaim unused WQEs from an over-provisioned SRQ.
320  * @VXGE_HAL_MSG_TYPE_STAG_ALLOCATE_NSMR_REQ:This downward message
321  *		 commands the adapter to create a new non-shared memory region
322  *		 (NSMR) in the invalid state. This message is used to implement
323  *		 the Allocate Non-Shared Memory Region memory management verb.
324  * @VXGE_HAL_MSG_TYPE_STAG_ALLOCATE_NSMR_RESP:This upward message
325  *		 communicates to the host the success or failure of the
326  *		 corresponding STAG Allocate NSMR Request  message
327  * @VXGE_HAL_MSG_TYPE_STAG_ALLOCATE_MW_REQ:This downward message
328  *		 commands the adapter to allocate a new memory window (MW).
329  *		 This message is used to implement the Allocate Memory Window
330  *		 memory management verb.
331  * @VXGE_HAL_MSG_TYPE_STAG_ALLOCATE_MW_RESP:This upward message
332  *		 communicates to the host the success or failure of the
333  *		 corresponding STAG Allocate MW Request  message.
334  * @VXGE_HAL_MSG_TYPE_STAG_DE_ALLOCATE_REQ:This downward message
335  *		 commands the adapter to deallocate the specified STag, freeing
336  *		 up any on-adapter resources
337  * @VXGE_HAL_MSG_TYPE_STAG_DE_ALLOCATE_RESP:This upward message
338  *		 communicates to the host the success or failure of the
339  *		 corresponding STAG De-allocate Request  message.
340  * @VXGE_HAL_MSG_TYPE_STAG_REGISTER_NSMR_REQ:This downward message
341  *		 commands the adapter to register a non-shared memory region.
342  *		 This message is used to implement Register NSMR memory
343  *		 management verb Fast registration cannot be performed with
344  *		 this . It can only be done via the PostSQ TOWI.
345  * @VXGE_HAL_MSG_TYPE_STAG_REGISTER_NSMR_RESP:This upward message
346  *		 communicates to the host the success or failure of the
347  *		 corresponding STAG Register NSMR Request  message.
348  * @VXGE_HAL_MSG_TYPE_STAG_RE_REGISTER_NSMR_REQ:This downward
349  *		 message commands the adapter to change the memory registration
350  *		 of an existing NSMR to create a new NSMR in the valid state.
351  *		 This message is used to implement the Reregister Non-Shared
352  *		 Memory Region memory management verb.
353  * @VXGE_HAL_MSG_TYPE_STAG_RE_REGISTER_NSMR_RESP:This upward message
354  *		 communicates to the host the success or failure of the
355  *		 corresponding STAG Re-register NSMR Request  message
356  * @VXGE_HAL_MSG_TYPE_STAG_REGISTER_SMR_REQ:This downward message
357  *		 commands the adapter to create a shared memory region (SMR)
358  *		 based on an existing memory region, either shared(SMR) or
359  *		 non-shared(NSMR). This message is used to implement the
360  *		 Register Shared Memory Region verb.
361  * @VXGE_HAL_MSG_TYPE_STAG_REGISTER_SMR_RESP:This upward message
362  *		 communicates to the host the success or failure of the
363  *		 corresponding STAG Re-register NSMR Request  message.
364  * @VXGE_HAL_MSG_TYPE_STAG_QUERY_REQ:This downward message commands
365  *		 the adapter to return the specifics of the specified STag.
366  *		 This message is used to implement the Query Memory Region
367  *		 memory management verb and the Query Memory Window memory
368  *		 management verb. Memory region and memory window querying
369  *		 could be handled entirely by the host software without any
370  *		 adapter involvement. The STAG Query Request  and STAG
371  *		 Query Response  messages allow the host to implement
372  *		 adapter-based STag querying.
373  * @VXGE_HAL_MSG_TYPE_STAG_QUERY_RESP:This upward message
374  *		 communicates to the host the specifics of the queried STag.
375  *		 The response message does not return the underlying the PBL.
376  * @VXGE_HAL_MSG_TYPE_STAG_VALID_LOCAL_TAG_REQ:This message
377  *		 commands the adapter to transition an invalid STag to the
378  *		 valid state without changing any of its other attributes.
379  *		 The Validate-STag-/Validate-STag-Response- messages
380  *		 allow a Neterion-proprietary ability to revalidate an invalid
381  *		 STag without changing any of its attributes or its PBL. This
382  *		 is expected to be useful in situations where an STag is
383  *		 invalidated and then revalidated with the same attributes
384  *		 including PBL. Using this message, rather than the more
385  *		 general Reregister NSMR, saves the overhead of transferring
386  *		 the PBL to the adapter.
387  * @VXGE_HAL_MSG_TYPE_STAG_VALID_LOCAL_TAG_RESP:This upward message
388  *		 communicates to the host the success of failure of the
389  *		 corresponding STAG Validate Local Tag Request  message.
390  * @VXGE_HAL_MSG_TYPE_STAG_INVALID_LOCAL_TAG_REQ: The STAG
391  *		 Invalidate Local Tag Request  message is used by the host to
392  *		 invalidate a local STAG. This message provides an alternative
393  *		 route for the normal TOWI based STAG Invalidation. It allows a
394  *		 kernel mode process to invalidate an STAG without writing
395  *		 a TOWI.
396  * @VXGE_HAL_MSG_TYPE_STAG_INVALID_LOCAL_TAG_RESP: This upward
397  *		 message communicates to the host the success or failure of the
398  *		 corresponding STAG Invalidate Local Tag Request  message.
399  * @VXGE_HAL_MSG_TYPE_STAG_BIND_MW_REQ: This downward message commands
400  *		 the adapter to bind an existing (invalid) MW to an existing
401  *		 (valid) MR.  This message provides an alternative to the TOWI
402  *		 based implementation allowing the  path be used for MW binding
403  * @VXGE_HAL_MSG_TYPE_STAG_BIND_MW_RESP: This upward message
404  *		 communicates to the host the success or failure of the
405  *		 corresponding STAG Bind MW Request  message.
406  * @VXGE_HAL_MSG_TYPE_STAG_FAST_REGISTER_NSMR_REQ: The STAG Fast
407  *		 Register NSMR Request  provides an alternative way to fast
408  *		 register an NSMR instead of going to the TOWI path.
409  * @VXGE_HAL_MSG_TYPE_STAG_FAST_REGISTER_NSMR_RESP:  The STag Fast
410  *		 Register NSMR Response  message is sent to the host from
411  *		 the adapter in response to the original  message. It
412  *		 indicates the status of fast registering the NSMR.
413  * @VXGE_HAL_MSG_TYPE_TCP_OPEN_REQ:The TCP Open Request  message
414  *		 is sent by the host to open a TCP connection on the adapter.
415  * @VXGE_HAL_MSG_TYPE_TCP_OPEN_RESP:The TCP Open Response  message
416  *		 is sent in response to a TCP Open Request  message to indicate
417  *		 that the TCP session has been opened
418  * @VXGE_HAL_MSG_TYPE_TCP_PROMOTE_TO_IWARP_REQ:The TCP Promote to
419  *		 iWARP Request  message is sent from the host to the adapter
420  *		 in order to migrate an existing bytestream session to iWARP
421  *		 mode.
422  * @VXGE_HAL_MSG_TYPE_TCP_PROMOTE_TO_IWARP_RESP:The TCP Promote to
423  *		 iWARP Response  message is sent to the host to indicate the
424  *		 status of promoting an existing bytestream session to iWARP
425  *		 mode.
426  * @VXGE_HAL_MSG_TYPE_TCP_MODIFY_REQ:The TCP Modify Request  message
427  *		 is sent by the host to modify the attributes associated with a
428  *		 bytestream or iWARP session.
429  * @VXGE_HAL_MSG_TYPE_TCP_MODIFY_RESP:The TCP Modify Response  message
430  *		 is sent to the host in response to a TCP Modify Request message
431  *		 to indicate the status of changing the attributes associated
432  *		 with the bytestream or iWARP session.
433  * @VXGE_HAL_MSG_TYPE_TCP_DELETE_REQ:The TCP Delete Request
434  *		 message is sent by the host to delete a bytestream TCP session
435  *		 on the adapter.
436  * @VXGE_HAL_MSG_TYPE_TCP_DELETE_RESP:The TCP Delete Response
437  *		 message is sent in response to a TCP Delete Request  message
438  *		 to indicate that the TCP session has been deleted.
439  * @VXGE_HAL_MSG_TYPE_TCP_ABORT_REQ: The TCP Abort Request  message
440  *		 is used to abort a bytestream or iWARP session.
441  * @VXGE_HAL_MSG_TYPE_TCP_ABORT_RESP: The TCP Abort Response
442  *		 message is sent to the host from the adapter after aborting the
443  *		 bytestream or iWARP session.
444  * @VXGE_HAL_MSG_TYPE_TCP_ESTABLISHED: The TCP Established  message is
445  *		 an un-solicited event sent from the adapter to the host when
446  *		 the SYN+ACK segment arrives (active opener) or the ACK segment
447  *		(passive opener) arrives at the adapter.
448  * @VXGE_HAL_MSG_TYPE_TCP_FIN_RECEIVED: The TCP FIN Received  message
449  *		 is an un-solicited event sent from the adapter to the host on
450  *		 session teardown. It indicates that the FIN segment has been
451  *		 received from the remote end and the session is now in TIME
452  *		 WAIT state.
453  * @VXGE_HAL_MSG_TYPE_TCP_TIME_WAIT_DONE: The TCP Time Wait Done  message
454  *		 is sent from the adapter to the host to indicate when the TCP
455  *		 session leaves the TIME WAIT state.
456  * @VXGE_HAL_MSG_TYPE_TCP_UPDATE_RXWIN: This message is used for receive
457  *		 window updates, both for rx window flow control updates(updates
458  *		 to rcv_buf as data is consumed by the application on the host)
459  *		 and for maximum receive window size updates (when the receive
460  *		 buffer size changes on the host)
461  * @VXGE_HAL_MSG_TYPE_TCP_UPDATE_MSS: This  is sent by the host to the
462  *		 adapter to update the MSS for the session.
463  * @VXGE_HAL_MSG_TYPE_TCP_UPDATE_IP_HEADER: The TCP Update IP Header
464  *		 is used to update the IP TOS and IP flow label in the IP header
465  * @VXGE_HAL_MSG_TYPE_TCP_UPDATE_KEEPALIVE: The TCP Update Keepalive
466  *		 message is sent from the host to the adapter to update the
467  *		 keep-alive timer for the session.
468  * @VXGE_HAL_MSG_TYPE_TCP_UPDATE_FAILURE: The TCP Update Failure
469  *		 message is sent to the host from the adapter in the event that
470  *		 one of the TCP update messages failed for the session. Normally
471  *		 these messages do not require a reply and therefore there is no
472  *		 response from the adapter. The TCP Update messages include:
473  *		 VXGE_HAL_MSG_TYPE_TCP_UPDATE_RXWIN
474  *		 VXGE_HAL_MSG_TYPE_TCP_UPDATE_MSS
475  *		 VXGE_HAL_MSG_TYPE_TCP_UPDATE_IP_HEADER
476  *		 VXGE_HAL_MSG_TYPE_TCP_UPDATE_KEEPALIVE
477  * @VXGE_HAL_MSG_TYPE_TCP_FIN_ACK_RECEIVED:The TCP FIN ACK Received
478  *		 message is an unsolicited message sent to the host from the
479  *		 adapter on received of the ACK segment acknowledging that the
480  *		 remote end has received the FIN. It is required for Sun's KPI
481  *		 interface.
482  * @VXGE_HAL_MSG_TYPE_TCP_RELINK_TO_NCE_REQ:The TCP Relink to NCE
483  *		 Request  would be used to change the NCE entry associated
484  *		 with a particular bytestream or iWARP session. This message
485  *		 could be used to change the NCE of a group of sessions if a
486  *		 particular path went down and need to be replaced by a new path
487  *		 The host is responsible for tracking the mapping of sessions to
488  *		 NCEs so that when de-allocating an NCE it does not de-allocate
489  *		 on that is still in use by a particular session.
490  * @VXGE_HAL_MSG_TYPE_TCP_RELINK_TO_NCE_RESP:This message is sent in
491  *		 response to the TCP Relink to NCE Request  to indicate the
492  *		 status of re-linking the TCP session to a particular NCE.
493  * @VXGE_HAL_MSG_TYPE_TCP_QP_LIMIT_EXCEEDED:The TCP QP Limit Exceeded
494  *		 Notification  message is sent to the host when an iWARP
495  *		 session has reached its QP Limit and the QP limit was armed.
496  * @VXGE_HAL_MSG_TYPE_TCP_RDMA_TERMINATE_RECEIVED:The TCP RDMA Terminate
497  *		 Received  message is an un-solicited event sent from the
498  *		 adapter to the host when an RDMA terminate message has been
499  *		 received from the remote end.
500  * @VXGE_HAL_MSG_TYPE_LRO_OPEN_REQ:The LRO Open Request  message
501  *		 is sent by the host to open an LRO connection on the adapter.
502  *		 There is no PE context for an LRO session. The PE is involved
503  *		 for timer purposes and transferring messages to the RPE but it
504  *		 contains no session context.
505  * @VXGE_HAL_MSG_TYPE_LRO_OPEN_RESP:The LRO Open Response  message
506  *		 is sent in response to a LRO Open Request  message to
507  *		 indicate that the LRO session has been opened.
508  * @VXGE_HAL_MSG_TYPE_LRO_END_CLASSIF_REQ:The LRO End
509  *		 Classification Request  is sent by the host before the LRO
510  *		 Delete Request  to tell the adapter to stop steering Rx
511  *		 frames from that session into the LRO path. The host would
512  *		 later call LRO Delete Request . Separating these two calls
513  *		 allows enough time to pass so that frames already in the FB can
514  *		 be drained out, thereby avoiding the need for frame reversion.
515  * @VXGE_HAL_MSG_TYPE_LRO_END_CLASSIF_RESP:The LRO End
516  *		 Classification Response  message is sent in response to a
517  *		 LRO End Classification Request  message to indicate that
518  *		 classification has been stopped for the LRO session and the
519  *		 host can proceed with deleting the LRO session.
520  * @VXGE_HAL_MSG_TYPE_LRO_DELETE_REQ:The LRO Delete Request
521  *		 message is sent by the host to delete a LRO session on the
522  *		 adapter.It might be possible in the future to replace this
523  *		 message and the TCP Delete Request  with a single common
524  *		 message since there doesn't seem to be any difference between
525  *		 the two anymore.
526  * @VXGE_HAL_MSG_TYPE_LRO_DELETE_RESP:The LRO Delete Response
527  *		 message is sent in response to a LRO Delete Request  message
528  *		 to indicate that the LRO session has been deleted.
529  * @VXGE_HAL_MSG_TYPE_LRO_SESSION_CANDIDATE_NOTIF:This msg
530  *		 indicates to the host that the adapter's autoLRO feature has
531  *		 identified a candidate LRO session. No response from the host
532  *		 is required. (If the host did decide to act on this information
533  *		 from the adapter, the host would use the usual LRO Open Request
534  *		).
535  * @VXGE_HAL_MSG_TYPE_SPDM_OPEN_REQ:The SPDM Open Request  message
536  *		 is sent by the host to open an SPDM connection on the adapter.
537  *		 There is no RPE or PE context for an SPDM session. The ONE is
538  *		 not involved in this type of classification.
539  * @VXGE_HAL_MSG_TYPE_SPDM_OPEN_RESP:The SPDM Open Response
540  *		 message is sent in response to a SPDM Open Request  message
541  *		 to indicate the status of creating the SPDM session.
542  * @VXGE_HAL_MSG_TYPE_SPDM_DELETE_REQ:The SPDM Delete Request
543  *		 message is sent by the host to delete an SPDM session on the
544  *		 adapter. It might be possible in the future to replace this
545  *		 message and the LRO/TCP Delete Request  with a single common
546  *		 message since there doesn't seem to be any difference between
547  *		 the two anymore.
548  * @VXGE_HAL_MSG_TYPE_SPDM_DELETE_RESP:The SPDM Delete Response
549  *		 message is sent in response to a SPDM Delete Request  message
550  *		 to indicate that the SPDM session has been deleted.
551  * @VXGE_HAL_MSG_TYPE_SESSION_EVENT_NOTIF:The Session Event
552  *		 Notification  message is an unsolicited message from the
553  *		 adapter used to inform the host about an unexpected condition
554  *		 on a bytestream or iWARP session.
555  * @VXGE_HAL_MSG_TYPE_SESSION_QUERY_REQ:The Session Query Request
556  *		 message is sent by the host to query the attributes of an
557  *		 existing offloaded session. This message may be used to query
558  *		 the attributes of an SPDM, LRO, bytestream or iWARP session.
559  *		 Initially this will be a single message used for all purposes.
560  *		 In the future this may be split up into multiple messages
561  *		 allowing the user to query the pecific context for an SPDM,
562  *		 LRO, iWARP, or bytestream session.
563  * @VXGE_HAL_MSG_TYPE_SESSION_QUERY_RESP:The Session Query Response
564  *		  message is sent in response to a Session Query Request
565  *		 message to return the attributes associated with the specified
566  *		 session
567  * @VXGE_HAL_MSG_TYPE_SESSION_RETURN_IN_PROG_WQES: This message is
568  *		 generated by the adapter during deletion of a session to return
569  *		 any WQEs that may be in the in-progress list for the session.If
570  *		 a WQE is in the in-progress list it is owned by the session and
571  *		 cannot be returned to the head of WQE list for an SRQ because
572  *		 of ordering issues. Therefore, it must be returned to the host
573  *		 at which point the host may choose to destroy the resource or
574  *		 simply re-post the WQE for re-use.
575  * @VXGE_HAL_MSG_TYPE_SESSION_FRAME_WRITE:The Frame Write  message is
576  *		 generated by the adapter in order to send certain frames to the
577  *		 host via the  path instead of the normal path. Frames will be
578  *		 sent to the host under the following conditions:
579  *		 1) mis-aligned frames that the adapter cannot place
580  *		 2) during debugging to look at the contents of the frame
581  *		 In addition to this,a RDMA terminate message will also be sent
582  *		 via a  message but in this case it will be sent in a TCP RDMA
583  *		 Terminate Received  message. Frames arriving in the  will
584  *		 not have markers stripped. Instead the host will be responsible
585  *		 for stripping markers and taking appropriate action on the
586  *		 received frame.
587  * @VXGE_HAL_MSG_TYPE_SQ_CREATE_REQ: This is HAL private message for.
588  *		 SQ create. Never used.
589  * @VXGE_HAL_MSG_TYPE_SQ_CREATE_RESP: This is HAL private message
590  *		 for SQ create response. This is reported to clients by HAL.
591  * @VXGE_HAL_MSG_TYPE_SQ_DELETE_REQ: This is HAL private message for.
592  *		 SQ delete. Never used.
593  * @VXGE_HAL_MSG_TYPE_SQ_DELETE_RESP:This is HAL private message
594  *		 for SQ delete response. This is reported to clients by HAL.
595  *
596  * Message types supported by the adapter and HAL Private messages.
597  */
598 typedef enum vxge_hal_message_type_e {
599 	VXGE_HAL_MSG_TYPE_NCE_CREATE_REQ			= 1,
600 	VXGE_HAL_MSG_TYPE_NCE_CREATE_RESP			= 2,
601 	VXGE_HAL_MSG_TYPE_NCE_DELETE_REQ			= 3,
602 	VXGE_HAL_MSG_TYPE_NCE_DELETE_RESP			= 4,
603 	VXGE_HAL_MSG_TYPE_NCE_UPDATE_MAC_REQ			= 5,
604 	VXGE_HAL_MSG_TYPE_NCE_UPDATE_MAC_RESP			= 6,
605 	VXGE_HAL_MSG_TYPE_NCE_UPDATE_RCH_TIME_REQ		= 7,
606 	VXGE_HAL_MSG_TYPE_NCE_UPDATE_RCH_TIME_RESP		= 8,
607 	VXGE_HAL_MSG_TYPE_NCE_QUERY_REQ				= 9,
608 	VXGE_HAL_MSG_TYPE_NCE_QUERY_RESP			= 10,
609 	VXGE_HAL_MSG_TYPE_NCE_RCH_TIME_EXCEEDED			= 86,
610 	VXGE_HAL_MSG_TYPE_CQRQ_CREATE_REQ			= 11,
611 	VXGE_HAL_MSG_TYPE_CQRQ_CREATE_RESP			= 12,
612 	VXGE_HAL_MSG_TYPE_CQRQ_DELETE_REQ			= 13,
613 	VXGE_HAL_MSG_TYPE_CQRQ_DELETE_RESP			= 14,
614 	VXGE_HAL_MSG_TYPE_CQRQ_MODIFY_REQ			= 16,
615 	VXGE_HAL_MSG_TYPE_CQRQ_MODIFY_RESP			= 17,
616 	VXGE_HAL_MSG_TYPE_CQRQ_QUERY_REQ			= 18,
617 	VXGE_HAL_MSG_TYPE_CQRQ_QUERY_RESP			= 19,
618 	VXGE_HAL_MSG_TYPE_CQRQ_ARM_REQ				= 20,
619 	VXGE_HAL_MSG_TYPE_CQRQ_ARM_RESP				= 21,
620 	VXGE_HAL_MSG_TYPE_CQRQ_EVENT_NOTIF			= 22,
621 	VXGE_HAL_MSG_TYPE_CQRQ_FIRST_CQE_BW_NOTIF_REQ		= 23,
622 	VXGE_HAL_MSG_TYPE_CQRQ_FIRST_CQE_BW_NOTIF_RESP		= 24,
623 	VXGE_HAL_MSG_TYPE_SRQ_CREATE_REQ			= 27,
624 	VXGE_HAL_MSG_TYPE_SRQ_CREATE_RESP			= 28,
625 	VXGE_HAL_MSG_TYPE_SRQ_DELETE_REQ			= 29,
626 	VXGE_HAL_MSG_TYPE_SRQ_DELETE_RESP			= 30,
627 	VXGE_HAL_MSG_TYPE_SRQ_MODIFY_REQ			= 31,
628 	VXGE_HAL_MSG_TYPE_SRQ_MODIFY_RESP			= 32,
629 	VXGE_HAL_MSG_TYPE_SRQ_QUERY_REQ				= 33,
630 	VXGE_HAL_MSG_TYPE_SRQ_QUERY_RESP			= 34,
631 	VXGE_HAL_MSG_TYPE_SRQ_ARM_REQ				= 35,
632 	VXGE_HAL_MSG_TYPE_SRQ_ARM_RESP				= 36,
633 	VXGE_HAL_MSG_TYPE_SRQ_EVENT_NOTIF			= 37,
634 	VXGE_HAL_MSG_TYPE_SRQ_FIRST_WQE_BW_NOTIF_REQ		= 38,
635 	VXGE_HAL_MSG_TYPE_SRQ_FIRST_WQE_BW_NOTIF_RESP		= 39,
636 	VXGE_HAL_MSG_TYPE_SRQ_WQE_BLOCKS_ADDED_NOTIF_REQ	= 40,
637 	VXGE_HAL_MSG_TYPE_SRQ_WQE_BLOCKS_ADDED_NOTIF_RESP	= 41,
638 	VXGE_HAL_MSG_TYPE_SRQ_RETURN_UNUSED_WQES_REQ		= 96,
639 	VXGE_HAL_MSG_TYPE_SRQ_RETURN_UNUSED_WQES_RESP		= 42,
640 	VXGE_HAL_MSG_TYPE_STAG_ALLOCATE_NSMR_REQ		= 43,
641 	VXGE_HAL_MSG_TYPE_STAG_ALLOCATE_NSMR_RESP		= 44,
642 	VXGE_HAL_MSG_TYPE_STAG_ALLOCATE_MW_REQ			= 45,
643 	VXGE_HAL_MSG_TYPE_STAG_ALLOCATE_MW_RESP			= 46,
644 	VXGE_HAL_MSG_TYPE_STAG_DE_ALLOCATE_REQ			= 47,
645 	VXGE_HAL_MSG_TYPE_STAG_DE_ALLOCATE_RESP			= 48,
646 	VXGE_HAL_MSG_TYPE_STAG_REGISTER_NSMR_REQ		= 49,
647 	VXGE_HAL_MSG_TYPE_STAG_REGISTER_NSMR_RESP		= 50,
648 	VXGE_HAL_MSG_TYPE_STAG_RE_REGISTER_NSMR_REQ		= 51,
649 	VXGE_HAL_MSG_TYPE_STAG_RE_REGISTER_NSMR_RESP		= 52,
650 	VXGE_HAL_MSG_TYPE_STAG_REGISTER_SMR_REQ			= 53,
651 	VXGE_HAL_MSG_TYPE_STAG_REGISTER_SMR_RESP		= 54,
652 	VXGE_HAL_MSG_TYPE_STAG_QUERY_REQ			= 55,
653 	VXGE_HAL_MSG_TYPE_STAG_QUERY_RESP			= 56,
654 	VXGE_HAL_MSG_TYPE_STAG_VALID_LOCAL_TAG_REQ		= 57,
655 	VXGE_HAL_MSG_TYPE_STAG_VALID_LOCAL_TAG_RESP		= 58,
656 	VXGE_HAL_MSG_TYPE_STAG_INVALID_LOCAL_TAG_REQ		= 87,
657 	VXGE_HAL_MSG_TYPE_STAG_INVALID_LOCAL_TAG_RESP		= 88,
658 	VXGE_HAL_MSG_TYPE_STAG_BIND_MW_REQ			= 89,
659 	VXGE_HAL_MSG_TYPE_STAG_BIND_MW_RESP			= 90,
660 	VXGE_HAL_MSG_TYPE_STAG_FAST_REGISTER_NSMR_REQ		= 91,
661 	VXGE_HAL_MSG_TYPE_STAG_FAST_REGISTER_NSMR_RESP		= 92,
662 	VXGE_HAL_MSG_TYPE_TCP_OPEN_REQ				= 59,
663 	VXGE_HAL_MSG_TYPE_TCP_OPEN_RESP				= 60,
664 	VXGE_HAL_MSG_TYPE_TCP_PROMOTE_TO_IWARP_REQ		= 61,
665 	VXGE_HAL_MSG_TYPE_TCP_PROMOTE_TO_IWARP_RESP		= 62,
666 	VXGE_HAL_MSG_TYPE_TCP_MODIFY_REQ			= 98,
667 	VXGE_HAL_MSG_TYPE_TCP_MODIFY_RESP			= 99,
668 	VXGE_HAL_MSG_TYPE_TCP_DELETE_REQ			= 63,
669 	VXGE_HAL_MSG_TYPE_TCP_DELETE_RESP			= 64,
670 	VXGE_HAL_MSG_TYPE_TCP_ABORT_REQ				= 65,
671 	VXGE_HAL_MSG_TYPE_TCP_ABORT_RESP			= 66,
672 	VXGE_HAL_MSG_TYPE_TCP_ESTABLISHED			= 78,
673 	VXGE_HAL_MSG_TYPE_TCP_FIN_RECEIVED			= 79,
674 	VXGE_HAL_MSG_TYPE_TCP_TIME_WAIT_DONE			= 80,
675 	VXGE_HAL_MSG_TYPE_TCP_UPDATE_RXWIN			= 81,
676 	VXGE_HAL_MSG_TYPE_TCP_UPDATE_MSS			= 82,
677 	VXGE_HAL_MSG_TYPE_TCP_UPDATE_IP_HEADER			= 83,
678 	VXGE_HAL_MSG_TYPE_TCP_UPDATE_KEEPALIVE			= 84,
679 	VXGE_HAL_MSG_TYPE_TCP_UPDATE_FAILURE			= 85,
680 	VXGE_HAL_MSG_TYPE_TCP_FIN_ACK_RECEIVED			= 87,
681 	VXGE_HAL_MSG_TYPE_TCP_RELINK_TO_NCE_REQ			= 88,
682 	VXGE_HAL_MSG_TYPE_TCP_RELINK_TO_NCE_RESP		= 89,
683 	VXGE_HAL_MSG_TYPE_TCP_QP_LIMIT_EXCEEDED			= 100,
684 	VXGE_HAL_MSG_TYPE_TCP_RDMA_TERMINATE_RECEIVED		= 101,
685 	VXGE_HAL_MSG_TYPE_LRO_OPEN_REQ				= 67,
686 	VXGE_HAL_MSG_TYPE_LRO_OPEN_RESP				= 68,
687 	VXGE_HAL_MSG_TYPE_LRO_END_CLASSIF_REQ			= 69,
688 	VXGE_HAL_MSG_TYPE_LRO_END_CLASSIF_RESP			= 70,
689 	VXGE_HAL_MSG_TYPE_LRO_DELETE_REQ			= 71,
690 	VXGE_HAL_MSG_TYPE_LRO_DELETE_RESP			= 72,
691 	VXGE_HAL_MSG_TYPE_LRO_SESSION_CANDIDATE_NOTIF		= 73,
692 	VXGE_HAL_MSG_TYPE_SPDM_OPEN_REQ				= 74,
693 	VXGE_HAL_MSG_TYPE_SPDM_OPEN_RESP			= 75,
694 	VXGE_HAL_MSG_TYPE_SPDM_DELETE_REQ			= 76,
695 	VXGE_HAL_MSG_TYPE_SPDM_DELETE_RESP			= 77,
696 	VXGE_HAL_MSG_TYPE_SESSION_EVENT_NOTIF			= 102,
697 	VXGE_HAL_MSG_TYPE_SESSION_QUERY_REQ			= 103,
698 	VXGE_HAL_MSG_TYPE_SESSION_QUERY_RESP			= 104,
699 	VXGE_HAL_MSG_TYPE_SESSION_RETURN_IN_PROG_WQES		= 97,
700 	VXGE_HAL_MSG_TYPE_SESSION_FRAME_WRITE			= 105,
701 	/* The following are private for HAL */
702 	VXGE_HAL_MSG_TYPE_SQ_CREATE_REQ				= 65537,
703 	VXGE_HAL_MSG_TYPE_SQ_CREATE_RESP			= 65538,
704 	VXGE_HAL_MSG_TYPE_SQ_DELETE_REQ				= 65539,
705 	VXGE_HAL_MSG_TYPE_SQ_DELETE_RESP			= 65540
706 } vxge_hal_message_type_e;
707 
708 
709 /*
710  * struct vxge_hal_opaque_handle_t - Opaque handle used by the hal and clients
711  *				  to save their contexts
712  * @vpath_handle: Virtual path handle
713  * @hal_priv: Private data which HAL assigns
714  * @client_priv: Client assigned private data
715  *
716  * This structure is used to store the client and hal data and pass as
717  * opaque handle in the messages.
718  */
719 typedef struct vxge_hal_opaque_handle_t {
720 	vxge_hal_vpath_h		vpath_handle;
721 #define	VXGE_HAL_OPAQUE_HANDLE_GET_VPATH_HANDLE(op) ((op)->vpath_handle)
722 #define	VXGE_HAL_OPAQUE_HANDLE_VPATH_HANDLE(op, vrh) (op)->vpath_handle = vrh
723 
724 	u64				hal_priv;
725 #define	VXGE_HAL_OPAQUE_HANDLE_GET_HAL_PRIV(op)	    ((op)->hal_priv)
726 #define	VXGE_HAL_OPAQUE_HANDLE_HAL_PRIV(op, priv)   (op)->hal_priv = (u64)priv
727 
728 	u64				client_priv;
729 #define	VXGE_HAL_OPAQUE_HANDLE_GET_CLIENT_PRIV(op)  ((op)->client_priv)
730 #define	VXGE_HAL_OPAQUE_HANDLE_CLIENT_PRIV(op, priv)	\
731 					    (op)->client_priv = (u64)priv
732 
733 } vxge_hal_opaque_handle_t;
734 
735 /*
736  * vxge_hal_vpath_callback_f - Callback to receive up messages.
737  * @client_handle: handle passed by client in attach or open function
738  * @msgh: Message handle.
739  * @msg_type: Type of message
740  * @obj_id: Object Id of object to which message belongs
741  * @result: Result code
742  * @opaque_handle: Opaque handle passed when the request was made.
743  *
744  * Callback function registered when opening vpath to receive the messages
745  * This callback function passed to vxge_hal_vpath_open and
746  * vxge_hal_vpath_attach routine to get replys to all asynchronous functions.
747  * The format of the reply is a message along with the parameters that are
748  * common fro all replys. The message handle passed to this callback is
749  * opaque for the iWARP/RDMA module and the information from the message can
750  * be got by calling appropriate get function depending on the message type
751  * passed as one of the parameter to the callback. The message types that
752  * are to be passed to the callback are the ones that are responses and
753  * notifications
754  */
755 typedef vxge_hal_status_e(*vxge_hal_vpath_callback_f) (
756     vxge_hal_client_h client_handle,
757     vxge_hal_up_msg_h msgh,
758     vxge_hal_message_type_e msg_type,
759     vxge_hal_obj_id_t obj_id,
760     vxge_hal_status_e result,
761     vxge_hal_opaque_handle_t *opaque_handle);
762 
763 
764 __EXTERN_END_DECLS
765 
766 #endif	/* VXGE_HAL_TYPES_H */
767