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