30 |
pupa_machine_init (void) |
pupa_machine_init (void) |
31 |
{ |
{ |
32 |
pupa_uint32_t cont; |
pupa_uint32_t cont; |
33 |
struct pupa_machine_mmap_entry entry; |
struct pupa_machine_mmap_entry *entry |
34 |
|
= (struct pupa_machine_mmap_entry *) PUPA_MEMORY_MACHINE_SCRATCH_ADDR; |
35 |
pupa_size_t lower_mem = (pupa_get_memsize (0) << 10); |
pupa_size_t lower_mem = (pupa_get_memsize (0) << 10); |
36 |
pupa_addr_t end_addr = pupa_get_end_addr (); |
pupa_addr_t end_addr = pupa_get_end_addr (); |
37 |
|
|
54 |
PUPA_MEMORY_MACHINE_RESERVED_START - end_addr); |
PUPA_MEMORY_MACHINE_RESERVED_START - end_addr); |
55 |
|
|
56 |
/* Check if pupa_get_mmap_entry works. */ |
/* Check if pupa_get_mmap_entry works. */ |
57 |
cont = pupa_get_mmap_entry (&entry, 0); |
cont = pupa_get_mmap_entry (entry, 0); |
58 |
|
|
59 |
if (entry.size) |
if (entry->size) |
60 |
do |
do |
61 |
{ |
{ |
62 |
/* Avoid the lower memory. */ |
/* Avoid the lower memory. */ |
63 |
if (entry.addr < 0x100000) |
if (entry->addr < 0x100000) |
64 |
{ |
{ |
65 |
if (entry.len <= 0x100000 - entry.addr) |
if (entry->len <= 0x100000 - entry->addr) |
66 |
goto next; |
goto next; |
67 |
|
|
68 |
entry.len -= 0x100000 - entry.addr; |
entry->len -= 0x100000 - entry->addr; |
69 |
entry.addr = 0x100000; |
entry->addr = 0x100000; |
70 |
} |
} |
71 |
|
|
72 |
/* Ignore >4GB. */ |
/* Ignore >4GB. */ |
73 |
if (entry.addr <= 0xFFFFFFFF && entry.type == 1) |
if (entry->addr <= 0xFFFFFFFF && entry->type == 1) |
74 |
{ |
{ |
75 |
pupa_addr_t addr; |
pupa_addr_t addr; |
76 |
pupa_size_t len; |
pupa_size_t len; |
77 |
|
|
78 |
addr = (pupa_addr_t) entry.addr; |
addr = (pupa_addr_t) entry->addr; |
79 |
len = ((addr + entry.len > 0xFFFFFFFF) |
len = ((addr + entry->len > 0xFFFFFFFF) |
80 |
? 0xFFFFFFFF - addr |
? 0xFFFFFFFF - addr |
81 |
: (pupa_size_t) entry.len); |
: (pupa_size_t) entry->len); |
82 |
pupa_mm_init_region ((void *) addr, len); |
pupa_mm_init_region ((void *) addr, len); |
83 |
} |
} |
84 |
|
|
86 |
if (! cont) |
if (! cont) |
87 |
break; |
break; |
88 |
|
|
89 |
cont = pupa_get_mmap_entry (&entry, cont); |
cont = pupa_get_mmap_entry (entry, cont); |
90 |
} |
} |
91 |
while (entry.size); |
while (entry->size); |
92 |
else |
else |
93 |
{ |
{ |
94 |
pupa_uint32_t eisa_mmap = pupa_get_eisa_mmap (); |
pupa_uint32_t eisa_mmap = pupa_get_eisa_mmap (); |