Test set for sys_vumap()
Located in test/kernel. Invoke "run" to run tests.
This commit is contained in:
parent
b91295a8d2
commit
cf720a028a
8 changed files with 1551 additions and 0 deletions
5
test/kernel/run
Executable file
5
test/kernel/run
Executable file
|
@ -0,0 +1,5 @@
|
|||
#!/bin/sh
|
||||
|
||||
tests="sys_vumap"
|
||||
|
||||
for i in $tests; do (cd $i && ./run); done
|
14
test/kernel/sys_vumap/Makefile
Normal file
14
test/kernel/sys_vumap/Makefile
Normal file
|
@ -0,0 +1,14 @@
|
|||
# Makefile for the sys_vumap test.
|
||||
PROG= vumaptest vumaprelay
|
||||
SRCS.vumaptest= vumaptest.c
|
||||
SRCS.vumaprelay= vumaprelay.c
|
||||
|
||||
DPADD+= ${LIBSYS}
|
||||
LDADD+= -lsys
|
||||
|
||||
MAN=
|
||||
|
||||
BINDIR?= /usr/sbin
|
||||
|
||||
.include "Makefile.inc"
|
||||
.include <minix.service.mk>
|
5
test/kernel/sys_vumap/Makefile.inc
Normal file
5
test/kernel/sys_vumap/Makefile.inc
Normal file
|
@ -0,0 +1,5 @@
|
|||
# Copied from drivers/Makefile.inc
|
||||
CPPFLAGS+= -D_MINIX -D_NETBSD_SOURCE
|
||||
LDADD+= -lminlib -lcompat_minix
|
||||
DPADD+= ${LIBMINLIB} ${LIBCOMPAT_MINIX}
|
||||
BINDIR?=/usr/sbin
|
13
test/kernel/sys_vumap/com.h
Normal file
13
test/kernel/sys_vumap/com.h
Normal file
|
@ -0,0 +1,13 @@
|
|||
#ifndef _VUMAP_COM_H
|
||||
#define _VUMAP_COM_H
|
||||
|
||||
#define VTR_RELAY 0x3000 /* SYS_VUMAP relay request */
|
||||
|
||||
#define VTR_VGRANT m10_l1 /* grant for virtual vector */
|
||||
#define VTR_VCOUNT m10_i1 /* nr of elements in virtual vector */
|
||||
#define VTR_OFFSET m10_l2 /* offset into first element */
|
||||
#define VTR_ACCESS m10_i2 /* access flags (VUA_) */
|
||||
#define VTR_PGRANT m10_l3 /* grant for physical vector */
|
||||
#define VTR_PCOUNT m10_i3 /* nr of physical elements (in/out) */
|
||||
|
||||
#endif /* _VUMAP_COM_H */
|
16
test/kernel/sys_vumap/run
Executable file
16
test/kernel/sys_vumap/run
Executable file
|
@ -0,0 +1,16 @@
|
|||
#!/bin/sh
|
||||
|
||||
make >/dev/null
|
||||
|
||||
echo -n "Kernel test (sys_vumap): "
|
||||
service up `pwd`/vumaprelay -config system.conf -label vumaprelay -script /etc/rs.single
|
||||
service up `pwd`/vumaptest -config system.conf -script /etc/rs.single 2>/dev/null
|
||||
r=$?
|
||||
service down vumaprelay
|
||||
|
||||
if [ $r -ne 0 ]; then
|
||||
echo "failure"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "ok"
|
12
test/kernel/sys_vumap/system.conf
Normal file
12
test/kernel/sys_vumap/system.conf
Normal file
|
@ -0,0 +1,12 @@
|
|||
service vumaptest {
|
||||
system
|
||||
UMAP # 14
|
||||
VUMAP # 18
|
||||
;
|
||||
};
|
||||
|
||||
service vumaprelay {
|
||||
system
|
||||
VUMAP # 18
|
||||
;
|
||||
};
|
77
test/kernel/sys_vumap/vumaprelay.c
Normal file
77
test/kernel/sys_vumap/vumaprelay.c
Normal file
|
@ -0,0 +1,77 @@
|
|||
/* Test for sys_vumap() - by D.C. van Moolenbroek */
|
||||
#include <minix/drivers.h>
|
||||
#include <assert.h>
|
||||
|
||||
#include "com.h"
|
||||
|
||||
PRIVATE int do_request(message *m)
|
||||
{
|
||||
struct vumap_vir vvec[MAPVEC_NR + 3];
|
||||
struct vumap_phys pvec[MAPVEC_NR + 3];
|
||||
int r, r2, access, vcount, pcount;
|
||||
size_t offset;
|
||||
|
||||
assert(m->m_type == VTR_RELAY);
|
||||
|
||||
vcount = m->VTR_VCOUNT;
|
||||
pcount = m->VTR_PCOUNT;
|
||||
offset = m->VTR_OFFSET;
|
||||
access = m->VTR_ACCESS;
|
||||
|
||||
r2 = sys_safecopyfrom(m->m_source, m->VTR_VGRANT, 0, (vir_bytes) vvec,
|
||||
sizeof(vvec[0]) * vcount, D);
|
||||
assert(r2 == OK);
|
||||
|
||||
r = sys_vumap(m->m_source, vvec, vcount, offset, access, pvec,
|
||||
&pcount);
|
||||
|
||||
if (pcount >= 1 && pcount <= MAPVEC_NR + 3) {
|
||||
r2 = sys_safecopyto(m->m_source, m->VTR_PGRANT, 0,
|
||||
(vir_bytes) pvec, sizeof(pvec[0]) * pcount, D);
|
||||
assert(r2 == OK);
|
||||
}
|
||||
|
||||
m->VTR_PCOUNT = pcount;
|
||||
|
||||
return r;
|
||||
}
|
||||
|
||||
PRIVATE int sef_cb_init_fresh(int UNUSED(type), sef_init_info_t *UNUSED(info))
|
||||
{
|
||||
return OK;
|
||||
}
|
||||
|
||||
PRIVATE void sef_cb_signal_handler(int sig)
|
||||
{
|
||||
if (sig == SIGTERM)
|
||||
exit(0);
|
||||
}
|
||||
|
||||
PRIVATE void sef_local_startup(void)
|
||||
{
|
||||
sef_setcb_init_fresh(sef_cb_init_fresh);
|
||||
sef_setcb_signal_handler(sef_cb_signal_handler);
|
||||
|
||||
sef_startup();
|
||||
}
|
||||
|
||||
PUBLIC int main(int argc, char **argv)
|
||||
{
|
||||
message m;
|
||||
int r;
|
||||
|
||||
env_setargs(argc, argv);
|
||||
|
||||
sef_local_startup();
|
||||
|
||||
for (;;) {
|
||||
if ((r = sef_receive(ANY, &m)) != OK)
|
||||
panic("sef_receive failed (%d)\n", r);
|
||||
|
||||
m.m_type = do_request(&m);
|
||||
|
||||
send(m.m_source, &m);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
1409
test/kernel/sys_vumap/vumaptest.c
Normal file
1409
test/kernel/sys_vumap/vumaptest.c
Normal file
File diff suppressed because it is too large
Load diff
Loading…
Reference in a new issue