/SPARTAN/trunk/arch/ia32/include/pm.h |
---|
129,8 → 129,8 |
} __attribute__ ((packed)); |
extern struct ptr_16_32 gdtr; |
extern struct ptr_16_32 bsp_bootstrap_gdtr; |
extern struct ptr_16_32 ap_bootstrap_gdtr; |
extern struct ptr_16_32 real_bootstrap_gdtr; |
extern struct ptr_16_32 protected_bootstrap_gdtr; |
extern struct tss *tss_p; |
extern struct descriptor gdt[]; |
/SPARTAN/trunk/arch/ia32/src/pm.c |
---|
70,8 → 70,8 |
struct tss *tss_p = NULL; |
/* gdtr is changed by kmp before next CPU is initialized */ |
struct ptr_16_32 bsp_bootstrap_gdtr __attribute__ ((section ("K_DATA_START"))) = { .limit = sizeof(gdt), .base = KA2PA((__address) gdt - BOOT_OFFSET) }; |
struct ptr_16_32 ap_bootstrap_gdtr __attribute__ ((section ("K_DATA_START"))) = { .limit = sizeof(gdt), .base = KA2PA((__address) gdt) }; |
struct ptr_16_32 real_bootstrap_gdtr __attribute__ ((section ("K_DATA_START"))) = { .limit = sizeof(gdt), .base = KA2PA((__address) gdt - BOOT_OFFSET) }; |
struct ptr_16_32 protected_bootstrap_gdtr = { .limit = sizeof(gdt), .base = KA2PA((__address) gdt) }; |
struct ptr_16_32 gdtr = { .limit = sizeof(gdt), .base = (__address) gdt }; |
void gdt_setbase(struct descriptor *d, __address base) |
/SPARTAN/trunk/arch/ia32/src/smp/smp.c |
---|
144,7 → 144,7 |
memcpy(gdt_new, gdt, GDT_ITEMS*sizeof(struct descriptor)); |
memsetb((__address)(&gdt_new[TSS_DES]), sizeof(struct descriptor), 0); |
ap_bootstrap_gdtr.base = KA2PA((__address) gdt_new); |
real_bootstrap_gdtr.base = KA2PA((__address) gdt_new); |
gdtr.base = (__address) gdt_new; |
if (l_apic_send_init_ipi(ops->cpu_apic_id(i))) { |
/SPARTAN/trunk/arch/ia32/src/smp/ap.S |
---|
50,11 → 50,11 |
xorw %ax, %ax |
movw %ax, %ds |
lgdt ap_bootstrap_gdtr # initialize Global Descriptor Table register |
lgdt real_bootstrap_gdtr # initialize Global Descriptor Table register |
movl %cr0, %eax |
orl $1, %eax |
movl %eax, %cr0 # switch to protected mode |
movl %eax, %cr0 # switch to protected mode |
jmpl $KTEXT, $jump_to_kernel |
jump_to_kernel: |
/SPARTAN/trunk/arch/ia32/src/boot/boot.S |
---|
52,7 → 52,7 |
call memmap_arch_init |
lgdt bsp_bootstrap_gdtr # initialize Global Descriptor Table register |
lgdt real_bootstrap_gdtr # initialize Global Descriptor Table register |
movl %cr0, %eax |
orl $0x1, %eax |
93,27 → 93,29 |
cld |
rep movsb |
jmp protected |
call main_bsp # never returns |
cli |
hlt |
multiboot_image_start: |
movl BOOTSTRAP_OFFSET - 0x400, %esp # initialize stack pointer |
movl $BOOTSTRAP_OFFSET - 0x400, %esp # initialize stack pointer |
lgdt gdtr # initialize Global Descriptor Table register |
lgdt protected_bootstrap_gdtr - 0x80000000 # initialize Global Descriptor Table register |
movw $KDATA, %ax |
movw %ax, %es |
movw %ax, %gs |
movw %ax, %fs |
movw %ax, %ds # kernel data + stack |
movw %ax, %ds # kernel data + stack |
movw %ax, %ss |
jmpl $KTEXT, $multiboot_meeting_point |
jmpl $KTEXT, $multiboot_meeting_point + BOOT_OFFSET |
multiboot_meeting_point: |
call map_kernel # map kernel and turn paging on |
call map_kernel # map kernel and turn paging on |
protected: |
call main_bsp # never returns |
call main_bsp - BOOT_OFFSET # never returns |
cli |
hlt |
/SPARTAN/trunk/arch/ia32/Makefile.inc.cross |
---|
6,7 → 6,11 |
CC=$(IA-32_CC_DIR)/$(IA-32_TARGET)-gcc |
AS=$(IA-32_BINUTILS_DIR)/$(IA-32_TARGET)-as |
LD=$(IA-32_BINUTILS_DIR)/$(IA-32_TARGET)-ld |
OBJCOPY=$(IA-32_BINUTILS_DIR)/$(IA-32_TARGET)-objcopy |
BFD_NAME=elf32-i386 |
BFD_ARCH=i386 |
DEFS:=-DARCH=$(ARCH) |
ifdef SMP |