
  *   ˆl–Ü4ý( ©³( 	Å€fàB¦-ÿ¿ƒïƒ_†I|¥�+ÃÂ Æ    /* SPDX-License-Identifier: GPL-2.0 */
#ifndef _LINUX_ALARMTIMER_H
#define _LINUX_ALARMTIMER_H

#include <linux/time.h>
#include <linux/hrtimer.h>
#include <linux/timerqueue.h>

struct rtc_device;

enum alarmtimer_type {
	ALARM_REALTIME,
	ALARM_BOOTTIME,

	/* Supported types end here */
	ALARM_NUMTYPE,

	/* Used for tracing information. No usable types. */
	ALARM_REALTIME_FREEZER,
	ALARM_BOOTTIME_FREEZER,
};

enum alarmtimer_restart {
	ALARMTIMER_NORESTART,
	ALARMTIMER_RESTART,
};


#define ALARMTIMER_STATE_INACTIVE	0x00
#define ALARMTIMER_STATE_ENQUEUED	0x01

/**
 * struct alarm - Alarm timer structure
 * @node:	timerqueue node for adding to the event list this value
 *		also includes the expiration time.
 * @timer:	hrtimer used to schedule events while running
 * @function:	Function pointer to be executed when the timer fires.
 * @type:	Alarm type (BOOTTIME/REALTIME).
 * @state:	Flag that represents if the alarm is set to fire or not.
 * @data:	Internal data value.
 */
struct alarm {
	struct timerqueue_node	node;
	struct hrtimer		timer;
	enum alarmtimer_restart	(*function)(struct alarm *, ktime_t now);
	enum alarmtimer_type	type;
	int			state;
	void			*data;
};

void alarm_init(struct alarm *alarm, enum alarmtimer_type type,
		enum alarmtimer_restart (*function)(struct alarm *, ktime_t));
void alarm_start(struct alarm *alarm, ktime_t start);
void alarm_start_relative(struct alarm *alarm, ktime_t start);
void alarm_restart(struct alarm *alarm);
int alarm_try_to_cancel(struct alarm *alarm);
int alarm_cancel(struct alarm *alarm);

u64 alarm_forward(struct alarm *alarm, ktime_t now, ktime_t interval);
u64 alarm_forward_now(struct alarm *alarm, ktime_t interval);
ktime_t alarm_expires_remaining(const struct alarm *alarm);

#ifdef CONFIG_RTC_CLASS
/* Provide way to access the rtc device being used by alarmtimers */
struct rtc_device *alarmtimer_get_rtcdev(void);
#else
static inline struct rtc_device *alarmtimer_get_rtcdev(void) { return NULL; }
#endif

#endif
  "   ˆl–Ým_J*j"Tâ�và¸!)‹FÿÁƒh¹ÄÃ      00
  0   	ˆl–ßi~”êh¥8 Eq–î¥1hßÂƒ[s_ŒuÐb&=Ly[Ï¿ÆÅ l    	ý7zXZ  i"Þ6 !   t/å£à-] rªßÂu¢Uwƒ¼	‘Ã“ßWÅmÍœØ¿"q¸'0¥ë!ÒMù[É‘éâd â8úŒ�t†à+B†––ïçŒlzŸPÎcï1†´Cè¼õWLÞÏvõXáÕ²o6ï-gÍß¹¿µ^Ú™Û6„)�Ò¿äâ¶=q a¾2õä~3(ƒ"ËŽ2ºÿJe\ Í6BŽÀZê#ßå·äÃ¾o¤ã|ãÊž4GèLžÆr¸s6ÞzÈ¸ÖžM8¿Q‘ºY°B°Þ2üÔÚ‘M^4.VOœÊ:Ñ'§’€QT€\c–t|'%ýiq~6XîRýÈ‹/S·w˜Ü<FJÄþùŒe¢w¢,Hˆ}âÂÝWxÎLt9ã÷-jín<Šž'~™ú›7Ú�Ë=Ë%¤ÕOý@HP¶�è3„“Ê.?Bùï Õ„�ÙªÄâ›b¢~W…òìwÝJ–+›b.¥â\¦–jÎÍÄ°âyš¯Ï/PIB›á9�• I‡ÀÔWR�’fž‚hâë�Š<jYøþ¢}÷†öO¶�y"¤úòç?k'—œüLÌµÆ·Í}ÈÍIƒ™ºçªP2'gÙDAw,ÒfàÆ6Ëò\‹Q%ª[Õíö�Ç±ÀƒçI=¬Oê×„vf»6x_àòhÄ8yIöÜXH9BE¸œêBJæ©ŸüÝ ¯nDÔÁ�[Ë‹ÍÄ A	$°È±Ý`ÊRmQq!$uõåä&o!¯(¥†àU*ðX–¹üPµ7È¼PBÝW5P¿áœõDàjïwFn”QþcÄÌ¨@µˆ­¨5gµÚ+m˜Iä�ZõÒn“Iˆmµà¸—xnJ:Ø°yìãF¡FG~Ž¥È“‹4!0ßÜ„À²†ï&="1ø�[£‚¢0�½xo�«`±
ç½ß±p£R×QòBQïÎPŒF1Žáé\\q`$qK¨æAXÊ•ßyé§ÝsÒ:|…¼º#Aqãw3ª:x‡ë¬-"¨QHsâMË|ª¯°ZâLn€´¯©(¬VtÅ~Ò2i™�÷Bíj�JB'uÕV(©àÝš6íuÇÅìÕþ¶¸ƒdUß$§Úõ'×»¬¯v§“xéˆ¥‹¡ Û••¸{ò±²Fkê
m“÷ÇJöŒAÉjvÛ³©ú×öŽ™÷_Ï �AÐyˆ°%‘XILO|j‡Úycl…ãéU¿w;v…Ê¦¨b½aïå'�˜Aµfƒc·Jj&cÕejöâTÏÎeö	£¶ŠƒV*’xª÷Ð[èû£‚ugâo4?cg^¸á‘ñ±H#V>ä�È÷štâFÂöô?øÏ^¨×÷©ö+”ÅØ6VŽx¤v¡ëÕ—X¥yø_1iw¯9ÞãÁ¸Õ9¢E@F¸øiAÈŠ6ÈI-pó2Ç×ÆÆ®F�¾çÆÀ˜œ—ð1Mû¦Õ^3„Io%&(¢èû‰ç‰@³§{×Tî»‡u¬½nq!×(ùY²ÛLD¢mÏ‹t:|�Ó¢×OŸÌÅäLl,®c­A7ñMÏ’ÂnÂ¼y'¥Ï¿¢‘…ú'óé¿ÞÆÇ‡ñ‘ ÍýÌ›(ºD„6fÞ”7f=aèw *å1ó¼/E.è¤UD±+ŒÅ{•7Ü)ÄÍßÈí×/­žås&Nã…7œ!ÖœHÙ}]5‡s2DˆuÎBšükØ�o‹1bOqøñ4}»S)ô¼iY}FÃÝz][òå!lê`‹ÈŸØœ\|n5OE]C^5+�ç…‡¯âl
ÆàÀd°}:ñ1åë[`êi-›Ó!	©ozÈ’nKIä_R=Ë\)ÇáÙ{/�N±N¡Œ›+<
Uðg_A,Rÿ6f¼¢_\‹™5˜0Gˆ“'_Ç‚}å§)"'Œ/£ÿ¢“‰D¶ß¡êoZc-W'»~²Ö½œðÐI=”�ñ,�{ÛeY˜¨Ýo!nÏéËç.~[ÐëqˆšàS-ý¶éÒr;yÜê9ù„é¹*Ýd5[Í¦wqÅW”ßáøÍå°ðF’¸³‰nÔ÷{É¬cø!·½c…ñÐÜ�°+ßä]�úøÙe„Jiz‚oD_UŒjðÁY>Ò¢W¶¦ãZòÂzÒh9Ì§9)tñ†¤XO®0¼Æ´s<üÎ5õµjò…¯ô"O€æÎÊP»rß†8
Cìbí°äj†ó ýýß¤@"SRŽÏœH›U&ç”ìËl�ð€€ûÑ(«{”ÓØM'Š�)Æ\~H`‰"ª¬‡dž5±yž2ù‘G©¾Jä…z›ÏmšØÙLÇ0b"5°RÈÜ;PŠb½b§ç @.¿ÏäÌ^WÃMöÝªå/ˆã%z«	†‹B,	~B8ø_BË}ô2F»�ÜÅ8>µÌ�i!o„/<²ntú‚qï$§}¶fu5ó5ilô0`IL/€ Ü¿ì0ú0ct(uÄ¦>É+ù…�ÓF_›?Ð…ñzúï#á+�¾As÷eVIVøŠ