include/protect.h

来源:互联网 发布:笔记本电池校正软件 编辑:程序博客网 时间:2024/06/03 21:51
Code:
  1. /*  
  2.     By Marcus Xing  
  3.     include/protect.h  
  4.     在内核使用的有关保护模式的数据结构  
  5. */  
  6.   
  7. /*  
  8.     forward include:  
  9.     type.h  
  10. */  
  11.   
  12. #ifndef _PROTECT_H_   
  13. #define _PROTECT_H_   
  14.   
  15.     /* 外中断向量号 */  
  16.     #define INT_VECTOR_IRQ0         0x20        /* 0号外中断的向量号 */   
  17.     #define INT_VECTOR_IRQ8         0x28        /* 8号外中断的向量号 */   
  18.     #define SYSTEM_CALL_INT_VECTOR  0x90        /* 系统调用中断的向量号 */   
  19.        
  20.     /* 系统内中断向量 */      
  21.     #define INT_VECTOR_DIVIDE       0x0       
  22.     #define INT_VECTOR_DEBUG        0x1       
  23.     #define INT_VECTOR_NMI          0x2       
  24.     #define INT_VECTOR_BREAKPOINT   0x3       
  25.     #define INT_VECTOR_OVERFLOW     0x4       
  26.     #define INT_VECTOR_BOUNDS       0x5       
  27.     #define INT_VECTOR_INVAL_OP     0x6       
  28.     #define INT_VECTOR_COPROC_NOT   0x7       
  29.     #define INT_VECTOR_DOUBLE_FAULT 0x8       
  30.     #define INT_VECTOR_COPROC_SEG   0x9       
  31.     #define INT_VECTOR_INVAL_TSS    0xA       
  32.     #define INT_VECTOR_SEG_NOT      0xB       
  33.     #define INT_VECTOR_STACK_FAULT  0xC       
  34.     #define INT_VECTOR_PROTECTION   0xD       
  35.     #define INT_VECTOR_PAGE_FAULT   0xE       
  36.     #define INT_VECTOR_COPROC_ERR   0x10    
  37.        
  38.     /* 描述符索引 */  
  39.     #define DUMMY_INDEX             0   
  40.     #define FLAT_RW_INDEX           1   
  41.     #define FLAT_C_INDEX            2   
  42.     #define VIDEO_INDEX             3   
  43.     #define TSS_INDEX               4           /*  TSS在GDT的索引 */   
  44.     #define FIRST_LDT_INDEX         5           /* 第一个进程的LDT在GDT中的索引 */   
  45.        
  46.     /* 选择子 */  
  47.     #define SELECTOR_DUMMY          0   
  48.     #define SELECTOR_FLAT_RW        8   
  49.     #define SELECTOR_FLAT_C         16   
  50.     #define SELECTOR_VIDEO          24   
  51.     #define SELECTOR_TSS            32   
  52.     #define SELECTOR_FIRST_LDT      40   
  53.        
  54.     #define SELECTOR_LDT_FLAT_RW    0           /* 进程LDT中的FLAT_RW选择子 */   
  55.     #define SELECTOR_LDT_FLAT_C     8           /* 进程LDT中的FLAT_C选择子 */   
  56.        
  57.     /* 权限 */      
  58.     #define PRIVILEGE_KRNL          0       
  59.     #define PRIVILEGE_TASK          1       
  60.     #define PRIVILEGE_USER          3     
  61.   
  62.     /* 描述符类型值说明 */      
  63.     #define DA_32               0x4000          /* 32 位段                */         
  64.     #define DA_LIMIT_4K         0x8000          /* 段界限粒度为 4K 字节   */       
  65.     #define DA_DPL0             0x00            /* DPL = 0                  */       
  66.     #define DA_DPL1             0x20            /* DPL = 1                  */       
  67.     #define DA_DPL2             0x40            /* DPL = 2                  */       
  68.     #define DA_DPL3             0x60            /* DPL = 3                  */       
  69.            
  70.     /* 存储段描述符类型值说明 */      
  71.     #define DA_DR               0x90            /* 存在的只读数据段类型值              */       
  72.     #define DA_DRW              0x92            /* 存在的可读写数据段属性值         */       
  73.     #define DA_DRWA             0x93            /* 存在的已访问可读写数据段类型值      */       
  74.     #define DA_C                0x98            /* 存在的只执行代码段属性值         */       
  75.     #define DA_CR               0x9A            /* 存在的可执行可读代码段属性值       */       
  76.     #define DA_CCO              0x9C            /* 存在的只执行一致代码段属性值       */       
  77.     #define DA_CCOR             0x9E            /* 存在的可执行可读一致代码段属性值 */       
  78.                
  79.     /* 系统段描述符类型值说明 */      
  80.     #define DA_LDT              0x82            /* 局部描述符表段类型值          */       
  81.     #define DA_TaskGate         0x85            /* 任务门类型值                  */        
  82.     #define DA_386TSS           0x89            /* 可用 386 任务状态段类型值     */       
  83.     #define DA_386CGate         0x8C            /* 386 调用门类型值              */       
  84.     #define DA_386IGate         0x8E            /* 386 中断门类型值              */       
  85.     #define DA_386TGate         0x8F            /* 386 陷阱门类型值              */     
  86.        
  87.     /* 选择子的类型值说明 */  
  88.     #define SA_RPL0             0               /* 选择子特权级0 */   
  89.     #define SA_RPL1             1               /* 选择子特权级1 */   
  90.     #define SA_RPL2             2               /* 选择子特权级2 */   
  91.     #define SA_RPL3             3               /* 选择子特权级3 */   
  92.        
  93.     #define SA_TIG              0               /* 从GDT中读取描述符 */   
  94.     #define SA_TIL              4               /* 从LDT中读取描述符 */   
  95.        
  96.     /* 数据段和系统段结构 */  
  97.     typedef struct s_descriptor       
  98.     {       
  99.         u16 limit_low;                 /* limit(0..15) */      
  100.         u16 base_low;                  /* base(0..15) */      
  101.         u8  base_mid;                  /* base(16..23) */      
  102.         u8  attr1;                     /* P(1) DPL(2) S(1) TYPE(4)*/      
  103.         u8  limit_high_attr2;          /* G(1) D/B(1) O(1) AVL(1) limit(16..19) */      
  104.         u8  base_high;                 /* base(24..31) */      
  105.     }Descriptor;      
  106.        
  107.     typedef struct s_gate       
  108.     {       
  109.         u16 offset_low;                /* offset(0..15) */      
  110.         u16 selector;                  /* selector */      
  111.         u8  dcount;                    /* 调用门才用,表示传递的参数个数,非调用门为0 */  
  112.         u8  attr;                      /* P(1) DPL(2) S(1) TYPE(4) */      
  113.         u16 offset_high;               /* offset(16..31) */                                                           
  114.     }Gate;     
  115.        
  116. #endif     

 

原创粉丝点击