[PATCH 18/42] powerpc/beatnik: Fix warnings
Joel Sherrill
joel.sherrill at oarcorp.com
Fri Oct 17 15:23:34 UTC 2014
---
c/src/lib/libbsp/powerpc/beatnik/include/bsp.h | 140 ++++---
.../lib/libbsp/powerpc/beatnik/irq/discovery_pic.c | 2 +-
.../lib/libbsp/powerpc/beatnik/marvell/gt_timer.c | 406 ++++++++++-----------
.../lib/libbsp/powerpc/beatnik/pci/pci_io_remap.c | 260 +++++++------
.../lib/libbsp/powerpc/beatnik/startup/bspstart.c | 9 +-
c/src/lib/libbsp/powerpc/beatnik/vme/VMEConfig.h | 81 ++--
6 files changed, 467 insertions(+), 431 deletions(-)
diff --git a/c/src/lib/libbsp/powerpc/beatnik/include/bsp.h b/c/src/lib/libbsp/powerpc/beatnik/include/bsp.h
index c7f8cae..9cc9ae0 100644
--- a/c/src/lib/libbsp/powerpc/beatnik/include/bsp.h
+++ b/c/src/lib/libbsp/powerpc/beatnik/include/bsp.h
@@ -1,6 +1,8 @@
/*
* bsp.h -- contain BSP API definition.
- *
+ */
+
+/*
* Copyright (C) 1999 Eric Valette. valette at crf.canon.fr
*
* The license and distribution terms for this file may be
@@ -11,9 +13,12 @@
*
* Modified for the 'beatnik' BSP by T. Straumann, 2005-2007.
*/
+
#ifndef LIBBSP_BEATNIK_BSP_H
#define LIBBSP_BEATNIK_BSP_H
+#ifndef ASM
+
#include <bspopts.h>
#include <bsp/default-initial-extension.h>
@@ -24,26 +29,25 @@
#include <bsp/vectors.h>
#ifdef __cplusplus
- extern "C" {
+extern "C" {
#endif
/* Board type */
typedef enum {
- Unknown = 0,
- MVME5500,
- MVME6100
+ Unknown = 0,
+ MVME5500,
+ MVME6100
} BSP_BoardType;
-BSP_BoardType
-BSP_getBoardType();
+BSP_BoardType BSP_getBoardType(void);
/* Discovery Version */
typedef enum {
- unknown = 0,
- GT_64260_A, /* Revision 0x10 */
- GT_64260_B, /* Revision 0x20 */
- MV_64360,
+ unknown = 0,
+ GT_64260_A, /* Revision 0x10 */
+ GT_64260_B, /* Revision 0x20 */
+ MV_64360,
} DiscoveryVersion;
/* Determine the type of discovery chip on this board; info
@@ -52,9 +56,7 @@ typedef enum {
* If a non-zero argument is passed, the routine panics
* (BSP_panic) if no recognized bridge is found;
*/
-
-DiscoveryVersion
-BSP_getDiscoveryVersion(int assertion);
+DiscoveryVersion BSP_getDiscoveryVersion(int assertion);
/*
* confdefs.h overrides for this BSP:
@@ -65,18 +67,18 @@ BSP_getDiscoveryVersion(int assertion);
/*
* base address definitions for several devices
*/
-#define BSP_MV64x60_BASE (0xf1000000)
-#define BSP_MV64x60_DEV1_BASE (0xf1100000)
-#define BSP_UART_IOBASE_COM1 ((BSP_MV64x60_DEV1_BASE)+0x20000)
-#define BSP_UART_IOBASE_COM2 ((BSP_MV64x60_DEV1_BASE)+0x21000)
+#define BSP_MV64x60_BASE (0xf1000000)
+#define BSP_MV64x60_DEV1_BASE (0xf1100000)
+#define BSP_UART_IOBASE_COM1 ((BSP_MV64x60_DEV1_BASE)+0x20000)
+#define BSP_UART_IOBASE_COM2 ((BSP_MV64x60_DEV1_BASE)+0x21000)
#define BSP_UART_USE_SHARED_IRQS
-#define BSP_NVRAM_BASE_ADDR (0xf1110000)
-#define BSP_NVRAM_END_ADDR (0xf1117fff)
-#define BSP_NVRAM_RTC_START (0xf1117ff8)
+#define BSP_NVRAM_BASE_ADDR (0xf1110000)
+#define BSP_NVRAM_END_ADDR (0xf1117fff)
+#define BSP_NVRAM_RTC_START (0xf1117ff8)
-#define BSP_NVRAM_BOOTPARMS_START (0xf1111000)
-#define BSP_NVRAM_BOOTPARMS_END (0xf1111fff)
+#define BSP_NVRAM_BOOTPARMS_START (0xf1111000)
+#define BSP_NVRAM_BOOTPARMS_END (0xf1111fff)
/* This is only active/used during early init. It defines
@@ -85,18 +87,22 @@ BSP_getDiscoveryVersion(int assertion);
* override the PCI configuration (see gt_pci_init.c:BSP_pci_initialize)
*/
-#define PCI_CONFIG_ADDR (BSP_MV64x60_BASE + 0xcf8)
-#define PCI_CONFIG_DATA (BSP_MV64x60_BASE + 0xcfc)
+#define PCI_CONFIG_ADDR (BSP_MV64x60_BASE + 0xcf8)
+#define PCI_CONFIG_DATA (BSP_MV64x60_BASE + 0xcfc)
/* our wonderful PCI initialization remaps everything to CPU addresses
* - before calling BSP_pci_initialize() this is NOT VALID, however
* and the deprecated inl()/outl() etc won't work!
*/
-#define _IO_BASE 0x00000000
-/* wonderful MotLoad has the base address as seen from the CPU programmed into config space :-) */
-#define PCI_MEM_BASE 0
-#define PCI_MEM_BASE_ADJUSTMENT 0
-#define PCI_DRAM_OFFSET 0
+#define _IO_BASE 0x00000000
+/* wonderful MotLoad has the base address as seen from the
+ * CPU programmed into config space :-)
+ */
+#define PCI_MEM_BASE 0
+#define PCI_MEM_BASE_ADJUSTMENT 0
+#define PCI_DRAM_OFFSET 0
+
+extern void BSP_motload_pci_fixup(void);
/* PCI <-> local address mapping - no sophisticated windows
* (i.e., no support for cached regions etc. you read a BAR
@@ -106,20 +112,20 @@ BSP_getDiscoveryVersion(int assertion);
#define BSP_PCI2LOCAL_ADDR(a) ((uint32_t)(a))
#define BSP_LOCAL2PCI_ADDR(a) ((uint32_t)(a))
-#define BSP_CONFIG_NUM_PCI_CACHE_SLOTS 32
+#define BSP_CONFIG_NUM_PCI_CACHE_SLOTS 32
-#define BSP_CONSOLE_PORT BSP_UART_COM1
-#define BSP_UART_BAUD_BASE 115200
+#define BSP_CONSOLE_PORT BSP_UART_COM1
+#define BSP_UART_BAUD_BASE 115200
/* I2C Devices */
/* Note that the i2c addresses stated in the manual are
* left-shifted by one bit.
*/
-#define BSP_VPD_I2C_ADDR (0xA8>>1) /* the VPD EEPROM */
-#define BSP_USR_I2C_ADDR (0xAA>>1) /* the user EEPROM */
-#define BSP_THM_I2C_ADDR (0x90>>1) /* the DS1621 temperature sensor & thermostat */
+#define BSP_VPD_I2C_ADDR (0xA8>>1) /* the VPD EEPROM */
+#define BSP_USR_I2C_ADDR (0xAA>>1) /* the user EEPROM */
+#define BSP_THM_I2C_ADDR (0x90>>1) /* the DS1621 temperature sensor & thermostat */
-#define BSP_I2C_BUS_DESCRIPTOR gt64260_i2c_bus_descriptor
+#define BSP_I2C_BUS_DESCRIPTOR gt64260_i2c_bus_descriptor
#define BSP_I2C_BUS0_NAME "/dev/i2c0"
@@ -129,11 +135,11 @@ BSP_getDiscoveryVersion(int assertion);
#define BSP_I2C_THM_NAME BSP_I2C_DS1621_NAME
#define BSP_I2C_DS1621_RAW_NAME "ds1621-raw"
-#define BSP_I2C_VPD_EEPROM_DEV_NAME (BSP_I2C_BUS0_NAME"."BSP_I2C_VPD_EEPROM_NAME)
-#define BSP_I2C_USR_EEPROM_DEV_NAME (BSP_I2C_BUS0_NAME"."BSP_I2C_USR_EEPROM_NAME)
-#define BSP_I2C_DS1621_DEV_NAME (BSP_I2C_BUS0_NAME"."BSP_I2C_DS1621_NAME)
+#define BSP_I2C_VPD_EEPROM_DEV_NAME (BSP_I2C_BUS0_NAME"."BSP_I2C_VPD_EEPROM_NAME)
+#define BSP_I2C_USR_EEPROM_DEV_NAME (BSP_I2C_BUS0_NAME"."BSP_I2C_USR_EEPROM_NAME)
+#define BSP_I2C_DS1621_DEV_NAME (BSP_I2C_BUS0_NAME"."BSP_I2C_DS1621_NAME)
#define BSP_I2C_THM_DEV_NAME BSP_I2C_DS1621_DEV_NAME
-#define BSP_I2C_DS1621_RAW_DEV_NAME (BSP_I2C_BUS0_NAME"."BSP_I2C_DS1621_RAW_NAME)
+#define BSP_I2C_DS1621_RAW_DEV_NAME (BSP_I2C_BUS0_NAME"."BSP_I2C_DS1621_RAW_NAME)
/* Initialize the I2C driver and register all devices
@@ -148,8 +154,7 @@ BSP_getDiscoveryVersion(int assertion);
* /dev/i2c0.ds1621 (read-only; one byte: board-temp in degC)
* /dev/i2c0.ds1621-raw (read-write; transfer bytes to/from the ds1621)
*/
-int
-BSP_i2c_initialize();
+int BSP_i2c_initialize(void);
/* Networking; */
#if defined(RTEMS_NETWORKING)
@@ -157,27 +162,29 @@ BSP_i2c_initialize();
#endif
/* NOT FOR PUBLIC USE BELOW HERE */
-#define BSP_PCI_HOSE0_MEM_BASE 0x80000000 /* must be aligned to size */
-#define BSP_PCI_HOSE0_MEM_SIZE 0x20000000
+#define BSP_PCI_HOSE0_MEM_BASE 0x80000000 /* must be aligned to size */
+#define BSP_PCI_HOSE0_MEM_SIZE 0x20000000
-#define BSP_PCI_HOSE1_MEM_BASE 0xe0000000
+#define BSP_PCI_HOSE1_MEM_BASE 0xe0000000
-#define BSP_DEV_AND_PCI_IO_BASE 0xf0000000
-#define BSP_DEV_AND_PCI_IO_SIZE 0x10000000
+#define BSP_DEV_AND_PCI_IO_BASE 0xf0000000
+#define BSP_DEV_AND_PCI_IO_SIZE 0x10000000
-/* maintain coherency between CPU and GT64340 ethernet (& possibly other discovery components) */
-#define BSP_RW_PAGE_ATTRIBUTES TRIV121_ATTR_M
+/* maintain coherency between CPU and GT64340 Ethernet
+ * (andpossibly other Discovery components).
+ */
+#define BSP_RW_PAGE_ATTRIBUTES TRIV121_ATTR_M
extern unsigned BSP_pci_hose1_bus_base;
-void BSP_pci_initialize();
+void BSP_pci_initialize(void);
/* Exception Handling */
/* Use a task notepad to attach user exception handler info;
* may be changed by application startup code (EPICS uses 11)
*/
-#define BSP_EXCEPTION_NOTEPAD 14
+#define BSP_EXCEPTION_NOTEPAD 14
#ifndef ASM
@@ -257,14 +264,37 @@ extern unsigned long _BSP_clear_hostbridge_errors(int enableMCP, int quiet);
* 16-bit error status on error.
*
*/
-extern unsigned short
-(*_BSP_clear_vmebridge_errors)(int);
+extern unsigned short (*_BSP_clear_vmebridge_errors)(int);
+/*
+ * Prototypes for debug helpers
+ */
+void discovery_pic_set_debug_irq(int on);
+void discovery_pic_install_debug_irq(void);
+
+/*
+ * Prototypes for methods called only from .S for dependency tracking
+ */
+char *save_boot_params(
+ void *r3,
+ void *r4,
+ void *r5,
+ char *cmdline_start,
+ char *cmdline_end
+);
+void zero_bss(void);
+
+/*
+ * Prototypes for methods in the BSP that cross file boundaries
+ */
+uint32_t probeMemoryEnd(void);
#endif
#ifdef __cplusplus
- }
+}
#endif
+#endif /* !ASM */
+
#endif
diff --git a/c/src/lib/libbsp/powerpc/beatnik/irq/discovery_pic.c b/c/src/lib/libbsp/powerpc/beatnik/irq/discovery_pic.c
index de19f31..8efe2ce 100644
--- a/c/src/lib/libbsp/powerpc/beatnik/irq/discovery_pic.c
+++ b/c/src/lib/libbsp/powerpc/beatnik/irq/discovery_pic.c
@@ -196,7 +196,7 @@ int i;
}
}
-void discovery_dump_picregs(void)
+static void discovery_dump_picregs(void)
{
printk(" ..GPP_IRQ. -- ..MAIN_HI. -- ..MAIN_LO.\n");
printk("Cause:"); pregs(thePic.causes);
diff --git a/c/src/lib/libbsp/powerpc/beatnik/marvell/gt_timer.c b/c/src/lib/libbsp/powerpc/beatnik/marvell/gt_timer.c
index d70c6a9..e53e8e1 100644
--- a/c/src/lib/libbsp/powerpc/beatnik/marvell/gt_timer.c
+++ b/c/src/lib/libbsp/powerpc/beatnik/marvell/gt_timer.c
@@ -14,13 +14,13 @@
* ----------
* This software ('beatnik' RTEMS BSP for MVME6100 and MVME5500) was
* created by Till Straumann <strauman at slac.stanford.edu>, 2005-2007,
- * Stanford Linear Accelerator Center, Stanford University.
+ * Stanford Linear Accelerator Center, Stanford University.
*
* Acknowledgement of sponsorship
* ------------------------------
* The 'beatnik' BSP was produced by
* the Stanford Linear Accelerator Center, Stanford University,
- * under Contract DE-AC03-76SFO0515 with the Department of Energy.
+ * under Contract DE-AC03-76SFO0515 with the Department of Energy.
*
* Government disclaimer of liability
* ----------------------------------
@@ -53,6 +53,7 @@
*
* ------------------ SLAC Software Notices, Set 4 OTT.002a, 2004 FEB 03
*/
+
#include <rtems.h>
#include <bsp/gtreg.h>
#include <libcpu/io.h>
@@ -68,199 +69,196 @@
static inline uint32_t gt_rd(uint32_t off)
{
- return in_le32( (volatile unsigned *)(BSP_MV64x60_BASE+off) );
+ return in_le32( (volatile unsigned *)(BSP_MV64x60_BASE+off) );
}
static inline void gt_wr(uint32_t off, uint32_t val)
{
- out_le32( (volatile unsigned *)(BSP_MV64x60_BASE+off), val);
+ out_le32( (volatile unsigned *)(BSP_MV64x60_BASE+off), val);
}
static inline uint32_t gt_timer_bitmod(uint32_t off, uint32_t clr, uint32_t set)
{
- unsigned flags;
- uint32_t rval;
- rtems_interrupt_disable(flags);
- rval = gt_rd( off );
- gt_wr( off, (rval & ~clr) | set );
- rtems_interrupt_enable(flags);
- return rval;
+ unsigned flags;
+ uint32_t rval;
+
+ rtems_interrupt_disable(flags);
+ rval = gt_rd( off );
+ gt_wr( off, (rval & ~clr) | set );
+ rtems_interrupt_enable(flags);
+ return rval;
}
-#define GT_TIMER_MAX 3
-#define TIMER_ARGCHECK(t) do { if ((t)<0 || (t)>GT_TIMER_MAX) return -1; } while (0)
+#define GT_TIMER_MAX 3
+#define TIMER_ARGCHECK(t) do { if ((t)<0 || (t)>GT_TIMER_MAX) return -1; } while (0)
static struct {
- void (*isr)(void *);
- void *arg;
+ void (*isr)(void *);
+ void *arg;
} gt_timer_isrs[GT_TIMER_MAX+1] = {{0},};
uint32_t BSP_timer_read(uint32_t timer)
{
- TIMER_ARGCHECK(timer);
- return gt_rd(GT_TIMER_0 + (timer<<2));
+ TIMER_ARGCHECK(timer);
+ return gt_rd(GT_TIMER_0 + (timer<<2));
}
int
BSP_timer_start(uint32_t timer, uint32_t period)
{
- TIMER_ARGCHECK(timer);
- gt_wr(GT_TIMER_0 + (timer<<2), period);
- return 0;
+ TIMER_ARGCHECK(timer);
+ gt_wr(GT_TIMER_0 + (timer<<2), period);
+ return 0;
}
int
BSP_timer_stop(uint32_t timer)
{
- TIMER_ARGCHECK(timer);
- /* disable, clear period, re-enable */
- gt_timer_bitmod(GT_TIMER_0_3_Ctl, GT_TIMER_0_Ctl_Enb << (timer<<3), 0);
- gt_wr(GT_TIMER_0 + (timer<<2), 0);
- gt_timer_bitmod(GT_TIMER_0_3_Ctl, 0, GT_TIMER_0_Ctl_Enb << (timer<<3));
- return 0;
+ TIMER_ARGCHECK(timer);
+ /* disable, clear period, re-enable */
+ gt_timer_bitmod(GT_TIMER_0_3_Ctl, GT_TIMER_0_Ctl_Enb << (timer<<3), 0);
+ gt_wr(GT_TIMER_0 + (timer<<2), 0);
+ gt_timer_bitmod(GT_TIMER_0_3_Ctl, 0, GT_TIMER_0_Ctl_Enb << (timer<<3));
+ return 0;
}
int
BSP_timer_setup(uint32_t timer, void (*isr)(void *arg), void *arg, int reload)
{
- TIMER_ARGCHECK(timer);
- if ( isr && gt_timer_isrs[timer].isr )
- return -1;
- BSP_timer_stop(timer);
- /* mask and clear */
- gt_timer_bitmod(GT_TIMER_0_3_Intr_Msk, GT_TIMER_0_Intr<<timer, 0);
- gt_timer_bitmod(GT_TIMER_0_3_Intr_Cse, GT_TIMER_0_Intr<<timer, 0);
-
- /* set reload bit */
- if ( reload )
- gt_timer_bitmod(GT_TIMER_0_3_Ctl, 0, GT_TIMER_0_Ctl_Rld << (timer<<3));
- else
- gt_timer_bitmod(GT_TIMER_0_3_Ctl, GT_TIMER_0_Ctl_Rld << (timer<<3), 0);
-
- asm volatile("":::"memory");
-
- if ( isr ) {
- gt_timer_isrs[timer].isr = isr;
- gt_timer_isrs[timer].arg = arg;
- asm volatile("":::"memory");
- gt_timer_bitmod(GT_TIMER_0_3_Intr_Msk, 0, GT_TIMER_0_Intr<<timer);
- } else {
- gt_timer_isrs[timer].isr = 0;
- gt_timer_isrs[timer].arg = 0;
- }
- return 0;
+ TIMER_ARGCHECK(timer);
+ if ( isr && gt_timer_isrs[timer].isr )
+ return -1;
+
+ BSP_timer_stop(timer);
+ /* mask and clear */
+ gt_timer_bitmod(GT_TIMER_0_3_Intr_Msk, GT_TIMER_0_Intr<<timer, 0);
+ gt_timer_bitmod(GT_TIMER_0_3_Intr_Cse, GT_TIMER_0_Intr<<timer, 0);
+
+ /* set reload bit */
+ if ( reload )
+ gt_timer_bitmod(GT_TIMER_0_3_Ctl, 0, GT_TIMER_0_Ctl_Rld << (timer<<3));
+ else
+ gt_timer_bitmod(GT_TIMER_0_3_Ctl, GT_TIMER_0_Ctl_Rld << (timer<<3), 0);
+
+ asm volatile("":::"memory");
+
+ if ( isr ) {
+ gt_timer_isrs[timer].isr = isr;
+ gt_timer_isrs[timer].arg = arg;
+ asm volatile("":::"memory");
+ gt_timer_bitmod(GT_TIMER_0_3_Intr_Msk, 0, GT_TIMER_0_Intr<<timer);
+ } else {
+ gt_timer_isrs[timer].isr = 0;
+ gt_timer_isrs[timer].arg = 0;
+ }
+ return 0;
}
static void
gt_timer_hdl(rtems_irq_hdl_param arg)
{
-int iarg = (int)arg;
-int timer;
-uint32_t bit;
-
- for ( ; iarg; iarg >>= 4 ) {
- timer = (iarg & 0xf)-1;
- bit = GT_TIMER_0_Intr<<timer;
- if ( gt_timer_bitmod(GT_TIMER_0_3_Intr_Cse, bit, 0) & bit ) {
- /* cause was set */
- if ( ! gt_timer_isrs[timer].isr ) {
- printk("gt_timer: warning; no ISR connected but and IRQ happened (timer # %i)\n", timer);
- /* mask */
- gt_timer_bitmod(GT_TIMER_0_3_Intr_Msk, bit, 0);
- } else {
- gt_timer_isrs[timer].isr(gt_timer_isrs[timer].arg);
- }
- }
- }
+ int iarg = (int)arg;
+ int timer;
+ uint32_t bit;
+
+ for ( ; iarg; iarg >>= 4 ) {
+ timer = (iarg & 0xf)-1;
+ bit = GT_TIMER_0_Intr<<timer;
+ if ( gt_timer_bitmod(GT_TIMER_0_3_Intr_Cse, bit, 0) & bit ) {
+ /* cause was set */
+ if ( ! gt_timer_isrs[timer].isr ) {
+ printk("gt_timer: warning; no ISR connected but and IRQ happened (timer # %i)\n", timer);
+ /* mask */
+ gt_timer_bitmod(GT_TIMER_0_3_Intr_Msk, bit, 0);
+ } else {
+ gt_timer_isrs[timer].isr(gt_timer_isrs[timer].arg);
+ }
+ }
+ }
}
int
BSP_timers_initialize(void)
{
-rtems_irq_connect_data xx = {0};
-int i, ainc, arg;
-
- xx.hdl = gt_timer_hdl;
- xx.on = 0;
- xx.off = 0;
- xx.isOn = 0;
-
- switch (BSP_getDiscoveryVersion(0)) {
- case MV_64360:
- i = 3;
- ainc = 1;
- arg = 4;
- break;
- default:
- i = 1;
- ainc = 0x0202;
- arg = 0x0403;
- break;
- }
-
- for ( ; i>=0; i--, arg-=ainc ) {
- xx.name = BSP_IRQ_TIME0_1 + i;
- xx.handle = (rtems_irq_hdl_param)arg;
- if ( !BSP_install_rtems_irq_handler(&xx) )
- return -1;
- }
-
- return 0;
+ rtems_irq_connect_data xx = {0};
+ int i, ainc, arg;
+
+ xx.hdl = gt_timer_hdl;
+ xx.on = 0;
+ xx.off = 0;
+ xx.isOn = 0;
+
+ switch (BSP_getDiscoveryVersion(0)) {
+ case MV_64360:
+ i = 3;
+ ainc = 1;
+ arg = 4;
+ break;
+ default:
+ i = 1;
+ ainc = 0x0202;
+ arg = 0x0403;
+ break;
+ }
+
+ for ( ; i>=0; i--, arg-=ainc ) {
+ xx.name = BSP_IRQ_TIME0_1 + i;
+ xx.handle = (rtems_irq_hdl_param)arg;
+ if ( !BSP_install_rtems_irq_handler(&xx) )
+ return -1;
+ }
+
+ return 0;
}
-int
+#ifdef DEBUG_MODULAR
+static int
BSP_timers_uninstall(void)
{
-rtems_irq_connect_data xx = {0};
-int i;
-
- xx.hdl = gt_timer_hdl;
- xx.on = 0;
- xx.off = 0;
- xx.isOn = 0;
-
- for ( i=0; i<= GT_TIMER_MAX; i++ ) {
- if ( BSP_timer_setup(i, 0, 0, 0) )
- return -1;
- }
-
- switch (BSP_getDiscoveryVersion(0)) {
- case MV_64360:
- i = 3;
- break;
- default:
- i = 1;
- break;
- }
-
- for ( ; i >= 0; i-- ) {
- xx.name = BSP_IRQ_TIME0_1 + i;
- BSP_get_current_rtems_irq_handler(&xx);
- if ( !BSP_remove_rtems_irq_handler(&xx) )
- return -1;
- }
-
- return 0;
+ rtems_irq_connect_data xx = {0};
+ int i;
+
+ xx.hdl = gt_timer_hdl;
+ xx.on = 0;
+ xx.off = 0;
+ xx.isOn = 0;
+
+ for ( i=0; i<= GT_TIMER_MAX; i++ ) {
+ if ( BSP_timer_setup(i, 0, 0, 0) )
+ return -1;
+ }
+
+ switch (BSP_getDiscoveryVersion(0)) {
+ case MV_64360:
+ i = 3;
+ break;
+ default:
+ i = 1;
+ break;
+ }
+
+ for ( ; i >= 0; i-- ) {
+ xx.name = BSP_IRQ_TIME0_1 + i;
+ BSP_get_current_rtems_irq_handler(&xx);
+ if ( !BSP_remove_rtems_irq_handler(&xx) )
+ return -1;
+ }
+
+ return 0;
}
+#endif
uint32_t
BSP_timer_clock_get(uint32_t timer)
{
- return BSP_bus_frequency;
+ return BSP_bus_frequency;
}
int BSP_timer_instances(void)
{
- return GT_TIMER_MAX + 1;
+ return GT_TIMER_MAX + 1;
}
-#ifdef DEBUG
-void BSP_timer_test_isr(void *arg)
-{
- printk("TIMER IRQ (user arg 0x%x)\n",arg);
-}
-#endif
-
/* On a 64260A we can't read the status (on/off), apparently
* so we maintain it locally and assume the firmware has
* not enabled the dog initially...
@@ -269,32 +267,33 @@ static uint32_t wdog_on = 0x00ffffff;
static uint32_t rd_wdcnf(void)
{
- uint32_t cnf = gt_rd(GT_WDOG_Config);
- /* BSD driver says that on the 64260A we always
- * read 0xffffffff so we have to maintain the
- * status locally (and hope we get the initial
- * value right).
- */
- if ( ~0 == cnf )
- cnf = wdog_on;
- return cnf;
+ uint32_t cnf = gt_rd(GT_WDOG_Config);
+
+ /* BSD driver says that on the 64260A we always
+ * read 0xffffffff so we have to maintain the
+ * status locally (and hope we get the initial
+ * value right).
+ */
+ if ( ~0 == cnf )
+ cnf = wdog_on;
+ return cnf;
}
/* change on/off state assume caller has IRQs disabled */
static void dog_toggle(uint32_t ctl)
{
- ctl &= ~( GT_WDOG_Config_Ctl1a | GT_WDOG_Config_Ctl1b \
- | GT_WDOG_Config_Ctl2a | GT_WDOG_Config_Ctl2b);
- gt_wr(GT_WDOG_Config, ctl | GT_WDOG_Config_Ctl1a);
- gt_wr(GT_WDOG_Config, ctl | GT_WDOG_Config_Ctl1b);
+ ctl &= ~( GT_WDOG_Config_Ctl1a | GT_WDOG_Config_Ctl1b \
+ | GT_WDOG_Config_Ctl2a | GT_WDOG_Config_Ctl2b);
+ gt_wr(GT_WDOG_Config, ctl | GT_WDOG_Config_Ctl1a);
+ gt_wr(GT_WDOG_Config, ctl | GT_WDOG_Config_Ctl1b);
}
static void dog_pet(uint32_t ctl)
{
- ctl &= ~( GT_WDOG_Config_Ctl1a | GT_WDOG_Config_Ctl1b \
- | GT_WDOG_Config_Ctl2a | GT_WDOG_Config_Ctl2b);
- gt_wr(GT_WDOG_Config, ctl | GT_WDOG_Config_Ctl2a);
- gt_wr(GT_WDOG_Config, ctl | GT_WDOG_Config_Ctl2b);
+ ctl &= ~( GT_WDOG_Config_Ctl1a | GT_WDOG_Config_Ctl1b \
+ | GT_WDOG_Config_Ctl2a | GT_WDOG_Config_Ctl2b);
+ gt_wr(GT_WDOG_Config, ctl | GT_WDOG_Config_Ctl2a);
+ gt_wr(GT_WDOG_Config, ctl | GT_WDOG_Config_Ctl2b);
}
@@ -307,41 +306,41 @@ static void dog_pet(uint32_t ctl)
int
BSP_watchdog_enable(uint32_t timeout_us)
{
-unsigned long long x = timeout_us;
-unsigned flags;
-uint32_t ctl;
+ unsigned long long x = timeout_us;
+ unsigned flags;
+ uint32_t ctl;
- x *= BSP_bus_frequency;
- x /= 256; /* there seems to be a prescaler */
+ x *= BSP_bus_frequency;
+ x /= 256; /* there seems to be a prescaler */
x /= 1000000; /* us/s */
- if ( x > (1<<24)-1 )
- x = (1<<24)-1;
+ if ( x > (1<<24)-1 )
+ x = (1<<24)-1;
- if ( 0xffffffff != timeout_us )
- timeout_us = x;
+ if ( 0xffffffff != timeout_us )
+ timeout_us = x;
- rtems_interrupt_disable(flags);
+ rtems_interrupt_disable(flags);
- ctl = rd_wdcnf();
+ ctl = rd_wdcnf();
- /* if enabled, disable first */
- if ( GT_WDOG_Config_Enb & ctl ) {
- dog_toggle(ctl);
- }
- if ( 0xffffffff == timeout_us ) {
- timeout_us = ctl & ((1<<24)-1);
- dog_toggle(ctl);
- dog_pet(ctl);
- } else {
- gt_wr(GT_WDOG_Config, timeout_us | GT_WDOG_Config_Ctl1a);
- gt_wr(GT_WDOG_Config, timeout_us | GT_WDOG_Config_Ctl1b);
- }
+ /* if enabled, disable first */
+ if ( GT_WDOG_Config_Enb & ctl ) {
+ dog_toggle(ctl);
+ }
+ if ( 0xffffffff == timeout_us ) {
+ timeout_us = ctl & ((1<<24)-1);
+ dog_toggle(ctl);
+ dog_pet(ctl);
+ } else {
+ gt_wr(GT_WDOG_Config, timeout_us | GT_WDOG_Config_Ctl1a);
+ gt_wr(GT_WDOG_Config, timeout_us | GT_WDOG_Config_Ctl1b);
+ }
- wdog_on = GT_WDOG_Config_Enb | timeout_us;
+ wdog_on = GT_WDOG_Config_Enb | timeout_us;
- rtems_interrupt_enable(flags);
- return 0;
+ rtems_interrupt_enable(flags);
+ return 0;
}
/* Disable watchdog
@@ -352,17 +351,17 @@ int BSP_watchdog_disable(void)
unsigned long flags;
uint32_t ctl;
- rtems_interrupt_disable(flags);
+ rtems_interrupt_disable(flags);
- ctl = rd_wdcnf();
+ ctl = rd_wdcnf();
- if ( (GT_WDOG_Config_Enb & ctl) ) {
- dog_toggle(ctl);
- wdog_on = ctl & ~(GT_WDOG_Config_Enb);
- }
+ if ( (GT_WDOG_Config_Enb & ctl) ) {
+ dog_toggle(ctl);
+ wdog_on = ctl & ~(GT_WDOG_Config_Enb);
+ }
- rtems_interrupt_enable(flags);
- return 0;
+ rtems_interrupt_enable(flags);
+ return 0;
}
/* Check status -- unfortunately there seems to be no way
@@ -372,10 +371,10 @@ uint32_t ctl;
*/
int BSP_watchdog_status(void)
{
-uint32_t ctl = rd_wdcnf();
+ uint32_t ctl = rd_wdcnf();
- /* report also the current period */
- return GT_WDOG_Config_Enb & ctl ? ctl : 0;
+ /* report also the current period */
+ return GT_WDOG_Config_Enb & ctl ? ctl : 0;
}
/* Pet the watchdog (rearm to configured timeout)
@@ -384,13 +383,14 @@ uint32_t ctl = rd_wdcnf();
*/
int BSP_watchdog_pet(void)
{
-unsigned long flags;
- if ( !wdog_on )
- return -1;
- rtems_interrupt_disable(flags);
- dog_pet(rd_wdcnf());
- rtems_interrupt_enable(flags);
- return 0;
+ unsigned long flags;
+
+ if ( !wdog_on )
+ return -1;
+ rtems_interrupt_disable(flags);
+ dog_pet(rd_wdcnf());
+ rtems_interrupt_enable(flags);
+ return 0;
}
@@ -398,13 +398,13 @@ unsigned long flags;
int
_cexpModuleFinalize(void *unused)
{
- BSP_watchdog_disable();
- return BSP_timers_uninstall();
+ BSP_watchdog_disable();
+ return BSP_timers_uninstall();
}
void
_cexpModuleInitialize(void *unused)
{
- BSP_timers_initialize();
+ BSP_timers_initialize();
}
#endif
diff --git a/c/src/lib/libbsp/powerpc/beatnik/pci/pci_io_remap.c b/c/src/lib/libbsp/powerpc/beatnik/pci/pci_io_remap.c
index 101b86b..79dd297 100644
--- a/c/src/lib/libbsp/powerpc/beatnik/pci/pci_io_remap.c
+++ b/c/src/lib/libbsp/powerpc/beatnik/pci/pci_io_remap.c
@@ -5,13 +5,13 @@
* ----------
* This software ('beatnik' RTEMS BSP for MVME6100 and MVME5500) was
* created by Till Straumann <strauman at slac.stanford.edu>, 2005-2007,
- * Stanford Linear Accelerator Center, Stanford University.
+ * Stanford Linear Accelerator Center, Stanford University.
*
* Acknowledgement of sponsorship
* ------------------------------
* The 'beatnik' BSP was produced by
* the Stanford Linear Accelerator Center, Stanford University,
- * under Contract DE-AC03-76SFO0515 with the Department of Energy.
+ * under Contract DE-AC03-76SFO0515 with the Department of Energy.
*
* Government disclaimer of liability
* ----------------------------------
@@ -49,6 +49,7 @@
#include <rtems/bspIo.h>
#include <bsp/pci.h>
#include <stdint.h>
+#include "pci_io_remap.h"
#ifndef PCI_MULTI_FUN
#define PCI_MULTI_FUN 0x80
@@ -64,142 +65,139 @@
* of PCI-PCI bridges, too.
*
* RESTRICTIONS: 'offset' must be 4k aligned (PCI req.); no argument check
- * on the bus numbers is done.
+ * on the bus numbers is done.
*
* RETURNS: 0 on success and a number > 0 indicating the number of
* non-32bit bridges found where the offset couldn't be added.
* Devices behind such a bridge are not accessible through I/O
* and should probably be switched off (not done by this code).
*/
-
int
rtems_pci_io_remap(int bus_from, int bus_to, uint32_t offset)
{
-int rval = 0;
-
-int bus, dev, fun, maxf;
-int bar, numBars = 0;
-
-uint8_t b;
-uint16_t s;
-uint32_t d;
-unsigned int bas, lim;
-
- if ( offset & ((1<<12)-1) ) {
- BSP_panic("rtems_pci_io_remap(): offset must be 4k aligned");
- return -1;
- }
-
-
- for ( bus=bus_from; bus < bus_to; bus++ ) {
- for ( dev = 0; dev<PCI_MAX_DEVICES; dev++ ) {
-
- maxf = 1;
-
- for ( fun = 0; fun < maxf; fun++ ) {
- pci_read_config_word( bus, dev, fun, PCI_VENDOR_ID, &s );
- if ( 0xffff == s )
- continue;
-
- pci_read_config_byte( bus, dev, fun, PCI_HEADER_TYPE, &b );
-
- /* readjust the max. function number to scan if this is a multi-function
- * device.
- */
- if ( 0 == fun && (PCI_MULTI_FUN & b) )
- maxf = PCI_MAX_FUNCTIONS;
-
- /* Check the header type; panic if unknown.
- * header type 0 has 6 bars, header type 1 (PCI-PCI bridge) has 2
- */
- b &= PCI_HEADER_TYPE_MSK;
- switch ( b ) {
- default:
- printk("PCI header type %i (@%i/%i/%i)\n", b, bus, dev, fun);
- BSP_panic("rtems_pci_io_remap(): unknown PCI header type");
- return -1; /* keep compiler happy */
-
- case PCI_HEADER_TYPE_CARDBUS:
- printk("PCI header type %i (@%i/%i/%i)\n", b, bus, dev, fun);
- BSP_panic("rtems_pci_io_remap(): don't know how to deal with Cardbus bridge");
- return -1;
-
- case PCI_HEADER_TYPE_NORMAL:
- numBars = 6*4; /* loop below counts reg. offset in bytes */
- break;
-
- case PCI_HEADER_TYPE_BRIDGE:
- numBars = 2*4; /* loop below counts reg. offset in bytes */
- break;
-
- }
-
- for ( bar = 0; bar < numBars; bar+=4 ) {
- pci_read_config_dword( bus, dev, fun, PCI_BASE_ADDRESS_0 + bar, &d );
- if ( PCI_BASE_ADDRESS_SPACE_IO & d ) {
- /* It's an I/O BAR; remap */
- d &= PCI_BASE_ADDRESS_IO_MASK;
- if ( d ) {
- /* IO bar was configured; add offset */
- d += offset;
- pci_write_config_dword( bus, dev, fun, PCI_BASE_ADDRESS_0 + bar, d );
- }
- } else {
- /* skip upper half of 64-bit window */
- d &= PCI_BASE_ADDRESS_MEM_TYPE_MASK;
- if ( PCI_BASE_ADDRESS_MEM_TYPE_64 == d )
- bar+=4;
- }
- }
-
- /* Now it's time to deal with bridges */
- if ( PCI_HEADER_TYPE_BRIDGE == b ) {
- /* must adjust the limit registers */
- pci_read_config_byte( bus, dev, fun, PCI_IO_LIMIT, &b );
- pci_read_config_word( bus, dev, fun, PCI_IO_LIMIT_UPPER16, &s );
- lim = (s<<16) + (( b & PCI_IO_RANGE_MASK ) << 8);
- lim += offset;
-
- pci_read_config_byte( bus, dev, fun, PCI_IO_BASE, &b );
- pci_read_config_word( bus, dev, fun, PCI_IO_BASE_UPPER16, &s );
- bas = (s<<16) + (( b & PCI_IO_RANGE_MASK ) << 8);
- bas += offset;
-
- b &= PCI_IO_RANGE_TYPE_MASK;
- switch ( b ) {
- default:
- printk("Unknown IO range type 0x%x (@%i/%i/%i)\n", b, bus, dev, fun);
- BSP_panic("rtems_pci_io_remap(): unknown IO range type");
- return -1;
-
- case PCI_IO_RANGE_TYPE_16:
- if ( bas > 0xffff || lim > 0xffff ) {
- printk("PCI I/O range type 1 (16bit) bridge (@%i/%i/%i) found:\n", bus, dev, fun);
- printk("WARNING: base (0x%08x) or limit (0x%08x) exceed 16-bit;\n", bas, lim);
- printk(" devices behind this bridge are NOT accessible!\n");
-
- /* FIXME: should we disable devices behind this bridge ? */
- bas = lim = 0;
- }
- break;
-
- case PCI_IO_RANGE_TYPE_32:
- break;
- }
-
- b = (uint8_t)((bas>>8) & PCI_IO_RANGE_MASK);
- pci_write_config_byte( bus, dev, fun, PCI_IO_BASE, b );
-
- s = (uint16_t)((bas>>16)&0xffff);
- pci_write_config_word( bus, dev, fun, PCI_IO_BASE_UPPER16, s);
-
- b = (uint8_t)((lim>>8) & PCI_IO_RANGE_MASK);
- pci_write_config_byte( bus, dev, fun, PCI_IO_LIMIT, b );
- s = (uint16_t)((lim>>16)&0xffff);
- pci_write_config_word( bus, dev, fun, PCI_IO_LIMIT_UPPER16, s );
- }
- }
- }
- }
- return rval;
+ int rval = 0;
+ int bus, dev, fun, maxf;
+ int bar, numBars = 0;
+ uint8_t b;
+ uint16_t s;
+ uint32_t d;
+ unsigned int bas, lim;
+
+ if ( offset & ((1<<12)-1) ) {
+ BSP_panic("rtems_pci_io_remap(): offset must be 4k aligned");
+ return -1;
+ }
+
+
+ for ( bus=bus_from; bus < bus_to; bus++ ) {
+ for ( dev = 0; dev<PCI_MAX_DEVICES; dev++ ) {
+
+ maxf = 1;
+
+ for ( fun = 0; fun < maxf; fun++ ) {
+ pci_read_config_word( bus, dev, fun, PCI_VENDOR_ID, &s );
+ if ( 0xffff == s )
+ continue;
+
+ pci_read_config_byte( bus, dev, fun, PCI_HEADER_TYPE, &b );
+
+ /* readjust the max. function number to scan if this is a multi-function
+ * device.
+ */
+ if ( 0 == fun && (PCI_MULTI_FUN & b) )
+ maxf = PCI_MAX_FUNCTIONS;
+
+ /* Check the header type; panic if unknown.
+ * header type 0 has 6 bars, header type 1 (PCI-PCI bridge) has 2
+ */
+ b &= PCI_HEADER_TYPE_MSK;
+ switch ( b ) {
+ default:
+ printk("PCI header type %i (@%i/%i/%i)\n", b, bus, dev, fun);
+ BSP_panic("rtems_pci_io_remap(): unknown PCI header type");
+ return -1; /* keep compiler happy */
+
+ case PCI_HEADER_TYPE_CARDBUS:
+ printk("PCI header type %i (@%i/%i/%i)\n", b, bus, dev, fun);
+ BSP_panic("rtems_pci_io_remap(): don't know how to deal with Cardbus bridge");
+ return -1;
+
+ case PCI_HEADER_TYPE_NORMAL:
+ numBars = 6*4; /* loop below counts reg. offset in bytes */
+ break;
+
+ case PCI_HEADER_TYPE_BRIDGE:
+ numBars = 2*4; /* loop below counts reg. offset in bytes */
+ break;
+
+ }
+
+ for ( bar = 0; bar < numBars; bar+=4 ) {
+ pci_read_config_dword( bus, dev, fun, PCI_BASE_ADDRESS_0 + bar, &d );
+ if ( PCI_BASE_ADDRESS_SPACE_IO & d ) {
+ /* It's an I/O BAR; remap */
+ d &= PCI_BASE_ADDRESS_IO_MASK;
+ if ( d ) {
+ /* IO bar was configured; add offset */
+ d += offset;
+ pci_write_config_dword( bus, dev, fun, PCI_BASE_ADDRESS_0 + bar, d );
+ }
+ } else {
+ /* skip upper half of 64-bit window */
+ d &= PCI_BASE_ADDRESS_MEM_TYPE_MASK;
+ if ( PCI_BASE_ADDRESS_MEM_TYPE_64 == d )
+ bar+=4;
+ }
+ }
+
+ /* Now it's time to deal with bridges */
+ if ( PCI_HEADER_TYPE_BRIDGE == b ) {
+ /* must adjust the limit registers */
+ pci_read_config_byte( bus, dev, fun, PCI_IO_LIMIT, &b );
+ pci_read_config_word( bus, dev, fun, PCI_IO_LIMIT_UPPER16, &s );
+ lim = (s<<16) + (( b & PCI_IO_RANGE_MASK ) << 8);
+ lim += offset;
+
+ pci_read_config_byte( bus, dev, fun, PCI_IO_BASE, &b );
+ pci_read_config_word( bus, dev, fun, PCI_IO_BASE_UPPER16, &s );
+ bas = (s<<16) + (( b & PCI_IO_RANGE_MASK ) << 8);
+ bas += offset;
+
+ b &= PCI_IO_RANGE_TYPE_MASK;
+ switch ( b ) {
+ default:
+ printk("Unknown IO range type 0x%x (@%i/%i/%i)\n", b, bus, dev, fun);
+ BSP_panic("rtems_pci_io_remap(): unknown IO range type");
+ return -1;
+
+ case PCI_IO_RANGE_TYPE_16:
+ if ( bas > 0xffff || lim > 0xffff ) {
+ printk("PCI I/O range type 1 (16bit) bridge (@%i/%i/%i) found:\n", bus, dev, fun);
+ printk("WARNING: base (0x%08x) or limit (0x%08x) exceed 16-bit;\n", bas, lim);
+ printk(" devices behind this bridge are NOT accessible!\n");
+
+ /* FIXME: should we disable devices behind this bridge ? */
+ bas = lim = 0;
+ }
+ break;
+
+ case PCI_IO_RANGE_TYPE_32:
+ break;
+ }
+
+ b = (uint8_t)((bas>>8) & PCI_IO_RANGE_MASK);
+ pci_write_config_byte( bus, dev, fun, PCI_IO_BASE, b );
+
+ s = (uint16_t)((bas>>16)&0xffff);
+ pci_write_config_word( bus, dev, fun, PCI_IO_BASE_UPPER16, s);
+
+ b = (uint8_t)((lim>>8) & PCI_IO_RANGE_MASK);
+ pci_write_config_byte( bus, dev, fun, PCI_IO_LIMIT, b );
+ s = (uint16_t)((lim>>16)&0xffff);
+ pci_write_config_word( bus, dev, fun, PCI_IO_LIMIT_UPPER16, s );
+ }
+ }
+ }
+ }
+ return rval;
}
diff --git a/c/src/lib/libbsp/powerpc/beatnik/startup/bspstart.c b/c/src/lib/libbsp/powerpc/beatnik/startup/bspstart.c
index d5dcd15..773ac21 100644
--- a/c/src/lib/libbsp/powerpc/beatnik/startup/bspstart.c
+++ b/c/src/lib/libbsp/powerpc/beatnik/startup/bspstart.c
@@ -143,8 +143,13 @@ char *BSP_commandline_string = cmdline_buf;
/* this routine is called early and must be safe with a not properly
* aligned stack
*/
-char *
-save_boot_params(void *r3, void *r4, void* r5, char *cmdline_start, char *cmdline_end)
+char *save_boot_params(
+ void *r3,
+ void *r4,
+ void *r5,
+ char *cmdline_start,
+ char *cmdline_end
+)
{
int i=cmdline_end-cmdline_start;
if ( i >= CMDLINE_BUF_SIZE )
diff --git a/c/src/lib/libbsp/powerpc/beatnik/vme/VMEConfig.h b/c/src/lib/libbsp/powerpc/beatnik/vme/VMEConfig.h
index b3bccee..986a016 100644
--- a/c/src/lib/libbsp/powerpc/beatnik/vme/VMEConfig.h
+++ b/c/src/lib/libbsp/powerpc/beatnik/vme/VMEConfig.h
@@ -8,13 +8,13 @@
* ----------
* This software ('beatnik' RTEMS BSP for MVME6100 and MVME5500) was
* created by Till Straumann <strauman at slac.stanford.edu>, 2005-2007,
- * Stanford Linear Accelerator Center, Stanford University.
+ * Stanford Linear Accelerator Center, Stanford University.
*
* Acknowledgement of sponsorship
* ------------------------------
* The 'beatnik' BSP was produced by
* the Stanford Linear Accelerator Center, Stanford University,
- * under Contract DE-AC03-76SFO0515 with the Department of Energy.
+ * under Contract DE-AC03-76SFO0515 with the Department of Energy.
*
* Government disclaimer of liability
* ----------------------------------
@@ -56,56 +56,59 @@
* hardcoded window lengths that match this
* layout when setting BATs:
*/
-#define _VME_A32_WIN0_ON_PCI 0x90000000
+#define _VME_A32_WIN0_ON_PCI 0x90000000
/* If _VME_CSR_ON_PCI is defined then the A32 window is reduced to accommodate
* CSR for space.
*/
-#define _VME_CSR_ON_PCI 0x9e000000
-#define _VME_A24_ON_PCI 0x9f000000
-#define _VME_A16_ON_PCI 0x9fff0000
+#define _VME_CSR_ON_PCI 0x9e000000
+#define _VME_A24_ON_PCI 0x9f000000
+#define _VME_A16_ON_PCI 0x9fff0000
/* start of the A32 window on the VME bus
* TODO: this should perhaps be a configuration option
*/
-#define _VME_A32_WIN0_ON_VME 0x20000000
+#define _VME_A32_WIN0_ON_VME 0x20000000
/* if _VME_DRAM_OFFSET is defined, the BSP
* will map our RAM onto the VME bus, starting
* at _VME_DRAM_OFFSET
*/
-#define _VME_DRAM_OFFSET 0x90000000
+#define _VME_DRAM_OFFSET 0x90000000
-#define BSP_VME_INSTALL_IRQ_MGR(err) \
- do { \
- err = -1; \
- switch (BSP_getBoardType()) { \
- case MVME6100: \
- err = theOps->install_irq_mgr( \
- VMETSI148_IRQ_MGR_FLAG_SHARED, \
- 0, BSP_IRQ_GPP_0 + 20, \
- 1, BSP_IRQ_GPP_0 + 21, \
- 2, BSP_IRQ_GPP_0 + 22, \
- 3, BSP_IRQ_GPP_0 + 23, \
- -1); \
- break; \
- \
- case MVME5500: \
- err = theOps->install_irq_mgr( \
- VMEUNIVERSE_IRQ_MGR_FLAG_SHARED | \
- VMEUNIVERSE_IRQ_MGR_FLAG_PW_WORKAROUND, \
- 0, BSP_IRQ_GPP_0 + 12, \
- 1, BSP_IRQ_GPP_0 + 13, \
- 2, BSP_IRQ_GPP_0 + 14, \
- 3, BSP_IRQ_GPP_0 + 15, \
- -1); \
- break; \
- \
- default: \
- printk("WARNING: unknown board; "); \
- break; \
- } \
- if ( err ) \
- printk("VME interrupt manager NOT INSTALLED (error: %i)\n", err); \
+extern int BSP_VMEInit(void);
+extern int BSP_VMEIrqMgrInstall(void);
+
+#define BSP_VME_INSTALL_IRQ_MGR(err) \
+ do { \
+ err = -1; \
+ switch (BSP_getBoardType()) { \
+ case MVME6100: \
+ err = theOps->install_irq_mgr( \
+ VMETSI148_IRQ_MGR_FLAG_SHARED, \
+ 0, BSP_IRQ_GPP_0 + 20, \
+ 1, BSP_IRQ_GPP_0 + 21, \
+ 2, BSP_IRQ_GPP_0 + 22, \
+ 3, BSP_IRQ_GPP_0 + 23, \
+ -1); \
+ break; \
+\
+ case MVME5500: \
+ err = theOps->install_irq_mgr( \
+ VMEUNIVERSE_IRQ_MGR_FLAG_SHARED | \
+ VMEUNIVERSE_IRQ_MGR_FLAG_PW_WORKAROUND, \
+ 0, BSP_IRQ_GPP_0 + 12, \
+ 1, BSP_IRQ_GPP_0 + 13, \
+ 2, BSP_IRQ_GPP_0 + 14, \
+ 3, BSP_IRQ_GPP_0 + 15, \
+ -1); \
+ break; \
+\
+ default: \
+ printk("WARNING: unknown board; "); \
+ break; \
+ } \
+ if ( err ) \
+ printk("VME interrupt manager NOT INSTALLED (error: %i)\n", err); \
} while (0)
#endif
--
1.9.3
More information about the devel
mailing list