summaryrefslogtreecommitdiff
path: root/minix/lib/libsys/sys_vumap.c
blob: b1b56b449be23300b5e290f68b53d05a32496877 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include "syslib.h"

/*===========================================================================*
 *				sys_vumap				     *
 *===========================================================================*/
int sys_vumap(
  endpoint_t endpt,			/* source process endpoint, or SELF */
  struct vumap_vir *vvec,		/* virtual (input) vector */
  int vcount,				/* number of elements in vvec */
  size_t offset,			/* offset into first vvec element */
  int access,				/* requested safecopy access flags */
  struct vumap_phys *pvec,		/* physical (output) vector */
  int *pcount				/* (max, returned) nr of els in pvec */
)
{
  message m;
  int r;

  m.m_lsys_krn_sys_vumap.endpt = endpt;
  m.m_lsys_krn_sys_vumap.vaddr = (vir_bytes) vvec;
  m.m_lsys_krn_sys_vumap.vcount = vcount;
  m.m_lsys_krn_sys_vumap.offset = offset;
  m.m_lsys_krn_sys_vumap.access = access;
  m.m_lsys_krn_sys_vumap.paddr = (vir_bytes) pvec;
  m.m_lsys_krn_sys_vumap.pmax = *pcount;

  r = _kernel_call(SYS_VUMAP, &m);

  if (r != OK)
	return r;

  *pcount = m.m_krn_lsys_sys_vumap.pcount;
  return OK;
}