From 8a54d267f0169a55e54eeacef04b4b57ed2acca3 Mon Sep 17 00:00:00 2001 From: Ben Gras Date: Mon, 21 Sep 2009 14:23:10 +0000 Subject: [PATCH] - VM_KERN_NOPAGEZERO feature is gone - sys_getbiosbuffer feature is gone (from kernel; available from vm) - bump version number because munmap() calls that newly compiled binaries will do trigger an ugly (but harmless) error message in older VM's - some new VM calls and flags, the new IPC calls - some new CR0 register bits - added files for shared memory --- include/Makefile | 10 ++-- include/errno.h | 1 + include/minix/callnr.h | 2 +- include/minix/com.h | 111 +++++++++++++++++++++++++++++++++++++++-- include/minix/config.h | 5 +- include/minix/const.h | 2 - include/minix/crtso.h | 8 +++ include/minix/debug.h | 13 +++++ include/minix/ds.h | 3 ++ include/minix/minlib.h | 2 +- include/minix/rs.h | 6 +++ include/minix/syslib.h | 10 ++-- include/minix/type.h | 6 +-- include/minix/vm.h | 5 +- include/netinet/in.h | 1 + include/sys/ipc.h | 42 ++++++++++++++++ include/sys/mman.h | 6 +++ include/sys/sem.h | 81 ++++++++++++++++++++++++++++++ include/sys/shm.h | 77 ++++++++++++++++++++++++++++ include/sys/signal.h | 2 + include/sys/timeb.h | 18 +++++++ include/sys/types.h | 5 ++ include/sys/vm_i386.h | 7 +++ include/syslog.h | 1 + include/unistd.h | 2 + 25 files changed, 399 insertions(+), 27 deletions(-) create mode 100755 include/minix/crtso.h create mode 100644 include/minix/debug.h create mode 100644 include/sys/ipc.h create mode 100644 include/sys/sem.h create mode 100644 include/sys/shm.h create mode 100644 include/sys/signal.h create mode 100644 include/sys/timeb.h diff --git a/include/Makefile b/include/Makefile index 5f71fc981..7ee12e638 100644 --- a/include/Makefile +++ b/include/Makefile @@ -8,11 +8,11 @@ all:: clean:: install:: - -rm -rf $(INC) - mkdir -p $(INC) - cpdir . $(INC) - @chown -R bin $(INC) - @rm -f $(INC)/Makefile + #-rm -rf $(INC) + #mkdir -p $(INC) + #cpdir . $(INC) + #@chown -R bin $(INC) + #@rm -f $(INC)/Makefile gcc: install SHELL=/bin/sh; if [ -f $(MKHEADERS343) ] ; then sh -e $(MKHEADERS343) ; fi diff --git a/include/errno.h b/include/errno.h index 12fa7b967..0339d2f48 100755 --- a/include/errno.h +++ b/include/errno.h @@ -75,6 +75,7 @@ extern int errno; /* place where the error numbers go */ #define ENOTEMPTY (_SIGN 39) /* directory not empty */ #define ELOOP (_SIGN 40) /* too many levels of symlinks detected */ #define ERESTART (_SIGN 41) /* driver restarted */ +#define EIDRM (_SIGN 43) /* Identifier removed */ /* The following errors relate to networking. */ #define EPACKSIZE (_SIGN 50) /* invalid packet size for some protocol */ diff --git a/include/minix/callnr.h b/include/minix/callnr.h index 1c91cce24..c37761681 100755 --- a/include/minix/callnr.h +++ b/include/minix/callnr.h @@ -19,7 +19,7 @@ #define BRK 17 #define STAT 18 #define LSEEK 19 -#define GETPID 20 +#define MINIX_GETPID 20 #define MOUNT 21 #define UMOUNT 22 #define SETUID 23 diff --git a/include/minix/com.h b/include/minix/com.h index 69f2c61bb..202a79968 100755 --- a/include/minix/com.h +++ b/include/minix/com.h @@ -310,7 +310,6 @@ # define SYS_GETINFO (KERNEL_CALL + 26) /* sys_getinfo() */ # define SYS_ABORT (KERNEL_CALL + 27) /* sys_abort() */ # define SYS_IOPENABLE (KERNEL_CALL + 28) /* sys_enable_iop() */ -# define SYS_VM_SETBUF (KERNEL_CALL + 29) /* sys_vm_setbuf() */ # define SYS_SAFECOPYFROM (KERNEL_CALL + 31) /* sys_safecopyfrom() */ # define SYS_SAFECOPYTO (KERNEL_CALL + 32) /* sys_safecopyto() */ # define SYS_VSAFECOPY (KERNEL_CALL + 33) /* sys_vsafecopy() */ @@ -525,6 +524,7 @@ * and sys_fork */ #define PR_FORK_FLAGS m1_i3 +#define PR_FORK_MSGADDR m1_p1 /* Field names for SYS_INT86 */ #define INT86_REG86 m1_p1 /* pointer to registers */ @@ -584,6 +584,7 @@ #define SVMCTL_MRG_LEN m1_i1 /* MEMREQ_GET reply: length */ #define SVMCTL_MRG_WRITE m1_i2 /* MEMREQ_GET reply: writeflag */ #define SVMCTL_MRG_EP m1_i3 /* MEMREQ_GET reply: process */ +#define SVMCTL_MRG_REQUESTOR m1_p2 /* MEMREQ_GET reply: requestor */ /* Codes and field names for SYS_SYSCTL. */ #define SYSCTL_CODE m1_i1 /* SYSCTL_CODE_* below */ @@ -602,6 +603,12 @@ #define VMCTL_MEMREQ_REPLY 15 #define VMCTL_INCSP 16 #define VMCTL_NOPAGEZERO 18 +#define VMCTL_I386_KERNELLIMIT 19 +#define VMCTL_I386_PAGEDIRS 20 +#define VMCTL_I386_FREEPDE 23 +#define VMCTL_ENABLE_PAGING 24 +#define VMCTL_I386_INVLPG 25 +#define VMCTL_FLUSHTLB 26 /* Field names for SYS_VTIMER. */ #define VT_WHICH m2_i1 /* which timer to set/retrieve */ @@ -629,6 +636,7 @@ * arguments are passed in * a struct rs_start */ +#define RS_LOOKUP (DS_RQ_BASE + 8) /* lookup server name */ # define RS_CMD_ADDR m1_p1 /* command string */ # define RS_CMD_LEN m1_i1 /* length of command */ @@ -637,6 +645,9 @@ # define RS_ENDPOINT m1_i1 /* endpoint number in reply */ +# define RS_NAME m1_p1 /* name */ +# define RS_NAME_LEN m1_i1 /* namelen */ + /*===========================================================================* * Messages for the Data Store Server * *===========================================================================*/ @@ -767,6 +778,16 @@ # define VMVC_FD m1_i1 # define VMVC_ENDPOINT m1_i2 +/* PM field names */ +/* BRK */ +#define PMBRK_ADDR m1_p1 + +/* TRACE */ +#define PMTRACE_ADDR m2_l1 + +#define PM_ENDPT m1_i1 +#define PM_PENDPT m1_i2 + /*===========================================================================* * Messages for VM server * *===========================================================================*/ @@ -847,7 +868,7 @@ # define VMUP_EP m1_i1 # define VMUP_VADDR m1_p1 -#define VM_UNMAP (VM_RQ_BASE+17) +#define VM_MUNMAP (VM_RQ_BASE+17) # define VMUM_ADDR m1_p1 # define VMUM_LEN m1_i1 @@ -855,6 +876,8 @@ # define VMAM_BYTES m1_p1 # define VMAM_MEMBASE m1_i1 +#define VM_MUNMAP_TEXT (VM_RQ_BASE+19) + /* Calls from VFS. */ # define VMV_ENDPOINT m1_i1 /* for all VM_VFS_REPLY_* */ #define VM_VFS_REPLY_OPEN (VM_RQ_BASE+30) @@ -862,7 +885,89 @@ #define VM_VFS_REPLY_MMAP (VM_RQ_BASE+31) #define VM_VFS_REPLY_CLOSE (VM_RQ_BASE+32) +#define VM_REMAP (VM_RQ_BASE+33) +# define VMRE_D m1_i1 +# define VMRE_S m1_i2 +# define VMRE_DA m1_p1 +# define VMRE_SA m1_p2 +# define VMRE_RETA m1_p3 +# define VMRE_SIZE m1_i3 + +#define VM_SHM_UNMAP (VM_RQ_BASE+34) +# define VMUN_ENDPT m2_i1 +# define VMUN_ADDR m2_l1 + +#define VM_GETPHYS (VM_RQ_BASE+35) +# define VMPHYS_ENDPT m2_i1 +# define VMPHYS_ADDR m2_l1 +# define VMPHYS_RETA m2_l2 + +#define VM_GETREF (VM_RQ_BASE+36) +# define VMREFCNT_ENDPT m2_i1 +# define VMREFCNT_ADDR m2_l1 +# define VMREFCNT_RETC m2_i2 + +#define VM_RS_SET_PRIV (VM_RQ_BASE+37) +# define VM_RS_NR m2_i1 +# define VM_RS_BUF m2_l1 + +#define VM_QUERY_EXIT (VM_RQ_BASE+38) +# define VM_QUERY_RET_PT m2_i1 +# define VM_QUERY_IS_MORE m2_i2 + +#define VM_NOTIFY_SIG (VM_RQ_BASE+39) +# define VM_NOTIFY_SIG_ENDPOINT m1_i1 +# define VM_NOTIFY_SIG_IPC m1_i2 + +#define VM_CTL (VM_RQ_BASE+40) +#define VCTL_WHAT m1_i1 +#define VCTL_PARAM m1_i2 + +/* VCTL_PARAMs */ +#define VCTLP_STATS_MEM 1 +#define VCTLP_STATS_EP 2 + /* Total. */ -#define VM_NCALLS 33 +#define VM_NCALLS 41 + +/*===========================================================================* + * Messages for IPC server * + *===========================================================================*/ +#define IPC_BASE 0xD00 + +/* Shared Memory */ +#define IPC_SHMGET (IPC_BASE+1) +# define SHMGET_KEY m2_l1 +# define SHMGET_SIZE m2_l2 +# define SHMGET_FLAG m2_i1 +# define SHMGET_RETID m2_i2 +#define IPC_SHMAT (IPC_BASE+2) +# define SHMAT_ID m2_i1 +# define SHMAT_ADDR m2_l1 +# define SHMAT_FLAG m2_i2 +# define SHMAT_RETADDR m2_l2 +#define IPC_SHMDT (IPC_BASE+3) +# define SHMDT_ADDR m2_l1 +#define IPC_SHMCTL (IPC_BASE+4) +# define SHMCTL_ID m2_i1 +# define SHMCTL_CMD m2_i2 +# define SHMCTL_BUF m2_l1 +# define SHMCTL_RET m2_i3 + +/* Semaphore */ +#define IPC_SEMGET (IPC_BASE+5) +# define SEMGET_KEY m2_l1 +# define SEMGET_NR m2_i1 +# define SEMGET_FLAG m2_i2 +# define SEMGET_RETID m2_i3 +#define IPC_SEMCTL (IPC_BASE+6) +# define SEMCTL_ID m2_i1 +# define SEMCTL_NUM m2_i2 +# define SEMCTL_CMD m2_i3 +# define SEMCTL_OPT m2_l1 +#define IPC_SEMOP (IPC_BASE+7) +# define SEMOP_ID m2_i1 +# define SEMOP_OPS m2_l1 +# define SEMOP_SIZE m2_i2 #endif /* _MINIX_COM_H */ diff --git a/include/minix/config.h b/include/minix/config.h index c8ccdfea9..1b2d991b7 100755 --- a/include/minix/config.h +++ b/include/minix/config.h @@ -3,7 +3,7 @@ /* Minix release and version numbers. */ #define OS_RELEASE "3" -#define OS_VERSION "1.4" +#define OS_VERSION "1.5" /* This file sets configuration parameters for the MINIX kernel, FS, and PM. * It is divided up into two main sections. The first section contains @@ -95,7 +95,4 @@ #define SPROFILE 1 /* statistical profiling */ #define CPROFILE 0 /* call profiling */ -/* Compile kernel so that first page of code and data can be unmapped. */ -#define VM_KERN_NOPAGEZERO 1 - #endif /* _CONFIG_H */ diff --git a/include/minix/const.h b/include/minix/const.h index 153a40ca0..e4ec34f18 100755 --- a/include/minix/const.h +++ b/include/minix/const.h @@ -44,8 +44,6 @@ #define PHYS_SEG 0x0400 /* flag indicating entire physical memory */ -#define GRANT_SEG 0x0800 /* flag indicating grant for umap */ - #define LOCAL_VM_SEG 0x1000 /* same as LOCAL_SEG, but with vm lookup */ #define VM_D (LOCAL_VM_SEG | D) #define VM_T (LOCAL_VM_SEG | T) diff --git a/include/minix/crtso.h b/include/minix/crtso.h new file mode 100755 index 000000000..c867641e6 --- /dev/null +++ b/include/minix/crtso.h @@ -0,0 +1,8 @@ +/* Prototypes for crtso.s. */ + +#ifndef _MINIX_CRTSO_H +#define _MINIX_CRTSO_H + +_PROTOTYPE( void _minix_unmapzero, (void)); + +#endif diff --git a/include/minix/debug.h b/include/minix/debug.h new file mode 100644 index 000000000..808d73583 --- /dev/null +++ b/include/minix/debug.h @@ -0,0 +1,13 @@ +#ifndef _MINIX_DEBUG_H +#define _MINIX_DEBUG_H 1 + +/* For reminders of things to be fixed. */ +#define FIXME(str) { static int fixme_warned = 0; \ + if(!fixme_warned) { \ + printf("FIXME: %s:%d: %s\n", __FILE__, __LINE__, str);\ + fixme_warned = 1; \ + } \ +} + +#endif /* _MINIX_DEBUG_H */ + diff --git a/include/minix/ds.h b/include/minix/ds.h index fc04547b9..f77c5aaa1 100755 --- a/include/minix/ds.h +++ b/include/minix/ds.h @@ -34,5 +34,8 @@ _PROTOTYPE( int ds_retrieve_str, (char *name, char *val, size_t len)); _PROTOTYPE( int ds_check_u32, (char *n, size_t namelen, u32_t *val)); _PROTOTYPE( int ds_check_str, (char *n, size_t namelen, char *v, size_t vlen)); +/* lib/sysvipc/ds.c */ +_PROTOTYPE( int mini_ds_retrieve_u32, (char *name, u32_t *val) ); + #endif /* _MINIX_DS_H */ diff --git a/include/minix/minlib.h b/include/minix/minlib.h index 79c4e7be4..dd3ca040c 100755 --- a/include/minix/minlib.h +++ b/include/minix/minlib.h @@ -15,7 +15,7 @@ _PROTOTYPE(void std_err, (char *_s)); _PROTOTYPE(void prints, (const char *_s, ...)); _PROTOTYPE(int fsversion, (char *_dev, char *_prog)); _PROTOTYPE(int getprocessor, (void)); -_PROTOTYPE(int _cpuid, (u32_t eax_in, u32_t *eax, u32_t *ebx, u32_t *ecx, u32_t *edx)); +_PROTOTYPE(void _cpuid, (u32_t eax_in, u32_t *eax, u32_t *ebx, u32_t *ecx, u32_t *edx)); _PROTOTYPE(int load_mtab, (char *_prog_name)); _PROTOTYPE(int rewrite_mtab, (char *_prog_name)); _PROTOTYPE(int get_mtab_entry, (char *_s1, char *_s2, char *_s3, char *_s4)); diff --git a/include/minix/rs.h b/include/minix/rs.h index 543f9a8cf..72fbcc3f1 100644 --- a/include/minix/rs.h +++ b/include/minix/rs.h @@ -4,6 +4,8 @@ minix/rs.h Interface to the reincarnation server */ +#include + #define RSS_NR_IRQ 16 #define RSS_NR_IO 16 #define RSS_NR_PCI_ID 16 @@ -35,6 +37,8 @@ struct rs_start size_t rss_labellen; char *rss_ipc; size_t rss_ipclen; +#define RSS_VM_CALL_SIZE BITMAP_CHUNKS(VM_NCALLS) + bitchunk_t rss_vm[RSS_VM_CALL_SIZE]; }; #define RF_COPY 0x01 /* Copy the brinary into RS to make it possible @@ -58,3 +62,5 @@ struct rs_pci struct { u32_t class; u32_t mask; } rsp_class[RSP_NR_CLASS]; }; +_PROTOTYPE( int minix_rs_lookup, (const char *name, endpoint_t *value)); + diff --git a/include/minix/syslib.h b/include/minix/syslib.h index 8e6b4415e..d3f09667f 100755 --- a/include/minix/syslib.h +++ b/include/minix/syslib.h @@ -35,7 +35,7 @@ _PROTOTYPE( int sys_enable_iop, (endpoint_t proc)); _PROTOTYPE( int sys_exec, (endpoint_t proc, char *ptr, char *aout, vir_bytes initpc)); _PROTOTYPE( int sys_fork, (endpoint_t parent, endpoint_t child, int *, - struct mem_map *ptr, u32_t vm)); + struct mem_map *ptr, u32_t vm, vir_bytes *)); _PROTOTYPE( int sys_newmap, (endpoint_t proc, struct mem_map *ptr)); _PROTOTYPE( int sys_exit, (endpoint_t proc)); _PROTOTYPE( int sys_trace, (int req, endpoint_t proc, long addr, long *data_p)); @@ -53,9 +53,8 @@ _PROTOTYPE( int sys_vmctl, (endpoint_t who, int param, u32_t value)); _PROTOTYPE( int sys_vmctl_get_pagefault_i386, (endpoint_t *who, u32_t *cr2, u32_t *err)); _PROTOTYPE( int sys_vmctl_get_cr3_i386, (endpoint_t who, u32_t *cr3) ); _PROTOTYPE( int sys_vmctl_get_memreq, (endpoint_t *who, vir_bytes *mem, - vir_bytes *len, int *wrflag) ); - - + vir_bytes *len, int *wrflag, endpoint_t *) ); +_PROTOTYPE( int sys_vmctl_enable_paging, (struct mem_map *)); _PROTOTYPE( int sys_readbios, (phys_bytes address, void *buf, size_t size)); _PROTOTYPE( int sys_stime, (time_t boottime)); @@ -85,6 +84,7 @@ _PROTOTYPE(void *alloc_contig, (size_t len, int flags, phys_bytes *phys)); #define AC_ALIGN4K 0x01 #define AC_LOWER16M 0x02 #define AC_ALIGN64K 0x04 +#define AC_LOWER1M 0x08 /* Clock functionality: get system times, (un)schedule an alarm call, or * retrieve/set a process-virtual timer. @@ -167,8 +167,6 @@ _PROTOTYPE(int sys_segctl, (int *index, u16_t *seg, vir_bytes *off, #define sys_getmonparams(v,vl) sys_getinfo(GET_MONPARAMS, v,vl, 0,0) #define sys_getschedinfo(v1,v2) sys_getinfo(GET_SCHEDINFO, v1,0, v2,0) #define sys_getlocktimings(dst) sys_getinfo(GET_LOCKTIMING, dst, 0,0,0) -#define sys_getbiosbuffer(virp, sizep) \ - sys_getinfo(GET_BIOSBUFFER, virp, sizeof(*virp), sizep, sizeof(*sizep)) #define sys_getprivid(nr) sys_getinfo(GET_PRIVID, 0, 0,0, nr) _PROTOTYPE(int sys_getinfo, (int request, void *val_ptr, int val_len, void *val_ptr2, int val_len2) ); diff --git a/include/minix/type.h b/include/minix/type.h index 7d182348d..b14a98f13 100755 --- a/include/minix/type.h +++ b/include/minix/type.h @@ -66,7 +66,7 @@ typedef struct { } iovec_s_t; /* PM passes the address of a structure of this type to KERNEL when - * sys_sendsig() is invoked as part of the signal catching mechanism. + * sys_sigsend() is invoked as part of the signal catching mechanism. * The structure contain all the information that KERNEL needs to build * the signal stack. */ @@ -97,9 +97,6 @@ struct kinfo { int nr_tasks; /* number of kernel tasks */ char release[6]; /* kernel release number */ char version[6]; /* kernel version number */ -#if DEBUG_LOCK_CHECK - int relocking; /* interrupt locking depth (should be 0) */ -#endif }; /* Load data accounted every this no. of seconds. */ @@ -178,6 +175,7 @@ struct kmessages { char km_buf[_KMESS_BUF_SIZE]; /* buffer for messages */ }; +#include #include /* randomness struct: random sources after interrupts: */ diff --git a/include/minix/vm.h b/include/minix/vm.h index 5df0bb3d0..7ac40f9c5 100755 --- a/include/minix/vm.h +++ b/include/minix/vm.h @@ -23,7 +23,10 @@ _PROTOTYPE( void *vm_map_phys, (endpoint_t who, void *physaddr, size_t len)); _PROTOTYPE( int vm_unmap_phys, (endpoint_t who, void *vaddr, size_t len)); _PROTOTYPE( int vm_allocmem, (phys_clicks memclicks, phys_clicks *retmembase)); - +_PROTOTYPE( int vm_notify_sig, (endpoint_t ep, endpoint_t ipc_ep)); +_PROTOTYPE( int vm_ctl, (int what, int param)); +_PROTOTYPE( int vm_set_priv, (int procnr, void *buf)); +_PROTOTYPE( int vm_query_exit, (int *endpt)); #endif /* _MINIX_VM_H */ diff --git a/include/netinet/in.h b/include/netinet/in.h index a21911719..7d4ee8044 100644 --- a/include/netinet/in.h +++ b/include/netinet/in.h @@ -13,6 +13,7 @@ netinet/in.h /* Open Group Base Specifications Issue 6 (not complete) */ #define INADDR_ANY (uint32_t)0x00000000 #define INADDR_BROADCAST (uint32_t)0xFFFFFFFF +#define INADDR_LOOPBACK (uint32_t)0x7F000001 #define IN_LOOPBACKNET 127 diff --git a/include/sys/ipc.h b/include/sys/ipc.h new file mode 100644 index 000000000..d66ace307 --- /dev/null +++ b/include/sys/ipc.h @@ -0,0 +1,42 @@ +#ifndef _SYS_IPC_H +#define _SYS_IPC_H + +/* For gid_t, uid_t */ +#include + +/* Mode bits for `msgget', `semget', and `shmget'. */ +/* Create key if key does not exist. */ +#define IPC_CREAT 01000 +/* Fail if key exists. */ +#define IPC_EXCL 02000 +/* Return error on wait. */ +#define IPC_NOWAIT 04000 + +/* Control commands for `msgctl', `semctl', and `shmctl'. */ +/* Remove identifier. */ +#define IPC_RMID 0 +/* Set `ipc_perm' options. */ +#define IPC_SET 1 +/* Get `ipc_perm' options. */ +#define IPC_STAT 2 +#define IPC_INFO 3 /* See ipcs. */ + +/* Special key values. */ +/* Private key. */ +#define IPC_PRIVATE ((key_t) 0) + +/* Data structure used to pass permission information to IPC operations. */ +struct ipc_perm +{ + key_t key; /* Key. */ + uid_t uid; /* Owner's user ID. */ + gid_t gid; /* Owner's group ID. */ + uid_t cuid; /* Creator's user ID. */ + gid_t cgid; /* Creator's group ID. */ + unsigned short int mode; /* Reader/write permission. */ + unsigned short int __seq; /* Sequence number. */ +}; + +_PROTOTYPE( key_t ftok, (const char *__path, int __id)); + +#endif /* _SYS_IPC_H */ diff --git a/include/sys/mman.h b/include/sys/mman.h index 7209fc9be..68d06cb3e 100755 --- a/include/sys/mman.h +++ b/include/sys/mman.h @@ -20,11 +20,17 @@ #define MAP_CONTIG 0x0010 /* contiguous in physical memory */ #define MAP_LOWER16M 0x0020 /* physically below 16MB */ #define MAP_ALIGN64K 0x0040 /* physically aligned at 64kB */ +#define MAP_LOWER1M 0x0080 /* physically below 16MB */ /* mmap() error return */ #define MAP_FAILED ((void *)-1) _PROTOTYPE( void *mmap, (void *, size_t, int, int, int, off_t)); _PROTOTYPE( int munmap, (void *, size_t)); +_PROTOTYPE( int munmap_text, (void *, size_t)); +_PROTOTYPE( void *vm_remap, (int d, int s, void *da, void *sa, size_t si)); +_PROTOTYPE( int vm_unmap, (int endpt, void *addr)); +_PROTOTYPE( unsigned long vm_getphys, (int endpt, void *addr)); +_PROTOTYPE( u8_t vm_getrefcount, (int endpt, void *addr)); #endif /* _MMAN_H */ diff --git a/include/sys/sem.h b/include/sys/sem.h new file mode 100644 index 000000000..a2d09afbd --- /dev/null +++ b/include/sys/sem.h @@ -0,0 +1,81 @@ +#ifndef _SYS_SEM_H +#define _SYS_SEM_H + +#include +#include + +#define SEMMNI 128 +#define SEMMSL 250 +#define SEMMNS (SEMMSL*SEMMNI) + +#define SEMOPM 32 +#define SEMVMX 32767 + +/* Flags for `semop'. */ +#define SEM_UNDO 0x1000 /* undo the operation on exit */ + +/* Commands for `semctl'. */ +#define GETPID 11 /* get sempid */ +#define GETVAL 12 /* get semval */ +#define GETALL 13 /* get all semval's */ +#define GETNCNT 14 /* get semncnt */ +#define GETZCNT 15 /* get semzcnt */ +#define SETVAL 16 /* set semval */ +#define SETALL 17 /* set all semval's */ + + +/* Data structure describing a set of semaphores. */ +struct semid_ds +{ + struct ipc_perm sem_perm; /* operation permission struct */ + time_t sem_otime; /* last semop() time */ + unsigned long int __unused1; + time_t sem_ctime; /* last time changed by semctl() */ + unsigned long int __unused2; + unsigned long int sem_nsems; /* number of semaphores in set */ + unsigned long int __unused3; + unsigned long int __unused4; +}; + +/* Structure used for argument to `semop' to describe operations. */ +struct sembuf +{ + unsigned short int sem_num; /* semaphore number */ + short int sem_op; /* semaphore operation */ + short int sem_flg; /* operation flag */ +}; + + +/* Semaphore control operation. */ +_PROTOTYPE( int semctl, (int __semid, int __semnum, int __cmd, ...)); + +/* Get semaphore. */ +_PROTOTYPE( int semget, (key_t __key, int __nsems, int __semflg)); + +/* Operate on semaphore. */ +_PROTOTYPE( int semop, (int __semid, struct sembuf *__sops, size_t __nsops)); + + +#ifdef __USE_MISC + +/* ipcs ctl cmds */ +# define SEM_STAT 18 +# define SEM_INFO 19 + +struct seminfo +{ + int semmap; + int semmni; + int semmns; + int semmnu; + int semmsl; + int semopm; + int semume; + int semusz; + int semvmx; + int semaem; +}; + +#endif /* __USE_MISC */ + +#endif /* _SYS_SEM_H */ diff --git a/include/sys/shm.h b/include/sys/shm.h new file mode 100644 index 000000000..78fcec1b6 --- /dev/null +++ b/include/sys/shm.h @@ -0,0 +1,77 @@ +#ifndef _SYS_SHM_H +#define _SYS_SHM_H + +#include +#include + +#include + +typedef unsigned long int shmatt_t; + +#define SHMLBA getpagesize() +#define SHMMNI 4096 +#define SHMSEG 32 /* max shared segs per process */ + +struct shmid_ds +{ + struct ipc_perm shm_perm; /* Ownership and permissions */ + size_t shm_segsz; /* Size of segment (bytes) */ + time_t shm_atime; /* Last attach time */ + time_t shm_dtime; /* Last detach time */ + time_t shm_ctime; /* Last change time */ + pid_t shm_cpid; /* PID of creator */ + pid_t shm_lpid; /* PID of last shmat()/shmdt() */ + shmatt_t shm_nattch; /* No. of current attaches */ +}; + +/* Permission flag for shmget. */ +#define SHM_R 0400 +#define SHM_W 0200 + +#define SHM_RDONLY 010000 /* attach read-only else read-write */ +#define SHM_RND 020000 /* round attach address to SHMLBA */ + +/* shm_mode upper byte flags */ +#define SHM_DEST 01000 /* segment will be destroyed on last detach */ +#define SHM_LOCKED 02000 /* segment will not be swapped */ + +/* ipcs ctl commands */ +#define SHM_STAT 13 +#define SHM_INFO 14 + +struct shminfo +{ + unsigned long int shmmax; + unsigned long int shmmin; + unsigned long int shmmni; + unsigned long int shmseg; + unsigned long int shmall; +}; + +struct shm_info +{ + int used_ids; + unsigned long int shm_tot; /* total allocated shm */ + unsigned long int shm_rss; /* total resident shm */ + unsigned long int shm_swp; /* total swapped shm */ + unsigned long int swap_attempts; + unsigned long int swap_successes; +}; + +/* The following System V style IPC functions implement a shared memory + * facility. The definition is found in XPG4.2. + */ + +/* Shared memory control operation. */ +_PROTOTYPE( int shmctl, (int __shmid, int __cmd, struct shmid_ds *__buf)); + +/* Get shared memory segment. */ +_PROTOTYPE( int shmget, (key_t __key, size_t __size, int __shmflg)); + +/* Attach shared memory segment. */ +_PROTOTYPE( void *shmat, (int __shmid, const void *__shmaddr, int __shmflg)); + +/* Deattach shared memory segment. */ +_PROTOTYPE( int shmdt, (const void *__shmaddr)); + +#endif /* _SYS_SHM_H */ diff --git a/include/sys/signal.h b/include/sys/signal.h new file mode 100644 index 000000000..4b80ddea3 --- /dev/null +++ b/include/sys/signal.h @@ -0,0 +1,2 @@ +#include + diff --git a/include/sys/timeb.h b/include/sys/timeb.h new file mode 100644 index 000000000..b78d10983 --- /dev/null +++ b/include/sys/timeb.h @@ -0,0 +1,18 @@ +#ifndef _SYS__TIMEB_H +#define _SYS__TIMEB_H + +#include + +struct timeb +{ + time_t time; /* Seconds since epoch, as from `time'. */ + unsigned short int millitm; /* Additional milliseconds. */ + short int timezone; /* Minutes west of GMT. */ + short int dstflag; /* Nonzero if Daylight Savings Time used. */ +}; + +/* Fill in TIMEBUF with information about the current time. */ + +_PROTOTYPE( int ftime, (struct timeb *__timebuf)); + +#endif /* _SYS__TIMEB_H */ diff --git a/include/sys/types.h b/include/sys/types.h index d959e13e7..8c3bcb3a2 100755 --- a/include/sys/types.h +++ b/include/sys/types.h @@ -43,6 +43,11 @@ typedef long clock_t; /* unit for system accounting */ typedef unsigned long sigset_t; #endif +#ifndef _KEY_T +#define _KEY_T +typedef long key_t; +#endif + /* Open Group Base Specifications Issue 6 (not complete) */ typedef long useconds_t; /* Time in microseconds */ diff --git a/include/sys/vm_i386.h b/include/sys/vm_i386.h index 152cd49e0..12ea709cc 100644 --- a/include/sys/vm_i386.h +++ b/include/sys/vm_i386.h @@ -16,6 +16,7 @@ sys/vm_i386.h #define I386_VM_ACC 0x020 /* Accessed */ #define I386_VM_ADDR_MASK 0xFFFFF000 /* physical address */ #define I386_VM_ADDR_MASK_4MB 0xFFC00000 /* physical address */ +#define I386_VM_OFFSET_MASK_4MB 0x003FFFFF /* physical address */ /* Page directory specific flags. */ #define I386_VM_BIGPAGE 0x080 /* 4MB page */ @@ -37,6 +38,12 @@ sys/vm_i386.h #define I386_VM_PFA_SHIFT 22 /* Page frame address shift */ /* CR0 bits */ +#define I386_CR0_PE 0x00000001 /* Protected mode */ +#define I386_CR0_MP 0x00000002 /* Monitor Coprocessor */ +#define I386_CR0_EM 0x00000004 /* Emulate */ +#define I386_CR0_TS 0x00000008 /* Task Switched */ +#define I386_CR0_ET 0x00000010 /* Extension Type */ +#define I386_CR0_WP 0x00010000 /* Enable paging */ #define I386_CR0_PG 0x80000000 /* Enable paging */ /* some CR4 bits */ diff --git a/include/syslog.h b/include/syslog.h index f5f0071e8..051984993 100644 --- a/include/syslog.h +++ b/include/syslog.h @@ -89,6 +89,7 @@ #define LOG_CONS 0x02 /* log on the console if errors in sending */ #define LOG_ODELAY 0x04 /* delay open until first syslog() (default) */ #define LOG_NDELAY 0x08 /* don't delay open */ +#define LOG_NOWAIT 0x10 /* don't wait for console forks: DEPRECATED */ #define LOG_PERROR 0x20 /* log to stderr as well */ void closelog(void); diff --git a/include/unistd.h b/include/unistd.h index 01346a0ce..50c4cf3e4 100755 --- a/include/unistd.h +++ b/include/unistd.h @@ -121,6 +121,8 @@ _PROTOTYPE( char *getlogin, (void) ); _PROTOTYPE( pid_t getpgrp, (void) ); _PROTOTYPE( pid_t getpid, (void) ); _PROTOTYPE( pid_t getnpid, (int proc_nr) ); +_PROTOTYPE( uid_t getnuid, (int proc_nr) ); +_PROTOTYPE( gid_t getngid, (int proc_nr) ); _PROTOTYPE( pid_t getppid, (void) ); _PROTOTYPE( uid_t getuid, (void) ); _PROTOTYPE( int isatty, (int _fd) );