/*-
* Copyright(c) 2002-2011 Exar Corp.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification are permitted provided the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* 3. Neither the name of the Exar Corporation nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
/*$FreeBSD$*/
#ifndef VXGE_HAL_TYPES_H
#define VXGE_HAL_TYPES_H
__EXTERN_BEGIN_DECLS
/*
* enum vxge_hal_reopen_e - Open, close, or reopen option.
* @VXGE_HAL_RESET_ONLY: Do not (de)allocate
* @VXGE_HAL_OPEN_NORMAL: Do (de)allocate
*
* Enumerates options used with ring, fifo, sq, srq, cqrq, dmq and umq
* open and close operations. The @VXGE_HAL_RESET_ONLY can be used when
* resetting the device; in this case there is actually no need to free
* and then again malloc the memory (including DMA-able memory).
*/
typedef enum vxge_hal_reopen_e {
VXGE_HAL_RESET_ONLY = 1,
VXGE_HAL_OPEN_NORMAL = 2
} vxge_hal_reopen_e;
/*
* struct vxge_hal_version_t - HAL version info
* @version_major: Major version
* @version_minor: Minor version
* @version_fix: version fix
* @version_build: Version Build
*
* Structure to store version info
*/
typedef struct vxge_hal_version_t {
u32 version_major;
u32 version_minor;
u32 version_fix;
u32 version_build;
} vxge_hal_version_t;
/*
* VXGE_HAL_ETH_ALEN
*/
#define VXGE_HAL_ETH_ALEN 6
/*
* typedef macaddr_t - Ethernet address type
*/
typedef u8 macaddr_t[VXGE_HAL_ETH_ALEN];
/*
* struct vxge_hal_ipv4 - IP version 4 address type
* @addr: IP address
*/
typedef struct vxge_hal_ipv4 {
u32 addr;
} vxge_hal_ipv4;
/*
* struct vxge_hal_ipv6 - IP version 6 address type
* @addr: IP address
*/
typedef struct vxge_hal_ipv6 {
u64 addr[2];
} vxge_hal_ipv6;
/*
* union vxge_hal_ipaddr_t - IP address type
* @ipv4: IP V4 address
* @ipv6: IP V6 address
*/
typedef union vxge_hal_ipaddr_t {
vxge_hal_ipv4 ipv4;
vxge_hal_ipv6 ipv6;
} vxge_hal_ipaddr_t;
/*
* typedef vxge_hal_obj_id_t - Object Id type used for Session,
* SRQ, CQRQ, STAG, LRO, SPDM etc objects
*/
typedef u64 vxge_hal_obj_id_t;
/* basic handles */
/*
* typedef vxge_hal_device_h - Handle to the adapter object
*/
typedef void *vxge_hal_device_h;
/*
* typedef vxge_hal_vpath_h - Handle to the virtual path object returned to LL
*/
typedef void *vxge_hal_vpath_h;
/*
* typedef vxge_hal_client_h - Handle passed by client for client's private data
*/
typedef void *vxge_hal_client_h;
/*
* typedef vxge_hal_ring_h - Handle to the ring object used for non offload
* receive
*/
typedef void *vxge_hal_ring_h;
/*
* typedef vxge_hal_fifo_h - Handle to the fifo object used for non offload send
*/
typedef void *vxge_hal_fifo_h;
/*
* typedef vxge_hal_txdl_h - Handle to the transmit desriptor list object used
* for nonoffload send
*/
typedef void *vxge_hal_txdl_h;
/*
* typedef vxge_hal_rxd_h - Handle to the receive desriptor object used for
* nonoffload receive
*/
typedef void *vxge_hal_rxd_h;
/*
* typedef vxge_hal_up_msg_h - Handle to the up message queue
*/
typedef void *vxge_hal_up_msg_h;
/*
* typedef vxge_hal_down_msg_h - Handle to the down message queue
*/
typedef void *vxge_hal_down_msg_h;
/*
* typedef vxge_hal_callback_h - Handle to callback function
*/
typedef void *vxge_hal_callback_h;
/*
* enum vxge_hal_message_type_e - Enumerated message types.
*
* @VXGE_HAL_MSG_TYPE_NCE_CREATE_REQ: The NCE Create Request
* message is used by the host to create an NCE on the adapter.
* @VXGE_HAL_MSG_TYPE_NCE_CREATE_RESP:The NCE Create Response
* message is sent in response to the NCE Create Request
* message from the host to indicate the status of the operation
* and return the NCE ID.
* @VXGE_HAL_MSG_TYPE_NCE_DELETE_REQ:The NCE Delete Request
* messag is sent by the host to delete an NCE after it is no
* longer required.
* @VXGE_HAL_MSG_TYPE_NCE_DELETE_RESP:The NCE Delete Response
* message is sent in response to the NCE Delete Request
* message from the host to indicate the status of the operation.
* @VXGE_HAL_MSG_TYPE_NCE_UPDATE_MAC_REQ:The NCE Update MAC Request
* message is used by the host to modify the MAC address for
* an NCE on the adapter.
* @VXGE_HAL_MSG_TYPE_NCE_UPDATE_MAC_RESP:The NCE Update MAC Response
* message is sent in response to the NCE Update MAC Request
* message from the host to indicate the status of the
* operation.
* @VXGE_HAL_MSG_TYPE_NCE_UPDATE_RCH_TIME_REQ:The NCE Update Rch Time
* Request message is used by the host to update the
* Reachability time for an NCE on the adapter.
* @VXGE_HAL_MSG_TYPE_NCE_UPDATE_RCH_TIME_RESP:The NCE Update
* Rch Time Response message is sent in response to the NCE
* Update Rch Time Request message from the host to indicate
* the status of updating the reachability time for the NCE.
* @VXGE_HAL_MSG_TYPE_NCE_QUERY_REQ:The NCE Query Request message
* is used by the host to query an NCE on the adapter.
* @VXGE_HAL_MSG_TYPE_NCE_QUERY_RESP:The NCE Query Response
* message is sent in response to the NCE Query Request message
* from the host to indicate the status of the operation.
* @VXGE_HAL_MSG_TYPE_NCE_RCH_TIME_EXCEEDED:This is an unsolicited message
* sent to the host by the adapter when the NCE Reach Time has
* been exceeded.
* @VXGE_HAL_MSG_TYPE_CQRQ_CREATE_REQ:The CQRQ Create Request
* message is used by the host to create a CQRQ on the adapter.
* @VXGE_HAL_MSG_TYPE_CQRQ_CREATE_RESP:The CQRQ Create Response
* message is sent in response to the CQRQ Create Request
* message from the host to indicate the status of the operation.
* @VXGE_HAL_MSG_TYPE_CQRQ_DELETE_REQ:The CQRQ Delete Request
* message is used by the host to destroy a CQRQ on the adapter.
* @VXGE_HAL_MSG_TYPE_CQRQ_DELETE_RESP:The CQRQ Delete Response
* message is sent in response to the CQRQ Delete Request
* message from the host to indicate the status of the operation.
* @VXGE_HAL_MSG_TYPE_CQRQ_MODIFY_REQ:The CQRQ Modify Request
* message is used by the host to modify fields for an
* CQRQ on the adapter. The adapter will make the following
* checks
* - The CQRQ ID is valid
* All other checks must be performed by the host software.
* @VXGE_HAL_MSG_TYPE_CQRQ_MODIFY_RESP:The CQRQ Modify Response
* message is sent in response to the CQRQ Modify Request
* message from the host to indicate the status of the operation.
* @VXGE_HAL_MSG_TYPE_CQRQ_QUERY_REQ:The CQRQ Query Request
* message is used by the host to query the properties of a CQRQ
* on the adapter
* @VXGE_HAL_MSG_TYPE_CQRQ_QUERY_RESP:The CQRQ Query Response
* message is sent in response to the CQRQ Query Request
* message from the host to indicate the status of the operation
* and return any CQRQ properties to the host.
* @VXGE_HAL_MSG_TYPE_CQRQ_ARM_REQ:The CQRQ Arm Request message
* is used by the host to change the armed state of a CQRQ on the
* adapter. The armed state determines how the adapter will
* interrupt the host when RDMA messages arrive.
* @VXGE_HAL_MSG_TYPE_CQRQ_ARM_RESP:The CQRQ Arm Response message
* is sent in response to the CQRQ Arm Request message from the
* host to indicate the status of arming the CQRQ
* @VXGE_HAL_MSG_TYPE_CQRQ_EVENT_NOTIF:The CQRQ Event Notification
* message is sent to host when the adapter encounters a
* problem when DMAing CQEs from host memory. There are three
* conditions, EOL, Low Threshold, Drained
* @VXGE_HAL_MSG_TYPE_CQRQ_FIRST_CQE_BW_NOTIF_REQ:The CQRQ
* First CQE BW Notification Request message is used by the
* host to notify the adapter after it has configured the first
* CQE block wrapper(s). It is required to pass the host address
* and number of bytes of the first CQE block wrapper in host
* memory.
* @VXGE_HAL_MSG_TYPE_CQRQ_FIRST_CQE_BW_NOTIF_RESP:The CQRQ
* First CQE BW Notification Response message is sent in
* response to the CQRQ First CQE BW Notification Request
* message from the host to acknowledge the notification from
* host and return the status of updating the CQRQ record with
* the address and bytes of the first CQE block wrapper.
* @VXGE_HAL_MSG_TYPE_SRQ_CREATE_REQ:The SRQ Create Request
* message is used by the host to create an SRQ on the adapter.
* @VXGE_HAL_MSG_TYPE_SRQ_CREATE_RESP:The SRQ Create Response
* message is sent in response to the SRQ Create Request
* message from the host to indicate the status of the operation
* and return the SRQ ID to the host.
* @VXGE_HAL_MSG_TYPE_SRQ_DELETE_REQ:The SRQ Delete Request
* message is used by the host to delete an SRQ on the adapter.
* @VXGE_HAL_MSG_TYPE_SRQ_DELETE_RESP:The SRQ Delete Response
* message is sent in response to the SRQ Delete Request
* message from the host to indicate the status of the operation.
* @VXGE_HAL_MSG_TYPE_SRQ_MODIFY_REQ:The SRQ Modify Request
* message is used by the host to modify an SRQ on the adapter.
* The host must send down all the fields to modify. To simplify
* the adapter firmware there will be no mask to modify individual
* fields.
* @VXGE_HAL_MSG_TYPE_SRQ_MODIFY_RESP:The SRQ Modify Response
* message is sent in response to the SRQ Modify Request
* message from the host to indicate the status of the operation.
* @VXGE_HAL_MSG_TYPE_SRQ_QUERY_REQ:The SRQ Query Request message
* is used by the host to query the properties of an SRQ on the
* adapter.
* @VXGE_HAL_MSG_TYPE_SRQ_QUERY_RESP:The SRQ Query Response
* message is sent in response to the SRQ Query Request message
* from the host to indicate the status of the operation and
* return any SRQ properties to the host
* @VXGE_HAL_MSG_TYPE_SRQ_ARM_REQ:The SRQ Arm Request message is
* sent to the adapter to arm or re-arm the SRQ limit.
* @VXGE_HAL_MSG_TYPE_SRQ_ARM_RESP:The SRQ Arm Response is sent
* to the host to acknowledge the SRQ Arm Request and indicate
* the status of arming or re-arming the SRQ limit.
* @VXGE_HAL_MSG_TYPE_SRQ_EVENT_NOTIF:The SRQ Event Notification
* iMSG is used to alert the host that the adapter has encountered
* one of the following conditions when DMAing WQEs from host
* memory - EOL (End of list of WQEs in host memory),Low Threshold
* (The adapter is running low on available WQEs),Drained (Adapter
* out of WQEs because of EOL condition or adapter use faster than
* DMA), SRQ Limit (The number of available WQEs on adapter + host
* less than SRQ limit and the SRQ limit is armed).
* @VXGE_HAL_MSG_TYPE_SRQ_FIRST_WQE_BW_NOTIF_REQ:The SRQ First
* WQE BW Notification Request is used to alert the adapter of
* the location of the first WQE block wrapper after initially
* creating the SRQ. It is required because the host cannot
* pre-post WQEs when creating the SRQ.
* @VXGE_HAL_MSG_TYPE_SRQ_FIRST_WQE_BW_NOTIF_RESP:The SRQ First
* WQE BW Notification Response message is sent in response to
* the SRQ First WQE BW Notification Request message from the
* host to indicate the status of the operation.
* @VXGE_HAL_MSG_TYPE_SRQ_WQE_BLOCKS_ADDED_NOTIF_REQ:The SRQ
* WQE Blocks Added Notification Request is used to alert the
* adapter that new WQEs have been posted in host memory. This is
* required in order for the adapter to support the concept of SRQ
* limit.
* @VXGE_HAL_MSG_TYPE_SRQ_WQE_BLOCKS_ADDED_NOTIF_RESP:The SRQ
* WQE Blocks Added Notification Response is sent by the adapter
* in response to the SRQ WQE Blocks Added Notification Request
* to acknowledge the notification from the host and to return any
* status in the event a problem occurred.
* @VXGE_HAL_MSG_TYPE_SRQ_RETURN_UNUSED_WQES_REQ:The SRQ Return WQEs
* Request message may be sent by the host to reclaim unused
* WQEs from the head of the WQE block wrapper list. Its purpose
* is to reclaim over-provisioned WQEs for an SRQ. The host may
* choose to reclaim WQEs from an SRQ at any time.
* @VXGE_HAL_MSG_TYPE_SRQ_RETURN_UNUSED_WQES_RESP:The SRQ Return WQEs
* is sent in reply to the SRQ Return WQEs Request message
* to reclaim unused WQEs from an over-provisioned SRQ.
* @VXGE_HAL_MSG_TYPE_STAG_ALLOCATE_NSMR_REQ:This downward message
* commands the adapter to create a new non-shared memory region
* (NSMR) in the invalid state. This message is used to implement
* the Allocate Non-Shared Memory Region memory management verb.
* @VXGE_HAL_MSG_TYPE_STAG_ALLOCATE_NSMR_RESP:This upward message
* communicates to the host the success or failure of the
* corresponding STAG Allocate NSMR Request message
* @VXGE_HAL_MSG_TYPE_STAG_ALLOCATE_MW_REQ:This downward message
* commands the adapter to allocate a new memory window (MW).
* This message is used to implement the Allocate Memory Window
* memory management verb.
* @VXGE_HAL_MSG_TYPE_STAG_ALLOCATE_MW_RESP:This upward message
* communicates to the host the success or failure of the
* corresponding STAG Allocate MW Request message.
* @VXGE_HAL_MSG_TYPE_STAG_DE_ALLOCATE_REQ:This downward message
* commands the adapter to deallocate the specified STag, freeing
* up any on-adapter resources
* @VXGE_HAL_MSG_TYPE_STAG_DE_ALLOCATE_RESP:This upward message
* communicates to the host the success or failure of the
* corresponding STAG De-allocate Request message.
* @VXGE_HAL_MSG_TYPE_STAG_REGISTER_NSMR_REQ:This downward message
* commands the adapter to register a non-shared memory region.
* This message is used to implement Register NSMR memory
* management verb Fast registration cannot be performed with
* this . It can only be done via the PostSQ TOWI.
* @VXGE_HAL_MSG_TYPE_STAG_REGISTER_NSMR_RESP:This upward message
* communicates to the host the success or failure of the
* corresponding STAG Register NSMR Request message.
* @VXGE_HAL_MSG_TYPE_STAG_RE_REGISTER_NSMR_REQ:This downward
* message commands the adapter to change the memory registration
* of an existing NSMR to create a new NSMR in the valid state.
* This message is used to implement the Reregister Non-Shared
* Memory Region memory management verb.
* @VXGE_HAL_MSG_TYPE_STAG_RE_REGISTER_NSMR_RESP:This upward message
* communicates to the host the success or failure of the
* corresponding STAG Re-register NSMR Request message
* @VXGE_HAL_MSG_TYPE_STAG_REGISTER_SMR_REQ:This downward message
* commands the adapter to create a shared memory region (SMR)
* based on an existing memory region, either shared(SMR) or
* non-shared(NSMR). This message is used to implement the
* Register Shared Memory Region verb.
* @VXGE_HAL_MSG_TYPE_STAG_REGISTER_SMR_RESP:This upward message
* communicates to the host the success or failure of the
* corresponding STAG Re-register NSMR Request message.
* @VXGE_HAL_MSG_TYPE_STAG_QUERY_REQ:This downward message commands
* the adapter to return the specifics of the specified STag.
* This message is used to implement the Query Memory Region
* memory management verb and the Query Memory Window memory
* management verb. Memory region and memory window querying
* could be handled entirely by the host software without any
* adapter involvement. The STAG Query Request and STAG
* Query Response messages allow the host to implement
* adapter-based STag querying.
* @VXGE_HAL_MSG_TYPE_STAG_QUERY_RESP:This upward message
* communicates to the host the specifics of the queried STag.
* The response message does not return the underlying the PBL.
* @VXGE_HAL_MSG_TYPE_STAG_VALID_LOCAL_TAG_REQ:This message
* commands the adapter to transition an invalid STag to the
* valid state without changing any of its other attributes.
* The Validate-STag-/Validate-STag-Response- messages
* allow a Neterion-proprietary ability to revalidate an invalid
* STag without changing any of its attributes or its PBL. This
* is expected to be useful in situations where an STag is
* invalidated and then revalidated with the same attributes
* including PBL. Using this message, rather than the more
* general Reregister NSMR, saves the overhead of transferring
* the PBL to the adapter.
* @VXGE_HAL_MSG_TYPE_STAG_VALID_LOCAL_TAG_RESP:This upward message
* communicates to the host the success of failure of the
* corresponding STAG Validate Local Tag Request message.
* @VXGE_HAL_MSG_TYPE_STAG_INVALID_LOCAL_TAG_REQ: The STAG
* Invalidate Local Tag Request message is used by the host to
* invalidate a local STAG. This message provides an alternative
* route for the normal TOWI based STAG Invalidation. It allows a
* kernel mode process to invalidate an STAG without writing
* a TOWI.
* @VXGE_HAL_MSG_TYPE_STAG_INVALID_LOCAL_TAG_RESP: This upward
* message communicates to the host the success or failure of the
* corresponding STAG Invalidate Local Tag Request message.
* @VXGE_HAL_MSG_TYPE_STAG_BIND_MW_REQ: This downward message commands
* the adapter to bind an existing (invalid) MW to an existing
* (valid) MR. This message provides an alternative to the TOWI
* based implementation allowing the path be used for MW binding
* @VXGE_HAL_MSG_TYPE_STAG_BIND_MW_RESP: This upward message
* communicates to the host the success or failure of the
* corresponding STAG Bind MW Request message.
* @VXGE_HAL_MSG_TYPE_STAG_FAST_REGISTER_NSMR_REQ: The STAG Fast
* Register NSMR Request provides an alternative way to fast
* register an NSMR instead of going to the TOWI path.
* @VXGE_HAL_MSG_TYPE_STAG_FAST_REGISTER_NSMR_RESP: The STag Fast
* Register NSMR Response message is sent to the host from
* the adapter in response to the original message. It
* indicates the status of fast registering the NSMR.
* @VXGE_HAL_MSG_TYPE_TCP_OPEN_REQ:The TCP Open Request message
* is sent by the host to open a TCP connection on the adapter.
* @VXGE_HAL_MSG_TYPE_TCP_OPEN_RESP:The TCP Open Response message
* is sent in response to a TCP Open Request message to indicate
* that the TCP session has been opened
* @VXGE_HAL_MSG_TYPE_TCP_PROMOTE_TO_IWARP_REQ:The TCP Promote to
* iWARP Request message is sent from the host to the adapter
* in order to migrate an existing bytestream session to iWARP
* mode.
* @VXGE_HAL_MSG_TYPE_TCP_PROMOTE_TO_IWARP_RESP:The TCP Promote to
* iWARP Response message is sent to the host to indicate the
* status of promoting an existing bytestream session to iWARP
* mode.
* @VXGE_HAL_MSG_TYPE_TCP_MODIFY_REQ:The TCP Modify Request message
* is sent by the host to modify the attributes associated with a
* bytestream or iWARP session.
* @VXGE_HAL_MSG_TYPE_TCP_MODIFY_RESP:The TCP Modify Response message
* is sent to the host in response to a TCP Modify Request message
* to indicate the status of changing the attributes associated
* with the bytestream or iWARP session.
* @VXGE_HAL_MSG_TYPE_TCP_DELETE_REQ:The TCP Delete Request
* message is sent by the host to delete a bytestream TCP session
* on the adapter.
* @VXGE_HAL_MSG_TYPE_TCP_DELETE_RESP:The TCP Delete Response
* message is sent in response to a TCP Delete Request message
* to indicate that the TCP session has been deleted.
* @VXGE_HAL_MSG_TYPE_TCP_ABORT_REQ: The TCP Abort Request message
* is used to abort a bytestream or iWARP session.
* @VXGE_HAL_MSG_TYPE_TCP_ABORT_RESP: The TCP Abort Response
* message is sent to the host from the adapter after aborting the
* bytestream or iWARP session.
* @VXGE_HAL_MSG_TYPE_TCP_ESTABLISHED: The TCP Established message is
* an un-solicited event sent from the adapter to the host when
* the SYN+ACK segment arrives (active opener) or the ACK segment
* (passive opener) arrives at the adapter.
* @VXGE_HAL_MSG_TYPE_TCP_FIN_RECEIVED: The TCP FIN Received message
* is an un-solicited event sent from the adapter to the host on
* session teardown. It indicates that the FIN segment has been
* received from the remote end and the session is now in TIME
* WAIT state.
* @VXGE_HAL_MSG_TYPE_TCP_TIME_WAIT_DONE: The TCP Time Wait Done message
* is sent from the adapter to the host to indicate when the TCP
* session leaves the TIME WAIT state.
* @VXGE_HAL_MSG_TYPE_TCP_UPDATE_RXWIN: This message is used for receive
* window updates, both for rx window flow control updates(updates
* to rcv_buf as data is consumed by the application on the host)
* and for maximum receive window size updates (when the receive
* buffer size changes on the host)
* @VXGE_HAL_MSG_TYPE_TCP_UPDATE_MSS: This is sent by the host to the
* adapter to update the MSS for the session.
* @VXGE_HAL_MSG_TYPE_TCP_UPDATE_IP_HEADER: The TCP Update IP Header
* is used to update the IP TOS and IP flow label in the IP header
* @VXGE_HAL_MSG_TYPE_TCP_UPDATE_KEEPALIVE: The TCP Update Keepalive
* message is sent from the host to the adapter to update the
* keep-alive timer for the session.
* @VXGE_HAL_MSG_TYPE_TCP_UPDATE_FAILURE: The TCP Update Failure
* message is sent to the host from the adapter in the event that
* one of the TCP update messages failed for the session. Normally
* these messages do not require a reply and therefore there is no
* response from the adapter. The TCP Update messages include:
* VXGE_HAL_MSG_TYPE_TCP_UPDATE_RXWIN
* VXGE_HAL_MSG_TYPE_TCP_UPDATE_MSS
* VXGE_HAL_MSG_TYPE_TCP_UPDATE_IP_HEADER
* VXGE_HAL_MSG_TYPE_TCP_UPDATE_KEEPALIVE
* @VXGE_HAL_MSG_TYPE_TCP_FIN_ACK_RECEIVED:The TCP FIN ACK Received
* message is an unsolicited message sent to the host from the
* adapter on received of the ACK segment acknowledging that the
* remote end has received the FIN. It is required for Sun's KPI
* interface.
* @VXGE_HAL_MSG_TYPE_TCP_RELINK_TO_NCE_REQ:The TCP Relink to NCE
* Request would be used to change the NCE entry associated
* with a particular bytestream or iWARP session. This message
* could be used to change the NCE of a group of sessions if a
* particular path went down and need to be replaced by a new path
* The host is responsible for tracking the mapping of sessions to
* NCEs so that when de-allocating an NCE it does not de-allocate
* on that is still in use by a particular session.
* @VXGE_HAL_MSG_TYPE_TCP_RELINK_TO_NCE_RESP:This message is sent in
* response to the TCP Relink to NCE Request to indicate the
* status of re-linking the TCP session to a particular NCE.
* @VXGE_HAL_MSG_TYPE_TCP_QP_LIMIT_EXCEEDED:The TCP QP Limit Exceeded
* Notification message is sent to the host when an iWARP
* session has reached its QP Limit and the QP limit was armed.
* @VXGE_HAL_MSG_TYPE_TCP_RDMA_TERMINATE_RECEIVED:The TCP RDMA Terminate
* Received message is an un-solicited event sent from the
* adapter to the host when an RDMA terminate message has been
* received from the remote end.
* @VXGE_HAL_MSG_TYPE_LRO_OPEN_REQ:The LRO Open Request message
* is sent by the host to open an LRO connection on the adapter.
* There is no PE context for an LRO session. The PE is involved
* for timer purposes and transferring messages to the RPE but it
* contains no session context.
* @VXGE_HAL_MSG_TYPE_LRO_OPEN_RESP:The LRO Open Response message
* is sent in response to a LRO Open Request message to
* indicate that the LRO session has been opened.
* @VXGE_HAL_MSG_TYPE_LRO_END_CLASSIF_REQ:The LRO End
* Classification Request is sent by the host before the LRO
* Delete Request to tell the adapter to stop steering Rx
* frames from that session into the LRO path. The host would
* later call LRO Delete Request . Separating these two calls
* allows enough time to pass so that frames already in the FB can
* be drained out, thereby avoiding the need for frame reversion.
* @VXGE_HAL_MSG_TYPE_LRO_END_CLASSIF_RESP:The LRO End
* Classification Response message is sent in response to a
* LRO End Classification Request message to indicate that
* classification has been stopped for the LRO session and the
* host can proceed with deleting the LRO session.
* @VXGE_HAL_MSG_TYPE_LRO_DELETE_REQ:The LRO Delete Request
* message is sent by the host to delete a LRO session on the
* adapter.It might be possible in the future to replace this
* message and the TCP Delete Request with a single common
* message since there doesn't seem to be any difference between
* the two anymore.
* @VXGE_HAL_MSG_TYPE_LRO_DELETE_RESP:The LRO Delete Response
* message is sent in response to a LRO Delete Request message
* to indicate that the LRO session has been deleted.
* @VXGE_HAL_MSG_TYPE_LRO_SESSION_CANDIDATE_NOTIF:This msg
* indicates to the host that the adapter's autoLRO feature has
* identified a candidate LRO session. No response from the host
* is required. (If the host did decide to act on this information
* from the adapter, the host would use the usual LRO Open Request
* ).
* @VXGE_HAL_MSG_TYPE_SPDM_OPEN_REQ:The SPDM Open Request message
* is sent by the host to open an SPDM connection on the adapter.
* There is no RPE or PE context for an SPDM session. The ONE is
* not involved in this type of classification.
* @VXGE_HAL_MSG_TYPE_SPDM_OPEN_RESP:The SPDM Open Response
* message is sent in response to a SPDM Open Request message
* to indicate the status of creating the SPDM session.
* @VXGE_HAL_MSG_TYPE_SPDM_DELETE_REQ:The SPDM Delete Request
* message is sent by the host to delete an SPDM session on the
* adapter. It might be possible in the future to replace this
* message and the LRO/TCP Delete Request with a single common
* message since there doesn't seem to be any difference between
* the two anymore.
* @VXGE_HAL_MSG_TYPE_SPDM_DELETE_RESP:The SPDM Delete Response
* message is sent in response to a SPDM Delete Request message
* to indicate that the SPDM session has been deleted.
* @VXGE_HAL_MSG_TYPE_SESSION_EVENT_NOTIF:The Session Event
* Notification message is an unsolicited message from the
* adapter used to inform the host about an unexpected condition
* on a bytestream or iWARP session.
* @VXGE_HAL_MSG_TYPE_SESSION_QUERY_REQ:The Session Query Request
* message is sent by the host to query the attributes of an
* existing offloaded session. This message may be used to query
* the attributes of an SPDM, LRO, bytestream or iWARP session.
* Initially this will be a single message used for all purposes.
* In the future this may be split up into multiple messages
* allowing the user to query the pecific context for an SPDM,
* LRO, iWARP, or bytestream session.
* @VXGE_HAL_MSG_TYPE_SESSION_QUERY_RESP:The Session Query Response
* message is sent in response to a Session Query Request
* message to return the attributes associated with the specified
* session
* @VXGE_HAL_MSG_TYPE_SESSION_RETURN_IN_PROG_WQES: This message is
* generated by the adapter during deletion of a session to return
* any WQEs that may be in the in-progress list for the session.If
* a WQE is in the in-progress list it is owned by the session and
* cannot be returned to the head of WQE list for an SRQ because
* of ordering issues. Therefore, it must be returned to the host
* at which point the host may choose to destroy the resource or
* simply re-post the WQE for re-use.
* @VXGE_HAL_MSG_TYPE_SESSION_FRAME_WRITE:The Frame Write message is
* generated by the adapter in order to send certain frames to the
* host via the path instead of the normal path. Frames will be
* sent to the host under the following conditions:
* 1) mis-aligned frames that the adapter cannot place
* 2) during debugging to look at the contents of the frame
* In addition to this,a RDMA terminate message will also be sent
* via a message but in this case it will be sent in a TCP RDMA
* Terminate Received message. Frames arriving in the will
* not have markers stripped. Instead the host will be responsible
* for stripping markers and taking appropriate action on the
* received frame.
* @VXGE_HAL_MSG_TYPE_SQ_CREATE_REQ: This is HAL private message for.
* SQ create. Never used.
* @VXGE_HAL_MSG_TYPE_SQ_CREATE_RESP: This is HAL private message
* for SQ create response. This is reported to clients by HAL.
* @VXGE_HAL_MSG_TYPE_SQ_DELETE_REQ: This is HAL private message for.
* SQ delete. Never used.
* @VXGE_HAL_MSG_TYPE_SQ_DELETE_RESP:This is HAL private message
* for SQ delete response. This is reported to clients by HAL.
*
* Message types supported by the adapter and HAL Private messages.
*/
typedef enum vxge_hal_message_type_e {
VXGE_HAL_MSG_TYPE_NCE_CREATE_REQ = 1,
VXGE_HAL_MSG_TYPE_NCE_CREATE_RESP = 2,
VXGE_HAL_MSG_TYPE_NCE_DELETE_REQ = 3,
VXGE_HAL_MSG_TYPE_NCE_DELETE_RESP = 4,
VXGE_HAL_MSG_TYPE_NCE_UPDATE_MAC_REQ = 5,
VXGE_HAL_MSG_TYPE_NCE_UPDATE_MAC_RESP = 6,
VXGE_HAL_MSG_TYPE_NCE_UPDATE_RCH_TIME_REQ = 7,
VXGE_HAL_MSG_TYPE_NCE_UPDATE_RCH_TIME_RESP = 8,
VXGE_HAL_MSG_TYPE_NCE_QUERY_REQ = 9,
VXGE_HAL_MSG_TYPE_NCE_QUERY_RESP = 10,
VXGE_HAL_MSG_TYPE_NCE_RCH_TIME_EXCEEDED = 86,
VXGE_HAL_MSG_TYPE_CQRQ_CREATE_REQ = 11,
VXGE_HAL_MSG_TYPE_CQRQ_CREATE_RESP = 12,
VXGE_HAL_MSG_TYPE_CQRQ_DELETE_REQ = 13,
VXGE_HAL_MSG_TYPE_CQRQ_DELETE_RESP = 14,
VXGE_HAL_MSG_TYPE_CQRQ_MODIFY_REQ = 16,
VXGE_HAL_MSG_TYPE_CQRQ_MODIFY_RESP = 17,
VXGE_HAL_MSG_TYPE_CQRQ_QUERY_REQ = 18,
VXGE_HAL_MSG_TYPE_CQRQ_QUERY_RESP = 19,
VXGE_HAL_MSG_TYPE_CQRQ_ARM_REQ = 20,
VXGE_HAL_MSG_TYPE_CQRQ_ARM_RESP = 21,
VXGE_HAL_MSG_TYPE_CQRQ_EVENT_NOTIF = 22,
VXGE_HAL_MSG_TYPE_CQRQ_FIRST_CQE_BW_NOTIF_REQ = 23,
VXGE_HAL_MSG_TYPE_CQRQ_FIRST_CQE_BW_NOTIF_RESP = 24,
VXGE_HAL_MSG_TYPE_SRQ_CREATE_REQ = 27,
VXGE_HAL_MSG_TYPE_SRQ_CREATE_RESP = 28,
VXGE_HAL_MSG_TYPE_SRQ_DELETE_REQ = 29,
VXGE_HAL_MSG_TYPE_SRQ_DELETE_RESP = 30,
VXGE_HAL_MSG_TYPE_SRQ_MODIFY_REQ = 31,
VXGE_HAL_MSG_TYPE_SRQ_MODIFY_RESP = 32,
VXGE_HAL_MSG_TYPE_SRQ_QUERY_REQ = 33,
VXGE_HAL_MSG_TYPE_SRQ_QUERY_RESP = 34,
VXGE_HAL_MSG_TYPE_SRQ_ARM_REQ = 35,
VXGE_HAL_MSG_TYPE_SRQ_ARM_RESP = 36,
VXGE_HAL_MSG_TYPE_SRQ_EVENT_NOTIF = 37,
VXGE_HAL_MSG_TYPE_SRQ_FIRST_WQE_BW_NOTIF_REQ = 38,
VXGE_HAL_MSG_TYPE_SRQ_FIRST_WQE_BW_NOTIF_RESP = 39,
VXGE_HAL_MSG_TYPE_SRQ_WQE_BLOCKS_ADDED_NOTIF_REQ = 40,
VXGE_HAL_MSG_TYPE_SRQ_WQE_BLOCKS_ADDED_NOTIF_RESP = 41,
VXGE_HAL_MSG_TYPE_SRQ_RETURN_UNUSED_WQES_REQ = 96,
VXGE_HAL_MSG_TYPE_SRQ_RETURN_UNUSED_WQES_RESP = 42,
VXGE_HAL_MSG_TYPE_STAG_ALLOCATE_NSMR_REQ = 43,
VXGE_HAL_MSG_TYPE_STAG_ALLOCATE_NSMR_RESP = 44,
VXGE_HAL_MSG_TYPE_STAG_ALLOCATE_MW_REQ = 45,
VXGE_HAL_MSG_TYPE_STAG_ALLOCATE_MW_RESP = 46,
VXGE_HAL_MSG_TYPE_STAG_DE_ALLOCATE_REQ = 47,
VXGE_HAL_MSG_TYPE_STAG_DE_ALLOCATE_RESP = 48,
VXGE_HAL_MSG_TYPE_STAG_REGISTER_NSMR_REQ = 49,
VXGE_HAL_MSG_TYPE_STAG_REGISTER_NSMR_RESP = 50,
VXGE_HAL_MSG_TYPE_STAG_RE_REGISTER_NSMR_REQ = 51,
VXGE_HAL_MSG_TYPE_STAG_RE_REGISTER_NSMR_RESP = 52,
VXGE_HAL_MSG_TYPE_STAG_REGISTER_SMR_REQ = 53,
VXGE_HAL_MSG_TYPE_STAG_REGISTER_SMR_RESP = 54,
VXGE_HAL_MSG_TYPE_STAG_QUERY_REQ = 55,
VXGE_HAL_MSG_TYPE_STAG_QUERY_RESP = 56,
VXGE_HAL_MSG_TYPE_STAG_VALID_LOCAL_TAG_REQ = 57,
VXGE_HAL_MSG_TYPE_STAG_VALID_LOCAL_TAG_RESP = 58,
VXGE_HAL_MSG_TYPE_STAG_INVALID_LOCAL_TAG_REQ = 87,
VXGE_HAL_MSG_TYPE_STAG_INVALID_LOCAL_TAG_RESP = 88,
VXGE_HAL_MSG_TYPE_STAG_BIND_MW_REQ = 89,
VXGE_HAL_MSG_TYPE_STAG_BIND_MW_RESP = 90,
VXGE_HAL_MSG_TYPE_STAG_FAST_REGISTER_NSMR_REQ = 91,
VXGE_HAL_MSG_TYPE_STAG_FAST_REGISTER_NSMR_RESP = 92,
VXGE_HAL_MSG_TYPE_TCP_OPEN_REQ = 59,
VXGE_HAL_MSG_TYPE_TCP_OPEN_RESP = 60,
VXGE_HAL_MSG_TYPE_TCP_PROMOTE_TO_IWARP_REQ = 61,
VXGE_HAL_MSG_TYPE_TCP_PROMOTE_TO_IWARP_RESP = 62,
VXGE_HAL_MSG_TYPE_TCP_MODIFY_REQ = 98,
VXGE_HAL_MSG_TYPE_TCP_MODIFY_RESP = 99,
VXGE_HAL_MSG_TYPE_TCP_DELETE_REQ = 63,
VXGE_HAL_MSG_TYPE_TCP_DELETE_RESP = 64,
VXGE_HAL_MSG_TYPE_TCP_ABORT_REQ = 65,
VXGE_HAL_MSG_TYPE_TCP_ABORT_RESP = 66,
VXGE_HAL_MSG_TYPE_TCP_ESTABLISHED = 78,
VXGE_HAL_MSG_TYPE_TCP_FIN_RECEIVED = 79,
VXGE_HAL_MSG_TYPE_TCP_TIME_WAIT_DONE = 80,
VXGE_HAL_MSG_TYPE_TCP_UPDATE_RXWIN = 81,
VXGE_HAL_MSG_TYPE_TCP_UPDATE_MSS = 82,
VXGE_HAL_MSG_TYPE_TCP_UPDATE_IP_HEADER = 83,
VXGE_HAL_MSG_TYPE_TCP_UPDATE_KEEPALIVE = 84,
VXGE_HAL_MSG_TYPE_TCP_UPDATE_FAILURE = 85,
VXGE_HAL_MSG_TYPE_TCP_FIN_ACK_RECEIVED = 87,
VXGE_HAL_MSG_TYPE_TCP_RELINK_TO_NCE_REQ = 88,
VXGE_HAL_MSG_TYPE_TCP_RELINK_TO_NCE_RESP = 89,
VXGE_HAL_MSG_TYPE_TCP_QP_LIMIT_EXCEEDED = 100,
VXGE_HAL_MSG_TYPE_TCP_RDMA_TERMINATE_RECEIVED = 101,
VXGE_HAL_MSG_TYPE_LRO_OPEN_REQ = 67,
VXGE_HAL_MSG_TYPE_LRO_OPEN_RESP = 68,
VXGE_HAL_MSG_TYPE_LRO_END_CLASSIF_REQ = 69,
VXGE_HAL_MSG_TYPE_LRO_END_CLASSIF_RESP = 70,
VXGE_HAL_MSG_TYPE_LRO_DELETE_REQ = 71,
VXGE_HAL_MSG_TYPE_LRO_DELETE_RESP = 72,
VXGE_HAL_MSG_TYPE_LRO_SESSION_CANDIDATE_NOTIF = 73,
VXGE_HAL_MSG_TYPE_SPDM_OPEN_REQ = 74,
VXGE_HAL_MSG_TYPE_SPDM_OPEN_RESP = 75,
VXGE_HAL_MSG_TYPE_SPDM_DELETE_REQ = 76,
VXGE_HAL_MSG_TYPE_SPDM_DELETE_RESP = 77,
VXGE_HAL_MSG_TYPE_SESSION_EVENT_NOTIF = 102,
VXGE_HAL_MSG_TYPE_SESSION_QUERY_REQ = 103,
VXGE_HAL_MSG_TYPE_SESSION_QUERY_RESP = 104,
VXGE_HAL_MSG_TYPE_SESSION_RETURN_IN_PROG_WQES = 97,
VXGE_HAL_MSG_TYPE_SESSION_FRAME_WRITE = 105,
/* The following are private for HAL */
VXGE_HAL_MSG_TYPE_SQ_CREATE_REQ = 65537,
VXGE_HAL_MSG_TYPE_SQ_CREATE_RESP = 65538,
VXGE_HAL_MSG_TYPE_SQ_DELETE_REQ = 65539,
VXGE_HAL_MSG_TYPE_SQ_DELETE_RESP = 65540
} vxge_hal_message_type_e;
/*
* struct vxge_hal_opaque_handle_t - Opaque handle used by the hal and clients
* to save their contexts
* @vpath_handle: Virtual path handle
* @hal_priv: Private data which HAL assigns
* @client_priv: Client assigned private data
*
* This structure is used to store the client and hal data and pass as
* opaque handle in the messages.
*/
typedef struct vxge_hal_opaque_handle_t {
vxge_hal_vpath_h vpath_handle;
#define VXGE_HAL_OPAQUE_HANDLE_GET_VPATH_HANDLE(op) ((op)->vpath_handle)
#define VXGE_HAL_OPAQUE_HANDLE_VPATH_HANDLE(op, vrh) (op)->vpath_handle = vrh
u64 hal_priv;
#define VXGE_HAL_OPAQUE_HANDLE_GET_HAL_PRIV(op) ((op)->hal_priv)
#define VXGE_HAL_OPAQUE_HANDLE_HAL_PRIV(op, priv) (op)->hal_priv = (u64)priv
u64 client_priv;
#define VXGE_HAL_OPAQUE_HANDLE_GET_CLIENT_PRIV(op) ((op)->client_priv)
#define VXGE_HAL_OPAQUE_HANDLE_CLIENT_PRIV(op, priv) \
(op)->client_priv = (u64)priv
} vxge_hal_opaque_handle_t;
/*
* vxge_hal_vpath_callback_f - Callback to receive up messages.
* @client_handle: handle passed by client in attach or open function
* @msgh: Message handle.
* @msg_type: Type of message
* @obj_id: Object Id of object to which message belongs
* @result: Result code
* @opaque_handle: Opaque handle passed when the request was made.
*
* Callback function registered when opening vpath to receive the messages
* This callback function passed to vxge_hal_vpath_open and
* vxge_hal_vpath_attach routine to get replys to all asynchronous functions.
* The format of the reply is a message along with the parameters that are
* common fro all replys. The message handle passed to this callback is
* opaque for the iWARP/RDMA module and the information from the message can
* be got by calling appropriate get function depending on the message type
* passed as one of the parameter to the callback. The message types that
* are to be passed to the callback are the ones that are responses and
* notifications
*/
typedef vxge_hal_status_e(*vxge_hal_vpath_callback_f) (
vxge_hal_client_h client_handle,
vxge_hal_up_msg_h msgh,
vxge_hal_message_type_e msg_type,
vxge_hal_obj_id_t obj_id,
vxge_hal_status_e result,
vxge_hal_opaque_handle_t *opaque_handle);
__EXTERN_END_DECLS
#endif /* VXGE_HAL_TYPES_H */