root/usr/src/uts/common/io/bnxe/577xx/drivers/common/lm/fw/rdma_constants.h
/*
********************************************************************************
* $Id: //servers/main/nx2/577xx/hsi/microcode/rdma/headers/rdma_constants.h#39 $ 
********************************************************************************
* $Name:  $ 
********************************************************************************
* $Date: 2007/11/13 $ 
********************************************************************************
* $Revision: #39 $ 
********************************************************************************
* $Author: yaronu $ 
********************************************************************************
* $Log: rdma_constants.h,v $
* Revision 1.37  2007/06/13 11:46:43  yanivr
* Add support for RDMA classifier in favor of the Eth
*
* Revision 1.36  2007/05/31 14:38:45  yanivr
* Enhance PCS request/PCS response scheme
*
* Revision 1.35  2007/05/30 13:35:11  yanivr
* Enable L5cm Passive Connection Establishment
*
* Revision 1.34  2007/04/29 14:58:29  yanivr
* Add RDMA_ASYNC_EVENT_PCS_RESPONSE1_SUCCEEDED, RDMA_ASYNC_EVENT_PCS_RESPONSE2_SUCCEEDED, RDMA_ASYNC_EVENT_PCS_RESPONSE3_SUCCEEDED
*
* Revision 1.33  2007/04/29 12:57:26  yanivr
* Add RDMA_RAMROD_CMD_ID_CLOSE_PHY_PORT defines
*
* Revision 1.32  2007/04/18 18:57:45  yanivr
* Add support for L5cm passive side connection establishment
*
* Revision 1.31  2007/02/22 18:19:11  yanivr
* Move common connection establishments ramrods to L5cm
*
* Revision 1.30  2006/09/19 06:14:39  edreayc
* Insert RDMA Error reporting & Invalidation process
*
* Revision 1.29  2006/08/28 06:32:40  yanivr
* Add RDMA_ASYNC_EVENT_UPDATE_ULP_SUCCEEDED event
*
* Revision 1.28  2006/08/27 15:43:24  yaronu
* - removed old include of rdma_eqe struct from rdma_constants
* - removed old includes to rdma event report files
* - added include to rdma event report structs where needed
*
* Revision 1.27  2006/08/27 15:18:26  yuvalk
* Rdma, Error reporting, Rx
*
* Revision 1.26  2006/08/22 15:38:05  yuvalk
* Rdma - Ustorm, Tstorm Error reporting fixes
*
* Revision 1.25  2006/08/21 15:39:12  yuvalk
* Rdma - added completion code defines for completion errors
*
* Revision 1.24  2006/08/20 17:00:35  yuvalk
* Rdma, Ustorm, Tstorm, Error reporting
*
* Revision 1.23  2006/08/17 14:39:25  yanivr
* Resupport ramrod RDMA_RxLlpSlowPath.cpp
*
* Revision 1.22  2006/08/13 08:34:49  yaronu
* Added some event code constants
*
* Revision 1.21  2006/07/30 08:42:04  yaronu
* renamed SEND_MPA SP command ID to LLP_SEND
*
* Revision 1.20  2006/07/12 09:51:14  yaronu
* Added  new slow path command IDs and event codes
*
* Revision 1.19  2006/06/08 06:27:44  yuvalk
* Rdma -
* Tstorm - some minor changes to better suite ASM code writting
* everest.fmt - added Rdma Xstorm slowPath handler
* microcode.vcproj - marked ASM files as excluded from build
*
* Revision 1.18  2006/05/16 16:25:51  yaronu
* - modified rdma slow path handlers for easier translation into ASM
* - add function execution counter in rdma driversim
*
* Revision 1.17  2006/05/15 11:44:21  yuvalk
* Rdma - changed "rh" prefix in all rdma hsi structs to be "rdma"
*
* Revision 1.16  2006/05/11 16:05:06  yaronu
* - extended Tstorm slow path handler
* - added new Ustorm and Cstorm slow path handlers
* - modified output message argument of Cstorm event report handler
*
* Revision 1.15  2006/05/09 09:38:47  yaronu
* updates to event report handlers and driversim after debugging events with terminate messages
*
* Revision 1.14  2006/05/02 08:07:06  ofirh
* HSI changes before microcode and driver entering lab
*
* Revision 1.13  2006/04/27 16:19:16  yaronu
* - updated driversim event handling
* - created event report handler in Ustorm
* - moved MAX_RAMROD_PER_PORT to hsi
*
* Revision 1.12  2006/04/25 07:59:45  yaronu
* added completion event type
*
* Revision 1.11  2006/04/24 13:34:53  yaronu
* event reporting handler updates
*
* Revision 1.10  2006/04/23 10:02:26  ofirh
* tree change - phase 3
*
* Revision 1.9  2006/04/16 13:00:04  yaronu
* added rdma event processing constants
*
* Revision 1.8  2006/04/05 08:25:37  yaronu
* added handler for rdma error reporting
*
* Revision 1.7  2006/03/21 13:53:31  yuvalk
* Rdma -
* uRdmaSend.cpp - Send Received flow implemented and partially tested
* uRdmaWriteReadResp - fixed bug when ddpLen == pbeSize
*
* Revision 1.6  2006/03/09 08:32:08  vitalyo
* Started implementing data integrity mechanism
*
* Revision 1.5  2006/03/06 10:28:57  vitalyo
* Adding functionality to test engine module
* Adding modify to rts implementation
*
* Revision 1.4  2006/02/22 09:27:59  yuvalk
* Rdma-
* RdmaCommon.cpp - StagLoad - first run on code. some bug fixes
* uRdmaWriteReadResp.cpp - some minor changes
*
* Revision 1.3  2006/02/20 09:41:06  yuvalk
* Rdma - first run on uRdmaWriteReadResp.cpp
* bring up of UstormRdmaSurroundingsRuntime.xml
* RamAccessHeader - fixed bug in RAM_ADDR macro
*
* Revision 1.2  2006/02/13 08:47:18  yuvalk
* Rdma -
* uRdmaWriteReadResp.cpp
* - calling loadPbl function, using 6 PBEs
* - change in cache coherency entry structure
*
* Revision 1.1  2006/02/08 10:39:29  shmulikr
* Microcode Hsi include files
* 
********************************************************************************
*/
#ifndef __RDMA_CONSTANTS_H_
#define __RDMA_CONSTANTS_H_

