[BACK]Return to arch.h CVS log [TXT][DIR] Up to [local] / prex-old / sys / arch / i386 / include

Diff for /prex-old/sys/arch/i386/include/arch.h between version 1.1 and 1.1.1.1.2.1

version 1.1, 2008/06/03 10:38:45 version 1.1.1.1.2.1, 2008/08/13 17:12:30
Line 1 
Line 1 
 /*  /*
  * Copyright (c) 2005-2007, Kohsuke Ohtani   * Copyright (c) 2005-2008, Kohsuke Ohtani
  * All rights reserved.   * All rights reserved.
  *   *
  * Redistribution and use in source and binary forms, with or without   * Redistribution and use in source and binary forms, with or without
Line 41 
Line 41 
  * because these are set only when privilege level is changed.   * because these are set only when privilege level is changed.
  */   */
 struct cpu_regs {  struct cpu_regs {
         u_long  ebx;            /*  +0 (00) --- s/w trap frame --- */          uint32_t ebx;           /*  +0 (00) --- s/w trap frame --- */
         u_long  ecx;            /*  +4 (04) */          uint32_t ecx;           /*  +4 (04) */
         u_long  edx;            /*  +8 (08) */          uint32_t edx;           /*  +8 (08) */
         u_long  esi;            /* +12 (0C) */          uint32_t esi;           /* +12 (0C) */
         u_long  edi;            /* +16 (10) */          uint32_t edi;           /* +16 (10) */
         u_long  ebp;            /* +20 (14) */          uint32_t ebp;           /* +20 (14) */
         u_long  eax;            /* +24 (18) */          uint32_t eax;           /* +24 (18) */
         u_long  ds;             /* +28 (1C) */          uint32_t ds;            /* +28 (1C) */
         u_long  es;             /* +32 (20) */          uint32_t es;            /* +32 (20) */
         u_long  trap_no;        /* +36 (24) --- h/w trap frame --- */          uint32_t trap_no;       /* +36 (24) --- h/w trap frame --- */
         u_long  err_code;       /* +40 (28) */          uint32_t err_code;      /* +40 (28) */
         u_long  eip;            /* +44 (2C) */          uint32_t eip;           /* +44 (2C) */
         u_long  cs;             /* +48 (30) */          uint32_t cs;            /* +48 (30) */
         u_long  eflags;         /* +52 (34) */          uint32_t eflags;        /* +52 (34) */
         u_long  esp;            /* +56 (38) */          uint32_t esp;           /* +56 (38) */
         u_long  ss;             /* +60 (3C) */          uint32_t ss;            /* +60 (3C) */
 };  };
   
 /*  /*
  * Kernel mode context for context switching.   * Kernel mode context for context switching.
  */   */
 struct kern_regs {  struct kern_regs {
         u_long  eip;            /*  +0 (00) */          uint32_t eip;           /*  +0 (00) */
         u_long  edi;            /*  +4 (04) */          uint32_t ebx;           /*  +4 (04) */
         u_long  esi;            /*  +8 (08) */          uint32_t edi;           /*  +8 (08) */
         u_long  ebp;            /* +12 (0C) */          uint32_t esi;           /* +12 (0C) */
         u_long  esp;            /* +16 (10) */          uint32_t ebp;           /* +16 (10) */
           uint32_t esp;           /* +20 (14) */
 };  };
   
 #ifdef CONFIG_FPU  #ifdef CONFIG_FPU
Line 75 
Line 76 
  * FPU register for fsave/frstor   * FPU register for fsave/frstor
  */   */
 struct fpu_regs {  struct fpu_regs {
         u_long  ctrl_word;          uint32_t ctrl_word;
         u_long  stat_word;          uint32_t stat_word;
         u_long  tag_word;          uint32_t tag_word;
         u_long  ip_offset;          uint32_t ip_offset;
         u_long  cs_sel;          uint32_t cs_sel;
         u_long  op_offset;          uint32_t op_offset;
         u_long  op_sel;          uint32_t op_sel;
         u_long  st[20];          uint32_t st[20];
 };  };
 #endif  #endif
   
