- 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:
@@ -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
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
|
||||
@@ -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 */
|
||||
|
||||
|
||||
@@ -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 */
|
||||
|
||||
|
||||
Reference in New Issue
Block a user