/**
* This file defines HSI constants for the RDMA flows
*/

#include "microcode_constants.h"

/* SQ WQE operations */
#define EVEREST_SQ_WQE_OP_INTERNAL                                      (1 << 7)
#define EVEREST_SQ_WQE_OP_INLINE                                        (1 << 6)

#define EVEREST_SQ_WQE_OP_WRITE                                         (0)
#define EVEREST_SQ_WQE_OP_WRITE_INLINE                          (EVEREST_SQ_WQE_OP_WRITE | EVEREST_SQ_WQE_OP_INLINE)
#define EVEREST_SQ_WQE_OP_READ                                          (1)
#define EVEREST_SQ_WQE_OP_READ_INVAL_LOCAL                      (EVEREST_SQ_WQE_OP_READ | EVEREST_SQ_WQE_OP_INTERNAL)
#define EVEREST_SQ_WQE_OP_READ_RESP                                     (2) /* not a WQE opcode -  reserved for network opcode only */
#define EVEREST_SQ_WQE_OP_SEND                                          (3)
#define EVEREST_SQ_WQE_OP_SEND_INVAL                            (4)
#define EVEREST_SQ_WQE_OP_SEND_SE                                       (5)
#define EVEREST_SQ_WQE_OP_SEND_SE_INVAL                         (6)
#define EVEREST_SQ_WQE_OP_SEND_INLINE                           (EVEREST_SQ_WQE_OP_SEND                         | EVEREST_SQ_WQE_OP_INLINE)
#define EVEREST_SQ_WQE_OP_SEND_INVAL_INLINE                     (EVEREST_SQ_WQE_OP_SEND_INVAL           | EVEREST_SQ_WQE_OP_INLINE)
#define EVEREST_SQ_WQE_OP_SEND_SE_INLINE                        (EVEREST_SQ_WQE_OP_SEND_SE                      | EVEREST_SQ_WQE_OP_INLINE)
#define EVEREST_SQ_WQE_OP_SEND_SE_INVAL_INLINE          (EVEREST_SQ_WQE_OP_SEND_SE_INVAL        | EVEREST_SQ_WQE_OP_INLINE)
#define EVEREST_SQ_WQE_OP_TERMINATE                                     (7)

