2005-07-14 17:12:12 +02:00
|
|
|
/* General macros and constants used by the kernel. */
|
|
|
|
#ifndef CONST_H
|
|
|
|
#define CONST_H
|
2005-04-21 16:53:53 +02:00
|
|
|
|
|
|
|
#include <ibm/interrupt.h> /* interrupt numbers and hardware vectors */
|
|
|
|
#include <ibm/ports.h> /* port addresses and magic numbers */
|
|
|
|
#include <ibm/bios.h> /* BIOS addresses, sizes and magic numbers */
|
2005-06-20 16:53:13 +02:00
|
|
|
#include <ibm/cpu.h> /* BIOS addresses, sizes and magic numbers */
|
2005-06-01 11:37:52 +02:00
|
|
|
#include <minix/config.h>
|
2005-07-14 17:12:12 +02:00
|
|
|
#include "config.h"
|
2005-04-21 16:53:53 +02:00
|
|
|
|
|
|
|
/* To translate an address in kernel space to a physical address. This is
|
|
|
|
* the same as umap_local(proc_ptr, D, vir, sizeof(*vir)), but less costly.
|
|
|
|
*/
|
2005-04-29 17:36:43 +02:00
|
|
|
#define vir2phys(vir) (kinfo.data_base + (vir_bytes) (vir))
|
2005-04-21 16:53:53 +02:00
|
|
|
|
2005-08-04 21:23:03 +02:00
|
|
|
/* Map a process number to a privilege structure id. */
|
2005-08-03 18:06:35 +02:00
|
|
|
#define s_nr_to_id(n) (NR_TASKS + (n) + 1)
|
|
|
|
|
2005-04-21 16:53:53 +02:00
|
|
|
/* Translate a pointer to a field in a structure to a pointer to the structure
|
2005-07-14 17:12:12 +02:00
|
|
|
* itself. So it translates '&struct_ptr->field' back to 'struct_ptr'.
|
2005-04-21 16:53:53 +02:00
|
|
|
*/
|
|
|
|
#define structof(type, field, ptr) \
|
|
|
|
((type *) (((char *) (ptr)) - offsetof(type, field)))
|
|
|
|
|
2005-07-14 17:12:12 +02:00
|
|
|
/* Constants used in virtual_copy(). Values must be 0 and 1, respectively. */
|
|
|
|
#define _SRC_ 0
|
|
|
|
#define _DST_ 1
|
2005-06-03 15:55:06 +02:00
|
|
|
|
2005-07-18 17:40:24 +02:00
|
|
|
/* Number of random sources */
|
|
|
|
#define RANDOM_SOURCES 16
|
|
|
|
|
2005-05-24 12:06:17 +02:00
|
|
|
/* Constants and macros for bit map manipulation. */
|
|
|
|
#define BITCHUNK_BITS (sizeof(bitchunk_t) * CHAR_BIT)
|
|
|
|
#define BITMAP_CHUNKS(nr_bits) (((nr_bits)+BITCHUNK_BITS-1)/BITCHUNK_BITS)
|
|
|
|
#define MAP_CHUNK(map,bit) (map)[((bit)/BITCHUNK_BITS)]
|
|
|
|
#define CHUNK_OFFSET(bit) ((bit)%BITCHUNK_BITS))
|
|
|
|
#define GET_BIT(map,bit) ( MAP_CHUNK(map,bit) & (1 << CHUNK_OFFSET(bit) )
|
|
|
|
#define SET_BIT(map,bit) ( MAP_CHUNK(map,bit) |= (1 << CHUNK_OFFSET(bit) )
|
|
|
|
#define UNSET_BIT(map,bit) ( MAP_CHUNK(map,bit) &= ~(1 << CHUNK_OFFSET(bit) )
|
2005-05-19 11:36:44 +02:00
|
|
|
|
2005-07-14 17:12:12 +02:00
|
|
|
#define get_sys_bit(map,bit) \
|
|
|
|
( MAP_CHUNK(map.chunk,bit) & (1 << CHUNK_OFFSET(bit) )
|
|
|
|
#define set_sys_bit(map,bit) \
|
|
|
|
( MAP_CHUNK(map.chunk,bit) |= (1 << CHUNK_OFFSET(bit) )
|
|
|
|
#define unset_sys_bit(map,bit) \
|
|
|
|
( MAP_CHUNK(map.chunk,bit) &= ~(1 << CHUNK_OFFSET(bit) )
|
|
|
|
#define NR_SYS_CHUNKS BITMAP_CHUNKS(NR_SYS_PROCS)
|
|
|
|
|
2005-05-31 16:43:04 +02:00
|
|
|
#if (CHIP == INTEL)
|
|
|
|
|
2005-04-21 16:53:53 +02:00
|
|
|
/* Program stack words and masks. */
|
|
|
|
#define INIT_PSW 0x0200 /* initial psw */
|
|
|
|
#define INIT_TASK_PSW 0x1200 /* initial psw for tasks (with IOPL 1) */
|
2005-05-19 11:36:44 +02:00
|
|
|
#define TRACEBIT 0x0100 /* OR this with psw in proc[] for tracing */
|
2005-07-26 14:48:34 +02:00
|
|
|
#define SETPSW(rp, new) /* permits only certain bits to be set */ \
|
2005-04-21 16:53:53 +02:00
|
|
|
((rp)->p_reg.psw = (rp)->p_reg.psw & ~0xCD5 | (new) & 0xCD5)
|
|
|
|
#define IF_MASK 0x00000200
|
|
|
|
#define IOPL_MASK 0x003000
|
|
|
|
|
2006-02-10 17:53:51 +01:00
|
|
|
#if DEBUG_LOCK_CHECK
|
|
|
|
#define reallock(c, v) { if (!(read_cpu_flags() & X86_FLAG_I)) { kinfo.relocking++; } else { intr_disable(); } }
|
|
|
|
#else
|
|
|
|
#define reallock(c, v) intr_disable()
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#define realunlock(c) intr_enable()
|
|
|
|
|
2005-07-14 17:12:12 +02:00
|
|
|
/* Disable/ enable hardware interrupts. The parameters of lock() and unlock()
|
|
|
|
* are used when debugging is enabled. See debug.h for more information.
|
|
|
|
*/
|
2006-02-10 17:53:51 +01:00
|
|
|
#define lock(c, v) reallock(c, v)
|
|
|
|
#define unlock(c) realunlock(c)
|
2005-04-21 16:53:53 +02:00
|
|
|
|
|
|
|
/* Sizes of memory tables. The boot monitor distinguishes three memory areas,
|
|
|
|
* namely low mem below 1M, 1M-16M, and mem after 16M. More chunks are needed
|
|
|
|
* for DOS MINIX.
|
|
|
|
*/
|
2005-07-14 17:12:12 +02:00
|
|
|
#define NR_MEMS 8
|
|
|
|
|
2005-04-21 16:53:53 +02:00
|
|
|
#endif /* (CHIP == INTEL) */
|
|
|
|
|
|
|
|
#if (CHIP == M68000)
|
|
|
|
/* M68000 specific constants go here. */
|
|
|
|
#endif /* (CHIP == M68000) */
|
|
|
|
|
2005-07-14 17:12:12 +02:00
|
|
|
#endif /* CONST_H */
|