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)