#define EVEREST_SQ_WQE_OP_BIND_MEM_WINDOW                       ((8)    | EVEREST_SQ_WQE_OP_INTERNAL) 
#define EVEREST_SQ_WQE_OP_FAST_MEM_REGISTER                     ((9)    | EVEREST_SQ_WQE_OP_INTERNAL)
#define EVEREST_SQ_WQE_OP_INVAL_LOCAL                           ((10)   | EVEREST_SQ_WQE_OP_INTERNAL)
#define EVEREST_SQ_WQE_INVALID_OPCODE                           (0xFF)

/* DDP and RDMAP versions */
#define RDMA_RDMAP_DDP_VERSION_RDMAC    (0)             /* RDMAP and DDP versions must have the same value hence use the same "define" */
#define RDMA_RDMAP_DDP_VERSION_IETF             (1)             /* RDMAP and DDP versions must have the same value hence use the same "define" */

/* MPA Markers */
#define RDMA_MPA_USE_MARKERS_FLAG (0x8000)

/* CQE constants */
#define RDMA_CQE_TYPE_NON_AGGR  (1)
#define RDMA_CQE_STATUS_OK              (0)

/* RQ WQE constants */
#define RDMA_RQ_WQE_SHIFT               (6)
#define RDMA_RQ_WQE_SGL_SIZE_SMALL              (2) /* number of SGES in 64 byte WQE */
#define RDMA_RQ_WQE_SGL_SIZE_BIG                (6) /* number of SGES in 128 byte WQE */

/* Slow path commands */
#define RDMA_RAMROD_CMD_ID_SEND_MPA                                             (14)
#define RDMA_RAMROD_CMD_ID_UPDATE_ULP                                   (15)
#define RDMA_RAMROD_CMD_ID_CLOSE_PHY_PORT                               (16)

/* Terminate message constants */
#define RDMA_MAX_TERMINATE_MESSAGE_SIZE (52) // in bytes


#define RDMA_FWD_MODE_L2        (0)
#define RDMA_FWD_MODE_RDMA      (1)
/* Event reporting constants */

// number of elements in the EQ that are reserved for slow path completions, catastrophic error
// in case the EQ is (almost) full, and an end of page element
#define RESERVED_EQ_ELEMENTS (MAX_RAMRODS_PER_PORT + 2)

// Event types
#define RDMA_EVENT_TYPE_ASYNC                                   (0)
#define RDMA_EVENT_TYPE_ERROR                                   (1)
#define RDMA_EVENT_TYPE_TERMINATE_MESSAGE               (2)
#define RDMA_EVENT_TYPE_SLOW_PATH_COMPLETION    (3)

// Source types
#define RDMA_SOURCE_TYPE_RNIC   (0)
#define RDMA_SOURCE_TYPE_QP             (1)
#define RDMA_SOURCE_TYPE_CQ             (2)
#define RDMA_SOURCE_TYPE_SRQ    (3)

// Queue types
#define RDMA_QUEUE_TYPE_NONE    (0)
#define RDMA_QUEUE_TYPE_SQ              (1)
#define RDMA_QUEUE_TYPE_RQ              (2)
#define RDMA_QUEUE_TYPE_IRQ             (3)
#define RDMA_QUEUE_TYPE_SRQ             (4)

