blob: 9007cf2909b89e47da6539d6fa2252e3bd1bbaee (
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
|
/*++
Copyright (c) 1992 Microsoft Corporation
Module Name:
os2tile.h
Abstract:
Defines the Tiling scheme number for os2ss. Included by thunkcom, client
loader & server.
Author:
Yaron Shamir (YaronS) 22-Oct-1992
Revision History:
Patrick Questembert (PatrickQ) 04-Nov-92
Fixed FLATTOSEL macro (needed ULONG cast) + changed ULONG cast position so
that FLAT may be a pointer to types of any length.
--*/
#define BASE_TILE 0x38000000
#define BASE_TILE_ZERO_BITS 1
//
// Preallocated areas at the top of the tiled region
//
#define _64K (64L*1024)
#define _512M ((512L*1024)*1024)
#define OD2TILEDHEAP_SIZE 20*_64K
#define VIOSECTION_BASE (BASE_TILE + _512M - _64K) // This must be the last one
#define OD2TILEDHEAP_BASE (VIOSECTION_BASE - OD2TILEDHEAP_SIZE)
#define OD2ENVIRONMENT_BASE (OD2TILEDHEAP_BASE - _64K)
#define GINFOSEG_BASE (OD2ENVIRONMENT_BASE - _64K)
#define R2STACKS_BASE (GINFOSEG_BASE - _64K)
#define R2XFER_BASE (R2STACKS_BASE - _64K)
#define DOSCALLS_BASE (R2XFER_BASE - _64K)
#if PMNT
// The 3 selectors below are used to reserve the same 2 LDT selectors in each
// OS/2 process so that they can map the video memory for PM apps.
// PMDISPLAY_DUMMY is required to allow mapping of frame buffer sections where
// the 2nd selector is not aligned to 64K + the length crosses the 64K
// boundary: in such a case, we need to have the next selector free.
#define PMDISPLAY_DUMMY (DOSCALLS_BASE - _64K)
#define PMDISPLAY_BASE2 (PMDISPLAY_DUMMY - _64K)
#define PMDISPLAY_BASE1 (PMDISPLAY_BASE2 - _64K)
#endif
//
// OD2MAXSEG_MEM must be set to the lowest virtual address which
// is pre-allocated.
//
#if PMNT
#define OD2MAXSEG_MEM (PMDISPLAY_BASE1)
#else
#define OD2MAXSEG_MEM (DOSCALLS_BASE)
#endif
#define OD2MAXSEG_BASE (OD2MAXSEG_MEM - _64K)
#define SELTOFLAT(SEL) (PVOID) (BASE_TILE + (((SEL) >> 3) << 16))
#define FLATTOSEL(FLAT) (USHORT) (((((ULONG)(FLAT) - BASE_TILE) & 0x1fff0000) >> 13) | 7)
#define FARPTRTOFLAT(FARPTR) (PVOID) (BASE_TILE + (((((ULONG)(FARPTR)) >> 19) << 16) | (((ULONG)(FARPTR)) & 0xffff)))
#define FLATTOFARPTR(FLAT) ( (((((ULONG)(FLAT) - BASE_TILE) & 0x1fff0000) << 3) | 0x00070000) | (((ULONG)(FLAT)) & 0x0000ffff) )
//
// The LDT_DISJOINT_ENTRIES parameter defines the number of LDT entries
// which are reserved for PROGRAM/DLL loading and shared memory segments.
// The entries are reserved at the top of the LDT table.
// PROGRAM/DLL segments are allocated from the bottom of the disjoint area
// while shared memory segments are allocated from the top of the disjoint
// area.
//
// This number MUST be a multiple of 32!
//
#define LDT_DISJOINT_ENTRIES 0x1800
#define FIRST_SHARED_SELECTOR ((0x2000-LDT_DISJOINT_ENTRIES)*8)
|