Remove stale HPC Pack 2008 Beta 1 objects
[mirror/winof/.git] / ulp / nd / user / NdEndpoint.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 #include "ndspi.h"\r
34 #include <iba/ib_al.h>\r
35 #include <ws2tcpip.h>\r
36 \r
37 \r
38 namespace NetworkDirect\r
39 {\r
40 \r
41 \r
42 ///////////////////////////////////////////////////////////////////////////////\r
43 //\r
44 // HPC Pack 2008 Beta 2 SPI\r
45 //\r
46 ///////////////////////////////////////////////////////////////////////////////\r
47 \r
48 class CAdapter;\r
49 class CCq;\r
50 \r
51 class CEndpoint :\r
52     public INDEndpoint\r
53 {\r
54     friend class CConnector;\r
55 \r
56 private:\r
57     CEndpoint(void);\r
58     ~CEndpoint(void);\r
59 \r
60     HRESULT Initialize(\r
61         __in CAdapter* pParent,\r
62         __in CCq* pInboundCq,\r
63         __in CCq* pOutboundCq,\r
64         __in SIZE_T nInboundEntries,\r
65         __in SIZE_T nOutboundEntries,\r
66         __in SIZE_T nInboundSge,\r
67         __in SIZE_T nOutboundSge,\r
68         __in SIZE_T InboundReadLimit,\r
69         __in SIZE_T OutboundReadLimit,\r
70         __out_opt SIZE_T* pMaxInlineData\r
71         );\r
72 \r
73 public:\r
74     static HRESULT Create(\r
75         __in CAdapter* pParent,\r
76         __in CCq* pInboundCq,\r
77         __in CCq* pOutboundCq,\r
78         __in SIZE_T nInboundEntries,\r
79         __in SIZE_T nOutboundEntries,\r
80         __in SIZE_T nInboundSge,\r
81         __in SIZE_T nOutboundSge,\r
82         __in SIZE_T InboundReadLimit,\r
83         __in SIZE_T OutboundReadLimit,\r
84         __out_opt SIZE_T* pMaxInlineData,\r
85         __out INDEndpoint** ppEndpoint\r
86         );\r
87 \r
88     // *** IUnknown methods ***\r
89     HRESULT STDMETHODCALLTYPE QueryInterface(\r
90         REFIID riid,\r
91         LPVOID FAR* ppvObj\r
92         );\r
93 \r
94     ULONG STDMETHODCALLTYPE AddRef(void);\r
95 \r
96     ULONG STDMETHODCALLTYPE Release(void);\r
97 \r
98     // *** INDEndpoint methods ***\r
99     HRESULT STDMETHODCALLTYPE Flush(void);\r
100 \r
101     void STDMETHODCALLTYPE StartRequestBatch(void);\r
102 \r
103     void STDMETHODCALLTYPE SubmitRequestBatch(void);\r
104 \r
105     HRESULT STDMETHODCALLTYPE Send(\r
106         __out ND_RESULT* pResult,\r
107         __in_ecount(nSge) const ND_SGE* pSgl,\r
108         __in SIZE_T nSge,\r
109         __in DWORD Flags\r
110         );\r
111 \r
112     HRESULT STDMETHODCALLTYPE SendAndInvalidate(\r
113         __out ND_RESULT* pResult,\r
114         __in_ecount(nSge) const ND_SGE* pSgl,\r
115         __in SIZE_T nSge,\r
116         __in const ND_MW_DESCRIPTOR* pRemoteMwDescriptor,\r
117         __in DWORD Flags\r
118         );\r
119 \r
120     HRESULT STDMETHODCALLTYPE Receive(\r
121         __out ND_RESULT* pResult,\r
122         __in_ecount(nSge) const ND_SGE* pSgl,\r
123         __in SIZE_T nSge\r
124         );\r
125 \r
126     HRESULT STDMETHODCALLTYPE Bind(\r
127         __out ND_RESULT* pResult,\r
128         __in ND_MR_HANDLE hMr,\r
129         __in INDMemoryWindow* pMw,\r
130         __in_bcount(BufferSize) const void* pBuffer,\r
131         __in SIZE_T BufferSize,\r
132         __in DWORD Flags,\r
133         __out ND_MW_DESCRIPTOR* pMwDescriptor\r
134         );\r
135 \r
136     HRESULT STDMETHODCALLTYPE Invalidate(\r
137         __out ND_RESULT* pResult,\r
138         __in INDMemoryWindow* pMw,\r
139         __in DWORD Flags\r
140         );\r
141 \r
142     HRESULT STDMETHODCALLTYPE Read(\r
143         __out ND_RESULT* pResult,\r
144         __in_ecount(nSge) const ND_SGE* pSgl,\r
145         __in SIZE_T nSge,\r
146         __in const ND_MW_DESCRIPTOR* pRemoteMwDescriptor,\r
147         __in ULONGLONG Offset,\r
148         __in DWORD Flags\r
149         );\r
150 \r
151     HRESULT STDMETHODCALLTYPE Write(\r
152         __out ND_RESULT* pResult,\r
153         __in_ecount(nSge) const ND_SGE* pSgl,\r
154         __in SIZE_T nSge,\r
155         __in const ND_MW_DESCRIPTOR* pRemoteMwDescriptor,\r
156         __in ULONGLONG Offset,\r
157         __in DWORD Flags\r
158         );\r
159 \r
160 private:\r
161     HRESULT Rdma(\r
162         __out ND_RESULT* pResult,\r
163         __in ib_wr_type_t Type,\r
164         __in_ecount(nSge) const ND_SGE* pSgl,\r
165         __in SIZE_T nSge,\r
166         __in const ND_MW_DESCRIPTOR* pRemoteMwDescriptor,\r
167         __in ULONGLONG Offset,\r
168         __in DWORD Flags\r
169         );\r
170 \r
171     HRESULT CreateQp(\r
172         __in CCq* pInboundCq,\r
173         __in CCq* pOutboundCq,\r
174         __in SIZE_T nInboundEntries,\r
175         __in SIZE_T nOutboundEntries,\r
176         __in SIZE_T nInboundSge,\r
177         __in SIZE_T nOutboundSge,\r
178         __in SIZE_T InboundReadLimit,\r
179         __in SIZE_T OutboundReadLimit\r
180         );\r
181 \r
182     void DestroyQp();\r
183 \r
184     HRESULT ModifyQp(\r
185         __in ib_qp_state_t NewState\r
186         );\r
187 \r
188 protected:\r
189     volatile LONG m_nRef;\r
190 \r
191     CAdapter* m_pParent;\r
192 \r
193     uint64_t m_hQp;\r
194     ib_qp_handle_t m_uQp;\r
195 \r
196     net32_t m_Qpn;\r
197 \r
198     UINT8 m_Ird;\r
199     UINT8 m_Ord;\r
200 };\r
201 \r
202 } // namespace\r