// Asynchronous event types - from Verbs
#define RDMA_ASYNC_EVENT_LLP_CLOSE_COMPLETE                                             (0)
#define RDMA_ASYNC_EVENT_TERMINATE_MESSAGE_RECEIVED                             (1)
#define RDMA_ASYNC_EVENT_LLP_CONNECTION_RESET                                   (2)
#define RDMA_ASYNC_EVENT_LLP_CONNECTION_LOST                                    (3)
#define RDMA_ASYNC_EVENT_LLP_INTEGRITY_INVALID_SEGMENT_SIZE             (4)
#define RDMA_ASYNC_EVENT_LLP_INTEGRITY_INVALID_CRC                              (5)
#define RDMA_ASYNC_EVENT_LLP_INTEGRITY_BAD_FPDU                                 (6)
#define RDMA_ASYNC_EVENT_REMOTE_INVALID_DDP_VERSION                             (7)
#define RDMA_ASYNC_EVENT_REMOTE_INVALID_RDMA_VERSION                    (8)
#define RDMA_ASYNC_EVENT_REMOTE_UNEXPECTED_OPCODE                               (9)
#define RDMA_ASYNC_EVENT_REMOTE_INVALID_DDP_QUEUE_NUMBER                (10)
#define RDMA_ASYNC_EVENT_REMOTE_READ_REQUEST_DISABLED                   (11)
#define RDMA_ASYNC_EVENT_REMOTE_WRITE_OR_READ_RESPONSE_DISABLED (12)
#define RDMA_ASYNC_EVENT_REMOTE_INVALID_READ_REQUEST                    (13)
#define RDMA_ASYNC_EVENT_REMOTE_NO_L_BIT                                                (14)
#define RDMA_ASYNC_EVENT_PROTECTION_INVALID_STAG                                (15)
#define RDMA_ASYNC_EVENT_PROTECTION_TAGGED_BOUNDS_VIOLATION             (16)
#define RDMA_ASYNC_EVENT_PROTECTION_TAGGED_ACCESS_VIOLATION             (17)
#define RDMA_ASYNC_EVENT_PROTECTION_TAGGED_INVALID_PD                   (18)
#define RDMA_ASYNC_EVENT_PROTECTION_WRAP_ERROR                                  (19)
#define RDMA_ASYNC_EVENT_BAD_CLOSE                                                              (20)
#define RDMA_ASYNC_EVENT_BAD_LLP_CLOSE                                                  (21)
#define RDMA_ASYNC_EVENT_RQ_PROTECTION_INVALID_MSN_RANGE                (22)
#define RDMA_ASYNC_EVENT_RQ_PROTECTION_INVALID_MSN_GAP                  (23)
#define RDMA_ASYNC_EVENT_IRQ_PROTECTION_TOO_MANY_READ_REQUEST   (24)
#define RDMA_ASYNC_EVENT_IRQ_PROTECTION_INVALID_MSN_GAP                 (25)
#define RDMA_ASYNC_EVENT_IRQ_PROTECTION_INVALID_MSN_RANGE               (26)
#define RDMA_ASYNC_EVENT_IRQ_PROTECTION_INVALID_STAG                    (27)
#define RDMA_ASYNC_EVENT_IRQ_PROTECTION_TAGGED_BOUNDS_VIOLATION (28)
#define RDMA_ASYNC_EVENT_IRQ_PROTECTION_TAGGED_ACCESS_VIOLATION (29)
#define RDMA_ASYNC_EVENT_IRQ_PROTECTION_TAGGED_INVALID_PD               (30)
#define RDMA_ASYNC_EVENT_IRQ_PROTECTION_WRAP_ERROR                              (31)
#define RDMA_ASYNC_EVENT_SQ_COMPLETION_CQ_OVERFLOW                              (32)
#define RDMA_ASYNC_EVENT_RQ_COMPLETION_CQ_OPERATION_ERROR               (33)
#define RDMA_ASYNC_EVENT_SRQ_ERROR_ON_QP                                                (34)
#define RDMA_ASYNC_EVENT_LOCAL_QP_CATASTROPHIC_ERROR                    (35)
#define RDMA_ASYNC_EVENT_CQ_OVERFLOW                                                    (36)
#define RDMA_ASYNC_EVENT_CQ_OPERATION_ERROR                                             (37)
#define RDMA_ASYNC_EVENT_SRQ_LIMIT_REACHED                                              (38)
#define RDMA_ASYNC_EVENT_RQ_LIMIT_REACHED                                               (39)
#define RDMA_ASYNC_EVENT_SRQ_CATASTROPHIC_ERROR                                 (40)
#define RDMA_ASYNC_EVENT_RNIC_CATASTROPHIC_ERROR                                (41)
#define RDMA_ASYNC_EVENT_COMPLETION                                                             (42)
#define RDMA_ASYNC_EVENT_SLOW_PATH_COMPLETION_SUCCEEDED                 (43)
#define RDMA_ASYNC_EVENT_SLOW_PATH_COMPLETION_FAILED                    (44)
#define RDMA_ASYNC_EVENT_CONNECTION_LIMIT_REACHED                           (45)
#define RDMA_ASYNC_EVENT_ADD_NEW_CONNECTION_SUCCEEDED                   (46)
#define RDMA_ASYNC_EVENT_CONNECT_SUCCEEDED                                          (47)
#define RDMA_ASYNC_EVENT_SEND_MPA_SUCCEEDED                                             (48)
#define RDMA_ASYNC_EVENT_CONNECT_COMPLETE_SUCCEEDED                             (49)
#define RDMA_ASYNC_EVENT_CONNECT_COMPLETE_FAILED                                (50)
#define RDMA_ASYNC_EVENT_RECEIVED_MPA_SUCCEEDED                                 (51)
#define RDMA_ASYNC_EVENT_UPDATE_ULP_SUCCEEDED                                   (52)
#define RDMA_ASYNC_EVENT_PCS_REQUEST1                                                   (53) // SYN RECEIVED
#define RDMA_ASYNC_EVENT_PCS_REQUEST2                                                   (54) // Final-Ack received with MPA request
#define RDMA_ASYNC_EVENT_PCS_REQUEST3                                                   (55) // Final-Ack received with DDP segment
#define RDMA_ASYNC_EVENT_PCS_REQUEST4                                                   (56) // send segment through the forward channel
#define RDMA_ASYNC_EVENT_PCS_RESPONSE1_SUCCEEDED                                (57)    
#define RDMA_ASYNC_EVENT_PCS_RESPONSE2_SUCCEEDED                                (58)
#define RDMA_ASYNC_EVENT_PCS_RESPONSE3_SUCCEEDED                                (59)
#define RDMA_ASYNC_EVENT_PCS_RESPONSE4_SUCCEEDED                                (60) 
#define RDMA_ASYNC_EVENT_PCS_RESPONSE_FAILED                                    (61)
#define RDMA_ASYNC_EVENT_INIT_SEED_SUCCEEDED                                    (62)
#define RDMA_ASYNC_EVENT_UPDATE_SEED_SUCCEEDED                                  (63)
#define RDMA_ASYNC_EVENT_CLOSE_PHY_PORT_SUCCEEDED                               (64)
#define RDMA_ASYNC_EVENT_LOCAL_CATASTROPHIC_ERROR                               (65)
#define RDMA_COMPLETION_CODE_INVALID_REGION_STAG                                (66)  // bind/FR
#define RDMA_COMPLETION_CODE_INVALID_WINDOW_STAG                                (67)  // bind//FR
#define RDMA_COMPLETION_CODE_BASE_AND_BOUNDS_VIOLATION                  (68)  //Bind
#define RDMA_COMPLETION_CODE_RIGHTS_ACCESS_VIOLATION                    (69)  //Bind
#define RDMA_COMPLETION_CODE_STAG_NOT_IN_INVALID_STATE                  (70)  // fast-register, bind 
#define RDMA_COMPLETION_MR_NOT_IN_VALID_STATE                                   (71)  // fast-register, bind 
#define RDMA_COMPLETION_CODE_INVALID_PD_ID                                              (72)  // fast-register, bind //used


