Subversion Repositories HelenOS

Compare Revisions

Ignore whitespace Rev 346 → Rev 347

/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: