>From 9644a4432f7c2a5df88c8f424b8a57ee16b6b112 Mon Sep 17 00:00:00 2001
From: Jiri Gaisler <j...@gaisler.se>
Date: Fri, 28 Dec 2018 11:28:39 -0400
Subject: [PATCH 4/5] Fixup grlib files to compile on RISCV

---
 bsps/headers.am                               | 65 +++++++++++++++++++
 bsps/include/grlib/apbuart.h                  |  1 +
 bsps/include/grlib/grlib_impl.h               | 54 +++++++++++++++
 bsps/include/grlib/grspw.h                    |  2 +-
 bsps/riscv/riscv/include/bsp.h                |  1 +
 bsps/shared/grlib/1553/b1553brm.c             | 10 +--
 bsps/shared/grlib/1553/b1553rt.c              | 11 +---
 bsps/shared/grlib/ascs/grascs.c               |  7 +-
 bsps/shared/grlib/can/grcan.c                 | 27 +-------
 bsps/shared/grlib/can/satcan.c                |  6 +-
 bsps/shared/grlib/drvmgr/ambapp_bus_grlib.c   |  7 +-
 bsps/shared/grlib/pci/gr_701.c                |  2 +-
 bsps/shared/grlib/pci/gr_rasta_adcdac.c       |  2 +-
 bsps/shared/grlib/pci/gr_rasta_io.c           |  2 +-
 bsps/shared/grlib/pci/gr_rasta_spw_router.c   |  2 +-
 bsps/shared/grlib/pci/gr_rasta_tmtc.c         |  2 +-
 bsps/shared/grlib/pci/gr_tmtc_1553.c          |  2 +-
 bsps/shared/grlib/pci/grpci2dma.c             |  2 +-
 bsps/shared/grlib/slink/grslink.c             |  7 +-
 bsps/shared/grlib/spw/grspw.c                 | 33 ++--------
 bsps/shared/grlib/spw/grspw_pkt.c             |  2 +-
 bsps/shared/grlib/uart/apbuart_cons.c         | 32 ++++-----
 cpukit/score/cpu/riscv/headers.am             |  2 +
 .../score/cpu/riscv/include/libcpu/access.h   | 50 ++++++++++++++
 .../cpu/riscv/include/libcpu/byteorder.h      | 31 +++++++++
 25 files changed, 259 insertions(+), 103 deletions(-)
 create mode 100644 cpukit/score/cpu/riscv/include/libcpu/access.h
 create mode 100644 cpukit/score/cpu/riscv/include/libcpu/byteorder.h

diff --git a/bsps/headers.am b/bsps/headers.am
index e217b9b965..e62d2ba656 100644
--- a/bsps/headers.am
+++ b/bsps/headers.am
@@ -23,6 +23,71 @@ include_bsp_HEADERS += ../../bsps/include/bsp/u-boot.h
 include_bsp_HEADERS += ../../bsps/include/bsp/uart-output-char.h
 include_bsp_HEADERS += ../../bsps/include/bsp/utility.h
 
