]> git.ipfire.org Git - thirdparty/chrony.git/commitdiff
Use system headers for Linux RTC support
authorMiroslav Lichvar <mlichvar@redhat.com>
Fri, 11 Feb 2011 16:43:56 +0000 (17:43 +0100)
committerMiroslav Lichvar <mlichvar@redhat.com>
Fri, 11 Feb 2011 16:56:05 +0000 (17:56 +0100)
configure
io_linux.h [deleted file]
rtc_linux.c

index 718c13d0d68f08a20a59320dca02fde16473a348..8fe84b30dab1652212b99a5152917fc50f0c2e2a 100755 (executable)
--- a/configure
+++ b/configure
@@ -152,6 +152,7 @@ feat_readline=1
 try_readline=1
 try_editline=1
 feat_rtc=1
+try_rtc=0
 feat_linuxcaps=1
 try_linuxcaps=0
 readline_lib=""
@@ -269,11 +270,8 @@ case $SYSTEM in
     ;;
     Linux* )
         EXTRA_OBJECTS="sys_linux.o wrap_adjtimex.o"
-        if [ $feat_rtc -eq 1 ] ; then
-            EXTRA_OBJECTS="$EXTRA_OBJECTS rtc_linux.o"
-            EXTRA_DEFS="$EXTRA_DEFS -DFEAT_RTC=1"
-        fi
         try_linuxcaps=1
+        try_rtc=1
         try_setsched=1
         try_lockmem=1
         SYSDEFS="-DLINUX"
@@ -371,6 +369,14 @@ then
     EXTRA_LIBS="-lcap"
 fi
 
+if [ $feat_rtc = "1" ] && [ $try_rtc = "1" ] && \
+  test_code '<linux/rtc.h>' 'sys/ioctl.h linux/rtc.h' '' '' \
+    'ioctl(1, RTC_UIE_ON&RTC_UIE_OFF&RTC_RD_TIME&RTC_SET_TIME, 0&RTC_UF);'
+then
+    EXTRA_OBJECTS="$EXTRA_OBJECTS rtc_linux.o"
+    EXTRA_DEFS="$EXTRA_DEFS -DFEAT_RTC=1"
+fi
+
 if [ $try_setsched = "1" ] && \
   test_code \
     'sched_setscheduler()' \
diff --git a/io_linux.h b/io_linux.h
deleted file mode 100644 (file)
index 2c3b03c..0000000
+++ /dev/null
@@ -1,75 +0,0 @@
-/* Taken from <asm-$foo/ioctl.h> in the Linux kernel sources.
- * The ioctl.h file is pretty similar from one architecture to another.
- * */
-#ifndef IO_LINUX_H
-#define IO_LINUX_H
-
-/* Hmm.  These constants vary a bit between systems. */
-/* (__sh__ includes both sh and sh64) */
-/* (__s390__ includes both s390 and s390x) */
-#if defined(__i386__) || defined(__sh__) || defined(__arm__) || defined(__x86_64__) || defined(__s390__)
-#define CHRONY_IOC_NRBITS      8
-#define CHRONY_IOC_TYPEBITS    8
-#define CHRONY_IOC_SIZEBITS    14
-#define CHRONY_IOC_DIRBITS     2
-
-#define CHRONY_IOC_NONE        0U
-#define CHRONY_IOC_WRITE       1U
-#define CHRONY_IOC_READ        2U
-
-#elif defined(__alpha__) || defined(__sparc__) || defined(__ppc__) || defined(__ppc64__) || defined(__sparc64__)
-#define CHRONY_IOC_NRBITS      8
-#define CHRONY_IOC_TYPEBITS    8
-#define CHRONY_IOC_SIZEBITS    13
-#define CHRONY_IOC_DIRBITS     2
-
-#define CHRONY_IOC_NONE        1U
-#define CHRONY_IOC_READ        2U
-#define CHRONY_IOC_WRITE       4U
-
-#elif defined(__mips__) || defined(__mips32__) || defined(__powerpc__)
-#define CHRONY_IOC_NRBITS       8
-#define CHRONY_IOC_TYPEBITS     8
-#define CHRONY_IOC_SIZEBITS     13
-#define CHRONY_IOC_DIRBITS      3
-#define CHRONY_IOC_NONE         1U
-#define CHRONY_IOC_READ         2U
-#define CHRONY_IOC_WRITE        4U
-
-#else
-#error "I don't know the values of the _IOC_* constants for your architecture"
-#endif
-
-#define CHRONY_IOC_NRMASK      ((1 << CHRONY_IOC_NRBITS)-1)
-#define CHRONY_IOC_TYPEMASK    ((1 << CHRONY_IOC_TYPEBITS)-1)
-#define CHRONY_IOC_SIZEMASK    ((1 << CHRONY_IOC_SIZEBITS)-1)
-#define CHRONY_IOC_DIRMASK     ((1 << CHRONY_IOC_DIRBITS)-1)
-
-#define CHRONY_IOC_NRSHIFT     0
-#define CHRONY_IOC_TYPESHIFT   (CHRONY_IOC_NRSHIFT+CHRONY_IOC_NRBITS)
-#define CHRONY_IOC_SIZESHIFT   (CHRONY_IOC_TYPESHIFT+CHRONY_IOC_TYPEBITS)
-#define CHRONY_IOC_DIRSHIFT    (CHRONY_IOC_SIZESHIFT+CHRONY_IOC_SIZEBITS)
-
-#define CHRONY_IOC(dir,type,nr,size) \
-       (((dir)  << CHRONY_IOC_DIRSHIFT) | \
-        ((type) << CHRONY_IOC_TYPESHIFT) | \
-        ((nr)   << CHRONY_IOC_NRSHIFT) | \
-        ((size) << CHRONY_IOC_SIZESHIFT))
-
-/* used to create numbers */
-#define CHRONY_IO(type,nr)             CHRONY_IOC(CHRONY_IOC_NONE,(type),(nr),0)
-#define CHRONY_IOR(type,nr,size)       CHRONY_IOC(CHRONY_IOC_READ,(type),(nr),sizeof(size))
-#define CHRONY_IOW(type,nr,size)       CHRONY_IOC(CHRONY_IOC_WRITE,(type),(nr),sizeof(size))
-#define CHRONY_IOWR(type,nr,size)      CHRONY_IOC(CHRONY_IOC_READ|CHRONY_IOC_WRITE,(type),(nr),sizeof(size))
-
-#define RTC_UIE_ON     CHRONY_IO('p', 0x03)    /* Update int. enable on        */
-#define RTC_UIE_OFF    CHRONY_IO('p', 0x04)    /* ... off                      */
-
-#define RTC_RD_TIME    CHRONY_IOR('p', 0x09, struct rtc_time) /* Read RTC time   */
-#define RTC_SET_TIME   CHRONY_IOW('p', 0x0a, struct rtc_time) /* Set RTC time    */
-
-/* From mc146818.h */
-#define RTC_UIE 0x10           /* update-finished interrupt enable */
-
-#endif
-
index fd6db27a0c95b9315ec2fad7f814e3c7846e4d02..c3a6f08d48bcc91bd1b9e10efdcf6b25e5f48d83 100644 (file)
@@ -45,6 +45,7 @@
 #include <errno.h>
 #include <assert.h>
 #include <string.h>
+#include <linux/rtc.h>
 
 #include "logging.h"
 #include "sched.h"
 #include "regress.h"
 #include "rtc.h"
 #include "rtc_linux.h"
-#include "io_linux.h"
 #include "conf.h"
 #include "memory.h"
 
-struct rtc_time {
-       int tm_sec;
-       int tm_min;
-       int tm_hour;
-       int tm_mday;
-       int tm_mon;
-       int tm_year;
-       int tm_wday;
-       int tm_yday;
-       int tm_isdst;
-};
-
 /* ================================================== */
 /* Forward prototypes */
 
@@ -846,7 +834,7 @@ read_from_device(void *any)
     return;
   }
 
-  if ((data & RTC_UIE) == RTC_UIE) {
+  if ((data & RTC_UF) == RTC_UF) {
     /* Update interrupt detected */
     
     /* Read RTC time, sandwiched between two polls of the system clock