Line 92 
Line 93 
 struct context {  struct context {
         struct kern_regs kregs;         /* kernel mode registers */          struct kern_regs kregs;         /* kernel mode registers */
         struct cpu_regs *uregs;         /* user mode registers */          struct cpu_regs *uregs;         /* user mode registers */
           struct cpu_regs *saved_regs;    /* saved user mode registers */
 #ifdef CONFIG_FPU  #ifdef CONFIG_FPU
         struct fpu_regs *fregs;         /* co-processor registers */          struct fpu_regs *fregs;         /* co-processor registers */
 #endif  #endif
         u_long  esp0;                   /* top of kernel stack */          uint32_t         esp0;          /* top of kernel stack */
 };  };
   
 typedef struct context *context_t;      /* context id */  typedef struct context *context_t;      /* context id */
   
 /* types for context_set */  /* types for context_set */
 #define CTX_UENTRY      0               /* set user mode entry addres */  #define CTX_KSTACK      0               /* set kernel mode entry address */
 #define CTX_USTACK      1               /* set user mode stack address */  #define CTX_KENTRY      1               /* set kernel mode entry address */
 #define CTX_KENTRY      2               /* set kernel mode entry address */  #define CTX_KARG        2               /* set kernel mode argument */
 #define CTX_KARG        3               /* set kernel mode argument */  #define CTX_USTACK      3               /* set user mode stack address */
   #define CTX_UENTRY      4               /* set user mode entry addres */
   #define CTX_UARG        5               /* set user mode argument */
   
 extern void context_init(context_t, u_long);  extern void     context_set(context_t, int, vaddr_t);
 extern void context_set(context_t, int, u_long);  extern void     context_switch(context_t, context_t);
 extern void context_switch(context_t, context_t);  extern void     context_save(context_t);
 extern void context_save(context_t, int);  extern void     context_restore(context_t);
 extern void context_restore(context_t, void *);  
   
 /*  /*
  * Memory Management Unit   * Memory Management Unit
  */   */
   typedef uint32_t *pgd_t;                        /* page directory */
   
 typedef long *pgd_t;                    /* page directory */  
   
 /* memory page type */  /* memory page type */
 #define PG_UNMAP        0               /* no page */  #define PG_UNMAP        0               /* no page */
 #define PG_READ         1               /* read only */  #define PG_READ         1               /* read only */
 #define PG_WRITE        2               /* read/write */  #define PG_WRITE        2               /* read/write */
   
 #ifdef CONFIG_MMU  #ifdef CONFIG_MMU
 extern void mmu_init(void);  extern void      mmu_init(void);
 extern pgd_t mmu_newmap(void);  extern pgd_t     mmu_newmap(void);
 extern void mmu_delmap(pgd_t);  extern void      mmu_delmap(pgd_t);
 extern int  mmu_map(pgd_t, void *, void *, size_t, int);  extern int       mmu_map(pgd_t, void *, void *, size_t, int);
 extern void mmu_switch(pgd_t);  extern void      mmu_switch(pgd_t);
 extern void *mmu_extract(pgd_t, void *, size_t);  extern void     *mmu_extract(pgd_t, void *, size_t);
 #else /* CONFIG_MMU */  #else /* CONFIG_MMU */
 #define mmu_init()              do {} while (0)  #define mmu_init()              do {} while (0)
 #endif /* CONFIG_MMU */  #endif /* CONFIG_MMU */
Line 137 
Line 139 
 /*  /*
  * User Memory access   * User Memory access
  */   */
 extern int umem_copyin(void *, void *, size_t);  extern int       umem_copyin(const void *, void *, size_t);
 extern int umem_copyout(void *, void *, size_t);  extern int       umem_copyout(const void *, void *, size_t);
 extern int umem_strnlen(const char *, size_t, size_t *);  extern int       umem_strnlen(const char *, size_t, size_t *);
   
 #define breakpoint()    __asm__ __volatile__("int $3"::)  extern void      syscall_ret(void);
   extern void      breakpoint(void);
   
 #endif /* !_ARCH_H */  #endif /* !_ARCH_H */

Legend:
Removed from v.1.1  
changed lines
  Added in v.1.1.1.1.2.1

CVSweb