Remove stale HPC Pack 2008 Beta 1 objects
[mirror/winof/.git] / ulp / nd / user / NdAdapter.h
1 /*\r
2  * Copyright (c) 2008 Microsoft 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 AND\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  * $Id:$\r
30  */\r
31 \r
32 #pragma once\r
33 \r
34 #include "ndspi.h"\r
35 #include "nddebug.h"\r
36 #include <iba/ib_al.h>\r
37 #include <iba/ib_at_ioctl.h>\r
38 #include <ws2tcpip.h>\r
39 #include "ual_ci_ca.h"\r
40 \r
41 #include "NdProv.h"\r
42 \r
43 \r
44 namespace NetworkDirect\r
45 {\r
46 \r
47 class CCq;\r
48 class CAddr;\r
49 class CProvider;\r
50 \r
51 class CAdapter :\r
52     public INDAdapter\r
53 {\r
54     friend class CCq;\r
55     friend class CEndpoint;\r
56     friend class CConnector;\r
57     friend class CMw;\r
58     friend class CMr;\r
59     friend class CListen;\r
60 \r
61 private:\r
62     CAdapter(void);\r
63     ~CAdapter(void);\r
64 \r
65     HRESULT Initialize(\r
66         CProvider* pParent,\r
67         const struct sockaddr* pAddr,\r
68         const IBAT_PORT_RECORD* pPortRecord\r
69         );\r
70 \r
71 public:\r
72     static HRESULT Create(\r
73         CProvider* pParent,\r
74         const struct sockaddr* pAddr,\r
75         const IBAT_PORT_RECORD* pPortRecord,\r
76         __out INDAdapter** ppAdapter\r
77         );\r
78 \r
79     // *** IUnknown methods ***\r
80     HRESULT STDMETHODCALLTYPE QueryInterface(\r
81         REFIID riid,\r
82         LPVOID FAR* ppvObj\r
83         );\r
84 \r
85     ULONG STDMETHODCALLTYPE AddRef(void);\r
86 \r
87     ULONG STDMETHODCALLTYPE Release(void);\r
88 \r
89     // *** INDOverlapped methods ***\r
90     HRESULT STDMETHODCALLTYPE CancelOverlappedRequests(void);\r
91 \r
92     HRESULT STDMETHODCALLTYPE GetOverlappedResult(\r
93         __inout OVERLAPPED *pOverlapped,\r
94         __out SIZE_T *pNumberOfBytesTransferred,\r
95         __in BOOL bWait\r
96         );\r
97 \r
98     // *** INDAdapter methods ***\r
99     HANDLE STDMETHODCALLTYPE GetFileHandle(void);\r
100 \r
101     HRESULT STDMETHODCALLTYPE Query(\r
102         __in DWORD VersionRequested,\r
103         __out_bcount_part_opt(*pBufferSize, *pBufferSize) ND_ADAPTER_INFO* pInfo,\r
104         __inout_opt SIZE_T* pBufferSize\r
105         );\r
106 \r
107     HRESULT STDMETHODCALLTYPE Control(\r
108         __in DWORD IoControlCode,\r
109         __in_bcount_opt(InBufferSize) const void* pInBuffer,\r
110         __in SIZE_T InBufferSize,\r
111         __out_bcount_opt(OutBufferSize) void* pOutBuffer,\r
112         __in SIZE_T OutBufferSize,\r
113         __out SIZE_T* pBytesReturned,\r
114         __inout OVERLAPPED* pOverlapped\r
115         );\r
116 \r
117     HRESULT STDMETHODCALLTYPE CreateCompletionQueue(\r
118         __in SIZE_T nEntries,\r
119         __deref_out INDCompletionQueue** ppCq\r
120         );\r
121 \r
122     HRESULT STDMETHODCALLTYPE RegisterMemory(\r
123         __in_bcount(BufferSize) const void* pBuffer,\r
124         __in SIZE_T BufferSize,\r
125         __inout OVERLAPPED* pOverlapped,\r
126         __deref_out ND_MR_HANDLE* phMr\r
127         );\r
128 \r
129     HRESULT STDMETHODCALLTYPE CompleteRegisterMemory(\r
130         __in ND_MR_HANDLE hMr,\r
131         __in OVERLAPPED* pOverlapped\r
132         );\r
133 \r
134     HRESULT STDMETHODCALLTYPE DeregisterMemory(\r
135         __in ND_MR_HANDLE hMr,\r
136         __inout OVERLAPPED* pOverlapped\r
137         );\r
138 \r
139     HRESULT STDMETHODCALLTYPE CompleteDeregisterMemory(\r
140         __in ND_MR_HANDLE hMr,\r
141         __in OVERLAPPED* pOverlapped\r
142         );\r
143 \r
144     HRESULT STDMETHODCALLTYPE CreateMemoryWindow(\r
145         __out ND_RESULT* pInvalidateResult,\r
146         __deref_out INDMemoryWindow** ppMw\r
147         );\r
148 \r
149     HRESULT STDMETHODCALLTYPE CreateConnector(\r
150         __deref_out INDConnector** ppConnector\r
151         );\r
152 \r
153     HRESULT STDMETHODCALLTYPE Listen(\r
154         __in SIZE_T Backlog,\r
155         __in INT Protocol,\r
156         __in USHORT Port,\r
157         __out_opt USHORT* pAssignedPort,\r
158         __deref_out INDListen** ppListen\r
159         );\r
160 \r
161     HRESULT GetLocalAddress(\r
162         __out_bcount_part(*pAddressLength, *pAddressLength) struct sockaddr* pAddr,\r
163         __inout SIZE_T *pAddressLength );\r
164 \r
165 private:\r
166     HRESULT OpenFiles(void);\r
167 \r
168     HRESULT OpenCa(\r
169         __in UINT64 CaGuid\r
170         );\r
171 \r
172     HRESULT QueryCa(\r
173         __out_bcount(*pSize) ib_ca_attr_t* pAttr,\r
174         __inout DWORD* pSize\r
175         );\r
176 \r
177     void CloseCa(void);\r
178 \r
179     HRESULT AllocPd(void);\r
180 \r
181     void DeallocPd(void);\r
182 \r
183 protected:\r
184     volatile LONG m_nRef;\r
185 \r
186     CProvider* m_pParent;\r
187     UINT64 m_PortGuid;\r
188     UINT8 m_PortNum;\r
189 \r
190     HANDLE m_hSync;\r
191     HANDLE m_hAsync;\r
192 \r
193     ual_ci_interface_t m_Ifc;\r
194     // Kernel IBAL handles.\r
195     uint64_t m_hCa;\r
196     uint64_t m_hPd;\r
197     // UVP handles.\r
198     ib_ca_handle_t m_uCa;\r
199     ib_pd_handle_t m_uPd;\r
200 \r
201     union _addr\r
202     {\r
203         struct sockaddr unspec;\r
204         struct sockaddr_in v4;\r
205         struct sockaddr_in6 v6;\r
206 \r
207     } m_Addr;\r
208 };\r
209 \r
210 } // namespace