+include_grlibdir = $(includedir)/grlib
+include_grlib_HEADERS =
+include_grlib_HEADERS += ../../bsps/include/grlib/ahbstat.h
+include_grlib_HEADERS += ../../bsps/include/grlib/ambapp.h
+include_grlib_HEADERS += ../../bsps/include/grlib/ambapp_bus.h
+include_grlib_HEADERS += ../../bsps/include/grlib/ambapp_bus_grlib.h
+include_grlib_HEADERS += ../../bsps/include/grlib/ambapp_ids.h
+include_grlib_HEADERS += ../../bsps/include/grlib/apbuart.h
+include_grlib_HEADERS += ../../bsps/include/grlib/apbuart_cons.h
+include_grlib_HEADERS += ../../bsps/include/grlib/apbuart_termios.h
+include_grlib_HEADERS += ../../bsps/include/grlib/b1553brm.h
+include_grlib_HEADERS += ../../bsps/include/grlib/b1553rt.h
+include_grlib_HEADERS += ../../bsps/include/grlib/bspcommon.h
+include_grlib_HEADERS += ../../bsps/include/grlib/canmux.h
+include_grlib_HEADERS += ../../bsps/include/grlib/cons.h
+include_grlib_HEADERS += ../../bsps/include/grlib/debug_defs.h
+include_grlib_HEADERS += ../../bsps/include/grlib/genirq.h
+include_grlib_HEADERS += ../../bsps/include/grlib/gnatcommon.h
+include_grlib_HEADERS += ../../bsps/include/grlib/gpiolib.h
+include_grlib_HEADERS += ../../bsps/include/grlib/gptimer.h
+include_grlib_HEADERS += ../../bsps/include/grlib/gr1553b.h
+include_grlib_HEADERS += ../../bsps/include/grlib/gr1553bc.h
+include_grlib_HEADERS += ../../bsps/include/grlib/gr1553bc_list.h
+include_grlib_HEADERS += ../../bsps/include/grlib/gr1553bm.h
+include_grlib_HEADERS += ../../bsps/include/grlib/gr1553rt.h
+include_grlib_HEADERS += ../../bsps/include/grlib/gr_701.h
+include_grlib_HEADERS += ../../bsps/include/grlib/gr_cpci_gr740.h
+include_grlib_HEADERS += ../../bsps/include/grlib/gr_rasta_adcdac.h
+include_grlib_HEADERS += ../../bsps/include/grlib/gr_rasta_io.h
+include_grlib_HEADERS += ../../bsps/include/grlib/gr_rasta_spw_router.h
+include_grlib_HEADERS += ../../bsps/include/grlib/gr_rasta_tmtc.h
+include_grlib_HEADERS += ../../bsps/include/grlib/gr_tmtc_1553.h
+include_grlib_HEADERS += ../../bsps/include/grlib/gradcdac.h
+include_grlib_HEADERS += ../../bsps/include/grlib/grascs.h
+include_grlib_HEADERS += ../../bsps/include/grlib/grcan.h
+include_grlib_HEADERS += ../../bsps/include/grlib/grctm.h
+include_grlib_HEADERS += ../../bsps/include/grlib/greth.h
+include_grlib_HEADERS += ../../bsps/include/grlib/grgpio.h
+include_grlib_HEADERS += ../../bsps/include/grlib/griommu.h
+include_grlib_HEADERS += ../../bsps/include/grlib/grlib.h
+include_grlib_HEADERS += ../../bsps/include/grlib/grlib_impl.h
+include_grlib_HEADERS += ../../bsps/include/grlib/grpci.h
+include_grlib_HEADERS += ../../bsps/include/grlib/grpci2.h
+include_grlib_HEADERS += ../../bsps/include/grlib/grpci2dma.h
+include_grlib_HEADERS += ../../bsps/include/grlib/grpwm.h
+include_grlib_HEADERS += ../../bsps/include/grlib/grslink.h
+include_grlib_HEADERS += ../../bsps/include/grlib/grspw.h
+include_grlib_HEADERS += ../../bsps/include/grlib/grspw_pkt.h
+include_grlib_HEADERS += ../../bsps/include/grlib/grspw_router.h
+include_grlib_HEADERS += ../../bsps/include/grlib/grtc.h
+include_grlib_HEADERS += ../../bsps/include/grlib/grtm.h
+include_grlib_HEADERS += ../../bsps/include/grlib/i2cmst.h
+include_grlib_HEADERS += ../../bsps/include/grlib/l2c.h
+include_grlib_HEADERS += ../../bsps/include/grlib/l4stat.h
+include_grlib_HEADERS += ../../bsps/include/grlib/mctrl.h
+include_grlib_HEADERS += ../../bsps/include/grlib/memscrub.h
+include_grlib_HEADERS += ../../bsps/include/grlib/network_interface_add.h
+include_grlib_HEADERS += ../../bsps/include/grlib/occan.h
+include_grlib_HEADERS += ../../bsps/include/grlib/pcif.h
+include_grlib_HEADERS += ../../bsps/include/grlib/satcan.h
+include_grlib_HEADERS += ../../bsps/include/grlib/spictrl.h
+include_grlib_HEADERS += ../../bsps/include/grlib/spwcuc.h
+include_grlib_HEADERS += ../../bsps/include/grlib/spwtdp.h
+include_grlib_HEADERS += ../../bsps/include/grlib/tlib.h
+
 include_libchipdir = $(includedir)/libchip
 include_libchip_HEADERS =
 include_libchip_HEADERS += ../../bsps/include/libchip/am29lv160.h
