• source navigation • diff markup • identifier search • freetext search •
Version: 2.6.24 2.6.25 2.6.26 2.6.27 2.6.28 2.6.29 2.6.30 2.6.31 2.6.32 2.6.33-rc7
Architecture: x86 arm avr32 blackfin m68k m68knommu microblaze mips powerpc sh
1 /* 2 * Real Time Clock interface for Linux 3 * 4 * Copyright (C) 1996 Paul Gortmaker 5 * 6 * This driver allows use of the real time clock (built into 7 * nearly all computers) from user space. It exports the /dev/rtc 8 * interface supporting various ioctl() and also the 9 * /proc/driver/rtc pseudo-file for status information. 10 * 11 * The ioctls can be used to set the interrupt behaviour and 12 * generation rate from the RTC via IRQ 8. Then the /dev/rtc 13 * interface can be used to make use of these timer interrupts, 14 * be they interval or alarm based. 15 * 16 * The /dev/rtc interface will block on reads until an interrupt 17 * has been received. If a RTC interrupt has already happened, 18 * it will output an unsigned long and then block. The output value 19 * contains the interrupt status in the low byte and the number of 20 * interrupts since the last read in the remaining high bytes. The 21 * /dev/rtc interface can also be used with the select(2) call. 22 * 23 * This program is free software; you can redistribute it and/or 24 * modify it under the terms of the GNU General Public License 25 * as published by the Free Software Foundation; either version 26 * 2 of the License, or (at your option) any later version. 27 * 28 * Based on other minimal char device drivers, like Alan's 29 * watchdog, Ted's random, etc. etc. 30 * 31 * 1.07 Paul Gortmaker. 32 * 1.08 Miquel van Smoorenburg: disallow certain things on the 33 * DEC Alpha as the CMOS clock is also used for other things. 34 * 1.09 Nikita Schmidt: epoch support and some Alpha cleanup. 35 * 1.09a Pete Zaitcev: Sun SPARC 36 * 1.09b Jeff Garzik: Modularize, init cleanup 37 * 1.09c Jeff Garzik: SMP cleanup 38 * 1.10 Paul Barton-Davis: add support for async I/O 39 * 1.10a Andrea Arcangeli: Alpha updates 40 * 1.10b Andrew Morton: SMP lock fix 41 * 1.10c Cesar Barros: SMP locking fixes and cleanup 42 * 1.10d Paul Gortmaker: delete paranoia check in rtc_exit 43 * 1.10e Maciej W. Rozycki: Handle DECstation's year weirdness. 44 * 1.11 Takashi Iwai: Kernel access functions 45 * rtc_register/rtc_unregister/rtc_control 46 * 1.11a Daniele Bellucci: Audit create_proc_read_entry in rtc_init 47 * 1.12 Venkatesh Pallipadi: Hooks for emulating rtc on HPET base-timer 48 * CONFIG_HPET_EMULATE_RTC 49 * 1.12a Maciej W. Rozycki: Handle memory-mapped chips properly. 50 * 1.12ac Alan Cox: Allow read access to the day of week register 51 * 1.12b David John: Remove calls to the BKL. 52 */ 53 54 #define RTC_VERSION "1.12b" 55 56 /* 57 * Note that *all* calls to CMOS_READ and CMOS_WRITE are done with 58 * interrupts disabled. Due to the index-port/data-port (0x70/0x71) 59 * design of the RTC, we don't want two different things trying to 60 * get to it at once. (e.g. the periodic 11 min sync from time.c vs. 61 * this driver.) 62 */ 63 64 #include <linux/interrupt.h> 65 #include <linux/module.h> 66 #include <linux/kernel.h> 67 #include <linux/types.h> 68 #include <linux/miscdevice.h> 69 #include <linux/ioport.h> 70 #include <linux/fcntl.h> 71 #include <linux/mc146818rtc.h> 72 #include <linux/init.h> 73 #include <linux/poll.h> 74 #include <linux/proc_fs.h> 75 #include <linux/seq_file.h> 76 #include <linux/spinlock.h> 77 #include <linux/sched.h> 78 #include <linux/sysctl.h> 79 #include <linux/wait.h> 80 #include <linux/bcd.h> 81 #include <linux/delay.h> 82 #include <linux/uaccess.h> 83 84 #include <asm/current.h> 85 #include <asm/system.h> 86 87 #ifdef CONFIG_X86 88 #include <asm/hpet.h> 89 #endif 90 91 #ifdef CONFIG_SPARC32 92 #include <linux/of.h> 93 #include <linux/of_device.h> 94 #include <asm/io.h> 95 96 static unsigned long rtc_port; 97 static int rtc_irq; 98 #endif 99 100 #ifdef CONFIG_HPET_EMULATE_RTC 101 #undef RTC_IRQ 102 #endif 103 104 #ifdef RTC_IRQ 105 static int rtc_has_irq = 1; 106 #endif 107 108 #ifndef CONFIG_HPET_EMULATE_RTC 109 #define is_hpet_enabled() 0 110 #define hpet_set_alarm_time(hrs, min, sec) 0 111 #define hpet_set_periodic_freq(arg) 0 112 #define hpet_mask_rtc_irq_bit(arg) 0 113 #define hpet_set_rtc_irq_bit(arg) 0 114 #define hpet_rtc_timer_init() do { } while (0) 115 #define hpet_rtc_dropped_irq() 0 116 #define hpet_register_irq_handler(h) ({ 0; }) 117 #define hpet_unregister_irq_handler(h) ({ 0; }) 118 #ifdef RTC_IRQ 119 static irqreturn_t hpet_rtc_interrupt(int irq, void *dev_id) 120 { 121 return 0; 122 } 123 #endif 124 #endif 125 126 /* 127 * We sponge a minor off of the misc major. No need slurping 128 * up another valuable major dev number for this. If you add 129 * an ioctl, make sure you don't conflict with SPARC's RTC 130 * ioctls. 131 */ 132 133 static struct fasync_struct *rtc_async_queue; 134 135 static DECLARE_WAIT_QUEUE_HEAD(rtc_wait); 136 137 #ifdef RTC_IRQ 138 static void rtc_dropped_irq(unsigned long data); 139 140 static DEFINE_TIMER(rtc_irq_timer, rtc_dropped_irq, 0, 0); 141 #endif 142 143 static ssize_t rtc_read(struct file *file, char __user *buf, 144 size_t count, loff_t *ppos); 145 146 static long rtc_ioctl(struct file *file, unsigned int cmd, unsigned long arg); 147 static void rtc_get_rtc_time(struct rtc_time *rtc_tm); 148 149 #ifdef RTC_IRQ 150 static unsigned int rtc_poll(struct file *file, poll_table *wait); 151 #endif 152 153 static void get_rtc_alm_time(struct rtc_time *alm_tm); 154 #ifdef RTC_IRQ 155 static void set_rtc_irq_bit_locked(unsigned char bit); 156 static void mask_rtc_irq_bit_locked(unsigned char bit); 157 158 static inline void set_rtc_irq_bit(unsigned char bit) 159 { 160 spin_lock_irq(&rtc_lock); 161 set_rtc_irq_bit_locked(bit); 162 spin_unlock_irq(&rtc_lock); 163 } 164 165 static void mask_rtc_irq_bit(unsigned char bit) 166 { 167 spin_lock_irq(&rtc_lock); 168 mask_rtc_irq_bit_locked(bit); 169 spin_unlock_irq(&rtc_lock); 170 } 171 #endif 172 173 #ifdef CONFIG_PROC_FS 174 static int rtc_proc_open(struct inode *inode, struct file *file); 175 #endif 176 177 /* 178 * Bits in rtc_status. (6 bits of room for future expansion) 179 */ 180 181 #define RTC_IS_OPEN 0x01 /* means /dev/rtc is in use */ 182 #define RTC_TIMER_ON 0x02 /* missed irq timer active */ 183 184 /* 185 * rtc_status is never changed by rtc_interrupt, and ioctl/open/close is 186 * protected by the spin lock rtc_lock. However, ioctl can still disable the 187 * timer in rtc_status and then with del_timer after the interrupt has read 188 * rtc_status but before mod_timer is called, which would then reenable the 189 * timer (but you would need to have an awful timing before you'd trip on it) 190 */ 191 static unsigned long rtc_status; /* bitmapped status byte. */ 192 static unsigned long rtc_freq; /* Current periodic IRQ rate */ 193 static unsigned long rtc_irq_data; /* our output to the world */ 194 static unsigned long rtc_max_user_freq = 64; /* > this, need CAP_SYS_RESOURCE */ 195 196 #ifdef RTC_IRQ 197 /* 198 * rtc_task_lock nests inside rtc_lock. 199 */ 200 static DEFINE_SPINLOCK(rtc_task_lock); 201 static rtc_task_t *rtc_callback; 202 #endif 203 204 /* 205 * If this driver ever becomes modularised, it will be really nice 206 * to make the epoch retain its value across module reload... 207 */ 208 209 static unsigned long epoch = 1900; /* year corresponding to 0x00 */ 210 211 static const unsigned char days_in_mo[] = 212 {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; 213 214 /* 215 * Returns true if a clock update is in progress 216 */ 217 static inline unsigned char rtc_is_updating(void) 218 { 219 unsigned long flags; 220 unsigned char uip; 221 222 spin_lock_irqsave(&rtc_lock, flags); 223 uip = (CMOS_READ(RTC_FREQ_SELECT) & RTC_UIP); 224 spin_unlock_irqrestore(&rtc_lock, flags); 225 return uip; 226 } 227 228 #ifdef RTC_IRQ 229 /* 230 * A very tiny interrupt handler. It runs with IRQF_DISABLED set, 231 * but there is possibility of conflicting with the set_rtc_mmss() 232 * call (the rtc irq and the timer irq can easily run at the same 233 * time in two different CPUs). So we need to serialize 234 * accesses to the chip with the rtc_lock spinlock that each 235 * architecture should implement in the timer code. 236 * (See ./arch/XXXX/kernel/time.c for the set_rtc_mmss() function.) 237 */ 238 239 static irqreturn_t rtc_interrupt(int irq, void *dev_id) 240 { 241 /* 242 * Can be an alarm interrupt, update complete interrupt, 243 * or a periodic interrupt. We store the status in the 244 * low byte and the number of interrupts received since 245 * the last read in the remainder of rtc_irq_data. 246 */ 247 248 spin_lock(&rtc_lock); 249 rtc_irq_data += 0x100; 250 rtc_irq_data &= ~0xff; 251 if (is_hpet_enabled()) { 252 /* 253 * In this case it is HPET RTC interrupt handler 254 * calling us, with the interrupt information 255 * passed as arg1, instead of irq. 256 */ 257 rtc_irq_data |= (unsigned long)irq & 0xF0; 258 } else { 259 rtc_irq_data |= (CMOS_READ(RTC_INTR_FLAGS) & 0xF0); 260 } 261 262 if (rtc_status & RTC_TIMER_ON) 263 mod_timer(&rtc_irq_timer, jiffies + HZ/rtc_freq + 2*HZ/100); 264 265 spin_unlock(&rtc_lock); 266 267 /* Now do the rest of the actions */ 268 spin_lock(&rtc_task_lock); 269 if (rtc_callback) 270 rtc_callback->func(rtc_callback->private_data); 271 spin_unlock(&rtc_task_lock); 272 wake_up_interruptible(&rtc_wait); 273 274 kill_fasync(&rtc_async_queue, SIGIO, POLL_IN); 275 276 return IRQ_HANDLED; 277 } 278 #endif 279 280 /* 281 * sysctl-tuning infrastructure. 282 */ 283 static ctl_table rtc_table[] = { 284 { 285 .ctl_name = CTL_UNNUMBERED, 286 .procname = "max-user-freq", 287 .data = &rtc_max_user_freq, 288 .maxlen = sizeof(int), 289 .mode = 0644, 290 .proc_handler = &proc_dointvec, 291 }, 292 { .ctl_name = 0 } 293 }; 294 295 static ctl_table rtc_root[] = { 296 { 297 .ctl_name = CTL_UNNUMBERED, 298 .procname = "rtc", 299 .mode = 0555, 300 .child = rtc_table, 301 }, 302 { .ctl_name = 0 } 303 }; 304 305 static ctl_table dev_root[] = { 306 { 307 .ctl_name = CTL_DEV, 308 .procname = "dev", 309 .mode = 0555, 310 .child = rtc_root, 311 }, 312 { .ctl_name = 0 } 313 }; 314 315 static struct ctl_table_header *sysctl_header; 316 317 static int __init init_sysctl(void) 318 { 319 sysctl_header = register_sysctl_table(dev_root); 320 return 0; 321 } 322 323 static void __exit cleanup_sysctl(void) 324 { 325 unregister_sysctl_table(sysctl_header); 326 } 327 328 /* 329 * Now all the various file operations that we export. 330 */ 331 332 static ssize_t rtc_read(struct file *file, char __user *buf, 333 size_t count, loff_t *ppos) 334 { 335 #ifndef RTC_IRQ 336 return -EIO; 337 #else 338 DECLARE_WAITQUEUE(wait, current); 339 unsigned long data; 340 ssize_t retval; 341 342 if (rtc_has_irq == 0) 343 return -EIO; 344 345 /* 346 * Historically this function used to assume that sizeof(unsigned long) 347 * is the same in userspace and kernelspace. This lead to problems 348 * for configurations with multiple ABIs such a the MIPS o32 and 64 349 * ABIs supported on the same kernel. So now we support read of both 350 * 4 and 8 bytes and assume that's the sizeof(unsigned long) in the 351 * userspace ABI. 352 */ 353 if (count != sizeof(unsigned int) && count != sizeof(unsigned long)) 354 return -EINVAL; 355 356 add_wait_queue(&rtc_wait, &wait); 357 358 do { 359 /* First make it right. Then make it fast. Putting this whole 360 * block within the parentheses of a while would be too 361 * confusing. And no, xchg() is not the answer. */ 362 363 __set_current_state(TASK_INTERRUPTIBLE); 364 365 spin_lock_irq(&rtc_lock); 366 data = rtc_irq_data; 367 rtc_irq_data = 0; 368 spin_unlock_irq(&rtc_lock); 369 370 if (data != 0) 371 break; 372 373 if (file->f_flags & O_NONBLOCK) { 374 retval = -EAGAIN; 375 goto out; 376 } 377 if (signal_pending(current)) { 378 retval = -ERESTARTSYS; 379 goto out; 380 } 381 schedule(); 382 } while (1); 383 384 if (count == sizeof(unsigned int)) { 385 retval = put_user(data, 386 (unsigned int __user *)buf) ?: sizeof(int); 387 } else { 388 retval = put_user(data, 389 (unsigned long __user *)buf) ?: sizeof(long); 390 } 391 if (!retval) 392 retval = count; 393 out: 394 __set_current_state(TASK_RUNNING); 395 remove_wait_queue(&rtc_wait, &wait); 396 397 return retval; 398 #endif 399 } 400 401 static int rtc_do_ioctl(unsigned int cmd, unsigned long arg, int kernel) 402 { 403 struct rtc_time wtime; 404 405 #ifdef RTC_IRQ 406 if (rtc_has_irq == 0) { 407 switch (cmd) { 408 case RTC_AIE_OFF: 409 case RTC_AIE_ON: 410 case RTC_PIE_OFF: 411 case RTC_PIE_ON: 412 case RTC_UIE_OFF: 413 case RTC_UIE_ON: 414 case RTC_IRQP_READ: 415 case RTC_IRQP_SET: 416 return -EINVAL; 417 }; 418 } 419 #endif 420 421 switch (cmd) { 422 #ifdef RTC_IRQ 423 case RTC_AIE_OFF: /* Mask alarm int. enab. bit */ 424 { 425 mask_rtc_irq_bit(RTC_AIE); 426 return 0; 427 } 428 case RTC_AIE_ON: /* Allow alarm interrupts. */ 429 { 430 set_rtc_irq_bit(RTC_AIE); 431 return 0; 432 } 433 case RTC_PIE_OFF: /* Mask periodic int. enab. bit */ 434 { 435 /* can be called from isr via rtc_control() */ 436 unsigned long flags; 437 438 spin_lock_irqsave(&rtc_lock, flags); 439 mask_rtc_irq_bit_locked(RTC_PIE); 440 if (rtc_status & RTC_TIMER_ON) { 441 rtc_status &= ~RTC_TIMER_ON; 442 del_timer(&rtc_irq_timer); 443 } 444 spin_unlock_irqrestore(&rtc_lock, flags); 445 446 return 0; 447 } 448 case RTC_PIE_ON: /* Allow periodic ints */ 449 { 450 /* can be called from isr via rtc_control() */ 451 unsigned long flags; 452 453 /* 454 * We don't really want Joe User enabling more 455 * than 64Hz of interrupts on a multi-user machine. 456 */ 457 if (!kernel && (rtc_freq > rtc_max_user_freq) && 458 (!capable(CAP_SYS_RESOURCE))) 459 return -EACCES; 460 461 spin_lock_irqsave(&rtc_lock, flags); 462 if (!(rtc_status & RTC_TIMER_ON)) { 463 mod_timer(&rtc_irq_timer, jiffies + HZ/rtc_freq + 464 2*HZ/100); 465 rtc_status |= RTC_TIMER_ON; 466 } 467 set_rtc_irq_bit_locked(RTC_PIE); 468 spin_unlock_irqrestore(&rtc_lock, flags); 469 470 return 0; 471 } 472 case RTC_UIE_OFF: /* Mask ints from RTC updates. */ 473 { 474 mask_rtc_irq_bit(RTC_UIE); 475 return 0; 476 } 477 case RTC_UIE_ON: /* Allow ints for RTC updates. */ 478 { 479 set_rtc_irq_bit(RTC_UIE); 480 return 0; 481 } 482 #endif 483 case RTC_ALM_READ: /* Read the present alarm time */ 484 { 485 /* 486 * This returns a struct rtc_time. Reading >= 0xc0 487 * means "don't care" or "match all". Only the tm_hour, 488 * tm_min, and tm_sec values are filled in. 489 */ 490 memset(&wtime, 0, sizeof(struct rtc_time)); 491 get_rtc_alm_time(&wtime); 492 break; 493 } 494 case RTC_ALM_SET: /* Store a time into the alarm */ 495 { 496 /* 497 * This expects a struct rtc_time. Writing 0xff means 498 * "don't care" or "match all". Only the tm_hour, 499 * tm_min and tm_sec are used. 500 */ 501 unsigned char hrs, min, sec; 502 struct rtc_time alm_tm; 503 504 if (copy_from_user(&alm_tm, (struct rtc_time __user *)arg, 505 sizeof(struct rtc_time))) 506 return -EFAULT; 507 508 hrs = alm_tm.tm_hour; 509 min = alm_tm.tm_min; 510 sec = alm_tm.tm_sec; 511 512 spin_lock_irq(&rtc_lock); 513 if (hpet_set_alarm_time(hrs, min, sec)) { 514 /* 515 * Fallthru and set alarm time in CMOS too, 516 * so that we will get proper value in RTC_ALM_READ 517 */ 518 } 519 if (!(CMOS_READ(RTC_CONTROL) & RTC_DM_BINARY) || 520 RTC_ALWAYS_BCD) { 521 if (sec < 60) 522 sec = bin2bcd(sec); 523 else 524 sec = 0xff; 525 526 if (min < 60) 527 min = bin2bcd(min); 528 else 529 min = 0xff; 530 531 if (hrs < 24) 532 hrs = bin2bcd(hrs); 533 else 534 hrs = 0xff; 535 } 536 CMOS_WRITE(hrs, RTC_HOURS_ALARM); 537 CMOS_WRITE(min, RTC_MINUTES_ALARM); 538 CMOS_WRITE(sec, RTC_SECONDS_ALARM); 539 spin_unlock_irq(&rtc_lock); 540 541 return 0; 542 } 543 case RTC_RD_TIME: /* Read the time/date from RTC */ 544 { 545 memset(&wtime, 0, sizeof(struct rtc_time)); 546 rtc_get_rtc_time(&wtime); 547 break; 548 } 549 case RTC_SET_TIME: /* Set the RTC */ 550 { 551 struct rtc_time rtc_tm; 552 unsigned char mon, day, hrs, min, sec, leap_yr; 553 unsigned char save_control, save_freq_select; 554 unsigned int yrs; 555 #ifdef CONFIG_MACH_DECSTATION 556 unsigned int real_yrs; 557 #endif 558 559 if (!capable(CAP_SYS_TIME)) 560 return -EACCES; 561 562 if (copy_from_user(&rtc_tm, (struct rtc_time __user *)arg, 563 sizeof(struct rtc_time))) 564 return -EFAULT; 565 566 yrs = rtc_tm.tm_year + 1900; 567 mon = rtc_tm.tm_mon + 1; /* tm_mon starts at zero */ 568 day = rtc_tm.tm_mday; 569 hrs = rtc_tm.tm_hour; 570 min = rtc_tm.tm_min; 571 sec = rtc_tm.tm_sec; 572 573 if (yrs < 1970) 574 return -EINVAL; 575 576 leap_yr = ((!(yrs % 4) && (yrs % 100)) || !(yrs % 400)); 577 578 if ((mon > 12) || (day == 0)) 579 return -EINVAL; 580 581 if (day > (days_in_mo[mon] + ((mon == 2) && leap_yr))) 582 return -EINVAL; 583 584 if ((hrs >= 24) || (min >= 60) || (sec >= 60)) 585 return -EINVAL; 586 587 yrs -= epoch; 588 if (yrs > 255) /* They are unsigned */ 589 return -EINVAL; 590 591 spin_lock_irq(&rtc_lock); 592 #ifdef CONFIG_MACH_DECSTATION 593 real_yrs = yrs; 594 yrs = 72; 595 596 /* 597 * We want to keep the year set to 73 until March 598 * for non-leap years, so that Feb, 29th is handled 599 * correctly. 600 */ 601 if (!leap_yr && mon < 3) { 602 real_yrs--; 603 yrs = 73; 604 } 605 #endif 606 /* These limits and adjustments are independent of 607 * whether the chip is in binary mode or not. 608 */ 609 if (yrs > 169) { 610 spin_unlock_irq(&rtc_lock); 611 return -EINVAL; 612 } 613 if (yrs >= 100) 614 yrs -= 100; 615 616 if (!(CMOS_READ(RTC_CONTROL) & RTC_DM_BINARY) 617 || RTC_ALWAYS_BCD) { 618 sec = bin2bcd(sec); 619 min = bin2bcd(min); 620 hrs = bin2bcd(hrs); 621 day = bin2bcd(day); 622 mon = bin2bcd(mon); 623 yrs = bin2bcd(yrs); 624 } 625 626 save_control = CMOS_READ(RTC_CONTROL); 627 CMOS_WRITE((save_control|RTC_SET), RTC_CONTROL); 628 save_freq_select = CMOS_READ(RTC_FREQ_SELECT); 629 CMOS_WRITE((save_freq_select|RTC_DIV_RESET2), RTC_FREQ_SELECT); 630 631 #ifdef CONFIG_MACH_DECSTATION 632 CMOS_WRITE(real_yrs, RTC_DEC_YEAR); 633 #endif 634 CMOS_WRITE(yrs, RTC_YEAR); 635 CMOS_WRITE(mon, RTC_MONTH); 636 CMOS_WRITE(day, RTC_DAY_OF_MONTH); 637 CMOS_WRITE(hrs, RTC_HOURS); 638 CMOS_WRITE(min, RTC_MINUTES); 639 CMOS_WRITE(sec, RTC_SECONDS); 640 641 CMOS_WRITE(save_control, RTC_CONTROL); 642 CMOS_WRITE(save_freq_select, RTC_FREQ_SELECT); 643 644 spin_unlock_irq(&rtc_lock); 645 return 0; 646 } 647 #ifdef RTC_IRQ 648 case RTC_IRQP_READ: /* Read the periodic IRQ rate. */ 649 { 650 return put_user(rtc_freq, (unsigned long __user *)arg); 651 } 652 case RTC_IRQP_SET: /* Set periodic IRQ rate. */ 653 { 654 int tmp = 0; 655 unsigned char val; 656 /* can be called from isr via rtc_control() */ 657 unsigned long flags; 658 659 /* 660 * The max we can do is 8192Hz. 661 */ 662 if ((arg < 2) || (arg > 8192)) 663 return -EINVAL; 664 /* 665 * We don't really want Joe User generating more 666 * than 64Hz of interrupts on a multi-user machine. 667 */ 668 if (!kernel && (arg > rtc_max_user_freq) && 669 !capable(CAP_SYS_RESOURCE)) 670 return -EACCES; 671 672 while (arg > (1<<tmp)) 673 tmp++; 674 675 /* 676 * Check that the input was really a power of 2. 677 */ 678 if (arg != (1<<tmp)) 679 return -EINVAL; 680 681 rtc_freq = arg; 682 683 spin_lock_irqsave(&rtc_lock, flags); 684 if (hpet_set_periodic_freq(arg)) { 685 spin_unlock_irqrestore(&rtc_lock, flags); 686 return 0; 687 } 688 689 val = CMOS_READ(RTC_FREQ_SELECT) & 0xf0; 690 val |= (16 - tmp); 691 CMOS_WRITE(val, RTC_FREQ_SELECT); 692 spin_unlock_irqrestore(&rtc_lock, flags); 693 return 0; 694 } 695 #endif 696 case RTC_EPOCH_READ: /* Read the epoch. */ 697 { 698 return put_user(epoch, (unsigned long __user *)arg); 699 } 700 case RTC_EPOCH_SET: /* Set the epoch. */ 701 { 702 /* 703 * There were no RTC clocks before 1900. 704 */ 705 if (arg < 1900) 706 return -EINVAL; 707 708 if (!capable(CAP_SYS_TIME)) 709 return -EACCES; 710 711 epoch = arg; 712 return 0; 713 } 714 default: 715 return -ENOTTY; 716 } 717 return copy_to_user((void __user *)arg, 718 &wtime, sizeof wtime) ? -EFAULT : 0; 719 } 720 721 static long rtc_ioctl(struct file *file, unsigned int cmd, unsigned long arg) 722 { 723 long ret; 724 ret = rtc_do_ioctl(cmd, arg, 0); 725 return ret; 726 } 727 728 /* 729 * We enforce only one user at a time here with the open/close. 730 * Also clear the previous interrupt data on an open, and clean 731 * up things on a close. 732 */ 733 static int rtc_open(struct inode *inode, struct file *file) 734 { 735 spin_lock_irq(&rtc_lock); 736 737 if (rtc_status & RTC_IS_OPEN) 738 goto out_busy; 739 740 rtc_status |= RTC_IS_OPEN; 741 742 rtc_irq_data = 0; 743 spin_unlock_irq(&rtc_lock); 744 return 0; 745 746 out_busy: 747 spin_unlock_irq(&rtc_lock); 748 return -EBUSY; 749 } 750 751 static int rtc_fasync(int fd, struct file *filp, int on) 752 { 753 return fasync_helper(fd, filp, on, &rtc_async_queue); 754 } 755 756 static int rtc_release(struct inode *inode, struct file *file) 757 { 758 #ifdef RTC_IRQ 759 unsigned char tmp; 760 761 if (rtc_has_irq == 0) 762 goto no_irq; 763 764 /* 765 * Turn off all interrupts once the device is no longer 766 * in use, and clear the data. 767 */ 768 769 spin_lock_irq(&rtc_lock); 770 if (!hpet_mask_rtc_irq_bit(RTC_PIE | RTC_AIE | RTC_UIE)) { 771 tmp = CMOS_READ(RTC_CONTROL); 772 tmp &= ~RTC_PIE; 773 tmp &= ~RTC_AIE; 774 tmp &= ~RTC_UIE; 775 CMOS_WRITE(tmp, RTC_CONTROL); 776 CMOS_READ(RTC_INTR_FLAGS); 777 } 778 if (rtc_status & RTC_TIMER_ON) { 779 rtc_status &= ~RTC_TIMER_ON; 780 del_timer(&rtc_irq_timer); 781 } 782 spin_unlock_irq(&rtc_lock); 783 784 no_irq: 785 #endif 786 787 spin_lock_irq(&rtc_lock); 788 rtc_irq_data = 0; 789 rtc_status &= ~RTC_IS_OPEN; 790 spin_unlock_irq(&rtc_lock); 791 792 return 0; 793 } 794 795 #ifdef RTC_IRQ 796 static unsigned int rtc_poll(struct file *file, poll_table *wait) 797 { 798 unsigned long l; 799 800 if (rtc_has_irq == 0) 801 return 0; 802 803 poll_wait(file, &rtc_wait, wait); 804 805 spin_lock_irq(&rtc_lock); 806 l = rtc_irq_data; 807 spin_unlock_irq(&rtc_lock); 808 809 if (l != 0) 810 return POLLIN | POLLRDNORM; 811 return 0; 812 } 813 #endif 814 815 int rtc_register(rtc_task_t *task) 816 { 817 #ifndef RTC_IRQ 818 return -EIO; 819 #else 820 if (task == NULL || task->func == NULL) 821 return -EINVAL; 822 spin_lock_irq(&rtc_lock); 823 if (rtc_status & RTC_IS_OPEN) { 824 spin_unlock_irq(&rtc_lock); 825 return -EBUSY; 826 } 827 spin_lock(&rtc_task_lock); 828 if (rtc_callback) { 829 spin_unlock(&rtc_task_lock); 830 spin_unlock_irq(&rtc_lock); 831 return -EBUSY; 832 } 833 rtc_status |= RTC_IS_OPEN; 834 rtc_callback = task; 835 spin_unlock(&rtc_task_lock); 836 spin_unlock_irq(&rtc_lock); 837 return 0; 838 #endif 839 } 840 EXPORT_SYMBOL(rtc_register); 841 842 int rtc_unregister(rtc_task_t *task) 843 { 844 #ifndef RTC_IRQ 845 return -EIO; 846 #else 847 unsigned char tmp; 848 849 spin_lock_irq(&rtc_lock); 850 spin_lock(&rtc_task_lock); 851 if (rtc_callback != task) { 852 spin_unlock(&rtc_task_lock); 853 spin_unlock_irq(&rtc_lock); 854 return -ENXIO; 855 } 856 rtc_callback = NULL; 857 858 /* disable controls */ 859 if (!hpet_mask_rtc_irq_bit(RTC_PIE | RTC_AIE | RTC_UIE)) { 860 tmp = CMOS_READ(RTC_CONTROL); 861 tmp &= ~RTC_PIE; 862 tmp &= ~RTC_AIE; 863 tmp &= ~RTC_UIE; 864 CMOS_WRITE(tmp, RTC_CONTROL); 865 CMOS_READ(RTC_INTR_FLAGS); 866 } 867 if (rtc_status & RTC_TIMER_ON) { 868 rtc_status &= ~RTC_TIMER_ON; 869 del_timer(&rtc_irq_timer); 870 } 871 rtc_status &= ~RTC_IS_OPEN; 872 spin_unlock(&rtc_task_lock); 873 spin_unlock_irq(&rtc_lock); 874 return 0; 875 #endif 876 } 877 EXPORT_SYMBOL(rtc_unregister); 878 879 int rtc_control(rtc_task_t *task, unsigned int cmd, unsigned long arg) 880 { 881 #ifndef RTC_IRQ 882 return -EIO; 883 #else 884 unsigned long flags; 885 if (cmd != RTC_PIE_ON && cmd != RTC_PIE_OFF && cmd != RTC_IRQP_SET) 886 return -EINVAL; 887 spin_lock_irqsave(&rtc_task_lock, flags); 888 if (rtc_callback != task) { 889 spin_unlock_irqrestore(&rtc_task_lock, flags); 890 return -ENXIO; 891 } 892 spin_unlock_irqrestore(&rtc_task_lock, flags); 893 return rtc_do_ioctl(cmd, arg, 1); 894 #endif 895 } 896 EXPORT_SYMBOL(rtc_control); 897 898 /* 899 * The various file operations we support. 900 */ 901 902 static const struct file_operations rtc_fops = { 903 .owner = THIS_MODULE, 904 .llseek = no_llseek, 905 .read = rtc_read, 906 #ifdef RTC_IRQ 907 .poll = rtc_poll, 908 #endif 909 .unlocked_ioctl = rtc_ioctl, 910 .open = rtc_open, 911 .release = rtc_release, 912 .fasync = rtc_fasync, 913 }; 914 915 static struct miscdevice rtc_dev = { 916 .minor = RTC_MINOR, 917 .name = "rtc", 918 .fops = &rtc_fops, 919 }; 920 921 #ifdef CONFIG_PROC_FS 922 static const struct file_operations rtc_proc_fops = { 923 .owner = THIS_MODULE, 924 .open = rtc_proc_open, 925 .read = seq_read, 926 .llseek = seq_lseek, 927 .release = single_release, 928 }; 929 #endif 930 931 static resource_size_t rtc_size; 932 933 static struct resource * __init rtc_request_region(resource_size_t size) 934 { 935 struct resource *r; 936 937 if (RTC_IOMAPPED) 938 r = request_region(RTC_PORT(0), size, "rtc"); 939 else 940 r = request_mem_region(RTC_PORT(0), size, "rtc"); 941 942 if (r) 943 rtc_size = size; 944 945 return r; 946 } 947 948 static void rtc_release_region(void) 949 { 950 if (RTC_IOMAPPED) 951 release_region(RTC_PORT(0), rtc_size); 952 else 953 release_mem_region(RTC_PORT(0), rtc_size); 954 } 955 956 static int __init rtc_init(void) 957 { 958 #ifdef CONFIG_PROC_FS 959 struct proc_dir_entry *ent; 960 #endif 961 #if defined(__alpha__) || defined(__mips__) 962 unsigned int year, ctrl; 963 char *guess = NULL; 964 #endif 965 #ifdef CONFIG_SPARC32 966 struct device_node *ebus_dp; 967 struct of_device *op; 968 #else 969 void *r; 970 #ifdef RTC_IRQ 971 irq_handler_t rtc_int_handler_ptr; 972 #endif 973 #endif 974 975 #ifdef CONFIG_SPARC32 976 for_each_node_by_name(ebus_dp, "ebus") { 977 struct device_node *dp; 978 for (dp = ebus_dp; dp; dp = dp->sibling) { 979 if (!strcmp(dp->name, "rtc")) { 980 op = of_find_device_by_node(dp); 981 if (op) { 982 rtc_port = op->resource[0].start; 983 rtc_irq = op->irqs[0]; 984 goto found; 985 } 986 } 987 } 988 } 989 rtc_has_irq = 0; 990 printk(KERN_ERR "rtc_init: no PC rtc found\n"); 991 return -EIO; 992 993 found: 994 if (!rtc_irq) { 995 rtc_has_irq = 0; 996 goto no_irq; 997 } 998 999 /* 1000 * XXX Interrupt pin #7 in Espresso is shared between RTC and 1001 * PCI Slot 2 INTA# (and some INTx# in Slot 1). 1002 */ 1003 if (request_irq(rtc_irq, rtc_interrupt, IRQF_SHARED, "rtc", 1004 (void *)&rtc_port)) { 1005 rtc_has_irq = 0; 1006 printk(KERN_ERR "rtc: cannot register IRQ %d\n", rtc_irq); 1007 return -EIO; 1008 } 1009 no_irq: 1010 #else 1011 r = rtc_request_region(RTC_IO_EXTENT); 1012 1013 /* 1014 * If we've already requested a smaller range (for example, because 1015 * PNPBIOS or ACPI told us how the device is configured), the request 1016 * above might fail because it's too big. 1017 * 1018 * If so, request just the range we actually use. 1019 */ 1020 if (!r) 1021 r = rtc_request_region(RTC_IO_EXTENT_USED); 1022 if (!r) { 1023 #ifdef RTC_IRQ 1024 rtc_has_irq = 0; 1025 #endif 1026 printk(KERN_ERR "rtc: I/O resource %lx is not free.\n", 1027 (long)(RTC_PORT(0))); 1028 return -EIO; 1029 } 1030 1031 #ifdef RTC_IRQ 1032 if (is_hpet_enabled()) { 1033 int err; 1034 1035 rtc_int_handler_ptr = hpet_rtc_interrupt; 1036 err = hpet_register_irq_handler(rtc_interrupt); 1037 if (err != 0) { 1038 printk(KERN_WARNING "hpet_register_irq_handler failed " 1039 "in rtc_init()."); 1040 return err; 1041 } 1042 } else { 1043 rtc_int_handler_ptr = rtc_interrupt; 1044 } 1045 1046 if (request_irq(RTC_IRQ, rtc_int_handler_ptr, IRQF_DISABLED, 1047 "rtc", NULL)) { 1048 /* Yeah right, seeing as irq 8 doesn't even hit the bus. */ 1049 rtc_has_irq = 0; 1050 printk(KERN_ERR "rtc: IRQ %d is not free.\n", RTC_IRQ); 1051 rtc_release_region(); 1052 1053 return -EIO; 1054 } 1055 hpet_rtc_timer_init(); 1056 1057 #endif 1058 1059 #endif /* CONFIG_SPARC32 vs. others */ 1060 1061 if (misc_register(&rtc_dev)) { 1062 #ifdef RTC_IRQ 1063 free_irq(RTC_IRQ, NULL); 1064 hpet_unregister_irq_handler(rtc_interrupt); 1065 rtc_has_irq = 0; 1066 #endif 1067 rtc_release_region(); 1068 return -ENODEV; 1069 } 1070 1071 #ifdef CONFIG_PROC_FS 1072 ent = proc_create("driver/rtc", 0, NULL, &rtc_proc_fops); 1073 if (!ent) 1074 printk(KERN_WARNING "rtc: Failed to register with procfs.\n"); 1075 #endif 1076 1077 #if defined(__alpha__) || defined(__mips__) 1078 rtc_freq = HZ; 1079 1080 /* Each operating system on an Alpha uses its own epoch. 1081 Let's try to guess which one we are using now. */ 1082 1083 if (rtc_is_updating() != 0) 1084 msleep(20); 1085 1086 spin_lock_irq(&rtc_lock); 1087 year = CMOS_READ(RTC_YEAR); 1088 ctrl = CMOS_READ(RTC_CONTROL); 1089 spin_unlock_irq(&rtc_lock); 1090 1091 if (!(ctrl & RTC_DM_BINARY) || RTC_ALWAYS_BCD) 1092 year = bcd2bin(year); /* This should never happen... */ 1093 1094 if (year < 20) { 1095 epoch = 2000; 1096 guess = "SRM (post-2000)"; 1097 } else if (year >= 20 && year < 48) { 1098 epoch = 1980; 1099 guess = "ARC console"; 1100 } else if (year >= 48 && year < 72) { 1101 epoch = 1952; 1102 guess = "Digital UNIX"; 1103 #if defined(__mips__) 1104 } else if (year >= 72 && year < 74) { 1105 epoch = 2000; 1106 guess = "Digital DECstation"; 1107 #else 1108 } else if (year >= 70) { 1109 epoch = 1900; 1110 guess = "Standard PC (1900)"; 1111 #endif 1112 } 1113 if (guess) 1114 printk(KERN_INFO "rtc: %s epoch (%lu) detected\n", 1115 guess, epoch); 1116 #endif 1117 #ifdef RTC_IRQ 1118 if (rtc_has_irq == 0) 1119 goto no_irq2; 1120 1121 spin_lock_irq(&rtc_lock); 1122 rtc_freq = 1024; 1123 if (!hpet_set_periodic_freq(rtc_freq)) { 1124 /* 1125 * Initialize periodic frequency to CMOS reset default, 1126 * which is 1024Hz 1127 */ 1128 CMOS_WRITE(((CMOS_READ(RTC_FREQ_SELECT) & 0xF0) | 0x06), 1129 RTC_FREQ_SELECT); 1130 } 1131 spin_unlock_irq(&rtc_lock); 1132 no_irq2: 1133 #endif 1134 1135 (void) init_sysctl(); 1136 1137 printk(KERN_INFO "Real Time Clock Driver v" RTC_VERSION "\n"); 1138 1139 return 0; 1140 } 1141 1142 static void __exit rtc_exit(void) 1143 { 1144 cleanup_sysctl(); 1145 remove_proc_entry("driver/rtc", NULL); 1146 misc_deregister(&rtc_dev); 1147 1148 #ifdef CONFIG_SPARC32 1149 if (rtc_has_irq) 1150 free_irq(rtc_irq, &rtc_port); 1151 #else 1152 rtc_release_region(); 1153 #ifdef RTC_IRQ 1154 if (rtc_has_irq) { 1155 free_irq(RTC_IRQ, NULL); 1156 hpet_unregister_irq_handler(hpet_rtc_interrupt); 1157 } 1158 #endif 1159 #endif /* CONFIG_SPARC32 */ 1160 } 1161 1162 module_init(rtc_init); 1163 module_exit(rtc_exit); 1164 1165 #ifdef RTC_IRQ 1166 /* 1167 * At IRQ rates >= 4096Hz, an interrupt may get lost altogether. 1168 * (usually during an IDE disk interrupt, with IRQ unmasking off) 1169 * Since the interrupt handler doesn't get called, the IRQ status 1170 * byte doesn't get read, and the RTC stops generating interrupts. 1171 * A timer is set, and will call this function if/when that happens. 1172 * To get it out of this stalled state, we just read the status. 1173 * At least a jiffy of interrupts (rtc_freq/HZ) will have been lost. 1174 * (You *really* shouldn't be trying to use a non-realtime system 1175 * for something that requires a steady > 1KHz signal anyways.) 1176 */ 1177 1178 static void rtc_dropped_irq(unsigned long data) 1179 { 1180 unsigned long freq; 1181 1182 spin_lock_irq(&rtc_lock); 1183 1184 if (hpet_rtc_dropped_irq()) { 1185 spin_unlock_irq(&rtc_lock); 1186 return; 1187 } 1188 1189 /* Just in case someone disabled the timer from behind our back... */ 1190 if (rtc_status & RTC_TIMER_ON) 1191 mod_timer(&rtc_irq_timer, jiffies + HZ/rtc_freq + 2*HZ/100); 1192 1193 rtc_irq_data += ((rtc_freq/HZ)<<8); 1194 rtc_irq_data &= ~0xff; 1195 rtc_irq_data |= (CMOS_READ(RTC_INTR_FLAGS) & 0xF0); /* restart */ 1196 1197 freq = rtc_freq; 1198 1199 spin_unlock_irq(&rtc_lock); 1200 1201 if (printk_ratelimit()) { 1202 printk(KERN_WARNING "rtc: lost some interrupts at %ldHz.\n", 1203 freq); 1204 } 1205 1206 /* Now we have new data */ 1207 wake_up_interruptible(&rtc_wait); 1208 1209 kill_fasync(&rtc_async_queue, SIGIO, POLL_IN); 1210 } 1211 #endif 1212 1213 #ifdef CONFIG_PROC_FS 1214 /* 1215 * Info exported via "/proc/driver/rtc". 1216 */ 1217 1218 static int rtc_proc_show(struct seq_file *seq, void *v) 1219 { 1220 #define YN(bit) ((ctrl & bit) ? "yes" : "no") 1221 #define NY(bit) ((ctrl & bit) ? "no" : "yes") 1222 struct rtc_time tm; 1223 unsigned char batt, ctrl; 1224 unsigned long freq; 1225 1226 spin_lock_irq(&rtc_lock); 1227 batt = CMOS_READ(RTC_VALID) & RTC_VRT; 1228 ctrl = CMOS_READ(RTC_CONTROL); 1229 freq = rtc_freq; 1230 spin_unlock_irq(&rtc_lock); 1231 1232 1233 rtc_get_rtc_time(&tm); 1234 1235 /* 1236 * There is no way to tell if the luser has the RTC set for local 1237 * time or for Universal Standard Time (GMT). Probably local though. 1238 */ 1239 seq_printf(seq, 1240 "rtc_time\t: %02d:%02d:%02d\n" 1241 "rtc_date\t: %04d-%02d-%02d\n" 1242 "rtc_epoch\t: %04lu\n", 1243 tm.tm_hour, tm.tm_min, tm.tm_sec, 1244 tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday, epoch); 1245 1246 get_rtc_alm_time(&tm); 1247 1248 /* 1249 * We implicitly assume 24hr mode here. Alarm values >= 0xc0 will 1250 * match any value for that particular field. Values that are 1251 * greater than a valid time, but less than 0xc0 shouldn't appear. 1252 */ 1253 seq_puts(seq, "alarm\t\t: "); 1254 if (tm.tm_hour <= 24) 1255 seq_printf(seq, "%02d:", tm.tm_hour); 1256 else 1257 seq_puts(seq, "**:"); 1258 1259 if (tm.tm_min <= 59) 1260 seq_printf(seq, "%02d:", tm.tm_min); 1261 else 1262 seq_puts(seq, "**:"); 1263 1264 if (tm.tm_sec <= 59) 1265 seq_printf(seq, "%02d\n", tm.tm_sec); 1266 else 1267 seq_puts(seq, "**\n"); 1268 1269 seq_printf(seq, 1270 "DST_enable\t: %s\n" 1271 "BCD\t\t: %s\n" 1272 "24hr\t\t: %s\n" 1273 "square_wave\t: %s\n" 1274 "alarm_IRQ\t: %s\n" 1275 "update_IRQ\t: %s\n" 1276 "periodic_IRQ\t: %s\n" 1277 "periodic_freq\t: %ld\n" 1278 "batt_status\t: %s\n", 1279 YN(RTC_DST_EN), 1280 NY(RTC_DM_BINARY), 1281 YN(RTC_24H), 1282 YN(RTC_SQWE), 1283 YN(RTC_AIE), 1284 YN(RTC_UIE), 1285 YN(RTC_PIE), 1286 freq, 1287 batt ? "okay" : "dead"); 1288 1289 return 0; 1290 #undef YN 1291 #undef NY 1292 } 1293 1294 static int rtc_proc_open(struct inode *inode, struct file *file) 1295 { 1296 return single_open(file, rtc_proc_show, NULL); 1297 } 1298 #endif 1299 1300 static void rtc_get_rtc_time(struct rtc_time *rtc_tm) 1301 { 1302 unsigned long uip_watchdog = jiffies, flags; 1303 unsigned char ctrl; 1304 #ifdef CONFIG_MACH_DECSTATION 1305 unsigned int real_year; 1306 #endif 1307 1308 /* 1309 * read RTC once any update in progress is done. The update 1310 * can take just over 2ms. We wait 20ms. There is no need to 1311 * to poll-wait (up to 1s - eeccch) for the falling edge of RTC_UIP. 1312 * If you need to know *exactly* when a second has started, enable 1313 * periodic update complete interrupts, (via ioctl) and then 1314 * immediately read /dev/rtc which will block until you get the IRQ. 1315 * Once the read clears, read the RTC time (again via ioctl). Easy. 1316 */ 1317 1318 while (rtc_is_updating() != 0 && 1319 time_before(jiffies, uip_watchdog + 2*HZ/100)) 1320 cpu_relax(); 1321 1322 /* 1323 * Only the values that we read from the RTC are set. We leave 1324 * tm_wday, tm_yday and tm_isdst untouched. Note that while the 1325 * RTC has RTC_DAY_OF_WEEK, we should usually ignore it, as it is 1326 * only updated by the RTC when initially set to a non-zero value. 1327 */ 1328 spin_lock_irqsave(&rtc_lock, flags); 1329 rtc_tm->tm_sec = CMOS_READ(RTC_SECONDS); 1330 rtc_tm->tm_min = CMOS_READ(RTC_MINUTES); 1331 rtc_tm->tm_hour = CMOS_READ(RTC_HOURS); 1332 rtc_tm->tm_mday = CMOS_READ(RTC_DAY_OF_MONTH); 1333 rtc_tm->tm_mon = CMOS_READ(RTC_MONTH); 1334 rtc_tm->tm_year = CMOS_READ(RTC_YEAR); 1335 /* Only set from 2.6.16 onwards */ 1336 rtc_tm->tm_wday = CMOS_READ(RTC_DAY_OF_WEEK); 1337 1338 #ifdef CONFIG_MACH_DECSTATION 1339 real_year = CMOS_READ(RTC_DEC_YEAR); 1340 #endif 1341 ctrl = CMOS_READ(RTC_CONTROL); 1342 spin_unlock_irqrestore(&rtc_lock, flags); 1343 1344 if (!(ctrl & RTC_DM_BINARY) || RTC_ALWAYS_BCD) { 1345 rtc_tm->tm_sec = bcd2bin(rtc_tm->tm_sec); 1346 rtc_tm->tm_min = bcd2bin(rtc_tm->tm_min); 1347 rtc_tm->tm_hour = bcd2bin(rtc_tm->tm_hour); 1348 rtc_tm->tm_mday = bcd2bin(rtc_tm->tm_mday); 1349 rtc_tm->tm_mon = bcd2bin(rtc_tm->tm_mon); 1350 rtc_tm->tm_year = bcd2bin(rtc_tm->tm_year); 1351 rtc_tm->tm_wday = bcd2bin(rtc_tm->tm_wday); 1352 } 1353 1354 #ifdef CONFIG_MACH_DECSTATION 1355 rtc_tm->tm_year += real_year - 72; 1356 #endif 1357 1358 /* 1359 * Account for differences between how the RTC uses the values 1360 * and how they are defined in a struct rtc_time; 1361 */ 1362 rtc_tm->tm_year += epoch - 1900; 1363 if (rtc_tm->tm_year <= 69) 1364 rtc_tm->tm_year += 100; 1365 1366 rtc_tm->tm_mon--; 1367 } 1368 1369 static void get_rtc_alm_time(struct rtc_time *alm_tm) 1370 { 1371 unsigned char ctrl; 1372 1373 /* 1374 * Only the values that we read from the RTC are set. That 1375 * means only tm_hour, tm_min, and tm_sec. 1376 */ 1377 spin_lock_irq(&rtc_lock); 1378 alm_tm->tm_sec = CMOS_READ(RTC_SECONDS_ALARM); 1379 alm_tm->tm_min = CMOS_READ(RTC_MINUTES_ALARM); 1380 alm_tm->tm_hour = CMOS_READ(RTC_HOURS_ALARM); 1381 ctrl = CMOS_READ(RTC_CONTROL); 1382 spin_unlock_irq(&rtc_lock); 1383 1384 if (!(ctrl & RTC_DM_BINARY) || RTC_ALWAYS_BCD) { 1385 alm_tm->tm_sec = bcd2bin(alm_tm->tm_sec); 1386 alm_tm->tm_min = bcd2bin(alm_tm->tm_min); 1387 alm_tm->tm_hour = bcd2bin(alm_tm->tm_hour); 1388 } 1389 } 1390 1391 #ifdef RTC_IRQ 1392 /* 1393 * Used to disable/enable interrupts for any one of UIE, AIE, PIE. 1394 * Rumour has it that if you frob the interrupt enable/disable 1395 * bits in RTC_CONTROL, you should read RTC_INTR_FLAGS, to 1396 * ensure you actually start getting interrupts. Probably for 1397 * compatibility with older/broken chipset RTC implementations. 1398 * We also clear out any old irq data after an ioctl() that 1399 * meddles with the interrupt enable/disable bits. 1400 */ 1401 1402 static void mask_rtc_irq_bit_locked(unsigned char bit) 1403 { 1404 unsigned char val; 1405 1406 if (hpet_mask_rtc_irq_bit(bit)) 1407 return; 1408 val = CMOS_READ(RTC_CONTROL); 1409 val &= ~bit; 1410 CMOS_WRITE(val, RTC_CONTROL); 1411 CMOS_READ(RTC_INTR_FLAGS); 1412 1413 rtc_irq_data = 0; 1414 } 1415 1416 static void set_rtc_irq_bit_locked(unsigned char bit) 1417 { 1418 unsigned char val; 1419 1420 if (hpet_set_rtc_irq_bit(bit)) 1421 return; 1422 val = CMOS_READ(RTC_CONTROL); 1423 val |= bit; 1424 CMOS_WRITE(val, RTC_CONTROL); 1425 CMOS_READ(RTC_INTR_FLAGS); 1426 1427 rtc_irq_data = 0; 1428 } 1429 #endif 1430 1431 MODULE_AUTHOR("Paul Gortmaker"); 1432 MODULE_LICENSE("GPL"); 1433 MODULE_ALIAS_MISCDEV(RTC_MINOR); 1434
This page was automatically generated by LXR 0.3.1. • Linux is a registered trademark of Linus Torvalds