removed usage of the 0x8d000 to 0x9ffff memory range, as its needed by PXE UNDI.

git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@19126 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Marcus Overhagen
2006-10-25 20:27:09 +00:00
parent 7613b42bcd
commit 326862c203
5 changed files with 42 additions and 17 deletions
+21 -2
View File
@@ -59,6 +59,23 @@ struct extended_memory {
uint32 type; uint32 type;
}; };
#ifdef _PXE_ENV
static const uint32 kDefaultPageTableFlags = 0x07; // present, user, R/W
static const size_t kMaxKernelSize = 0x100000; // 1 MB for the kernel
static const uint32 kPageTableRegionEnd = 0x110000;
// working page directory and page table
static uint32 *sPageDirectory = 0;
static addr_t sNextPhysicalAddress = 0x110000;
static addr_t sNextVirtualAddress = KERNEL_BASE + kMaxKernelSize;
static addr_t sMaxVirtualAddress = KERNEL_BASE + 0x400000;
static addr_t sNextPageTableAddress = 0x100000;
#else
static const uint32 kDefaultPageTableFlags = 0x07; // present, user, R/W static const uint32 kDefaultPageTableFlags = 0x07; // present, user, R/W
static const size_t kMaxKernelSize = 0x100000; // 1 MB for the kernel static const size_t kMaxKernelSize = 0x100000; // 1 MB for the kernel
static const uint32 kPageTableRegionEnd = 0x9e000; static const uint32 kPageTableRegionEnd = 0x9e000;
@@ -73,6 +90,8 @@ static addr_t sMaxVirtualAddress = KERNEL_BASE + 0x400000;
static addr_t sNextPageTableAddress = 0x90000; static addr_t sNextPageTableAddress = 0x90000;
#endif
static addr_t static addr_t
get_next_virtual_address(size_t size) get_next_virtual_address(size_t size)
@@ -266,7 +285,7 @@ init_page_directory(void)
// These page tables won't be taken over into the kernel. // These page tables won't be taken over into the kernel.
// make the first page table at the first free spot // make the first page table at the first free spot
uint32 *pageTable = get_next_page_table();; uint32 *pageTable = get_next_page_table();
for (int32 i = 0; i < 1024; i++) { for (int32 i = 0; i < 1024; i++) {
pageTable[i] = (i * 0x1000) | kDefaultPageFlags; pageTable[i] = (i * 0x1000) | kDefaultPageFlags;
@@ -275,7 +294,7 @@ init_page_directory(void)
sPageDirectory[0] = (uint32)pageTable | kDefaultPageFlags; sPageDirectory[0] = (uint32)pageTable | kDefaultPageFlags;
// make the second page table // make the second page table
pageTable = get_next_page_table();; pageTable = get_next_page_table();
for (int32 i = 0; i < 1024; i++) { for (int32 i = 0; i < 1024; i++) {
pageTable[i] = (i * 0x1000 + 0x400000) | kDefaultPageFlags; pageTable[i] = (i * 0x1000 + 0x400000) | kDefaultPageFlags;
@@ -396,8 +396,13 @@ smp_boot_other_cpus(void)
// allocate a stack and a code area for the smp trampoline // allocate a stack and a code area for the smp trampoline
// (these have to be < 1M physical, 0xa0000-0xfffff is reserved by the BIOS) // (these have to be < 1M physical, 0xa0000-0xfffff is reserved by the BIOS)
#ifdef _PXE_ENV
trampolineCode = 0x8b000;
trampolineStack = 0x8c000;
#else
trampolineCode = 0x9f000; trampolineCode = 0x9f000;
trampolineStack = 0x9e000; trampolineStack = 0x9e000;
#endif
// copy the trampoline code over // copy the trampoline code over
memcpy((char *)trampolineCode, (const void*)&smp_trampoline, memcpy((char *)trampolineCode, (const void*)&smp_trampoline,
+2 -2
View File
@@ -9,7 +9,7 @@ UsePrivateHeaders [ FDirName graphics vesa ] ;
UsePrivateHeaders [ FDirName storage ] ; UsePrivateHeaders [ FDirName storage ] ;
{ {
local defines = _BOOT_MODE ; local defines = _BOOT_MODE _PXE_ENV ;
defines = [ FDefines $(defines) ] ; defines = [ FDefines $(defines) ] ;
SubDirCcFlags $(defines) -Wall -Wno-multichar ; SubDirCcFlags $(defines) -Wall -Wno-multichar ;
@@ -28,7 +28,6 @@ local bios_ia32_src =
mmu.cpp mmu.cpp
cpu.cpp cpu.cpp
smp.cpp smp.cpp
smp_trampoline.S
support.S support.S
video.cpp video.cpp
apm.cpp apm.cpp
@@ -36,6 +35,7 @@ local bios_ia32_src =
KernelMergeObject boot_platform_pxe_ia32.o : KernelMergeObject boot_platform_pxe_ia32.o :
pxe_stage2.S pxe_stage2.S
smp_trampoline.S
$(bios_ia32_src) $(bios_ia32_src)
# generic # generic
@@ -30,7 +30,8 @@
// 0x00000 - 0x07bff real mode IDT, stack // 0x00000 - 0x07bff real mode IDT, stack
// 0x07C00 - 0x08FFF pxehaiku (stage 1, this) // 0x07C00 - 0x08FFF pxehaiku (stage 1, this)
// 0x09000 - 0x0FFFF scratchbuffer // 0x09000 - 0x0FFFF scratchbuffer
// 0x10000 - 0x8CFFF pxe-haiku-loader (stage 2) // 0x10000 - 0x8AFFF pxe-haiku-loader (stage 2)
// 0x8B000 - 0x8CFFF used by stage2 trampoline code
// 0x8D000 - 0x9F7FF PXE and UNDI code and data segments // 0x8D000 - 0x9F7FF PXE and UNDI code and data segments
// 0x9F800 - 0xA0000 extended BIOS data area // 0x9F800 - 0xA0000 extended BIOS data area
@@ -40,7 +41,7 @@
.equ scratchbuffer_size, 0x7000 .equ scratchbuffer_size, 0x7000
.equ load_addr, 0x10000 .equ load_addr, 0x10000
.equ load_size_max, (0x8D000 - load_addr) .equ load_size_max, (0x8B000 - load_addr)
.code16 .code16
.text .text
@@ -3,14 +3,14 @@
** Distributed under the terms of the NewOS License. ** Distributed under the terms of the NewOS License.
*/ */
// expects a stack page like this: // expects a stack page like this:
// (stack has to be at (0x9e000) // (stack has to be at (0x8c000)
// 0x9effc : final esp // 0x8cffc : final esp
// 0x9eff8 : page dir // 0x8cff8 : page dir
// //
// 0x9e000 - 0x9e006 : gdt descriptor // 0x8c000 - 0x8c006 : gdt descriptor
// 0x9e008 - 0x9e020 : gdt // 0x8c008 - 0x8c020 : gdt
// //
// smp_trampoline must be located at 0x9f000 // smp_trampoline must be located at 0x8b000
.globl smp_trampoline .globl smp_trampoline
.globl smp_trampoline_end .globl smp_trampoline_end
.globl foo .globl foo
@@ -19,11 +19,11 @@
smp_trampoline: smp_trampoline:
cli cli
mov $0x9e00,%ax mov $0x8c00,%ax
mov %ax,%ds mov %ax,%ds
// lgdt 0x9e000 # load the gdt // lgdt 0x8c000 # load the gdt
.byte 0x66, 0x0f, 0x01, 0x15, 0x00, 0xe0, 0x09, 0x00 .byte 0x66, 0x0f, 0x01, 0x15, 0x00, 0xc0, 0x08, 0x00
movl %cr0,%eax movl %cr0,%eax
orl $0x01,%eax orl $0x01,%eax
@@ -32,7 +32,7 @@ smp_trampoline:
.code32 .code32
_trampoline_32: _trampoline_32:
.byte 0x66 .byte 0x66
ljmp $0x08,$(trampoline_32 - smp_trampoline + 0x9f000) ljmp $0x08,$(trampoline_32 - smp_trampoline + 0x8b000)
trampoline_32: trampoline_32:
mov $0x10, %ax mov $0x10, %ax
mov %ax, %ds mov %ax, %ds
@@ -41,7 +41,7 @@ trampoline_32:
mov %ax, %gs mov %ax, %gs
mov %ax, %ss mov %ax, %ss
movl $0x9eff8,%esp # set up the stack pointer movl $0x8cff8,%esp # set up the stack pointer
popl %eax # get the page dir popl %eax # get the page dir
movl %eax,%cr3 # set the page dir movl %eax,%cr3 # set the page dir