[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PULL 13/17] linux-user: Add support for getting/setting RTC time and al
From: |
Laurent Vivier |
Subject: |
[PULL 13/17] linux-user: Add support for getting/setting RTC time and alarm using ioctls |
Date: |
Thu, 23 Jan 2020 09:22:23 +0100 |
From: Filip Bozuta <address@hidden>
This patch implements functionalities of following ioctls:
RTC_RD_TIME - Getting RTC time
Returns this RTC's time in the following structure:
struct rtc_time {
int tm_sec;
int tm_min;
int tm_hour;
int tm_mday;
int tm_mon;
int tm_year;
int tm_wday; /* unused */
int tm_yday; /* unused */
int tm_isdst; /* unused */
};
The fields in this structure have the same meaning and ranges
as the tm structure described in gmtime man page. A pointer
to this structure should be passed as the third ioctl's argument.
RTC_SET_TIME - Setting RTC time
Sets this RTC's time to the time specified by the rtc_time
structure pointed to by the third ioctl's argument. To set
the RTC's time the process must be privileged (i.e., have the
CAP_SYS_TIME capability).
RTC_ALM_READ, RTC_ALM_SET - Getting/Setting alarm time
Read and set the alarm time, for RTCs that support alarms.
The alarm interrupt must be separately enabled or disabled
using the RTC_AIE_ON, RTC_AIE_OFF requests. The third
ioctl's argument is a pointer to a rtc_time structure. Only
the tm_sec, tm_min, and tm_hour fields of this structure are
used.
Implementation notes:
All ioctls in this patch have pointer to a structure rtc_time
as their third argument. That is the reason why corresponding
definition is added in linux-user/syscall_types.h. Since all
elements of this structure are of type 'int', the rest of the
implementation is straightforward.
Reviewed-by: Laurent Vivier <address@hidden>
Signed-off-by: Filip Bozuta <address@hidden>
Message-Id: <address@hidden>
Signed-off-by: Laurent Vivier <address@hidden>
---
linux-user/ioctls.h | 4 ++++
linux-user/syscall_defs.h | 4 ++++
linux-user/syscall_types.h | 11 +++++++++++
3 files changed, 19 insertions(+)
diff --git a/linux-user/ioctls.h b/linux-user/ioctls.h
index 55ad47186dc0..c39dd0128a60 100644
--- a/linux-user/ioctls.h
+++ b/linux-user/ioctls.h
@@ -77,6 +77,10 @@
IOCTL(RTC_PIE_OFF, 0, TYPE_NULL)
IOCTL(RTC_WIE_ON, 0, TYPE_NULL)
IOCTL(RTC_WIE_OFF, 0, TYPE_NULL)
+ IOCTL(RTC_ALM_READ, IOC_R, MK_PTR(MK_STRUCT(STRUCT_rtc_time)))
+ 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(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 fc3d79ab9762..dc36dd475112 100644
--- a/linux-user/syscall_defs.h
+++ b/linux-user/syscall_defs.h
@@ -772,6 +772,10 @@ struct target_pollfd {
#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)
+#define TARGET_RTC_ALM_READ TARGET_IOR('p', 0x08, struct rtc_time)
+#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)
#if defined(TARGET_ALPHA) || defined(TARGET_MIPS) || defined(TARGET_SH4) ||
\
defined(TARGET_XTENSA)
diff --git a/linux-user/syscall_types.h b/linux-user/syscall_types.h
index 8ff78a625ace..bddc89a6641b 100644
--- a/linux-user/syscall_types.h
+++ b/linux-user/syscall_types.h
@@ -255,6 +255,17 @@ STRUCT(blkpg_partition,
MK_ARRAY(TYPE_CHAR, BLKPG_DEVNAMELTH), /* devname */
MK_ARRAY(TYPE_CHAR, BLKPG_VOLNAMELTH)) /* volname */
+STRUCT(rtc_time,
+ TYPE_INT, /* tm_sec */
+ TYPE_INT, /* tm_min */
+ TYPE_INT, /* tm_hour */
+ TYPE_INT, /* tm_mday */
+ TYPE_INT, /* tm_mon */
+ TYPE_INT, /* tm_year */
+ TYPE_INT, /* tm_wday */
+ TYPE_INT, /* tm_yday */
+ TYPE_INT) /* tm_isdst */
+
STRUCT(blkpg_ioctl_arg,
TYPE_INT, /* op */
TYPE_INT, /* flags */
--
2.24.1
- [PULL 06/17] linux-user: Add support for FD<SETEMSGTRESH|SETMAXERRS|GETMAXERRS> ioctls, (continued)
- [PULL 06/17] linux-user: Add support for FD<SETEMSGTRESH|SETMAXERRS|GETMAXERRS> ioctls, Laurent Vivier, 2020/01/23
- [PULL 07/17] linux-user: Add support for FDFMT<BEG|TRK|END> ioctls, Laurent Vivier, 2020/01/23
- [PULL 03/17] linux-user: Add support for FS_IOC_<GET|SET>VERSION ioctls, Laurent Vivier, 2020/01/23
- [PULL 02/17] linux-user: Reserve space for brk, Laurent Vivier, 2020/01/23
- [PULL 14/17] linux-user: Add support for getting/setting RTC periodic interrupt and epoch using ioctls, Laurent Vivier, 2020/01/23
- [PULL 17/17] linux-user: Add support for read/clear RTC voltage low detector using ioctls, Laurent Vivier, 2020/01/23
- [PULL 11/17] linux-user: Add support for TYPE_LONG and TYPE_ULONG in do_ioctl(), Laurent Vivier, 2020/01/23
- [PULL 15/17] linux-user: Add support for getting/setting RTC wakeup alarm using ioctls, Laurent Vivier, 2020/01/23
- [PULL 12/17] linux-user: Add support for enabling/disabling RTC features using ioctls, Laurent Vivier, 2020/01/23
- [PULL 16/17] linux-user: Add support for getting/setting RTC PLL correction using ioctls, Laurent Vivier, 2020/01/23
- [PULL 13/17] linux-user: Add support for getting/setting RTC time and alarm using ioctls,
Laurent Vivier <=
- Re: [PULL 00/17] Linux user for 5.0 patches, Peter Maydell, 2020/01/23