Subversion Repositories HelenOS

Compare Revisions

Ignore whitespace Rev 278 → Rev 279

/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