xref: /reactos/drivers/storage/floppy/fdc/fdc.h (revision 886670e9)
1 /*
2  * PROJECT:        ReactOS Floppy Disk Controller Driver
3  * LICENSE:        GNU GPLv2 only as published by the Free Software Foundation
4  * FILE:           drivers/storage/fdc/fdc/fdc.h
5  * PURPOSE:        Common header file
6  * PROGRAMMERS:    Eric Kohl
7  */
8 
9 #ifndef _FDC_PCH_
10 #define _FDC_PCH_
11 
12 #include <ntifs.h>
13 
14 #define MAX_DEVICE_NAME 255
15 #define MAX_ARC_PATH_LEN 255
16 #define MAX_DRIVES_PER_CONTROLLER 4
17 #define MAX_CONTROLLERS 4
18 
19 struct _CONTROLLER_INFO;
20 
21 typedef struct _DRIVE_INFO
22 {
23     struct _CONTROLLER_INFO  *ControllerInfo;
24     UCHAR                    UnitNumber; /* 0,1,2,3 */
25     ULONG                    PeripheralNumber;
26     PDEVICE_OBJECT           DeviceObject;
27     CM_FLOPPY_DEVICE_DATA    FloppyDeviceData;
28 //    LARGE_INTEGER            MotorStartTime;
29 //    DISK_GEOMETRY            DiskGeometry;
30 //    UCHAR                    BytesPerSectorCode;
31 //    WCHAR                    SymLinkBuffer[MAX_DEVICE_NAME];
32 //    WCHAR                    ArcPathBuffer[MAX_ARC_PATH_LEN];
33 //    ULONG                    DiskChangeCount;
34 //    BOOLEAN                  Initialized;
35 } DRIVE_INFO, *PDRIVE_INFO;
36 
37 typedef struct _CONTROLLER_INFO
38 {
39     BOOLEAN          Populated;
40 //    BOOLEAN          Initialized;
41 //    ULONG            ControllerNumber;
42 //    INTERFACE_TYPE   InterfaceType;
43 //    ULONG            BusNumber;
44 //    ULONG            Level;
45 //    KIRQL            MappedLevel;
46 //    ULONG            Vector;
47 //    ULONG            MappedVector;
48 //    KINTERRUPT_MODE  InterruptMode;
49     PUCHAR           BaseAddress;
50 //    ULONG            Dma;
51 //    ULONG            MapRegisters;
52 //    PVOID            MapRegisterBase;
53 //    BOOLEAN          Master;
54 //    KEVENT           SynchEvent;
55 //    KDPC             Dpc;
56 //    PKINTERRUPT      InterruptObject;
57 //    PADAPTER_OBJECT  AdapterObject;
58     UCHAR            NumberOfDrives;
59 //    BOOLEAN          ImpliedSeeks;
60     DRIVE_INFO       DriveInfo[MAX_DRIVES_PER_CONTROLLER];
61 //    PDRIVE_INFO      CurrentDrive;
62 //    BOOLEAN          Model30;
63 //    KEVENT           MotorStoppedEvent;
64 //    KTIMER           MotorTimer;
65 //    KDPC             MotorStopDpc;
66 //    BOOLEAN          StopDpcQueued;
67 } CONTROLLER_INFO, *PCONTROLLER_INFO;
68 
69 
70 typedef struct _COMMON_DEVICE_EXTENSION
71 {
72     BOOLEAN IsFDO;
73     PDEVICE_OBJECT DeviceObject;
74 } COMMON_DEVICE_EXTENSION, *PCOMMON_DEVICE_EXTENSION;
75 
76 typedef struct _FDO_DEVICE_EXTENSION
77 {
78     COMMON_DEVICE_EXTENSION Common;
79 
80     PDEVICE_OBJECT LowerDevice;
81     PDEVICE_OBJECT Pdo;
82 
83     CONTROLLER_INFO ControllerInfo;
84 
85 } FDO_DEVICE_EXTENSION, *PFDO_DEVICE_EXTENSION;
86 
87 
88 typedef struct _PDO_DEVICE_EXTENSION
89 {
90     COMMON_DEVICE_EXTENSION Common;
91 
92     PDEVICE_OBJECT Fdo;
93     PDRIVE_INFO DriveInfo;
94 
95     UNICODE_STRING DeviceDescription; // REG_SZ
96     UNICODE_STRING DeviceId;          // REG_SZ
97     UNICODE_STRING InstanceId;        // REG_SZ
98     UNICODE_STRING HardwareIds;       // REG_MULTI_SZ
99     UNICODE_STRING CompatibleIds;     // REG_MULTI_SZ
100 } PDO_DEVICE_EXTENSION, *PPDO_DEVICE_EXTENSION;
101 
102 #define FDC_TAG 'acdF'
103 
104 /* fdo.c */
105 
106 NTSTATUS
107 NTAPI
108 FdcFdoPnp(
109     IN PDEVICE_OBJECT DeviceObject,
110     IN PIRP Irp);
111 
112 /* misc.c */
113 
114 NTSTATUS
115 DuplicateUnicodeString(
116     IN ULONG Flags,
117     IN PCUNICODE_STRING SourceString,
118     OUT PUNICODE_STRING DestinationString);
119 
120 /* pdo.c */
121 
122 NTSTATUS
123 NTAPI
124 FdcPdoPnp(
125     IN PDEVICE_OBJECT DeviceObject,
126     IN PIRP Irp);
127 
128 #endif /* _FDC_PCH_ */
129