Rev 264 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 264 | Rev 285 | ||
---|---|---|---|
Line 27... | Line 27... | ||
27 | */ |
27 | */ |
28 | 28 | ||
29 | 29 | ||
30 | #include <arch/boot/memmapasm.h> |
30 | #include <arch/boot/memmapasm.h> |
31 | 31 | ||
32 | E820_RECORD_SIZE = MEMMAP_E820_RECORD_SIZE |
- | |
33 | E820_MAX_RECORDS = MEMMAP_E820_MAX_RECORDS |
- | |
34 | E820_SMAP = 0x534d4150 |
32 | E820_SMAP = 0x534d4150 |
35 | 33 | ||
36 | .global memmap_arch_init |
34 | .global memmap_arch_init |
37 | .global e801memorysize |
35 | .global e801memorysize |
38 | 36 | ||
Line 44... | Line 42... | ||
44 | e820begin: |
42 | e820begin: |
45 | xorl %ebx,%ebx # during first call, ebx must be 0 |
43 | xorl %ebx,%ebx # during first call, ebx must be 0 |
46 | movw %bx,%ds |
44 | movw %bx,%ds |
47 | movw %bx,%es |
45 | movw %bx,%es |
48 | movw $e820table_boot,%di |
46 | movw $e820table_boot,%di |
49 | movb $E820_MAX_RECORDS,e820counter_boot |
47 | movb $MEMMAP_E820_MAX_RECORDS,e820counter_boot |
50 | e820loop: |
48 | e820loop: |
51 | movl $E820_SMAP,%edx # control sequence "SMAP" |
49 | movl $E820_SMAP,%edx # control sequence "SMAP" |
52 | 50 | ||
53 | movl $0x0000e820,%eax # service |
51 | movl $0x0000e820,%eax # service |
54 | movl $E820_RECORD_SIZE,%ecx |
52 | movl $MEMMAP_E820_RECORD_SIZE,%ecx |
55 | int $0x15 |
53 | int $0x15 |
56 | jc e820err |
54 | jc e820err |
57 | 55 | ||
58 | cmpl $E820_SMAP,%eax # verifying BIOS |
56 | cmpl $E820_SMAP,%eax # verifying BIOS |
59 | jne e820err |
57 | jne e820err |
60 | 58 | ||
61 | cmpl $E820_RECORD_SIZE,%ecx |
59 | cmpl $MEMMAP_E820_RECORD_SIZE,%ecx |
62 | jne e820err # bad record size - bug in bios |
60 | jne e820err # bad record size - bug in bios |
63 | 61 | ||
64 | movw %di,%ax # next record |
62 | movw %di,%ax # next record |
65 | addw $E820_RECORD_SIZE,%ax |
63 | addw $MEMMAP_E820_RECORD_SIZE,%ax |
66 | movw %ax,%di |
64 | movw %ax,%di |
67 | 65 | ||
68 | decb e820counter_boot # buffer is full |
66 | decb e820counter_boot # buffer is full |
69 | jz e820end |
67 | jz e820end |
70 | 68 | ||
71 | cmpl $0,%ebx |
69 | cmpl $0,%ebx |
72 | jne e820loop |
70 | jne e820loop |
73 | 71 | ||
74 | e820end: |
72 | e820end: |
75 | movb $E820_MAX_RECORDS,%al |
73 | movb $MEMMAP_E820_MAX_RECORDS,%al |
76 | subb e820counter_boot,%al |
74 | subb e820counter_boot,%al |
77 | movb %al,e820counter_boot # store # of valid entries in e820counter |
75 | movb %al,e820counter_boot # store # of valid entries in e820counter |
78 | 76 | ||
79 | jmp e801begin |
77 | jmp e801begin |
80 | 78 |