Since only the arch dependent code may know how much memory the boot
loader preallocated, arch_vm_init_end() (formerly called _endvm()) now calls the new vm_free_unused_boot_loader_range() with the correct parameters. Moved the creation of the DMA area from 0-0xa0000 into arch_vm_init_post_area(). Changed return types to status_t rather than just having "int" stand for a status code. git-svn-id: file:///srv/svn/repos/haiku/trunk/current@9425 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
@@ -1,4 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
|
** Copyright 2002-2004, The Haiku Team. All rights reserved.
|
||||||
|
** Distributed under the terms of the Haiku License.
|
||||||
|
**
|
||||||
** Copyright 2001, Travis Geiselbrecht. All rights reserved.
|
** Copyright 2001, Travis Geiselbrecht. All rights reserved.
|
||||||
** Distributed under the terms of the NewOS License.
|
** Distributed under the terms of the NewOS License.
|
||||||
*/
|
*/
|
||||||
@@ -23,43 +26,46 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
int
|
status_t
|
||||||
arch_vm_init(kernel_args *ka)
|
arch_vm_init(kernel_args *args)
|
||||||
{
|
{
|
||||||
TRACE(("arch_vm_init: entry\n"));
|
TRACE(("arch_vm_init: entry\n"));
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int
|
status_t
|
||||||
arch_vm_init2(kernel_args *ka)
|
arch_vm_init_post_area(kernel_args *args)
|
||||||
{
|
{
|
||||||
|
void *dmaAddress;
|
||||||
|
area_id id;
|
||||||
|
|
||||||
TRACE(("arch_vm_init2: entry\n"));
|
TRACE(("arch_vm_init2: entry\n"));
|
||||||
|
|
||||||
// account for DMA area and mark the pages unusable
|
// account for DMA area and mark the pages unusable
|
||||||
vm_mark_page_range_inuse(0x0, 0xa0000 / PAGE_SIZE);
|
vm_mark_page_range_inuse(0x0, 0xa0000 / B_PAGE_SIZE);
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
int
|
|
||||||
arch_vm_init_endvm(kernel_args *ka)
|
|
||||||
{
|
|
||||||
region_id id;
|
|
||||||
void *ptr;
|
|
||||||
|
|
||||||
TRACE(("arch_vm_init_endvm: entry\n"));
|
|
||||||
|
|
||||||
// map 0 - 0xa0000 directly
|
// map 0 - 0xa0000 directly
|
||||||
id = map_physical_memory("dma_region", (void *)0x0, 0xa0000,
|
id = map_physical_memory("dma_region", (void *)0x0, 0xa0000,
|
||||||
B_ANY_KERNEL_ADDRESS, B_KERNEL_READ_AREA | B_KERNEL_WRITE_AREA, &ptr);
|
B_ANY_KERNEL_ADDRESS, B_KERNEL_READ_AREA | B_KERNEL_WRITE_AREA, &dmaAddress);
|
||||||
if (id < 0) {
|
if (id < 0) {
|
||||||
panic("arch_vm_init_endvm: unable to map dma region\n");
|
panic("arch_vm_init_post_areas: unable to map dma region\n");
|
||||||
return B_NO_MEMORY;
|
return B_NO_MEMORY;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return B_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
status_t
|
||||||
|
arch_vm_init_end(kernel_args *args)
|
||||||
|
{
|
||||||
|
TRACE(("arch_vm_init_endvm: entry\n"));
|
||||||
|
|
||||||
|
// throw away anything in the kernel_args.pgtable[] that's not yet mapped
|
||||||
|
vm_free_unused_boot_loader_range(KERNEL_BASE, 0x400000 * args->arch_args.num_pgtables);
|
||||||
|
|
||||||
|
return B_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user