Release 940301
[wine/dcerpc.git] / include / segmem.h
blobb0f38f7f997648ae87c298950f623ea40a142179
1 /* $Id: segmem.h,v 1.3 1993/07/04 04:04:21 root Exp root $
2 */
3 /*
4 * Copyright Robert J. Amstadt, 1993
5 */
6 #ifndef SEGMEM_H
7 #define SEGMEM_H
9 #ifdef __linux__
10 #define HAVE_IPC
11 #include <sys/ipc.h>
12 #include <sys/shm.h>
13 #endif
15 #if defined(__NetBSD__) || defined(__FreeBSD__)
16 #define HAVE_IPC
17 #include <sys/types.h>
18 #include <sys/ipc.h>
19 #include <sys/shm.h>
20 #define SHMSEG 32 /* XXX SEMMNI /usr/src/sys/conf/param.h */
21 #define SHM_RANGE_START 0x40000000
22 #endif
25 * Array to track selector allocation.
27 #define MAX_SELECTORS 512
28 #define SELECTOR_ISFREE 0x8000
29 #define SELECTOR_INDEXMASK 0x0fff
31 extern unsigned short SelectorMap[MAX_SELECTORS];
33 #ifdef HAVE_IPC
34 #define SAFEMAKEPTR(s, o) (((int) (s) << 16) | ((o) & 0xffff))
35 #define FIXPTR(p) (p)
36 #else
37 #define SAFEMAKEPTR(s, o) \
38 (((int) SelectorMap[SelectorMap[(s) >> 3] & SELECTOR_INDEXMASK] << 19) \
39 | 0x70000 | ((o) & 0xffff))
40 #define FIXPTR(p) SAFEMAKEPTR((unsigned long) (p) >> 16, (p))
41 #endif
44 * Structure to hold info about each selector we create.
47 typedef struct segment_descriptor_s
49 void *base_addr; /* Pointer to segment in flat memory */
50 unsigned int length; /* Length of segment */
51 unsigned int flags; /* Segment flags (see neexe.h and below)*/
52 unsigned short selector; /* Selector used to access this segment */
53 unsigned short owner; /* Handle of owner program */
54 unsigned char type; /* DATA or CODE */
55 #ifdef HAVE_IPC
56 key_t shm_key; /* Shared memory key or IPC_PRIVATE */
57 #endif
58 } SEGDESC;
60 extern int IPCCopySelector(int i_old, unsigned long new, int swap_type);
63 * Additional flags
65 #define NE_SEGFLAGS_MALLOCED 0x00010000 /* Memory allocated with malloc() */
68 * Global memory flags
70 #define GLOBAL_FLAGS_MOVEABLE 0x0002
71 #define GLOBAL_FLAGS_ZEROINIT 0x0040
72 #define GLOBAL_FLAGS_CODE 0x00010000
73 #define GLOBAL_FLAGS_EXECUTEONLY 0x00020000
74 #define GLOBAL_FLAGS_READONLY 0x00020000
76 #define FIRST_SELECTOR 8
78 static __inline__ int Is16bitAddress(void *address)
80 return ((int) address >= (((FIRST_SELECTOR << 3) | 0x0007) << 16));
83 extern SEGDESC Segments[];
85 #endif /* SEGMEM_H */