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