winverbs: map WSA error codes to winverbs status values
[mirror/winof/.git] / core / winverbs / user / wv_base.h
1 /*\r
2  * Copyright (c) 2008 Intel Corporation. All rights reserved.\r
3  *\r
4  * This software is available to you under the OpenIB.org BSD license\r
5  * below:\r
6  *\r
7  *     Redistribution and use in source and binary forms, with or\r
8  *     without modification, are permitted provided that the following\r
9  *     conditions are met:\r
10  *\r
11  *      - Redistributions of source code must retain the above\r
12  *        copyright notice, this list of conditions and the following\r
13  *        disclaimer.\r
14  *\r
15  *      - Redistributions in binary form must reproduce the above\r
16  *        copyright notice, this list of conditions and the following\r
17  *        disclaimer in the documentation and/or other materials\r
18  *        provided with the distribution.\r
19  *\r
20  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,\r
21  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r
22  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AWV\r
23  * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS\r
24  * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN\r
25  * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\r
26  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r
27  * SOFTWARE.\r
28  */\r
29 \r
30 #pragma once\r
31 \r
32 #ifndef _WV_BASE_H_\r
33 #define _WV_BASE_H_\r
34 \r
35 #include <windows.h>\r
36 #include <rdma\winverbs.h>\r
37 #include <winioctl.h>\r
38 \r
39 #include <iba\ib_types.h>\r
40 #include <iba\ib_uvp.h>\r
41 \r
42 HRESULT WvConvertIbStatus(ib_api_status_t status);\r
43 HRESULT WvConvertWSAStatus(int status);\r
44 HRESULT WvGetUserVerbs(HMODULE hLib, uvp_interface_t *pVerbs);\r
45 \r
46 \r
47 class CWVBase\r
48 {\r
49 public:\r
50         CWVBase();\r
51         ~CWVBase();\r
52         STDMETHODIMP_(ULONG) AddRef();\r
53         STDMETHODIMP_(ULONG) Release();\r
54 \r
55         STDMETHODIMP Init();\r
56         virtual void Delete() {};\r
57         BOOL WvDeviceIoControl(HANDLE hDevice, DWORD dwIoControlCode,\r
58                                                    LPVOID lpInBuffer, DWORD nInBufferSize,\r
59                                                    LPVOID lpOutBuffer, DWORD nOutBufferSize,\r
60                                                    LPDWORD lpBytesReturned, LPOVERLAPPED lpOverlapped);\r
61 \r
62         HANDLE                                  m_hFile;\r
63         volatile LONG                   m_nRef;\r
64         UINT64                                  m_Id;\r
65 \r
66 protected:\r
67         OVERLAPPED                              m_Overlap;\r
68         CRITICAL_SECTION                m_CritSec;\r
69 };\r
70 \r
71 \r
72 #if defined(_WIN64)\r
73         #define WvConvertSgl(pSgl, nSge)        ((ib_local_ds_t *) pSgl)\r
74 #else\r
75         static inline ib_local_ds_t *WvConvertSgl(WV_SGE* pSgl, SIZE_T nSge)\r
76         {\r
77                 SIZE_T n;\r
78 \r
79                 for (n = 0; n < nSge; n++) {\r
80                         pSgl[n].Reserved = 0;\r
81                 }\r
82                 return (ib_local_ds_t *) pSgl;\r
83         }\r
84 #endif (_WIN64)\r
85 \r
86 #endif // _WV_BASE_H_\r