--- c/src/lib/libcpu/powerpc/mpc6xx/clock/c_clock.c | 89 +++++++++++-------------- 1 file changed, 39 insertions(+), 50 deletions(-)
diff --git a/c/src/lib/libcpu/powerpc/mpc6xx/clock/c_clock.c b/c/src/lib/libcpu/powerpc/mpc6xx/clock/c_clock.c index ba6d269..75ef38b 100644 --- a/c/src/lib/libcpu/powerpc/mpc6xx/clock/c_clock.c +++ b/c/src/lib/libcpu/powerpc/mpc6xx/clock/c_clock.c @@ -1,11 +1,13 @@ -/* - * Clock Tick Device Driver +/** + * @brief Clock Tick Device Driver * * This routine utilizes the Decrementer Register common to the PPC family. * * The tick frequency is directly programmed to the configured number of * microseconds per tick. - * + */ + +/* * COPYRIGHT (c) 1989-2007. * On-Line Applications Research Corporation (OAR). * @@ -17,9 +19,9 @@ * Modifications Copyright (c) 1999 Eric Valette vale...@crf.canon.fr */ -#include <rtems/system.h> #include <rtems.h> #include <rtems/libio.h> +#include <rtems/clockdrv.h> #include <stdlib.h> /* for atexit() */ #include <assert.h> #include <libcpu/c_clock.h> @@ -39,41 +41,32 @@ extern int BSP_connect_clock_handler (void); /* * Clock ticks since initialization */ - volatile uint32_t Clock_driver_ticks; /* * This is the value programmed into the count down timer. */ - uint32_t Clock_Decrementer_value; -/* - * These are set by clock driver during its init - */ - -rtems_device_major_number rtems_clock_major = ~0; -rtems_device_minor_number rtems_clock_minor; - void clockOff(void* unused) { -rtems_interrupt_level l; + rtems_interrupt_level l; if ( ppc_cpu_is_bookE() ) { rtems_interrupt_disable(l); _write_BOOKE_TCR(_read_BOOKE_TCR() & ~BOOKE_TCR_DIE); rtems_interrupt_enable(l); } else { - /* - * Nothing to do as we cannot disable all interrupts and - * the decrementer interrupt enable is MSR_EE - */ + /* + * Nothing to do as we cannot disable all interrupts and + * the decrementer interrupt enable is MSR_EE + */ } } void clockOn(void* unused) { -rtems_interrupt_level l; + rtems_interrupt_level l; PPC_Set_decrementer( Clock_Decrementer_value ); @@ -94,7 +87,6 @@ rtems_interrupt_level l; static void clockHandler(void) { - #if (CLOCK_DRIVER_USE_FAST_IDLE == 1) do { rtems_clock_tick(); @@ -126,25 +118,28 @@ static void (*clock_handler)(void); */ void clockIsr(void *unused) { -int decr; + int decr; + /* * The driver has seen another tick. */ do { - register uint32_t flags; - rtems_interrupt_disable(flags); - __asm__ volatile ( - "mfdec %0; add %0, %0, %1; mtdec %0" - : "=&r"(decr) - : "r"(Clock_Decrementer_value)); - rtems_interrupt_enable(flags); - - Clock_driver_ticks += 1; - - /* - * Real Time Clock counter/timer is set to automatically reload. - */ - clock_handler(); + register uint32_t flags; + + rtems_interrupt_disable(flags); + __asm__ volatile ( + "mfdec %0; add %0, %0, %1; mtdec %0" + : "=&r"(decr) + : "r"(Clock_Decrementer_value) + ); + rtems_interrupt_enable(flags); + + Clock_driver_ticks += 1; + + /* + * Real Time Clock counter/timer is set to automatically reload. + */ + clock_handler(); } while ( decr < 0 ); } @@ -178,12 +173,11 @@ void clockIsrBookE(void *unused) * Real Time Clock counter/timer is set to automatically reload. */ clock_handler(); - } int clockIsOn(void* unused) { -uint32_t msr_value; + uint32_t msr_value; _CPU_MSR_GET( msr_value ); @@ -209,13 +203,12 @@ uint32_t msr_value; * Return values: NONE * */ - void Clock_exit( void ) { (void) BSP_disconnect_clock_handler (); } -uint32_t Clock_driver_nanoseconds_since_last_tick(void) +static uint32_t Clock_driver_nanoseconds_since_last_tick(void) { uint32_t clicks, tmp; @@ -252,7 +245,7 @@ rtems_device_driver Clock_initialize( void *pargp ) { -rtems_interrupt_level l,tcr; + rtems_interrupt_level l,tcr; Clock_Decrementer_value = (BSP_bus_frequency/BSP_time_base_divisor)* (rtems_configuration_get_microseconds_per_tick()/1000); @@ -269,10 +262,10 @@ rtems_interrupt_level l,tcr; rtems_interrupt_disable(l); - tcr = _read_BOOKE_TCR(); - tcr |= BOOKE_TCR_ARE; - tcr &= ~BOOKE_TCR_DIE; - _write_BOOKE_TCR(tcr); + tcr = _read_BOOKE_TCR(); + tcr |= BOOKE_TCR_ARE; + tcr &= ~BOOKE_TCR_DIE; + _write_BOOKE_TCR(tcr); rtems_interrupt_enable(l); @@ -285,22 +278,18 @@ rtems_interrupt_level l,tcr; Clock_driver_nanoseconds_since_last_tick ); - /* if a decrementer exception was pending, it is cleared by + /* + * If a decrementer exception was pending, it is cleared by * executing the default (nop) handler at this point; * The next exception will then be taken by our clock handler. * Clock handler installation initializes the decrementer to * the correct value. */ - clock_handler = clockHandler; if (!BSP_connect_clock_handler ()) { printk("Unable to initialize system clock\n"); rtems_fatal_error_occurred(1); } - /* make major/minor avail to others such as shared memory driver */ - - rtems_clock_major = major; - rtems_clock_minor = minor; return RTEMS_SUCCESSFUL; } /* Clock_initialize */ -- 1.9.3 _______________________________________________ devel mailing list devel@rtems.org http://lists.rtems.org/mailman/listinfo/devel