\r
} WV_OPCODE;\r
\r
+typedef enum _WV_WC_STATUS\r
+{\r
+ WvWcSuccess,\r
+ WvWcLocalLengthError,\r
+ WvWcLocalOpError,\r
+ WvWcLocalProtectionError,\r
+ WvWcFlushed,\r
+ WvWcMwBindError,\r
+ WvWcRemoteAccessError,\r
+ WvWcRemoteOpError,\r
+ WvWcRnrRetryError,\r
+ WvWcTimeoutRetryError,\r
+ WvWcRemoteInvalidRequest,\r
+ WvWcBadResponse,\r
+ WvWcLocalAccessError,\r
+ WvWcError\r
+\r
+} WV_WC_STATUS;\r
+\r
// Completion flags\r
#define WV_WC_IMMEDIATE 0x00000001\r
// reserved 0x00000002\r
WV_OPCODE Opcode;\r
UINT32 Length;\r
UINT64 VendorCode;\r
- HRESULT Status;\r
+ WV_WC_STATUS Status;\r
\r
// Receive completion data\r
DWORD Flags;\r
\r
enum ibv_wc_status\r
{\r
- IBV_WC_SUCCESS,\r
- IBV_WC_LOC_LEN_ERR,\r
- IBV_WC_LOC_QP_OP_ERR,\r
- IBV_WC_LOC_PROT_ERR,\r
- IBV_WC_WR_FLUSH_ERR,\r
- IBV_WC_MW_BIND_ERR,\r
- IBV_WC_REM_ACCESS_ERR,\r
- IBV_WC_REM_OP_ERR,\r
- IBV_WC_RNR_RETRY_EXC_ERR,\r
- IBV_WC_RESP_TIMEOUT_ERR,\r
- IBV_WC_REM_INV_REQ_ERR,\r
- IBV_WC_BAD_RESP_ERR,\r
- IBV_WC_LOC_ACCESS_ERR,\r
- IBV_WC_GENERAL_ERR,\r
- IBV_WC_FATAL_ERR,\r
- IBV_WC_RETRY_EXC_ERR,\r
- IBV_WC_REM_ABORT_ERR,\r
- IBV_WC_LOC_EEC_OP_ERR,\r
- IBV_WC_LOC_RDD_VIOL_ERR,\r
- IBV_WC_REM_INV_RD_REQ_ERR,\r
- IBV_WC_INV_EECN_ERR,\r
- IBV_WC_INV_EEC_STATE_ERR\r
+ IBV_WC_SUCCESS = WvWcSuccess,\r
+ IBV_WC_LOC_LEN_ERR = WvWcLocalLengthError,\r
+ IBV_WC_LOC_QP_OP_ERR = WvWcLocalOpError,\r
+ IBV_WC_LOC_PROT_ERR = WvWcLocalProtectionError,\r
+ IBV_WC_WR_FLUSH_ERR = WvWcFlushed,\r
+ IBV_WC_MW_BIND_ERR = WvWcMwBindError,\r
+ IBV_WC_REM_ACCESS_ERR = WvWcRemoteAccessError,\r
+ IBV_WC_REM_OP_ERR = WvWcRemoteOpError,\r
+ IBV_WC_RNR_RETRY_EXC_ERR = WvWcRnrRetryError,\r
+ IBV_WC_RESP_TIMEOUT_ERR = WvWcTimeoutRetryError,\r
+ IBV_WC_REM_INV_REQ_ERR = WvWcRemoteInvalidRequest,\r
+ IBV_WC_BAD_RESP_ERR = WvWcBadResponse,\r
+ IBV_WC_LOC_ACCESS_ERR = WvWcLocalAccessError,\r
+ IBV_WC_GENERAL_ERR = WvWcError,\r
+ IBV_WC_FATAL_ERR = WvWcError,\r
+ IBV_WC_RETRY_EXC_ERR = WvWcError,\r
+ IBV_WC_REM_ABORT_ERR = WvWcError,\r
+ IBV_WC_LOC_EEC_OP_ERR = WvWcError,\r
+ IBV_WC_LOC_RDD_VIOL_ERR = WvWcError,\r
+ IBV_WC_REM_INV_RD_REQ_ERR = WvWcError,\r
+ IBV_WC_INV_EECN_ERR = WvWcError,\r
+ IBV_WC_INV_EEC_STATE_ERR = WvWcError\r
+\r
};\r
\r
__declspec(dllexport)\r
return NDConvertWVStatus(hr);\r
}\r
\r
+STDMETHODIMP_(HRESULT) CNDCompletionQueue::\r
+ConvertStatus(WV_WC_STATUS Status)\r
+{\r
+ switch (Status) {\r
+ case WvWcSuccess:\r
+ return ND_SUCCESS;\r
+ case WvWcFlushed:\r
+ return ND_CANCELED;\r
+ case WvWcLocalLengthError:\r
+ return ND_LOCAL_LENGTH;\r
+ case WvWcRnrRetryError:\r
+ case WvWcTimeoutRetryError:\r
+ return ND_TIMEOUT;\r
+ case WvWcLocalAccessError:\r
+ case WvWcLocalOpError:\r
+ case WvWcLocalProtectionError:\r
+ case WvWcMwBindError:\r
+ return ND_ACCESS_VIOLATION;\r
+ case WvWcRemoteAccessError:\r
+ case WvWcRemoteOpError:\r
+ case WvWcRemoteInvalidRequest:\r
+ case WvWcBadResponse:\r
+ return ND_REMOTE_ERROR;\r
+ default:\r
+ return ND_INTERNAL_ERROR;\r
+ }\r
+}\r
+\r
STDMETHODIMP_(SIZE_T) CNDCompletionQueue::\r
GetResults(ND_RESULT* pResults[], SIZE_T nResults)\r
{\r
if (comp[i].Opcode & WvReceive) {\r
pResults[total]->BytesTransferred = comp[i].Length;\r
}\r
- pResults[total++]->Status = comp[i].Status;\r
+ pResults[total++]->Status = ConvertStatus(comp[i].Status);\r
}\r
}\r
return total;\r