📄 os_cpu.h
字号:
/*
*********************************************************************************************************
* Kinix Kernel
* A Teaching-Oriented Kernel
*
* (c) Copyright 2006, Kasicass, School of Software Engineering, CQU
* All Rights Reserved
*
* Many codes & ideas come from uC/OS-II, for deeper study, referring to
* read its codes.
*
* 80x86 port, Protected Flat Mode
* i386 gcc compiler
*
* File : os_cpu.h
* By : Kasicass
* Version : V1.00
*********************************************************************************************************
*/
#ifndef KINIX_I386_PM_H
#define KINIX_I386_PM_H
/* Kernel Specific */
typedef unsigned int BOOLEAN;
typedef unsigned char INT8U;
typedef char INT8S;
typedef unsigned short INT16U;
typedef short INT16S;
typedef unsigned long INT32U;
typedef long INT32S;
typedef INT32U OS_STK;
#define OS_ENTER_CRITICAL() __asm("pushf;cli;")
#define OS_EXIT_CRITICAL() __asm("popf;")
#define OS_STK_GROWTH 1
#define OS_TASK_SW() __asm("int $0x30;")
#define INT_CTX_SW 0x30
/* GDT Selector */
#define CS_SELECTOR 0x08
#define DS_SELECTOR 0x10
// Intel 8259 ports
#define I8259_MASTER_0 0x20 /* 8259 #1, port #1 */
#define I8259_MASTER_1 0x21 /* 8259 #1, port #2 */
#define I8259_SLAVE_0 0xA0 /* 8259 #2, port #1 */
#define I8259_SLAVE_1 0xA1 /* 8259 #2, port #2 */
#define MAX_IDT_ENTRIES 0x40
/* 中断向量 */
#define INT_VECTOR_DIVIDE 0x0
#define INT_VECTOR_DEBUG 0x1
#define INT_VECTOR_NMI 0x2
#define INT_VECTOR_BREAKPOINT 0x3
#define INT_VECTOR_OVERFLOW 0x4
#define INT_VECTOR_BOUNDS 0x5
#define INT_VECTOR_INVAL_OP 0x6
#define INT_VECTOR_COPROC_NOT 0x7
#define INT_VECTOR_DOUBLE_FAULT 0x8
#define INT_VECTOR_COPROC_SEG 0x9
#define INT_VECTOR_INVAL_TSS 0xA
#define INT_VECTOR_SEG_NOT 0xB
#define INT_VECTOR_STACK_FAULT 0xC
#define INT_VECTOR_PROTECTION 0xD
#define INT_VECTOR_PAGE_FAULT 0xE
#define INT_VECTOR_COPROC_ERR 0x10
/* 中断向量 */
#define INT_VECTOR_IRQ0 0x20
#define INT_VECTOR_IRQ8 0x28
/* Gate type */
#define IDTGATE_TRAP 0x8f00 // Trap
#define IDTGATE_INT 0x8e00 // Interrupt
#define IDTGATE_TASK 0x8500 // Task
/*
***************************************************************************************
* STRUCTUREs
***************************************************************************************
*/
/* IDT的地址&个数信息 */
struct s_idt_desc
{
INT16U limit;
INT32U base;
} __attribute__ ((packed));
/* 门描述符 */
struct s_gate
{
INT16U offset_low; /* Offset Low */
INT16U selector; /* Selector */
INT16U type;
INT16U offset_high; /* Offset High */
} __attribute__ ((packed));
typedef struct s_idt_desc IDT_DESC;
typedef struct s_gate GATE;
/*
***************************************************************************************
* PROTOTYPEs
***************************************************************************************
*/
/* i386/port/os_cpu_c.c */
extern void OSCpuInit(void);
/* i386/port/os_cpu_a.s */
extern void out_byte(INT32U port, INT8U value);
extern INT8U in_byte(INT32U port);
#endif /* KINIX_I386_PM_H */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -