src/kernel/arch/i386/memory.c File Reference

#include "../../kernel.h"
#include "../../proc.h"
#include "../../vm.h"
#include <minix/type.h>
#include <minix/syslib.h>
#include <minix/cpufeature.h>
#include <string.h>
#include <sys/vm_i386.h>
#include <minix/portio.h>
#include "proto.h"
#include "../../proto.h"
#include "../../debug.h"
#include "apic.h"
#include "../../watchdog.h"

Go to the source code of this file.

Defines

#define PROCPDEPTR(pr, pi)
#define NOPDE   (-1)
#define PDEMASK(n)   (1L << (n))
#define WANT_FREEPDES   (sizeof(dirtypde)*8-5)
#define HASPT(procptr)   ((procptr)->p_seg.p_cr3 != 0)
#define TYPEDIRECT   0
#define TYPEPROCMAP   1
#define TYPEPHYS   2
#define CREATEPDE(PROC, PTR, LINADDR, REMAIN, BYTES, PDE, TYPE)
#define DONEPDE(PDE)
#define WIPEPDE(PDE)
#define FLAG(v)   do { if(e & (v)) { strcat(str, #v " "); e &= ~v; } } while(0)
#define NOPT(p)   (!(p) || !HASPT(p))

Functions

FORWARD _PROTOTYPE (u32_t phys_get32,(phys_bytes v))
FORWARD _PROTOTYPE (void vm_enable_paging,(void))
PUBLIC void vm_init (struct proc *newptproc)
PRIVATE int lin_lin_copy (struct proc *srcproc, vir_bytes srclinaddr, struct proc *dstproc, vir_bytes dstlinaddr, vir_bytes bytes)
PRIVATE u32_t phys_get32 (phys_bytes addr)
PRIVATE void set_cr3 ()
PUBLIC void vm_set_cr3 (struct proc *newptproc)
PRIVATE char * cr0_str (u32_t e)
PRIVATE char * cr4_str (u32_t e)
PRIVATE void vm_enable_paging (void)
PUBLIC vir_bytes alloc_remote_segment (u32_t *selector, segframe_t *segments, int index, phys_bytes phys, vir_bytes size, int priv)
PUBLIC phys_bytes umap_remote (struct proc *rp, int seg, vir_bytes vir_addr, vir_bytes bytes)
PUBLIC phys_bytes umap_local (struct proc *rp, int seg, vir_bytes vir_addr, vir_bytes bytes)
PUBLIC phys_bytes umap_virtual (struct proc *rp, int seg, vir_bytes vir_addr, vir_bytes bytes)
PUBLIC int vm_lookup (struct proc *proc, vir_bytes virtual, vir_bytes *physical, u32_t *ptent)
PUBLIC int vm_contiguous (struct proc *targetproc, u32_t vir_buf, size_t bytes)
PRIVATE int vm_suspend (struct proc *caller, struct proc *target, vir_bytes linaddr, vir_bytes len, int wrflag, int type)
int delivermsg (struct proc *rp)
PRIVATE char * flagstr (u32_t e, int dir)
PRIVATE void vm_pt_print (u32_t *pagetable, u32_t v)
PRIVATE void vm_print (u32_t *root)
u32_t read_cr3 (void)
int vm_phys_memset (phys_bytes ph, u8_t c, phys_bytes bytes)
PUBLIC int virtual_copy_f (struct vir_addr *src_addr, struct vir_addr *dst_addr, vir_bytes bytes, int vmcheck)
PUBLIC int data_copy (endpoint_t from_proc, vir_bytes from_addr, endpoint_t to_proc, vir_bytes to_addr, size_t bytes)
PUBLIC int data_copy_vmcheck (endpoint_t from_proc, vir_bytes from_addr, endpoint_t to_proc, vir_bytes to_addr, size_t bytes)
PUBLIC int arch_pre_exec (struct proc *pr, u32_t ip, u32_t sp)
PUBLIC int arch_umap (struct proc *pr, vir_bytes offset, vir_bytes count, int seg, phys_bytes *addr)
void i386_freepde (int pde)
PUBLIC arch_phys_map (int index, phys_bytes *addr, phys_bytes *len, int *flags)
PUBLIC int arch_phys_map_reply (int index, vir_bytes addr)
PUBLIC int arch_enable_paging (void)