diff --git a/bsps/include/grlib/apbuart.h b/bsps/include/grlib/apbuart.h
index d30ad0bcef..6a89bb949a 100644
--- a/bsps/include/grlib/apbuart.h
+++ b/bsps/include/grlib/apbuart.h
@@ -37,6 +37,7 @@ extern "C" {
 #define APBUART_CTRL_EC 0x100
 #define APBUART_CTRL_TF 0x200
 #define APBUART_CTRL_RF 0x400
+#define APBUART_CTRL_DB 0x800
 #define APBUART_CTRL_BI 0x1000
 #define APBUART_CTRL_DI 0x2000
 #define APBUART_CTRL_FA 0x80000000
diff --git a/bsps/include/grlib/grlib_impl.h b/bsps/include/grlib/grlib_impl.h
index 755f635911..f1260671e0 100644
--- a/bsps/include/grlib/grlib_impl.h
+++ b/bsps/include/grlib/grlib_impl.h
@@ -90,6 +90,60 @@ RTEMS_INLINE_ROUTINE void *grlib_calloc(size_t nelem, size_t elsize)
 
 #endif
 
+#ifdef __sparc
+
+RTEMS_INLINE_ROUTINE unsigned char grlib_read_uncached8(unsigned int address)
+{
+       unsigned char tmp;
+       __asm__ (" lduba [%1]1, %0 "
+           : "=r"(tmp)
+           : "r"(address)
+       );
+       return tmp;
+}
+
+RTEMS_INLINE_ROUTINE unsigned short grlib_read_uncached16(unsigned int addr) {
+       unsigned short tmp;
+       __asm__ (" lduha [%1]1, %0 "
+         : "=r"(tmp)
+         : "r"(addr)
+       );
+       return tmp;
+}
+
+
+RTEMS_INLINE_ROUTINE unsigned int grlib_read_uncached32(unsigned int address)
+{
+	unsigned int tmp;
+	__asm__ (" lda [%1]1, %0 "
+	        : "=r"(tmp)
+	        : "r"(address)
+	);
+	return tmp;
+}
+#else
+
+static unsigned char __inline__ grlib_read_uncached8(unsigned int address)
+{
+	unsigned char tmp = (*(volatile unsigned char *)(address));
+	return tmp;
+}
+
+static __inline__ unsigned short grlib_read_uncached16(unsigned int address) {
+	unsigned short tmp = (*(volatile unsigned short *)(address));
+	return tmp;
+}
+
+RTEMS_INLINE_ROUTINE unsigned int grlib_read_uncached32(unsigned int address)
+{
+	unsigned int tmp = (*(volatile unsigned int *)(address));
+	return tmp;
+}
+
+#endif
+
+extern struct ambapp_bus ambapp_plb;
+
 #ifdef __cplusplus
 }
 #endif
diff --git a/bsps/include/grlib/grspw.h b/bsps/include/grlib/grspw.h
index 3270e8a5a2..70a9e0b100 100644
--- a/bsps/include/grlib/grspw.h
+++ b/bsps/include/grlib/grspw.h
@@ -18,7 +18,7 @@
 #ifndef __GRSPW_H__
 #define __GRSPW_H__
 
