Add pciidex (controller driver) and pciide (miniport driver). They enumerate channels...
[reactos.git] / reactos / drivers / storage / pciidex / pciidex.h
1 #include <ntddk.h>
2 #include <ntifs.h>
3 #include <ide.h>
4 #include <wdmguid.h>
5 #include <stdio.h>
6
7 /* FIXME: I don't know why it is not defined anywhere... */
8 NTSTATUS STDCALL
9 IoAttachDeviceToDeviceStackSafe(
10 IN PDEVICE_OBJECT SourceDevice,
11 IN PDEVICE_OBJECT TargetDevice,
12 OUT PDEVICE_OBJECT *AttachedToDeviceObject);
13
14 typedef struct _PCIIDEX_DRIVER_EXTENSION
15 {
16 PCONTROLLER_PROPERTIES HwGetControllerProperties;
17 ULONG MiniControllerExtensionSize;
18 PCIIDE_UDMA_MODES_SUPPORTED HwUdmaModesSupported;
19 } PCIIDEX_DRIVER_EXTENSION, *PPCIIDEX_DRIVER_EXTENSION;
20
21 typedef struct _COMMON_DEVICE_EXTENSION
22 {
23 BOOLEAN IsFDO;
24 } COMMON_DEVICE_EXTENSION, *PCOMMON_DEVICE_EXTENSION;
25
26 typedef struct _FDO_DEVICE_EXTENSION
27 {
28 COMMON_DEVICE_EXTENSION Common;
29
30 PBUS_INTERFACE_STANDARD BusInterface;
31 IDE_CONTROLLER_PROPERTIES Properties;
32 PHYSICAL_ADDRESS BusMasterPortBase;
33 PDEVICE_OBJECT LowerDevice;
34 PDEVICE_OBJECT Pdo[MAX_IDE_CHANNEL];
35 PBYTE MiniControllerExtension[0];
36 } FDO_DEVICE_EXTENSION, *PFDO_DEVICE_EXTENSION;
37
38 typedef struct _PDO_DEVICE_EXTENSION
39 {
40 COMMON_DEVICE_EXTENSION Common;
41
42 ULONG Channel;
43 PDEVICE_OBJECT ControllerFdo;
44 } PDO_DEVICE_EXTENSION, *PPDO_DEVICE_EXTENSION;
45
46 /* fdo.c */
47
48 NTSTATUS NTAPI
49 PciIdeXAddDevice(
50 IN PDRIVER_OBJECT DriverObject,
51 IN PDEVICE_OBJECT Pdo);
52
53 NTSTATUS NTAPI
54 PciIdeXFdoPnpDispatch(
55 IN PDEVICE_OBJECT DeviceObject,
56 IN PIRP Irp);
57
58 /* misc.c */
59
60 NTSTATUS NTAPI
61 PciIdeXGenericCompletion(
62 IN PDEVICE_OBJECT DeviceObject,
63 IN PIRP Irp,
64 IN PVOID Context);
65
66 NTSTATUS
67 ForwardIrpAndWait(
68 IN PDEVICE_OBJECT DeviceObject,
69 IN PIRP Irp);
70
71 NTSTATUS NTAPI
72 ForwardIrpAndForget(
73 IN PDEVICE_OBJECT DeviceObject,
74 IN PIRP Irp);
75
76 /* pdo.c */
77
78 NTSTATUS NTAPI
79 PciIdeXPdoPnpDispatch(
80 IN PDEVICE_OBJECT DeviceObject,
81 IN PIRP Irp);