Le 09/01/2020 à 13:59, 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. > > Signed-off-by: Filip Bozuta <filip.boz...@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) >
Reviewed-by: Laurent Vivier <laur...@vivier.eu>