aboutsummaryrefslogtreecommitdiffstats
path: root/emulators/rtc/files/rtc_linux.c
diff options
context:
space:
mode:
authorAkinori MUSHA <knu@FreeBSD.org>2000-04-03 15:28:30 +0000
committerAkinori MUSHA <knu@FreeBSD.org>2000-04-03 15:28:30 +0000
commit3cf900afec2aff896e54b02214e9c9d023d0cd20 (patch)
tree25af9c88375549ba5c87e1b652d23c1871e35a73 /emulators/rtc/files/rtc_linux.c
parent2ce0a6acc58e2d8d3e8f82ba65f623695a526b76 (diff)
This is rtc, a kernel module for /dev/rtc device support.
Some apps such as VMware for Linux would be happy with it. The code was originally written by Vladimir N. Silyaev. Note: It _includes_ Linux ioctl support, but basically it's FreeBSD native stuff. I'm importing this into emulators category for convevience' sake. Check it out.
Diffstat (limited to 'emulators/rtc/files/rtc_linux.c')
-rw-r--r--emulators/rtc/files/rtc_linux.c70
1 files changed, 70 insertions, 0 deletions
diff --git a/emulators/rtc/files/rtc_linux.c b/emulators/rtc/files/rtc_linux.c
new file mode 100644
index 000000000000..2eb04a433890
--- /dev/null
+++ b/emulators/rtc/files/rtc_linux.c
@@ -0,0 +1,70 @@
+/*
+ * Copyright by Vladimir N. Silyaev 2000
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * $vmFreeBSD: vmware/vmnet-only/freebsd/vmnet_linux.c,v 1.5 2000/01/23 22:29:50 vsilyaev Exp $
+ */
+#include <sys/param.h>
+#include <sys/systm.h>
+#include <sys/kernel.h>
+#include <sys/sockio.h>
+#include <sys/sysproto.h>
+#include <sys/socket.h>
+
+#include <i386/linux/linux.h>
+#include <i386/linux/linux_proto.h>
+#include <i386/linux/linux_ioctl.h>
+
+#include "rtc.h"
+
+#define DEBUG 0
+#if DEBUG
+#define DEB(x) x
+#else /* !DEBUG */
+#define DEB(x)
+#endif /* DEBUG */
+
+#define LINUX_IOCTL_SET(n,low,high) \
+static linux_ioctl_function_t linux_ioctl_##n; \
+static struct linux_ioctl_handler n##_handler = {linux_ioctl_##n, low, high }; \
+SYSINIT(n##register, SI_SUB_KLD, SI_ORDER_MIDDLE, linux_ioctl_register_handler, &n##_handler); \
+SYSUNINIT(n##unregister, SI_SUB_KLD, SI_ORDER_MIDDLE, linux_ioctl_unregister_handler, &n##_handler);
+
+#define LINUX_RTC_PIE_ON 0x7005
+#define LINUX_RTC_IRQP_SET 0x700C
+
+LINUX_IOCTL_SET(rtc, 0x7000, 0x70ff);
+
+static int
+linux_ioctl_rtc(struct proc *p, struct linux_ioctl_args *args)
+{
+ switch (args->cmd & 0xffff) {
+ case LINUX_RTC_PIE_ON:
+ args->cmd=RTCIO_PIE_ON;
+ return ioctl(p, (struct ioctl_args*)args);
+ case LINUX_RTC_IRQP_SET:
+ args->cmd=RTCIO_IRQP_SET;
+ return ioctl(p, (struct ioctl_args*)args);
+ }
+ return (ENOIOCTL);
+}