summaryrefslogtreecommitdiffstats
path: root/private/mvdm/xms.486/xms.h
blob: dc92802711f66b3cf5c74a87d42a84313ccf7625 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
/* xms.h - main include file for dem
 *
 * Modification History
 *
 * Sudeepb 31-Mar-1991 Created
 *
 * williamh 25-Sept-1992 Added UMB support
 */

/*
#define WIN
#define FLAT_32
#include <nt.h>
#include <ntrtl.h>
#include <nturtl.h>

#define _WINDOWS
#include <windows.h>

*/

#ifdef DOS
#define SIGNALS
#endif

#ifdef OS2_16
#define OS2
#define SIGNALS
#endif

#ifdef OS2_32
#define OS2
#define FLAT_32
#endif

#include <stdarg.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <malloc.h>
#include <process.h>

#ifdef WIN_16
#define WIN
#define API16
#endif

#ifdef WIN_32
#define WIN
#define FLAT_32
#define TRUE_IF_WIN32	1
#include <nt.h>
#include <ntrtl.h>
#include <nturtl.h>
#else
#define TRUE_IF_WIN32	0
#endif

#ifdef FLAT_32
#ifndef i386
#define ALIGN_32
#else
#define NOALIGN_32
#endif
#endif

#ifdef WIN
#define _WINDOWS
#include <windows.h>
#endif

#ifdef SIGNALS
#include <conio.h>
#include <signal.h>
#endif

#ifdef OS2_32
#include <excpt.h>
#define XCPT_SIGNAL	0xC0010003
#endif
#include <xmsexp.h>
#include <suballoc.h>

#define SIZE_PARAGRAPH	16
#define XMSUMB_THRESHOLD    3 * SIZE_PARAGRAPH

/** Basic Typedefs of XMS **/

typedef VOID (*PFNSVC)(VOID);

typedef struct _ExtMemMove {
    ULONG   mm_len;		// Move Length
    USHORT  mm_hSource; 	// Source Handle
    ULONG   mm_SourceOffset;	// Source Offset
    USHORT  mm_hDest;		// Dest Handle
    ULONG   mm_DestOffset;	// Dest. offset
} EXTMEMMOVE, *PEXTMEMMOVE;


typedef struct _XMSUMB_ {
    WORD    Segment;
    WORD    Size;
    WORD    Owner;
    struct _XMSUMB_ *Next;
} XMSUMB, *PXMSUMB;

/** Function Prototypes */

VOID xmsA20		    (VOID);
VOID xmsAllocBlock	    (VOID);
VOID xmsFreeBlock	    (VOID);
VOID xmsReallocBlock	    (VOID);
VOID xmsMoveBlock	    (VOID);
VOID xmsSysPageSize	    (VOID);
VOID xmsQueryExtMem	    (VOID);
VOID xmsQueryFreeExtMem	    (VOID);
ULONG xmsGetMemorySize	    (BOOL);
ULONG xmsGetDefaultVDMSize  (VOID);
VOID xmsInitUMB		    (VOID);
VOID xmsRequestUMB	    (VOID);
VOID xmsReleaseUMB	    (VOID);
VOID xmsReleaseUMBNotify    (PVOID, ULONG);
VOID xmsInsertUMB           (PVOID, ULONG);
VOID xmsNotifyHookI15       (VOID);

VOID xmsDisableA20Wrapping   (VOID);
VOID xmsEnableA20Wrapping   (VOID);

NTSTATUS
xmsCommitBlock(
    ULONG BaseAddress,
    ULONG Size
    );

NTSTATUS
xmsDecommitBlock(
    ULONG BaseAddress,
    ULONG Size
    );

VOID
xmsMoveMemory(
    ULONG Source,
    ULONG Destination,
    ULONG Count
    );


#ifndef i386
BOOL sas_manage_xms (VOID * start_addr, ULONG cb, INT a_or_f);
#endif

/** External Data */

extern ULONG xmsMemorySize;
extern BYTE * pHimemA20State;