2002-07-09 16:24:59 +04:00
|
|
|
/*
|
|
|
|
** Copyright 2001-2002, Travis Geiselbrecht. All rights reserved.
|
|
|
|
** Distributed under the terms of the NewOS License.
|
|
|
|
*/
|
2003-05-03 20:03:26 +04:00
|
|
|
#ifndef KERNEL_VM_TRANSLATION_MAP_H
|
|
|
|
#define KERNEL_VM_TRANSLATION_MAP_H
|
|
|
|
|
2002-07-09 16:24:59 +04:00
|
|
|
|
|
|
|
#include <kernel.h>
|
|
|
|
#include <lock.h>
|
|
|
|
|
2003-10-29 00:10:00 +03:00
|
|
|
|
2003-05-03 20:03:26 +04:00
|
|
|
struct kernel_args;
|
|
|
|
|
|
|
|
|
2002-07-09 16:24:59 +04:00
|
|
|
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;
|
|
|
|
} vm_translation_map;
|
|
|
|
|
2003-10-29 00:10:00 +03:00
|
|
|
|
2002-07-09 16:24:59 +04:00
|
|
|
// table of operations the vm may want to do to this mapping
|
|
|
|
typedef struct vm_translation_map_ops_struct {
|
|
|
|
void (*destroy)(vm_translation_map *);
|
2004-06-17 17:22:05 +04:00
|
|
|
status_t (*lock)(vm_translation_map*);
|
|
|
|
status_t (*unlock)(vm_translation_map*);
|
|
|
|
status_t (*map)(vm_translation_map *map, addr_t va, addr_t pa, uint32 attributes);
|
|
|
|
status_t (*unmap)(vm_translation_map *map, addr_t start, addr_t end);
|
|
|
|
status_t (*query)(vm_translation_map *map, addr_t va, addr_t *_outPhysical, uint32 *_outFlags);
|
|
|
|
addr_t (*get_mapped_size)(vm_translation_map*);
|
|
|
|
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);
|
2002-07-09 16:24:59 +04:00
|
|
|
void (*flush)(vm_translation_map *map);
|
2004-06-17 17:22:05 +04:00
|
|
|
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);
|
2002-07-09 16:24:59 +04:00
|
|
|
} vm_translation_map_ops;
|
|
|
|
|
2003-10-29 00:10:00 +03:00
|
|
|
// 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>
|
2002-07-09 16:24:59 +04:00
|
|
|
|
2003-05-03 20:03:26 +04:00
|
|
|
#endif /* KERNEL_VM_TRANSLATION_MAP_H */
|
2003-10-29 00:10:00 +03:00
|
|
|
|