⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 const.h

📁 一个简单的操作系统minix的核心代码
💻 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 + -