| /* |
| * Copyright (C) 2002 Jeff Dike (jdike@karaya.com) |
| * Licensed under the GPL |
| */ |
| |
| #ifndef __TLB_H__ |
| #define __TLB_H__ |
| |
| #include "um_mmu.h" |
| |
| struct host_vm_op { |
| enum { MMAP, MUNMAP, MPROTECT } type; |
| union { |
| struct { |
| unsigned long addr; |
| unsigned long len; |
| unsigned int r:1; |
| unsigned int w:1; |
| unsigned int x:1; |
| int fd; |
| __u64 offset; |
| } mmap; |
| struct { |
| unsigned long addr; |
| unsigned long len; |
| } munmap; |
| struct { |
| unsigned long addr; |
| unsigned long len; |
| unsigned int r:1; |
| unsigned int w:1; |
| unsigned int x:1; |
| } mprotect; |
| } u; |
| }; |
| |
| extern void mprotect_kernel_vm(int w); |
| extern void force_flush_all(void); |
| extern void fix_range_common(struct mm_struct *mm, unsigned long start_addr, |
| unsigned long end_addr, int force, int data, |
| void (*do_ops)(int, struct host_vm_op *, int)); |
| extern int flush_tlb_kernel_range_common(unsigned long start, |
| unsigned long end); |
| |
| extern int add_mmap(unsigned long virt, unsigned long phys, unsigned long len, |
| int r, int w, int x, struct host_vm_op *ops, int index, |
| int last_filled, int data, |
| void (*do_ops)(int, struct host_vm_op *, int)); |
| extern int add_munmap(unsigned long addr, unsigned long len, |
| struct host_vm_op *ops, int index, int last_filled, |
| int data, void (*do_ops)(int, struct host_vm_op *, int)); |
| extern int add_mprotect(unsigned long addr, unsigned long len, int r, int w, |
| int x, struct host_vm_op *ops, int index, |
| int last_filled, int data, |
| void (*do_ops)(int, struct host_vm_op *, int)); |
| #endif |
| |
| /* |
| * Overrides for Emacs so that we follow Linus's tabbing style. |
| * Emacs will notice this stuff at the end of the file and automatically |
| * adjust the settings for this buffer only. This must remain at the end |
| * of the file. |
| * --------------------------------------------------------------------------- |
| * Local variables: |
| * c-file-style: "linux" |
| * End: |
| */ |