-#include <ambapp.h>
+#include <grlib/ambapp.h>
 
 #ifdef __cplusplus
 extern "C" {
diff --git a/bsps/riscv/riscv/include/bsp.h b/bsps/riscv/riscv/include/bsp.h
index d8d0347da8..6d6046d195 100644
--- a/bsps/riscv/riscv/include/bsp.h
+++ b/bsps/riscv/riscv/include/bsp.h
@@ -34,6 +34,7 @@
 #include <rtems.h>
 #include <rtems/clockdrv.h>
 #include <rtems/console.h>
+#include <rtems/irq-extension.h>
 
 #include <bspopts.h>
 #include <bsp/default-initial-extension.h>
diff --git a/bsps/shared/grlib/1553/b1553brm.c b/bsps/shared/grlib/1553/b1553brm.c
index 5575abb525..57ef70126b 100644
--- a/bsps/shared/grlib/1553/b1553brm.c
+++ b/bsps/shared/grlib/1553/b1553brm.c
@@ -59,15 +59,7 @@
 #endif
 
 #define READ_REG(address) (*(volatile unsigned int *)address)
-#define READ_DMA(address) _BRM_REG_READ16((unsigned int)address)
-static __inline__ unsigned short _BRM_REG_READ16(unsigned int addr) {
-	unsigned short tmp;
-	__asm__ (" lduha [%1]1, %0 "
-	  : "=r"(tmp)
-	  : "r"(addr)
-	);
-	return tmp;
-}
+#define READ_DMA(address) grlib_read_uncached16((unsigned int)address)
 
 static rtems_device_driver brm_initialize(rtems_device_major_number major, rtems_device_minor_number minor, void *arg);
 static rtems_device_driver brm_open(rtems_device_major_number major, rtems_device_minor_number minor, void *arg);
diff --git a/bsps/shared/grlib/1553/b1553rt.c b/bsps/shared/grlib/1553/b1553rt.c
index 35afd901c8..d7257e461f 100644
--- a/bsps/shared/grlib/1553/b1553rt.c
+++ b/bsps/shared/grlib/1553/b1553rt.c
@@ -52,16 +52,7 @@
 #define FUNCDBG(x...) 
 #endif
 
-#define READ_DMA(address) _READ16((unsigned int)address)
-
-static __inline__ unsigned short _READ16(unsigned int addr) {
-    unsigned short tmp;
-    asm(" lduha [%1]1, %0 "
-        : "=r"(tmp)
-        : "r"(addr)
-	);
-    return tmp;
-}
+#define READ_DMA(address) grlib_read_uncached16((unsigned int)address)
 
 static rtems_device_driver rt_initialize(rtems_device_major_number major, rtems_device_minor_number minor, void *arg);
 static rtems_device_driver rt_open(rtems_device_major_number major, rtems_device_minor_number minor, void *arg);
diff --git a/bsps/shared/grlib/ascs/grascs.c b/bsps/shared/grlib/ascs/grascs.c
index 8d3d1b4285..79acb8a3c6 100644
--- a/bsps/shared/grlib/ascs/grascs.c
+++ b/bsps/shared/grlib/ascs/grascs.c
@@ -13,6 +13,7 @@
 #include <grlib/ambapp.h>
 #include <grlib/grascs.h>
 
+#include <grlib/grlib.h>
 #include <grlib/grlib_impl.h>
 
 #ifndef GAISLER_ASCS
@@ -129,7 +130,7 @@ static int ASCS_get_sysfreq(void) {
                 appropriate bits in the core's STS register and releases
 		the associated semaphore
 */
-static rtems_isr ASCS_irqhandler(rtems_vector_number v) {
+static rtems_isr ASCS_irqhandler(void *v) {
 
   if(cfg->regs->sts & GRASCS_STS_TCDONE) {
     /* Clear TC done bit */
@@ -270,7 +271,9 @@ int ASCS_init(void) {
     GRASCS_CMD_TCDONE | GRASCS_CMD_TMDONE;
 
   /* Register interrupt routine */
-  set_vector(ASCS_irqhandler,irq+0x10,2);
+  rtems_interrupt_handler_install(irq, "grascs",
+		  RTEMS_INTERRUPT_SHARED,
+		  ASCS_irqhandler, NULL);
   
   return 0;
 
diff --git a/bsps/shared/grlib/can/grcan.c b/bsps/shared/grlib/can/grcan.c
index 55154d823a..d69d99d85a 100644
--- a/bsps/shared/grlib/can/grcan.c
+++ b/bsps/shared/grlib/can/grcan.c
@@ -165,40 +165,19 @@ static void grcan_hw_sync(
 static void grcan_interrupt(void *arg);
 
 #ifdef GRCAN_REG_BYPASS_CACHE
-#define READ_REG(address) _grcan_read_nocache((unsigned int)(address))
+#define READ_REG(address) grlib_read_uncached32((unsigned int)(address))
 #else
 #define READ_REG(address) (*(volatile unsigned int *)(address))
 #endif
 
 #ifdef GRCAN_DMA_BYPASS_CACHE
-#define READ_DMA_WORD(address) _grcan_read_nocache((unsigned int)(address))
-#define READ_DMA_BYTE(address) _grcan_read_nocache_byte((unsigned int)(address))
-static unsigned char __inline__ _grcan_read_nocache_byte(unsigned int address)
-{
-	unsigned char tmp;
-	__asm__ (" lduba [%1]1, %0 "
-	    : "=r"(tmp)
-	    : "r"(address)
-	);
-	return tmp;
-}
+#define READ_DMA_WORD(address) grlib_read_uncached32((unsigned int)(address))
+#define READ_DMA_BYTE(address) grlib_read_uncached8((unsigned int)(address))
 #else
 #define READ_DMA_WORD(address) (*(volatile unsigned int *)(address))
 #define READ_DMA_BYTE(address) (*(volatile unsigned char *)(address))
 #endif
 
-#if defined(GRCAN_REG_BYPASS_CACHE) || defined(GRCAN_DMA_BYPASS_CACHE)
-static unsigned int __inline__ _grcan_read_nocache(unsigned int address)
-{
-	unsigned int tmp;
-	__asm__ (" lda [%1]1, %0 "
-	        : "=r"(tmp)
-	        : "r"(address)
-	);
-	return tmp;
-}
-#endif
-
 #define NELEM(a) ((int) (sizeof (a) / sizeof (a[0])))
 
 static int grcan_count = 0;
diff --git a/bsps/shared/grlib/can/satcan.c b/bsps/shared/grlib/can/satcan.c
index c6d58aaed4..ff54128332 100644
--- a/bsps/shared/grlib/can/satcan.c
+++ b/bsps/shared/grlib/can/satcan.c
@@ -152,7 +152,7 @@ static void almalloc(unsigned char **alptr, void **ptr, int sz)
   *alptr = (unsigned char *) (((int)*ptr+sz) & ~(sz-1));
 }
 
-static rtems_isr satcan_interrupt_handler(rtems_vector_number v)
+static rtems_isr satcan_interrupt_handler(void *v)
 {
 	unsigned int irq;
 	unsigned int fifo;
@@ -665,7 +665,9 @@ static rtems_device_driver satcan_initialize(rtems_device_major_number major, rt
 	priv->dmamode = SATCAN_DMA_MODE_SYSTEM;
 
 	/* Register interrupt handler */
-	set_vector(satcan_interrupt_handler, d.irq+0x10, 2);
+	rtems_interrupt_handler_install(d.irq, "satcan",
+			RTEMS_INTERRUPT_SHARED,
+			satcan_interrupt_handler, NULL);
 
 	return RTEMS_SUCCESSFUL;
 }
diff --git a/bsps/shared/grlib/drvmgr/ambapp_bus_grlib.c b/bsps/shared/grlib/drvmgr/ambapp_bus_grlib.c
index 5eb51d0944..fbbe5fa9bb 100644
--- a/bsps/shared/grlib/drvmgr/ambapp_bus_grlib.c
+++ b/bsps/shared/grlib/drvmgr/ambapp_bus_grlib.c
@@ -18,7 +18,7 @@
 #include <libcpu/access.h>
 
 #include <grlib/ambapp_bus.h>
-#include <drvmgr/ambapp_bus_grlib.h>
+#include <grlib/ambapp_bus_grlib.h>
 #include <grlib/genirq.h>
 
 #include <bsp.h>
@@ -188,7 +188,8 @@ static int ambapp_grlib_int_register
 	void *arg
 	)
 {
-	return BSP_shared_interrupt_register(irq, info, isr, arg);
+	return rtems_interrupt_handler_install(irq, info,
+			RTEMS_INTERRUPT_SHARED, isr, arg);
 }
 
 static int ambapp_grlib_int_unregister
@@ -199,7 +200,7 @@ static int ambapp_grlib_int_unregister
 	void *arg
 	)
 {
-	return BSP_shared_interrupt_unregister(irq, isr, arg);
+	return rtems_interrupt_handler_remove(irq, isr, arg);
 }
 
 static int ambapp_grlib_int_clear
diff --git a/bsps/shared/grlib/pci/gr_701.c b/bsps/shared/grlib/pci/gr_701.c
index 5c88e59082..c9ac0db0f2 100644
--- a/bsps/shared/grlib/pci/gr_701.c
+++ b/bsps/shared/grlib/pci/gr_701.c
@@ -33,7 +33,7 @@
 #include <drvmgr/drvmgr.h>
 #include <grlib/ambapp_bus.h>
 #include <drvmgr/pci_bus.h>
-#include <drvmgr/bspcommon.h>
+#include <grlib/bspcommon.h>
 #include <grlib/genirq.h>
 
 #include <grlib/gr_701.h>
diff --git a/bsps/shared/grlib/pci/gr_rasta_adcdac.c b/bsps/shared/grlib/pci/gr_rasta_adcdac.c
index 8e3c7920e4..12e35acbc5 100644
--- a/bsps/shared/grlib/pci/gr_rasta_adcdac.c
+++ b/bsps/shared/grlib/pci/gr_rasta_adcdac.c
@@ -31,7 +31,7 @@
 #include <drvmgr/drvmgr.h>
 #include <grlib/ambapp_bus.h>
 #include <drvmgr/pci_bus.h>
-#include <drvmgr/bspcommon.h>
+#include <grlib/bspcommon.h>
 #include <grlib/genirq.h>
 
 #include <grlib/gr_rasta_adcdac.h>
diff --git a/bsps/shared/grlib/pci/gr_rasta_io.c b/bsps/shared/grlib/pci/gr_rasta_io.c
index fbeb1ffd5c..f4c9d50a7b 100644
--- a/bsps/shared/grlib/pci/gr_rasta_io.c
+++ b/bsps/shared/grlib/pci/gr_rasta_io.c
@@ -31,7 +31,7 @@
 #include <drvmgr/drvmgr.h>
 #include <grlib/ambapp_bus.h>
 #include <drvmgr/pci_bus.h>
-#include <drvmgr/bspcommon.h>
+#include <grlib/bspcommon.h>
 #include <grlib/genirq.h>
 
 #include <grlib/gr_rasta_io.h>
diff --git a/bsps/shared/grlib/pci/gr_rasta_spw_router.c b/bsps/shared/grlib/pci/gr_rasta_spw_router.c
index 51dc908687..6efbaa463d 100644
--- a/bsps/shared/grlib/pci/gr_rasta_spw_router.c
+++ b/bsps/shared/grlib/pci/gr_rasta_spw_router.c
@@ -29,7 +29,7 @@
 #include <drvmgr/drvmgr.h>
 #include <grlib/ambapp_bus.h>
 #include <drvmgr/pci_bus.h>
-#include <drvmgr/bspcommon.h>
+#include <grlib/bspcommon.h>
 #include <grlib/genirq.h>
 #include <grlib/gr_rasta_spw_router.h>
 
diff --git a/bsps/shared/grlib/pci/gr_rasta_tmtc.c b/bsps/shared/grlib/pci/gr_rasta_tmtc.c
index 3f09b4150f..bef2927926 100644
--- a/bsps/shared/grlib/pci/gr_rasta_tmtc.c
+++ b/bsps/shared/grlib/pci/gr_rasta_tmtc.c
@@ -31,7 +31,7 @@
 #include <drvmgr/drvmgr.h>
 #include <grlib/ambapp_bus.h>
 #include <drvmgr/pci_bus.h>
-#include <drvmgr/bspcommon.h>
+#include <grlib/bspcommon.h>
 #include <grlib/genirq.h>
 
 #include <grlib/gr_rasta_tmtc.h>
diff --git a/bsps/shared/grlib/pci/gr_tmtc_1553.c b/bsps/shared/grlib/pci/gr_tmtc_1553.c
index 581d6d240f..ce02b8a256 100644
--- a/bsps/shared/grlib/pci/gr_tmtc_1553.c
+++ b/bsps/shared/grlib/pci/gr_tmtc_1553.c
@@ -32,7 +32,7 @@
 #include <drvmgr/drvmgr.h>
 #include <grlib/ambapp_bus.h>
 #include <drvmgr/pci_bus.h>
-#include <drvmgr/bspcommon.h>
+#include <grlib/bspcommon.h>
 #include <grlib/genirq.h>
 
 #include <grlib/gr_tmtc_1553.h>
diff --git a/bsps/shared/grlib/pci/grpci2dma.c b/bsps/shared/grlib/pci/grpci2dma.c
index 7e39ca691d..cb41d48966 100644
--- a/bsps/shared/grlib/pci/grpci2dma.c
+++ b/bsps/shared/grlib/pci/grpci2dma.c
@@ -98,7 +98,7 @@
 /* Memory and HW Registers Access routines. All 32-bit access routines */
 #define BD_WRITE(addr, val) (*(volatile unsigned int *)(addr) = (unsigned int)(val))
 /*#define BD_READ(addr) (*(volatile unsigned int *)(addr))*/
-#define BD_READ(addr) leon_r32_no_cache((unsigned long)(addr))
+#define BD_READ(addr) grlib_read_uncached32((unsigned long)(addr))
 #define REG_WRITE(addr, val) (*(volatile unsigned int *)(addr) = (unsigned int)(val))
 #define REG_READ(addr) (*(volatile unsigned int *)(addr))
 
diff --git a/bsps/shared/grlib/slink/grslink.c b/bsps/shared/grlib/slink/grslink.c
index fa6f205915..bf21649aa6 100644
--- a/bsps/shared/grlib/slink/grslink.c
+++ b/bsps/shared/grlib/slink/grslink.c
@@ -26,6 +26,7 @@
 #include <grlib/grslink.h>
 #include <grlib/ambapp.h>
 
+#include <grlib/grlib.h>
 #include <grlib/grlib_impl.h>
 
 #ifndef GAISLER_SLINK
@@ -235,7 +236,7 @@ static int SLINK_getsysfreq(void)
  * variable. SLAVE-WORD-SEND transfers are placed in the IO card's receive
  * queue.
  */
-static rtems_isr SLINK_interrupt_handler(rtems_vector_number v)
+static rtems_isr SLINK_interrupt_handler(void *v)
 {
 	unsigned int sts;
 	unsigned int wrd;
@@ -406,7 +407,9 @@ int SLINK_init(unsigned int nullwrd, int parity, int qsize,
 	cfg->slink_seq_change = sequence_callback;
 
 	/* Set-up IRQ handling */
-	set_vector(SLINK_interrupt_handler,irq+0x10,2);
+	rtems_interrupt_handler_install(irq, "slink",
+			RTEMS_INTERRUPT_SHARED,
+			SLINK_interrupt_handler, NULL);
 	
 	return 0;
 
diff --git a/bsps/shared/grlib/spw/grspw.c b/bsps/shared/grlib/spw/grspw.c
index ca0f63edd8..fbaadd1e13 100644
--- a/bsps/shared/grlib/spw/grspw.c
+++ b/bsps/shared/grlib/spw/grspw.c
@@ -25,6 +25,10 @@
 
 #include <grlib/grlib_impl.h>
 
+#ifndef CPU_SPARC_HAS_SNOOPING
+#define CPU_SPARC_HAS_SNOOPING 1
+#endif
+
 #define DBGSPW_IOCALLS 1
 #define DBGSPW_TX 2
 #define DBGSPW_RX 4
@@ -152,32 +156,9 @@ void (*grspw_timecode_callback)
 #define _MEM_READ8(address) (*(volatile unsigned char *)(address))
 #define _MEM_READ32(address) (*(volatile unsigned int *)(address))
 #else
-static inline unsigned int _SPW_READ(volatile void *addr) {
-        unsigned int tmp;
-        __asm__ (" lda [%1]1, %0 "
-            : "=r"(tmp)
-            : "r"(addr)
-           );
-        return tmp;
-}
-
-static inline unsigned int _MEM_READ8(volatile void *addr) {
-        unsigned int tmp;
-        __asm__ (" lduba [%1]1, %0 "
-            : "=r"(tmp)
-            : "r"(addr)
-           );
-        return tmp;
-}
-
-static inline unsigned int _MEM_READ32(volatile void *addr) {
-        unsigned int tmp;
-        __asm__ (" lda [%1]1, %0 "
-            : "=r"(tmp)
-            : "r"(addr)
-           );
-        return tmp;
-}
+#define _SPW_READ(address) grlib_read_uncached32((unsigned int) address)
+#define _MEM_READ8(address) grlib_read_uncached8((unsigned int) address)
+#define _MEM_READ32(address) grlib_read_uncached32((unsigned int) address)
 #endif
 
 #define MEM_READ8(addr) _MEM_READ8((volatile void *)(addr))
diff --git a/bsps/shared/grlib/spw/grspw_pkt.c b/bsps/shared/grlib/spw/grspw_pkt.c
index 208f5a14f7..56b39d78db 100644
--- a/bsps/shared/grlib/spw/grspw_pkt.c
+++ b/bsps/shared/grlib/spw/grspw_pkt.c
@@ -315,7 +315,7 @@ struct grspw_txbd {
 /* Memory and HW Registers Access routines. All 32-bit access routines */
 #define BD_WRITE(addr, val) (*(volatile unsigned int *)(addr) = (unsigned int)(val))
 /*#define BD_READ(addr) (*(volatile unsigned int *)(addr))*/
-#define BD_READ(addr) leon_r32_no_cache((unsigned long)(addr))
+#define BD_READ(addr) grlib_read_uncached32((unsigned long)(addr))
 #define REG_WRITE(addr, val) (*(volatile unsigned int *)(addr) = (unsigned int)(val))
 #define REG_READ(addr) (*(volatile unsigned int *)(addr))
 
diff --git a/bsps/shared/grlib/uart/apbuart_cons.c b/bsps/shared/grlib/uart/apbuart_cons.c
index 8cd8a1ebf0..ee635e6944 100644
--- a/bsps/shared/grlib/uart/apbuart_cons.c
+++ b/bsps/shared/grlib/uart/apbuart_cons.c
@@ -260,10 +260,10 @@ int apbuart_init1(struct drvmgr_dev *dev)
 	db = 0;
 #ifdef LEON3
 	if (priv->regs == leon3_debug_uart) {
-		db = priv->regs->ctrl & (LEON_REG_UART_CTRL_RE |
-					LEON_REG_UART_CTRL_TE |
-					LEON_REG_UART_CTRL_PE |
-					LEON_REG_UART_CTRL_PS);
+		db = priv->regs->ctrl & (APBUART_CTRL_RE |
+					APBUART_CTRL_TE |
+					APBUART_CTRL_PE |
+					APBUART_CTRL_PS);
 	}
 #endif
 	/* Let UART debug tunnelling be untouched if Flow-control is set.
@@ -273,9 +273,9 @@ int apbuart_init1(struct drvmgr_dev *dev)
 	 * guess that we are debugging if FL is already set, the debugger set
 	 * either LB or DB depending on UART capabilities.
 	 */
-	if (priv->regs->ctrl & LEON_REG_UART_CTRL_FL) {
-		db |= priv->regs->ctrl & (LEON_REG_UART_CTRL_DB |
-		      LEON_REG_UART_CTRL_LB | LEON_REG_UART_CTRL_FL);
+	if (priv->regs->ctrl & APBUART_CTRL_FL) {
+		db |= priv->regs->ctrl & (APBUART_CTRL_DB |
+		      APBUART_CTRL_LB | APBUART_CTRL_FL);
 	}
 
 	priv->regs->ctrl = db;
@@ -561,26 +561,26 @@ static bool set_attributes(
 	switch(t->c_cflag & (PARENB|PARODD)){
 		case (PARENB|PARODD):
 			/* Odd parity */
-			ctrl |= LEON_REG_UART_CTRL_PE|LEON_REG_UART_CTRL_PS;
+			ctrl |= APBUART_CTRL_PE|APBUART_CTRL_PS;
 			break;
 
 		case PARENB:
 			/* Even parity */
-			ctrl &= ~LEON_REG_UART_CTRL_PS;
-			ctrl |= LEON_REG_UART_CTRL_PE;
+			ctrl &= ~APBUART_CTRL_PS;
+			ctrl |= APBUART_CTRL_PE;
 			break;
 
 		default:
 		case 0:
 		case PARODD:
 			/* No Parity */
-			ctrl &= ~(LEON_REG_UART_CTRL_PS|LEON_REG_UART_CTRL_PE);
+			ctrl &= ~(APBUART_CTRL_PS|APBUART_CTRL_PE);
 	}
 
 	if (!(t->c_cflag & CLOCAL))
-		ctrl |= LEON_REG_UART_CTRL_FL;
+		ctrl |= APBUART_CTRL_FL;
 	else
-		ctrl &= ~LEON_REG_UART_CTRL_FL;
+		ctrl &= ~APBUART_CTRL_FL;
 
 	/* Update new settings */
 	uart->regs->ctrl = ctrl;
@@ -618,14 +618,14 @@ static void get_attributes(
 
 	/* Read out current parity */
 	ctrl = uart->regs->ctrl;
-	if (ctrl & LEON_REG_UART_CTRL_PE) {
-		if (ctrl & LEON_REG_UART_CTRL_PS)
+	if (ctrl & APBUART_CTRL_PE) {
+		if (ctrl & APBUART_CTRL_PS)
 			t->c_cflag |= PARENB|PARODD; /* Odd parity */
 		else
 			t->c_cflag |= PARENB; /* Even parity */
 	}
 
-	if ((ctrl & LEON_REG_UART_CTRL_FL) == 0)
+	if ((ctrl & APBUART_CTRL_FL) == 0)
 		t->c_cflag |= CLOCAL;
 
 	rtems_termios_set_best_baud(t, apbuart_get_baud(uart));
diff --git a/cpukit/score/cpu/riscv/headers.am b/cpukit/score/cpu/riscv/headers.am
index 415075ce46..abb8a42f78 100644
--- a/cpukit/score/cpu/riscv/headers.am
+++ b/cpukit/score/cpu/riscv/headers.am
@@ -1,4 +1,6 @@
 ## This file was generated by "./boostrap -H".
+include_libcpu_HEADERS += score/cpu/riscv/include/libcpu/access.h
+include_libcpu_HEADERS += score/cpu/riscv/include/libcpu/byteorder.h
 include_rtems_HEADERS += score/cpu/riscv/include/rtems/asm.h
 include_rtems_score_HEADERS += score/cpu/riscv/include/rtems/score/cpu.h
 include_rtems_score_HEADERS += score/cpu/riscv/include/rtems/score/cpu_asm.h
diff --git a/cpukit/score/cpu/riscv/include/libcpu/access.h b/cpukit/score/cpu/riscv/include/libcpu/access.h
new file mode 100644
index 0000000000..cdf6b77122
--- /dev/null
+++ b/cpukit/score/cpu/riscv/include/libcpu/access.h
@@ -0,0 +1,50 @@
+/*
+ *  access.h  - access routines for SPARC. SPARC is big endian only.
+ *
+ *  COPYRIGHT (c) 2011
+ *  Aeroflex Gaisler.
+ *
+ *  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 _LIBCPU_ACCESS_H
+#define _LIBCPU_ACCESS_H
+
+#include <rtems/system.h>
+#include <rtems/score/cpu.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* "Raw" access */
+extern uint8_t _ld8(uint8_t *addr);
+extern void _st8(uint8_t *addr, uint8_t val);
+extern uint16_t _ld16(uint16_t *addr);
+extern void _st16(uint16_t *addr, uint16_t val);
+extern uint32_t _ld32(uint32_t *addr);
+extern void _st32(uint32_t *addr, uint32_t val);
+extern uint64_t _ld64(uint64_t *addr);
+extern void _st64(uint64_t *addr, uint64_t val);
+
+/* Aliases for Big Endian */
+extern uint16_t _ld_be16(uint16_t *addr);
+extern void _st_be16(uint16_t *addr, uint16_t val);
+extern uint32_t _ld_be32(uint32_t *addr);
+extern void _st_be32(uint32_t *addr, uint32_t val);
+extern uint64_t _ld_be64(uint64_t *addr);
+extern void _st_be64(uint64_t *addr, uint64_t val);
+
+/* Little endian */
+extern uint16_t _ld_le16(uint16_t *addr);
+extern void _st_le16(uint16_t *addr, uint16_t val);
+extern uint32_t _ld_le32(uint32_t *addr);
+extern void _st_le32(uint32_t *addr, uint32_t val);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/cpukit/score/cpu/riscv/include/libcpu/byteorder.h b/cpukit/score/cpu/riscv/include/libcpu/byteorder.h
new file mode 100644
index 0000000000..939e51fe84
--- /dev/null
+++ b/cpukit/score/cpu/riscv/include/libcpu/byteorder.h
@@ -0,0 +1,31 @@
+/*
+ *  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 _LIBCPU_BYTEORDER_H
+#define _LIBCPU_BYTEORDER_H
+
+static inline void st_le32(volatile uint32_t   *addr, uint32_t   value)
+{
+  *(addr)=value ;
+}
+
+static inline uint32_t   ld_le32(volatile uint32_t   *addr)
+{
+  return(*addr);
+}
+
+static inline void st_le16(volatile uint16_t   *addr, uint16_t   value)
+{
+  *(addr)=value ;
+}
+
+static inline uint16_t   ld_le16(volatile uint16_t   *addr)
+{
+  return(*addr);
+}
+
+
+#endif
-- 
2.17.1

_______________________________________________
devel mailing list
devel@rtems.org
http://lists.rtems.org/mailman/listinfo/devel

Reply via email to