2 * Copyright(c) 2002-2011 Exar Corp.
5 * Redistribution and use in source and binary forms, with or without
6 * modification are permitted provided the following conditions are met:
8 * 1. Redistributions of source code must retain the above copyright notice,
9 * this list of conditions and the following disclaimer.
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.
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.
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.
33 #ifndef VXGE_HAL_TYPES_H
34 #define VXGE_HAL_TYPES_H
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
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).
48 typedef enum vxge_hal_reopen_e {
49 VXGE_HAL_RESET_ONLY = 1,
50 VXGE_HAL_OPEN_NORMAL = 2
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
60 * Structure to store version info
62 typedef struct vxge_hal_version_t {
72 #define VXGE_HAL_ETH_ALEN 6
75 * typedef macaddr_t - Ethernet address type
77 typedef u8 macaddr_t[VXGE_HAL_ETH_ALEN];
80 * struct vxge_hal_ipv4 - IP version 4 address type
83 typedef struct vxge_hal_ipv4 {
88 * struct vxge_hal_ipv6 - IP version 6 address type
91 typedef struct vxge_hal_ipv6 {
96 * union vxge_hal_ipaddr_t - IP address type
97 * @ipv4: IP V4 address
98 * @ipv6: IP V6 address
100 typedef union vxge_hal_ipaddr_t {
106 * typedef vxge_hal_obj_id_t - Object Id type used for Session,
107 * SRQ, CQRQ, STAG, LRO, SPDM etc objects
109 typedef u64 vxge_hal_obj_id_t;
114 * typedef vxge_hal_device_h - Handle to the adapter object
116 typedef void *vxge_hal_device_h;
119 * typedef vxge_hal_vpath_h - Handle to the virtual path object returned to LL
121 typedef void *vxge_hal_vpath_h;
124 * typedef vxge_hal_client_h - Handle passed by client for client's private data
126 typedef void *vxge_hal_client_h;
129 * typedef vxge_hal_ring_h - Handle to the ring object used for non offload
132 typedef void *vxge_hal_ring_h;
135 * typedef vxge_hal_fifo_h - Handle to the fifo object used for non offload send
137 typedef void *vxge_hal_fifo_h;
141 * typedef vxge_hal_txdl_h - Handle to the transmit desriptor list object used
142 * for nonoffload send
144 typedef void *vxge_hal_txdl_h;
147 * typedef vxge_hal_rxd_h - Handle to the receive desriptor object used for
150 typedef void *vxge_hal_rxd_h;
153 * typedef vxge_hal_up_msg_h - Handle to the up message queue
155 typedef void *vxge_hal_up_msg_h;
158 * typedef vxge_hal_down_msg_h - Handle to the down message queue
160 typedef void *vxge_hal_down_msg_h;
164 * typedef vxge_hal_callback_h - Handle to callback function
166 typedef void *vxge_hal_callback_h;
169 * enum vxge_hal_message_type_e - Enumerated message types.
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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.
596 * Message types supported by the adapter and HAL Private messages.
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;
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
716 * This structure is used to store the client and hal data and pass as
717 * opaque handle in the messages.
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
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
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
733 } vxge_hal_opaque_handle_t;
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.
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
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);
766 #endif /* VXGE_HAL_TYPES_H */