Le 15/01/2020 à 20:36, Filip Bozuta a écrit : > 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 <laur...@vivier.eu> > Signed-off-by: Filip Bozuta <filip.boz...@rt-rk.com> > --- > 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 97741c7..f472794 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 f91579a..f0bf09d 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 4e36983..a35072a 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 */ >
Applied to my linux-user branch. Thanks, Laurent