root/arch/m68k/sun3x/time.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. sun3x_hwclk
  2. sun3x_timer_tick
  3. sun3x_sched_init

   1 // SPDX-License-Identifier: GPL-2.0
   2 /*
   3  *  linux/arch/m68k/sun3x/time.c
   4  *
   5  *  Sun3x-specific time handling
   6  */
   7 
   8 #include <linux/types.h>
   9 #include <linux/kd.h>
  10 #include <linux/init.h>
  11 #include <linux/sched.h>
  12 #include <linux/kernel_stat.h>
  13 #include <linux/interrupt.h>
  14 #include <linux/rtc.h>
  15 #include <linux/bcd.h>
  16 
  17 #include <asm/irq.h>
  18 #include <asm/io.h>
  19 #include <asm/machdep.h>
  20 #include <asm/traps.h>
  21 #include <asm/sun3x.h>
  22 #include <asm/sun3ints.h>
  23 
  24 #include "time.h"
  25 
  26 #define M_CONTROL 0xf8
  27 #define M_SEC     0xf9
  28 #define M_MIN     0xfa
  29 #define M_HOUR    0xfb
  30 #define M_DAY     0xfc
  31 #define M_DATE    0xfd
  32 #define M_MONTH   0xfe
  33 #define M_YEAR    0xff
  34 
  35 #define C_WRITE   0x80
  36 #define C_READ    0x40
  37 #define C_SIGN    0x20
  38 #define C_CALIB   0x1f
  39 
  40 int sun3x_hwclk(int set, struct rtc_time *t)
  41 {
  42         volatile struct mostek_dt *h =
  43                 (struct mostek_dt *)(SUN3X_EEPROM+M_CONTROL);
  44         unsigned long flags;
  45 
  46         local_irq_save(flags);
  47 
  48         if(set) {
  49                 h->csr |= C_WRITE;
  50                 h->sec = bin2bcd(t->tm_sec);
  51                 h->min = bin2bcd(t->tm_min);
  52                 h->hour = bin2bcd(t->tm_hour);
  53                 h->wday = bin2bcd(t->tm_wday);
  54                 h->mday = bin2bcd(t->tm_mday);
  55                 h->month = bin2bcd(t->tm_mon + 1);
  56                 h->year = bin2bcd(t->tm_year % 100);
  57                 h->csr &= ~C_WRITE;
  58         } else {
  59                 h->csr |= C_READ;
  60                 t->tm_sec = bcd2bin(h->sec);
  61                 t->tm_min = bcd2bin(h->min);
  62                 t->tm_hour = bcd2bin(h->hour);
  63                 t->tm_wday = bcd2bin(h->wday);
  64                 t->tm_mday = bcd2bin(h->mday);
  65                 t->tm_mon = bcd2bin(h->month) - 1;
  66                 t->tm_year = bcd2bin(h->year);
  67                 h->csr &= ~C_READ;
  68                 if (t->tm_year < 70)
  69                         t->tm_year += 100;
  70         }
  71 
  72         local_irq_restore(flags);
  73 
  74         return 0;
  75 }
  76 
  77 #if 0
  78 static irqreturn_t sun3x_timer_tick(int irq, void *dev_id)
  79 {
  80         irq_handler_t timer_routine = dev_id;
  81         unsigned long flags;
  82 
  83         local_irq_save(flags);
  84         /* Clear the pending interrupt - pulse the enable line low */
  85         disable_irq(5);
  86         enable_irq(5);
  87         timer_routine(0, NULL);
  88         local_irq_restore(flags);
  89 
  90         return IRQ_HANDLED;
  91 }
  92 #endif
  93 
  94 void __init sun3x_sched_init(irq_handler_t vector)
  95 {
  96 
  97         sun3_disable_interrupts();
  98 
  99 
 100     /* Pulse enable low to get the clock started */
 101         sun3_disable_irq(5);
 102         sun3_enable_irq(5);
 103         sun3_enable_interrupts();
 104 }

/* [<][>][^][v][top][bottom][index][help] */