at v3.2-rc5 936 lines 24 kB view raw
1/* 2 * RTC subsystem, interface functions 3 * 4 * Copyright (C) 2005 Tower Technologies 5 * Author: Alessandro Zummo <a.zummo@towertech.it> 6 * 7 * based on arch/arm/common/rtctime.c 8 * 9 * This program is free software; you can redistribute it and/or modify 10 * it under the terms of the GNU General Public License version 2 as 11 * published by the Free Software Foundation. 12*/ 13 14#include <linux/rtc.h> 15#include <linux/sched.h> 16#include <linux/module.h> 17#include <linux/log2.h> 18#include <linux/workqueue.h> 19 20static int rtc_timer_enqueue(struct rtc_device *rtc, struct rtc_timer *timer); 21static void rtc_timer_remove(struct rtc_device *rtc, struct rtc_timer *timer); 22 23static int __rtc_read_time(struct rtc_device *rtc, struct rtc_time *tm) 24{ 25 int err; 26 if (!rtc->ops) 27 err = -ENODEV; 28 else if (!rtc->ops->read_time) 29 err = -EINVAL; 30 else { 31 memset(tm, 0, sizeof(struct rtc_time)); 32 err = rtc->ops->read_time(rtc->dev.parent, tm); 33 } 34 return err; 35} 36 37int rtc_read_time(struct rtc_device *rtc, struct rtc_time *tm) 38{ 39 int err; 40 41 err = mutex_lock_interruptible(&rtc->ops_lock); 42 if (err) 43 return err; 44 45 err = __rtc_read_time(rtc, tm); 46 mutex_unlock(&rtc->ops_lock); 47 return err; 48} 49EXPORT_SYMBOL_GPL(rtc_read_time); 50 51int rtc_set_time(struct rtc_device *rtc, struct rtc_time *tm) 52{ 53 int err; 54 55 err = rtc_valid_tm(tm); 56 if (err != 0) 57 return err; 58 59 err = mutex_lock_interruptible(&rtc->ops_lock); 60 if (err) 61 return err; 62 63 if (!rtc->ops) 64 err = -ENODEV; 65 else if (rtc->ops->set_time) 66 err = rtc->ops->set_time(rtc->dev.parent, tm); 67 else if (rtc->ops->set_mmss) { 68 unsigned long secs; 69 err = rtc_tm_to_time(tm, &secs); 70 if (err == 0) 71 err = rtc->ops->set_mmss(rtc->dev.parent, secs); 72 } else 73 err = -EINVAL; 74 75 mutex_unlock(&rtc->ops_lock); 76 return err; 77} 78EXPORT_SYMBOL_GPL(rtc_set_time); 79 80int rtc_set_mmss(struct rtc_device *rtc, unsigned long secs) 81{ 82 int err; 83 84 err = mutex_lock_interruptible(&rtc->ops_lock); 85 if (err) 86 return err; 87 88 if (!rtc->ops) 89 err = -ENODEV; 90 else if (rtc->ops->set_mmss) 91 err = rtc->ops->set_mmss(rtc->dev.parent, secs); 92 else if (rtc->ops->read_time && rtc->ops->set_time) { 93 struct rtc_time new, old; 94 95 err = rtc->ops->read_time(rtc->dev.parent, &old); 96 if (err == 0) { 97 rtc_time_to_tm(secs, &new); 98 99 /* 100 * avoid writing when we're going to change the day of 101 * the month. We will retry in the next minute. This 102 * basically means that if the RTC must not drift 103 * by more than 1 minute in 11 minutes. 104 */ 105 if (!((old.tm_hour == 23 && old.tm_min == 59) || 106 (new.tm_hour == 23 && new.tm_min == 59))) 107 err = rtc->ops->set_time(rtc->dev.parent, 108 &new); 109 } 110 } 111 else 112 err = -EINVAL; 113 114 mutex_unlock(&rtc->ops_lock); 115 116 return err; 117} 118EXPORT_SYMBOL_GPL(rtc_set_mmss); 119 120static int rtc_read_alarm_internal(struct rtc_device *rtc, struct rtc_wkalrm *alarm) 121{ 122 int err; 123 124 err = mutex_lock_interruptible(&rtc->ops_lock); 125 if (err) 126 return err; 127 128 if (rtc->ops == NULL) 129 err = -ENODEV; 130 else if (!rtc->ops->read_alarm) 131 err = -EINVAL; 132 else { 133 memset(alarm, 0, sizeof(struct rtc_wkalrm)); 134 err = rtc->ops->read_alarm(rtc->dev.parent, alarm); 135 } 136 137 mutex_unlock(&rtc->ops_lock); 138 return err; 139} 140 141int __rtc_read_alarm(struct rtc_device *rtc, struct rtc_wkalrm *alarm) 142{ 143 int err; 144 struct rtc_time before, now; 145 int first_time = 1; 146 unsigned long t_now, t_alm; 147 enum { none, day, month, year } missing = none; 148 unsigned days; 149 150 /* The lower level RTC driver may return -1 in some fields, 151 * creating invalid alarm->time values, for reasons like: 152 * 153 * - The hardware may not be capable of filling them in; 154 * many alarms match only on time-of-day fields, not 155 * day/month/year calendar data. 156 * 157 * - Some hardware uses illegal values as "wildcard" match 158 * values, which non-Linux firmware (like a BIOS) may try 159 * to set up as e.g. "alarm 15 minutes after each hour". 160 * Linux uses only oneshot alarms. 161 * 162 * When we see that here, we deal with it by using values from 163 * a current RTC timestamp for any missing (-1) values. The 164 * RTC driver prevents "periodic alarm" modes. 165 * 166 * But this can be racey, because some fields of the RTC timestamp 167 * may have wrapped in the interval since we read the RTC alarm, 168 * which would lead to us inserting inconsistent values in place 169 * of the -1 fields. 170 * 171 * Reading the alarm and timestamp in the reverse sequence 172 * would have the same race condition, and not solve the issue. 173 * 174 * So, we must first read the RTC timestamp, 175 * then read the RTC alarm value, 176 * and then read a second RTC timestamp. 177 * 178 * If any fields of the second timestamp have changed 179 * when compared with the first timestamp, then we know 180 * our timestamp may be inconsistent with that used by 181 * the low-level rtc_read_alarm_internal() function. 182 * 183 * So, when the two timestamps disagree, we just loop and do 184 * the process again to get a fully consistent set of values. 185 * 186 * This could all instead be done in the lower level driver, 187 * but since more than one lower level RTC implementation needs it, 188 * then it's probably best best to do it here instead of there.. 189 */ 190 191 /* Get the "before" timestamp */ 192 err = rtc_read_time(rtc, &before); 193 if (err < 0) 194 return err; 195 do { 196 if (!first_time) 197 memcpy(&before, &now, sizeof(struct rtc_time)); 198 first_time = 0; 199 200 /* get the RTC alarm values, which may be incomplete */ 201 err = rtc_read_alarm_internal(rtc, alarm); 202 if (err) 203 return err; 204 205 /* full-function RTCs won't have such missing fields */ 206 if (rtc_valid_tm(&alarm->time) == 0) 207 return 0; 208 209 /* get the "after" timestamp, to detect wrapped fields */ 210 err = rtc_read_time(rtc, &now); 211 if (err < 0) 212 return err; 213 214 /* note that tm_sec is a "don't care" value here: */ 215 } while ( before.tm_min != now.tm_min 216 || before.tm_hour != now.tm_hour 217 || before.tm_mon != now.tm_mon 218 || before.tm_year != now.tm_year); 219 220 /* Fill in the missing alarm fields using the timestamp; we 221 * know there's at least one since alarm->time is invalid. 222 */ 223 if (alarm->time.tm_sec == -1) 224 alarm->time.tm_sec = now.tm_sec; 225 if (alarm->time.tm_min == -1) 226 alarm->time.tm_min = now.tm_min; 227 if (alarm->time.tm_hour == -1) 228 alarm->time.tm_hour = now.tm_hour; 229 230 /* For simplicity, only support date rollover for now */ 231 if (alarm->time.tm_mday == -1) { 232 alarm->time.tm_mday = now.tm_mday; 233 missing = day; 234 } 235 if (alarm->time.tm_mon == -1) { 236 alarm->time.tm_mon = now.tm_mon; 237 if (missing == none) 238 missing = month; 239 } 240 if (alarm->time.tm_year == -1) { 241 alarm->time.tm_year = now.tm_year; 242 if (missing == none) 243 missing = year; 244 } 245 246 /* with luck, no rollover is needed */ 247 rtc_tm_to_time(&now, &t_now); 248 rtc_tm_to_time(&alarm->time, &t_alm); 249 if (t_now < t_alm) 250 goto done; 251 252 switch (missing) { 253 254 /* 24 hour rollover ... if it's now 10am Monday, an alarm that 255 * that will trigger at 5am will do so at 5am Tuesday, which 256 * could also be in the next month or year. This is a common 257 * case, especially for PCs. 258 */ 259 case day: 260 dev_dbg(&rtc->dev, "alarm rollover: %s\n", "day"); 261 t_alm += 24 * 60 * 60; 262 rtc_time_to_tm(t_alm, &alarm->time); 263 break; 264 265 /* Month rollover ... if it's the 31th, an alarm on the 3rd will 266 * be next month. An alarm matching on the 30th, 29th, or 28th 267 * may end up in the month after that! Many newer PCs support 268 * this type of alarm. 269 */ 270 case month: 271 dev_dbg(&rtc->dev, "alarm rollover: %s\n", "month"); 272 do { 273 if (alarm->time.tm_mon < 11) 274 alarm->time.tm_mon++; 275 else { 276 alarm->time.tm_mon = 0; 277 alarm->time.tm_year++; 278 } 279 days = rtc_month_days(alarm->time.tm_mon, 280 alarm->time.tm_year); 281 } while (days < alarm->time.tm_mday); 282 break; 283 284 /* Year rollover ... easy except for leap years! */ 285 case year: 286 dev_dbg(&rtc->dev, "alarm rollover: %s\n", "year"); 287 do { 288 alarm->time.tm_year++; 289 } while (rtc_valid_tm(&alarm->time) != 0); 290 break; 291 292 default: 293 dev_warn(&rtc->dev, "alarm rollover not handled\n"); 294 } 295 296done: 297 return 0; 298} 299 300int rtc_read_alarm(struct rtc_device *rtc, struct rtc_wkalrm *alarm) 301{ 302 int err; 303 304 err = mutex_lock_interruptible(&rtc->ops_lock); 305 if (err) 306 return err; 307 if (rtc->ops == NULL) 308 err = -ENODEV; 309 else if (!rtc->ops->read_alarm) 310 err = -EINVAL; 311 else { 312 memset(alarm, 0, sizeof(struct rtc_wkalrm)); 313 alarm->enabled = rtc->aie_timer.enabled; 314 alarm->time = rtc_ktime_to_tm(rtc->aie_timer.node.expires); 315 } 316 mutex_unlock(&rtc->ops_lock); 317 318 return err; 319} 320EXPORT_SYMBOL_GPL(rtc_read_alarm); 321 322static int ___rtc_set_alarm(struct rtc_device *rtc, struct rtc_wkalrm *alarm) 323{ 324 int err; 325 326 if (!rtc->ops) 327 err = -ENODEV; 328 else if (!rtc->ops->set_alarm) 329 err = -EINVAL; 330 else 331 err = rtc->ops->set_alarm(rtc->dev.parent, alarm); 332 333 return err; 334} 335 336static int __rtc_set_alarm(struct rtc_device *rtc, struct rtc_wkalrm *alarm) 337{ 338 struct rtc_time tm; 339 long now, scheduled; 340 int err; 341 342 err = rtc_valid_tm(&alarm->time); 343 if (err) 344 return err; 345 rtc_tm_to_time(&alarm->time, &scheduled); 346 347 /* Make sure we're not setting alarms in the past */ 348 err = __rtc_read_time(rtc, &tm); 349 rtc_tm_to_time(&tm, &now); 350 if (scheduled <= now) 351 return -ETIME; 352 /* 353 * XXX - We just checked to make sure the alarm time is not 354 * in the past, but there is still a race window where if 355 * the is alarm set for the next second and the second ticks 356 * over right here, before we set the alarm. 357 */ 358 359 return ___rtc_set_alarm(rtc, alarm); 360} 361 362int rtc_set_alarm(struct rtc_device *rtc, struct rtc_wkalrm *alarm) 363{ 364 int err; 365 366 err = rtc_valid_tm(&alarm->time); 367 if (err != 0) 368 return err; 369 370 err = mutex_lock_interruptible(&rtc->ops_lock); 371 if (err) 372 return err; 373 if (rtc->aie_timer.enabled) { 374 rtc_timer_remove(rtc, &rtc->aie_timer); 375 } 376 rtc->aie_timer.node.expires = rtc_tm_to_ktime(alarm->time); 377 rtc->aie_timer.period = ktime_set(0, 0); 378 if (alarm->enabled) { 379 err = rtc_timer_enqueue(rtc, &rtc->aie_timer); 380 } 381 mutex_unlock(&rtc->ops_lock); 382 return err; 383} 384EXPORT_SYMBOL_GPL(rtc_set_alarm); 385 386/* Called once per device from rtc_device_register */ 387int rtc_initialize_alarm(struct rtc_device *rtc, struct rtc_wkalrm *alarm) 388{ 389 int err; 390 391 err = rtc_valid_tm(&alarm->time); 392 if (err != 0) 393 return err; 394 395 err = mutex_lock_interruptible(&rtc->ops_lock); 396 if (err) 397 return err; 398 399 rtc->aie_timer.node.expires = rtc_tm_to_ktime(alarm->time); 400 rtc->aie_timer.period = ktime_set(0, 0); 401 if (alarm->enabled) { 402 rtc->aie_timer.enabled = 1; 403 timerqueue_add(&rtc->timerqueue, &rtc->aie_timer.node); 404 } 405 mutex_unlock(&rtc->ops_lock); 406 return err; 407} 408EXPORT_SYMBOL_GPL(rtc_initialize_alarm); 409 410 411 412int rtc_alarm_irq_enable(struct rtc_device *rtc, unsigned int enabled) 413{ 414 int err = mutex_lock_interruptible(&rtc->ops_lock); 415 if (err) 416 return err; 417 418 if (rtc->aie_timer.enabled != enabled) { 419 if (enabled) 420 err = rtc_timer_enqueue(rtc, &rtc->aie_timer); 421 else 422 rtc_timer_remove(rtc, &rtc->aie_timer); 423 } 424 425 if (err) 426 /* nothing */; 427 else if (!rtc->ops) 428 err = -ENODEV; 429 else if (!rtc->ops->alarm_irq_enable) 430 err = -EINVAL; 431 else 432 err = rtc->ops->alarm_irq_enable(rtc->dev.parent, enabled); 433 434 mutex_unlock(&rtc->ops_lock); 435 return err; 436} 437EXPORT_SYMBOL_GPL(rtc_alarm_irq_enable); 438 439int rtc_update_irq_enable(struct rtc_device *rtc, unsigned int enabled) 440{ 441 int err = mutex_lock_interruptible(&rtc->ops_lock); 442 if (err) 443 return err; 444 445#ifdef CONFIG_RTC_INTF_DEV_UIE_EMUL 446 if (enabled == 0 && rtc->uie_irq_active) { 447 mutex_unlock(&rtc->ops_lock); 448 return rtc_dev_update_irq_enable_emul(rtc, 0); 449 } 450#endif 451 /* make sure we're changing state */ 452 if (rtc->uie_rtctimer.enabled == enabled) 453 goto out; 454 455 if (enabled) { 456 struct rtc_time tm; 457 ktime_t now, onesec; 458 459 __rtc_read_time(rtc, &tm); 460 onesec = ktime_set(1, 0); 461 now = rtc_tm_to_ktime(tm); 462 rtc->uie_rtctimer.node.expires = ktime_add(now, onesec); 463 rtc->uie_rtctimer.period = ktime_set(1, 0); 464 err = rtc_timer_enqueue(rtc, &rtc->uie_rtctimer); 465 } else 466 rtc_timer_remove(rtc, &rtc->uie_rtctimer); 467 468out: 469 mutex_unlock(&rtc->ops_lock); 470#ifdef CONFIG_RTC_INTF_DEV_UIE_EMUL 471 /* 472 * Enable emulation if the driver did not provide 473 * the update_irq_enable function pointer or if returned 474 * -EINVAL to signal that it has been configured without 475 * interrupts or that are not available at the moment. 476 */ 477 if (err == -EINVAL) 478 err = rtc_dev_update_irq_enable_emul(rtc, enabled); 479#endif 480 return err; 481 482} 483EXPORT_SYMBOL_GPL(rtc_update_irq_enable); 484 485 486/** 487 * rtc_handle_legacy_irq - AIE, UIE and PIE event hook 488 * @rtc: pointer to the rtc device 489 * 490 * This function is called when an AIE, UIE or PIE mode interrupt 491 * has occurred (or been emulated). 492 * 493 * Triggers the registered irq_task function callback. 494 */ 495void rtc_handle_legacy_irq(struct rtc_device *rtc, int num, int mode) 496{ 497 unsigned long flags; 498 499 /* mark one irq of the appropriate mode */ 500 spin_lock_irqsave(&rtc->irq_lock, flags); 501 rtc->irq_data = (rtc->irq_data + (num << 8)) | (RTC_IRQF|mode); 502 spin_unlock_irqrestore(&rtc->irq_lock, flags); 503 504 /* call the task func */ 505 spin_lock_irqsave(&rtc->irq_task_lock, flags); 506 if (rtc->irq_task) 507 rtc->irq_task->func(rtc->irq_task->private_data); 508 spin_unlock_irqrestore(&rtc->irq_task_lock, flags); 509 510 wake_up_interruptible(&rtc->irq_queue); 511 kill_fasync(&rtc->async_queue, SIGIO, POLL_IN); 512} 513 514 515/** 516 * rtc_aie_update_irq - AIE mode rtctimer hook 517 * @private: pointer to the rtc_device 518 * 519 * This functions is called when the aie_timer expires. 520 */ 521void rtc_aie_update_irq(void *private) 522{ 523 struct rtc_device *rtc = (struct rtc_device *)private; 524 rtc_handle_legacy_irq(rtc, 1, RTC_AF); 525} 526 527 528/** 529 * rtc_uie_update_irq - UIE mode rtctimer hook 530 * @private: pointer to the rtc_device 531 * 532 * This functions is called when the uie_timer expires. 533 */ 534void rtc_uie_update_irq(void *private) 535{ 536 struct rtc_device *rtc = (struct rtc_device *)private; 537 rtc_handle_legacy_irq(rtc, 1, RTC_UF); 538} 539 540 541/** 542 * rtc_pie_update_irq - PIE mode hrtimer hook 543 * @timer: pointer to the pie mode hrtimer 544 * 545 * This function is used to emulate PIE mode interrupts 546 * using an hrtimer. This function is called when the periodic 547 * hrtimer expires. 548 */ 549enum hrtimer_restart rtc_pie_update_irq(struct hrtimer *timer) 550{ 551 struct rtc_device *rtc; 552 ktime_t period; 553 int count; 554 rtc = container_of(timer, struct rtc_device, pie_timer); 555 556 period = ktime_set(0, NSEC_PER_SEC/rtc->irq_freq); 557 count = hrtimer_forward_now(timer, period); 558 559 rtc_handle_legacy_irq(rtc, count, RTC_PF); 560 561 return HRTIMER_RESTART; 562} 563 564/** 565 * rtc_update_irq - Triggered when a RTC interrupt occurs. 566 * @rtc: the rtc device 567 * @num: how many irqs are being reported (usually one) 568 * @events: mask of RTC_IRQF with one or more of RTC_PF, RTC_AF, RTC_UF 569 * Context: any 570 */ 571void rtc_update_irq(struct rtc_device *rtc, 572 unsigned long num, unsigned long events) 573{ 574 schedule_work(&rtc->irqwork); 575} 576EXPORT_SYMBOL_GPL(rtc_update_irq); 577 578static int __rtc_match(struct device *dev, void *data) 579{ 580 char *name = (char *)data; 581 582 if (strcmp(dev_name(dev), name) == 0) 583 return 1; 584 return 0; 585} 586 587struct rtc_device *rtc_class_open(char *name) 588{ 589 struct device *dev; 590 struct rtc_device *rtc = NULL; 591 592 dev = class_find_device(rtc_class, NULL, name, __rtc_match); 593 if (dev) 594 rtc = to_rtc_device(dev); 595 596 if (rtc) { 597 if (!try_module_get(rtc->owner)) { 598 put_device(dev); 599 rtc = NULL; 600 } 601 } 602 603 return rtc; 604} 605EXPORT_SYMBOL_GPL(rtc_class_open); 606 607void rtc_class_close(struct rtc_device *rtc) 608{ 609 module_put(rtc->owner); 610 put_device(&rtc->dev); 611} 612EXPORT_SYMBOL_GPL(rtc_class_close); 613 614int rtc_irq_register(struct rtc_device *rtc, struct rtc_task *task) 615{ 616 int retval = -EBUSY; 617 618 if (task == NULL || task->func == NULL) 619 return -EINVAL; 620 621 /* Cannot register while the char dev is in use */ 622 if (test_and_set_bit_lock(RTC_DEV_BUSY, &rtc->flags)) 623 return -EBUSY; 624 625 spin_lock_irq(&rtc->irq_task_lock); 626 if (rtc->irq_task == NULL) { 627 rtc->irq_task = task; 628 retval = 0; 629 } 630 spin_unlock_irq(&rtc->irq_task_lock); 631 632 clear_bit_unlock(RTC_DEV_BUSY, &rtc->flags); 633 634 return retval; 635} 636EXPORT_SYMBOL_GPL(rtc_irq_register); 637 638void rtc_irq_unregister(struct rtc_device *rtc, struct rtc_task *task) 639{ 640 spin_lock_irq(&rtc->irq_task_lock); 641 if (rtc->irq_task == task) 642 rtc->irq_task = NULL; 643 spin_unlock_irq(&rtc->irq_task_lock); 644} 645EXPORT_SYMBOL_GPL(rtc_irq_unregister); 646 647static int rtc_update_hrtimer(struct rtc_device *rtc, int enabled) 648{ 649 /* 650 * We always cancel the timer here first, because otherwise 651 * we could run into BUG_ON(timer->state != HRTIMER_STATE_CALLBACK); 652 * when we manage to start the timer before the callback 653 * returns HRTIMER_RESTART. 654 * 655 * We cannot use hrtimer_cancel() here as a running callback 656 * could be blocked on rtc->irq_task_lock and hrtimer_cancel() 657 * would spin forever. 658 */ 659 if (hrtimer_try_to_cancel(&rtc->pie_timer) < 0) 660 return -1; 661 662 if (enabled) { 663 ktime_t period = ktime_set(0, NSEC_PER_SEC / rtc->irq_freq); 664 665 hrtimer_start(&rtc->pie_timer, period, HRTIMER_MODE_REL); 666 } 667 return 0; 668} 669 670/** 671 * rtc_irq_set_state - enable/disable 2^N Hz periodic IRQs 672 * @rtc: the rtc device 673 * @task: currently registered with rtc_irq_register() 674 * @enabled: true to enable periodic IRQs 675 * Context: any 676 * 677 * Note that rtc_irq_set_freq() should previously have been used to 678 * specify the desired frequency of periodic IRQ task->func() callbacks. 679 */ 680int rtc_irq_set_state(struct rtc_device *rtc, struct rtc_task *task, int enabled) 681{ 682 int err = 0; 683 unsigned long flags; 684 685retry: 686 spin_lock_irqsave(&rtc->irq_task_lock, flags); 687 if (rtc->irq_task != NULL && task == NULL) 688 err = -EBUSY; 689 if (rtc->irq_task != task) 690 err = -EACCES; 691 if (!err) { 692 if (rtc_update_hrtimer(rtc, enabled) < 0) { 693 spin_unlock_irqrestore(&rtc->irq_task_lock, flags); 694 cpu_relax(); 695 goto retry; 696 } 697 rtc->pie_enabled = enabled; 698 } 699 spin_unlock_irqrestore(&rtc->irq_task_lock, flags); 700 return err; 701} 702EXPORT_SYMBOL_GPL(rtc_irq_set_state); 703 704/** 705 * rtc_irq_set_freq - set 2^N Hz periodic IRQ frequency for IRQ 706 * @rtc: the rtc device 707 * @task: currently registered with rtc_irq_register() 708 * @freq: positive frequency with which task->func() will be called 709 * Context: any 710 * 711 * Note that rtc_irq_set_state() is used to enable or disable the 712 * periodic IRQs. 713 */ 714int rtc_irq_set_freq(struct rtc_device *rtc, struct rtc_task *task, int freq) 715{ 716 int err = 0; 717 unsigned long flags; 718 719 if (freq <= 0 || freq > RTC_MAX_FREQ) 720 return -EINVAL; 721retry: 722 spin_lock_irqsave(&rtc->irq_task_lock, flags); 723 if (rtc->irq_task != NULL && task == NULL) 724 err = -EBUSY; 725 if (rtc->irq_task != task) 726 err = -EACCES; 727 if (!err) { 728 rtc->irq_freq = freq; 729 if (rtc->pie_enabled && rtc_update_hrtimer(rtc, 1) < 0) { 730 spin_unlock_irqrestore(&rtc->irq_task_lock, flags); 731 cpu_relax(); 732 goto retry; 733 } 734 } 735 spin_unlock_irqrestore(&rtc->irq_task_lock, flags); 736 return err; 737} 738EXPORT_SYMBOL_GPL(rtc_irq_set_freq); 739 740/** 741 * rtc_timer_enqueue - Adds a rtc_timer to the rtc_device timerqueue 742 * @rtc rtc device 743 * @timer timer being added. 744 * 745 * Enqueues a timer onto the rtc devices timerqueue and sets 746 * the next alarm event appropriately. 747 * 748 * Sets the enabled bit on the added timer. 749 * 750 * Must hold ops_lock for proper serialization of timerqueue 751 */ 752static int rtc_timer_enqueue(struct rtc_device *rtc, struct rtc_timer *timer) 753{ 754 timer->enabled = 1; 755 timerqueue_add(&rtc->timerqueue, &timer->node); 756 if (&timer->node == timerqueue_getnext(&rtc->timerqueue)) { 757 struct rtc_wkalrm alarm; 758 int err; 759 alarm.time = rtc_ktime_to_tm(timer->node.expires); 760 alarm.enabled = 1; 761 err = __rtc_set_alarm(rtc, &alarm); 762 if (err == -ETIME) 763 schedule_work(&rtc->irqwork); 764 else if (err) { 765 timerqueue_del(&rtc->timerqueue, &timer->node); 766 timer->enabled = 0; 767 return err; 768 } 769 } 770 return 0; 771} 772 773static void rtc_alarm_disable(struct rtc_device *rtc) 774{ 775 struct rtc_wkalrm alarm; 776 struct rtc_time tm; 777 778 __rtc_read_time(rtc, &tm); 779 780 alarm.time = rtc_ktime_to_tm(ktime_add(rtc_tm_to_ktime(tm), 781 ktime_set(300, 0))); 782 alarm.enabled = 0; 783 784 ___rtc_set_alarm(rtc, &alarm); 785} 786 787/** 788 * rtc_timer_remove - Removes a rtc_timer from the rtc_device timerqueue 789 * @rtc rtc device 790 * @timer timer being removed. 791 * 792 * Removes a timer onto the rtc devices timerqueue and sets 793 * the next alarm event appropriately. 794 * 795 * Clears the enabled bit on the removed timer. 796 * 797 * Must hold ops_lock for proper serialization of timerqueue 798 */ 799static void rtc_timer_remove(struct rtc_device *rtc, struct rtc_timer *timer) 800{ 801 struct timerqueue_node *next = timerqueue_getnext(&rtc->timerqueue); 802 timerqueue_del(&rtc->timerqueue, &timer->node); 803 timer->enabled = 0; 804 if (next == &timer->node) { 805 struct rtc_wkalrm alarm; 806 int err; 807 next = timerqueue_getnext(&rtc->timerqueue); 808 if (!next) { 809 rtc_alarm_disable(rtc); 810 return; 811 } 812 alarm.time = rtc_ktime_to_tm(next->expires); 813 alarm.enabled = 1; 814 err = __rtc_set_alarm(rtc, &alarm); 815 if (err == -ETIME) 816 schedule_work(&rtc->irqwork); 817 } 818} 819 820/** 821 * rtc_timer_do_work - Expires rtc timers 822 * @rtc rtc device 823 * @timer timer being removed. 824 * 825 * Expires rtc timers. Reprograms next alarm event if needed. 826 * Called via worktask. 827 * 828 * Serializes access to timerqueue via ops_lock mutex 829 */ 830void rtc_timer_do_work(struct work_struct *work) 831{ 832 struct rtc_timer *timer; 833 struct timerqueue_node *next; 834 ktime_t now; 835 struct rtc_time tm; 836 837 struct rtc_device *rtc = 838 container_of(work, struct rtc_device, irqwork); 839 840 mutex_lock(&rtc->ops_lock); 841again: 842 __rtc_read_time(rtc, &tm); 843 now = rtc_tm_to_ktime(tm); 844 while ((next = timerqueue_getnext(&rtc->timerqueue))) { 845 if (next->expires.tv64 > now.tv64) 846 break; 847 848 /* expire timer */ 849 timer = container_of(next, struct rtc_timer, node); 850 timerqueue_del(&rtc->timerqueue, &timer->node); 851 timer->enabled = 0; 852 if (timer->task.func) 853 timer->task.func(timer->task.private_data); 854 855 /* Re-add/fwd periodic timers */ 856 if (ktime_to_ns(timer->period)) { 857 timer->node.expires = ktime_add(timer->node.expires, 858 timer->period); 859 timer->enabled = 1; 860 timerqueue_add(&rtc->timerqueue, &timer->node); 861 } 862 } 863 864 /* Set next alarm */ 865 if (next) { 866 struct rtc_wkalrm alarm; 867 int err; 868 alarm.time = rtc_ktime_to_tm(next->expires); 869 alarm.enabled = 1; 870 err = __rtc_set_alarm(rtc, &alarm); 871 if (err == -ETIME) 872 goto again; 873 } else 874 rtc_alarm_disable(rtc); 875 876 mutex_unlock(&rtc->ops_lock); 877} 878 879 880/* rtc_timer_init - Initializes an rtc_timer 881 * @timer: timer to be intiialized 882 * @f: function pointer to be called when timer fires 883 * @data: private data passed to function pointer 884 * 885 * Kernel interface to initializing an rtc_timer. 886 */ 887void rtc_timer_init(struct rtc_timer *timer, void (*f)(void* p), void* data) 888{ 889 timerqueue_init(&timer->node); 890 timer->enabled = 0; 891 timer->task.func = f; 892 timer->task.private_data = data; 893} 894 895/* rtc_timer_start - Sets an rtc_timer to fire in the future 896 * @ rtc: rtc device to be used 897 * @ timer: timer being set 898 * @ expires: time at which to expire the timer 899 * @ period: period that the timer will recur 900 * 901 * Kernel interface to set an rtc_timer 902 */ 903int rtc_timer_start(struct rtc_device *rtc, struct rtc_timer* timer, 904 ktime_t expires, ktime_t period) 905{ 906 int ret = 0; 907 mutex_lock(&rtc->ops_lock); 908 if (timer->enabled) 909 rtc_timer_remove(rtc, timer); 910 911 timer->node.expires = expires; 912 timer->period = period; 913 914 ret = rtc_timer_enqueue(rtc, timer); 915 916 mutex_unlock(&rtc->ops_lock); 917 return ret; 918} 919 920/* rtc_timer_cancel - Stops an rtc_timer 921 * @ rtc: rtc device to be used 922 * @ timer: timer being set 923 * 924 * Kernel interface to cancel an rtc_timer 925 */ 926int rtc_timer_cancel(struct rtc_device *rtc, struct rtc_timer* timer) 927{ 928 int ret = 0; 929 mutex_lock(&rtc->ops_lock); 930 if (timer->enabled) 931 rtc_timer_remove(rtc, timer); 932 mutex_unlock(&rtc->ops_lock); 933 return ret; 934} 935 936