2 * Copyright (c) 2008 Intel Corporation. All rights reserved.
\r
4 * This software is available to you under the OpenIB.org BSD license
\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
11 * - Redistributions of source code must retain the above
\r
12 * copyright notice, this list of conditions and the following
\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
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
35 #include <rdma\winverbs.h>
\r
36 #include "wv_device.h"
\r
37 #include "wv_ioctl.h"
\r
38 #include "wv_base.h"
\r
40 class CWVProtectionDomain : IWVProtectionDomain, public CWVBase
\r
44 STDMETHODIMP QueryInterface(REFIID riid, LPVOID FAR* ppvObj);
\r
45 STDMETHODIMP_(ULONG) AddRef();
\r
46 STDMETHODIMP_(ULONG) Release();
\r
48 // IWVOverlapped methods
\r
49 STDMETHODIMP CancelOverlappedRequests();
\r
50 STDMETHODIMP GetOverlappedResult(OVERLAPPED *pOverlapped,
\r
51 DWORD *pNumberOfBytesTransferred, BOOL bWait);
\r
53 // IWVProtectionDomain methods
\r
54 STDMETHODIMP CreateSharedReceiveQueue(SIZE_T MaxWr, SIZE_T MaxSge, SIZE_T SrqLimit,
\r
55 IWVSharedReceiveQueue** ppSrq);
\r
56 STDMETHODIMP CreateConnectQueuePair(WV_QP_CREATE* pAttributes,
\r
57 IWVConnectQueuePair** ppQp);
\r
58 STDMETHODIMP CreateDatagramQueuePair(WV_QP_CREATE* pAttributes,
\r
59 IWVDatagramQueuePair** ppQp);
\r
60 STDMETHODIMP RegisterMemory(const VOID* pBuffer, SIZE_T BufferLength,
\r
61 DWORD AccessFlags, OVERLAPPED* pOverlapped,
\r
62 WV_MEMORY_KEYS *pKeys);
\r
63 STDMETHODIMP DeregisterMemory(UINT32 Lkey, OVERLAPPED* pOverlapped);
\r
64 STDMETHODIMP AllocateMemoryWindow(IWVMemoryWindow** ppMw);
\r
65 STDMETHODIMP CreateAddressHandle(WV_ADDRESS_VECTOR* pAddress,
\r
66 IWVAddressHandle** ppAh, ULONG_PTR *pAhKey);
\r
68 CWVProtectionDomain(CWVDevice *pDevice);
\r
69 ~CWVProtectionDomain();
\r
70 void Delete() {delete this;}
\r
72 CreateInstance(CWVDevice *pDevice, IWVProtectionDomain** ppPd)
\r
75 CWVProtectionDomain *pd;
\r
77 pd = new CWVProtectionDomain(pDevice);
\r
88 hr = pd->Allocate();
\r
103 CWVDevice *m_pDevice;
\r
104 uvp_interface_t *m_pVerbs;
\r
105 ib_pd_handle_t m_hVerbsPd;
\r
108 STDMETHODIMP Allocate();
\r
112 class CWVMemoryWindow : IWVMemoryWindow, public CWVBase
\r
115 // IUnknown methods
\r
116 STDMETHODIMP QueryInterface(REFIID riid, LPVOID FAR* ppvObj);
\r
117 STDMETHODIMP_(ULONG) AddRef();
\r
118 STDMETHODIMP_(ULONG) Release();
\r
120 CWVMemoryWindow(CWVProtectionDomain *pPd);
\r
121 ~CWVMemoryWindow();
\r
122 void Delete() {delete this;}
\r
123 static STDMETHODIMP
\r
124 CreateInstance(CWVProtectionDomain *pPd, IWVMemoryWindow** ppMw)
\r
127 CWVMemoryWindow *mw;
\r
129 mw = new CWVMemoryWindow(pPd);
\r
140 hr = mw->Allocate();
\r
155 CWVProtectionDomain *m_pPd;
\r
156 uvp_interface_t *m_pVerbs;
\r
157 ib_mw_handle_t m_hVerbsMw;
\r
161 STDMETHODIMP Allocate();
\r
165 class CWVAddressHandle : IWVAddressHandle, public CWVBase
\r
168 // IUnknown methods
\r
169 STDMETHODIMP QueryInterface(REFIID riid, LPVOID FAR* ppvObj);
\r
170 STDMETHODIMP_(ULONG) AddRef();
\r
171 STDMETHODIMP_(ULONG) Release();
\r
173 CWVAddressHandle(CWVProtectionDomain *pPd);
\r
174 ~CWVAddressHandle();
\r
175 void Delete() {delete this;}
\r
176 static STDMETHODIMP
\r
177 CreateInstance(CWVProtectionDomain *pPd, WV_ADDRESS_VECTOR* pAddress,
\r
178 IWVAddressHandle** ppAh, ULONG_PTR* pAhKey)
\r
181 CWVAddressHandle *ah;
\r
183 ah = new CWVAddressHandle(pPd);
\r
194 hr = ah->Create(pAddress);
\r
200 *pAhKey = (ULONG_PTR) ah->m_hVerbsAh;
\r
210 CWVProtectionDomain *m_pPd;
\r
211 uvp_interface_t *m_pVerbs;
\r
212 ib_av_handle_t m_hVerbsAh;
\r
215 STDMETHODIMP Create(WV_ADDRESS_VECTOR* pAddress);
\r
216 STDMETHODIMP ConvertAv(ib_av_attr_t *pVerbsAv, WV_ADDRESS_VECTOR *pAv);
\r