diff options
author | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2019-12-05 19:22:33 +0100 |
---|---|---|
committer | Sebastian Huber <sebastian.huber@embedded-brains.de> | 2019-12-11 09:05:07 +0100 |
commit | bb99cd0d83ae32e1f222bf2c8235a8f95128815d (patch) | |
tree | 345350623f1913eb19e785bf671e02cc114cdfe0 | |
parent | clock: Remove Clock_exit() from API (diff) | |
download | rtems-bb99cd0d83ae32e1f222bf2c8235a8f95128815d.tar.bz2 |
clock: Simplify driver initialization
Use a system initialization handler instead of a legacy IO driver.
Update #3834.
23 files changed, 57 insertions, 208 deletions
diff --git a/bsps/bfin/shared/dev/clock.c b/bsps/bfin/shared/dev/clock.c index 75cd139e52..4d500f6ccb 100644 --- a/bsps/bfin/shared/dev/clock.c +++ b/bsps/bfin/shared/dev/clock.c @@ -53,16 +53,7 @@ static void Clock_exit(void) *(uint32_t volatile *) TCNTL = 0; } -/* - * Clock_initialize - * - * This routine initializes the clock driver. - */ -rtems_device_driver Clock_initialize( - rtems_device_major_number major, - rtems_device_minor_number minor, - void *pargp -) +void _Clock_Initialize( void ) { Clock_driver_ticks = 0; @@ -75,6 +66,4 @@ rtems_device_driver Clock_initialize( *(uint32_t volatile *) TCNTL = TCNTL_TMPWR | TCNTL_TAUTORLD | TCNTL_TMREN; atexit(Clock_exit); - - return RTEMS_SUCCESSFUL; } diff --git a/bsps/m68k/csb360/dev/ckinit.c b/bsps/m68k/csb360/dev/ckinit.c index 839a2748ef..ef0e891cf2 100644 --- a/bsps/m68k/csb360/dev/ckinit.c +++ b/bsps/m68k/csb360/dev/ckinit.c @@ -112,14 +112,7 @@ Install_clock(rtems_isr_entry clock_isr) atexit(Clock_exit); } -rtems_device_driver -Clock_initialize( - rtems_device_major_number major, - rtems_device_minor_number minor, - void *pargp -) +void _Clock_Initialize( void ) { Install_clock (Clock_isr); - - return RTEMS_SUCCESSFUL; } diff --git a/bsps/m68k/gen68340/clock/ckinit.c b/bsps/m68k/gen68340/clock/ckinit.c index 7dfe85d422..adbb14a399 100644 --- a/bsps/m68k/gen68340/clock/ckinit.c +++ b/bsps/m68k/gen68340/clock/ckinit.c @@ -91,14 +91,7 @@ Install_clock (rtems_isr_entry clock_isr) atexit (Clock_exit); } -rtems_device_driver -Clock_initialize( - rtems_device_major_number major, - rtems_device_minor_number minor, - void *pargp -) +void _Clock_Initialize( void ) { Install_clock (Clock_isr); - - return RTEMS_SUCCESSFUL; } diff --git a/bsps/m68k/mcf5206elite/dev/ckinit.c b/bsps/m68k/mcf5206elite/dev/ckinit.c index 6cda45ca05..bbd4f20f46 100644 --- a/bsps/m68k/mcf5206elite/dev/ckinit.c +++ b/bsps/m68k/mcf5206elite/dev/ckinit.c @@ -102,12 +102,7 @@ Install_clock(rtems_isr_entry clock_isr) atexit(Clock_exit); } -rtems_device_driver -Clock_initialize(rtems_device_major_number major, - rtems_device_minor_number minor, - void *pargp) +void _Clock_Initialize( void ) { Install_clock (Clock_isr); - - return RTEMS_SUCCESSFUL; } diff --git a/bsps/m68k/mrm332/clock/ckinit.c b/bsps/m68k/mrm332/clock/ckinit.c index cb7595f955..2b74ed6988 100644 --- a/bsps/m68k/mrm332/clock/ckinit.c +++ b/bsps/m68k/mrm332/clock/ckinit.c @@ -63,13 +63,7 @@ void Clock_exit( void ) /* do not restore old vector */ } -rtems_device_driver Clock_initialize( - rtems_device_major_number major, - rtems_device_minor_number minor, - void *pargp -) +void _Clock_Initialize( void ) { Install_clock( Clock_isr ); - - return RTEMS_SUCCESSFUL; } diff --git a/bsps/m68k/mvme147/clock/ckinit.c b/bsps/m68k/mvme147/clock/ckinit.c index 4a3e95df86..bf5dba2160 100644 --- a/bsps/m68k/mvme147/clock/ckinit.c +++ b/bsps/m68k/mvme147/clock/ckinit.c @@ -70,13 +70,7 @@ void Clock_exit( void ) pcc->timer2_int_control = 0x00; /* Disable T2 Interr. */ } -rtems_device_driver Clock_initialize( - rtems_device_major_number major, - rtems_device_minor_number minor, - void *pargp -) +void _Clock_Initialize( void ) { Install_clock( Clock_isr ); - - return RTEMS_SUCCESSFUL; } diff --git a/bsps/m68k/mvme162/clock/ckinit.c b/bsps/m68k/mvme162/clock/ckinit.c index 5412c16d7d..f22359ffd3 100644 --- a/bsps/m68k/mvme162/clock/ckinit.c +++ b/bsps/m68k/mvme162/clock/ckinit.c @@ -77,13 +77,7 @@ void Clock_exit( void ) /* Dummy for now. See other m68k BSP's for code examples */ } -rtems_device_driver Clock_initialize( - rtems_device_major_number major, - rtems_device_minor_number minor, - void *pargp -) +void _Clock_Initialize( void ) { Install_clock( Clock_isr ); - - return RTEMS_SUCCESSFUL; } diff --git a/bsps/m68k/mvme167/clock/ckinit.c b/bsps/m68k/mvme167/clock/ckinit.c index 8ae7234b8f..bf808435a5 100644 --- a/bsps/m68k/mvme167/clock/ckinit.c +++ b/bsps/m68k/mvme167/clock/ckinit.c @@ -1,7 +1,4 @@ /* - * Implementation of the Clock_initialize() functions - * prototyped in rtems/c/src/lib/include/clockdrv.h. - * * This port does not allow the application to select which timer on the * MVME167 to use for the clock, nor does it allow the application to * configure the clock. The clock uses the VMEchip2 Tick Timer #2. This @@ -147,13 +144,7 @@ void clock_exit( void ) set_vector( Old_ticker, CLOCK_VECTOR, 1 ); } -rtems_device_driver Clock_initialize( - rtems_device_major_number major, - rtems_device_minor_number minor, - void *pargp -) +void _Clock_Initialize( void ) { VMEchip2_T2_initialize(); - - return RTEMS_SUCCESSFUL; } diff --git a/bsps/mips/hurricane/clock/ckinit.c b/bsps/mips/hurricane/clock/ckinit.c index 7e692efe0f..411cd5bdbb 100644 --- a/bsps/mips/hurricane/clock/ckinit.c +++ b/bsps/mips/hurricane/clock/ckinit.c @@ -198,20 +198,7 @@ void Clock_exit( void ) mips_disable_in_interrupt_mask(~CLOCK_VECTOR_MASK); } -/* - * Clock_initialize - * - * Device driver entry point for clock tick driver initialization. - */ - -rtems_device_driver Clock_initialize( - rtems_device_major_number major, - rtems_device_minor_number minor, - void *pargp -) +void _Clock_Initialize( void ) { Install_clock( Clock_isr ); - - return RTEMS_SUCCESSFUL; } - diff --git a/bsps/no_cpu/no_bsp/clock/ckinit.c b/bsps/no_cpu/no_bsp/clock/ckinit.c index 1d680fe355..ef24c8fbe0 100644 --- a/bsps/no_cpu/no_bsp/clock/ckinit.c +++ b/bsps/no_cpu/no_bsp/clock/ckinit.c @@ -109,19 +109,7 @@ void Clock_exit( void ) /* XXX: If necessary, restore the old vector */ } -/* - * Clock_initialize - * - * Device driver entry point for clock tick driver initialization. - */ -rtems_device_driver Clock_initialize( - rtems_device_major_number major, - rtems_device_minor_number minor, - void *pargp -) +void _Clock_Initialize( void ) { Install_clock( Clock_isr ); - - return RTEMS_SUCCESSFUL; } - diff --git a/bsps/powerpc/shared/clock/clock-ppc-dec.c b/bsps/powerpc/shared/clock/clock-ppc-dec.c index bb12e55902..9684b5bf6a 100644 --- a/bsps/powerpc/shared/clock/clock-ppc-dec.c +++ b/bsps/powerpc/shared/clock/clock-ppc-dec.c @@ -197,16 +197,7 @@ int clockIsOn(void* unused) return 0; } -/* - * Clock_initialize - * - * This routine initializes the clock driver. - */ -rtems_device_driver Clock_initialize( - rtems_device_major_number major, - rtems_device_minor_number minor, - void *pargp -) +void _Clock_Initialize( void ) { rtems_interrupt_level l,tcr; diff --git a/bsps/powerpc/shared/clock/clock-ppc403.c b/bsps/powerpc/shared/clock/clock-ppc403.c index 8e3d3bb725..170c17e2cc 100644 --- a/bsps/powerpc/shared/clock/clock-ppc403.c +++ b/bsps/powerpc/shared/clock/clock-ppc403.c @@ -265,11 +265,7 @@ void Clock_exit(void) BSP_remove_rtems_irq_handler (&clockIrqConnData); } -rtems_device_driver Clock_initialize(rtems_device_major_number major, - rtems_device_minor_number minor, - void *pargp) +void _Clock_Initialize( void ) { Install_clock( Clock_isr ); - - return RTEMS_SUCCESSFUL; } diff --git a/bsps/powerpc/shared/clock/clock.c b/bsps/powerpc/shared/clock/clock.c index a2a19865fb..2130d73147 100644 --- a/bsps/powerpc/shared/clock/clock.c +++ b/bsps/powerpc/shared/clock/clock.c @@ -167,11 +167,7 @@ static int ppc_clock_exception_handler_ppc405(BSP_Exception_frame *frame, unsign return 0; } -rtems_device_driver Clock_initialize( - rtems_device_major_number major, - rtems_device_minor_number minor, - void *arg -) +void _Clock_Initialize( void ) { uint64_t frequency = bsp_time_base_frequency; uint64_t us_per_tick = rtems_configuration_get_microseconds_per_tick(); @@ -233,6 +229,4 @@ rtems_device_driver Clock_initialize( ppc_tc.tc_frequency = frequency; ppc_tc.tc_quality = RTEMS_TIMECOUNTER_QUALITY_CLOCK_DRIVER; rtems_timecounter_install(&ppc_tc); - - return RTEMS_SUCCESSFUL; } diff --git a/bsps/powerpc/ss555/clock/clock.c b/bsps/powerpc/ss555/clock/clock.c index 74b34180c4..4a46dee242 100644 --- a/bsps/powerpc/ss555/clock/clock.c +++ b/bsps/powerpc/ss555/clock/clock.c @@ -130,13 +130,7 @@ static void Install_clock(rtems_isr_entry clock_isr) atexit(Clock_exit); } -rtems_device_driver Clock_initialize( - rtems_device_major_number major, - rtems_device_minor_number minor, - void *pargp -) +void _Clock_Initialize( void ) { Install_clock( Clock_isr ); - - return RTEMS_SUCCESSFUL; } diff --git a/bsps/sh/gensh1/clock/ckinit.c b/bsps/sh/gensh1/clock/ckinit.c index 76faf2e857..3434692f8e 100644 --- a/bsps/sh/gensh1/clock/ckinit.c +++ b/bsps/sh/gensh1/clock/ckinit.c @@ -288,19 +288,7 @@ void Clock_exit( void ) /* old vector shall not be installed */ } -/* - * Clock_initialize - * - * Device driver entry point for clock tick driver initialization. - */ - -rtems_device_driver Clock_initialize( - rtems_device_major_number major, - rtems_device_minor_number minor, - void *pargp -) +void _Clock_Initialize( void ) { Install_clock( Clock_isr ); - - return RTEMS_SUCCESSFUL; } diff --git a/bsps/sh/gensh2/clock/ckinit.c b/bsps/sh/gensh2/clock/ckinit.c index 30a2e218ed..7b5c789e91 100644 --- a/bsps/sh/gensh2/clock/ckinit.c +++ b/bsps/sh/gensh2/clock/ckinit.c @@ -228,18 +228,7 @@ void Clock_exit( void ) /* old vector shall not be installed */ } -/* - * Clock_initialize - * - * Device driver entry point for clock tick driver initialization. - */ -rtems_device_driver Clock_initialize( - rtems_device_major_number major, - rtems_device_minor_number minor, - void *pargp -) +void _Clock_Initialize( void ) { Install_clock( Clock_isr ); - - return RTEMS_SUCCESSFUL; } diff --git a/bsps/sh/gensh4/clock/ckinit.c b/bsps/sh/gensh4/clock/ckinit.c index 48439d670e..7e2b88acdb 100644 --- a/bsps/sh/gensh4/clock/ckinit.c +++ b/bsps/sh/gensh4/clock/ckinit.c @@ -229,18 +229,7 @@ Clock_exit(void) /* old vector shall not be installed */ } -/* - * Clock_initialize - * - * Device driver entry point for clock tick driver initialization. - */ -rtems_device_driver Clock_initialize( - rtems_device_major_number major, - rtems_device_minor_number minor, - void *pargp -) +void _Clock_Initialize( void ) { Install_clock( Clock_isr ); - - return RTEMS_SUCCESSFUL; } diff --git a/bsps/shared/dev/clock/clockimpl.h b/bsps/shared/dev/clock/clockimpl.h index f5eb4dcd1d..163b498a18 100644 --- a/bsps/shared/dev/clock/clockimpl.h +++ b/bsps/shared/dev/clock/clockimpl.h @@ -194,22 +194,7 @@ rtems_isr Clock_isr( #endif } -/** - * @brief Clock_initialize - * - * This routine initializes the clock driver. - * - * @param[in] major Clock device major number. - * @param[in] minor Clock device minor number. - * @param[in] parg Pointer to optional device driver arguments - * - * @retval rtems_device_driver status code - */ -rtems_device_driver Clock_initialize( - rtems_device_major_number major, - rtems_device_minor_number minor, - void *pargp -) +void _Clock_Initialize( void ) { Clock_driver_ticks = 0; @@ -240,6 +225,4 @@ rtems_device_driver Clock_initialize( #if CLOCK_DRIVER_ISRS_PER_TICK Clock_driver_isrs = CLOCK_DRIVER_ISRS_PER_TICK_VALUE; #endif - - return RTEMS_SUCCESSFUL; } diff --git a/bsps/shared/grlib/btimer/tlib_ckinit.c b/bsps/shared/grlib/btimer/tlib_ckinit.c index e43c8fdd8e..4f679984d8 100644 --- a/bsps/shared/grlib/btimer/tlib_ckinit.c +++ b/bsps/shared/grlib/btimer/tlib_ckinit.c @@ -163,8 +163,7 @@ static void tlib_clock_timecounter_tick(void) priv.ops->timecounter_tick(); } -/* Return a value not equal to RTEMS_SUCCESFUL to make Clock_initialize fail. */ -static rtems_device_driver tlib_clock_install_isr(rtems_isr *isr) +static void tlib_clock_install_isr(rtems_isr *isr) { int flags = 0; @@ -173,8 +172,6 @@ static rtems_device_driver tlib_clock_install_isr(rtems_isr *isr) flags = TLIB_FLAGS_BROADCAST; #endif tlib_irq_register(priv.tlib_tick, isr, NULL, flags); - - return RTEMS_SUCCESSFUL; } #ifndef RTEMS_SMP @@ -404,13 +401,7 @@ static const struct ops ops_irqamp = { } while (0) #define Clock_driver_support_install_isr( isr ) \ - do { \ - rtems_device_driver ret; \ - ret = tlib_clock_install_isr( isr ); \ - if (RTEMS_SUCCESSFUL != ret) { \ - return ret; \ - } \ - } while (0) + tlib_clock_install_isr( isr ) #define Clock_driver_support_set_interrupt_affinity(online_processors) \ /* Done by tlib_clock_install_isr() */ diff --git a/cpukit/include/rtems/clockdrv.h b/cpukit/include/rtems/clockdrv.h index 543838b964..f3df912e74 100644 --- a/cpukit/include/rtems/clockdrv.h +++ b/cpukit/include/rtems/clockdrv.h @@ -1,9 +1,11 @@ /** * @file * - * @brief Clock Driver for all Boards + * @ingroup RTEMSDriverClock * - * This file describes the Clock Driver for all boards. + * @brief Clock Driver API + * + * This file defines the Clock Driver API. */ /* @@ -18,26 +20,35 @@ #ifndef _RTEMS_CLOCKDRV_H #define _RTEMS_CLOCKDRV_H -#include <rtems/io.h> /* rtems_device_driver */ +#include <stdint.h> #ifdef __cplusplus extern "C" { #endif -/* variables */ - -extern volatile uint32_t Clock_driver_ticks; +/** + * @defgroup RTEMSDriverClock Clock Driver + * + * @ingroup RTEMSDeviceDrivers + * + * @brief The Clock Driver API. + * + * @{ + */ -/* default clock driver entry */ +/** + * @brief Count of clock driver ticks since system boot or last overflow. + * + * This counter may overflow. + */ +extern volatile uint32_t Clock_driver_ticks; -#define CLOCK_DRIVER_TABLE_ENTRY \ - { Clock_initialize, NULL, NULL, NULL, NULL, NULL } +/** + * @brief Initialize the clock driver. + */ +void _Clock_Initialize( void ); -rtems_device_driver Clock_initialize( - rtems_device_major_number, - rtems_device_minor_number, - void * -); +/** @} */ #ifdef __cplusplus } diff --git a/cpukit/include/rtems/confdefs.h b/cpukit/include/rtems/confdefs.h index f04717006d..cbcd1f98c2 100644 --- a/cpukit/include/rtems/confdefs.h +++ b/cpukit/include/rtems/confdefs.h @@ -1558,6 +1558,14 @@ extern rtems_initialization_tasks_table Initialization_tasks[]; #ifdef CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER #include <rtems/clockdrv.h> + + #ifdef CONFIGURE_INIT + RTEMS_SYSINIT_ITEM( + _Clock_Initialize, + RTEMS_SYSINIT_DEVICE_DRIVERS, + RTEMS_SYSINIT_ORDER_THIRD + ); + #endif #endif #ifdef CONFIGURE_APPLICATION_NEEDS_TIMER_DRIVER @@ -1619,9 +1627,6 @@ extern rtems_initialization_tasks_table Initialization_tasks[]; #ifdef CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER CONSOLE_DRIVER_TABLE_ENTRY, #endif - #ifdef CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER - CLOCK_DRIVER_TABLE_ENTRY, - #endif #ifdef CONFIGURE_APPLICATION_NEEDS_RTC_DRIVER RTC_DRIVER_TABLE_ENTRY, #endif @@ -1649,7 +1654,6 @@ extern rtems_initialization_tasks_table Initialization_tasks[]; #ifdef CONFIGURE_APPLICATION_NEEDS_NULL_DRIVER NULL_DRIVER_TABLE_ENTRY #elif !defined(CONFIGURE_APPLICATION_NEEDS_CONSOLE_DRIVER) && \ - !defined(CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER) && \ !defined(CONFIGURE_APPLICATION_NEEDS_RTC_DRIVER) && \ !defined(CONFIGURE_APPLICATION_NEEDS_STUB_DRIVER) && \ !defined(CONFIGURE_APPLICATION_NEEDS_ZERO_DRIVER) && \ diff --git a/testsuites/sptests/sp21/init.c b/testsuites/sptests/sp21/init.c index 0eb453c974..f44f2ba851 100644 --- a/testsuites/sptests/sp21/init.c +++ b/testsuites/sptests/sp21/init.c @@ -26,9 +26,9 @@ void do_test_zero_driver(void); #define PRIurtems_device_major_number PRIu32 -#define STUB_DRIVER_MAJOR 0x2 -#define ZERO_DRIVER_MAJOR 0x3 -#define NO_DRIVER_MAJOR 0x4 +#define STUB_DRIVER_MAJOR 1 +#define ZERO_DRIVER_MAJOR 2 +#define NO_DRIVER_MAJOR 3 #define INVALID_DRIVER_MAJOR UINT32_MAX /* driver entries to use with io_register */ diff --git a/testsuites/sptests/sp40/init.c b/testsuites/sptests/sp40/init.c index 37af04abd7..ff63f66e7f 100644 --- a/testsuites/sptests/sp40/init.c +++ b/testsuites/sptests/sp40/init.c @@ -180,6 +180,7 @@ rtems_task Init( #define CONFIGURE_APPLICATION_NEEDS_SIMPLE_CONSOLE_DRIVER #define CONFIGURE_APPLICATION_NEEDS_CLOCK_DRIVER +#define CONFIGURE_APPLICATION_NEEDS_STUB_DRIVER /* more one more driver slot than are statically configured */ #define CONFIGURE_MAXIMUM_DRIVERS 2 |