Create the AHCI branch for Aman's work
[reactos.git] / subsystems / mvdm / ntvdm / hardware / disk.h
1 /*
2 * COPYRIGHT: GPL - See COPYING in the top level directory
3 * PROJECT: ReactOS Virtual DOS Machine
4 * FILE: subsystems/mvdm/ntvdm/hardware/disk.h
5 * PURPOSE: Generic Disk Controller (Floppy, Hard Disk, ...)
6 * PROGRAMMERS: Hermes Belusca-Maito (hermes.belusca@sfr.fr)
7 */
8
9 #ifndef _DISK_H_
10 #define _DISK_H_
11
12 /* DEFINES ********************************************************************/
13
14 // https://msdn.microsoft.com/en-us/library/windows/desktop/aa363972(v=vs.85).aspx
15 // https://msdn.microsoft.com/en-us/library/windows/desktop/aa363976(v=vs.85).aspx
16 // https://msdn.microsoft.com/en-us/library/windows/desktop/aa363969(v=vs.85).aspx
17 // https://msdn.microsoft.com/en-us/library/windows/desktop/aa365231(v=vs.85).aspx
18
19 typedef struct _DISK_INFO
20 {
21 WORD Cylinders; // DWORD
22 BYTE Heads; // DWORD
23 BYTE Sectors; // QWORD
24 // SectorPerTrack; ??? // DWORD
25 WORD SectorSize;
26 } DISK_INFO, *PDISK_INFO;
27
28 typedef struct _DISK_IMAGE
29 {
30 DISK_INFO DiskInfo;
31 BYTE DiskType; // Type to return from BIOS & CMOS
32
33 BYTE LastOperationStatus;
34 // CurrentPos;
35
36 HANDLE hDisk;
37 BOOLEAN ReadOnly;
38 // WCHAR ImageFile[MAX_PATH];
39
40 } DISK_IMAGE, *PDISK_IMAGE;
41
42 typedef enum _DISK_TYPE
43 {
44 FLOPPY_DISK,
45 HARD_DISK,
46 MAX_DISK_TYPE
47 } DISK_TYPE;
48
49 /* FUNCTIONS ******************************************************************/
50
51 BOOLEAN
52 IsDiskPresent(IN PDISK_IMAGE DiskImage);
53
54 BYTE
55 SeekDisk(IN PDISK_IMAGE DiskImage,
56 IN WORD Cylinder,
57 IN BYTE Head,
58 IN BYTE Sector);
59
60 BYTE
61 ReadDisk(IN PDISK_IMAGE DiskImage,
62 IN WORD Cylinder,
63 IN BYTE Head,
64 IN BYTE Sector,
65 IN BYTE NumSectors);
66
67 BYTE
68 WriteDisk(IN PDISK_IMAGE DiskImage,
69 IN WORD Cylinder,
70 IN BYTE Head,
71 IN BYTE Sector,
72 IN BYTE NumSectors);
73
74 PDISK_IMAGE
75 RetrieveDisk(IN DISK_TYPE DiskType,
76 IN ULONG DiskNumber);
77
78 BOOLEAN
79 MountDisk(IN DISK_TYPE DiskType,
80 IN ULONG DiskNumber,
81 IN PCWSTR FileName,
82 IN BOOLEAN ReadOnly);
83
84 BOOLEAN
85 UnmountDisk(IN DISK_TYPE DiskType,
86 IN ULONG DiskNumber);
87
88 BOOLEAN DiskCtrlInitialize(VOID);
89 VOID DiskCtrlCleanup(VOID);
90
91 #endif /* _DISK_H_ */