diff options
Diffstat (limited to 'c/src/lib/libcpu/powerpc/mpc860/clock/clock.c')
-rw-r--r-- | c/src/lib/libcpu/powerpc/mpc860/clock/clock.c | 179 |
1 files changed, 0 insertions, 179 deletions
diff --git a/c/src/lib/libcpu/powerpc/mpc860/clock/clock.c b/c/src/lib/libcpu/powerpc/mpc860/clock/clock.c deleted file mode 100644 index 73a586aa6a..0000000000 --- a/c/src/lib/libcpu/powerpc/mpc860/clock/clock.c +++ /dev/null @@ -1,179 +0,0 @@ -/* clock.c - * - * This routine initializes the PIT on the MPC860. - * The tick frequency is specified by the bsp. - * - * Author: Jay Monkman (jmonkman@frasca.com) - * Copyright (C) 1998 by Frasca International, Inc. - * - * Derived from c/src/lib/libcpu/ppc/ppc403/clock/clock.c: - * - * Author: Andrew Bray <andy@i-cubed.co.uk> - * - * COPYRIGHT (c) 1995 by i-cubed ltd. - * - * To anyone who acknowledges that this file is provided "AS IS" - * without any express or implied warranty: - * permission to use, copy, modify, and distribute this file - * for any purpose is hereby granted without fee, provided that - * the above copyright notice and this notice appears in all - * copies, and that the name of i-cubed limited not be used in - * advertising or publicity pertaining to distribution of the - * software without specific, written prior permission. - * i-cubed limited makes no representations about the suitability - * of this software for any purpose. - * - * Derived from c/src/lib/libcpu/hppa1_1/clock/clock.c: - * - * COPYRIGHT (c) 1989-1999. - * On-Line Applications Research Corporation (OAR). - * - * The license and distribution terms for this file may be - * found in the file LICENSE in this distribution or at - * http://www.OARcorp.com/rtems/license.html. - * - * $Id$ - */ - -#include <rtems.h> -#include <clockdrv.h> -#include <rtems/libio.h> - -#include <stdlib.h> /* for atexit() */ -#include <mpc860.h> - -volatile rtems_unsigned32 Clock_driver_ticks; -extern volatile m860_t m860; - -void Clock_exit( void ); - -/* - * These are set by clock driver during its init - */ - -rtems_device_major_number rtems_clock_major = ~0; -rtems_device_minor_number rtems_clock_minor; - -/* - * ISR Handler - */ -rtems_isr Clock_isr(rtems_vector_number vector) -{ - m860.piscr |= M860_PISCR_PS; - Clock_driver_ticks++; - rtems_clock_tick(); -} - -void Install_clock(rtems_isr_entry clock_isr) -{ - rtems_isr_entry previous_isr; - rtems_unsigned32 pit_value; - - Clock_driver_ticks = 0; - - pit_value = rtems_configuration_get_microseconds_per_tick() / - rtems_cpu_configuration_get_clicks_per_usec(); - if (pit_value == 0) { - pit_value = 0xffff; - } else { - pit_value--; - } - - if (pit_value > 0xffff) { /* pit is only 16 bits long */ - rtems_fatal_error_occurred(-1); - } - - /* - * initialize the interval here - * First tick is set to right amount of time in the future - * Future ticks will be incremented over last value set - * in order to provide consistent clicks in the face of - * interrupt overhead - */ - - rtems_interrupt_catch(clock_isr, PPC_IRQ_LVL0, &previous_isr); - - m860.sccr &= ~(1<<24); - m860.pitc = pit_value; - - /* set PIT irq level, enable PIT, PIT interrupts */ - /* and clear int. status */ - m860.piscr = M860_PISCR_PIRQ(0) | - M860_PISCR_PTE | M860_PISCR_PS | M860_PISCR_PIE; - - m860.simask |= M860_SIMASK_LVM0; - atexit(Clock_exit); -} - -void -ReInstall_clock(rtems_isr_entry new_clock_isr) -{ - rtems_isr_entry previous_isr; - rtems_unsigned32 isrlevel = 0; - - rtems_interrupt_disable(isrlevel); - - rtems_interrupt_catch(new_clock_isr, PPC_IRQ_LVL0, &previous_isr); - - rtems_interrupt_enable(isrlevel); -} - - -/* - * Called via atexit() - * Remove the clock interrupt handler by setting handler to NULL - */ -void -Clock_exit(void) -{ - /* disable PIT and PIT interrupts */ - m860.piscr &= ~(M860_PISCR_PTE | M860_PISCR_PIE); - - (void) set_vector(0, PPC_IRQ_LVL0, 1); -} - -rtems_device_driver Clock_initialize( - rtems_device_major_number major, - rtems_device_minor_number minor, - void *pargp -) -{ - Install_clock( Clock_isr ); - - /* - * make major/minor avail to others such as shared memory driver - */ - - rtems_clock_major = major; - rtems_clock_minor = minor; - - return RTEMS_SUCCESSFUL; -} - -rtems_device_driver Clock_control( - rtems_device_major_number major, - rtems_device_minor_number minor, - void *pargp -) -{ - rtems_libio_ioctl_args_t *args = pargp; - - if (args == 0) - goto done; - - /* - * This is hokey, but until we get a defined interface - * to do this, it will just be this simple... - */ - - if (args->command == rtems_build_name('I', 'S', 'R', ' ')) { - Clock_isr(PPC_IRQ_LVL0); - } - else if (args->command == rtems_build_name('N', 'E', 'W', ' ')) { - ReInstall_clock(args->buffer); - } - - done: - return RTEMS_SUCCESSFUL; -} - |