/SPARTAN/trunk/doc/arch/amd64 |
---|
1,22 → 1,26 |
amd64 port |
========== |
The fifth port, amd64 port, is heavily based on ia32 port. |
It was originally written by Ondrej Palkovsky. |
The goal is to support AMD64 or Intel Extended Memory PC's. |
The new 64-bit code makes use of portable parts of ia32. |
The fifth port, amd64 port, was originally written by Ondrej Palkovsky. |
The goal is to support AMD64 and Intel Extended Memory 64 Technology PC's. |
The port makes use of portable parts of ia32. |
Both uniprocessors and multiprocessors are supported. |
It has not been tested on real hardware, so far. |
The kernel runs on real hardware and in simulators too. |
HARDWARE REQUIREMENTS |
o no real hardware supported |
o AMD64 architecture processor |
o Intel Extended Memory 64 Technology processor |
CPU |
o Intel Xeon with Intel Extended Memory 64 Technology |
SMP COMPATIBILITY |
o Bochs 2.2.1 |
o 2x-8x AMD64 CPU |
o Simics Simics 2.2.19 |
o Simics 2.2.19 |
o 2x-8x AMD hammer CPU |
o HP ProLiant ML350 (HyperThreading) |
EMULATORS AND VIRTUALIZERS |
o Bochs 2.2 |
o Simics Simics 2.2.19 |
o Bochs 2.2.1 |
o Simics 2.2.19 |
/SPARTAN/trunk/doc/arch/mips32 |
---|
10,6 → 10,9 |
o SGI Indy R4600 |
o emulated MIPS 4K CPU |
CPU |
o QED R4600 |
COMPILER REQUIREMENTS |
o mips binutils 2.16 and gcc 4.0.1 cross compiler |
o older versions may do as well, but are now obsoleted |
/SPARTAN/trunk/doc/arch/ia32 |
---|
5,7 → 5,7 |
It was originally written by Jakub Jermar. |
It is meant to support ordinary PC's based on IA-32 architecture. |
Both uniprocessor and multiprocessor modes are supported. |
It runs on both emulated environment and real hardware. |
It runs both in emulated environment and on real hardware. |
HARDWARE REQUIREMENTS |
o IA-32 processor (Pentium and successors) |
/SPARTAN/trunk/arch/amd64/src/boot/boot.S |
---|
55,6 → 55,7 |
cli |
xorw %ax,%ax |
movw %ax,%ds |
movw %ax,%es |
movw %ax,%ss # initialize stack segment register |
movl $(START_STACK), %esp # initialize stack pointer |
/SPARTAN/trunk/arch/ia32/src/smp/mps.c |
---|
185,7 → 185,7 |
return; |
fs_found: |
printf("%L: MPS Floating Pointer Structure\n", fs); |
printf("%P: MPS Floating Pointer Structure\n", fs); |
frame_not_free((__address) fs); |
407,7 → 407,7 |
for (cur = ext; cur < ext + ct->ext_table_length; cur += cur[CT_EXT_ENTRY_LEN]) { |
switch (cur[CT_EXT_ENTRY_TYPE]) { |
default: |
printf("%L: skipping MP Configuration Table extended entry type %d\n", cur, cur[CT_EXT_ENTRY_TYPE]); |
printf("%P: skipping MP Configuration Table extended entry type %d\n", cur, cur[CT_EXT_ENTRY_TYPE]); |
break; |
} |
} |
/SPARTAN/trunk/arch/ia32/src/boot/boot.S |
---|
52,6 → 52,7 |
cli |
xorw %ax, %ax |
movw %ax, %ds |
movw %ax, %es |
movw %ax, %ss # initialize stack segment register |
movl $BOOTSTRAP_OFFSET - 0x400, %esp # initialize stack pointer |
85,7 → 86,7 |
movw %ax, %ds # kernel data + stack |
movw %ax, %ss |
movb $0xd1, %al # enable A20 using the keyboard controller |
movb $0xd1, %al # enable A20 using i8042 controller |
outb %al, $0x64 |
movb $0xdf, %al |
outb %al, $0x60 |
/SPARTAN/trunk/arch/ia32/src/boot/memmap.S |
---|
38,41 → 38,38 |
.section K_TEXT_START_2 |
memmap_arch_init: |
e820begin: |
xorl %ebx,%ebx # during first call, ebx must be 0 |
movw %bx,%ds |
movw %bx,%es |
xorl %ebx,%ebx # during first call, ebx must be 0 |
movw $e820table_boot,%di |
movb $MEMMAP_E820_MAX_RECORDS,e820counter_boot |
e820loop: |
movl $E820_SMAP,%edx # control sequence "SMAP" |
movl $E820_SMAP,%edx # control sequence "SMAP" |
movl $0x0000e820,%eax # service |
movl $0x0000e820,%eax # service |
movl $MEMMAP_E820_RECORD_SIZE,%ecx |
int $0x15 |
jc e820err |
cmpl $E820_SMAP,%eax # verifying BIOS |
cmpl $E820_SMAP,%eax # verifying BIOS |
jne e820err |
cmpl $MEMMAP_E820_RECORD_SIZE,%ecx |
jne e820err # bad record size - bug in bios |
jne e820err # bad record size - bug in bios |
movw %di,%ax # next record |
movw %di,%ax # next record |
addw $MEMMAP_E820_RECORD_SIZE,%ax |
movw %ax,%di |
decb e820counter_boot # buffer is full |
decb e820counter_boot # buffer is full |
jz e820end |
cmpl $0,%ebx |
jne e820loop |
testl %ebx,%ebx |
jnz e820loop |
e820end: |
movb $MEMMAP_E820_MAX_RECORDS,%al |
subb e820counter_boot,%al |
movb %al,e820counter_boot # store # of valid entries in e820counter |
movb %al,e820counter_boot # store # of valid entries in e820counter |
jmp e801begin |
91,7 → 88,7 |
jc e801end |
# fix problem with some BIOSes which use ax:bx rather than cx:dx |
# fix problem with some BIOSes which use ax:bx rather than cx:dx |
testw %cx,%cx |
jnz e801cxdx |
testw %dx,%dx |
105,12 → 102,14 |
shll $6,%edx |
andl $0xffff,%ecx |
addl %ecx,%edx |
addl $0x0400,%edx # add lower 1 MB - it's not included by e801 method |
addl $0x0400,%edx # add lower 1 MB - it's not included by e801 method |
movl %edx,e801memorysize |
e801end: |
ret |
#memory size in 1 kb chunks |
.section K_DATA_START |
#memory size in 1 kb chunks |
e801memorysize: |
.long 0 |
/SPARTAN/trunk/arch/ia32/src/acpi/acpi.c |
---|
108,7 → 108,7 |
return; |
rsdp_found: |
printf("%L: ACPI Root System Description Pointer\n", acpi_rsdp); |
printf("%P: ACPI Root System Description Pointer\n", acpi_rsdp); |
acpi_rsdt = (struct acpi_rsdt *) (__native) acpi_rsdp->rsdt_address; |
if (acpi_rsdp->revision) acpi_xsdt = (struct acpi_xsdt *) ((__address) acpi_rsdp->xsdt_address); |
143,7 → 143,7 |
if (!acpi_sdt_check((__u8 *) h)) |
goto next; |
*signature_map[j].sdt_ptr = h; |
printf("%L: ACPI %s\n", *signature_map[j].sdt_ptr, signature_map[j].description); |
printf("%P: ACPI %s\n", *signature_map[j].sdt_ptr, signature_map[j].description); |
} |
} |
next: |
164,7 → 164,7 |
if (!acpi_sdt_check((__u8 *) h)) |
goto next; |
*signature_map[j].sdt_ptr = h; |
printf("%L: ACPI %s\n", *signature_map[j].sdt_ptr, signature_map[j].description); |
printf("%P: ACPI %s\n", *signature_map[j].sdt_ptr, signature_map[j].description); |
} |
} |
next: |