seb15753

kern/gdt.c

Jun 24th, 2014
251
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.50 KB | None | 0 0
  1. #include "types.h"
  2.  
  3. #define __GDT__
  4. #include "gdt.h"
  5.  
  6. void *memcpy(char *dst, char *src, int n)
  7. {
  8.         char *p = dst;
  9.         while (n--)
  10.                 *dst++ = *src++;
  11.         return p;
  12. }
  13. /*
  14.  * 'init_desc' init a segment descriptor which is in gdt or ldt.
  15.  * 'desc' is the linear address of the descriptor to init
  16.  */
  17. void init_gdt_desc(u32 base, u32 limite, u8 acces, u8 other,
  18.            struct gdtdesc *desc)
  19. {
  20.     desc->lim0_15 = (limite & 0xffff);
  21.     desc->base0_15 = (base & 0xffff);
  22.     desc->base16_23 = (base & 0xff0000) >> 16;
  23.     desc->acces = acces;
  24.     desc->lim16_19 = (limite & 0xf0000) >> 16;
  25.     desc->other = (other & 0xf);
  26.     desc->base24_31 = (base & 0xff000000) >> 24;
  27.     return;
  28. }
  29.  
  30. /*
  31.  * this function init the GDT after the kernel has been loaded into RAM
  32.  */
  33. void init_gdt(void)
  34. {
  35.  
  36.     /* init some segments descriptors */
  37.     init_gdt_desc(0x0, 0x0, 0x0, 0x0, &kgdt[0]);
  38.     init_gdt_desc(0x0, 0xFFFFF, 0x9B, 0x0D, &kgdt[1]);  /* code */
  39.     init_gdt_desc(0x0, 0xFFFFF, 0x93, 0x0D, &kgdt[2]);  /* data */
  40.     init_gdt_desc(0x0, 0x0, 0x97, 0x0D, &kgdt[3]);      /* stack */
  41.  
  42.     /* init GDTR struct*/
  43.     kgdtr.limite = GDTSIZE * 8;
  44.     kgdtr.base = GDTBASE;
  45.  
  46.     memcpy((char *) kgdtr.base, (char *) kgdt, kgdtr.limite);
  47.  
  48.     /* load gdtr */
  49.     asm("lgdtl (kgdtr)");
  50.  
  51.     /* init segments */
  52.     asm("   movw $0x10, %ax \n \
  53.             movw %ax, %ds   \n \
  54.             movw %ax, %es   \n \
  55.             movw %ax, %fs   \n \
  56.             movw %ax, %gs   \n \
  57.             ljmp $0x08, $next   \n \
  58.             next:       \n");
  59. }
Advertisement
Add Comment
Please, Sign In to add comment