*** empty log message ***
This commit is contained in:
parent
570eac1f53
commit
312c004519
2 changed files with 156 additions and 0 deletions
85
kernel/config.h
Normal file
85
kernel/config.h
Normal file
|
@ -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 */
|
||||
|
71
kernel/priv.h
Executable file
71
kernel/priv.h
Executable file
|
@ -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 */
|
Loading…
Reference in a new issue