46
46
grub_addr_t grub_os_area_addr;
47
47
grub_size_t grub_os_area_size;
48
grub_size_t grub_lower_mem, grub_upper_mem;
51
grub_millisleep (grub_uint32_t ms)
53
grub_millisleep_generic (ms);
57
50
grub_arch_sync_caches (void *address __attribute__ ((unused)),
58
51
grub_size_t len __attribute__ ((unused)))
65
58
/* XXX: This should be enough. */
68
if (grub_memdisk_image_size)
70
grub_sprintf (dev, "(memdisk)%s", grub_prefix);
71
grub_strcpy (grub_prefix, dev);
73
else if (grub_install_dos_part != -2)
75
if (grub_boot_drive >= GRUB_BIOSDISK_MACHINE_CDROM_START)
76
grub_sprintf (dev, "(cd%u",
77
grub_boot_drive - GRUB_BIOSDISK_MACHINE_CDROM_START);
79
grub_sprintf (dev, "(%cd%u",
80
(grub_boot_drive & 0x80) ? 'h' : 'f',
81
grub_boot_drive & 0x7f);
61
if (grub_prefix[0] != '(')
63
/* No hardcoded root partition - make it from the boot drive and the
64
partition number encoded at the install time. */
65
grub_sprintf (dev, "(%cd%u", (grub_boot_drive & 0x80) ? 'h' : 'f',
66
grub_boot_drive & 0x7f);
83
68
if (grub_install_dos_part >= 0)
84
69
grub_sprintf (dev + grub_strlen (dev), ",%u", grub_install_dos_part + 1);
86
71
if (grub_install_bsd_part >= 0)
87
72
grub_sprintf (dev + grub_strlen (dev), ",%c", grub_install_bsd_part + 'a');
89
74
grub_sprintf (dev + grub_strlen (dev), ")%s", grub_prefix);
90
75
grub_strcpy (grub_prefix, dev);
93
78
return grub_prefix;
144
129
grub_machine_init (void)
147
struct grub_machine_mmap_entry *entry
148
= (struct grub_machine_mmap_entry *) GRUB_MEMORY_MACHINE_SCRATCH_ADDR;
151
134
/* Initialize the console as early as possible. */
152
135
grub_console_init ();
154
137
grub_lower_mem = grub_get_memsize (0) << 10;
156
139
/* Sanity check. */
157
140
if (grub_lower_mem < GRUB_MEMORY_MACHINE_RESERVED_END)
158
141
grub_fatal ("too small memory");
162
145
grub_gate_a20 (1);
148
/* FIXME: This prevents loader/i386/linux.c from using low memory. When our
149
heap implements support for requesting a chunk in low memory, this should
150
no longer be a problem. */
165
152
/* Add the lower memory into free memory. */
166
153
if (grub_lower_mem >= GRUB_MEMORY_MACHINE_RESERVED_END)
167
154
add_mem_region (GRUB_MEMORY_MACHINE_RESERVED_END,
168
155
grub_lower_mem - GRUB_MEMORY_MACHINE_RESERVED_END);
170
/* Check if grub_get_mmap_entry works. */
171
cont = grub_get_mmap_entry (entry, 0);
176
/* Avoid the lower memory. */
177
if (entry->addr < 0x100000)
179
if (entry->len <= 0x100000 - entry->addr)
182
entry->len -= 0x100000 - entry->addr;
183
entry->addr = 0x100000;
187
if (entry->addr <= 0xFFFFFFFF && entry->type == 1)
192
addr = (grub_addr_t) entry->addr;
193
len = ((addr + entry->len > 0xFFFFFFFF)
195
: (grub_size_t) entry->len);
196
add_mem_region (addr, len);
203
cont = grub_get_mmap_entry (entry, cont);
158
auto int NESTED_FUNC_ATTR hook (grub_uint64_t, grub_uint64_t, grub_uint32_t);
159
int NESTED_FUNC_ATTR hook (grub_uint64_t addr, grub_uint64_t size, grub_uint32_t type)
208
grub_uint32_t eisa_mmap = grub_get_eisa_mmap ();
212
add_mem_region (0x100000, (eisa_mmap & 0xFFFF) << 10);
213
add_mem_region (0x1000000, eisa_mmap & ~0xFFFF);
216
add_mem_region (0x100000, grub_get_memsize (1) << 10);
161
/* Avoid the lower memory. */
164
if (size <= 0x100000 - addr)
167
size -= 0x100000 - addr;
172
if (addr <= 0xFFFFFFFF && type == GRUB_MACHINE_MEMORY_AVAILABLE)
176
len = (grub_size_t) ((addr + size > 0xFFFFFFFF)
179
add_mem_region (addr, len);
185
grub_machine_mmap_iterate (hook);
219
187
compact_mem_regions ();
221
189
/* Add the memory regions to free memory, except for the region starting
227
195
grub_size_t quarter = mem_regions[i].size >> 2;
229
grub_upper_mem = mem_regions[i].size;
230
197
grub_os_area_addr = mem_regions[i].addr;
231
198
grub_os_area_size = mem_regions[i].size - quarter;
232
199
grub_mm_init_region ((void *) (grub_os_area_addr + grub_os_area_size),
250
219
grub_machine_fini (void)
252
221
grub_console_fini ();
255
225
/* Return the end of the core image. */
257
227
grub_arch_modules_addr (void)
259
return grub_end_addr;
262
/* Return the start of the memdisk image. */
264
grub_arch_memdisk_addr (void)
266
229
return GRUB_MEMORY_MACHINE_DECOMPRESSION_ADDR
267
+ (grub_kernel_image_size - GRUB_KERNEL_MACHINE_RAW_SIZE)
268
+ grub_total_module_size;
271
/* Return the size of the memdisk image. */
273
grub_arch_memdisk_size (void)
275
return grub_memdisk_image_size;
230
+ (grub_kernel_image_size - GRUB_KERNEL_MACHINE_RAW_SIZE);