diff options
21 files changed, 153 insertions, 134 deletions
diff --git a/c/src/lib/libbsp/sparc/Makefile.am b/c/src/lib/libbsp/sparc/Makefile.am index 67bb6b68e1..9da72fa7f3 100644 --- a/c/src/lib/libbsp/sparc/Makefile.am +++ b/c/src/lib/libbsp/sparc/Makefile.am @@ -14,6 +14,7 @@ EXTRA_DIST += shared/irq/irq-shared.c # AMBA Plug&Play bus EXTRA_DIST += shared/include/ambapp.h EXTRA_DIST += shared/include/ambapp_ids.h +EXTRA_DIST += shared/include/grlib.h EXTRA_DIST += shared/amba/ambapp.c EXTRA_DIST += shared/amba/ambapp_alloc.c EXTRA_DIST += shared/amba/ambapp_count.c diff --git a/c/src/lib/libbsp/sparc/leon2/Makefile.am b/c/src/lib/libbsp/sparc/leon2/Makefile.am index 71e19f2c8c..9699bf1a32 100644 --- a/c/src/lib/libbsp/sparc/leon2/Makefile.am +++ b/c/src/lib/libbsp/sparc/leon2/Makefile.am @@ -78,6 +78,7 @@ libbsp_a_SOURCES += \ # AMBA bus include_HEADERS += ../../sparc/shared/include/ambapp.h include_HEADERS += ../../sparc/shared/include/ambapp_ids.h +include_HEADERS += ../../sparc/shared/include/grlib.h libbsp_a_SOURCES += ../../sparc/shared/amba/ambapp.c libbsp_a_SOURCES += ../../sparc/shared/amba/ambapp_alloc.c libbsp_a_SOURCES += ../../sparc/shared/amba/ambapp_count.c diff --git a/c/src/lib/libbsp/sparc/leon2/preinstall.am b/c/src/lib/libbsp/sparc/leon2/preinstall.am index 2978d58b0c..84aa2b4530 100644 --- a/c/src/lib/libbsp/sparc/leon2/preinstall.am +++ b/c/src/lib/libbsp/sparc/leon2/preinstall.am @@ -161,6 +161,10 @@ $(PROJECT_INCLUDE)/ambapp_ids.h: ../../sparc/shared/include/ambapp_ids.h $(PROJE $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/ambapp_ids.h PREINSTALL_FILES += $(PROJECT_INCLUDE)/ambapp_ids.h +$(PROJECT_INCLUDE)/grlib.h: ../../sparc/shared/include/grlib.h $(PROJECT_INCLUDE)/$(dirstamp) + $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/grlib.h +PREINSTALL_FILES += $(PROJECT_INCLUDE)/grlib.h + $(PROJECT_INCLUDE)/i2cmst.h: ../../sparc/shared/include/i2cmst.h $(PROJECT_INCLUDE)/$(dirstamp) $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/i2cmst.h PREINSTALL_FILES += $(PROJECT_INCLUDE)/i2cmst.h diff --git a/c/src/lib/libbsp/sparc/leon2/rasta/rasta.c b/c/src/lib/libbsp/sparc/leon2/rasta/rasta.c index 0be7e4bf38..087f9bec45 100644 --- a/c/src/lib/libbsp/sparc/leon2/rasta/rasta.c +++ b/c/src/lib/libbsp/sparc/leon2/rasta/rasta.c @@ -10,6 +10,7 @@ #include <pci.h> #include <rasta.h> #include <ambapp.h> +#include <grlib.h> #include <grcan_rasta.h> #include <grspw_rasta.h> #include <b1553brm_rasta.h> @@ -41,32 +42,10 @@ #define DBG(x...) #endif -/* -typedef struct { - volatile unsigned int ilevel; - volatile unsigned int ipend; - volatile unsigned int iforce; - volatile unsigned int iclear; - volatile unsigned int mpstat; - volatile unsigned int notused01; - volatile unsigned int notused02; - volatile unsigned int notused03; - volatile unsigned int notused10; - volatile unsigned int notused11; - volatile unsigned int notused12; - volatile unsigned int notused13; - volatile unsigned int notused20; - volatile unsigned int notused21; - volatile unsigned int notused22; - volatile unsigned int notused23; - volatile unsigned int mask[16]; - volatile unsigned int force[16]; -} LEON3_IrqCtrl_Regs_Map; -*/ static int bus, dev, fun; -LEON3_IrqCtrl_Regs_Map *irq = NULL; -LEON_Register_Map *regs = (LEON_Register_Map *)0x80000000; +struct irqmp_regs *irq = NULL; +LEON_Register_Map *regs = (LEON_Register_Map *)0x80000000; struct gpio_reg *gpio0, *gpio1; @@ -291,7 +270,7 @@ int rasta_register(void) apb_base[2] = 0x000e8000; #endif /* Set up rasta irq controller */ - irq = (LEON3_IrqCtrl_Regs_Map *) (bar0+IRQ_OFFSET); + irq = (struct irqmp_regs *) (bar0+IRQ_OFFSET); irq->iclear = 0xffff; irq->ilevel = 0; irq->mask[0] = 0xffff & ~(UART0_IRQ|UART1_IRQ|SPW0_IRQ|SPW1_IRQ|SPW2_IRQ|GRCAN_IRQ|BRM_IRQ); diff --git a/c/src/lib/libbsp/sparc/leon3/Makefile.am b/c/src/lib/libbsp/sparc/leon3/Makefile.am index 4c7d194318..8b21893fc7 100644 --- a/c/src/lib/libbsp/sparc/leon3/Makefile.am +++ b/c/src/lib/libbsp/sparc/leon3/Makefile.am @@ -44,6 +44,7 @@ libbsp_a_SOURCES += gnatsupp/gnatsupp.c ../../sparc/shared/gnatcommon.c include_HEADERS += include/amba.h include_HEADERS += ../../sparc/shared/include/ambapp.h include_HEADERS += ../../sparc/shared/include/ambapp_ids.h +include_HEADERS += ../../sparc/shared/include/grlib.h libbsp_a_SOURCES += amba/amba.c libbsp_a_SOURCES += ../../sparc/shared/amba/ambapp.c libbsp_a_SOURCES += ../../sparc/shared/amba/ambapp_alloc.c diff --git a/c/src/lib/libbsp/sparc/leon3/amba/amba.c b/c/src/lib/libbsp/sparc/leon3/amba/amba.c index 63d35bc9e5..eb7b0f2a40 100644 --- a/c/src/lib/libbsp/sparc/leon3/amba/amba.c +++ b/c/src/lib/libbsp/sparc/leon3/amba/amba.c @@ -25,7 +25,7 @@ struct ambapp_bus ambapp_plb; extern void leon3_ext_irq_init(void); /* Pointers to Interrupt Controller configuration registers */ -volatile LEON3_IrqCtrl_Regs_Map *LEON3_IrqCtrl_Regs; +volatile struct irqmp_regs *LEON3_IrqCtrl_Regs; /* * amba_initialize @@ -61,8 +61,7 @@ void amba_initialize(void) asm volatile( "mov 1, %g1; ta 0x0" ); } - LEON3_IrqCtrl_Regs = (volatile LEON3_IrqCtrl_Regs_Map *) - DEV_TO_APB(adev)->start; + LEON3_IrqCtrl_Regs = (volatile struct irqmp_regs *)DEV_TO_APB(adev)->start; if ((LEON3_IrqCtrl_Regs->ampctrl >> 28) > 0) { /* IRQ Controller has support for multiple IRQ Controllers, each * CPU can be routed to different Controllers, we find out which @@ -85,7 +84,7 @@ void amba_initialize(void) VENDOR_GAISLER, GAISLER_GPTIMER, ambapp_find_by_idx, NULL); if (adev) { - LEON3_Timer_Regs = (volatile LEON3_Timer_Regs_Map *)DEV_TO_APB(adev)->start; + LEON3_Timer_Regs = (volatile struct gptimer_regs *)DEV_TO_APB(adev)->start; /* Register AMBA Bus Frequency */ ambapp_freq_init(&ambapp_plb, adev, diff --git a/c/src/lib/libbsp/sparc/leon3/clock/ckinit.c b/c/src/lib/libbsp/sparc/leon3/clock/ckinit.c index 2a75a35a62..ce47cb6adb 100644 --- a/c/src/lib/libbsp/sparc/leon3/clock/ckinit.c +++ b/c/src/lib/libbsp/sparc/leon3/clock/ckinit.c @@ -38,7 +38,7 @@ #endif -volatile LEON3_Timer_Regs_Map *LEON3_Timer_Regs = 0; +volatile struct gptimer_regs *LEON3_Timer_Regs = 0; static int clkirq; #define CLOCK_VECTOR LEON_TRAP_TYPE( clkirq ) @@ -65,9 +65,9 @@ static int clkirq; VENDOR_GAISLER, GAISLER_GPTIMER, ambapp_find_by_idx, NULL); \ if (adev) { \ /* Found APB GPTIMER Timer */ \ - LEON3_Timer_Regs = (volatile LEON3_Timer_Regs_Map *) \ + LEON3_Timer_Regs = (volatile struct gptimer_regs *) \ DEV_TO_APB(adev)->start; \ - clkirq = (LEON3_Timer_Regs->status & 0xf8) >> 3; \ + clkirq = (LEON3_Timer_Regs->cfg & 0xf8) >> 3; \ \ Adjust_clkirq_for_node(); \ } \ @@ -83,7 +83,7 @@ static int clkirq; LEON3_Timer_Regs->timer[LEON3_CLOCK_INDEX].reload = \ rtems_configuration_get_microseconds_per_tick() - 1; \ \ - LEON3_Timer_Regs->timer[LEON3_CLOCK_INDEX].conf = \ + LEON3_Timer_Regs->timer[LEON3_CLOCK_INDEX].ctrl = \ LEON3_GPTIMER_EN | LEON3_GPTIMER_RL | \ LEON3_GPTIMER_LD | LEON3_GPTIMER_IRQEN; \ } while (0) @@ -91,7 +91,7 @@ static int clkirq; #define Clock_driver_support_shutdown_hardware() \ do { \ LEON_Mask_interrupt(LEON_TRAP_TYPE(clkirq)); \ - LEON3_Timer_Regs->timer[LEON3_CLOCK_INDEX].conf = 0; \ + LEON3_Timer_Regs->timer[LEON3_CLOCK_INDEX].ctrl = 0; \ } while (0) uint32_t bsp_clock_nanoseconds_since_last_tick(void) diff --git a/c/src/lib/libbsp/sparc/leon3/console/console.c b/c/src/lib/libbsp/sparc/leon3/console/console.c index 0575468ffc..3870685b50 100644 --- a/c/src/lib/libbsp/sparc/leon3/console/console.c +++ b/c/src/lib/libbsp/sparc/leon3/console/console.c @@ -49,14 +49,14 @@ int syscon_uart_index __attribute__((weak)) = 0; */ extern void apbuart_outbyte_polled( - ambapp_apb_uart *regs, + struct apbuart_regs *regs, unsigned char ch, int do_cr_on_newline, int wait_sent ); -/* body is in debugputs.c */ +/* body is in printk_support.c */ /* * apbuart_inbyte_nonblocking @@ -64,12 +64,12 @@ extern void apbuart_outbyte_polled( * This routine polls for a character. */ -extern int apbuart_inbyte_nonblocking(ambapp_apb_uart *regs); +extern int apbuart_inbyte_nonblocking(struct apbuart_regs *regs); /* body is in debugputs.c */ struct apbuart_priv { - ambapp_apb_uart *regs; + struct apbuart_regs *regs; unsigned int freq_hz; #if CONSOLE_USE_INTERRUPTS int irq; @@ -252,7 +252,7 @@ int find_matching_apbuart(struct ambapp_dev *dev, int index, void *arg) struct ambapp_apb_info *apb = (struct ambapp_apb_info *)dev->devinfo; /* Extract needed information of one APBUART */ - apbuarts[uarts].regs = (ambapp_apb_uart *)apb->start; + apbuarts[uarts].regs = (struct apbuart_regs *)apb->start; #if CONSOLE_USE_INTERRUPTS apbuarts[uarts].irq = apb->irq; #endif diff --git a/c/src/lib/libbsp/sparc/leon3/console/printk_support.c b/c/src/lib/libbsp/sparc/leon3/console/printk_support.c index 080d4fad69..98150533cc 100644 --- a/c/src/lib/libbsp/sparc/leon3/console/printk_support.c +++ b/c/src/lib/libbsp/sparc/leon3/console/printk_support.c @@ -29,7 +29,7 @@ * ... */ int debug_uart_index __attribute__((weak)) = 0; -ambapp_apb_uart *dbg_uart = NULL; +struct apbuart_regs *dbg_uart = NULL; /* Before UART driver has registered (or when no UART is available), calls to * printk that gets to bsp_out_char() will be filling data into the @@ -74,7 +74,7 @@ int bsp_debug_uart_init(void) * for printk */ apb = (struct ambapp_apb_info *)adev->devinfo; - dbg_uart = (ambapp_apb_uart *)apb->start; + dbg_uart = (struct apbuart_regs *)apb->start; dbg_uart->ctrl |= LEON_REG_UART_CTRL_RE | LEON_REG_UART_CTRL_TE; dbg_uart->status = 0; return 1; @@ -88,7 +88,7 @@ int bsp_debug_uart_init(void) * This routine transmits a character using polling. */ void apbuart_outbyte_polled( - ambapp_apb_uart *regs, + struct apbuart_regs *regs, unsigned char ch, int do_cr_on_newline, int wait_sent @@ -121,7 +121,7 @@ send: * * This routine polls for a character. */ -int apbuart_inbyte_nonblocking(ambapp_apb_uart *regs) +int apbuart_inbyte_nonblocking(struct apbuart_regs *regs) { /* Clear errors */ if (regs->status & LEON_REG_UART_STATUS_ERR) diff --git a/c/src/lib/libbsp/sparc/leon3/include/amba.h b/c/src/lib/libbsp/sparc/leon3/include/amba.h index a0479331c1..cb45e58b61 100644 --- a/c/src/lib/libbsp/sparc/leon3/include/amba.h +++ b/c/src/lib/libbsp/sparc/leon3/include/amba.h @@ -25,6 +25,7 @@ #define LEON3_APB_SLAVES 16 #include <ambapp.h> +#include <grlib.h> #ifdef __cplusplus extern "C" { diff --git a/c/src/lib/libbsp/sparc/leon3/include/leon.h b/c/src/lib/libbsp/sparc/leon3/include/leon.h index 32d228e045..42c47d69b6 100644 --- a/c/src/lib/libbsp/sparc/leon3/include/leon.h +++ b/c/src/lib/libbsp/sparc/leon3/include/leon.h @@ -44,30 +44,6 @@ extern "C" { ( (_trap) >= 0x11 && \ (_trap) <= 0x1F ) -typedef struct { - volatile unsigned int value; - volatile unsigned int reload; - volatile unsigned int conf; - volatile unsigned int notused; -} LEON3_Timer_SubType; - -typedef struct { - volatile unsigned int scaler_value; /* common timer registers */ - volatile unsigned int scaler_reload; - volatile unsigned int status; - volatile unsigned int notused; - LEON3_Timer_SubType timer[8]; -} LEON3_Timer_Regs_Map; - -typedef struct { - volatile unsigned int iodata; - volatile unsigned int ioout; - volatile unsigned int iodir; - volatile unsigned int irqmask; - volatile unsigned int irqpol; - volatile unsigned int irqedge; -} LEON3_IOPORT_Regs_Map; - /* /\* */ /* * This is used to manipulate the on-chip registers. */ /* * */ @@ -137,8 +113,8 @@ typedef struct { #define LEON_REG_UART_CTRL_FL 0x00000040 /* Flow control enable */ #define LEON_REG_UART_CTRL_LB 0x00000080 /* Loop Back enable */ -extern volatile LEON3_IrqCtrl_Regs_Map *LEON3_IrqCtrl_Regs; /* LEON3 Interrupt Controller */ -extern volatile LEON3_Timer_Regs_Map *LEON3_Timer_Regs; /* LEON3 GP Timer */ +extern volatile struct irqmp_regs *LEON3_IrqCtrl_Regs; /* LEON3 Interrupt Controller */ +extern volatile struct gptimer_regs *LEON3_Timer_Regs; /* LEON3 GP Timer */ /* LEON3 CPU Index of boot CPU */ extern int LEON3_Cpu_Index; diff --git a/c/src/lib/libbsp/sparc/leon3/leon_smc91111/leon_smc91111.c b/c/src/lib/libbsp/sparc/leon3/leon_smc91111/leon_smc91111.c index 9e582fb599..9b9961de7f 100644 --- a/c/src/lib/libbsp/sparc/leon3/leon_smc91111/leon_smc91111.c +++ b/c/src/lib/libbsp/sparc/leon3/leon_smc91111/leon_smc91111.c @@ -34,7 +34,7 @@ rtems_smc91111_driver_attach_leon3 (struct rtems_bsdnet_ifconfig *config, int attach) { unsigned long addr_mctrl = 0; - LEON3_IOPORT_Regs_Map *io; + struct grgpio_regs *io; struct ambapp_apb_info apbpio; struct ambapp_apb_info apbmctrl; @@ -63,7 +63,7 @@ rtems_smc91111_driver_attach_leon3 (struct rtems_bsdnet_ifconfig *config, /* Get controller address */ addr_mctrl = (unsigned long) apbmctrl.start; - io = (LEON3_IOPORT_Regs_Map *) apbpio.start; + io = (struct grgpio_regs *) apbpio.start; printk( "Activating Leon3 io port for smsc_lan91cxx (pio:%x mctrl:%x)\n", @@ -71,10 +71,10 @@ rtems_smc91111_driver_attach_leon3 (struct rtems_bsdnet_ifconfig *config, (unsigned int)addr_mctrl); /* Setup PIO IRQ */ - io->irqmask |= (1 << leon_scmv91111_configuration.pio); - io->irqpol |= (1 << leon_scmv91111_configuration.pio); - io->irqedge |= (1 << leon_scmv91111_configuration.pio); - io->iodir &= ~(1 << leon_scmv91111_configuration.pio); + io->imask |= (1 << leon_scmv91111_configuration.pio); + io->ipol |= (1 << leon_scmv91111_configuration.pio); + io->iedge |= (1 << leon_scmv91111_configuration.pio); + io->dir &= ~(1 << leon_scmv91111_configuration.pio); /* Setup memory controller I/O waitstates */ *((volatile unsigned int *) addr_mctrl) |= 0x10f80000; /* enable I/O area access */ diff --git a/c/src/lib/libbsp/sparc/leon3/preinstall.am b/c/src/lib/libbsp/sparc/leon3/preinstall.am index 540e37bdee..dffbb5aba4 100644 --- a/c/src/lib/libbsp/sparc/leon3/preinstall.am +++ b/c/src/lib/libbsp/sparc/leon3/preinstall.am @@ -89,6 +89,10 @@ $(PROJECT_INCLUDE)/ambapp_ids.h: ../../sparc/shared/include/ambapp_ids.h $(PROJE $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/ambapp_ids.h PREINSTALL_FILES += $(PROJECT_INCLUDE)/ambapp_ids.h +$(PROJECT_INCLUDE)/grlib.h: ../../sparc/shared/include/grlib.h $(PROJECT_INCLUDE)/$(dirstamp) + $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/grlib.h +PREINSTALL_FILES += $(PROJECT_INCLUDE)/grlib.h + $(PROJECT_INCLUDE)/bsp/irq-generic.h: ../../shared/include/irq-generic.h $(PROJECT_INCLUDE)/bsp/$(dirstamp) $(INSTALL_DATA) $< $(PROJECT_INCLUDE)/bsp/irq-generic.h PREINSTALL_FILES += $(PROJECT_INCLUDE)/bsp/irq-generic.h diff --git a/c/src/lib/libbsp/sparc/leon3/timer/timer.c b/c/src/lib/libbsp/sparc/leon3/timer/timer.c index 92c2b68b17..0f508a8a79 100644 --- a/c/src/lib/libbsp/sparc/leon3/timer/timer.c +++ b/c/src/lib/libbsp/sparc/leon3/timer/timer.c @@ -33,7 +33,7 @@ bool benchmark_timer_find_average_overhead; bool benchmark_timer_is_initialized = false; -extern volatile LEON3_Timer_Regs_Map *LEON3_Timer_Regs; +extern volatile struct gptimer_regs *LEON3_Timer_Regs; void benchmark_timer_initialize(void) { @@ -48,7 +48,7 @@ void benchmark_timer_initialize(void) } else { benchmark_timer_is_initialized = true; } - LEON3_Timer_Regs->timer[LEON3_TIMER_INDEX].conf = LEON3_GPTIMER_EN | LEON3_GPTIMER_LD; + LEON3_Timer_Regs->timer[LEON3_TIMER_INDEX].ctrl = LEON3_GPTIMER_EN | LEON3_GPTIMER_LD; } } diff --git a/c/src/lib/libbsp/sparc/shared/can/grcan.c b/c/src/lib/libbsp/sparc/shared/can/grcan.c index 3b0a14afac..d592fbaad3 100644 --- a/c/src/lib/libbsp/sparc/shared/can/grcan.c +++ b/c/src/lib/libbsp/sparc/shared/can/grcan.c @@ -26,6 +26,7 @@ #include <grcan.h> #include <ambapp.h> +#include <grlib.h> #define WRAP_AROUND_TX_MSGS 1 #define WRAP_AROUND_RX_MSGS 2 @@ -1097,11 +1098,11 @@ static rtems_device_driver grcan_initialize( /* LEON3: find timer address via AMBA Plug&Play info */ { struct ambapp_apb_info gptimer; - LEON3_Timer_Regs_Map *tregs; + struct gptimer_regs *tregs; if (ambapp_find_apbslv (&ambapp_plb, VENDOR_GAISLER, GAISLER_GPTIMER, &gptimer) == 1) { - tregs = (LEON3_Timer_Regs_Map *) gptimer.start; + tregs = (struct gptimer_regs *) gptimer.start; sys_freq_hz = (tregs->scaler_reload + 1) * 1000 * 1000; DBG("GRCAN: detected %dHZ system frequency\n\r", sys_freq_hz); } else { diff --git a/c/src/lib/libbsp/sparc/shared/can/occan.c b/c/src/lib/libbsp/sparc/shared/can/occan.c index 4fb932dc61..b1bf54e6d0 100644 --- a/c/src/lib/libbsp/sparc/shared/can/occan.c +++ b/c/src/lib/libbsp/sparc/shared/can/occan.c @@ -19,6 +19,7 @@ #include <leon.h> #include <ambapp.h> +#include <grlib.h> #include <occan.h> /* RTEMS -> ERRNO decoding table @@ -936,11 +937,11 @@ static rtems_device_driver occan_initialize(rtems_device_major_number major, rte /* LEON3: find timer address via AMBA Plug&Play info */ { struct ambapp_apb_info gptimer; - LEON3_Timer_Regs_Map *tregs; + struct gptimer_regs *tregs; if ( ambapp_find_apbslv(&ambapp_plb, VENDOR_GAISLER, GAISLER_GPTIMER, &gptimer) == 1 ){ - tregs = (LEON3_Timer_Regs_Map *)gptimer.start; + tregs = (struct gptimer_regs *)gptimer.start; sys_freq_hz = (tregs->scaler_reload+1)*1000*1000; DBG("OCCAN: detected %dHZ system frequency\n\r",sys_freq_hz); }else{ diff --git a/c/src/lib/libbsp/sparc/shared/i2c/i2cmst.c b/c/src/lib/libbsp/sparc/shared/i2c/i2cmst.c index 7ba7208622..7acf17d1b3 100644 --- a/c/src/lib/libbsp/sparc/shared/i2c/i2cmst.c +++ b/c/src/lib/libbsp/sparc/shared/i2c/i2cmst.c @@ -17,6 +17,7 @@ #include <bsp.h> #include <i2cmst.h> #include <ambapp.h> +#include <grlib.h> #include <rtems/libi2c.h> /* Enable debug printks? */ @@ -318,11 +319,11 @@ rtems_status_code leon_register_i2c(struct ambapp_bus *abus) /* LEON3: find timer address via AMBA Plug&Play info */ { struct ambapp_apb_info gptimer; - LEON3_Timer_Regs_Map *tregs; + struct gptimer_regs *tregs; if (ambapp_find_apbslv(abus, VENDOR_GAISLER, GAISLER_GPTIMER, &gptimer) == 1 ) { - tregs = (LEON3_Timer_Regs_Map *)gptimer.start; + tregs = (struct gptimer_regs *)gptimer.start; gr_i2cmst_desc.prv.sysfreq = (tregs->scaler_reload+1)*1000; } else { gr_i2cmst_desc.prv.sysfreq = 40000; /* Default to 40MHz */ diff --git a/c/src/lib/libbsp/sparc/shared/include/ambapp.h b/c/src/lib/libbsp/sparc/shared/include/ambapp.h index a22c5d020f..0650e06360 100644 --- a/c/src/lib/libbsp/sparc/shared/include/ambapp.h +++ b/c/src/lib/libbsp/sparc/shared/include/ambapp.h @@ -353,49 +353,6 @@ extern int ambapp_find_ahbslvs( int maxno); -/******** AMBA DEVICES *******/ - -/* ESA MEMORY CONTROLLER */ -typedef struct { - unsigned int mcfg1; - unsigned int mcfg2; - unsigned int mcfg3; -} ambapp_regmap_mctrl; - -/* APB UART */ -typedef struct { - volatile unsigned int data; - volatile unsigned int status; - volatile unsigned int ctrl; - volatile unsigned int scaler; -} ambapp_apb_uart; - -typedef struct { - volatile unsigned int ilevel; - volatile unsigned int ipend; - volatile unsigned int iforce; - volatile unsigned int iclear; - volatile unsigned int mpstat; - volatile unsigned int notused01; - volatile unsigned int notused02; - volatile unsigned int notused03; - volatile unsigned int ampctrl; - volatile unsigned int icsel[2]; - volatile unsigned int notused13; - volatile unsigned int notused20; - volatile unsigned int notused21; - volatile unsigned int notused22; - volatile unsigned int notused23; - volatile unsigned int mask[16]; - volatile unsigned int force[16]; - /* Extended IRQ registers */ - volatile unsigned int intid[16]; - /* 0x100, align to 4Kb boundary */ - volatile unsigned int resv1[(0x1000-0x100)/4]; -} LEON3_IrqCtrl_Regs_Map; - -/*****************************/ - #ifdef __cplusplus } #endif diff --git a/c/src/lib/libbsp/sparc/shared/include/grlib.h b/c/src/lib/libbsp/sparc/shared/include/grlib.h new file mode 100644 index 0000000000..7f1f7d0667 --- /dev/null +++ b/c/src/lib/libbsp/sparc/shared/include/grlib.h @@ -0,0 +1,91 @@ +/* + * Common GRLIB AMBA Core Register definitions + * + * COPYRIGHT (c) 2012 + * 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.com/license/LICENSE. + */ + +#ifndef __GRLIB_H__ +#define __GRLIB_H__ + +#ifdef __cplusplus +extern "C" { +#endif + +/* ESA MEMORY CONTROLLER */ +struct mctrl_regs { + unsigned int mcfg1; + unsigned int mcfg2; + unsigned int mcfg3; +}; + +/* APB UART */ +struct apbuart_regs { + volatile unsigned int data; + volatile unsigned int status; + volatile unsigned int ctrl; + volatile unsigned int scaler; +}; + +/* IRQMP and IRQAMP interrupt controllers */ +struct irqmp_regs { + volatile unsigned int ilevel; /* 0x00 */ + volatile unsigned int ipend; /* 0x04 */ + volatile unsigned int iforce; /* 0x08 */ + volatile unsigned int iclear; /* 0x0c */ + volatile unsigned int mpstat; /* 0x10 */ + volatile unsigned int bcast; /* 0x14 */ + volatile unsigned int notused02; /* 0x18 */ + volatile unsigned int notused03; /* 0x1c */ + volatile unsigned int ampctrl; /* 0x20 */ + volatile unsigned int icsel[2]; /* 0x24,0x28 */ + volatile unsigned int notused13; /* 0x2c */ + volatile unsigned int notused20; /* 0x30 */ + volatile unsigned int notused21; /* 0x34 */ + volatile unsigned int notused22; /* 0x38 */ + volatile unsigned int notused23; /* 0x3c */ + volatile unsigned int mask[16]; /* 0x40 */ + volatile unsigned int force[16]; /* 0x80 */ + /* Extended IRQ registers */ + volatile unsigned int intid[16]; /* 0xc0 */ + /* 0x100, align to 4Kb boundary */ + volatile unsigned int resv1[(0x1000-0x100)/4]; +}; + +/* GPTIMER Timer instance */ +struct gptimer_timer_regs { + volatile unsigned int value; + volatile unsigned int reload; + volatile unsigned int ctrl; + volatile unsigned int notused; +}; + +/* GPTIMER common registers */ +struct gptimer_regs { + volatile unsigned int scaler_value; /* common timer registers */ + volatile unsigned int scaler_reload; + volatile unsigned int cfg; + volatile unsigned int notused; + struct gptimer_timer_regs timer[7]; +}; + +/* GRGPIO GPIO */ +struct grgpio_regs { + volatile unsigned int data; /* 0x00 I/O port data register */ + volatile unsigned int output; /* 0x04 I/O port output register */ + volatile unsigned int dir; /* 0x08 I/O port direction register */ + volatile unsigned int imask; /* 0x0C Interrupt mask register */ + volatile unsigned int ipol; /* 0x10 Interrupt polarity register */ + volatile unsigned int iedge; /* 0x14 Interrupt edge register */ + volatile unsigned int bypass; /* 0x18 Bypass register */ +}; + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/c/src/lib/libbsp/sparc/shared/spw/grspw.c b/c/src/lib/libbsp/sparc/shared/spw/grspw.c index 8ab502023b..55986bad49 100644 --- a/c/src/lib/libbsp/sparc/shared/spw/grspw.c +++ b/c/src/lib/libbsp/sparc/shared/spw/grspw.c @@ -83,6 +83,7 @@ #include <ctype.h> #include <rtems/bspIo.h> #include <ambapp.h> +#include <grlib.h> #include <grspw.h> #define DBGSPW_IOCALLS 1 @@ -390,11 +391,11 @@ int GRSPW_PREFIX(_register)(struct ambapp_bus *bus) /* LEON3: find timer address via AMBA Plug&Play info */ { struct ambapp_apb_info gptimer; - LEON3_Timer_Regs_Map *tregs; + struct gptimer_regs *tregs; if ( ambapp_find_apbslv(&ambapp_plb, VENDOR_GAISLER, GAISLER_GPTIMER, &gptimer) == 1 ) { - tregs = (LEON3_Timer_Regs_Map *)gptimer.start; + tregs = (struct gptimer_regs *)gptimer.start; sys_freq_khz = (tregs->scaler_reload+1)*1000; SPACEWIRE_DBG("GRSPW: detected %dkHZ system frequency\n\r",sys_freq_khz); }else{ diff --git a/c/src/lib/libbsp/sparc/shared/uart/apbuart.c b/c/src/lib/libbsp/sparc/shared/uart/apbuart.c index d442e80a46..25d0373088 100644 --- a/c/src/lib/libbsp/sparc/shared/uart/apbuart.c +++ b/c/src/lib/libbsp/sparc/shared/uart/apbuart.c @@ -22,6 +22,7 @@ #include <string.h> #include <ambapp.h> +#include <grlib.h> #include <apbuart.h> #ifndef DEFAULT_TXBUF_SIZE @@ -79,7 +80,7 @@ static rtems_device_driver apbuart_write(rtems_device_major_number major, rtems_ static rtems_device_driver apbuart_control(rtems_device_major_number major, rtems_device_minor_number minor, void *arg); typedef struct { - ambapp_apb_uart *regs; + struct apbuart_regs *regs; int irq; int minor; int scaler; @@ -153,7 +154,7 @@ static void apbuart_hw_open(apbuart_priv *uart); #endif #if 0 -static int apbuart_outbyte_try(ambapp_apb_uart *regs, unsigned char ch) +static int apbuart_outbyte_try(struct apbuart_regs *regs, unsigned char ch) { if ( (READ_REG(®s->status) & LEON_REG_UART_STATUS_THE) == 0 ) return -1; /* Failed */ @@ -164,7 +165,7 @@ static int apbuart_outbyte_try(ambapp_apb_uart *regs, unsigned char ch) } -static int apbuart_inbyte_try(ambapp_apb_uart *regs) +static int apbuart_inbyte_try(struct apbuart_regs *regs) { unsigned int status; /* Clear errors if any */ @@ -386,11 +387,11 @@ static rtems_device_driver apbuart_initialize(rtems_device_major_number major, /* LEON3: find timer address via AMBA Plug&Play info */ { struct ambapp_apb_info gptimer; - LEON3_Timer_Regs_Map *tregs; + struct gptimer_regs *tregs; if ( ambapp_find_apbslv(&ambapp_plb, VENDOR_GAISLER, GAISLER_GPTIMER, &gptimer) == 1 ){ - tregs = (LEON3_Timer_Regs_Map *)gptimer.start; + tregs = (struct gptimer_regs *)gptimer.start; sys_freq_hz = (tregs->scaler_reload+1)*1000*1000; DBG("APBUART: detected %dHZ system frequency\n\r",sys_freq_hz); }else{ @@ -419,7 +420,7 @@ static rtems_device_driver apbuart_initialize(rtems_device_major_number major, printk("APBUART[%d]: at 0x%x irq %d (0x%x)\n\r",i,dev.start,dev.irq,(unsigned int)&apbuarts[i]); - apbuarts[i].regs = (ambapp_apb_uart *)dev.start; + apbuarts[i].regs = (struct apbuart_regs *)dev.start; apbuarts[i].irq = dev.irq; apbuarts[i].minor = i; |