- the arch_vm_translation_map.c exported functions now have the arch_ prefix

- the above file now also exports a function to finally complete the kernel's
  address space translation map after semaphores became available (was just
  not done before)
- renamed some functions, especially the *_init2() functions are now called
  like *_init_post_area() to indicate they are called after the area functionality
  became available
- removed the _struct suffix from certain structures
- fixed some return types
- added prototype for vm_free_unused_boot_loader_range() to be called by
  arch code.


git-svn-id: file:///srv/svn/repos/haiku/trunk/current@9423 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Axel Dörfler
2004-10-19 23:19:10 +00:00
parent 027c6be29f
commit 67a53f72af
6 changed files with 52 additions and 34 deletions
+6 -3
View File
@@ -1,4 +1,7 @@
/*
** Copyright 2002-2004, The Haiku Team. All rights reserved.
** Distributed under the terms of the Haiku License.
**
** Copyright 2001-2002, Travis Geiselbrecht. All rights reserved.
** Distributed under the terms of the NewOS License.
*/
@@ -13,9 +16,9 @@
extern "C" {
#endif
int arch_vm_init(struct kernel_args *ka);
int arch_vm_init2(struct kernel_args *ka);
int arch_vm_init_endvm(struct kernel_args *ka);
status_t arch_vm_init(struct kernel_args *args);
status_t arch_vm_init_post_area(struct kernel_args *args);
status_t arch_vm_init_end(struct kernel_args *args);
void arch_vm_aspace_swap(vm_address_space *aspace);
#ifdef __cplusplus
@@ -1,4 +1,7 @@
/*
** Copyright 2002-2004, The Haiku Team. All rights reserved.
** Distributed under the terms of the Haiku License.
**
** Copyright 2001-2002, Travis Geiselbrecht. All rights reserved.
** Distributed under the terms of the NewOS License.
*/
@@ -13,13 +16,16 @@
extern "C" {
#endif
int vm_translation_map_create(vm_translation_map *new_map, bool kernel);
int vm_translation_map_module_init(struct kernel_args *ka);
int vm_translation_map_module_init2(struct kernel_args *ka);
void vm_translation_map_module_init_post_sem(struct kernel_args *ka);
status_t arch_vm_translation_map_init_map(vm_translation_map *map, bool kernel);
status_t arch_vm_translation_map_init_kernel_map_post_sem(vm_translation_map *map);
status_t arch_vm_translation_map_init(struct kernel_args *args);
status_t arch_vm_translation_map_init_post_area(struct kernel_args *args);
status_t arch_vm_translation_map_init_post_sem(struct kernel_args *args);
// quick function to map a page in regardless of map context. Used in VM initialization,
// before most vm data structures exist
status_t vm_translation_map_quick_map(struct kernel_args *ka, addr_t va, addr_t pa,
status_t arch_vm_translation_map_early_map(struct kernel_args *args, addr_t va, addr_t pa,
uint8 attributes, addr_t (*get_free_page)(struct kernel_args *));
#ifdef __cplusplus
+7 -3
View File
@@ -1,4 +1,7 @@
/*
** Copyright 2002-2004, The Haiku Team. All rights reserved.
** Distributed under the terms of the Haiku License.
**
** Copyright 2001-2002, Travis Geiselbrecht. All rights reserved.
** Distributed under the terms of the NewOS License.
*/
@@ -20,11 +23,12 @@ extern "C" {
#endif
//void vm_dump_areas(vm_address_space *aspace);
status_t vm_init(kernel_args *ka);
status_t vm_init_postsem(struct kernel_args *ka);
status_t vm_init_postthread(struct kernel_args *ka);
status_t vm_init(kernel_args *args);
status_t vm_init_post_sem(struct kernel_args *args);
status_t vm_init_post_thread(struct kernel_args *args);
status_t vm_aspace_init(void);
status_t vm_aspace_init_post_sem(void);
void vm_free_unused_boot_loader_range(addr_t start, addr_t end);
void vm_delete_aspace(vm_address_space *aspace);
status_t vm_create_aspace(const char *name, addr base, addr size, bool kernel, vm_address_space **_aspace);
+10 -7
View File
@@ -1,4 +1,7 @@
/*
** Copyright 2002-2004, The Haiku Team. All rights reserved.
** Distributed under the terms of the Haiku License.
**
** Copyright 2001-2002, Travis Geiselbrecht. All rights reserved.
** Distributed under the terms of the NewOS License.
*/
@@ -16,16 +19,16 @@ struct kernel_args;
extern "C" {
#endif
int vm_page_init(struct kernel_args *ka);
int vm_page_init2(struct kernel_args *ka);
int vm_page_init_postthread(struct kernel_args *ka);
status_t vm_page_init(struct kernel_args *args);
status_t vm_page_init_post_area(struct kernel_args *args);
status_t vm_page_init_post_thread(struct kernel_args *args);
int vm_mark_page_inuse(addr_t page);
int vm_mark_page_range_inuse(addr_t startPage, addr_t len);
int vm_page_set_state(vm_page *page, int state);
status_t vm_mark_page_inuse(addr_t page);
status_t vm_mark_page_range_inuse(addr_t startPage, addr_t length);
status_t vm_page_set_state(vm_page *page, int state);
vm_page *vm_page_allocate_page(int state);
vm_page *vm_page_allocate_page_run(int state, addr_t len);
vm_page *vm_page_allocate_page_run(int state, addr_t length);
vm_page *vm_page_allocate_specific_page(addr_t page_num, int state);
vm_page *vm_lookup_page(addr_t page_num);
+6 -3
View File
@@ -1,4 +1,7 @@
/*
** Copyright 2002-2004, The Haiku Team. All rights reserved.
** Distributed under the terms of the Haiku License.
**
** Copyright 2001-2002, Travis Geiselbrecht. All rights reserved.
** Distributed under the terms of the NewOS License.
*/
@@ -34,7 +37,7 @@
#define PAGE_PRESENT 256
// Should only be used by vm internals
int vm_page_fault(addr_t address, addr_t fault_address, bool is_write, bool is_user, addr_t *newip);
int vm_page_fault(addr_t address, addr_t faultAddress, bool isWrite, bool isUser, addr_t *newip);
void vm_increase_max_commit(addr_t delta);
int vm_daemon_init(void);
@@ -46,8 +49,8 @@ vm_address_space *vm_aspace_walk_next(struct hash_iterator *i);
addr_t vm_page_num_pages(void);
addr_t vm_page_num_free_pages(void);
// allocates memory from the ka structure
addr_t vm_alloc_from_ka_struct(kernel_args *ka, unsigned int size, int lock);
// allocates memory from the kernel_args structure
addr_t vm_alloc_from_kernel_args(kernel_args *args, size_t size, uint32 lock);
#endif /* _KERNEL_VM_PRIV_H */
+12 -13
View File
@@ -1,4 +1,7 @@
/*
** Copyright 2002-2004, The Haiku Team. All rights reserved.
** Distributed under the terms of the Haiku License.
**
** Copyright 2001-2002, Travis Geiselbrecht. All rights reserved.
** Distributed under the terms of the NewOS License.
*/
@@ -13,17 +16,17 @@
struct kernel_args;
typedef struct vm_translation_map_struct {
struct vm_translation_map_struct *next;
struct vm_translation_map_ops_struct *ops;
recursive_lock lock;
int map_count;
struct vm_translation_map_arch_info_struct *arch_data;
typedef struct vm_translation_map {
struct vm_translation_map *next;
struct vm_translation_map_ops *ops;
recursive_lock lock;
int32 map_count;
struct vm_translation_map_arch_info *arch_data;
} vm_translation_map;
// table of operations the vm may want to do to this mapping
typedef struct vm_translation_map_ops_struct {
typedef struct vm_translation_map_ops {
void (*destroy)(vm_translation_map *);
status_t (*lock)(vm_translation_map*);
status_t (*unlock)(vm_translation_map*);
@@ -34,14 +37,10 @@ typedef struct vm_translation_map_ops_struct {
status_t (*protect)(vm_translation_map *map, addr_t base, addr_t top, uint32 attributes);
status_t (*clear_flags)(vm_translation_map *map, addr_t va, uint32 flags);
void (*flush)(vm_translation_map *map);
status_t (*get_physical_page)(addr_t physical_address, addr_t *out_virtual_address, uint32 flags);
status_t (*put_physical_page)(addr_t virtual_address);
status_t (*get_physical_page)(addr_t physicalAddress, addr_t *_virtualAddress, uint32 flags);
status_t (*put_physical_page)(addr_t virtualAddress);
} vm_translation_map_ops;
// ToDo: fix this
// unlike the usual habit, the VM translation map functions are
// arch-specific but do not have the arch_ prefix.
#include <arch/vm_translation_map.h>
#endif /* KERNEL_VM_TRANSLATION_MAP_H */