panic() cleanup.
[minix.git] / servers / pm / dma.c
blob11afac7ef7e7e3a84d5e57ba8af1e59b05c6734e
2 #include "pm.h"
4 #include <minix/com.h>
5 #include <minix/callnr.h>
6 #include <minix/type.h>
7 #include <minix/config.h>
8 #include <minix/vm.h>
9 #include <signal.h>
10 #include <stdlib.h>
11 #include <string.h>
12 #include <archconst.h>
14 #include "mproc.h"
16 /*===========================================================================*
17 * do_adddma *
18 *===========================================================================*/
19 PUBLIC int do_adddma()
21 endpoint_t req_proc_e, target_proc_e;
22 int proc_n, r;
23 phys_bytes base, size;
25 if (mp->mp_effuid != SUPER_USER)
26 return EPERM;
28 req_proc_e= m_in.m_source;
29 target_proc_e= m_in.m2_i1;
30 base= m_in.m2_l1;
31 size= m_in.m2_l2;
33 if((r = vm_adddma(req_proc_e, target_proc_e, base, size)) != OK) {
34 printf("pm:do_adddma: vm_adddma failed (%d)\n", r);
35 return r;
38 /* Find target process */
39 if (pm_isokendpt(target_proc_e, &proc_n) != OK)
41 printf("pm:do_adddma: endpoint %d not found\n", target_proc_e);
42 return EINVAL;
45 return OK;
48 /*===========================================================================*
49 * do_deldma *
50 *===========================================================================*/
51 PUBLIC int do_deldma()
53 endpoint_t req_proc_e, target_proc_e;
54 phys_bytes base, size;
56 if (mp->mp_effuid != SUPER_USER)
57 return EPERM;
59 req_proc_e= m_in.m_source;
60 target_proc_e= m_in.m2_i1;
61 base= m_in.m2_l1;
62 size= m_in.m2_l2;
64 return vm_deldma(req_proc_e, target_proc_e, base, size);
67 /*===========================================================================*
68 * do_getdma *
69 *===========================================================================*/
70 PUBLIC int do_getdma()
72 endpoint_t req_proc_e, proc;
73 int r;
74 phys_bytes base, size;
76 if (mp->mp_effuid != SUPER_USER)
77 return EPERM;
79 req_proc_e= m_in.m_source;
81 if((r=vm_getdma(req_proc_e, &proc, &base, &size)) != OK)
82 return r;
84 printf("pm:do_getdma: setting reply to 0x%lx@0x%lx proc %d\n",
85 size, base, proc);
87 mp->mp_reply.m2_i1= proc;
88 mp->mp_reply.m2_l1= base;
89 mp->mp_reply.m2_l2= size;
91 return OK;