Subversion Repositories HelenOS-historic

Compare Revisions

Ignore whitespace Rev 242 → Rev 243

/SPARTAN/trunk/src/build.amd64
9,13 → 9,17
set -e
cd ../arch
for a in drivers bios mm/frame.c mm/tlb.c mm/memory_init.c boot/memmap.S; do
echo ln -sf `pwd`/ia32/src/$a amd64/src/$a
ln -sf `pwd`/ia32/src/$a amd64/src/$a
if [ \! -e amd64/src/$a ]; then
echo ln -sf `pwd`/ia32/src/$a amd64/src/$a
ln -sf `pwd`/ia32/src/$a amd64/src/$a
fi
done
 
for a in ega.h i8042.h i8259.h i8254.h interrupt.h bios mm/memory_init.h; do
echo ln -sf `pwd`/ia32/include/$a amd64/include/$a
ln -sf `pwd`/ia32/include/$a amd64/include/$a
if [ \! -e amd64/include/$a ]; then
echo ln -sf `pwd`/ia32/include/$a amd64/include/$a
ln -sf `pwd`/ia32/include/$a amd64/include/$a
fi
done
)
make dist-clean ARCH=ia32
/SPARTAN/trunk/arch/amd64/_link.ld
24,6 → 24,7
 
.mapped (0xffffffff80000000+SIZEOF(.unmapped)+0x8000) : AT (0x8000+SIZEOF(.unmapped)) {
ktext_start = .;
*(BOOT_DATA);
*(.text);
ktext_end = .;
 
42,4 → 43,7
*(K_DATA_END);
kdata_end = .;
}
_map_address = 0xffffffff80000000;
e820table_boot = e820table - _map_address;
e820counter_boot = e820counter - _map_address;
}
/SPARTAN/trunk/arch/ia32/src/boot/memmap.S
34,8 → 34,6
E820_SMAP = 0x534d4150
 
.global memmap_arch_init
.global e820counter
.global e820table
.global e801memorysize
 
.code16
47,8 → 45,8
xorl %ebx,%ebx # during first call, ebx must be 0
movw %bx,%ds
movw %bx,%es
movw $e820table,%di
movb $E820_MAX_RECORDS,e820counter
movw $e820table_boot,%di
movb $E820_MAX_RECORDS,e820counter_boot
e820loop:
movl $E820_SMAP,%edx # control sequence "SMAP"
 
67,7 → 65,7
addw $E820_RECORD_SIZE,%ax
movw %ax,%di
decb e820counter # buffer is full
decb e820counter_boot # buffer is full
jz e820end
cmpl $0,%ebx
75,13 → 73,13
e820end:
movb $E820_MAX_RECORDS,%al
subb e820counter,%al
movb %al,e820counter # store # of valid entries in e820counter
subb e820counter_boot,%al
movb %al,e820counter_boot # store # of valid entries in e820counter
 
jmp e801begin
 
e820err:
movb $0,e820counter
movb $0,e820counter_boot
 
# method e801 - get size of memory
 
117,9 → 115,4
#memory size in 1 kb chunks
e801memorysize:
.long 0
 
e820counter:
.byte 0xff
 
e820table:
.space (32*E820_RECORD_SIZE),0xff # space for 32 records, each E820_RECORD_SIZE bytes long
/SPARTAN/trunk/arch/ia32/src/mm/memory_init.c
31,6 → 31,9
#include <arch/mm/page.h>
#include <print.h>
 
__u8 e820counter __attribute__ ((section ("BOOT_DATA"))) = 0xff;
struct e820memmap_ e820table[MEMMAP_E820_MAX_RECORDS] __attribute__ ((section ("BOOT_DATA"))) ;
 
size_t get_memory_size(void)
{
return e801memorysize*1024;
40,16 → 43,9
{
__u8 i;
/*
* We must not work with the original addresses for they are not mapped anymore.
*/
struct e820memmap_ *memtable = (struct e820memmap_ *) PA2KA(e820table);
__u32 *counter_p = (__u32 *) PA2KA(&e820counter);
for (i=*counter_p;i>0;i--) {
printf("E820 base: %Q size: %Q type: ", memtable[i-1].base_address, memtable[i-1].size);
switch (memtable[i-1].type) {
for (i=e820counter;i>0;i--) {
printf("E820 base: %Q size: %Q type: ", e820table[i-1].base_address, e820table[i-1].size);
switch (e820table[i-1].type) {
case MEMMAP_MEMORY_AVAILABLE:
printf("available memory\n");
break;
/SPARTAN/trunk/arch/ia32/_link.ld
24,6 → 24,7
 
.mapped (0x80100000+SIZEOF(.unmapped)+0x8000) : AT (0x8000+SIZEOF(.unmapped)) {
ktext_start = .;
*(BOOT_DATA)
*(.text);
ktext_end = .;
 
43,5 → 44,8
}
_hardcoded_kernel_size = (ktext_end - ktext_start) + (unmapped_ktext_end - unmapped_ktext_start) + (kdata_end - kdata_start) + (unmapped_kdata_end - unmapped_kdata_start);
 
_map_address = 0x80100000;
e820table_boot = e820table - _map_address;
e820counter_boot = e820counter - _map_address;
}