📄 const.h
字号:
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
src/kernel/const.h
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
04300 /* General constants used by the kernel. */
04301
04302 #if (CHIP == INTEL)
04303
04304 #define K_STACK_BYTES 1024 /* how many bytes for the kernel stack */
04305
04306 #define INIT_PSW 0x0200 /* initial psw */
04307 #define INIT_TASK_PSW 0x1200 /* initial psw for tasks (with IOPL 1) */
04308 #define TRACEBIT 0x100 /* OR this with psw in proc[] for tracing */
04309 #define SETPSW(rp, new) /* permits only certain bits to be set */ \
04310 ((rp)->p_reg.psw = (rp)->p_reg.psw & ~0xCD5 | (new) & 0xCD5)
04311
04312 /* Initial sp for mm, fs and init.
04313 * 2 bytes for short jump
04314 * 2 bytes unused
04315 * 3 words for init_org[] used by fs only
04316 * 3 words for real mode debugger trap (actually needs 1 more)
04317 * 3 words for save and restart temporaries
04318 * 3 words for interrupt
04319 * Leave no margin, to flush bugs early.
04320 */
04321 #define INIT_SP (2 + 2 + 3 * 2 + 3 * 2 + 3 * 2 + 3 * 2)
04322
04323 #define HCLICK_SHIFT 4 /* log2 of HCLICK_SIZE */
04324 #define HCLICK_SIZE 16 /* hardware segment conversion magic */
04325 #if CLICK_SIZE >= HCLICK_SIZE
04326 #define click_to_hclick(n) ((n) << (CLICK_SHIFT - HCLICK_SHIFT))
04327 #else
04328 #define click_to_hclick(n) ((n) >> (HCLICK_SHIFT - CLICK_SHIFT))
04329 #endif
04330 #define hclick_to_physb(n) ((phys_bytes) (n) << HCLICK_SHIFT)
04331 #define physb_to_hclick(n) ((n) >> HCLICK_SHIFT)
04332
04333 /* Interrupt vectors defined/reserved by processor. */
04334 #define DIVIDE_VECTOR 0 /* divide error */
04335 #define DEBUG_VECTOR 1 /* single step (trace) */
04336 #define NMI_VECTOR 2 /* non-maskable interrupt */
04337 #define BREAKPOINT_VECTOR 3 /* software breakpoint */
04338 #define OVERFLOW_VECTOR 4 /* from INTO */
04339
04340 /* Fixed system call vector. */
04341 #define SYS_VECTOR 32 /* system calls are made with int SYSVEC */
04342 #define SYS386_VECTOR 33 /* except 386 system calls use this */
04343 #define LEVEL0_VECTOR 34 /* for execution of a function at level 0 */
04344
04345 /* Suitable irq bases for hardware interrupts. Reprogram the 8259(s) from
04346 * the PC BIOS defaults since the BIOS doesn't respect all the processor's
04347 * reserved vectors (0 to 31).
04348 */
04349 #define BIOS_IRQ0_VEC 0x08 /* base of IRQ0-7 vectors used by BIOS */
04350 #define BIOS_IRQ8_VEC 0x70 /* base of IRQ8-15 vectors used by BIOS */
04351 #define IRQ0_VECTOR 0x28 /* more or less arbitrary, but > SYS_VECTOR */
04352 #define IRQ8_VECTOR 0x30 /* together for simplicity */
04353
04354 /* Hardware interrupt numbers. */
04355 #define NR_IRQ_VECTORS 16
04356 #define CLOCK_IRQ 0
04357 #define KEYBOARD_IRQ 1
04358 #define CASCADE_IRQ 2 /* cascade enable for 2nd AT controller */
04359 #define ETHER_IRQ 3 /* default ethernet interrupt vector */
04360 #define SECONDARY_IRQ 3 /* RS232 interrupt vector for port 2 */
04361 #define RS232_IRQ 4 /* RS232 interrupt vector for port 1 */
04362 #define XT_WINI_IRQ 5 /* xt winchester */
04363 #define FLOPPY_IRQ 6 /* floppy disk */
04364 #define PRINTER_IRQ 7
04365 #define AT_WINI_IRQ 14 /* at winchester */
04366
04367 /* Interrupt number to hardware vector. */
04368 #define BIOS_VECTOR(irq) \
04369 (((irq) < 8 ? BIOS_IRQ0_VEC : BIOS_IRQ8_VEC) + ((irq) & 0x07))
04370 #define VECTOR(irq) \
04371 (((irq) < 8 ? IRQ0_VECTOR : IRQ8_VECTOR) + ((irq) & 0x07))
04372
04373 /* BIOS hard disk parameter vectors. */
04374 #define WINI_0_PARM_VEC 0x41
04375 #define WINI_1_PARM_VEC 0x46
04376
04377 /* 8259A interrupt controller ports. */
04378 #define INT_CTL 0x20 /* I/O port for interrupt controller */
04379 #define INT_CTLMASK 0x21 /* setting bits in this port disables ints */
04380 #define INT2_CTL 0xA0 /* I/O port for second interrupt controller */
04381 #define INT2_CTLMASK 0xA1 /* setting bits in this port disables ints */
04382
04383 /* Magic numbers for interrupt controller. */
04384 #define ENABLE 0x20 /* code used to re-enable after an interrupt */
04385
04386 /* Sizes of memory tables. */
04387 #define NR_MEMS 3 /* number of chunks of memory */
04388
04389 /* Miscellaneous ports. */
04390 #define PCR 0x65 /* Planar Control Register */
04391 #define PORT_B 0x61 /* I/O port for 8255 port B (kbd, beeper...) */
04392 #define TIMER0 0x40 /* I/O port for timer channel 0 */
04393 #define TIMER2 0x42 /* I/O port for timer channel 2 */
04394 #define TIMER_MODE 0x43 /* I/O port for timer mode control */
04395
04396 #endif /* (CHIP == INTEL) */
04397
04398 #if (CHIP == M68000)
04399
04400 #define K_STACK_BYTES 1024 /* how many bytes for the kernel stack */
04401
04402 /* Sizes of memory tables. */
04403 #define NR_MEMS 2 /* number of chunks of memory */
04404
04405 /* p_reg contains: d0-d7, a0-a6, in that order. */
04406 #define NR_REGS 15 /* number of general regs in each proc slot */
04407
04408 #define TRACEBIT 0x8000 /* or this with psw in proc[] for tracing */
04409 #define SETPSW(rp, new) /* permits only certain bits to be set */ \
04410 ((rp)->p_reg.psw = (rp)->p_reg.psw & ~0xFF | (new) & 0xFF)
04411
04412 #define MEM_BYTES 0xffffffff /* memory size for /dev/mem */
04413
04414 #ifdef __ACK__
04415 #define FSTRUCOPY
04416 #endif
04417
04418 #endif /* (CHIP == M68000) */
04419
04420 /* The following items pertain to the scheduling queues. */
04421 #define TASK_Q 0 /* ready tasks are scheduled via queue 0 */
04422 #define SERVER_Q 1 /* ready servers are scheduled via queue 1 */
04423 #define USER_Q 2 /* ready users are scheduled via queue 2 */
04424
04425 #if (MACHINE == ATARI)
04426 #define SHADOW_Q 3 /* runnable, but shadowed processes */
04427 #define NQ 4 /* # of scheduling queues */
04428 #else
04429 #define NQ 3 /* # of scheduling queues */
04430 #endif
04431
04432 /* Env_parse() return values. */
04433 #define EP_UNSET 0 /* variable not set */
04434 #define EP_OFF 1 /* var = off */
04435 #define EP_ON 2 /* var = on (or field left blank) */
04436 #define EP_SET 3 /* var = 1:2:3 (nonblank field) */
04437
04438 /* To translate an address in kernel space to a physical address. This is
04439 * the same as umap(proc_ptr, D, vir, sizeof(*vir)), but a lot less costly.
04440 */
04441 #define vir2phys(vir) (data_base + (vir_bytes) (vir))
04442
04443 #define printf printk /* the kernel really uses printk, not printf */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -