Message ID | 1579117007-7565-2-git-send-email-Filip.Bozuta@rt-rk.com |
---|---|
State | New |
Headers | show |
Series | linux-user: Add support for real time clock and | expand |
Le 15/01/2020 à 20:36, Filip Bozuta a écrit : > This patch implements functionalities of following ioctls: > > RTC_AIE_ON, RTC_AIE_OFF - Alarm interrupt enabling on/off > > Enable or disable the alarm interrupt, for RTCs that support > alarms. The third ioctl's argument is ignored. > > RTC_UIE_ON, RTC_UIE_OFF - Update interrupt enabling on/off > > Enable or disable the interrupt on every clock update, for > RTCs that support this once-per-second interrupt. The third > ioctl's argument is ignored. > > RTC_PIE_ON, RTC_PIE_OFF - Periodic interrupt enabling on/off > > Enable or disable the periodic interrupt, for RTCs that sup‐ > port these periodic interrupts. The third ioctl's argument > is ignored. Only a privileged process (i.e., one having the > CAP_SYS_RESOURCE capability) can enable the periodic interrupt > if the frequency is currently set above the value specified in > /proc/sys/dev/rtc/max-user-freq. > > RTC_WIE_ON, RTC_WIE_OFF - Watchdog interrupt enabling on/off > > Enable or disable the Watchdog interrupt, for RTCs that sup- > port this Watchdog interrupt. The third ioctl's argument is > ignored. > > Implementation notes: > > Since all of involved ioctls have NULL as their third argument, > their implementation was straightforward. > > The line '#include <linux/rtc.h>' was added to recognize > preprocessor definitions for these ioctls. This needs to be > done only once in this series of commits. Also, the content > of this file (with respect to ioctl definitions) remained > unchanged for a long time, therefore there is no need to > worry about supporting older Linux kernel version. > > Reviewed-by: Laurent Vivier <laurent@vivier.eu> > Signed-off-by: Filip Bozuta <Filip.Bozuta@rt-rk.com> > --- > linux-user/ioctls.h | 9 +++++++++ > linux-user/syscall.c | 1 + > linux-user/syscall_defs.h | 10 ++++++++++ > 3 files changed, 20 insertions(+) > > diff --git a/linux-user/ioctls.h b/linux-user/ioctls.h > index c6b9d6a..97741c7 100644 > --- a/linux-user/ioctls.h > +++ b/linux-user/ioctls.h > @@ -69,6 +69,15 @@ > IOCTL(KDSETLED, 0, TYPE_INT) > IOCTL_SPECIAL(KDSIGACCEPT, 0, do_ioctl_kdsigaccept, TYPE_INT) > > + IOCTL(RTC_AIE_ON, 0, TYPE_NULL) > + IOCTL(RTC_AIE_OFF, 0, TYPE_NULL) > + IOCTL(RTC_UIE_ON, 0, TYPE_NULL) > + IOCTL(RTC_UIE_OFF, 0, TYPE_NULL) > + IOCTL(RTC_PIE_ON, 0, TYPE_NULL) > + IOCTL(RTC_PIE_OFF, 0, TYPE_NULL) > + IOCTL(RTC_WIE_ON, 0, TYPE_NULL) > + IOCTL(RTC_WIE_OFF, 0, TYPE_NULL) > + > IOCTL(BLKROSET, IOC_W, MK_PTR(TYPE_INT)) > IOCTL(BLKROGET, IOC_R, MK_PTR(TYPE_INT)) > IOCTL(BLKRRPART, 0, TYPE_NULL) > diff --git a/linux-user/syscall.c b/linux-user/syscall.c > index ce399a5..74c3c08 100644 > --- a/linux-user/syscall.c > +++ b/linux-user/syscall.c > @@ -107,6 +107,7 @@ > #include <netpacket/packet.h> > #include <linux/netlink.h> > #include <linux/if_alg.h> > +#include <linux/rtc.h> > #include "linux_loop.h" > #include "uname.h" > > diff --git a/linux-user/syscall_defs.h b/linux-user/syscall_defs.h > index 98c2119..f91579a 100644 > --- a/linux-user/syscall_defs.h > +++ b/linux-user/syscall_defs.h > @@ -763,6 +763,16 @@ struct target_pollfd { > #define TARGET_KDSETLED 0x4B32 /* set led state [lights, not flags] */ > #define TARGET_KDSIGACCEPT 0x4B4E > > +/* real time clock ioctls */ > +#define TARGET_RTC_AIE_ON TARGET_IO('p', 0x01) > +#define TARGET_RTC_AIE_OFF TARGET_IO('p', 0x02) > +#define TARGET_RTC_UIE_ON TARGET_IO('p', 0x03) > +#define TARGET_RTC_UIE_OFF TARGET_IO('p', 0x04) > +#define TARGET_RTC_PIE_ON TARGET_IO('p', 0x05) > +#define TARGET_RTC_PIE_OFF TARGET_IO('p', 0x06) > +#define TARGET_RTC_WIE_ON TARGET_IO('p', 0x0f) > +#define TARGET_RTC_WIE_OFF TARGET_IO('p', 0x10) > + > #if defined(TARGET_ALPHA) || defined(TARGET_MIPS) || defined(TARGET_SH4) || \ > defined(TARGET_XTENSA) > #define TARGET_FIOGETOWN TARGET_IOR('f', 123, int) > Applied to my linux-user branch. Thanks, Laurent
diff --git a/linux-user/ioctls.h b/linux-user/ioctls.h index c6b9d6a..97741c7 100644 --- a/linux-user/ioctls.h +++ b/linux-user/ioctls.h @@ -69,6 +69,15 @@ IOCTL(KDSETLED, 0, TYPE_INT) IOCTL_SPECIAL(KDSIGACCEPT, 0, do_ioctl_kdsigaccept, TYPE_INT) + IOCTL(RTC_AIE_ON, 0, TYPE_NULL) + IOCTL(RTC_AIE_OFF, 0, TYPE_NULL) + IOCTL(RTC_UIE_ON, 0, TYPE_NULL) + IOCTL(RTC_UIE_OFF, 0, TYPE_NULL) + IOCTL(RTC_PIE_ON, 0, TYPE_NULL) + IOCTL(RTC_PIE_OFF, 0, TYPE_NULL) + IOCTL(RTC_WIE_ON, 0, TYPE_NULL) + IOCTL(RTC_WIE_OFF, 0, TYPE_NULL) + IOCTL(BLKROSET, IOC_W, MK_PTR(TYPE_INT)) IOCTL(BLKROGET, IOC_R, MK_PTR(TYPE_INT)) IOCTL(BLKRRPART, 0, TYPE_NULL) diff --git a/linux-user/syscall.c b/linux-user/syscall.c index ce399a5..74c3c08 100644 --- a/linux-user/syscall.c +++ b/linux-user/syscall.c @@ -107,6 +107,7 @@ #include <netpacket/packet.h> #include <linux/netlink.h> #include <linux/if_alg.h> +#include <linux/rtc.h> #include "linux_loop.h" #include "uname.h" diff --git a/linux-user/syscall_defs.h b/linux-user/syscall_defs.h index 98c2119..f91579a 100644 --- a/linux-user/syscall_defs.h +++ b/linux-user/syscall_defs.h @@ -763,6 +763,16 @@ struct target_pollfd { #define TARGET_KDSETLED 0x4B32 /* set led state [lights, not flags] */ #define TARGET_KDSIGACCEPT 0x4B4E +/* real time clock ioctls */ +#define TARGET_RTC_AIE_ON TARGET_IO('p', 0x01) +#define TARGET_RTC_AIE_OFF TARGET_IO('p', 0x02) +#define TARGET_RTC_UIE_ON TARGET_IO('p', 0x03) +#define TARGET_RTC_UIE_OFF TARGET_IO('p', 0x04) +#define TARGET_RTC_PIE_ON TARGET_IO('p', 0x05) +#define TARGET_RTC_PIE_OFF TARGET_IO('p', 0x06) +#define TARGET_RTC_WIE_ON TARGET_IO('p', 0x0f) +#define TARGET_RTC_WIE_OFF TARGET_IO('p', 0x10) + #if defined(TARGET_ALPHA) || defined(TARGET_MIPS) || defined(TARGET_SH4) || \ defined(TARGET_XTENSA) #define TARGET_FIOGETOWN TARGET_IOR('f', 123, int)