0bfd52110cf3a0c3165677ed19bbf13dfba79ec9
[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
17 #define EMS_MAX_HANDLES 16
18 #define EMS_PAGE_BITS 14
19 #define EMS_PAGE_SIZE (1 << EMS_PAGE_BITS)
20 #define EMS_PHYSICAL_PAGES 4
21
22 #define EMS_STATUS_OK 0x00
23 #define EMS_STATUS_INTERNAL_ERROR 0x80
24 #define EMS_STATUS_INVALID_HANDLE 0x83
25 #define EMS_STATUS_NO_MORE_HANDLES 0x85
26 #define EMS_STATUS_INSUFFICIENT_PAGES 0x88
27 #define EMS_STATUS_ZERO_PAGES 0x89
28 #define EMS_STATUS_INV_LOGICAL_PAGE 0x8A
29 #define EMS_STATUS_INV_PHYSICAL_PAGE 0x8B
30 #define EMS_STATUS_UNKNOWN_FUNCTION 0x8F
31
32 typedef struct _EMS_HANDLE
33 {
34 BOOLEAN Allocated;
35 USHORT PageCount;
36 LIST_ENTRY PageList;
37 UCHAR Name[8];
38 } EMS_HANDLE, *PEMS_HANDLE;
39
40 typedef struct _EMS_PAGE
41 {
42 LIST_ENTRY Entry;
43 USHORT Handle;
44 } EMS_PAGE, *PEMS_PAGE;
45
46 #pragma pack(push, 1)
47
48 typedef struct _EMS_COPY_DATA
49 {
50 ULONG RegionLength;
51 UCHAR SourceType;
52 USHORT SourceHandle;
53 USHORT SourceOffset;
54 USHORT SourceSegment;
55 UCHAR DestType;
56 USHORT DestHandle;
57 USHORT DestOffset;
58 USHORT DestSegment;
59 } EMS_COPY_DATA, *PEMS_COPY_DATA;
60
61 typedef struct _EMS_HARDWARE_INFO
62 {
63 WORD RawPageSize;
64 WORD AlternateRegSets;
65 WORD ContextAreaSize;
66 WORD DmaRegisterSets;
67 WORD DmaChannelOperation;
68 } EMS_HARDWARE_INFO, *PEMS_HARDWARE_INFO;
69
70 #pragma pack(pop)
71
72 #endif
73
74 /* FUNCTIONS ******************************************************************/
75
76 BOOLEAN EmsDrvInitialize(ULONG TotalPages);
77 VOID EmsDrvCleanup(VOID);