[PATCH] bsps/sparc: Add and use <grlib-impl.h>

Daniel Hellstrom daniel at gaisler.com
Mon Nov 26 14:57:45 UTC 2018


Hi Sebastian,

Thanks for this! I haven't tried it out but it looks good to me.

Regards,
Daniel


On 2018-11-26 15:46, Sebastian Huber wrote:
> Reduce copy and paste.
> ---
>   bsps/sparc/headers.am                       |  1 +
>   bsps/sparc/include/grlib-impl.h             | 70 +++++++++++++++++++++++++++++
>   bsps/sparc/shared/1553/gr1553bc.c           | 35 +--------------
>   bsps/sparc/shared/1553/gr1553bm.c           | 36 +--------------
>   bsps/sparc/shared/1553/gr1553rt.c           | 13 +-----
>   bsps/sparc/shared/amba/ahbstat.c            | 24 ++++------
>   bsps/sparc/shared/can/grcan.c               | 26 +----------
>   bsps/sparc/shared/can/occan.c               | 12 +----
>   bsps/sparc/shared/net/greth.c               | 10 +----
>   bsps/sparc/shared/pci/gr_701.c              | 11 +----
>   bsps/sparc/shared/pci/gr_cpci_gr740.c       | 11 +----
>   bsps/sparc/shared/pci/gr_leon4_n2x.c        | 11 +----
>   bsps/sparc/shared/pci/gr_rasta_adcdac.c     | 11 +----
>   bsps/sparc/shared/pci/gr_rasta_io.c         | 11 +----
>   bsps/sparc/shared/pci/gr_rasta_spw_router.c | 11 +----
>   bsps/sparc/shared/pci/gr_rasta_tmtc.c       | 11 +----
>   bsps/sparc/shared/pci/gr_tmtc_1553.c        | 11 +----
>   bsps/sparc/shared/pci/grpci2.c              | 32 +------------
>   bsps/sparc/shared/pci/grpci2dma.c           | 34 +-------------
>   bsps/sparc/shared/spw/grspw_pkt.c           | 35 +--------------
>   bsps/sparc/shared/spw/grspw_router.c        | 53 +---------------------
>   bsps/sparc/shared/spw/spwtdp.c              | 33 +-------------
>   bsps/sparc/shared/tmtc/grtc.c               | 15 +------
>   bsps/sparc/shared/tmtc/grtm.c               | 10 +----
>   24 files changed, 105 insertions(+), 422 deletions(-)
>   create mode 100644 bsps/sparc/include/grlib-impl.h
>
> diff --git a/bsps/sparc/headers.am b/bsps/sparc/headers.am
> index 4c6efb86ce..e09251613d 100644
> --- a/bsps/sparc/headers.am
> +++ b/bsps/sparc/headers.am
> @@ -3,6 +3,7 @@
>   include_HEADERS =
>   include_HEADERS += ../../../../../bsps/sparc/include/ambapp.h
>   include_HEADERS += ../../../../../bsps/sparc/include/ambapp_ids.h
> +include_HEADERS += ../../../../../bsps/sparc/include/grlib-impl.h
>   include_HEADERS += ../../../../../bsps/sparc/include/grlib.h
>   
>   include_bspdir = $(includedir)/bsp
> diff --git a/bsps/sparc/include/grlib-impl.h b/bsps/sparc/include/grlib-impl.h
> new file mode 100644
> index 0000000000..0bdf21ea9e
> --- /dev/null
> +++ b/bsps/sparc/include/grlib-impl.h
> @@ -0,0 +1,70 @@
> +/*
> + * Copyright (C) 2017 Cobham Gaisler AB
> + *
> + * The license and distribution terms for this file may be
> + * found in the file LICENSE in this distribution or at
> + * http://www.rtems.org/license/LICENSE.
> + */
> +
> +#ifndef GRLIB_IMPL_H
> +#define GRLIB_IMPL_H
> +
> +#include <rtems/score/cpuopts.h>
> +
> +/*
> + * Use interrupt lock primitives compatible with SMP defined in RTEMS 4.11.99
> + * and higher.
> + */
> +#if (((__RTEMS_MAJOR__ << 16) | (__RTEMS_MINOR__ << 8) | __RTEMS_REVISION__) >= 0x040b63)
> +
> +#include <rtems/score/isrlock.h>
> +
> +/* map via rtems_interrupt_lock_* API: */
> +#define SPIN_DECLARE(lock) RTEMS_INTERRUPT_LOCK_MEMBER(lock)
> +#define SPIN_INIT(lock, name) rtems_interrupt_lock_initialize(lock, name)
> +#define SPIN_LOCK(lock, level) rtems_interrupt_lock_acquire_isr(lock, &level)
> +#define SPIN_LOCK_IRQ(lock, level) rtems_interrupt_lock_acquire(lock, &level)
> +#define SPIN_UNLOCK(lock, level) rtems_interrupt_lock_release_isr(lock, &level)
> +#define SPIN_UNLOCK_IRQ(lock, level) rtems_interrupt_lock_release(lock, &level)
> +#define SPIN_IRQFLAGS(k) rtems_interrupt_lock_context k
> +#define SPIN_ISR_IRQFLAGS(k) SPIN_IRQFLAGS(k)
> +#define SPIN_FREE(lock) rtems_interrupt_lock_destroy(lock)
> +
> +/* turn on/off local CPU's interrupt to ensure HW timing - not SMP safe. */
> +#define IRQ_LOCAL_DECLARE(_level) rtems_interrupt_level _level
> +#define IRQ_LOCAL_DISABLE(_level) rtems_interrupt_local_disable(_level)
> +#define IRQ_LOCAL_ENABLE(_level) rtems_interrupt_local_enable(_level)
> +
> +#else
> +
> +#ifdef RTEMS_SMP
> +#error SMP mode not compatible with these interrupt lock primitives
> +#endif
> +
> +/* maintain single-core compatibility with older versions of RTEMS: */
> +#define SPIN_DECLARE(name)
> +#define SPIN_INIT(lock, name)
> +#define SPIN_LOCK(lock, level)
> +#define SPIN_LOCK_IRQ(lock, level) rtems_interrupt_disable(level)
> +#define SPIN_UNLOCK(lock, level)
> +#define SPIN_UNLOCK_IRQ(lock, level) rtems_interrupt_enable(level)
> +#define SPIN_IRQFLAGS(k) rtems_interrupt_level k
> +#define SPIN_ISR_IRQFLAGS(k)
> +#define SPIN_FREE(lock)
> +
> +/* turn on/off local CPU's interrupt to ensure HW timing - not SMP safe. */
> +#define IRQ_LOCAL_DECLARE(_level) rtems_interrupt_level _level
> +#define IRQ_LOCAL_DISABLE(_level) rtems_interrupt_disable(_level)
> +#define IRQ_LOCAL_ENABLE(_level) rtems_interrupt_enable(_level)
> +
> +#endif
> +
> +#ifdef __cplusplus
> +extern "C" {
> +#endif
> +
> +#ifdef __cplusplus
> +}
> +#endif
> +
> +#endif /* GRLIB_IMPL_H */
> diff --git a/bsps/sparc/shared/1553/gr1553bc.c b/bsps/sparc/shared/1553/gr1553bc.c
> index 3b967d0f37..a7dd890cbf 100644
> --- a/bsps/sparc/shared/1553/gr1553bc.c
> +++ b/bsps/sparc/shared/1553/gr1553bc.c
> @@ -17,40 +17,7 @@
>   #include <bsp/gr1553b.h>
>   #include <bsp/gr1553bc.h>
>   
> -/* Use interrupt lock privmitives compatible with SMP defined in
> - * RTEMS 4.11.99 and higher.
> - */
> -#if (((__RTEMS_MAJOR__ << 16) | (__RTEMS_MINOR__ << 8) | __RTEMS_REVISION__) >= 0x040b63)
> -
> -/* map via rtems_interrupt_lock_* API: */
> -#define SPIN_DECLARE(lock) RTEMS_INTERRUPT_LOCK_MEMBER(lock)
> -#define SPIN_INIT(lock, name) rtems_interrupt_lock_initialize(lock, name)
> -#define SPIN_LOCK(lock, level) rtems_interrupt_lock_acquire_isr(lock, &level)
> -#define SPIN_LOCK_IRQ(lock, level) rtems_interrupt_lock_acquire(lock, &level)
> -#define SPIN_UNLOCK(lock, level) rtems_interrupt_lock_release_isr(lock, &level)
> -#define SPIN_UNLOCK_IRQ(lock, level) rtems_interrupt_lock_release(lock, &level)
> -#define SPIN_IRQFLAGS(k) rtems_interrupt_lock_context k
> -#define SPIN_ISR_IRQFLAGS(k) SPIN_IRQFLAGS(k)
> -#define SPIN_FREE(lock) rtems_interrupt_lock_destroy(lock)
> -
> -#else
> -
> -/* maintain single-core compatibility with older versions of RTEMS: */
> -#define SPIN_DECLARE(name)
> -#define SPIN_INIT(lock, name)
> -#define SPIN_LOCK(lock, level)
> -#define SPIN_LOCK_IRQ(lock, level) rtems_interrupt_disable(level)
> -#define SPIN_UNLOCK(lock, level)
> -#define SPIN_UNLOCK_IRQ(lock, level) rtems_interrupt_enable(level)
> -#define SPIN_IRQFLAGS(k) rtems_interrupt_level k
> -#define SPIN_ISR_IRQFLAGS(k)
> -#define SPIN_FREE(lock)
> -
> -#ifdef RTEMS_SMP
> -#error SMP mode not compatible with these interrupt lock primitives
> -#endif
> -
> -#endif
> +#include <grlib-impl.h>
>   
>   #define GR1553BC_WRITE_MEM(adr, val) *(volatile uint32_t *)(adr) = (uint32_t)(val)
>   #define GR1553BC_READ_MEM(adr) (*(volatile uint32_t *)(adr))
> diff --git a/bsps/sparc/shared/1553/gr1553bm.c b/bsps/sparc/shared/1553/gr1553bm.c
> index d63983bda9..d9fc9d0dda 100644
> --- a/bsps/sparc/shared/1553/gr1553bm.c
> +++ b/bsps/sparc/shared/1553/gr1553bm.c
> @@ -16,6 +16,7 @@
>   #include <bsp/gr1553b.h>
>   #include <bsp/gr1553bm.h>
>   
> +#include <grlib-impl.h>
>   
>   #define GR1553BM_WRITE_MEM(adr, val) *(volatile uint32_t *)(adr) = (uint32_t)(val)
>   #define GR1553BM_READ_MEM(adr) (*(volatile uint32_t *)(adr))
> @@ -23,41 +24,6 @@
>   #define GR1553BM_WRITE_REG(adr, val) *(volatile uint32_t *)(adr) = (uint32_t)(val)
>   #define GR1553BM_READ_REG(adr) (*(volatile uint32_t *)(adr))
>   
> -/* Use interrupt lock privmitives compatible with SMP defined in
> - * RTEMS 4.11.99 and higher.
> - */
> -#if (((__RTEMS_MAJOR__ << 16) | (__RTEMS_MINOR__ << 8) | __RTEMS_REVISION__) >= 0x040b63)
> -
> -/* map via rtems_interrupt_lock_* API: */
> -#define SPIN_DECLARE(lock) RTEMS_INTERRUPT_LOCK_MEMBER(lock)
> -#define SPIN_INIT(lock, name) rtems_interrupt_lock_initialize(lock, name)
> -#define SPIN_LOCK(lock, level) rtems_interrupt_lock_acquire_isr(lock, &level)
> -#define SPIN_LOCK_IRQ(lock, level) rtems_interrupt_lock_acquire(lock, &level)
> -#define SPIN_UNLOCK(lock, level) rtems_interrupt_lock_release_isr(lock, &level)
> -#define SPIN_UNLOCK_IRQ(lock, level) rtems_interrupt_lock_release(lock, &level)
> -#define SPIN_IRQFLAGS(k) rtems_interrupt_lock_context k
> -#define SPIN_ISR_IRQFLAGS(k) SPIN_IRQFLAGS(k)
> -#define SPIN_FREE(lock) rtems_interrupt_lock_destroy(lock)
> -
> -#else
> -
> -/* maintain single-core compatibility with older versions of RTEMS: */
> -#define SPIN_DECLARE(name)
> -#define SPIN_INIT(lock, name)
> -#define SPIN_LOCK(lock, level)
> -#define SPIN_LOCK_IRQ(lock, level) rtems_interrupt_disable(level)
> -#define SPIN_UNLOCK(lock, level)
> -#define SPIN_UNLOCK_IRQ(lock, level) rtems_interrupt_enable(level)
> -#define SPIN_IRQFLAGS(k) rtems_interrupt_level k
> -#define SPIN_ISR_IRQFLAGS(k)
> -#define SPIN_FREE(lock)
> -
> -#ifdef RTEMS_SMP
> -#error SMP mode not compatible with these interrupt lock primitives
> -#endif
> -
> -#endif
> -
>   struct gr1553bm_priv {
>   	struct drvmgr_dev **pdev;
>   	struct gr1553b_regs *regs;
> diff --git a/bsps/sparc/shared/1553/gr1553rt.c b/bsps/sparc/shared/1553/gr1553rt.c
> index 932e8494f1..db928d0f1c 100644
> --- a/bsps/sparc/shared/1553/gr1553rt.c
> +++ b/bsps/sparc/shared/1553/gr1553rt.c
> @@ -19,23 +19,14 @@
>   #include <drvmgr/drvmgr.h>
>   #include <drvmgr/ambapp_bus.h>
>   
> +#include <grlib-impl.h>
> +
>   #define GR1553RT_WRITE_MEM(adr, val) *(volatile uint32_t *)(adr) = (uint32_t)(val)
>   #define GR1553RT_READ_MEM(adr) (*(volatile uint32_t *)(adr))
>   
>   #define GR1553RT_WRITE_REG(adr, val) *(volatile uint32_t *)(adr) = (uint32_t)(val)
>   #define GR1553RT_READ_REG(adr) (*(volatile uint32_t *)(adr))
>   
> -/* map via rtems_interrupt_lock_* API: */
> -#define SPIN_DECLARE(lock) RTEMS_INTERRUPT_LOCK_MEMBER(lock)
> -#define SPIN_INIT(lock, name) rtems_interrupt_lock_initialize(lock, name)
> -#define SPIN_LOCK(lock, level) rtems_interrupt_lock_acquire_isr(lock, &level)
> -#define SPIN_LOCK_IRQ(lock, level) rtems_interrupt_lock_acquire(lock, &level)
> -#define SPIN_UNLOCK(lock, level) rtems_interrupt_lock_release_isr(lock, &level)
> -#define SPIN_UNLOCK_IRQ(lock, level) rtems_interrupt_lock_release(lock, &level)
> -#define SPIN_IRQFLAGS(k) rtems_interrupt_lock_context k
> -#define SPIN_ISR_IRQFLAGS(k) SPIN_IRQFLAGS(k)
> -#define SPIN_FREE(lock) rtems_interrupt_lock_destroy(lock)
> -
>   /* Software representation of one hardware descriptor */
>   struct gr1553rt_sw_bd {
>   	unsigned short this_next;/* Next entry or this entry. 0xffff: no next */
> diff --git a/bsps/sparc/shared/amba/ahbstat.c b/bsps/sparc/shared/amba/ahbstat.c
> index e624301975..a769fb3b66 100644
> --- a/bsps/sparc/shared/amba/ahbstat.c
> +++ b/bsps/sparc/shared/amba/ahbstat.c
> @@ -17,13 +17,7 @@
>   
>   #include <bsp/ahbstat.h>
>   
> -#define SPIN_IRQ_DECLARE(name)          RTEMS_INTERRUPT_LOCK_DECLARE(, name)
> -#define SPIN_IRQ_INIT(lock, name)       rtems_interrupt_lock_initialize(lock, name)
> -#define SPIN_IRQ_LOCK(lock, ctx)        rtems_interrupt_lock_acquire(lock, &(ctx))
> -#define SPIN_IRQ_UNLOCK(lock, ctx)      rtems_interrupt_lock_release(lock, &(ctx))
> -#define SPIN_IRQ_LOCK_ISR(lock, ctx)    rtems_interrupt_lock_acquire_isr(lock, &(ctx))
> -#define SPIN_IRQ_UNLOCK_ISR(lock, ctx)  rtems_interrupt_lock_release_isr(lock, &(ctx))
> -#define SPIN_IRQ_CTX                    rtems_interrupt_lock_context
> +#include <grlib-impl.h>
>   
>   #define REG_WRITE(addr, val) (*(volatile uint32_t *)(addr) = (uint32_t)(val))
>   #define REG_READ(addr) (*(volatile uint32_t *)(addr))
> @@ -74,7 +68,7 @@ struct ahbstat_priv {
>   	uint32_t last_status;
>   	uint32_t last_address;
>   	/* Spin-lock ISR protection */
> -	SPIN_IRQ_DECLARE(devlock);
> +	SPIN_DECLARE(devlock);
>   };
>   
>   static int ahbstat_init2(struct drvmgr_dev *dev);
> @@ -137,7 +131,7 @@ static int ahbstat_init2(struct drvmgr_dev *dev)
>   	 * Initialize spinlock for AHBSTAT Device. It is used to protect user
>   	 * API calls involivng priv structure from updates in ISR.
>   	 */
> -	SPIN_IRQ_INIT(&priv->devlock, priv->devname);
> +	SPIN_INIT(&priv->devlock, priv->devname);
>   
>   	/* Initialize hardware */
>   	REG_WRITE(&priv->regs->status, 0);
> @@ -153,7 +147,7 @@ void ahbstat_isr(void *arg)
>   	struct ahbstat_priv *priv = arg;
>   	uint32_t fadr, status;
>   	int rc;
> -	SPIN_IRQ_CTX lock_context;
> +	SPIN_ISR_IRQFLAGS(lock_context);
>   
>   	/* Get hardware status */
>   	status = REG_READ(&priv->regs->status);
> @@ -165,10 +159,10 @@ void ahbstat_isr(void *arg)
>   	/* Get Failing address */
>   	fadr = REG_READ(&priv->regs->failing);
>   
> -	SPIN_IRQ_LOCK_ISR(&priv->devlock, lock_context);
> +	SPIN_LOCK(&priv->devlock, lock_context);
>   	priv->last_status = status;
>   	priv->last_address = fadr;
> -	SPIN_IRQ_UNLOCK_ISR(&priv->devlock, lock_context);
> +	SPIN_UNLOCK(&priv->devlock, lock_context);
>   
>   	/* Let user handle error, default to print the error and reenable HW
>   	 *
> @@ -211,7 +205,7 @@ int ahbstat_last_error(int minor, uint32_t *status, uint32_t *address)
>   	struct ahbstat_priv *priv;
>   	uint32_t last_status;
>   	uint32_t last_address;
> -	SPIN_IRQ_CTX lock_context;
> +	SPIN_IRQFLAGS(lock_context);
>   
>   	if (drvmgr_get_dev(&ahbstat_drv_info.general, minor, &dev)) {
>   		return -1;
> @@ -219,10 +213,10 @@ int ahbstat_last_error(int minor, uint32_t *status, uint32_t *address)
>   	priv = (struct ahbstat_priv *)dev->priv;
>   
>   	/* Read information cached by ISR */
> -	SPIN_IRQ_LOCK(&priv->devlock, lock_context);
> +	SPIN_LOCK_IRQ(&priv->devlock, lock_context);
>   	last_status = REG_READ(&priv->last_status);
>   	last_address = REG_READ(&priv->last_address);
> -	SPIN_IRQ_UNLOCK(&priv->devlock, lock_context);
> +	SPIN_UNLOCK_IRQ(&priv->devlock, lock_context);
>   
>   	*status = last_status;
>   	*address = last_address;
> diff --git a/bsps/sparc/shared/can/grcan.c b/bsps/sparc/shared/can/grcan.c
> index da236ef7cc..bf093a40b3 100644
> --- a/bsps/sparc/shared/can/grcan.c
> +++ b/bsps/sparc/shared/can/grcan.c
> @@ -22,31 +22,7 @@
>   #include <drvmgr/ambapp_bus.h>
>   #include <ambapp.h>
>   
> -#if (((__RTEMS_MAJOR__ << 16) | (__RTEMS_MINOR__ << 8) | __RTEMS_REVISION__) >= 0x040b63)
> -
> -/* Spin locks mapped via rtems_interrupt_lock_* API: */
> -#define SPIN_DECLARE(lock) RTEMS_INTERRUPT_LOCK_MEMBER(lock)
> -#define SPIN_INIT(lock, name) rtems_interrupt_lock_initialize(lock, name)
> -#define SPIN_LOCK(lock, level) rtems_interrupt_lock_acquire_isr(lock, &level)
> -#define SPIN_LOCK_IRQ(lock, level) rtems_interrupt_lock_acquire(lock, &level)
> -#define SPIN_UNLOCK(lock, level) rtems_interrupt_lock_release_isr(lock, &level)
> -#define SPIN_UNLOCK_IRQ(lock, level) rtems_interrupt_lock_release(lock, &level)
> -#define SPIN_IRQFLAGS(k) rtems_interrupt_lock_context k
> -#define SPIN_ISR_IRQFLAGS(k) SPIN_IRQFLAGS(k)
> -
> -#else
> -
> -/* maintain compatibility with older versions of RTEMS: */
> -#define SPIN_DECLARE(name)
> -#define SPIN_INIT(lock, name)
> -#define SPIN_LOCK(lock, level)
> -#define SPIN_LOCK_IRQ(lock, level) rtems_interrupt_disable(level)
> -#define SPIN_UNLOCK(lock, level)
> -#define SPIN_UNLOCK_IRQ(lock, level) rtems_interrupt_enable(level)
> -#define SPIN_IRQFLAGS(k) rtems_interrupt_level k
> -#define SPIN_ISR_IRQFLAGS(k)
> -
> -#endif
> +#include <grlib-impl.h>
>   
>   /* Maximum number of GRCAN devices supported by driver */
>   #define GRCAN_COUNT_MAX 8
> diff --git a/bsps/sparc/shared/can/occan.c b/bsps/sparc/shared/can/occan.c
> index 2c0e49a2d5..042869b8c9 100644
> --- a/bsps/sparc/shared/can/occan.c
> +++ b/bsps/sparc/shared/can/occan.c
> @@ -20,6 +20,8 @@
>   #include <drvmgr/ambapp_bus.h>
>   #include <bsp/occan.h>
>   
> +#include <grlib-impl.h>
> +
>   /* RTEMS -> ERRNO decoding table
>   
>   rtems_assoc_t errno_assoc[] = {
> @@ -71,16 +73,6 @@ rtems_assoc_t errno_assoc[] = {
>   	#define DBG(fmt, vargs...)
>   #endif
>   
> -/* Spin locks mapped via rtems_interrupt_lock_* API: */
> -#define SPIN_DECLARE(lock) RTEMS_INTERRUPT_LOCK_MEMBER(lock)
> -#define SPIN_INIT(lock, name) rtems_interrupt_lock_initialize(lock, name)
> -#define SPIN_LOCK(lock, level) rtems_interrupt_lock_acquire_isr(lock, &level)
> -#define SPIN_LOCK_IRQ(lock, level) rtems_interrupt_lock_acquire(lock, &level)
> -#define SPIN_UNLOCK(lock, level) rtems_interrupt_lock_release_isr(lock, &level)
> -#define SPIN_UNLOCK_IRQ(lock, level) rtems_interrupt_lock_release(lock, &level)
> -#define SPIN_IRQFLAGS(k) rtems_interrupt_lock_context k
> -#define SPIN_ISR_IRQFLAGS(k) SPIN_IRQFLAGS(k)
> -
>   /* fifo interface */
>   typedef struct {
>   	int cnt;
> diff --git a/bsps/sparc/shared/net/greth.c b/bsps/sparc/shared/net/greth.c
> index 649ae9df24..c505e94be3 100644
> --- a/bsps/sparc/shared/net/greth.c
> +++ b/bsps/sparc/shared/net/greth.c
> @@ -43,15 +43,7 @@
>   #include <netinet/in.h>
>   #include <netinet/if_ether.h>
>   
> -/* map via rtems_interrupt_lock_* API: */
> -#define SPIN_DECLARE(lock) RTEMS_INTERRUPT_LOCK_MEMBER(lock)
> -#define SPIN_INIT(lock, name) rtems_interrupt_lock_initialize(lock, name)
> -#define SPIN_LOCK(lock, level) rtems_interrupt_lock_acquire_isr(lock, &level)
> -#define SPIN_LOCK_IRQ(lock, level) rtems_interrupt_lock_acquire(lock, &level)
> -#define SPIN_UNLOCK(lock, level) rtems_interrupt_lock_release_isr(lock, &level)
> -#define SPIN_UNLOCK_IRQ(lock, level) rtems_interrupt_lock_release(lock, &level)
> -#define SPIN_IRQFLAGS(k) rtems_interrupt_lock_context k
> -#define SPIN_ISR_IRQFLAGS(k) SPIN_IRQFLAGS(k)
> +#include <grlib-impl.h>
>   
>   #ifdef malloc
>   #undef malloc
> diff --git a/bsps/sparc/shared/pci/gr_701.c b/bsps/sparc/shared/pci/gr_701.c
> index 2350e58b51..4c22cc51ea 100644
> --- a/bsps/sparc/shared/pci/gr_701.c
> +++ b/bsps/sparc/shared/pci/gr_701.c
> @@ -23,7 +23,6 @@
>   
>   #include <bsp.h>
>   #include <rtems/bspIo.h>
> -#include <rtems/score/isrlock.h> /* spin-lock */
>   #include <pci.h>
>   #include <pci/access.h>
>   
> @@ -38,15 +37,7 @@
>   
>   #include <bsp/gr_701.h>
>   
> -/* map via rtems_interrupt_lock_* API: */
> -#define SPIN_DECLARE(lock) RTEMS_INTERRUPT_LOCK_MEMBER(lock)
> -#define SPIN_INIT(lock, name) rtems_interrupt_lock_initialize(lock, name)
> -#define SPIN_LOCK(lock, level) rtems_interrupt_lock_acquire_isr(lock, &level)
> -#define SPIN_LOCK_IRQ(lock, level) rtems_interrupt_lock_acquire(lock, &level)
> -#define SPIN_UNLOCK(lock, level) rtems_interrupt_lock_release_isr(lock, &level)
> -#define SPIN_UNLOCK_IRQ(lock, level) rtems_interrupt_lock_release(lock, &level)
> -#define SPIN_IRQFLAGS(k) rtems_interrupt_lock_context k
> -#define SPIN_ISR_IRQFLAGS(k) SPIN_IRQFLAGS(k)
> +#include <grlib-impl.h>
>   
>   /* Offset from 0x80000000 (dual bus version) */
>   #define AHB1_BASE_ADDR 0x80000000
> diff --git a/bsps/sparc/shared/pci/gr_cpci_gr740.c b/bsps/sparc/shared/pci/gr_cpci_gr740.c
> index 9b4fbfa3b2..d093973850 100644
> --- a/bsps/sparc/shared/pci/gr_cpci_gr740.c
> +++ b/bsps/sparc/shared/pci/gr_cpci_gr740.c
> @@ -33,7 +33,6 @@
>   
>   #include <bsp.h>
>   #include <rtems/bspIo.h>
> -#include <rtems/score/isrlock.h> /* spin-lock */
>   #include <pci.h>
>   
>   #include <ambapp.h>
> @@ -46,15 +45,7 @@
>   
>   #include <bsp/gr_cpci_gr740.h>
>   
> -/* map via rtems_interrupt_lock_* API: */
> -#define SPIN_DECLARE(lock) RTEMS_INTERRUPT_LOCK_MEMBER(lock)
> -#define SPIN_INIT(lock, name) rtems_interrupt_lock_initialize(lock, name)
> -#define SPIN_LOCK(lock, level) rtems_interrupt_lock_acquire_isr(lock, &level)
> -#define SPIN_LOCK_IRQ(lock, level) rtems_interrupt_lock_acquire(lock, &level)
> -#define SPIN_UNLOCK(lock, level) rtems_interrupt_lock_release_isr(lock, &level)
> -#define SPIN_UNLOCK_IRQ(lock, level) rtems_interrupt_lock_release(lock, &level)
> -#define SPIN_IRQFLAGS(k) rtems_interrupt_lock_context k
> -#define SPIN_ISR_IRQFLAGS(k) SPIN_IRQFLAGS(k)
> +#include <grlib-impl.h>
>   
>   /* Determines which PCI address the AHB masters on the GR740 board will
>    * access when accessing the AHB to PCI window, it should be set so that the
> diff --git a/bsps/sparc/shared/pci/gr_leon4_n2x.c b/bsps/sparc/shared/pci/gr_leon4_n2x.c
> index c97c0b8cf5..e0f12cb6f6 100644
> --- a/bsps/sparc/shared/pci/gr_leon4_n2x.c
> +++ b/bsps/sparc/shared/pci/gr_leon4_n2x.c
> @@ -32,7 +32,6 @@
>   
>   #include <bsp.h>
>   #include <rtems/bspIo.h>
> -#include <rtems/score/isrlock.h> /* spin-lock */
>   #include <pci.h>
>   
>   #include <ambapp.h>
> @@ -45,15 +44,7 @@
>   
>   #include <bsp/gr_leon4_n2x.h>
>   
> -/* map via rtems_interrupt_lock_* API: */
> -#define SPIN_DECLARE(lock) RTEMS_INTERRUPT_LOCK_MEMBER(lock)
> -#define SPIN_INIT(lock, name) rtems_interrupt_lock_initialize(lock, name)
> -#define SPIN_LOCK(lock, level) rtems_interrupt_lock_acquire_isr(lock, &level)
> -#define SPIN_LOCK_IRQ(lock, level) rtems_interrupt_lock_acquire(lock, &level)
> -#define SPIN_UNLOCK(lock, level) rtems_interrupt_lock_release_isr(lock, &level)
> -#define SPIN_UNLOCK_IRQ(lock, level) rtems_interrupt_lock_release(lock, &level)
> -#define SPIN_IRQFLAGS(k) rtems_interrupt_lock_context k
> -#define SPIN_ISR_IRQFLAGS(k) SPIN_IRQFLAGS(k)
> +#include <grlib-impl.h>
>   
>   /* Determines which PCI address the AHB masters on the LEON-N2X board will
>    * access when accessing the AHB to PCI window, it should be set so that the
> diff --git a/bsps/sparc/shared/pci/gr_rasta_adcdac.c b/bsps/sparc/shared/pci/gr_rasta_adcdac.c
> index 4bd00730e1..5d26887ce2 100644
> --- a/bsps/sparc/shared/pci/gr_rasta_adcdac.c
> +++ b/bsps/sparc/shared/pci/gr_rasta_adcdac.c
> @@ -23,7 +23,6 @@
>   
>   #include <bsp.h>
>   #include <rtems/bspIo.h>
> -#include <rtems/score/isrlock.h> /* spin-lock */
>   #include <pci.h>
>   
>   #include <ambapp.h>
> @@ -36,15 +35,7 @@
>   
>   #include <bsp/gr_rasta_adcdac.h>
>   
> -/* map via rtems_interrupt_lock_* API: */
> -#define SPIN_DECLARE(lock) RTEMS_INTERRUPT_LOCK_MEMBER(lock)
> -#define SPIN_INIT(lock, name) rtems_interrupt_lock_initialize(lock, name)
> -#define SPIN_LOCK(lock, level) rtems_interrupt_lock_acquire_isr(lock, &level)
> -#define SPIN_LOCK_IRQ(lock, level) rtems_interrupt_lock_acquire(lock, &level)
> -#define SPIN_UNLOCK(lock, level) rtems_interrupt_lock_release_isr(lock, &level)
> -#define SPIN_UNLOCK_IRQ(lock, level) rtems_interrupt_lock_release(lock, &level)
> -#define SPIN_IRQFLAGS(k) rtems_interrupt_lock_context k
> -#define SPIN_ISR_IRQFLAGS(k) SPIN_IRQFLAGS(k)
> +#include <grlib-impl.h>
>   
>   /*#define DEBUG 1*/
>   
> diff --git a/bsps/sparc/shared/pci/gr_rasta_io.c b/bsps/sparc/shared/pci/gr_rasta_io.c
> index 02c8b5b572..904f926923 100644
> --- a/bsps/sparc/shared/pci/gr_rasta_io.c
> +++ b/bsps/sparc/shared/pci/gr_rasta_io.c
> @@ -23,7 +23,6 @@
>   
>   #include <bsp.h>
>   #include <rtems/bspIo.h>
> -#include <rtems/score/isrlock.h> /* spin-lock */
>   #include <pci.h>
>   
>   #include <ambapp.h>
> @@ -36,15 +35,7 @@
>   
>   #include <bsp/gr_rasta_io.h>
>   
> -/* map via rtems_interrupt_lock_* API: */
> -#define SPIN_DECLARE(lock) RTEMS_INTERRUPT_LOCK_MEMBER(lock)
> -#define SPIN_INIT(lock, name) rtems_interrupt_lock_initialize(lock, name)
> -#define SPIN_LOCK(lock, level) rtems_interrupt_lock_acquire_isr(lock, &level)
> -#define SPIN_LOCK_IRQ(lock, level) rtems_interrupt_lock_acquire(lock, &level)
> -#define SPIN_UNLOCK(lock, level) rtems_interrupt_lock_release_isr(lock, &level)
> -#define SPIN_UNLOCK_IRQ(lock, level) rtems_interrupt_lock_release(lock, &level)
> -#define SPIN_IRQFLAGS(k) rtems_interrupt_lock_context k
> -#define SPIN_ISR_IRQFLAGS(k) SPIN_IRQFLAGS(k)
> +#include <grlib-impl.h>
>   
>   /* Determines which PCI address the AHB masters will access, it should be
>    * set so that the masters can access the CPU RAM. Default is base of CPU RAM,
> diff --git a/bsps/sparc/shared/pci/gr_rasta_spw_router.c b/bsps/sparc/shared/pci/gr_rasta_spw_router.c
> index 194d0a9b99..7b911c5231 100644
> --- a/bsps/sparc/shared/pci/gr_rasta_spw_router.c
> +++ b/bsps/sparc/shared/pci/gr_rasta_spw_router.c
> @@ -21,7 +21,6 @@
>   
>   #include <bsp.h>
>   #include <rtems/bspIo.h>
> -#include <rtems/score/isrlock.h> /* spin-lock */
>   #include <pci.h>
>   
>   #include <ambapp.h>
> @@ -33,15 +32,7 @@
>   #include <bsp/genirq.h>
>   #include <bsp/gr_rasta_spw_router.h>
>   
> -/* map via rtems_interrupt_lock_* API: */
> -#define SPIN_DECLARE(lock) RTEMS_INTERRUPT_LOCK_MEMBER(lock)
> -#define SPIN_INIT(lock, name) rtems_interrupt_lock_initialize(lock, name)
> -#define SPIN_LOCK(lock, level) rtems_interrupt_lock_acquire_isr(lock, &level)
> -#define SPIN_LOCK_IRQ(lock, level) rtems_interrupt_lock_acquire(lock, &level)
> -#define SPIN_UNLOCK(lock, level) rtems_interrupt_lock_release_isr(lock, &level)
> -#define SPIN_UNLOCK_IRQ(lock, level) rtems_interrupt_lock_release(lock, &level)
> -#define SPIN_IRQFLAGS(k) rtems_interrupt_lock_context k
> -#define SPIN_ISR_IRQFLAGS(k) SPIN_IRQFLAGS(k)
> +#include <grlib-impl.h>
>   
>   /* Determines which PCI address the AHB masters will access, it should be
>    * set so that the masters can access the CPU RAM. Default is base of CPU RAM,
> diff --git a/bsps/sparc/shared/pci/gr_rasta_tmtc.c b/bsps/sparc/shared/pci/gr_rasta_tmtc.c
> index 7f49d1de1d..40f64fe7e2 100644
> --- a/bsps/sparc/shared/pci/gr_rasta_tmtc.c
> +++ b/bsps/sparc/shared/pci/gr_rasta_tmtc.c
> @@ -23,7 +23,6 @@
>   
>   #include <bsp.h>
>   #include <rtems/bspIo.h>
> -#include <rtems/score/isrlock.h> /* spin-lock */
>   #include <pci.h>
>   
>   #include <ambapp.h>
> @@ -36,15 +35,7 @@
>   
>   #include <bsp/gr_rasta_tmtc.h>
>   
> -/* map via rtems_interrupt_lock_* API: */
> -#define SPIN_DECLARE(lock) RTEMS_INTERRUPT_LOCK_MEMBER(lock)
> -#define SPIN_INIT(lock, name) rtems_interrupt_lock_initialize(lock, name)
> -#define SPIN_LOCK(lock, level) rtems_interrupt_lock_acquire_isr(lock, &level)
> -#define SPIN_LOCK_IRQ(lock, level) rtems_interrupt_lock_acquire(lock, &level)
> -#define SPIN_UNLOCK(lock, level) rtems_interrupt_lock_release_isr(lock, &level)
> -#define SPIN_UNLOCK_IRQ(lock, level) rtems_interrupt_lock_release(lock, &level)
> -#define SPIN_IRQFLAGS(k) rtems_interrupt_lock_context k
> -#define SPIN_ISR_IRQFLAGS(k) SPIN_IRQFLAGS(k)
> +#include <grlib-impl.h>
>   
>   /* Determines which PCI address the AHB masters will access, it should be
>    * set so that the masters can access the CPU RAM. Default is base of CPU RAM,
> diff --git a/bsps/sparc/shared/pci/gr_tmtc_1553.c b/bsps/sparc/shared/pci/gr_tmtc_1553.c
> index 4bbdaffb84..b2a478cc5c 100644
> --- a/bsps/sparc/shared/pci/gr_tmtc_1553.c
> +++ b/bsps/sparc/shared/pci/gr_tmtc_1553.c
> @@ -23,7 +23,6 @@
>   
>   #include <bsp.h>
>   #include <rtems/bspIo.h>
> -#include <rtems/score/isrlock.h> /* spin-lock */
>   #include <pci.h>
>   #include <pci/access.h>
>   
> @@ -37,15 +36,7 @@
>   
>   #include <bsp/gr_tmtc_1553.h>
>   
> -/* map via rtems_interrupt_lock_* API: */
> -#define SPIN_DECLARE(lock) RTEMS_INTERRUPT_LOCK_MEMBER(lock)
> -#define SPIN_INIT(lock, name) rtems_interrupt_lock_initialize(lock, name)
> -#define SPIN_LOCK(lock, level) rtems_interrupt_lock_acquire_isr(lock, &level)
> -#define SPIN_LOCK_IRQ(lock, level) rtems_interrupt_lock_acquire(lock, &level)
> -#define SPIN_UNLOCK(lock, level) rtems_interrupt_lock_release_isr(lock, &level)
> -#define SPIN_UNLOCK_IRQ(lock, level) rtems_interrupt_lock_release(lock, &level)
> -#define SPIN_IRQFLAGS(k) rtems_interrupt_lock_context k
> -#define SPIN_ISR_IRQFLAGS(k) SPIN_IRQFLAGS(k)
> +#include <grlib-impl.h>
>   
>   /*#define DEBUG 1 */
>   
> diff --git a/bsps/sparc/shared/pci/grpci2.c b/bsps/sparc/shared/pci/grpci2.c
> index 69aa938d97..2b141f68ba 100644
> --- a/bsps/sparc/shared/pci/grpci2.c
> +++ b/bsps/sparc/shared/pci/grpci2.c
> @@ -43,37 +43,7 @@
>   #include <drvmgr/pci_bus.h>
>   #include <bsp/grpci2.h>
>   
> -/* Use interrupt lock privmitives compatible with SMP defined in
> - * RTEMS 4.11.99 and higher.
> - */
> -#if (((__RTEMS_MAJOR__ << 16) | (__RTEMS_MINOR__ << 8) | __RTEMS_REVISION__) >= 0x040b63)
> -
> -/* map via rtems_interrupt_lock_* API: */
> -#define SPIN_DECLARE(lock) RTEMS_INTERRUPT_LOCK_MEMBER(lock)
> -#define SPIN_INIT(lock, name) rtems_interrupt_lock_initialize(lock, name)
> -#define SPIN_LOCK(lock, level) rtems_interrupt_lock_acquire_isr(lock, &level)
> -#define SPIN_LOCK_IRQ(lock, level) rtems_interrupt_lock_acquire(lock, &level)
> -#define SPIN_UNLOCK(lock, level) rtems_interrupt_lock_release_isr(lock, &level)
> -#define SPIN_UNLOCK_IRQ(lock, level) rtems_interrupt_lock_release(lock, &level)
> -#define SPIN_IRQFLAGS(k) rtems_interrupt_lock_context k
> -#define SPIN_ISR_IRQFLAGS(k) SPIN_IRQFLAGS(k)
> -
> -#else
> -
> -/* maintain single-core compatibility with older versions of RTEMS: */
> -#define SPIN_DECLARE(name)
> -#define SPIN_INIT(lock, name)
> -#define SPIN_LOCK(lock, level)
> -#define SPIN_LOCK_IRQ(lock, level) rtems_interrupt_disable(level)
> -#define SPIN_UNLOCK(lock, level)
> -#define SPIN_UNLOCK_IRQ(lock, level) rtems_interrupt_enable(level)
> -#define SPIN_IRQFLAGS(k) rtems_interrupt_level k
> -#define SPIN_ISR_IRQFLAGS(k)
> -
> -#ifdef RTEMS_SMP
> -#error SMP mode not compatible with these interrupt lock primitives
> -#endif
> -#endif
> +#include <grlib-impl.h>
>   
>   /* If defined to 1 - byte twisting is enabled by default */
>   #define DEFAULT_BT_ENABLED 0
> diff --git a/bsps/sparc/shared/pci/grpci2dma.c b/bsps/sparc/shared/pci/grpci2dma.c
> index d5f1f9942f..ad89128d88 100644
> --- a/bsps/sparc/shared/pci/grpci2dma.c
> +++ b/bsps/sparc/shared/pci/grpci2dma.c
> @@ -18,40 +18,10 @@
>   #include <bsp.h>
>   #include <bsp/grpci2dma.h>
>   
> +#include <grlib-impl.h>
> +
>   /* This driver has been prepared for SMP operation
>    */
> -/* Use interrupt lock privmitives compatible with SMP defined in
> - * RTEMS 4.11.99 and higher.
> - */
> -#if (((__RTEMS_MAJOR__ << 16) | (__RTEMS_MINOR__ << 8) | __RTEMS_REVISION__) >= 0x040b63)
> -
> -/* map via rtems_interrupt_lock_* API: */
> -#define SPIN_DECLARE(lock) RTEMS_INTERRUPT_LOCK_MEMBER(lock)
> -#define SPIN_INIT(lock, name) rtems_interrupt_lock_initialize(lock, name)
> -#define SPIN_LOCK(lock, level) rtems_interrupt_lock_acquire_isr(lock, &level)
> -#define SPIN_LOCK_IRQ(lock, level) rtems_interrupt_lock_acquire(lock, &level)
> -#define SPIN_UNLOCK(lock, level) rtems_interrupt_lock_release_isr(lock, &level)
> -#define SPIN_UNLOCK_IRQ(lock, level) rtems_interrupt_lock_release(lock, &level)
> -#define SPIN_IRQFLAGS(k) rtems_interrupt_lock_context k
> -#define SPIN_ISR_IRQFLAGS(k) SPIN_IRQFLAGS(k)
> -
> -#else
> -
> -/* maintain single-core compatibility with older versions of RTEMS: */
> -#define SPIN_DECLARE(name)
> -#define SPIN_INIT(lock, name)
> -#define SPIN_LOCK(lock, level)
> -#define SPIN_LOCK_IRQ(lock, level) rtems_interrupt_disable(level)
> -#define SPIN_UNLOCK(lock, level)
> -#define SPIN_UNLOCK_IRQ(lock, level) rtems_interrupt_enable(level)
> -#define SPIN_IRQFLAGS(k) rtems_interrupt_level k
> -#define SPIN_ISR_IRQFLAGS(k)
> -
> -#ifdef RTEMS_SMP
> -#error SMP mode not compatible with these interrupt lock primitives
> -#endif
> -
> -#endif
>   
>   /*#define STATIC*/
>   #define STATIC static
> diff --git a/bsps/sparc/shared/spw/grspw_pkt.c b/bsps/sparc/shared/spw/grspw_pkt.c
> index c109a25a6b..2f6dbdecfc 100644
> --- a/bsps/sparc/shared/spw/grspw_pkt.c
> +++ b/bsps/sparc/shared/spw/grspw_pkt.c
> @@ -28,40 +28,7 @@
>   #include <drvmgr/ambapp_bus.h>
>   #include <bsp/grspw_pkt.h>
>   
> -/* Use interrupt lock privmitives compatible with SMP defined in
> - * RTEMS 4.11.99 and higher.
> - */
> -#if (((__RTEMS_MAJOR__ << 16) | (__RTEMS_MINOR__ << 8) | __RTEMS_REVISION__) >= 0x040b63)
> -
> -#include <rtems/score/isrlock.h> /* spin-lock */
> -
> -/* map via ISR lock: */
> -#define SPIN_DECLARE(lock) ISR_LOCK_MEMBER(lock)
> -#define SPIN_INIT(lock, name) _ISR_lock_Initialize(lock, name)
> -#define SPIN_LOCK(lock, level) _ISR_lock_Acquire_inline(lock, &level)
> -#define SPIN_LOCK_IRQ(lock, level) _ISR_lock_ISR_disable_and_acquire(lock, &level)
> -#define SPIN_UNLOCK(lock, level) _ISR_lock_Release_inline(lock, &level)
> -#define SPIN_UNLOCK_IRQ(lock, level) _ISR_lock_Release_and_ISR_enable(lock, &level)
> -#define SPIN_IRQFLAGS(k) ISR_lock_Context k
> -#define SPIN_ISR_IRQFLAGS(k) SPIN_IRQFLAGS(k)
> -
> -#else
> -
> -/* maintain single-core compatibility with older versions of RTEMS: */
> -#define SPIN_DECLARE(name)
> -#define SPIN_INIT(lock, name)
> -#define SPIN_LOCK(lock, level)
> -#define SPIN_LOCK_IRQ(lock, level) rtems_interrupt_disable(level)
> -#define SPIN_UNLOCK(lock, level)
> -#define SPIN_UNLOCK_IRQ(lock, level) rtems_interrupt_enable(level)
> -#define SPIN_IRQFLAGS(k) rtems_interrupt_level k
> -#define SPIN_ISR_IRQFLAGS(k)
> -
> -#ifdef RTEMS_SMP
> -#error SMP mode not compatible with these interrupt lock primitives
> -#endif
> -
> -#endif
> +#include <grlib-impl.h>
>   
>   /*#define STATIC*/
>   #define STATIC static
> diff --git a/bsps/sparc/shared/spw/grspw_router.c b/bsps/sparc/shared/spw/grspw_router.c
> index d95c351443..bec23912a7 100644
> --- a/bsps/sparc/shared/spw/grspw_router.c
> +++ b/bsps/sparc/shared/spw/grspw_router.c
> @@ -13,12 +13,13 @@
>   #include <rtems/bspIo.h>
>   #include <stdio.h>
>   #include <bsp.h>
> -#include <rtems/bspIo.h> /* printk */
>   
>   #include <drvmgr/drvmgr.h>
>   #include <drvmgr/ambapp_bus.h>
>   #include <bsp/grspw_router.h>
>   
> +#include <grlib-impl.h>
> +
>   //#define STATIC
>   #define STATIC static
>   
> @@ -34,56 +35,6 @@
>   
>   #define THREAD_SAFE 1
>   
> -/* Use interrupt lock privmitives compatible with SMP defined in
> - * RTEMS 4.11.99 and higher.
> - */
> -#if (((__RTEMS_MAJOR__ << 16) | (__RTEMS_MINOR__ << 8) | __RTEMS_REVISION__) >= 0x040b63)
> -
> -#ifdef THREAD_SAFE
> -/* map via rtems_interrupt_lock_* API: */
> -#define SPIN_DECLARE(lock) RTEMS_INTERRUPT_LOCK_MEMBER(lock)
> -#define SPIN_INIT(lock, name) rtems_interrupt_lock_initialize(lock, name)
> -#define SPIN_LOCK(lock, level) rtems_interrupt_lock_acquire_isr(lock, &level)
> -#define SPIN_LOCK_IRQ(lock, level) rtems_interrupt_lock_acquire(lock, &level)
> -#define SPIN_UNLOCK(lock, level) rtems_interrupt_lock_release_isr(lock, &level)
> -#define SPIN_UNLOCK_IRQ(lock, level) rtems_interrupt_lock_release(lock, &level)
> -#define SPIN_IRQFLAGS(k) rtems_interrupt_lock_context k
> -#define SPIN_ISR_IRQFLAGS(k) SPIN_IRQFLAGS(k)
> -#define SPIN_FREE(lock) rtems_interrupt_lock_destroy(lock)
> -#else
> -#define SPIN_DECLARE(lock)
> -#define SPIN_INIT(lock, name)
> -#define SPIN_LOCK(lock, level)
> -#define SPIN_LOCK_IRQ(lock, level)
> -#define SPIN_UNLOCK(lock, level)
> -#define SPIN_UNLOCK_IRQ(lock, level)
> -#define SPIN_IRQFLAGS(k)
> -#define SPIN_ISR_IRQFLAGS(k)
> -#define SPIN_FREE(lock)
> -#endif
> -
> -#else
> -
> -#ifdef THREAD_SAFE
> -#error THREAD SAFE operation not supported on this RTEMS version
> -#else
> -#define SPIN_DECLARE(lock)
> -#define SPIN_INIT(lock, name)
> -#define SPIN_LOCK(lock, level)
> -#define SPIN_LOCK_IRQ(lock, level)
> -#define SPIN_UNLOCK(lock, level)
> -#define SPIN_UNLOCK_IRQ(lock, level)
> -#define SPIN_IRQFLAGS(k)
> -#define SPIN_ISR_IRQFLAGS(k)
> -#define SPIN_FREE(lock)
> -#endif
> -
> -#ifdef RTEMS_SMP
> -#error SMP mode not compatible with these interrupt lock primitives
> -#endif
> -
> -#endif
> -
>   #define REG_WRITE(addr, val) (*(volatile unsigned int *)(addr) = (unsigned int)(val))
>   #define REG_READ(addr) (*(volatile unsigned int *)(addr))
>   
> diff --git a/bsps/sparc/shared/spw/spwtdp.c b/bsps/sparc/shared/spw/spwtdp.c
> index cf5b3af946..ca1e73de01 100644
> --- a/bsps/sparc/shared/spw/spwtdp.c
> +++ b/bsps/sparc/shared/spw/spwtdp.c
> @@ -21,38 +21,7 @@
>   #include <bsp.h>
>   #include <bsp/spwtdp.h>
>   
> -/* Use interrupt lock privmitives compatible with SMP defined in
> - * RTEMS 4.11.99 and higher.
> - */
> -#if (((__RTEMS_MAJOR__ << 16) | (__RTEMS_MINOR__ << 8) | __RTEMS_REVISION__) >= 0x040b63)
> -
> -/* map via rtems_interrupt_lock_* API: */
> -#define SPIN_DECLARE(lock) RTEMS_INTERRUPT_LOCK_MEMBER(lock)
> -#define SPIN_INIT(lock, name) rtems_interrupt_lock_initialize(lock, name)
> -#define SPIN_LOCK(lock, level) rtems_interrupt_lock_acquire_isr(lock, &level)
> -#define SPIN_LOCK_IRQ(lock, level) rtems_interrupt_lock_acquire(lock, &level)
> -#define SPIN_UNLOCK(lock, level) rtems_interrupt_lock_release_isr(lock, &level)
> -#define SPIN_UNLOCK_IRQ(lock, level) rtems_interrupt_lock_release(lock, &level)
> -#define SPIN_IRQFLAGS(k) rtems_interrupt_lock_context k
> -#define SPIN_ISR_IRQFLAGS(k) SPIN_IRQFLAGS(k)
> -
> -#else
> -
> -/* maintain single-core compatibility with older versions of RTEMS: */
> -#define SPIN_DECLARE(name)
> -#define SPIN_INIT(lock, name)
> -#define SPIN_LOCK(lock, level)
> -#define SPIN_LOCK_IRQ(lock, level) rtems_interrupt_disable(level)
> -#define SPIN_UNLOCK(lock, level)
> -#define SPIN_UNLOCK_IRQ(lock, level) rtems_interrupt_enable(level)
> -#define SPIN_IRQFLAGS(k) rtems_interrupt_level k
> -#define SPIN_ISR_IRQFLAGS(k)
> -
> -#ifdef RTEMS_SMP
> -#error SMP mode not compatible with these interrupt lock primitives
> -#endif
> -
> -#endif
> +#include <grlib-impl.h>
>   
>   /*#define STATIC*/
>   #define STATIC static
> diff --git a/bsps/sparc/shared/tmtc/grtc.c b/bsps/sparc/shared/tmtc/grtc.c
> index c01d7d8391..7d5e21c9d5 100644
> --- a/bsps/sparc/shared/tmtc/grtc.c
> +++ b/bsps/sparc/shared/tmtc/grtc.c
> @@ -23,20 +23,7 @@
>   #include <ambapp.h>
>   #include <bsp/grtc.h>
>   
> -/* map via rtems_interrupt_lock_* API: */
> -#define SPIN_DECLARE(lock) RTEMS_INTERRUPT_LOCK_MEMBER(lock)
> -#define SPIN_INIT(lock, name) rtems_interrupt_lock_initialize(lock, name)
> -#define SPIN_LOCK(lock, level) rtems_interrupt_lock_acquire_isr(lock, &level)
> -#define SPIN_LOCK_IRQ(lock, level) rtems_interrupt_lock_acquire(lock, &level)
> -#define SPIN_UNLOCK(lock, level) rtems_interrupt_lock_release_isr(lock, &level)
> -#define SPIN_UNLOCK_IRQ(lock, level) rtems_interrupt_lock_release(lock, &level)
> -#define SPIN_IRQFLAGS(k) rtems_interrupt_lock_context k
> -#define SPIN_ISR_IRQFLAGS(k) SPIN_IRQFLAGS(k)
> -
> -/* turn on/off local CPU's interrupt to ensure HW timing - not SMP safe. */
> -#define IRQ_LOCAL_DECLARE(_level) rtems_interrupt_level _level
> -#define IRQ_LOCAL_DISABLE(_level) rtems_interrupt_local_disable(_level)
> -#define IRQ_LOCAL_ENABLE(_level) rtems_interrupt_local_enable(_level)
> +#include <grlib-impl.h>
>   
>   /*
>   #define DEBUG
> diff --git a/bsps/sparc/shared/tmtc/grtm.c b/bsps/sparc/shared/tmtc/grtm.c
> index bd7d98f972..31d0d7e22d 100644
> --- a/bsps/sparc/shared/tmtc/grtm.c
> +++ b/bsps/sparc/shared/tmtc/grtm.c
> @@ -23,15 +23,7 @@
>   #include <drvmgr/ambapp_bus.h>
>   #include <bsp/grtm.h>
>   
> -/* map via rtems_interrupt_lock_* API: */
> -#define SPIN_DECLARE(lock) RTEMS_INTERRUPT_LOCK_MEMBER(lock)
> -#define SPIN_INIT(lock, name) rtems_interrupt_lock_initialize(lock, name)
> -#define SPIN_LOCK(lock, level) rtems_interrupt_lock_acquire_isr(lock, &level)
> -#define SPIN_LOCK_IRQ(lock, level) rtems_interrupt_lock_acquire(lock, &level)
> -#define SPIN_UNLOCK(lock, level) rtems_interrupt_lock_release_isr(lock, &level)
> -#define SPIN_UNLOCK_IRQ(lock, level) rtems_interrupt_lock_release(lock, &level)
> -#define SPIN_IRQFLAGS(k) rtems_interrupt_lock_context k
> -#define SPIN_ISR_IRQFLAGS(k) SPIN_IRQFLAGS(k)
> +#include <grlib-impl.h>
>   
>   /*
>   #define DEBUG



More information about the devel mailing list