forked from Imagelibrary/rtems
Patch from Eric Valette <valette@crf.canon.fr> so this will build
independently of a BSP.
This commit is contained in:
@@ -16,11 +16,11 @@ VPATH = @srcdir@
|
|||||||
PGM = ${ARCH}/clock.rel
|
PGM = ${ARCH}/clock.rel
|
||||||
|
|
||||||
# C source names, if any, go here -- minus the .c
|
# C source names, if any, go here -- minus the .c
|
||||||
C_PIECES = c_clock
|
C_PIECES = p_clock
|
||||||
C_FILES = $(C_PIECES:%=%.c)
|
C_FILES = $(C_PIECES:%=%.c)
|
||||||
C_O_FILES = $(C_PIECES:%=${ARCH}/%.o)
|
C_O_FILES = $(C_PIECES:%=${ARCH}/%.o)
|
||||||
|
|
||||||
H_FILES =
|
H_FILES =
|
||||||
|
|
||||||
SRCS = $(C_FILES) $(H_FILES)
|
SRCS = $(C_FILES) $(H_FILES)
|
||||||
OBJS = $(C_O_FILES)
|
OBJS = $(C_O_FILES)
|
||||||
@@ -61,11 +61,7 @@ CLOBBER_ADDITIONS +=
|
|||||||
${PGM}: ${SRCS} ${OBJS}
|
${PGM}: ${SRCS} ${OBJS}
|
||||||
$(make-rel)
|
$(make-rel)
|
||||||
|
|
||||||
preinstall:
|
all: ${ARCH} $(SRCS) $(PGM)
|
||||||
@$(mkinstalldirs) $(PROJECT_INCLUDE)/bsp
|
|
||||||
@$(INSTALL_CHANGE) -m 644 $(H_FILES) $(PROJECT_INCLUDE)/bsp
|
|
||||||
|
|
||||||
all: ${ARCH} $(SRCS) preinstall $(PGM)
|
|
||||||
|
|
||||||
# the .rel file built here will be put into libbsp.a by ../wrapup/Makefile
|
# the .rel file built here will be put into libbsp.a by ../wrapup/Makefile
|
||||||
install: all
|
install: all
|
||||||
|
|||||||
@@ -1,215 +0,0 @@
|
|||||||
/*
|
|
||||||
* 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-1997.
|
|
||||||
* On-Line Applications Research Corporation (OAR).
|
|
||||||
* Copyright assigned to U.S. Government, 1994.
|
|
||||||
*
|
|
||||||
* The license and distribution terms for this file may in
|
|
||||||
* the file LICENSE in this distribution or at
|
|
||||||
* http://www.OARcorp.com/rtems/license.html.
|
|
||||||
*
|
|
||||||
* Modified to support the MPC750.
|
|
||||||
* Modifications Copyright (c) 1999 Eric Valette valette@crf.canon.fr
|
|
||||||
*
|
|
||||||
* $Id$
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <bsp.h>
|
|
||||||
#include <bsp/irq.h>
|
|
||||||
#include <rtems/libio.h>
|
|
||||||
#include <stdlib.h> /* for atexit() */
|
|
||||||
#include <assert.h>
|
|
||||||
#include <libcpu/cpu.h>
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Clock ticks since initialization
|
|
||||||
*/
|
|
||||||
|
|
||||||
volatile rtems_unsigned32 Clock_driver_ticks;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* This is the value programmed into the count down timer.
|
|
||||||
*/
|
|
||||||
|
|
||||||
rtems_unsigned32 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(const rtems_irq_connect_data* unused)
|
|
||||||
{
|
|
||||||
if (BSP_Configuration.ticks_per_timeslice) {
|
|
||||||
/*
|
|
||||||
* Nothing to do as we cannot disable all interrupts and
|
|
||||||
* the decrementer interrupt enable is MSR_EE
|
|
||||||
*/
|
|
||||||
}
|
|
||||||
}
|
|
||||||
static void clockOn(const rtems_irq_connect_data* unused)
|
|
||||||
{
|
|
||||||
PPC_Set_decrementer( Clock_Decrementer_value );
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Clock_isr
|
|
||||||
*
|
|
||||||
* This is the clock tick interrupt handler.
|
|
||||||
*
|
|
||||||
* Input parameters:
|
|
||||||
* vector - vector number
|
|
||||||
*
|
|
||||||
* Output parameters: NONE
|
|
||||||
*
|
|
||||||
* Return values: NONE
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
void clockIsr()
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* The driver has seen another tick.
|
|
||||||
*/
|
|
||||||
|
|
||||||
PPC_Set_decrementer( Clock_Decrementer_value );
|
|
||||||
|
|
||||||
Clock_driver_ticks += 1;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Real Time Clock counter/timer is set to automatically reload.
|
|
||||||
*/
|
|
||||||
|
|
||||||
rtems_clock_tick();
|
|
||||||
}
|
|
||||||
|
|
||||||
int clockIsOn(const rtems_irq_connect_data* unused)
|
|
||||||
{
|
|
||||||
unsigned32 msr_value;
|
|
||||||
|
|
||||||
_CPU_MSR_GET( msr_value );
|
|
||||||
if (msr_value & MSR_EE) return 1;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static rtems_irq_connect_data clockIrqData = {BSP_DECREMENTER,
|
|
||||||
clockIsr,
|
|
||||||
clockOn,
|
|
||||||
clockOff,
|
|
||||||
clockIsOn};
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Clock_exit
|
|
||||||
*
|
|
||||||
* This routine allows the clock driver to exit by masking the interrupt and
|
|
||||||
* disabling the clock's counter.
|
|
||||||
*
|
|
||||||
* Input parameters: NONE
|
|
||||||
*
|
|
||||||
* Output parameters: NONE
|
|
||||||
*
|
|
||||||
* Return values: NONE
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
void Clock_exit( void )
|
|
||||||
{
|
|
||||||
if ( BSP_Configuration.ticks_per_timeslice ) {
|
|
||||||
BSP_remove_rtems_irq_handler (&clockIrqData);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Clock_initialize
|
|
||||||
*
|
|
||||||
* This routine initializes the clock driver.
|
|
||||||
*
|
|
||||||
* Input parameters:
|
|
||||||
* major - clock device major number
|
|
||||||
* minor - clock device minor number
|
|
||||||
* parg - pointer to optional device driver arguments
|
|
||||||
*
|
|
||||||
* Output parameters: NONE
|
|
||||||
*
|
|
||||||
* Return values:
|
|
||||||
* rtems_device_driver status code
|
|
||||||
*/
|
|
||||||
|
|
||||||
rtems_device_driver Clock_initialize(
|
|
||||||
rtems_device_major_number major,
|
|
||||||
rtems_device_minor_number minor,
|
|
||||||
void *pargp
|
|
||||||
)
|
|
||||||
{
|
|
||||||
Clock_Decrementer_value = (BSP_bus_frequency/4000)*
|
|
||||||
(BSP_Configuration.microseconds_per_tick/1000);
|
|
||||||
|
|
||||||
if (!BSP_install_rtems_irq_handler (&clockIrqData)) {
|
|
||||||
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 */
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Clock_control
|
|
||||||
*
|
|
||||||
* This routine is the clock device driver control entry point.
|
|
||||||
*
|
|
||||||
* Input parameters:
|
|
||||||
* major - clock device major number
|
|
||||||
* minor - clock device minor number
|
|
||||||
* parg - pointer to optional device driver arguments
|
|
||||||
*
|
|
||||||
* Output parameters: NONE
|
|
||||||
*
|
|
||||||
* Return values:
|
|
||||||
* rtems_device_driver status code
|
|
||||||
*/
|
|
||||||
|
|
||||||
rtems_device_driver Clock_control(
|
|
||||||
rtems_device_major_number major,
|
|
||||||
rtems_device_minor_number minor,
|
|
||||||
void *pargp
|
|
||||||
)
|
|
||||||
{
|
|
||||||
rtems_unsigned32 isrlevel;
|
|
||||||
rtems_libio_ioctl_args_t *args = pargp;
|
|
||||||
|
|
||||||
if (args == 0)
|
|
||||||
goto done;
|
|
||||||
|
|
||||||
Clock_Decrementer_value = (BSP_bus_frequency/4000)*
|
|
||||||
(BSP_Configuration.microseconds_per_tick/1000);
|
|
||||||
|
|
||||||
if (args->command == rtems_build_name('I', 'S', 'R', ' '))
|
|
||||||
clockIsr();
|
|
||||||
else if (args->command == rtems_build_name('N', 'E', 'W', ' '))
|
|
||||||
{
|
|
||||||
if (!BSP_install_rtems_irq_handler (&clockIrqData)) {
|
|
||||||
printk("Error installing clock interrupt handler!\n");
|
|
||||||
rtems_fatal_error_occurred(1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
done:
|
|
||||||
return RTEMS_SUCCESSFUL;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
37
c/src/lib/libbsp/powerpc/mcp750/clock/p_clock.c
Normal file
37
c/src/lib/libbsp/powerpc/mcp750/clock/p_clock.c
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
/*
|
||||||
|
* Clock Tick interrupt conexion code.
|
||||||
|
*
|
||||||
|
* COPYRIGHT (c) 1989-1997.
|
||||||
|
* On-Line Applications Research Corporation (OAR).
|
||||||
|
* Copyright assigned to U.S. Government, 1994.
|
||||||
|
*
|
||||||
|
* The license and distribution terms for this file may in
|
||||||
|
* the file LICENSE in this distribution or at
|
||||||
|
* http://www.OARcorp.com/rtems/license.html.
|
||||||
|
*
|
||||||
|
* Modified to support the MPC750.
|
||||||
|
* Modifications Copyright (c) 1999 Eric Valette valette@crf.canon.fr
|
||||||
|
*
|
||||||
|
* $Id$
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <bsp.h>
|
||||||
|
#include <bsp/irq.h>
|
||||||
|
#include <libcpu/c_clock.h>
|
||||||
|
|
||||||
|
static rtems_irq_connect_data clockIrqData = {BSP_DECREMENTER,
|
||||||
|
clockIsr,
|
||||||
|
(rtems_irq_enable)clockOn,
|
||||||
|
(rtems_irq_disable)clockOff,
|
||||||
|
(rtems_irq_is_enabled) clockIsOn};
|
||||||
|
|
||||||
|
|
||||||
|
int BSP_disconnect_clock_handler (void)
|
||||||
|
{
|
||||||
|
return BSP_remove_rtems_irq_handler (&clockIrqData);
|
||||||
|
}
|
||||||
|
|
||||||
|
int BSP_connect_clock_handler (void)
|
||||||
|
{
|
||||||
|
return BSP_install_rtems_irq_handler (&clockIrqData);
|
||||||
|
}
|
||||||
@@ -16,11 +16,11 @@ VPATH = @srcdir@
|
|||||||
PGM = ${ARCH}/clock.rel
|
PGM = ${ARCH}/clock.rel
|
||||||
|
|
||||||
# C source names, if any, go here -- minus the .c
|
# C source names, if any, go here -- minus the .c
|
||||||
C_PIECES = c_clock
|
C_PIECES = p_clock
|
||||||
C_FILES = $(C_PIECES:%=%.c)
|
C_FILES = $(C_PIECES:%=%.c)
|
||||||
C_O_FILES = $(C_PIECES:%=${ARCH}/%.o)
|
C_O_FILES = $(C_PIECES:%=${ARCH}/%.o)
|
||||||
|
|
||||||
H_FILES =
|
H_FILES =
|
||||||
|
|
||||||
SRCS = $(C_FILES) $(H_FILES)
|
SRCS = $(C_FILES) $(H_FILES)
|
||||||
OBJS = $(C_O_FILES)
|
OBJS = $(C_O_FILES)
|
||||||
@@ -61,11 +61,7 @@ CLOBBER_ADDITIONS +=
|
|||||||
${PGM}: ${SRCS} ${OBJS}
|
${PGM}: ${SRCS} ${OBJS}
|
||||||
$(make-rel)
|
$(make-rel)
|
||||||
|
|
||||||
preinstall:
|
all: ${ARCH} $(SRCS) $(PGM)
|
||||||
@$(mkinstalldirs) $(PROJECT_INCLUDE)/bsp
|
|
||||||
@$(INSTALL_CHANGE) -m 644 $(H_FILES) $(PROJECT_INCLUDE)/bsp
|
|
||||||
|
|
||||||
all: ${ARCH} $(SRCS) preinstall $(PGM)
|
|
||||||
|
|
||||||
# the .rel file built here will be put into libbsp.a by ../wrapup/Makefile
|
# the .rel file built here will be put into libbsp.a by ../wrapup/Makefile
|
||||||
install: all
|
install: all
|
||||||
|
|||||||
@@ -1,215 +0,0 @@
|
|||||||
/*
|
|
||||||
* 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-1997.
|
|
||||||
* On-Line Applications Research Corporation (OAR).
|
|
||||||
* Copyright assigned to U.S. Government, 1994.
|
|
||||||
*
|
|
||||||
* The license and distribution terms for this file may in
|
|
||||||
* the file LICENSE in this distribution or at
|
|
||||||
* http://www.OARcorp.com/rtems/license.html.
|
|
||||||
*
|
|
||||||
* Modified to support the MPC750.
|
|
||||||
* Modifications Copyright (c) 1999 Eric Valette valette@crf.canon.fr
|
|
||||||
*
|
|
||||||
* $Id$
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <bsp.h>
|
|
||||||
#include <bsp/irq.h>
|
|
||||||
#include <rtems/libio.h>
|
|
||||||
#include <stdlib.h> /* for atexit() */
|
|
||||||
#include <assert.h>
|
|
||||||
#include <libcpu/cpu.h>
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Clock ticks since initialization
|
|
||||||
*/
|
|
||||||
|
|
||||||
volatile rtems_unsigned32 Clock_driver_ticks;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* This is the value programmed into the count down timer.
|
|
||||||
*/
|
|
||||||
|
|
||||||
rtems_unsigned32 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(const rtems_irq_connect_data* unused)
|
|
||||||
{
|
|
||||||
if (BSP_Configuration.ticks_per_timeslice) {
|
|
||||||
/*
|
|
||||||
* Nothing to do as we cannot disable all interrupts and
|
|
||||||
* the decrementer interrupt enable is MSR_EE
|
|
||||||
*/
|
|
||||||
}
|
|
||||||
}
|
|
||||||
static void clockOn(const rtems_irq_connect_data* unused)
|
|
||||||
{
|
|
||||||
PPC_Set_decrementer( Clock_Decrementer_value );
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Clock_isr
|
|
||||||
*
|
|
||||||
* This is the clock tick interrupt handler.
|
|
||||||
*
|
|
||||||
* Input parameters:
|
|
||||||
* vector - vector number
|
|
||||||
*
|
|
||||||
* Output parameters: NONE
|
|
||||||
*
|
|
||||||
* Return values: NONE
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
void clockIsr()
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* The driver has seen another tick.
|
|
||||||
*/
|
|
||||||
|
|
||||||
PPC_Set_decrementer( Clock_Decrementer_value );
|
|
||||||
|
|
||||||
Clock_driver_ticks += 1;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Real Time Clock counter/timer is set to automatically reload.
|
|
||||||
*/
|
|
||||||
|
|
||||||
rtems_clock_tick();
|
|
||||||
}
|
|
||||||
|
|
||||||
int clockIsOn(const rtems_irq_connect_data* unused)
|
|
||||||
{
|
|
||||||
unsigned32 msr_value;
|
|
||||||
|
|
||||||
_CPU_MSR_GET( msr_value );
|
|
||||||
if (msr_value & MSR_EE) return 1;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static rtems_irq_connect_data clockIrqData = {BSP_DECREMENTER,
|
|
||||||
clockIsr,
|
|
||||||
clockOn,
|
|
||||||
clockOff,
|
|
||||||
clockIsOn};
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Clock_exit
|
|
||||||
*
|
|
||||||
* This routine allows the clock driver to exit by masking the interrupt and
|
|
||||||
* disabling the clock's counter.
|
|
||||||
*
|
|
||||||
* Input parameters: NONE
|
|
||||||
*
|
|
||||||
* Output parameters: NONE
|
|
||||||
*
|
|
||||||
* Return values: NONE
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
void Clock_exit( void )
|
|
||||||
{
|
|
||||||
if ( BSP_Configuration.ticks_per_timeslice ) {
|
|
||||||
BSP_remove_rtems_irq_handler (&clockIrqData);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Clock_initialize
|
|
||||||
*
|
|
||||||
* This routine initializes the clock driver.
|
|
||||||
*
|
|
||||||
* Input parameters:
|
|
||||||
* major - clock device major number
|
|
||||||
* minor - clock device minor number
|
|
||||||
* parg - pointer to optional device driver arguments
|
|
||||||
*
|
|
||||||
* Output parameters: NONE
|
|
||||||
*
|
|
||||||
* Return values:
|
|
||||||
* rtems_device_driver status code
|
|
||||||
*/
|
|
||||||
|
|
||||||
rtems_device_driver Clock_initialize(
|
|
||||||
rtems_device_major_number major,
|
|
||||||
rtems_device_minor_number minor,
|
|
||||||
void *pargp
|
|
||||||
)
|
|
||||||
{
|
|
||||||
Clock_Decrementer_value = (BSP_bus_frequency/4000)*
|
|
||||||
(BSP_Configuration.microseconds_per_tick/1000);
|
|
||||||
|
|
||||||
if (!BSP_install_rtems_irq_handler (&clockIrqData)) {
|
|
||||||
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 */
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Clock_control
|
|
||||||
*
|
|
||||||
* This routine is the clock device driver control entry point.
|
|
||||||
*
|
|
||||||
* Input parameters:
|
|
||||||
* major - clock device major number
|
|
||||||
* minor - clock device minor number
|
|
||||||
* parg - pointer to optional device driver arguments
|
|
||||||
*
|
|
||||||
* Output parameters: NONE
|
|
||||||
*
|
|
||||||
* Return values:
|
|
||||||
* rtems_device_driver status code
|
|
||||||
*/
|
|
||||||
|
|
||||||
rtems_device_driver Clock_control(
|
|
||||||
rtems_device_major_number major,
|
|
||||||
rtems_device_minor_number minor,
|
|
||||||
void *pargp
|
|
||||||
)
|
|
||||||
{
|
|
||||||
rtems_unsigned32 isrlevel;
|
|
||||||
rtems_libio_ioctl_args_t *args = pargp;
|
|
||||||
|
|
||||||
if (args == 0)
|
|
||||||
goto done;
|
|
||||||
|
|
||||||
Clock_Decrementer_value = (BSP_bus_frequency/4000)*
|
|
||||||
(BSP_Configuration.microseconds_per_tick/1000);
|
|
||||||
|
|
||||||
if (args->command == rtems_build_name('I', 'S', 'R', ' '))
|
|
||||||
clockIsr();
|
|
||||||
else if (args->command == rtems_build_name('N', 'E', 'W', ' '))
|
|
||||||
{
|
|
||||||
if (!BSP_install_rtems_irq_handler (&clockIrqData)) {
|
|
||||||
printk("Error installing clock interrupt handler!\n");
|
|
||||||
rtems_fatal_error_occurred(1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
done:
|
|
||||||
return RTEMS_SUCCESSFUL;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
37
c/src/lib/libbsp/powerpc/motorola_powerpc/clock/p_clock.c
Normal file
37
c/src/lib/libbsp/powerpc/motorola_powerpc/clock/p_clock.c
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
/*
|
||||||
|
* Clock Tick interrupt conexion code.
|
||||||
|
*
|
||||||
|
* COPYRIGHT (c) 1989-1997.
|
||||||
|
* On-Line Applications Research Corporation (OAR).
|
||||||
|
* Copyright assigned to U.S. Government, 1994.
|
||||||
|
*
|
||||||
|
* The license and distribution terms for this file may in
|
||||||
|
* the file LICENSE in this distribution or at
|
||||||
|
* http://www.OARcorp.com/rtems/license.html.
|
||||||
|
*
|
||||||
|
* Modified to support the MPC750.
|
||||||
|
* Modifications Copyright (c) 1999 Eric Valette valette@crf.canon.fr
|
||||||
|
*
|
||||||
|
* $Id$
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <bsp.h>
|
||||||
|
#include <bsp/irq.h>
|
||||||
|
#include <libcpu/c_clock.h>
|
||||||
|
|
||||||
|
static rtems_irq_connect_data clockIrqData = {BSP_DECREMENTER,
|
||||||
|
clockIsr,
|
||||||
|
(rtems_irq_enable)clockOn,
|
||||||
|
(rtems_irq_disable)clockOff,
|
||||||
|
(rtems_irq_is_enabled) clockIsOn};
|
||||||
|
|
||||||
|
|
||||||
|
int BSP_disconnect_clock_handler (void)
|
||||||
|
{
|
||||||
|
return BSP_remove_rtems_irq_handler (&clockIrqData);
|
||||||
|
}
|
||||||
|
|
||||||
|
int BSP_connect_clock_handler (void)
|
||||||
|
{
|
||||||
|
return BSP_install_rtems_irq_handler (&clockIrqData);
|
||||||
|
}
|
||||||
@@ -20,8 +20,7 @@ INSTALL_CHANGE = @INSTALL_CHANGE@
|
|||||||
|
|
||||||
# wrapup is the one that actually builds and installs the library
|
# wrapup is the one that actually builds and installs the library
|
||||||
# from the individual .rel files built in other directories
|
# from the individual .rel files built in other directories
|
||||||
# SUB_DIRS = exceptions mmu clock wrapup
|
SUB_DIRS = exceptions mmu clock wrapup
|
||||||
SUB_DIRS = exceptions mmu wrapup
|
|
||||||
|
|
||||||
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
|
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
|
||||||
cd $(top_builddir) \
|
cd $(top_builddir) \
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ C_PIECES = c_clock
|
|||||||
C_FILES = $(C_PIECES:%=%.c)
|
C_FILES = $(C_PIECES:%=%.c)
|
||||||
C_O_FILES = $(C_PIECES:%=${ARCH}/%.o)
|
C_O_FILES = $(C_PIECES:%=${ARCH}/%.o)
|
||||||
|
|
||||||
H_FILES =
|
H_FILES = $(srcdir)/c_clock.h
|
||||||
|
|
||||||
# Assembly source names, if any, go here -- minus the .S
|
# Assembly source names, if any, go here -- minus the .S
|
||||||
S_PIECES =
|
S_PIECES =
|
||||||
@@ -55,7 +55,10 @@ LDFLAGS +=
|
|||||||
CLEAN_ADDITIONS +=
|
CLEAN_ADDITIONS +=
|
||||||
CLOBBER_ADDITIONS +=
|
CLOBBER_ADDITIONS +=
|
||||||
|
|
||||||
all: ${ARCH} $(SRCS) $(OBJS)
|
all: ${ARCH} $(SRCS) preinstall $(OBJS)
|
||||||
|
|
||||||
|
preinstall: $(INSTALLDIRS) $(H_FILES)
|
||||||
|
@$(INSTALL_CHANGE) -m 644 $(H_FILES) $(PROJECT_INCLUDE)/libcpu
|
||||||
|
|
||||||
# the .rel file built here will be put into libbsp.a by ../wrapup/Makefile
|
# the .rel file built here will be put into libbsp.a by ../wrapup/Makefile
|
||||||
install: all
|
install: all
|
||||||
|
|||||||
@@ -20,12 +20,12 @@
|
|||||||
* $Id$
|
* $Id$
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <bsp.h>
|
#include <rtems.h>
|
||||||
#include <bsp/irq.h>
|
|
||||||
#include <rtems/libio.h>
|
#include <rtems/libio.h>
|
||||||
#include <stdlib.h> /* for atexit() */
|
#include <stdlib.h> /* for atexit() */
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
#include <libcpu/cpu.h>
|
#include <libcpu/cpu.h>
|
||||||
|
#include <libcpu/c_clock.h>
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Clock ticks since initialization
|
* Clock ticks since initialization
|
||||||
@@ -46,7 +46,7 @@ rtems_unsigned32 Clock_Decrementer_value;
|
|||||||
rtems_device_major_number rtems_clock_major = ~0;
|
rtems_device_major_number rtems_clock_major = ~0;
|
||||||
rtems_device_minor_number rtems_clock_minor;
|
rtems_device_minor_number rtems_clock_minor;
|
||||||
|
|
||||||
void clockOff(const rtems_irq_connect_data* unused)
|
void clockOff(void* unused)
|
||||||
{
|
{
|
||||||
if (BSP_Configuration.ticks_per_timeslice) {
|
if (BSP_Configuration.ticks_per_timeslice) {
|
||||||
/*
|
/*
|
||||||
@@ -55,7 +55,7 @@ void clockOff(const rtems_irq_connect_data* unused)
|
|||||||
*/
|
*/
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
static void clockOn(const rtems_irq_connect_data* unused)
|
void clockOn(void* unused)
|
||||||
{
|
{
|
||||||
PPC_Set_decrementer( Clock_Decrementer_value );
|
PPC_Set_decrementer( Clock_Decrementer_value );
|
||||||
}
|
}
|
||||||
@@ -90,7 +90,7 @@ void clockIsr()
|
|||||||
rtems_clock_tick();
|
rtems_clock_tick();
|
||||||
}
|
}
|
||||||
|
|
||||||
int clockIsOn(const rtems_irq_connect_data* unused)
|
int clockIsOn(void* unused)
|
||||||
{
|
{
|
||||||
unsigned32 msr_value;
|
unsigned32 msr_value;
|
||||||
|
|
||||||
@@ -99,12 +99,6 @@ int clockIsOn(const rtems_irq_connect_data* unused)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static rtems_irq_connect_data clockIrqData = {BSP_DECREMENTER,
|
|
||||||
clockIsr,
|
|
||||||
clockOn,
|
|
||||||
clockOff,
|
|
||||||
clockIsOn};
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Clock_exit
|
* Clock_exit
|
||||||
@@ -123,7 +117,7 @@ static rtems_irq_connect_data clockIrqData = {BSP_DECREMENTER,
|
|||||||
void Clock_exit( void )
|
void Clock_exit( void )
|
||||||
{
|
{
|
||||||
if ( BSP_Configuration.ticks_per_timeslice ) {
|
if ( BSP_Configuration.ticks_per_timeslice ) {
|
||||||
BSP_remove_rtems_irq_handler (&clockIrqData);
|
(void) BSP_disconnect_clock_handler ();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -152,7 +146,7 @@ rtems_device_driver Clock_initialize(
|
|||||||
Clock_Decrementer_value = (BSP_bus_frequency/4000)*
|
Clock_Decrementer_value = (BSP_bus_frequency/4000)*
|
||||||
(BSP_Configuration.microseconds_per_tick/1000);
|
(BSP_Configuration.microseconds_per_tick/1000);
|
||||||
|
|
||||||
if (!BSP_install_rtems_irq_handler (&clockIrqData)) {
|
if (!BSP_connect_clock_handler ()) {
|
||||||
printk("Unable to initialize system clock\n");
|
printk("Unable to initialize system clock\n");
|
||||||
rtems_fatal_error_occurred(1);
|
rtems_fatal_error_occurred(1);
|
||||||
}
|
}
|
||||||
@@ -186,7 +180,6 @@ rtems_device_driver Clock_control(
|
|||||||
void *pargp
|
void *pargp
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
rtems_unsigned32 isrlevel;
|
|
||||||
rtems_libio_ioctl_args_t *args = pargp;
|
rtems_libio_ioctl_args_t *args = pargp;
|
||||||
|
|
||||||
if (args == 0)
|
if (args == 0)
|
||||||
@@ -199,7 +192,7 @@ rtems_device_driver Clock_control(
|
|||||||
clockIsr();
|
clockIsr();
|
||||||
else if (args->command == rtems_build_name('N', 'E', 'W', ' '))
|
else if (args->command == rtems_build_name('N', 'E', 'W', ' '))
|
||||||
{
|
{
|
||||||
if (!BSP_install_rtems_irq_handler (&clockIrqData)) {
|
if (!BSP_connect_clock_handler ()) {
|
||||||
printk("Error installing clock interrupt handler!\n");
|
printk("Error installing clock interrupt handler!\n");
|
||||||
rtems_fatal_error_occurred(1);
|
rtems_fatal_error_occurred(1);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user