// Asyncronous event types <--> Completion status codes (Everest specific)
#define RDMA_COMPLETION_CODE_QP_CATASTROPHIC_ERROR                                              (254)
#define RDMA_COMPLETION_CODE_REMOTE_TERMINATION_ERROR                                   (253)
#define RDMA_COMPLETION_CODE_INVALID_STAG                                                               (252) 
#define RDMA_COMPLETION_CODE_ACCESS_VIOLATION                                                   (251) 
#define RDMA_COMPLETION_CODE_INVALID_PD                                                                 (250) 
#define RDMA_COMPLETION_CODE_WRAP_ERROR                                                                 (249) 
#define RDMA_COMPLETION_CODE_INVALIDATE_STAG_PD_OR_ACCESS_RIGHTS_ERROR  (248)  
#define RDMA_COMPLETION_CODE_ZERO_ORD                                                                   (247)  
#define RDMA_COMPLETION_CODE_QP_NOT_IN_PRIVILEGED_MODE                                  (246)  // fast-register
#define RDMA_COMPLETION_CODE_INVALID_PAGE_SIZE                                                  (245)  // fast-register
#define RDMA_COMPLETION_CODE_INVALID_PHYSICAL_BUFFER_SIZE                               (244)  // fast-register
#define RDMA_COMPLETION_CODE_INVALID_PHYSICAL_BUFFER_LIST_ENTRY                 (243)  // fast-register
#define RDMA_COMPLETION_CODE_INVALID_FBO                                                                (242)  // fast-register
#define RDMA_COMPLETION_CODE_INVALID_FR_LENGTH                                                  (241)  // fast-register
#define RDMA_COMPLETION_CODE_INVALID_ACCESS_RIGHTS                                              (240)  // fast-register
#define RDMA_COMPLETION_CODE_PHYSICAL_BUFFER_LIST_TOO_LONG                              (239)  // fast-register
#define RDMA_COMPLETION_CODE_INVALID_VA                                                                 (238)  // fast-register
#define RDMA_COMPLETION_CODE_INVALID_LENGTH                                                             (237)  
#define RDMA_COMPLETION_CODE_TRYING_TO_BIND_AND_QP_DOESNT_SUPPORT_BIND  (236)   // bind
#define RDMA_COMPLETION_MR_DOESNT_HAVE_BIND_MW_PREEMPTION                               (235)  // bind 
#define RDMA_COMPLETION_STAG_KEY_DOESNT_MATCH                                                   (234)  // bind 
#define RDMA_COMPLETION_MR_IS_ZERO_BASED                                                                (233)  //bind

