1*f80ad8b4SAndroid Build Coastguard Worker /* SPDX-License-Identifier: GPL-2.0 WITH Linux-syscall-note */ 2*f80ad8b4SAndroid Build Coastguard Worker /* 3*f80ad8b4SAndroid Build Coastguard Worker * Generic RTC interface. 4*f80ad8b4SAndroid Build Coastguard Worker * This version contains the part of the user interface to the Real Time Clock 5*f80ad8b4SAndroid Build Coastguard Worker * service. It is used with both the legacy mc146818 and also EFI 6*f80ad8b4SAndroid Build Coastguard Worker * Struct rtc_time and first 12 ioctl by Paul Gortmaker, 1996 - separated out 7*f80ad8b4SAndroid Build Coastguard Worker * from <linux/mc146818rtc.h> to this file for 2.4 kernels. 8*f80ad8b4SAndroid Build Coastguard Worker * 9*f80ad8b4SAndroid Build Coastguard Worker * Copyright (C) 1999 Hewlett-Packard Co. 10*f80ad8b4SAndroid Build Coastguard Worker * Copyright (C) 1999 Stephane Eranian <[email protected]> 11*f80ad8b4SAndroid Build Coastguard Worker */ 12*f80ad8b4SAndroid Build Coastguard Worker #ifndef _UAPI_LINUX_RTC_H_ 13*f80ad8b4SAndroid Build Coastguard Worker #define _UAPI_LINUX_RTC_H_ 14*f80ad8b4SAndroid Build Coastguard Worker 15*f80ad8b4SAndroid Build Coastguard Worker #include <linux/const.h> 16*f80ad8b4SAndroid Build Coastguard Worker #include <linux/ioctl.h> 17*f80ad8b4SAndroid Build Coastguard Worker #include <linux/types.h> 18*f80ad8b4SAndroid Build Coastguard Worker 19*f80ad8b4SAndroid Build Coastguard Worker /* 20*f80ad8b4SAndroid Build Coastguard Worker * The struct used to pass data via the following ioctl. Similar to the 21*f80ad8b4SAndroid Build Coastguard Worker * struct tm in <time.h>, but it needs to be here so that the kernel 22*f80ad8b4SAndroid Build Coastguard Worker * source is self contained, allowing cross-compiles, etc. etc. 23*f80ad8b4SAndroid Build Coastguard Worker */ 24*f80ad8b4SAndroid Build Coastguard Worker 25*f80ad8b4SAndroid Build Coastguard Worker struct rtc_time { 26*f80ad8b4SAndroid Build Coastguard Worker int tm_sec; 27*f80ad8b4SAndroid Build Coastguard Worker int tm_min; 28*f80ad8b4SAndroid Build Coastguard Worker int tm_hour; 29*f80ad8b4SAndroid Build Coastguard Worker int tm_mday; 30*f80ad8b4SAndroid Build Coastguard Worker int tm_mon; 31*f80ad8b4SAndroid Build Coastguard Worker int tm_year; 32*f80ad8b4SAndroid Build Coastguard Worker int tm_wday; 33*f80ad8b4SAndroid Build Coastguard Worker int tm_yday; 34*f80ad8b4SAndroid Build Coastguard Worker int tm_isdst; 35*f80ad8b4SAndroid Build Coastguard Worker }; 36*f80ad8b4SAndroid Build Coastguard Worker 37*f80ad8b4SAndroid Build Coastguard Worker /* 38*f80ad8b4SAndroid Build Coastguard Worker * This data structure is inspired by the EFI (v0.92) wakeup 39*f80ad8b4SAndroid Build Coastguard Worker * alarm API. 40*f80ad8b4SAndroid Build Coastguard Worker */ 41*f80ad8b4SAndroid Build Coastguard Worker struct rtc_wkalrm { 42*f80ad8b4SAndroid Build Coastguard Worker unsigned char enabled; /* 0 = alarm disabled, 1 = alarm enabled */ 43*f80ad8b4SAndroid Build Coastguard Worker unsigned char pending; /* 0 = alarm not pending, 1 = alarm pending */ 44*f80ad8b4SAndroid Build Coastguard Worker struct rtc_time time; /* time the alarm is set to */ 45*f80ad8b4SAndroid Build Coastguard Worker }; 46*f80ad8b4SAndroid Build Coastguard Worker 47*f80ad8b4SAndroid Build Coastguard Worker /* 48*f80ad8b4SAndroid Build Coastguard Worker * Data structure to control PLL correction some better RTC feature 49*f80ad8b4SAndroid Build Coastguard Worker * pll_value is used to get or set current value of correction, 50*f80ad8b4SAndroid Build Coastguard Worker * the rest of the struct is used to query HW capabilities. 51*f80ad8b4SAndroid Build Coastguard Worker * This is modeled after the RTC used in Q40/Q60 computers but 52*f80ad8b4SAndroid Build Coastguard Worker * should be sufficiently flexible for other devices 53*f80ad8b4SAndroid Build Coastguard Worker * 54*f80ad8b4SAndroid Build Coastguard Worker * +ve pll_value means clock will run faster by 55*f80ad8b4SAndroid Build Coastguard Worker * pll_value*pll_posmult/pll_clock 56*f80ad8b4SAndroid Build Coastguard Worker * -ve pll_value means clock will run slower by 57*f80ad8b4SAndroid Build Coastguard Worker * pll_value*pll_negmult/pll_clock 58*f80ad8b4SAndroid Build Coastguard Worker */ 59*f80ad8b4SAndroid Build Coastguard Worker 60*f80ad8b4SAndroid Build Coastguard Worker struct rtc_pll_info { 61*f80ad8b4SAndroid Build Coastguard Worker int pll_ctrl; /* placeholder for fancier control */ 62*f80ad8b4SAndroid Build Coastguard Worker int pll_value; /* get/set correction value */ 63*f80ad8b4SAndroid Build Coastguard Worker int pll_max; /* max +ve (faster) adjustment value */ 64*f80ad8b4SAndroid Build Coastguard Worker int pll_min; /* max -ve (slower) adjustment value */ 65*f80ad8b4SAndroid Build Coastguard Worker int pll_posmult; /* factor for +ve correction */ 66*f80ad8b4SAndroid Build Coastguard Worker int pll_negmult; /* factor for -ve correction */ 67*f80ad8b4SAndroid Build Coastguard Worker long pll_clock; /* base PLL frequency */ 68*f80ad8b4SAndroid Build Coastguard Worker }; 69*f80ad8b4SAndroid Build Coastguard Worker 70*f80ad8b4SAndroid Build Coastguard Worker struct rtc_param { 71*f80ad8b4SAndroid Build Coastguard Worker __u64 param; 72*f80ad8b4SAndroid Build Coastguard Worker union { 73*f80ad8b4SAndroid Build Coastguard Worker __u64 uvalue; 74*f80ad8b4SAndroid Build Coastguard Worker __s64 svalue; 75*f80ad8b4SAndroid Build Coastguard Worker __u64 ptr; 76*f80ad8b4SAndroid Build Coastguard Worker }; 77*f80ad8b4SAndroid Build Coastguard Worker __u32 index; 78*f80ad8b4SAndroid Build Coastguard Worker __u32 __pad; 79*f80ad8b4SAndroid Build Coastguard Worker }; 80*f80ad8b4SAndroid Build Coastguard Worker 81*f80ad8b4SAndroid Build Coastguard Worker /* 82*f80ad8b4SAndroid Build Coastguard Worker * ioctl calls that are permitted to the /dev/rtc interface, if 83*f80ad8b4SAndroid Build Coastguard Worker * any of the RTC drivers are enabled. 84*f80ad8b4SAndroid Build Coastguard Worker */ 85*f80ad8b4SAndroid Build Coastguard Worker 86*f80ad8b4SAndroid Build Coastguard Worker #define RTC_AIE_ON _IO('p', 0x01) /* Alarm int. enable on */ 87*f80ad8b4SAndroid Build Coastguard Worker #define RTC_AIE_OFF _IO('p', 0x02) /* ... off */ 88*f80ad8b4SAndroid Build Coastguard Worker #define RTC_UIE_ON _IO('p', 0x03) /* Update int. enable on */ 89*f80ad8b4SAndroid Build Coastguard Worker #define RTC_UIE_OFF _IO('p', 0x04) /* ... off */ 90*f80ad8b4SAndroid Build Coastguard Worker #define RTC_PIE_ON _IO('p', 0x05) /* Periodic int. enable on */ 91*f80ad8b4SAndroid Build Coastguard Worker #define RTC_PIE_OFF _IO('p', 0x06) /* ... off */ 92*f80ad8b4SAndroid Build Coastguard Worker #define RTC_WIE_ON _IO('p', 0x0f) /* Watchdog int. enable on */ 93*f80ad8b4SAndroid Build Coastguard Worker #define RTC_WIE_OFF _IO('p', 0x10) /* ... off */ 94*f80ad8b4SAndroid Build Coastguard Worker 95*f80ad8b4SAndroid Build Coastguard Worker #define RTC_ALM_SET _IOW('p', 0x07, struct rtc_time) /* Set alarm time */ 96*f80ad8b4SAndroid Build Coastguard Worker #define RTC_ALM_READ _IOR('p', 0x08, struct rtc_time) /* Read alarm time */ 97*f80ad8b4SAndroid Build Coastguard Worker #define RTC_RD_TIME _IOR('p', 0x09, struct rtc_time) /* Read RTC time */ 98*f80ad8b4SAndroid Build Coastguard Worker #define RTC_SET_TIME _IOW('p', 0x0a, struct rtc_time) /* Set RTC time */ 99*f80ad8b4SAndroid Build Coastguard Worker #define RTC_IRQP_READ _IOR('p', 0x0b, unsigned long) /* Read IRQ rate */ 100*f80ad8b4SAndroid Build Coastguard Worker #define RTC_IRQP_SET _IOW('p', 0x0c, unsigned long) /* Set IRQ rate */ 101*f80ad8b4SAndroid Build Coastguard Worker #define RTC_EPOCH_READ _IOR('p', 0x0d, unsigned long) /* Read epoch */ 102*f80ad8b4SAndroid Build Coastguard Worker #define RTC_EPOCH_SET _IOW('p', 0x0e, unsigned long) /* Set epoch */ 103*f80ad8b4SAndroid Build Coastguard Worker 104*f80ad8b4SAndroid Build Coastguard Worker #define RTC_WKALM_SET _IOW('p', 0x0f, struct rtc_wkalrm)/* Set wakeup alarm*/ 105*f80ad8b4SAndroid Build Coastguard Worker #define RTC_WKALM_RD _IOR('p', 0x10, struct rtc_wkalrm)/* Get wakeup alarm*/ 106*f80ad8b4SAndroid Build Coastguard Worker 107*f80ad8b4SAndroid Build Coastguard Worker #define RTC_PLL_GET _IOR('p', 0x11, struct rtc_pll_info) /* Get PLL correction */ 108*f80ad8b4SAndroid Build Coastguard Worker #define RTC_PLL_SET _IOW('p', 0x12, struct rtc_pll_info) /* Set PLL correction */ 109*f80ad8b4SAndroid Build Coastguard Worker 110*f80ad8b4SAndroid Build Coastguard Worker #define RTC_PARAM_GET _IOW('p', 0x13, struct rtc_param) /* Get parameter */ 111*f80ad8b4SAndroid Build Coastguard Worker #define RTC_PARAM_SET _IOW('p', 0x14, struct rtc_param) /* Set parameter */ 112*f80ad8b4SAndroid Build Coastguard Worker 113*f80ad8b4SAndroid Build Coastguard Worker #define RTC_VL_DATA_INVALID _BITUL(0) /* Voltage too low, RTC data is invalid */ 114*f80ad8b4SAndroid Build Coastguard Worker #define RTC_VL_BACKUP_LOW _BITUL(1) /* Backup voltage is low */ 115*f80ad8b4SAndroid Build Coastguard Worker #define RTC_VL_BACKUP_EMPTY _BITUL(2) /* Backup empty or not present */ 116*f80ad8b4SAndroid Build Coastguard Worker #define RTC_VL_ACCURACY_LOW _BITUL(3) /* Voltage is low, RTC accuracy is reduced */ 117*f80ad8b4SAndroid Build Coastguard Worker #define RTC_VL_BACKUP_SWITCH _BITUL(4) /* Backup switchover happened */ 118*f80ad8b4SAndroid Build Coastguard Worker 119*f80ad8b4SAndroid Build Coastguard Worker #define RTC_VL_READ _IOR('p', 0x13, unsigned int) /* Voltage low detection */ 120*f80ad8b4SAndroid Build Coastguard Worker #define RTC_VL_CLR _IO('p', 0x14) /* Clear voltage low information */ 121*f80ad8b4SAndroid Build Coastguard Worker 122*f80ad8b4SAndroid Build Coastguard Worker /* interrupt flags */ 123*f80ad8b4SAndroid Build Coastguard Worker #define RTC_IRQF 0x80 /* Any of the following is active */ 124*f80ad8b4SAndroid Build Coastguard Worker #define RTC_PF 0x40 /* Periodic interrupt */ 125*f80ad8b4SAndroid Build Coastguard Worker #define RTC_AF 0x20 /* Alarm interrupt */ 126*f80ad8b4SAndroid Build Coastguard Worker #define RTC_UF 0x10 /* Update interrupt for 1Hz RTC */ 127*f80ad8b4SAndroid Build Coastguard Worker 128*f80ad8b4SAndroid Build Coastguard Worker /* feature list */ 129*f80ad8b4SAndroid Build Coastguard Worker #define RTC_FEATURE_ALARM 0 130*f80ad8b4SAndroid Build Coastguard Worker #define RTC_FEATURE_ALARM_RES_MINUTE 1 131*f80ad8b4SAndroid Build Coastguard Worker #define RTC_FEATURE_NEED_WEEK_DAY 2 132*f80ad8b4SAndroid Build Coastguard Worker #define RTC_FEATURE_ALARM_RES_2S 3 133*f80ad8b4SAndroid Build Coastguard Worker #define RTC_FEATURE_UPDATE_INTERRUPT 4 134*f80ad8b4SAndroid Build Coastguard Worker #define RTC_FEATURE_CORRECTION 5 135*f80ad8b4SAndroid Build Coastguard Worker #define RTC_FEATURE_BACKUP_SWITCH_MODE 6 136*f80ad8b4SAndroid Build Coastguard Worker #define RTC_FEATURE_ALARM_WAKEUP_ONLY 7 137*f80ad8b4SAndroid Build Coastguard Worker #define RTC_FEATURE_CNT 8 138*f80ad8b4SAndroid Build Coastguard Worker 139*f80ad8b4SAndroid Build Coastguard Worker /* parameter list */ 140*f80ad8b4SAndroid Build Coastguard Worker #define RTC_PARAM_FEATURES 0 141*f80ad8b4SAndroid Build Coastguard Worker #define RTC_PARAM_CORRECTION 1 142*f80ad8b4SAndroid Build Coastguard Worker #define RTC_PARAM_BACKUP_SWITCH_MODE 2 143*f80ad8b4SAndroid Build Coastguard Worker 144*f80ad8b4SAndroid Build Coastguard Worker #define RTC_BSM_DISABLED 0 145*f80ad8b4SAndroid Build Coastguard Worker #define RTC_BSM_DIRECT 1 146*f80ad8b4SAndroid Build Coastguard Worker #define RTC_BSM_LEVEL 2 147*f80ad8b4SAndroid Build Coastguard Worker #define RTC_BSM_STANDBY 3 148*f80ad8b4SAndroid Build Coastguard Worker 149*f80ad8b4SAndroid Build Coastguard Worker #define RTC_MAX_FREQ 8192 150*f80ad8b4SAndroid Build Coastguard Worker 151*f80ad8b4SAndroid Build Coastguard Worker 152*f80ad8b4SAndroid Build Coastguard Worker #endif /* _UAPI_LINUX_RTC_H_ */ 153