xref: /reactos/subsystems/mvdm/ntvdm/hardware/disk.h (revision fe11f7a2)
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://learn.microsoft.com/en-us/windows/win32/api/winioctl/ns-winioctl-disk_geometry
15 // https://learn.microsoft.com/en-us/windows/win32/api/winioctl/ns-winioctl-disk_int13_info
16 // https://learn.microsoft.com/en-us/windows/win32/api/winioctl/ns-winioctl-disk_ex_int13_info
17 // https://learn.microsoft.com/en-us/windows/win32/api/winioctl/ne-winioctl-media_type
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_ */
92