Variables

PRIVATE int psok = 0
PUBLIC u8_tvm_pagedirs = NULL
PUBLIC u32_t dirtypde
PRIVATE int nfreepdes = 0
PRIVATE int freepdes [WANT_FREEPDES]
PRIVATE int inusepde = NOPDE
PRIVATE u32_t vm_cr3
u32_t thecr3


Define Documentation

#define CREATEPDE ( PROC,
PTR,
LINADDR,
REMAIN,
BYTES,
PDE,
TYPE   ) 

Definition at line 78 of file memory.c.

#define DONEPDE ( PDE   ) 

Value:

{                               \
        if(PDE != NOPDE) {                              \
                vmassert(PDE > 0);                      \
                vmassert(PDE < sizeof(dirtypde)*8);     \
                dirtypde |= PDEMASK(PDE);               \
        }                                               \
}

Definition at line 135 of file memory.c.

#define FLAG (  )     do { if(e & (v)) { strcat(str, #v " "); e &= ~v; } } while(0)

#define HASPT ( procptr   )     ((procptr)->p_seg.p_cr3 != 0)

Definition at line 42 of file memory.c.

#define NOPDE   (-1)

Definition at line 36 of file memory.c.

#define NOPT ( p   )     (!(p) || !HASPT(p))

#define PDEMASK ( n   )     (1L << (n))

Definition at line 37 of file memory.c.

#define PROCPDEPTR ( pr,
pi   ) 

Value:

((u32_t *) ((u8_t *) vm_pagedirs +\
                                I386_PAGE_SIZE * pr->p_nr +     \
                                I386_VM_PT_ENT_SIZE * pi))

Definition at line 30 of file memory.c.

#define TYPEDIRECT   0

Definition at line 61 of file memory.c.

#define TYPEPHYS   2

Definition at line 63 of file memory.c.

#define TYPEPROCMAP   1

Definition at line 62 of file memory.c.

#define WANT_FREEPDES   (sizeof(dirtypde)*8-5)

Definition at line 39 of file memory.c.

#define WIPEPDE ( PDE   ) 

Value:

{                               \
        if(PDE != NOPDE) {                              \
                vmassert(PDE > 0);                      \
                vmassert(PDE < sizeof(dirtypde)*8);     \
                *PROCPDEPTR(ptproc, PDE) = 0;           \
        }                                               \
}

Definition at line 143 of file memory.c.


Function Documentation

FORWARD _PROTOTYPE ( void  vm_enable_paging,
(void)   
)

FORWARD _PROTOTYPE ( u32_t  phys_get32,
(phys_bytes v)   
)

PUBLIC vir_bytes alloc_remote_segment ( u32_t selector,
segframe_t segments,
int  index,
phys_bytes  phys,
vir_bytes  size,
int  priv 
)

Definition at line 329 of file memory.c.

PUBLIC int arch_enable_paging ( void   ) 

Definition at line 1046 of file memory.c.

PUBLIC arch_phys_map ( int  index,
phys_bytes addr,
phys_bytes len,
int *  flags 
)

Definition at line 1018 of file memory.c.

PUBLIC int arch_phys_map_reply ( int  index,
vir_bytes  addr 
)

Definition at line 1035 of file memory.c.

PUBLIC int arch_pre_exec ( struct proc pr,
u32_t  ip,
u32_t  sp 
)

Definition at line 982 of file memory.c.

PUBLIC int arch_umap ( struct proc pr,
vir_bytes  offset,
vir_bytes  count,
int  seg,
phys_bytes addr 
)

Definition at line 994 of file memory.c.

PRIVATE char* cr0_str ( u32_t  e  ) 

Definition at line 260 of file memory.c.

PRIVATE char* cr4_str ( u32_t  e  ) 

Definition at line 276 of file memory.c.

