From: Laurent Vivier <laurent@vivier.eu>
To: qemu-devel@nongnu.org
Cc: Riku Voipio <riku.voipio@iki.fi>,
Laurent Vivier <laurent@vivier.eu>,
Filip Bozuta <Filip.Bozuta@rt-rk.com>
Subject: [PULL 14/17] linux-user: Add support for getting/setting RTC periodic interrupt and epoch using ioctls
Date: Thu, 23 Jan 2020 09:22:24 +0100 [thread overview]
Message-ID: <20200123082227.2037994-15-laurent@vivier.eu> (raw)
In-Reply-To: <20200123082227.2037994-1-laurent@vivier.eu>
From: Filip Bozuta <Filip.Bozuta@rt-rk.com>
This patch implements functionalities of following ioctls:
RTC_IRQP_READ, RTC_IRQP_SET - Getting/Setting IRQ rate
Read and set the frequency for periodic interrupts, for RTCs
that support periodic interrupts. The periodic interrupt must
be separately enabled or disabled using the RTC_PIE_ON,
RTC_PIE_OFF requests. The third ioctl's argument is an
unsigned long * or an unsigned long, respectively. The value
is the frequency in interrupts per second. The set of allow‐
able frequencies is the multiples of two in the range 2 to
8192. Only a privileged process (i.e., one having the
CAP_SYS_RESOURCE capability) can set frequencies above the
value specified in /proc/sys/dev/rtc/max-user-freq. (This
file contains the value 64 by default.)
RTC_EPOCH_READ, RTC_EPOCH_SET - Getting/Setting epoch
Many RTCs encode the year in an 8-bit register which is either
interpreted as an 8-bit binary number or as a BCD number. In
both cases, the number is interpreted relative to this RTC's
Epoch. The RTC's Epoch is initialized to 1900 on most systems
but on Alpha and MIPS it might also be initialized to 1952,
1980, or 2000, depending on the value of an RTC register for
the year. With some RTCs, these operations can be used to
read or to set the RTC's Epoch, respectively. The third
ioctl's argument is an unsigned long * or an unsigned long,
respectively, and the value returned (or assigned) is the
Epoch. To set the RTC's Epoch the process must be privileged
(i.e., have the CAP_SYS_TIME capability).
Implementation notes:
All ioctls in this patch have a pointer to 'ulong' as their
third argument. That is the reason why corresponding parts
of added code in linux-user/syscall_defs.h contain special
handling related to 'ulong' type: they use 'abi_ulong' type
to make sure that ioctl's code is calculated correctly for
both 32-bit and 64-bit targets. Also, 'MK_PTR(TYPE_ULONG)'
is used for the similar reason in linux-user/ioctls.h.
Reviewed-by: Laurent Vivier <laurent@vivier.eu>
Signed-off-by: Filip Bozuta <Filip.Bozuta@rt-rk.com>
Message-Id: <1579117007-7565-4-git-send-email-Filip.Bozuta@rt-rk.com>
Signed-off-by: Laurent Vivier <laurent@vivier.eu>
---
linux-user/ioctls.h | 4 ++++
linux-user/syscall_defs.h | 4 ++++
2 files changed, 8 insertions(+)
diff --git a/linux-user/ioctls.h b/linux-user/ioctls.h
index c39dd0128a60..9e91eaae7705 100644
--- a/linux-user/ioctls.h
+++ b/linux-user/ioctls.h
@@ -81,6 +81,10 @@
IOCTL(RTC_ALM_SET, IOC_W, MK_PTR(MK_STRUCT(STRUCT_rtc_time)))
IOCTL(RTC_RD_TIME, IOC_R, MK_PTR(MK_STRUCT(STRUCT_rtc_time)))
IOCTL(RTC_SET_TIME, IOC_W, MK_PTR(MK_STRUCT(STRUCT_rtc_time)))
+ IOCTL(RTC_IRQP_READ, IOC_R, MK_PTR(TYPE_ULONG))
+ IOCTL(RTC_IRQP_SET, IOC_W, TYPE_ULONG)
+ IOCTL(RTC_EPOCH_READ, IOC_R, MK_PTR(TYPE_ULONG))
+ IOCTL(RTC_EPOCH_SET, IOC_W, TYPE_ULONG)
IOCTL(BLKROSET, IOC_W, MK_PTR(TYPE_INT))
IOCTL(BLKROGET, IOC_R, MK_PTR(TYPE_INT))
diff --git a/linux-user/syscall_defs.h b/linux-user/syscall_defs.h
index dc36dd475112..fcbb2ee9a387 100644
--- a/linux-user/syscall_defs.h
+++ b/linux-user/syscall_defs.h
@@ -776,6 +776,10 @@ struct target_pollfd {
#define TARGET_RTC_ALM_SET TARGET_IOW('p', 0x07, struct rtc_time)
#define TARGET_RTC_RD_TIME TARGET_IOR('p', 0x09, struct rtc_time)
#define TARGET_RTC_SET_TIME TARGET_IOW('p', 0x0a, struct rtc_time)
+#define TARGET_RTC_IRQP_READ TARGET_IOR('p', 0x0b, abi_ulong)
+#define TARGET_RTC_IRQP_SET TARGET_IOW('p', 0x0c, abi_ulong)
+#define TARGET_RTC_EPOCH_READ TARGET_IOR('p', 0x0d, abi_ulong)
+#define TARGET_RTC_EPOCH_SET TARGET_IOW('p', 0x0e, abi_ulong)
#if defined(TARGET_ALPHA) || defined(TARGET_MIPS) || defined(TARGET_SH4) || \
defined(TARGET_XTENSA)
--
2.24.1
next prev parent reply other threads:[~2020-01-23 8:26 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-01-23 8:22 [PULL 00/17] Linux user for 5.0 patches Laurent Vivier
2020-01-23 8:22 ` [PULL 01/17] linux-user:Fix align mistake when mmap guest space Laurent Vivier
2020-01-23 8:22 ` [PULL 02/17] linux-user: Reserve space for brk Laurent Vivier
2020-01-23 8:22 ` [PULL 03/17] linux-user: Add support for FS_IOC_<GET|SET>VERSION ioctls Laurent Vivier
2020-01-23 8:22 ` [PULL 04/17] linux-user: Add support for FS_IOC32_<GET|SET>FLAGS ioctls Laurent Vivier
2020-01-23 8:22 ` [PULL 05/17] linux-user: Add support for FS_IOC32_<GET|SET>VERSION ioctls Laurent Vivier
2020-01-23 8:22 ` [PULL 06/17] linux-user: Add support for FD<SETEMSGTRESH|SETMAXERRS|GETMAXERRS> ioctls Laurent Vivier
2020-01-23 8:22 ` [PULL 07/17] linux-user: Add support for FDFMT<BEG|TRK|END> ioctls Laurent Vivier
2020-01-23 8:22 ` [PULL 08/17] configure: Detect kcov support and introduce CONFIG_KCOV Laurent Vivier
2020-01-23 8:22 ` [PULL 09/17] linux-user: Add support for KCOV_<ENABLE|DISABLE> ioctls Laurent Vivier
2020-01-23 8:22 ` [PULL 10/17] linux-user: Add support for KCOV_INIT_TRACE ioctl Laurent Vivier
2020-01-23 8:22 ` [PULL 11/17] linux-user: Add support for TYPE_LONG and TYPE_ULONG in do_ioctl() Laurent Vivier
2020-01-23 8:22 ` [PULL 12/17] linux-user: Add support for enabling/disabling RTC features using ioctls Laurent Vivier
2020-01-23 8:22 ` [PULL 13/17] linux-user: Add support for getting/setting RTC time and alarm " Laurent Vivier
2020-01-23 8:22 ` Laurent Vivier [this message]
2020-01-23 8:22 ` [PULL 15/17] linux-user: Add support for getting/setting RTC wakeup " Laurent Vivier
2020-01-23 8:22 ` [PULL 16/17] linux-user: Add support for getting/setting RTC PLL correction " Laurent Vivier
2020-01-23 8:22 ` [PULL 17/17] linux-user: Add support for read/clear RTC voltage low detector " Laurent Vivier
2020-01-23 15:17 ` [PULL 00/17] Linux user for 5.0 patches Peter Maydell
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20200123082227.2037994-15-laurent@vivier.eu \
--to=laurent@vivier.eu \
--cc=Filip.Bozuta@rt-rk.com \
--cc=qemu-devel@nongnu.org \
--cc=riku.voipio@iki.fi \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).