1eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch/* 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Generic RTC interface. 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * This version contains the part of the user interface to the Real Time Clock 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * service. It is used with both the legacy mc146818 and also EFI 5eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch * Struct rtc_time and first 12 ioctl by Paul Gortmaker, 1996 - separated out 6eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch * from <linux/mc146818rtc.h> to this file for 2.4 kernels. 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Copyright (C) 1999 Hewlett-Packard Co. 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * Copyright (C) 1999 Stephane Eranian <eranian@hpl.hp.com> 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#ifndef _UAPI_LINUX_RTC_H_ 12868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)#define _UAPI_LINUX_RTC_H_ 13eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 147d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles)/* 157d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) * The struct used to pass data via the following ioctl. Similar to the 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * struct tm in <time.h>, but it needs to be here so that the kernel 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * source is self contained, allowing cross-compiles, etc. etc. 18c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) */ 19c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 207dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochstruct rtc_time { 21c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) int tm_sec; 22c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) int tm_min; 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int tm_hour; 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int tm_mday; 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int tm_mon; 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int tm_year; 272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int tm_wday; 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int tm_yday; 29eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch int tm_isdst; 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 31f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 32f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)/* 33a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) * This data structure is inspired by the EFI (v0.92) wakeup 34a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) * alarm API. 357d4cd473f85ac64c3747c96c277f9e506a0d2246Torne (Richard Coles) */ 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct rtc_wkalrm { 372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) unsigned char enabled; /* 0 = alarm disabled, 1 = alarm enabled */ 380f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) unsigned char pending; /* 0 = alarm not pending, 1 = alarm pending */ 390f1bc08d4cfcc34181b0b5cbf065c40f687bf740Torne (Richard Coles) struct rtc_time time; /* time the alarm is set to */ 40a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)}; 41a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 42c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)/* 432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * Data structure to control PLL correction some better RTC feature 44c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * pll_value is used to get or set current value of correction, 45c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * the rest of the struct is used to query HW capabilities. 462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) * This is modeled after the RTC used in Q40/Q60 computers but 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * should be sufficiently flexible for other devices 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * +ve pll_value means clock will run faster by 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * pll_value*pll_posmult/pll_clock 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * -ve pll_value means clock will run slower by 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) * pll_value*pll_negmult/pll_clock 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) */ 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)struct rtc_pll_info { 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int pll_ctrl; /* placeholder for fancier control */ 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int pll_value; /* get/set correction value */ 582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) int pll_max; /* max +ve (faster) adjustment value */ 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int pll_min; /* max -ve (slower) adjustment value */ 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int pll_posmult; /* factor for +ve correction */ 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int pll_negmult; /* factor for -ve correction */ 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) long pll_clock; /* base PLL frequency */ 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 65a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)/* 66a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) * ioctl calls that are permitted to the /dev/rtc interface, if 67a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) * any of the RTC drivers are enabled. 68a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) */ 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define RTC_AIE_ON _IO('p', 0x01) /* Alarm int. enable on */ 71c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#define RTC_AIE_OFF _IO('p', 0x02) /* ... off */ 72ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#define RTC_UIE_ON _IO('p', 0x03) /* Update int. enable on */ 73ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#define RTC_UIE_OFF _IO('p', 0x04) /* ... off */ 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define RTC_PIE_ON _IO('p', 0x05) /* Periodic int. enable on */ 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define RTC_PIE_OFF _IO('p', 0x06) /* ... off */ 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define RTC_WIE_ON _IO('p', 0x0f) /* Watchdog int. enable on */ 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define RTC_WIE_OFF _IO('p', 0x10) /* ... off */ 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define RTC_ALM_SET _IOW('p', 0x07, struct rtc_time) /* Set alarm time */ 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define RTC_ALM_READ _IOR('p', 0x08, struct rtc_time) /* Read alarm time */ 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define RTC_RD_TIME _IOR('p', 0x09, struct rtc_time) /* Read RTC time */ 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define RTC_SET_TIME _IOW('p', 0x0a, struct rtc_time) /* Set RTC time */ 8346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#define RTC_IRQP_READ _IOR('p', 0x0b, unsigned long) /* Read IRQ rate */ 8446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#define RTC_IRQP_SET _IOW('p', 0x0c, unsigned long) /* Set IRQ rate */ 8546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#define RTC_EPOCH_READ _IOR('p', 0x0d, unsigned long) /* Read epoch */ 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define RTC_EPOCH_SET _IOW('p', 0x0e, unsigned long) /* Set epoch */ 87c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) 88c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#define RTC_WKALM_SET _IOW('p', 0x0f, struct rtc_wkalrm)/* Set wakeup alarm*/ 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define RTC_WKALM_RD _IOR('p', 0x10, struct rtc_wkalrm)/* Get wakeup alarm*/ 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define RTC_PLL_GET _IOR('p', 0x11, struct rtc_pll_info) /* Get PLL correction */ 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define RTC_PLL_SET _IOW('p', 0x12, struct rtc_pll_info) /* Set PLL correction */ 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define RTC_VL_READ _IOR('p', 0x13, int) /* Voltage low detector */ 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define RTC_VL_CLR _IO('p', 0x14) /* Clear voltage low information */ 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 97a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)/* interrupt flags */ 98a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#define RTC_IRQF 0x80 /* Any of the following is active */ 99a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#define RTC_PF 0x40 /* Periodic interrupt */ 100a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#define RTC_AF 0x20 /* Alarm interrupt */ 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define RTC_UF 0x10 /* Update interrupt for 1Hz RTC */ 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#define RTC_MAX_FREQ 8192 105a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 106a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 107a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#endif /* _UAPI_LINUX_RTC_H_ */ 108a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)