[STORPORT] Implement parts of StorPortGetPhysicalAddress() that handle the uncached...
[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 PVOID UncachedExtensionVirtualBase;
101 PHYSICAL_ADDRESS UncachedExtensionPhysicalBase;
102 ULONG UncachedExtensionSize;
103
104 } FDO_DEVICE_EXTENSION, *PFDO_DEVICE_EXTENSION;
105
106
107 typedef struct _PDO_DEVICE_EXTENSION
108 {
109 EXTENSION_TYPE ExtensionType;
110
111 PDEVICE_OBJECT AttachedFdo;
112
113 DEVICE_STATE PnpState;
114
115 } PDO_DEVICE_EXTENSION, *PPDO_DEVICE_EXTENSION;
116
117
118 /* fdo.c */
119
120 NTSTATUS
121 NTAPI
122 PortFdoPnp(
123 _In_ PDEVICE_OBJECT DeviceObject,
124 _In_ PIRP Irp);
125
126
127 /* miniport.c */
128
129 NTSTATUS
130 MiniportInitialize(
131 _In_ PMINIPORT Miniport,
132 _In_ PFDO_DEVICE_EXTENSION DeviceExtension,
133 _In_ PHW_INITIALIZATION_DATA HwInitializationData);
134
135 NTSTATUS
136 MiniportFindAdapter(
137 _In_ PMINIPORT Miniport);
138
139 NTSTATUS
140 MiniportHwInitialize(
141 _In_ PMINIPORT Miniport);
142
143
144 /* misc.c */
145
146 NTSTATUS
147 ForwardIrpAndWait(
148 _In_ PDEVICE_OBJECT LowerDevice,
149 _In_ PIRP Irp);
150
151 NTSTATUS
152 NTAPI
153 ForwardIrpAndForget(
154 _In_ PDEVICE_OBJECT LowerDevice,
155 _In_ PIRP Irp);
156
157 INTERFACE_TYPE
158 GetBusInterface(
159 PDEVICE_OBJECT DeviceObject);
160
161 PCM_RESOURCE_LIST
162 CopyResourceList(
163 POOL_TYPE PoolType,
164 PCM_RESOURCE_LIST Source);
165
166 NTSTATUS
167 QueryBusInterface(
168 PDEVICE_OBJECT DeviceObject,
169 PGUID Guid,
170 USHORT Size,
171 USHORT Version,
172 PBUS_INTERFACE_STANDARD Interface,
173 PVOID InterfaceSpecificData);
174
175 BOOLEAN
176 TranslateResourceListAddress(
177 PFDO_DEVICE_EXTENSION DeviceExtension,
178 INTERFACE_TYPE BusType,
179 ULONG SystemIoBusNumber,
180 STOR_PHYSICAL_ADDRESS IoAddress,
181 ULONG NumberOfBytes,
182 BOOLEAN InIoSpace,
183 PPHYSICAL_ADDRESS TranslatedAddress);
184
185 NTSTATUS
186 AllocateAddressMapping(
187 PMAPPED_ADDRESS *MappedAddressList,
188 STOR_PHYSICAL_ADDRESS IoAddress,
189 PVOID MappedAddress,
190 ULONG NumberOfBytes,
191 ULONG BusNumber);
192
193 /* pdo.c */
194
195 NTSTATUS
196 NTAPI
197 PortPdoPnp(
198 _In_ PDEVICE_OBJECT DeviceObject,
199 _In_ PIRP Irp);
200
201
202 /* storport.c */
203
204 PHW_INITIALIZATION_DATA
205 PortGetDriverInitData(
206 PDRIVER_OBJECT_EXTENSION DriverExtension,
207 INTERFACE_TYPE InterfaceType);
208
209 NTSTATUS
210 NTAPI
211 DriverEntry(
212 _In_ PDRIVER_OBJECT DriverObject,
213 _In_ PUNICODE_STRING RegistryPath);
214
215 #endif /* _STORPORT_PCH_ */