1 /* The kernel call implemented in this file:
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
10 #include "kernel/system.h"
12 #include <minix/type.h>
14 #include "arch_proto.h"
16 static void set_ttbr(struct proc
*p
, u32_t ttbr
, u32_t
*v
)
18 /* Set process TTBR. */
19 p
->p_seg
.p_ttbr
= ttbr
;
20 assert(p
->p_seg
.p_ttbr
);
21 p
->p_seg
.p_ttbr_v
= v
;
22 if(p
== get_cpulocal_var(ptproc
)) {
23 write_ttbr0(p
->p_seg
.p_ttbr
);
25 if(p
->p_nr
== VM_PROC_NR
) {
26 if (arch_enable_paging(p
) != OK
)
27 panic("arch_enable_paging failed");
29 RTS_UNSET(p
, RTS_VMINHIBIT
);
32 /*===========================================================================*
34 *===========================================================================*/
36 register message
*m_ptr
, /* pointer to request message */
40 switch(m_ptr
->SVMCTL_PARAM
) {
42 /* Get process page directory base reg (TTBR). */
43 m_ptr
->SVMCTL_VALUE
= p
->p_seg
.p_ttbr
;
45 case VMCTL_SETADDRSPACE
:
46 set_ttbr(p
, m_ptr
->SVMCTL_PTROOT
, (u32_t
*) m_ptr
->SVMCTL_PTROOT_V
);
55 printf("arch_do_vmctl: strange param %d\n", m_ptr
->SVMCTL_PARAM
);