9156956a1decd38aa674d525849e1996fca1c63a
[reactos.git] / reactos / subsystems / mvdm / ntvdm / dos / dos32krnl / emsdrv.h
1 /*
2 * COPYRIGHT: GPLv2+ - See COPYING in the top level directory
3 * PROJECT: ReactOS Virtual DOS Machine
4 * FILE: emsdrv.h
5 * PURPOSE: DOS EMS Driver
6 * PROGRAMMERS: Aleksandar Andrejevic <theflash AT sdf DOT lonestar DOT org>
7 */
8
9 #ifndef _EMSDRV_H_
10 #define _EMSDRV_H_
11
12 /* DEFINITIONS ****************************************************************/
13
14 #define EMS_VERSION_NUM 0x40
15 #define EMS_INTERRUPT_NUM 0x67
16 #define EMS_SEGMENT 0xD000 // Default segment
17 // Specification: Operating system handle 0x0000; user handles from 0x0001 to 0x00FE
18 #define EMS_MAX_HANDLES 255
19 #define EMS_PAGE_BITS 14
20 #define EMS_PAGE_SIZE (1 << EMS_PAGE_BITS)
21 #define EMS_PHYSICAL_PAGES 4
22
23 /* 16 MB of EMS memory */
24 #define EMS_TOTAL_PAGES 1024
25
26 #define EMS_STATUS_SUCCESS 0x00
27 #define EMS_STATUS_INTERNAL_ERROR 0x80
28 #define EMS_STATUS_INVALID_HANDLE 0x83
29 #define EMS_STATUS_UNKNOWN_FUNCTION 0x84
30 #define EMS_STATUS_NO_MORE_HANDLES 0x85
31 #define EMS_STATUS_INSUFFICIENT_PAGES 0x88
32 #define EMS_STATUS_ZERO_PAGES 0x89
33 #define EMS_STATUS_INV_LOGICAL_PAGE 0x8A
34 #define EMS_STATUS_INV_PHYSICAL_PAGE 0x8B
35 #define EMS_STATUS_INVALID_SUBFUNCTION 0x8F
36 #define EMS_STATUS_HANDLE_NOT_FOUND 0xA0
37 #define EMS_STATUS_UNNAMED_HANDLE 0xA1
38 #define EMS_STATUS_HANDLE_ALREADY_EXISTS 0xA1
39
40 typedef struct _EMS_HANDLE
41 {
42 BOOLEAN Allocated;
43 USHORT PageCount;
44 LIST_ENTRY PageList;
45 UCHAR Name[8];
46 } EMS_HANDLE, *PEMS_HANDLE;
47
48 typedef struct _EMS_PAGE
49 {
50 LIST_ENTRY Entry;
51 USHORT Handle;
52 } EMS_PAGE, *PEMS_PAGE;
53
54 #pragma pack(push, 1)
55
56 typedef struct _EMS_HANDLE_PAGE_INFO
57 {
58 USHORT Handle;
59 USHORT PageCount;
60 } EMS_HANDLE_PAGE_INFO, *PEMS_HANDLE_PAGE_INFO;
61
62 typedef struct _EMS_HANDLE_DIR_ENTRY
63 {
64 USHORT Handle;
65 UCHAR Name[8];
66 } EMS_HANDLE_DIR_ENTRY, *PEMS_HANDLE_DIR_ENTRY;
67
68 typedef struct _EMS_COPY_DATA
69 {
70 ULONG RegionLength;
71 UCHAR SourceType;
72 USHORT SourceHandle;
73 USHORT SourceOffset;
74 USHORT SourceSegment;
75 UCHAR DestType;
76 USHORT DestHandle;
77 USHORT DestOffset;
78 USHORT DestSegment;
79 } EMS_COPY_DATA, *PEMS_COPY_DATA;
80
81 typedef struct _EMS_MAPPABLE_PHYS_PAGE
82 {
83 USHORT PageSegment;
84 USHORT PageNumber;
85 } EMS_MAPPABLE_PHYS_PAGE, *PEMS_MAPPABLE_PHYS_PAGE;
86
87 typedef struct _EMS_HARDWARE_INFO
88 {
89 WORD RawPageSize;
90 WORD AlternateRegSets;
91 WORD ContextAreaSize;
92 WORD DmaRegisterSets;
93 WORD DmaChannelOperation;
94 } EMS_HARDWARE_INFO, *PEMS_HARDWARE_INFO;
95
96 #pragma pack(pop)
97
98 /* FUNCTIONS ******************************************************************/
99
100 BOOLEAN EmsDrvInitialize(USHORT Segment, ULONG TotalPages);
101 VOID EmsDrvCleanup(VOID);
102
103 #endif // _EMSDRV_H_
104
105 /* EOF */