vxgehal-types.h revision 259065
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: releng/10.0/sys/dev/vxge/include/vxgehal-types.h 221167 2011-04-28 14:33:15Z gnn $*/ 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 */ 48typedef 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 */ 62typedef 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 */ 77typedef u8 macaddr_t[VXGE_HAL_ETH_ALEN]; 78 79/* 80 * struct vxge_hal_ipv4 - IP version 4 address type 81 * @addr: IP address 82 */ 83typedef 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 */ 91typedef 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 */ 100typedef 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 */ 109typedef u64 vxge_hal_obj_id_t; 110 111/* basic handles */ 112 113/* 114 * typedef vxge_hal_device_h - Handle to the adapter object 115 */ 116typedef void *vxge_hal_device_h; 117 118/* 119 * typedef vxge_hal_vpath_h - Handle to the virtual path object returned to LL 120 */ 121typedef void *vxge_hal_vpath_h; 122 123/* 124 * typedef vxge_hal_client_h - Handle passed by client for client's private data 125 */ 126typedef 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 */ 132typedef void *vxge_hal_ring_h; 133 134/* 135 * typedef vxge_hal_fifo_h - Handle to the fifo object used for non offload send 136 */ 137typedef 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 */ 144typedef 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 */ 150typedef void *vxge_hal_rxd_h; 151 152/* 153 * typedef vxge_hal_up_msg_h - Handle to the up message queue 154 */ 155typedef void *vxge_hal_up_msg_h; 156 157/* 158 * typedef vxge_hal_down_msg_h - Handle to the down message queue 159 */ 160typedef void *vxge_hal_down_msg_h; 161 162 163/* 164 * typedef vxge_hal_callback_h - Handle to callback function 165 */ 166typedef 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 */ 598typedef 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 */ 719typedef 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 */ 755typedef 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