winverbs: add new windows based verbs library and driver
[mirror/winof/.git] / core / winverbs / kernel / wv_pd.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_PD_H_\r
33 #define _WV_PD_H_\r
34 \r
35 #include <ntddk.h>\r
36 #include <wdm.h>\r
37 #include <iba\ib_types.h>\r
38 #include <iba\ib_ci.h>\r
39 \r
40 #include "wv_device.h"\r
41 #include "wv_provider.h"\r
42 \r
43 typedef struct _WV_PROTECTION_DOMAIN\r
44 {\r
45         WV_DEVICE                       *pDevice;\r
46         ci_interface_t          *pVerbs;\r
47         ib_pd_handle_t          hVerbsPd;\r
48         LIST_ENTRY                      Entry;\r
49 \r
50         LIST_ENTRY                      QpList;\r
51         LIST_ENTRY                      SrqList;\r
52         LIST_ENTRY                      MwList;\r
53         LIST_ENTRY                      AhList;\r
54         KGUARDED_MUTEX          Lock;\r
55         cl_qmap_t                       MrMap;\r
56 \r
57         KEVENT                          Event;\r
58         LONG                            Ref;\r
59 \r
60 }       WV_PROTECTION_DOMAIN;\r
61 \r
62 WV_PROTECTION_DOMAIN *WvPdAcquire(WV_PROVIDER *pProvider, UINT64 Id);\r
63 void WvPdRelease(WV_PROTECTION_DOMAIN *pPd);\r
64 void WvPdGet(WV_PROTECTION_DOMAIN *pPd);\r
65 void WvPdPut(WV_PROTECTION_DOMAIN *pPd);\r
66 \r
67 void WvPdAllocate(WV_PROVIDER *pProvider, WDFREQUEST Request);\r
68 void WvPdDeallocate(WV_PROVIDER *pProvider, WDFREQUEST Request);\r
69 void WvPdFree(WV_PROTECTION_DOMAIN *pPd);\r
70 void WvPdRemoveHandler(WV_PROTECTION_DOMAIN *pPd);\r
71 \r
72 \r
73 typedef struct _WV_MEMORY_REGION\r
74 {\r
75         ib_mr_handle_t                  hVerbsMr;\r
76         cl_map_item_t                   Item;\r
77 \r
78 }       WV_MEMORY_REGION;\r
79 \r
80 void WvMrRegister(WV_PROVIDER *pProvider, WDFREQUEST Request);\r
81 void WvMrDeregister(WV_PROVIDER *pProvider, WDFREQUEST Request);\r
82 \r
83 \r
84 typedef struct _WV_MEMORY_WINDOW\r
85 {\r
86         WV_PROTECTION_DOMAIN    *pPd;\r
87         ib_mw_handle_t                  hVerbsMw;\r
88         LIST_ENTRY                              Entry;\r
89 \r
90 }       WV_MEMORY_WINDOW;\r
91 \r
92 void WvMwAllocate(WV_PROVIDER *pProvider, WDFREQUEST Request);\r
93 void WvMwDeallocate(WV_PROVIDER *pProvider, WDFREQUEST Request);\r
94 void WvMwFree(WV_MEMORY_WINDOW *pMw);\r
95 \r
96 \r
97 typedef struct _WV_ADDRESS_HANDLE\r
98 {\r
99         WV_PROTECTION_DOMAIN    *pPd;\r
100         ib_av_handle_t                  hVerbsAh;\r
101         LIST_ENTRY                              Entry;\r
102 \r
103 }       WV_ADDRESS_HANDLE;\r
104 \r
105 void WvAhCreate(WV_PROVIDER *pProvider, WDFREQUEST Request);\r
106 void WvAhDestroy(WV_PROVIDER *pProvider, WDFREQUEST Request);\r
107 void WvAhFree(WV_ADDRESS_HANDLE *pAh);\r
108 \r
109 #endif // _WV_PD_H_\r