Subversion Repositories HelenOS

Rev

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