#define RDMA_COMPLETION_CODE_INVALID_WQE                                                                (232)

// Everest specific async events
#define RDMA_ASYNC_EVENT_RQ_EMPTY                                                                               (85)


#define RDMA_ASYNC_EVENT_INVALID_EVENT                                                                  (0xFF)


// Terminate codes
#define RDMA_TERM_CODE_LLP_CLOSE_COMPLETE                                               (0)
#define RDMA_TERM_CODE_TERMINATE_MESSAGE_RECEIVED                               (0)
#define RDMA_TERM_CODE_LLP_CONNECTION_RESET                                             (0)
#define RDMA_TERM_CODE_LLP_CONNECTION_LOST                                              (0)
#define RDMA_TERM_CODE_LLP_INTEGRITY_INVALID_SEGMENT_SIZE               (0x1000)
#define RDMA_TERM_CODE_LLP_INTEGRITY_INVALID_CRC                                (0x0202)
#define RDMA_TERM_CODE_LLP_INTEGRITY_BAD_FPDU                                   (0x0203)
#define RDMA_TERM_CODE_REMOTE_INVALID_DDP_VERSION                               (0x1206)
#define RDMA_TERM_CODE_REMOTE_INVALID_RDMA_VERSION                              (0x0205)
#define RDMA_TERM_CODE_REMOTE_UNEXPECTED_OPCODE                                 (0x0206)
#define RDMA_TERM_CODE_REMOTE_INVALID_DDP_QUEUE_NUMBER                  (0x1201)
#define RDMA_TERM_CODE_REMOTE_READ_REQUEST_DISABLED                             (0x1201)
#define RDMA_TERM_CODE_REMOTE_WRITE_OR_READ_RESPONSE_DISABLED   (0)
#define RDMA_TERM_CODE_REMOTE_INVALID_READ_REQUEST                              (0)
#define RDMA_TERM_CODE_REMOTE_NO_L_BIT                                                  (0x0207)
#define RDMA_TERM_CODE_PROTECTION_INVALID_STAG                                  (0x1100)
#define RDMA_TERM_CODE_PROTECTION_TAGGED_BOUNDS_VIOLATION               (0x1101)
#define RDMA_TERM_CODE_PROTECTION_TAGGED_ACCESS_VIOLATION               (0x1102)
#define RDMA_TERM_CODE_PROTECTION_TAGGED_INVALID_PD                             (0x1102)
#define RDMA_TERM_CODE_PROTECTION_WRAP_ERROR                                    (0x1103)
#define RDMA_TERM_CODE_BAD_CLOSE                                                                (0)
#define RDMA_TERM_CODE_BAD_LLP_CLOSE                                                    (0x0207)
#define RDMA_TERM_CODE_RQ_PROTECTION_INVALID_MSN_RANGE                  (0x1202)
#define RDMA_TERM_CODE_RQ_PROTECTION_INVALID_MSN_GAP                    (0x1202)
#define RDMA_TERM_CODE_IRQ_PROTECTION_TOO_MANY_READ_REQUEST             (0x1203)
#define RDMA_TERM_CODE_IRQ_PROTECTION_INVALID_MSN_GAP                   (0x1203)
#define RDMA_TERM_CODE_IRQ_PROTECTION_INVALID_MSN_RANGE                 (0x1203)
#define RDMA_TERM_CODE_IRQ_PROTECTION_INVALID_STAG                              (0x0100)
#define RDMA_TERM_CODE_IRQ_PROTECTION_TAGGED_BOUNDS_VIOLATION   (0x0101)
#define RDMA_TERM_CODE_IRQ_PROTECTION_TAGGED_ACCESS_VIOLATION   (0x0102)
#define RDMA_TERM_CODE_IRQ_PROTECTION_TAGGED_INVALID_PD                 (0x0103)
#define RDMA_TERM_CODE_IRQ_PROTECTION_WRAP_ERROR                                (0x0104)
#define RDMA_TERM_CODE_SQ_COMPLETION_CQ_OVERFLOW                                (0x0207)
#define RDMA_TERM_CODE_RQ_COMPLETION_CQ_OPERATION_ERROR                 (0x0207)
#define RDMA_TERM_CODE_SRQ_ERROR_ON_QP                                                  (0x0207)
#define RDMA_TERM_CODE_LOCAL_QP_CATASTROPHIC_ERROR                              (0x0207)
#define RDMA_TERM_CODE_LOCAL_CATASTROPHIC_ERROR                                 (0x0)
#define RDMA_TERM_CODE_CQ_OVERFLOW                                                              (0)
#define RDMA_TERM_CODE_CQ_OPERATION_ERROR                                               (0)
#define RDMA_TERM_CODE_SRQ_LIMIT_REACHED                                                (0)
#define RDMA_TERM_CODE_RQ_LIMIT_REACHED                                                 (0)
#define RDMA_TERM_CODE_SRQ_CATASTROPHIC_ERROR                                   (0)
#define RDMA_TERM_CODE_RNIC_CATASTROPHIC_ERROR                                  (0x0208)
// Terminate codes for RQ completion errors
#define RDMA_TERM_CODE_RQ_WQE_ERROR                                                             0
#define RDMA_TERM_CODE_RQ_INVALIDATE_STAG_INVALID                               (0x0100)
#define RDMA_TERM_CODE_RQ_INVALIDATE_STAG_ACCESS_RIGHTS                 (0x0102)
#define RDMA_TERM_CODE_RQ_INVALIDATE_STAG_INVALID_PD_ID                 (0x0103)
#define RDMA_TERM_CODE_RQ_INVALIDATE_STAG_NOT_BOUND_TO_QP               (0x0103)
#define RDMA_TERM_CODE_RQ_INVALIDATE_MR_STAG_HAD_BOUND_MW               (0x0103)

// Terminate message control fields
// Layer name mask
#define RDMA_TERM_LAYER_MASK(termErrCode)                                               (((termErrCode) >> 12) & 0xf)
// Error type mask
#define RDMA_TERM_ERR_TYPE_MASK(termErrCode)                                    (((termErrCode) >> 8) & 0xf)
// Error code mask
#define RDMA_TERM_ERR_CODE_MASK(termErrCode)                                    ((termErrCode) & 0xff)


#endif //__RDMA_CONSTANTS_H_