kernel: move do_padconf and add a test case

padconf is specific to arm, so it's being moved to kernel/arch/earm.

Add a test case to ensure the proper error is returned on non-ARM
systems.

Change-Id: I07ebbe64825d59bc0ef9c818d3d54891dafb4419
This commit is contained in:
Thomas Cort 2013-08-29 08:56:27 -04:00
parent 4593804bf0
commit 9f4b8dc11b
8 changed files with 95 additions and 7 deletions

View file

@ -63,7 +63,7 @@ ORIG_UNPAGED_OBJS += ${unpaged_obj}
CLEANFILES+= ${ORIG_UNPAGED_OBJS}
SRCS+= mpx.S arch_clock.c arch_do_vmctl.c arch_system.c \
SRCS+= mpx.S arch_clock.c arch_do_vmctl.c arch_system.c do_padconf.c \
omap_serial.c omap_timer.c omap_padconf.c omap_intr.c omap_rtc.c \
omap_reset.c exception.c klib.S memory.c \
protect.c direct_tty_utils.c arch_reset.c \

View file

@ -40,11 +40,6 @@ SRCS+= \
do_schedctl.c \
do_statectl.c
.if ${MACHINE_ARCH} == "earm"
SRCS+= \
do_padconf.c
.endif
.if ${MACHINE_ARCH} == "i386"
SRCS+= \
do_devio.c \

View file

@ -1,5 +1,5 @@
#!/bin/sh
tests="sys_vumap"
tests="sys_padconf sys_vumap"
for i in $tests; do (cd $i && ./run); done

View file

@ -0,0 +1,16 @@
# Makefile for the sys_padconf test.
.include <bsd.own.mk>
PROG= padconftest
SRCS= padconftest.c
DPADD+= ${LIBSYS}
LDADD+= -lsys
MAN=
BINDIR?= /usr/tests/minix-posix
.include "${NETBSDSRCDIR}/drivers/Makefile.inc"
.include <minix.service.mk>

View file

@ -0,0 +1,59 @@
/* Test for sys_padconf() */
#include <errno.h>
#include <stdio.h>
#include <minix/com.h>
#include <minix/syslib.h>
#include <minix/padconf.h>
#include <minix/drivers.h>
#include <assert.h>
static unsigned int failures = 0;
/*
* padconf is only supported on ARM. On other systems sys_padconf() should
* return -EBADREQUEST.
*/
static void test_badrequest(void)
{
#if !defined(__arm__)
int r;
r = sys_padconf(0xffffffff, 0xffffffff, 0xffffffff);
if (r != -EBADREQUEST) {
printf("Expected r=%d | Got r=%d\n", -EBADREQUEST, r);
failures++;
}
#endif
return;
}
static void do_tests(void)
{
test_badrequest();
}
static int sef_cb_init_fresh(int UNUSED(type), sef_init_info_t *UNUSED(info))
{
do_tests();
/* The returned code will determine the outcome of the RS call, and
* thus the entire test. The actual error code does not matter.
*/
return (failures) ? EINVAL : 0;
}
static void sef_local_startup(void)
{
sef_setcb_init_fresh(sef_cb_init_fresh);
sef_startup();
}
int main(int argc, char **argv)
{
env_setargs(argc, argv);
sef_local_startup();
return 0;
}

14
test/kernel/sys_padconf/run Executable file
View file

@ -0,0 +1,14 @@
#!/bin/sh
make >/dev/null
echo -n "Kernel test (sys_padconf): "
service up `pwd`/padconftest -config system.conf -label padconftest -script /etc/rs.single
r=$?
if [ $r -ne 0 ]; then
echo "failure"
exit 1
fi
echo "ok"

View file

@ -0,0 +1,4 @@
service padconftest {
system PADCONF;
};