From 1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 Mon Sep 17 00:00:00 2001 From: Linus Torvalds Date: Sat, 16 Apr 2005 15:20:36 -0700 Subject: Linux-2.6.12-rc2 Initial git repository build. I'm not bothering with the full history, even though we have it. We can create a separate "historical" git archive of that later if we want to, and in the meantime it's about 3.2GB when imported into git - space that would just make the early git days unnecessarily complicated, when we don't have a lot of good infrastructure for it. Let it rip! --- arch/m68k/hp300/time.c | 78 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 arch/m68k/hp300/time.c (limited to 'arch/m68k/hp300/time.c') diff --git a/arch/m68k/hp300/time.c b/arch/m68k/hp300/time.c new file mode 100644 index 000000000000..8da5b1b31e61 --- /dev/null +++ b/arch/m68k/hp300/time.c @@ -0,0 +1,78 @@ +/* + * linux/arch/m68k/hp300/time.c + * + * Copyright (C) 1998 Philip Blundell + * + * This file contains the HP300-specific time handling code. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "ints.h" + +/* Clock hardware definitions */ + +#define CLOCKBASE 0xf05f8000 + +#define CLKCR1 0x1 +#define CLKCR2 0x3 +#define CLKCR3 CLKCR1 +#define CLKSR CLKCR2 +#define CLKMSB1 0x5 +#define CLKMSB2 0x9 +#define CLKMSB3 0xD + +/* This is for machines which generate the exact clock. */ +#define USECS_PER_JIFFY (1000000/HZ) + +#define INTVAL ((10000 / 4) - 1) + +static irqreturn_t hp300_tick(int irq, void *dev_id, struct pt_regs *regs) +{ + unsigned long tmp; + irqreturn_t (*vector)(int, void *, struct pt_regs *) = dev_id; + in_8(CLOCKBASE + CLKSR); + asm volatile ("movpw %1@(5),%0" : "=d" (tmp) : "a" (CLOCKBASE)); + /* Turn off the network and SCSI leds */ + blinken_leds(0, 0xe0); + return vector(irq, NULL, regs); +} + +unsigned long hp300_gettimeoffset(void) +{ + /* Read current timer 1 value */ + unsigned char lsb, msb1, msb2; + unsigned short ticks; + + msb1 = in_8(CLOCKBASE + 5); + lsb = in_8(CLOCKBASE + 7); + msb2 = in_8(CLOCKBASE + 5); + if (msb1 != msb2) + /* A carry happened while we were reading. Read it again */ + lsb = in_8(CLOCKBASE + 7); + ticks = INTVAL - ((msb2 << 8) | lsb); + return (USECS_PER_JIFFY * ticks) / INTVAL; +} + +void __init hp300_sched_init(irqreturn_t (*vector)(int, void *, struct pt_regs *)) +{ + out_8(CLOCKBASE + CLKCR2, 0x1); /* select CR1 */ + out_8(CLOCKBASE + CLKCR1, 0x1); /* reset */ + + asm volatile(" movpw %0,%1@(5)" : : "d" (INTVAL), "a" (CLOCKBASE)); + + cpu_request_irq(6, hp300_tick, IRQ_FLG_STD, "timer tick", vector); + + out_8(CLOCKBASE + CLKCR2, 0x1); /* select CR1 */ + out_8(CLOCKBASE + CLKCR1, 0x40); /* enable irq */ +} -- cgit v1.2.3-58-ga151