Fixed Id keyword in source files
[mirror/winof/.git] / core / iou / kernel / iou_driver.h
1 /*\r
2  * Copyright (c) 2005 SilverStorm Technologies.  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 /*\r
33         $Revision$\r
34 */\r
35 \r
36 \r
37 #if !defined _IOU_DRIVER_H_\r
38 #define _IOU_DRIVER_H_\r
39 \r
40 #include "complib/cl_types.h"\r
41 #include "complib/cl_atomic.h"\r
42 #include "complib/cl_debug.h"\r
43 #include "complib/cl_mutex.h"\r
44 #include "complib/cl_qlist.h"\r
45 #include "complib/cl_ptr_vector.h"\r
46 #include "complib/cl_pnp_po.h"\r
47 #include "iba/ib_al.h"\r
48 #include "iou_ioc_mgr.h"\r
49 \r
50 /* Safe string functions. */\r
51 #if WINVER == 0x500\r
52 /*\r
53  * Windows 2000 doesn't support the inline version of safe strings.\r
54  * Force the use of the library version of safe strings.\r
55  */\r
56 #define NTSTRSAFE_LIB\r
57 #endif\r
58 #include <ntstrsafe.h>\r
59 \r
60 \r
61 /*\r
62  * Main header for IB Bus driver.\r
63  */\r
64 \r
65 #define IOU_ENTER( lvl )                        \\r
66         CL_ENTER( lvl, iou_globals.dbg_lvl )\r
67 \r
68 #define IOU_EXIT( lvl )                         \\r
69         CL_EXIT( lvl, iou_globals.dbg_lvl )\r
70 \r
71 #define IOU_TRACE( lvl, msg )           \\r
72         CL_TRACE( lvl, iou_globals.dbg_lvl, msg )\r
73 \r
74 #define IOU_TRACE_EXIT( lvl, msg )      \\r
75         CL_TRACE_EXIT( lvl, iou_globals.dbg_lvl, msg )\r
76 \r
77 #define IOU_PRINT( lvl, msg )           \\r
78         CL_PRINT( lvl, iou_globals.dbl_lvl, msg )\r
79 \r
80 #define IOU_DBG_ERROR   CL_DBG_ERROR\r
81 #define IOU_DBG_DRV             (1 << 0)\r
82 #define IOU_DBG_PNP             (1 << 1)\r
83 #define IOU_DBG_POWER   (1 << 2)\r
84 #define IOU_DBG_PORT    (1 << 3)\r
85 #define IOU_DBG_IOU             (1 << 4)\r
86 \r
87 /*\r
88  * ALLOC_PRAGMA sections:\r
89  *      PAGE\r
90  *              Default pagable code.  Won't be locked in memory.\r
91  *\r
92  *      PAGE_PNP\r
93  *              Code that needs to be locked in memory when the device is\r
94  *              in the paging, crash dump, or hibernation path.\r
95  */\r
96 \r
97 \r
98 /*\r
99  * Device extension for the device object that serves as entry point for \r
100  * the interface and IOCTL requests.\r
101  */\r
102 typedef struct _iou_fdo_ext\r
103 {\r
104         cl_pnp_po_ext_t                 cl_ext;\r
105 \r
106         /*\r
107          * Device power map returned by the bus driver for the device, used \r
108          * when sending IRP_MN_SET_POWER for device state in response to \r
109          * IRP_MN_SET_POWER for system state.\r
110          */\r
111         DEVICE_POWER_STATE              po_state[PowerSystemMaximum];\r
112 \r
113         ioc_mgr_t                               ioc_mgr;\r
114 \r
115 }       iou_fdo_ext_t;\r
116 \r
117 \r
118 /*\r
119  * Device extension for bus driver PDOs.\r
120  */\r
121 typedef struct _iou_pdo_ext\r
122 {\r
123         cl_pnp_po_ext_t                 cl_ext;\r
124 \r
125         cl_list_item_t                  list_item;\r
126 \r
127         POWER_STATE                             dev_po_state;\r
128 \r
129         /*\r
130          * Pointer to the bus root device extension.  Used to manage access to\r
131          * child PDO pointer vector when a child is removed politely.\r
132          */\r
133         iou_fdo_ext_t                   *p_parent_ext;\r
134 \r
135         /*\r
136          * The following two flags are exclusively set, but can both be FALSE.\r
137          * Flag that indicates whether the device is present in the system or not.\r
138          * This affects how a IRP_MN_REMOVE_DEVICE IRP is handled for a child PDO.\r
139          * This flag is cleared when:\r
140          *      - an HCA (for IPoIB devices) is removed from the system for all port\r
141          *      devices loaded for that HCA\r
142          *      - an IOU is reported as removed by the CIA.\r
143          */\r
144         boolean_t                               b_present;\r
145 \r
146         /*\r
147          * Flag that indicates whether the device has been reported to the PnP\r
148          * manager as having been removed.  That is, the device was reported\r
149          * in a previous BusRelations query and not in a subsequent one.\r
150          * This flag is set when\r
151          *      - the device is in the surprise remove state when the parent bus\r
152          *      device is removed\r
153          *      - the device is found to be not present during a BusRelations query\r
154          *      and thus not reported.\r
155          */\r
156         boolean_t                               b_reported_missing;\r
157 \r
158 }       iou_pdo_ext_t;\r
159 \r
160 \r
161 /*\r
162  * Global Driver parameters.\r
163  */\r
164 typedef struct _iou_globals\r
165 {\r
166         /* Debug level. */\r
167         uint32_t                                dbg_lvl;\r
168 \r
169         /* Driver object.  Used for creating child devices. */\r
170         DRIVER_OBJECT                   *p_driver_obj;\r
171 \r
172 }       iou_globals_t;\r
173 \r
174 \r
175 extern iou_globals_t    iou_globals;\r
176 \r
177 \r
178 #endif  /* !defined _IOU_DRIVER_H_ */\r