summaryrefslogtreecommitdiff
path: root/bootother.S
diff options
context:
space:
mode:
authorFrans Kaashoek <[email protected]>2011-08-15 12:02:59 -0400
committerFrans Kaashoek <[email protected]>2011-08-15 12:02:59 -0400
commitc60a3551c2dba29006f5d7917308281e47fa5fef (patch)
tree3fad525469c88a1521220ff8d0468dddbdb47af5 /bootother.S
parentc95ce31c5978bd43e1f0d34e51a4e3d7bcc41b14 (diff)
downloadxv6-labs-c60a3551c2dba29006f5d7917308281e47fa5fef.tar.gz
xv6-labs-c60a3551c2dba29006f5d7917308281e47fa5fef.tar.bz2
xv6-labs-c60a3551c2dba29006f5d7917308281e47fa5fef.zip
Separate more clearly bootloader from xv6 by renaming multiboot.S to entry.S etc.
Maybe the string boot shouldn't appear in xv6 code?
Diffstat (limited to 'bootother.S')
-rw-r--r--bootother.S84
1 files changed, 0 insertions, 84 deletions
diff --git a/bootother.S b/bootother.S
deleted file mode 100644
index 56edac2..0000000
--- a/bootother.S
+++ /dev/null
@@ -1,84 +0,0 @@
-#include "asm.h"
-#include "memlayout.h"
-#include "mmu.h"
-
-# Each non-boot CPU ("AP") is started up in response to a STARTUP
-# IPI from the boot CPU. Section B.4.2 of the Multi-Processor
-# Specification says that the AP will start in real mode with CS:IP
-# set to XY00:0000, where XY is an 8-bit value sent with the
-# STARTUP. Thus this code must start at a 4096-byte boundary.
-#
-# Because this code sets DS to zero, it must sit
-# at an address in the low 2^16 bytes.
-#
-# Bootothers (in main.c) sends the STARTUPs one at a time.
-# It copies this code (start) at 0x7000.
-# It puts the address of a newly allocated per-core stack in start-4,
-# the address of the place to jump to (mpboot) in start-8, and the physical
-# address of bootpgdir in start-12.
-#
-#
-# This code is identical to bootasm.S except:
-# - it does not need to enable A20
-# - it uses the address at start-4, start-8, and start-12
-
-.code16
-.globl start
-start:
- cli
-
- xorw %ax,%ax
- movw %ax,%ds
- movw %ax,%es
- movw %ax,%ss
-
- lgdt gdtdesc
- movl %cr0, %eax
- orl $CR0_PE, %eax
- movl %eax, %cr0
-
-//PAGEBREAK!
- ljmpl $(SEG_KCODE<<3), $(start32)
-
-.code32
-start32:
- movw $(SEG_KDATA<<3), %ax
- movw %ax, %ds
- movw %ax, %es
- movw %ax, %ss
- movw $0, %ax
- movw %ax, %fs
- movw %ax, %gs
-
- # Use bootpgdir as our initial page table
- movl (start-12), %eax
- movl %eax, %cr3
- # Turn on paging.
- movl %cr0, %eax
- orl $(CR0_PE|CR0_PG|CR0_WP), %eax
- movl %eax, %cr0
-
- # Switch to the stack allocated by bootothers()
- movl (start-4), %esp
- # Call mpboot()
- call *(start-8)
-
- movw $0x8a00, %ax
- movw %ax, %dx
- outw %ax, %dx
- movw $0x8ae0, %ax
- outw %ax, %dx
-spin:
- jmp spin
-
-.p2align 2
-gdt:
- SEG_NULLASM
- SEG_ASM(STA_X|STA_R, 0, 0xffffffff)
- SEG_ASM(STA_W, 0, 0xffffffff)
-
-
-gdtdesc:
- .word (gdtdesc - gdt - 1)
- .long gdt
-