mirror of https://gitee.com/openkylin/qemu.git
linux-user: Add support for getting/setting RTC PLL correction using ioctls
This patch implements functionalities of following ioctls: RTC_PLL_GET - Getting PLL correction Read the PLL correction for RTCs that support PLL. The PLL correction is returned in the following structure: struct rtc_pll_info { int pll_ctrl; /* placeholder for fancier control */ int pll_value; /* get/set correction value */ int pll_max; /* max +ve (faster) adjustment value */ int pll_min; /* max -ve (slower) adjustment value */ int pll_posmult; /* factor for +ve correction */ int pll_negmult; /* factor for -ve correction */ long pll_clock; /* base PLL frequency */ }; A pointer to this structure should be passed as the third ioctl's argument. RTC_PLL_SET - Setting PLL correction Sets the PLL correction for RTCs that support PLL. The PLL correction that is set is specified by the rtc_pll_info structure pointed to by the third ioctl's' argument. Implementation notes: All ioctls in this patch have a pointer to a structure rtc_pll_info as their third argument. All elements of this structure are of type 'int', except the last one that is of type 'long'. That is the reason why a separate target structure (target_rtc_pll_info) is defined in linux-user/syscall_defs. The rest of the implementation is straightforward. Reviewed-by: Laurent Vivier <laurent@vivier.eu> Signed-off-by: Filip Bozuta <Filip.Bozuta@rt-rk.com> Message-Id: <1579117007-7565-6-git-send-email-Filip.Bozuta@rt-rk.com> Signed-off-by: Laurent Vivier <laurent@vivier.eu>
This commit is contained in:
parent
abc81bf678
commit
373b067ff0
|
@ -87,6 +87,8 @@
|
|||
IOCTL(RTC_EPOCH_SET, IOC_W, TYPE_ULONG)
|
||||
IOCTL(RTC_WKALM_RD, IOC_R, MK_PTR(MK_STRUCT(STRUCT_rtc_wkalrm)))
|
||||
IOCTL(RTC_WKALM_SET, IOC_W, MK_PTR(MK_STRUCT(STRUCT_rtc_wkalrm)))
|
||||
IOCTL(RTC_PLL_GET, IOC_R, MK_PTR(MK_STRUCT(STRUCT_rtc_pll_info)))
|
||||
IOCTL(RTC_PLL_SET, IOC_W, MK_PTR(MK_STRUCT(STRUCT_rtc_pll_info)))
|
||||
|
||||
IOCTL(BLKROSET, IOC_W, MK_PTR(TYPE_INT))
|
||||
IOCTL(BLKROGET, IOC_R, MK_PTR(TYPE_INT))
|
||||
|
|
|
@ -763,6 +763,16 @@ struct target_pollfd {
|
|||
#define TARGET_KDSETLED 0x4B32 /* set led state [lights, not flags] */
|
||||
#define TARGET_KDSIGACCEPT 0x4B4E
|
||||
|
||||
struct target_rtc_pll_info {
|
||||
int pll_ctrl;
|
||||
int pll_value;
|
||||
int pll_max;
|
||||
int pll_min;
|
||||
int pll_posmult;
|
||||
int pll_negmult;
|
||||
abi_long pll_clock;
|
||||
};
|
||||
|
||||
/* real time clock ioctls */
|
||||
#define TARGET_RTC_AIE_ON TARGET_IO('p', 0x01)
|
||||
#define TARGET_RTC_AIE_OFF TARGET_IO('p', 0x02)
|
||||
|
@ -782,6 +792,10 @@ struct target_pollfd {
|
|||
#define TARGET_RTC_EPOCH_SET TARGET_IOW('p', 0x0e, abi_ulong)
|
||||
#define TARGET_RTC_WKALM_RD TARGET_IOR('p', 0x10, struct rtc_wkalrm)
|
||||
#define TARGET_RTC_WKALM_SET TARGET_IOW('p', 0x0f, struct rtc_wkalrm)
|
||||
#define TARGET_RTC_PLL_GET TARGET_IOR('p', 0x11, \
|
||||
struct target_rtc_pll_info)
|
||||
#define TARGET_RTC_PLL_SET TARGET_IOW('p', 0x12, \
|
||||
struct target_rtc_pll_info)
|
||||
|
||||
#if defined(TARGET_ALPHA) || defined(TARGET_MIPS) || defined(TARGET_SH4) || \
|
||||
defined(TARGET_XTENSA)
|
||||
|
|
|
@ -271,6 +271,15 @@ STRUCT(rtc_wkalrm,
|
|||
TYPE_CHAR, /* pending */
|
||||
MK_STRUCT(STRUCT_rtc_time)) /* time */
|
||||
|
||||
STRUCT(rtc_pll_info,
|
||||
TYPE_INT, /* pll_ctrl */
|
||||
TYPE_INT, /* pll_value */
|
||||
TYPE_INT, /* pll_max */
|
||||
TYPE_INT, /* pll_min */
|
||||
TYPE_INT, /* pll_posmult */
|
||||
TYPE_INT, /* pll_negmult */
|
||||
TYPE_LONG) /* pll_clock */
|
||||
|
||||
STRUCT(blkpg_ioctl_arg,
|
||||
TYPE_INT, /* op */
|
||||
TYPE_INT, /* flags */
|
||||
|
|
Loading…
Reference in New Issue