📄 machine.h
字号:
/* * machine.h: Intel CPU specific definitions * * Leendert van Doorn, leendert@watson.ibm.com * Copyright (c) 2005, International Business Machines Corporation. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, * version 2, as published by the Free Software Foundation. * * This program is distributed in the hope it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * more details. * * You should have received a copy of the GNU General Public License along with * this program; if not, write to the Free Software Foundation, Inc., 59 Temple * Place - Suite 330, Boston, MA 02111-1307 USA. */#ifndef __MACHINE_H__#define __MACHINE_H__/* the size of our stack (4KB) */#define STACK_SIZE 8192#define TSS_SELECTOR 0x08#define CODE_SELECTOR 0x10#define DATA_SELECTOR 0x18#define CR0_PE (1 << 0)#define CR0_EM (1 << 2)#define CR0_TS (1 << 3)#define CR0_NE (1 << 5)#define CR0_PG (1 << 31)#define CR4_VME (1 << 0)#define CR4_PVI (1 << 1)#define CR4_PSE (1 << 4)#define CR4_PAE (1 << 5)#define EFLAGS_CF (1 << 0)#define EFLAGS_PF (1 << 2)#define EFLAGS_AF (1 << 4)#define EFLAGS_ZF (1 << 6)#define EFLAGS_SF (1 << 7)#define EFLAGS_TF (1 << 8)#define EFLAGS_IF (1 << 9)#define EFLAGS_DF (1 << 10)#define EFLAGS_OF (1 << 11)#define EFLAGS_IOPL (3 << 12)#define EFLAGS_VM ((1 << 17) | EFLAGS_IOPL)#define EFLAGS_VIF (1 << 19)#define EFLAGS_VIP (1 << 20)#define LOG_PGSIZE 12 /* log2(page size) */#define LOG_PDSIZE 22 /* log2(page directory size) *//* Derived constants */#define PGSIZE (1 << LOG_PGSIZE) /* page size */#define PGMASK (~(PGSIZE - 1)) /* page mask */#define LPGSIZE (1 << LOG_PDSIZE) /* large page size */#define LPGMASK (~(LPGSIZE - 1)) /* large page mask *//* Programmable Interrupt Contoller (PIC) defines */#define PIC_MASTER 0x20#define PIC_SLAVE 0xA0#define PIC_CMD 0 /* command */#define PIC_ISR 0 /* interrupt status */#define PIC_IMR 1 /* interrupt mask */#ifndef __ASSEMBLY__struct dtr { unsigned short size; unsigned long base __attribute__ ((packed));};struct tss { unsigned short prev_link; unsigned short _1; unsigned long esp0; unsigned short ss0; unsigned short _2; unsigned long esp1; unsigned short ss1; unsigned short _3; unsigned long esp2; unsigned short ss2; unsigned short _4; unsigned long cr3; unsigned long eip; unsigned long eflags; unsigned long eax; unsigned long ecx; unsigned long edx; unsigned long ebx; unsigned long esi; unsigned long edi; unsigned long esp; unsigned long ebp; unsigned long es; unsigned long cs; unsigned long ss; unsigned long ds; unsigned long fs; unsigned long gs; unsigned short ldt_segment; unsigned short _5; unsigned short _6; unsigned short iomap_base;#ifdef ENABLE_VME unsigned long int_redir[8];#endif unsigned char iomap[8193];};static inline voidoutw(unsigned short addr, unsigned short val){ __asm__ __volatile__ ("outw %%ax, %%dx" :: "d"(addr), "a"(val));}static inline voidoutb(unsigned short addr, unsigned char val){ __asm__ __volatile__ ("outb %%al, %%dx" :: "d"(addr), "a"(val));}static inline unsigned charinb(unsigned short addr){ unsigned char val; __asm__ __volatile__ ("inb %w1,%0" : "=a" (val) : "Nd" (addr)); return val;}static inline unsignedget_cmos(int reg){ outb(0x70, reg); return inb(0x71);}static inline unsignedget_cr0(void){ unsigned rv; __asm__ __volatile__("movl %%cr0, %0" : "=r"(rv)); return rv;}static inline voidset_cr0(unsigned value){ __asm__ __volatile__( "movl %0, %%cr0\n" "jmp 1f\n" "1: nop\n" : /* no outputs */ : "r"(value) );}static inline unsignedget_cr2(void){ unsigned rv; __asm__ __volatile__("movl %%cr2, %0" : "=r"(rv)); return rv;}static inline unsignedget_cr4(void){ unsigned rv; __asm__ __volatile__("movl %%cr4, %0" : "=r"(rv)); return rv;}static inline voidset_cr3(unsigned addr){ __asm__ __volatile__("movl %0, %%cr3" : /* no outputs */ : "r"(addr));}static inline voidset_cr4(unsigned value){ __asm__ __volatile__("movl %0, %%cr4" : /* no outputs */ : "r"(value));}#endif /* __ASSEMBLY__ */#endif /* __MACHINE_H__ */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -