time.c
上传用户:jlfgdled
上传日期:2013-04-10
资源大小:33168k
文件大小:3k
源码类别:

Linux/Unix编程

开发平台:

Unix_Linux

  1. /*
  2.  * FILE NAME
  3.  * arch/mips/vr41xx/common/time.c
  4.  *
  5.  * BRIEF MODULE DESCRIPTION
  6.  * Timer routines for the NEC VR4100 series.
  7.  *
  8.  * Author: Yoichi Yuasa
  9.  *         yyuasa@mvista.com or source@mvista.com
  10.  *
  11.  * Copyright 2001,2002 MontaVista Software Inc.
  12.  *
  13.  *  This program is free software; you can redistribute it and/or modify it
  14.  *  under the terms of the GNU General Public License as published by the
  15.  *  Free Software Foundation; either version 2 of the License, or (at your
  16.  *  option) any later version.
  17.  *
  18.  *  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
  19.  *  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  20.  *  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
  21.  *  IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
  22.  *  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
  23.  *  BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
  24.  *  OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  25.  *  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
  26.  *  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
  27.  *  USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  28.  *
  29.  *  You should have received a copy of the GNU General Public License along
  30.  *  with this program; if not, write to the Free Software Foundation, Inc.,
  31.  *  675 Mass Ave, Cambridge, MA 02139, USA.
  32.  */
  33. /*
  34.  * Changes:
  35.  *  MontaVista Software Inc. <yyuasa@mvista.com> or <source@mvista.com>
  36.  *  - Added support for NEC VR4100 series RTC Unit.
  37.  *
  38.  *  MontaVista Software Inc. <yyuasa@mvista.com> or <source@mvista.com>
  39.  *  - New creation, NEC VR4100 series are supported.
  40.  */
  41. #include <linux/config.h>
  42. #include <linux/interrupt.h>
  43. #include <linux/irq.h>
  44. #include <linux/types.h>
  45. #include <asm/cpu.h>
  46. #include <asm/io.h>
  47. #include <asm/mipsregs.h>
  48. #include <asm/param.h>
  49. #include <asm/time.h>
  50. #define MIPS_COUNTER_TIMER_IRQ 7
  51. #define VR4111_ETIMELREG KSEG1ADDR(0x0b0000c0)
  52. #define VR4122_ETIMELREG KSEG1ADDR(0x0f000100)
  53. u32 vr41xx_rtc_base = 0;
  54. #ifdef CONFIG_VR41XX_RTC
  55. extern unsigned long vr41xx_rtc_get_time(void);
  56. extern int vr41xx_rtc_set_time(unsigned long sec);
  57. #endif
  58. void vr41xx_time_init(void)
  59. {
  60. switch (mips_cpu.cputype) {
  61. case CPU_VR4111:
  62. case CPU_VR4121:
  63. vr41xx_rtc_base = VR4111_ETIMELREG;
  64. break;
  65. case CPU_VR4122:
  66. case CPU_VR4131:
  67.                 vr41xx_rtc_base = VR4122_ETIMELREG;
  68.                 break;
  69.         default:
  70.                 panic("Unexpected CPU of NEC VR4100 series");
  71.                 break;
  72.         }
  73. #ifdef CONFIG_VR41XX_RTC
  74.         rtc_get_time = vr41xx_rtc_get_time;
  75.         rtc_set_time = vr41xx_rtc_set_time;
  76. #endif
  77. }
  78. void vr41xx_timer_setup(struct irqaction *irq)
  79. {
  80. u32 count;
  81. setup_irq(MIPS_COUNTER_TIMER_IRQ, irq);
  82. count = read_32bit_cp0_register(CP0_COUNT);
  83. write_32bit_cp0_register (CP0_COMPARE, count + (mips_counter_frequency / HZ));
  84. }