--- /dev/null
+#ifndef CONFIG_H
+#define CONFIG_H
+
+/* This file defines the kernel configuration. It allows to set sizes of some
+ * kernel buffers and to enable or disable debugging code, timing features,
+ * and individual kernel calls.
+ *
+ * Created: Jul 11, 2005 Jorrit N. Herder
+ */
+
+/* In embedded and sensor applications, not all the kernel calls may be
+ * needed. In this section you can specify which kernel calls are needed
+ * and which are not. The code for unneeded kernel calls is not included in
+ * the system binary, making it smaller. If you are not sure, it is best
+ * to keep all kernel calls enabled.
+ */
+#define USE_FORK 1 /* fork a new process */
+#define USE_NEWMAP 1 /* set a new memory map */
+#define USE_EXEC 1 /* update process after execute */
+#define USE_EXIT 1 /* clean up after process exit */
+#define USE_TRACE 1 /* process information and tracing */
+#define USE_GETKSIG 1 /* retrieve pending kernel signals */
+#define USE_ENDKSIG 1 /* finish pending kernel signals */
+#define USE_KILL 1 /* send a signal to a process */
+#define USE_SIGSEND 1 /* send POSIX-style signal */
+#define USE_SIGRETURN 1 /* sys_sigreturn(proc_nr, ctxt_ptr, flags) */
+#define USE_ABORT 1 /* shut down MINIX */
+#define USE_GETINFO 1 /* retrieve a copy of kernel data */
+#define USE_TIMES 1 /* get process and system time info */
+#define USE_SETALARM 1 /* schedule a synchronous alarm */
+#define USE_DEVIO 1 /* read or write a single I/O port */
+#define USE_VDEVIO 1 /* process vector with I/O requests */
+#define USE_SDEVIO 1 /* perform I/O request on a buffer */
+#define USE_IRQCTL 1 /* set an interrupt policy */
+#define USE_SEGCTL 1 /* set up a remote segment */
+#define USE_SVRCTL 1 /* system server control */
+#define USE_SCHEDCTL 1 /* change scheduling priority (nice) */
+#define USE_UMAP 1 /* map virtual to physical address */
+#define USE_VIRCOPY 1 /* copy using virtual addressing */
+#define USE_VIRVCOPY 1 /* vector with virtual copy requests */
+#define USE_PHYSCOPY 1 /* copy using physical addressing */
+#define USE_PHYSVCOPY 1 /* vector with physical copy requests */
+#define USE_MEMSET 1 /* write char to a given memory area */
+
+
+/* Length of program names stored in the process table. This is only used
+ * for the debugging dumps that can be generated with the IS server. The PM
+ * server keeps its own copy of the program name.
+ */
+#define P_NAME_LEN 8
+
+/* Kernel diagnostics are written to a circular buffer. After each message,
+ * a system server is notified and a copy of the buffer can be retrieved to
+ * display the message. The buffers size can safely be reduced.
+ */
+#define KMESS_BUF_SIZE 128
+
+/* Buffer to gather randomness. This is used to generate a random stream by
+ * the MEMORY driver when reading from /dev/random.
+ */
+#define RANDOM_ELEMENTS 64
+
+
+/* This section contains defines for valuable system resources that are used
+ * by device drivers. The number of elements of the vectors is determined by
+ * the maximum needed by any given driver. The number of interrupt hooks may
+ * be incremented on systems with many device drivers.
+ */
+#define NR_IRQ_HOOKS 16 /* number of interrupt hooks */
+#define VDEVIO_BUF_SIZE 64 /* max elements per VDEVIO request */
+#define VCOPY_VEC_SIZE 16 /* max elements per VCOPY request */
+
+/* How many buffers for notification messages should there be? */
+#define NR_NOTIFY_BUFS 32
+
+
+/* This section allows to enable kernel debugging and timing functionality.
+ * For normal operation all options should be disabled.
+ */
+#define DEBUG_SCHED_CHECK 0 /* sanity check of scheduling queues */
+#define DEBUG_LOCK_CHECK 0 /* kernel lock() sanity check */
+#define DEBUG_TIME_LOCKS 0 /* measure time spent in locks */
+
+#endif /* CONFIG_H */
+
--- /dev/null
+#ifndef PRIV_H
+#define PRIV_H
+
+/* Declaration of the system privileges structure. It defines flags, system
+ * call masks, an synchronous alarm timer, I/O privileges, pending hardware
+ * interrupts and notifications, and so on.
+ * System processes each get their own structure with properties, whereas all
+ * user processes share one structure. This setup provides a clear separation
+ * between common and privileged process fields and is very space efficient.
+ *
+ * Created: Jul 1, 2005 Jorrit N. Herder
+ */
+#include <minix/com.h>
+#include "protect.h"
+#include "const.h"
+#include "type.h"
+
+struct priv {
+ proc_nr_t s_proc_nr; /* number of associated process */
+ sys_id_t s_id; /* index of this system structure */
+ char s_flags; /* PREEMTIBLE, BILLABLE, etc. */
+
+ char s_call_mask; /* allowed system call traps */
+ sys_map_t s_send_mask; /* allowed send destinations */
+ long s_sys_mask; /* allowed kernel calls */
+
+ sys_map_t s_notify_pending; /* bit map with pending notifications */
+ short s_int_pending; /* pending hardware interrupts */
+
+ timer_t s_alarm_timer; /* synchronous alarm timer */
+ struct far_mem s_farmem[NR_REMOTE_SEGS]; /* remote memory map */
+ reg_t *s_stack_guard; /* stack guard word for kernel tasks */
+};
+
+/* Guard word for task stacks. */
+#define STACK_GUARD ((reg_t) (sizeof(reg_t) == 2 ? 0xBEEF : 0xDEADBEEF))
+
+/* Bits for the system property flags. */
+#define PREEMPTIBLE 0x01 /* kernel tasks are not preemptible */
+#define RDY_Q_HEAD 0x02 /* add to queue head instead of tail */
+#define BILLABLE 0x04 /* some processes are not billable */
+#define SYS_PROC 0x10 /* system processes are privileged */
+
+/* Magic system structure table addresses. */
+#define BEG_PRIV_ADDR (&priv[0])
+#define END_PRIV_ADDR (&priv[NR_SYS_PROCS])
+
+#define priv_addr(i) (ppriv_addr)[(i)]
+#define priv_id(rp) ((rp)->p_priv->s_id)
+#define priv(rp) ((rp)->p_priv)
+
+#define id_to_nr(id) priv_addr(id)->s_proc_nr;
+#define nr_to_id(nr) priv(proc_addr(nr))->s_id;
+
+/* The system structures table and pointers to individual table slots. The
+ * pointers allow faster access because now a process entry can be found by
+ * indexing the psys_addr array, while accessing an element i requires a
+ * multiplication with sizeof(struct sys) to determine the address.
+ */
+EXTERN struct priv priv[NR_SYS_PROCS]; /* system properties table */
+EXTERN struct priv *ppriv_addr[NR_SYS_PROCS]; /* direct slot pointers */
+
+/* Make sure the system can boot. The following sanity check verifies that
+ * the system privileges table is large enough for the number of processes
+ * in the boot image.
+ */
+#if (NR_BOOT_PROCS > NR_SYS_PROCS)
+#error NR_SYS_PROCS must be larger than NR_BOOT_PROCS
+#endif
+
+#endif /* PRIV_H */