[PATCH] Optional Clock_driver_support_shutdown_hardware()
Gedare Bloom
gedare at rtems.org
Thu Aug 3 18:05:51 UTC 2017
This will need to be documented properly as optional in the BSP
development guide, and also that it has to be implemented as a macro
if it is provided.
On Thu, Aug 3, 2017 at 8:49 AM, Sebastian Huber
<sebastian.huber at embedded-brains.de> wrote:
> Make Clock_driver_support_shutdown_hardware() optional. This avoids
> the atexit() support on memory constrained targets.
> ---
> c/src/lib/libbsp/lm32/shared/clock/ckinit.c | 13 ++++++-------
> c/src/lib/libbsp/lm32/shared/milkymist_clock/ckinit.c | 10 +++++-----
> c/src/lib/libbsp/m68k/mcf52235/clock/clock.c | 8 ++++----
> c/src/lib/libbsp/m68k/mcf5225x/clock/clock.c | 8 ++++----
> c/src/lib/libbsp/m68k/mcf5329/clock/clock.c | 8 ++++----
> c/src/lib/libbsp/shared/clockdrv_shell.h | 6 ++++++
> c/src/lib/libcpu/arm/at91rm9200/clock/clock.c | 8 ++++----
> c/src/lib/libcpu/arm/pxa255/clock/clock.c | 8 ++++----
> 8 files changed, 37 insertions(+), 32 deletions(-)
>
> diff --git a/c/src/lib/libbsp/lm32/shared/clock/ckinit.c b/c/src/lib/libbsp/lm32/shared/clock/ckinit.c
> index fd2cae81dc..6a30583853 100644
> --- a/c/src/lib/libbsp/lm32/shared/clock/ckinit.c
> +++ b/c/src/lib/libbsp/lm32/shared/clock/ckinit.c
> @@ -67,13 +67,12 @@ static void Clock_driver_support_initialize_hardware(void)
> lm32_interrupt_unmask(CLOCK_IRQMASK);
> }
>
> -static void Clock_driver_support_shutdown_hardware(void)
> -{
> - /* Disable clock interrupts and stop */
> -
> - lm32_interrupt_unmask(CLOCK_IRQMASK);
> - clockwrite(LM32_CLOCK_CR, LM32_CLOCK_CR_STOP);
> -}
> +#define Clock_driver_support_shutdown_hardware() \
> + do { \
> + /* Disable clock interrupts and stop */ \
> + lm32_interrupt_unmask(CLOCK_IRQMASK); \
> + clockwrite(LM32_CLOCK_CR, LM32_CLOCK_CR_STOP); \
> + } while (0)
>
> #define CLOCK_DRIVER_USE_DUMMY_TIMECOUNTER
>
> diff --git a/c/src/lib/libbsp/lm32/shared/milkymist_clock/ckinit.c b/c/src/lib/libbsp/lm32/shared/milkymist_clock/ckinit.c
> index 3230d83325..35b4b818e6 100644
> --- a/c/src/lib/libbsp/lm32/shared/milkymist_clock/ckinit.c
> +++ b/c/src/lib/libbsp/lm32/shared/milkymist_clock/ckinit.c
> @@ -40,11 +40,11 @@ static void Clock_driver_support_initialize_hardware(void)
> bsp_interrupt_vector_enable(MM_IRQ_TIMER0);
> }
>
> -static void Clock_driver_support_shutdown_hardware(void)
> -{
> - bsp_interrupt_vector_disable(MM_IRQ_TIMER0);
> - MM_WRITE(MM_TIMER0_CONTROL, 0);
> -}
> +#define Clock_driver_support_shutdown_hardware() \
> + do { \
> + bsp_interrupt_vector_disable(MM_IRQ_TIMER0); \
> + MM_WRITE(MM_TIMER0_CONTROL, 0); \
> + } while (0)
>
> #define CLOCK_DRIVER_USE_DUMMY_TIMECOUNTER
>
> diff --git a/c/src/lib/libbsp/m68k/mcf52235/clock/clock.c b/c/src/lib/libbsp/m68k/mcf52235/clock/clock.c
> index 4b5f4afc51..aa0d0b7945 100644
> --- a/c/src/lib/libbsp/m68k/mcf52235/clock/clock.c
> +++ b/c/src/lib/libbsp/m68k/mcf52235/clock/clock.c
> @@ -57,10 +57,10 @@ static void mcf52235_tc_tick(void)
> /*
> * Turn off the clock
> */
> -static void Clock_driver_support_shutdown_hardware(void)
> -{
> - MCF_PIT1_PCSR &= ~MCF_PIT_PCSR_EN;
> -}
> +#define Clock_driver_support_shutdown_hardware() \
> + do { \
> + MCF_PIT1_PCSR &= ~MCF_PIT_PCSR_EN; \
> + } while (0)
>
> /*
> * Set up the clock hardware
> diff --git a/c/src/lib/libbsp/m68k/mcf5225x/clock/clock.c b/c/src/lib/libbsp/m68k/mcf5225x/clock/clock.c
> index ee97e5035c..cc2f7d11fa 100644
> --- a/c/src/lib/libbsp/m68k/mcf5225x/clock/clock.c
> +++ b/c/src/lib/libbsp/m68k/mcf5225x/clock/clock.c
> @@ -57,10 +57,10 @@ static void mcf5225x_tc_tick(void)
> /*
> * Turn off the clock
> */
> -static void Clock_driver_support_shutdown_hardware(void)
> -{
> - MCF_PIT1_PCSR &= ~MCF_PIT_PCSR_EN;
> -}
> +#define Clock_driver_support_shutdown_hardware() \
> + do { \
> + MCF_PIT1_PCSR &= ~MCF_PIT_PCSR_EN; \
> + } while (0)
>
> /*
> * Set up the clock hardware
> diff --git a/c/src/lib/libbsp/m68k/mcf5329/clock/clock.c b/c/src/lib/libbsp/m68k/mcf5329/clock/clock.c
> index 5741b3081d..5f6006e717 100644
> --- a/c/src/lib/libbsp/m68k/mcf5329/clock/clock.c
> +++ b/c/src/lib/libbsp/m68k/mcf5329/clock/clock.c
> @@ -57,10 +57,10 @@ static void mcf5329_tc_tick(void)
> /*
> * Turn off the clock
> */
> -static void Clock_driver_support_shutdown_hardware(void)
> -{
> - MCF_PIT3_PCSR &= ~MCF_PIT_PCSR_EN;
> -}
> +#define Clock_driver_support_shutdown_hardware() \
> + do { \
> + MCF_PIT3_PCSR &= ~MCF_PIT_PCSR_EN; \
> + } while (0)
>
> /*
> * Set up the clock hardware
> diff --git a/c/src/lib/libbsp/shared/clockdrv_shell.h b/c/src/lib/libbsp/shared/clockdrv_shell.h
> index a4d1b2df91..0d40c84d91 100644
> --- a/c/src/lib/libbsp/shared/clockdrv_shell.h
> +++ b/c/src/lib/libbsp/shared/clockdrv_shell.h
> @@ -102,7 +102,9 @@ static void Clock_driver_timecounter_tick( void )
> */
> volatile uint32_t Clock_driver_ticks;
>
> +#ifdef Clock_driver_support_shutdown_hardware
> void Clock_exit( void );
> +#endif
>
> /**
> * @brief Clock_isr
> @@ -181,6 +183,7 @@ rtems_isr Clock_isr(
> #endif
> }
>
> +#ifdef Clock_driver_support_shutdown_hardware
> /**
> * @brief Clock_exit
> *
> @@ -193,6 +196,7 @@ void Clock_exit( void )
>
> /* do not restore old vector */
> }
> +#endif
>
> /**
> * @brief Clock_initialize
> @@ -237,7 +241,9 @@ rtems_device_driver Clock_initialize(
> */
> Clock_driver_support_initialize_hardware();
>
> +#ifdef Clock_driver_support_shutdown_hardware
> atexit( Clock_exit );
> +#endif
>
> /*
> * If we are counting ISRs per tick, then initialize the counter.
> diff --git a/c/src/lib/libcpu/arm/at91rm9200/clock/clock.c b/c/src/lib/libcpu/arm/at91rm9200/clock/clock.c
> index 42b85f3f98..ac7f5fe783 100644
> --- a/c/src/lib/libcpu/arm/at91rm9200/clock/clock.c
> +++ b/c/src/lib/libcpu/arm/at91rm9200/clock/clock.c
> @@ -106,10 +106,10 @@ static void Clock_driver_support_initialize_hardware(void)
> (void) st_str; /* avoid set but not used warning */ \
> } while (0)
>
> -static void Clock_driver_support_shutdown_hardware( void )
> -{
> - BSP_remove_rtems_irq_handler(&clock_isr_data);
> -}
> +#define Clock_driver_support_shutdown_hardware() \
> + do { \
> + BSP_remove_rtems_irq_handler(&clock_isr_data); \
> + } while (0)
>
> #define CLOCK_DRIVER_USE_DUMMY_TIMECOUNTER
>
> diff --git a/c/src/lib/libcpu/arm/pxa255/clock/clock.c b/c/src/lib/libcpu/arm/pxa255/clock/clock.c
> index 69b684926c..979e6fbd00 100644
> --- a/c/src/lib/libcpu/arm/pxa255/clock/clock.c
> +++ b/c/src/lib/libcpu/arm/pxa255/clock/clock.c
> @@ -111,10 +111,10 @@ static void Clock_driver_support_initialize_hardware(void)
> XSCALE_OS_TIMER_MR0 = XSCALE_OS_TIMER_TCR + period_num; \
> } while (0)
>
> -static void Clock_driver_support_shutdown_hardware( void )
> -{
> - BSP_remove_rtems_irq_handler(&clock_isr_data);
> -}
> +#define Clock_driver_support_shutdown_hardware() \
> + do { \
> + BSP_remove_rtems_irq_handler(&clock_isr_data); \
> + } while (0)
>
> #define CLOCK_DRIVER_USE_DUMMY_TIMECOUNTER
>
> --
> 2.12.3
>
> _______________________________________________
> devel mailing list
> devel at rtems.org
> http://lists.rtems.org/mailman/listinfo/devel
More information about the devel
mailing list