Remove building with NOCRYPTO option
[minix3.git] / minix / kernel / arch / i386 / arch_do_vmctl.c
blob159cae70f77360f41f6e6290e0403b8a665e5896
1 /* The kernel call implemented in this file:
2 * m_type: SYS_VMCTL
4 * The parameters for this kernel call are:
5 * SVMCTL_WHO which process
6 * SVMCTL_PARAM set this setting (VMCTL_*)
7 * SVMCTL_VALUE to this value
8 */
10 #include "kernel/system.h"
11 #include <assert.h>
13 #include "arch_proto.h"
15 extern phys_bytes video_mem_vaddr;
17 extern char *video_mem;
19 static void setcr3(struct proc *p, u32_t cr3, u32_t *v)
21 /* Set process CR3. */
22 p->p_seg.p_cr3 = cr3;
23 assert(p->p_seg.p_cr3);
24 p->p_seg.p_cr3_v = v;
25 if(p == get_cpulocal_var(ptproc)) {
26 write_cr3(p->p_seg.p_cr3);
28 if(p->p_nr == VM_PROC_NR) {
29 if (arch_enable_paging(p) != OK)
30 panic("arch_enable_paging failed");
32 RTS_UNSET(p, RTS_VMINHIBIT);
35 /*===========================================================================*
36 * arch_do_vmctl *
37 *===========================================================================*/
38 int arch_do_vmctl(
39 register message *m_ptr, /* pointer to request message */
40 struct proc *p
43 switch(m_ptr->SVMCTL_PARAM) {
44 case VMCTL_GET_PDBR:
45 /* Get process page directory base reg (CR3). */
46 m_ptr->SVMCTL_VALUE = p->p_seg.p_cr3;
47 return OK;
48 case VMCTL_SETADDRSPACE:
49 setcr3(p, m_ptr->SVMCTL_PTROOT, (u32_t *) m_ptr->SVMCTL_PTROOT_V);
50 return OK;
51 case VMCTL_FLUSHTLB:
53 reload_cr3();
54 return OK;
56 case VMCTL_I386_INVLPG:
58 i386_invlpg(m_ptr->SVMCTL_VALUE);
59 return OK;
65 printf("arch_do_vmctl: strange param %d\n", m_ptr->SVMCTL_PARAM);
66 return EINVAL;