PUBLIC int data_copy ( endpoint_t  from_proc,
vir_bytes  from_addr,
endpoint_t  to_proc,
vir_bytes  to_addr,
size_t  bytes 
)

Definition at line 944 of file memory.c.

PUBLIC int data_copy_vmcheck ( endpoint_t  from_proc,
vir_bytes  from_addr,
endpoint_t  to_proc,
vir_bytes  to_addr,
size_t  bytes 
)

Definition at line 963 of file memory.c.

int delivermsg ( struct proc rp  ) 

Definition at line 614 of file memory.c.

PRIVATE char* flagstr ( u32_t  e,
int  dir 
)

Definition at line 656 of file memory.c.

void i386_freepde ( int  pde  ) 

Definition at line 1011 of file memory.c.

PRIVATE int lin_lin_copy ( struct proc srcproc,
vir_bytes  srclinaddr,
struct proc dstproc,
vir_bytes  dstlinaddr,
vir_bytes  bytes 
)

Definition at line 154 of file memory.c.

PRIVATE u32_t phys_get32 ( phys_bytes  addr  ) 

Definition at line 223 of file memory.c.

u32_t read_cr3 ( void   ) 

Definition at line 729 of file memory.c.

PRIVATE void set_cr3 (  ) 

Definition at line 243 of file memory.c.

PUBLIC phys_bytes umap_local ( struct proc rp,
int  seg,
vir_bytes  vir_addr,
vir_bytes  bytes 
)

Definition at line 377 of file memory.c.

PUBLIC phys_bytes umap_remote ( struct proc rp,
int  seg,
vir_bytes  vir_addr,
vir_bytes  bytes 
)

Definition at line 354 of file memory.c.

PUBLIC phys_bytes umap_virtual ( struct proc rp,
int  seg,
vir_bytes  vir_addr,
vir_bytes  bytes 
)

Definition at line 416 of file memory.c.

PUBLIC int virtual_copy_f ( struct vir_addr src_addr,
struct vir_addr dst_addr,
vir_bytes  bytes,
int  vmcheck 
)

Definition at line 778 of file memory.c.

PUBLIC int vm_contiguous ( struct proc targetproc,
u32_t  vir_buf,
size_t  bytes 
)

Definition at line 524 of file memory.c.

PRIVATE void vm_enable_paging ( void   ) 

Definition at line 292 of file memory.c.

PUBLIC void vm_init ( struct proc newptproc  ) 

Definition at line 51 of file memory.c.

PUBLIC int vm_lookup ( struct proc proc,
vir_bytes  virtual,
vir_bytes physical,
u32_t ptent 
)

Definition at line 468 of file memory.c.

int vm_phys_memset ( phys_bytes  ph,
u8_t  c,
phys_bytes  bytes 
)

Definition at line 739 of file memory.c.

PRIVATE void vm_print ( u32_t root  ) 

Definition at line 697 of file memory.c.

PRIVATE void vm_pt_print ( u32_t pagetable,
u32_t  v 
)

Definition at line 673 of file memory.c.

PUBLIC void vm_set_cr3 ( struct proc newptproc  ) 

Definition at line 248 of file memory.c.

PRIVATE int vm_suspend ( struct proc caller,
struct proc target,
vir_bytes  linaddr,
vir_bytes  len,
int  wrflag,
int  type 
)

Definition at line 582 of file memory.c.


Variable Documentation

PUBLIC u32_t dirtypde

Definition at line 38 of file memory.c.

PRIVATE int freepdes[WANT_FREEPDES]

Definition at line 40 of file memory.c.

PRIVATE int inusepde = NOPDE

Definition at line 40 of file memory.c.

PRIVATE int nfreepdes = 0

Definition at line 40 of file memory.c.

PRIVATE int psok = 0

Definition at line 28 of file memory.c.

Definition at line 727 of file memory.c.

PRIVATE u32_t vm_cr3

Definition at line 241 of file memory.c.

PUBLIC u8_t* vm_pagedirs = NULL

Definition at line 34 of file memory.c.


Generated on Tue Mar 9 04:36:49 2010 for Minix by  doxygen 1.5.8