3a425ccf2983b219083f1f18565371d0f87a6206
[mirror/winof/.git] / hw / mlx4 / kernel / bus / drv / drv.h
1 /*++\r
2 \r
3 Copyright (c) 2003 Microsoft Corporation All Rights Reserved\r
4 \r
5 Module Name:\r
6 \r
7     mxe_drv.h\r
8 \r
9 Abstract:\r
10 \r
11     This module contains the common private declarations\r
12     for the Mxe Bus enumerator.\r
13 \r
14 Environment:\r
15 \r
16     kernel mode only\r
17 \r
18 --*/\r
19 \r
20 #pragma once\r
21 \r
22 #define BUSENUM_POOL_TAG (ULONG) 'suBT'\r
23 #define N_BARS          3\r
24 \r
25 #include "net\mlx4.h"\r
26 #include "bus_intf.h"\r
27 \r
28 #if DBG\r
29 #define BUS_DEFAULT_DEBUG_OUTPUT_LEVEL 0x000FFFFF\r
30 \r
31 #else\r
32 \r
33 #define BUS_DEFAULT_DEBUG_OUTPUT_LEVEL 0x0\r
34 \r
35 #endif\r
36 \r
37 #define BUSRESOURCENAME L"MofResourceName"\r
38 \r
39 #ifndef min\r
40 #define min(_a, _b)     (((_a) < (_b)) ? (_a) : (_b))\r
41 #endif\r
42 \r
43 #ifndef max\r
44 #define max(_a, _b)     (((_a) > (_b)) ? (_a) : (_b))\r
45 #endif\r
46 \r
47 \r
48 #define MLX4_MAX_INTERRUPTS             MLX4_NUM_EQS\r
49 \r
50 typedef struct {\r
51         WDFINTERRUPT                            WdfInterrupt;\r
52         BOOLEAN                                         valid;\r
53 } res_interrupt_t;\r
54 \r
55 //\r
56 // The device extension of the bus itself.  From whence the PDO's are born.\r
57 //\r
58 \r
59 typedef struct _FDO_DEVICE_DATA\r
60 {\r
61         BUS_WMI_STD_DATA                        WmiData;\r
62         WDFWAITLOCK                                     ChildLock;\r
63         WDFDEVICE                                       FdoDevice;\r
64         struct pci_dev                          pci_dev;\r
65         int                                                     card_started;\r
66         int                                                     pci_bus_ifc_taken;\r
67         WDFDMAENABLER                           dma_enabler;\r
68         int                                                     dma_adapter_taken;\r
69         res_interrupt_t                         interrupt[MLX4_MAX_INTERRUPTS];\r
70         MLX4_BUS_IB_INTERFACE           bus_ib_ifc;\r
71         int                                                     children_created;\r
72         // Data for the Ethernet device\r
73         struct VipBusIfc                        mtnic_Ifc;\r
74 \r
75 } FDO_DEVICE_DATA, *PFDO_DEVICE_DATA;\r
76 \r
77 WDF_DECLARE_CONTEXT_TYPE_WITH_NAME(FDO_DEVICE_DATA, FdoGetData)\r
78 \r
79 //\r
80 // The device extension for the PDOs.\r
81 // That's of the mxe device which this bus driver enumerates.\r
82 //\r
83 \r
84 typedef struct _PDO_DEVICE_DATA\r
85 {\r
86         // Unique serial number of the device on the bus\r
87         ULONG                                                   SerialNo;\r
88         // WDF PDO object\r
89         WDFDEVICE                                               PdoDevice;\r
90         // FDO context\r
91         PFDO_DEVICE_DATA                                p_fdo;\r
92         // MLX4 BUS IB interface\r
93         WDF_QUERY_INTERFACE_CONFIG              qiMlx4Bus;\r
94         WDF_QUERY_INTERFACE_CONFIG              qiPciBus;\r
95  \r
96 } PDO_DEVICE_DATA, *PPDO_DEVICE_DATA;\r
97 \r
98 WDF_DECLARE_CONTEXT_TYPE_WITH_NAME(PDO_DEVICE_DATA, PdoGetData)\r
99 \r
100 \r
101 typedef struct _QUEUE_DATA\r
102 {\r
103         PFDO_DEVICE_DATA FdoData;\r
104 \r
105 } QUEUE_DATA, *PQUEUE_DATA;\r
106 \r
107 WDF_DECLARE_CONTEXT_TYPE_WITH_NAME(QUEUE_DATA, QueueGetData)\r
108 \r
109  //\r
110 // wmi.c\r
111 //\r
112 \r
113 NTSTATUS\r
114 WmiRegistration(\r
115         WDFDEVICE      Device\r
116 );\r
117 \r
118 NTSTATUS\r
119 EvtStdDataSetItem(\r
120         IN  WDFWMIINSTANCE WmiInstance,\r
121         IN  ULONG DataItemId,\r
122         IN  ULONG InBufferSize,\r
123         IN  PVOID InBuffer\r
124         );\r
125 \r
126 NTSTATUS\r
127 EvtStdDataSetInstance(\r
128         IN  WDFWMIINSTANCE WmiInstance,\r
129         IN  ULONG InBufferSize,\r
130         IN  PVOID InBuffer\r
131         );\r
132 \r
133 NTSTATUS\r
134 EvtStdDataQueryInstance(\r
135         IN  WDFWMIINSTANCE WmiInstance,\r
136         IN  ULONG OutBufferSize,\r
137         IN  PVOID OutBuffer,\r
138         OUT PULONG BufferUsed\r
139         );\r
140 \r
141 \r
142 //\r
143 // drv.c\r
144 //\r
145 \r
146 NTSTATUS\r
147 DriverEntry(\r
148         IN PDRIVER_OBJECT DriverObject,\r
149         IN PUNICODE_STRING RegistryPath\r
150         );\r
151 \r
152 void\r
153 EvtDriverUnload(\r
154         IN              WDFDRIVER  Driver\r
155         );\r
156         \r
157 NTSTATUS\r
158 EvtDriverDeviceAdd(\r
159         IN WDFDRIVER        Driver,\r
160         IN PWDFDEVICE_INIT  DeviceInit\r
161         );\r
162 \r
163 NTSTATUS\r
164 EvtPrepareHardware(\r
165         IN WDFDEVICE  Device,\r
166         IN WDFCMRESLIST  ResourcesRaw,\r
167         IN WDFCMRESLIST  ResourcesTranslated\r
168         );\r
169 \r
170 NTSTATUS\r
171 EvtReleaseHardware(\r
172         IN WDFDEVICE  Device,\r
173         IN WDFCMRESLIST  ResourcesTranslated\r
174         );\r
175 \r
176 NTSTATUS\r
177 EvtDeviceD0Exit(\r
178         IN WDFDEVICE  Device,\r
179         IN WDF_POWER_DEVICE_STATE  TargetState\r
180         );\r
181 \r
182 NTSTATUS\r
183 EvtDeviceD0Entry(\r
184         IN WDFDEVICE  Device,\r
185         IN WDF_POWER_DEVICE_STATE  PreviousState\r
186         );\r
187 \r
188 \r
189 //\r
190 // pci.c\r
191 //\r
192 \r
193 void\r
194 pci_free_msix_info_resources(\r
195         IN struct msix_saved_info *     pMsixInfo\r
196         );\r
197 \r
198 NTSTATUS\r
199 pci_save_config(\r
200         IN                              BUS_INTERFACE_STANDARD          *pBusIfc,\r
201                 OUT                     PCI_COMMON_CONFIG* const        pConfig\r
202         );\r
203 \r
204 NTSTATUS pci_get_vpd(\r
205         IN                              BUS_INTERFACE_STANDARD          *pBusIfc,\r
206         IN                              PCI_COMMON_CONFIG* const        pConfig,\r
207                 OUT                     UCHAR*                                          *p_vpd,\r
208         IN      OUT                     int*                                            p_vpd_size\r
209         );\r
210 \r
211 NTSTATUS\r
212 pci_hca_reset( \r
213         IN              struct pci_dev *pdev\r
214         );\r
215 \r
216 void\r
217 pci_get_uplink_info(\r
218         IN                              PCI_COMMON_CONFIG *     p_cfg,\r
219         OUT                     uplink_info_t *                 p_uplink_info\r
220         );\r
221 \r
222 NTSTATUS\r
223 pci_hca_enable(\r
224         IN              PBUS_INTERFACE_STANDARD         p_ifc,\r
225         IN              PCI_COMMON_CONFIG*                      p_cfg\r
226         );\r
227 \r
228 //\r
229 // pdo.c\r
230 //\r
231 \r
232 NTSTATUS\r
233 create_pdo(\r
234         __in WDFDEVICE  Device,\r
235         __in PWCHAR     HardwareIds,\r
236         __in PWCHAR     DeviceDescription,\r
237         __in ULONG      SerialNo\r
238 );\r
239 \r
240 \r
241 \r