30ca7fe78dcd1c5ebaf03e4f67f660e28f0bb86c
[reactos.git] / drivers / storage / port / storport / precomp.h
1 /*
2 * PROJECT: ReactOS Storport Driver
3 * LICENSE: GPL-2.0+ (https://spdx.org/licenses/GPL-2.0+)
4 * PURPOSE: Storport driver common header file
5 * COPYRIGHT: Copyright 2017 Eric Kohl (eric.kohl@reactos.org)
6 */
7
8 #ifndef _STORPORT_PCH_
9 #define _STORPORT_PCH_
10
11 #include <wdm.h>
12 #include <ntddk.h>
13 #include <stdio.h>
14 #include <memory.h>
15
16 /* Declare STORPORT_API functions as exports rather than imports */
17 #define _STORPORT_
18 #include <storport.h>
19
20 #include <ntddscsi.h>
21 #include <ntdddisk.h>
22 #include <mountdev.h>
23 #include <wdmguid.h>
24
25 /* Memory Tags */
26 #define TAG_GLOBAL_DATA 'DGtS'
27 #define TAG_INIT_DATA 'DItS'
28 #define TAG_MINIPORT_DATA 'DMtS'
29 #define TAG_ACCRESS_RANGE 'RAtS'
30 #define TAG_RESOURCE_LIST 'LRtS'
31 #define TAG_ADDRESS_MAPPING 'MAtS'
32
33 typedef enum
34 {
35 dsStopped,
36 dsStarted,
37 dsPaused,
38 dsRemoved,
39 dsSurpriseRemoved
40 } DEVICE_STATE;
41
42 typedef enum
43 {
44 InvalidExtension = 0,
45 DriverExtension,
46 FdoExtension,
47 PdoExtension
48 } EXTENSION_TYPE;
49
50 typedef struct _DRIVER_INIT_DATA
51 {
52 LIST_ENTRY Entry;
53 HW_INITIALIZATION_DATA HwInitData;
54 } DRIVER_INIT_DATA, *PDRIVER_INIT_DATA;
55
56 typedef struct _DRIVER_OBJECT_EXTENSION
57 {
58 EXTENSION_TYPE ExtensionType;
59 PDRIVER_OBJECT DriverObject;
60
61 KSPIN_LOCK AdapterListLock;
62 LIST_ENTRY AdapterListHead;
63 ULONG AdapterCount;
64
65 LIST_ENTRY InitDataListHead;
66 } DRIVER_OBJECT_EXTENSION, *PDRIVER_OBJECT_EXTENSION;
67
68 typedef struct _MINIPORT_DEVICE_EXTENSION
69 {
70 struct _MINIPORT *Miniport;
71 UCHAR HwDeviceExtension[0];
72 } MINIPORT_DEVICE_EXTENSION, *PMINIPORT_DEVICE_EXTENSION;
73
74 typedef struct _MINIPORT
75 {
76 struct _FDO_DEVICE_EXTENSION *DeviceExtension;
77 PHW_INITIALIZATION_DATA InitData;
78 PORT_CONFIGURATION_INFORMATION PortConfig;
79 PMINIPORT_DEVICE_EXTENSION MiniportExtension;
80 } MINIPORT, *PMINIPORT;
81
82 typedef struct _FDO_DEVICE_EXTENSION
83 {
84 EXTENSION_TYPE ExtensionType;
85
86 PDEVICE_OBJECT Device;
87 PDEVICE_OBJECT LowerDevice;
88 PDEVICE_OBJECT PhysicalDevice;
89 PDRIVER_OBJECT_EXTENSION DriverExtension;
90 DEVICE_STATE PnpState;
91 LIST_ENTRY AdapterListEntry;
92 MINIPORT Miniport;
93 ULONG BusNumber;
94 ULONG SlotNumber;
95 PCM_RESOURCE_LIST AllocatedResources;
96 PCM_RESOURCE_LIST TranslatedResources;
97 BUS_INTERFACE_STANDARD BusInterface;
98 BOOLEAN BusInitialized;
99 PMAPPED_ADDRESS MappedAddressList;
100 } FDO_DEVICE_EXTENSION, *PFDO_DEVICE_EXTENSION;
101
102
103 typedef struct _PDO_DEVICE_EXTENSION
104 {
105 EXTENSION_TYPE ExtensionType;
106
107 PDEVICE_OBJECT AttachedFdo;
108
109 DEVICE_STATE PnpState;
110
111 } PDO_DEVICE_EXTENSION, *PPDO_DEVICE_EXTENSION;
112
113
114 /* fdo.c */
115
116 NTSTATUS
117 NTAPI
118 PortFdoPnp(
119 _In_ PDEVICE_OBJECT DeviceObject,
120 _In_ PIRP Irp);
121
122
123 /* miniport.c */
124
125 NTSTATUS
126 MiniportInitialize(
127 _In_ PMINIPORT Miniport,
128 _In_ PFDO_DEVICE_EXTENSION DeviceExtension,
129 _In_ PHW_INITIALIZATION_DATA HwInitializationData);
130
131 NTSTATUS
132 MiniportFindAdapter(
133 _In_ PMINIPORT Miniport);
134
135 NTSTATUS
136 MiniportHwInitialize(
137 _In_ PMINIPORT Miniport);
138
139
140 /* misc.c */
141
142 NTSTATUS
143 ForwardIrpAndWait(
144 _In_ PDEVICE_OBJECT LowerDevice,
145 _In_ PIRP Irp);
146
147 NTSTATUS
148 NTAPI
149 ForwardIrpAndForget(
150 _In_ PDEVICE_OBJECT LowerDevice,
151 _In_ PIRP Irp);
152
153 INTERFACE_TYPE
154 GetBusInterface(
155 PDEVICE_OBJECT DeviceObject);
156
157 PCM_RESOURCE_LIST
158 CopyResourceList(
159 POOL_TYPE PoolType,
160 PCM_RESOURCE_LIST Source);
161
162 NTSTATUS
163 QueryBusInterface(
164 PDEVICE_OBJECT DeviceObject,
165 PGUID Guid,
166 USHORT Size,
167 USHORT Version,
168 PBUS_INTERFACE_STANDARD Interface,
169 PVOID InterfaceSpecificData);
170
171 BOOLEAN
172 TranslateResourceListAddress(
173 PFDO_DEVICE_EXTENSION DeviceExtension,
174 INTERFACE_TYPE BusType,
175 ULONG SystemIoBusNumber,
176 STOR_PHYSICAL_ADDRESS IoAddress,
177 ULONG NumberOfBytes,
178 BOOLEAN InIoSpace,
179 PPHYSICAL_ADDRESS TranslatedAddress);
180
181 NTSTATUS
182 AllocateAddressMapping(
183 PMAPPED_ADDRESS *MappedAddressList,
184 STOR_PHYSICAL_ADDRESS IoAddress,
185 PVOID MappedAddress,
186 ULONG NumberOfBytes,
187 ULONG BusNumber);
188
189 /* pdo.c */
190
191 NTSTATUS
192 NTAPI
193 PortPdoPnp(
194 _In_ PDEVICE_OBJECT DeviceObject,
195 _In_ PIRP Irp);
196
197
198 /* storport.c */
199
200 PHW_INITIALIZATION_DATA
201 PortGetDriverInitData(
202 PDRIVER_OBJECT_EXTENSION DriverExtension,
203 INTERFACE_TYPE InterfaceType);
204
205 NTSTATUS
206 NTAPI
207 DriverEntry(
208 _In_ PDRIVER_OBJECT DriverObject,
209 _In_ PUNICODE_STRING RegistryPath);
210
211 #endif /* _STORPORT_PCH_ */