]> Zhao Yanbai Git Server - minix.git/commitdiff
*** empty log message ***
authorJorrit Herder <jnherder@minix3.org>
Thu, 14 Jul 2005 15:26:26 +0000 (15:26 +0000)
committerJorrit Herder <jnherder@minix3.org>
Thu, 14 Jul 2005 15:26:26 +0000 (15:26 +0000)
kernel/config.h [new file with mode: 0644]
kernel/priv.h [new file with mode: 0755]

diff --git a/kernel/config.h b/kernel/config.h
new file mode 100644 (file)
index 0000000..a15ed03
--- /dev/null
@@ -0,0 +1,85 @@
+#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 */
+
diff --git a/kernel/priv.h b/kernel/priv.h
new file mode 100755 (executable)
index 0000000..2d02817
--- /dev/null
@@ -0,0 +1,71 @@
+#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 */