[opensm] removed opensm\user\include\ib_types.h, even though it was not used, it...
[mirror/winof/.git] / core / winverbs / kernel / wv_provider.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_PROVIDER_H_\r
33 #define _WV_PROVIDER_H_\r
34 \r
35 #include <ntddk.h>\r
36 #include <wdf.h>\r
37 #include <wdm.h>\r
38 \r
39 #include "work_queue.h"\r
40 #include <complib\cl_qmap.h>\r
41 #include "wv_driver.h"\r
42 #include "index_list.h"\r
43 \r
44 struct _WV_DEVICE;\r
45 struct _WV_PROTECTION_DOMAIN;\r
46 \r
47 typedef struct _WV_WORK_ENTRY\r
48 {\r
49         WORK_ENTRY              Work;\r
50         UINT64                  Id;\r
51 \r
52 }       WV_WORK_ENTRY;\r
53 \r
54 static void WvWorkEntryInit(WV_WORK_ENTRY *pWork, UINT64 Id,\r
55                                                         void (*WorkHandler)(WORK_ENTRY *Work), void *Context)\r
56 {\r
57         pWork->Id = Id;\r
58         WorkEntryInit(&pWork->Work, WorkHandler, Context);\r
59 }\r
60 \r
61 typedef struct _WV_PROVIDER\r
62 {\r
63         LIST_ENTRY              Entry;\r
64         INDEX_LIST              DevIndex;\r
65         INDEX_LIST              CqIndex;\r
66         INDEX_LIST              PdIndex;\r
67         INDEX_LIST              SrqIndex;\r
68         INDEX_LIST              QpIndex;\r
69         INDEX_LIST              MwIndex;\r
70         INDEX_LIST              AhIndex;\r
71         INDEX_LIST              EpIndex;\r
72 \r
73         KGUARDED_MUTEX  Lock;\r
74         LONG                    Ref;\r
75         KEVENT                  Event;\r
76         LONG                    Pending;\r
77         LONG                    Active;\r
78         KEVENT                  SharedEvent;\r
79         LONG                    Exclusive;\r
80         KEVENT                  ExclusiveEvent;\r
81 \r
82         WORK_QUEUE              WorkQueue;\r
83 \r
84 }       WV_PROVIDER;\r
85 \r
86 WDF_DECLARE_CONTEXT_TYPE_WITH_NAME(WV_PROVIDER, WvProviderGetContext)\r
87 \r
88 void WvProviderGet(WV_PROVIDER *pProvider);\r
89 void WvProviderPut(WV_PROVIDER *pProvider);\r
90 NTSTATUS WvProviderInit(WDFDEVICE Device, WV_PROVIDER *pProvider);\r
91 void WvProviderCleanup(WV_PROVIDER *pProvider);\r
92 \r
93 void WvProviderRemoveHandler(WV_PROVIDER *pProvider, WV_RDMA_DEVICE *pDevice);\r
94 void WvProviderDisableRemove(WV_PROVIDER *pProvider);\r
95 void WvProviderEnableRemove(WV_PROVIDER *pProvider);\r
96 \r
97 #endif // _WV_PROVIDER_H_\r