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