LEON: updated drivers to use new AMBAPP Layer

The drivers are updated to use the new AMBA layer, however the
backwards-compatibility interface (ambapp_old) is used.

Signed-off-by: Daniel Hellstrom <daniel@gaisler.com>
This commit is contained in:
Daniel Hellstrom
2012-04-17 16:25:42 +02:00
committed by Gedare Bloom
parent fc6f872d3f
commit 7a01a888a7
31 changed files with 263 additions and 256 deletions

View File

@@ -1,5 +1,9 @@
/* /*
* $Id$ * GR-701 (Companion Chip) PCI board driver
*
* 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.
*/ */
#include <bsp.h> #include <bsp.h>
@@ -83,8 +87,8 @@ typedef struct {
int bus, dev, fun; int bus, dev, fun;
/* AMBA bus */ /* AMBA bus */
amba_confarea_type amba_bus; struct ambapp_bus amba_bus;
struct amba_mmap amba_maps[2]; struct ambapp_mmap amba_maps[2];
/* FT AHB SRAM */ /* FT AHB SRAM */
int ftsram_size; /* kb */ int ftsram_size; /* kb */
@@ -100,8 +104,7 @@ int init_pcif(void){
int i,bus,dev,fun; int i,bus,dev,fun;
pci_bridge_regs *pcib; pci_bridge_regs *pcib;
amba_bridge_regs *ambab; amba_bridge_regs *ambab;
int amba_master_cnt; struct ambapp_bus *abus;
amba_confarea_type *abus;
if ( BSP_pciFindDevice(0x1AC8, 0x0701, 0, &bus, &dev, &fun) == 0 ) { if ( BSP_pciFindDevice(0x1AC8, 0x0701, 0, &bus, &dev, &fun) == 0 ) {
; ;
@@ -136,13 +139,13 @@ int init_pcif(void){
/* AMBA MAP cc1.bars[1] (in CPU) ==> 0xf0000000(remote amba address) */ /* AMBA MAP cc1.bars[1] (in CPU) ==> 0xf0000000(remote amba address) */
cc1.amba_maps[0].size = 0x04000000; cc1.amba_maps[0].size = 0x04000000;
cc1.amba_maps[0].cpu_adr = cc1.bars[1]; cc1.amba_maps[0].local_adr = cc1.bars[1];
cc1.amba_maps[0].remote_amba_adr = 0xfc000000; cc1.amba_maps[0].remote_adr = 0xfc000000;
/* Mark end of table */ /* Mark end of table */
cc1.amba_maps[1].size=0; cc1.amba_maps[1].size=0;
cc1.amba_maps[1].cpu_adr = 0; cc1.amba_maps[1].local_adr = 0;
cc1.amba_maps[1].remote_amba_adr = 0; cc1.amba_maps[1].remote_adr = 0;
/* Enable I/O and Mem accesses */ /* Enable I/O and Mem accesses */
pci_read_config_dword(bus, dev, fun, 0x4, &com1); pci_read_config_dword(bus, dev, fun, 0x4, &com1);
@@ -161,16 +164,14 @@ int init_pcif(void){
/* Scan bus for AMBA devices */ /* Scan bus for AMBA devices */
abus = &cc1.amba_bus; abus = &cc1.amba_bus;
memset(abus,0,sizeof(amba_confarea_type)); memset(abus,0,sizeof(*abus));
amba_scan(abus,cc1.bars[1]+0x3f00000,&cc1.amba_maps[0]); ambapp_scan(abus, cc1.bars[1]+0x3f00000, NULL, &cc1.amba_maps[0]);
/* Get number of amba masters */ /* Init all msters, max 16 */
amba_master_cnt = abus->ahbmst.devnr; for(i=1; i<16; i++) {
#ifdef BOARD_INFO
printk("Found %d AMBA masters\n\r",amba_master_cnt);
#endif
for(i=1; i<amba_master_cnt; i++){
ambab->ambabars[i] = 0x40000000; ambab->ambabars[i] = 0x40000000;
if (READ_REG(&ambab->ambabars[i]) != 0x40000000)
break;
} }
/* Enable PCI Master */ /* Enable PCI Master */
@@ -192,20 +193,22 @@ int init_pcif(void){
#define GAISLER_FTAHBRAM 0x50 #define GAISLER_FTAHBRAM 0x50
#endif #endif
int init_onboard_sram(void){ int init_onboard_sram(void){
amba_ahb_device ahb; struct ambapp_ahb_info ahb;
amba_apb_device apb; struct ambapp_apb_info apb;
unsigned int conf, size; unsigned int conf, size;
/* Find SRAM controller /* Find SRAM controller
* 1. AHB slave interface * 1. AHB slave interface
* 2. APB slave interface * 2. APB slave interface
*/ */
if ( amba_find_apbslv(&cc1.amba_bus,VENDOR_GAISLER,GAISLER_FTAHBRAM,&apb) != 1 ){ if ( ambapp_find_apbslv(&cc1.amba_bus, VENDOR_GAISLER, GAISLER_FTAHBRAM,
&apb) != 1 ){
printk("On Board FT SRAM not found (APB)\n"); printk("On Board FT SRAM not found (APB)\n");
return -1; return -1;
} }
if ( amba_find_ahbslv(&cc1.amba_bus,VENDOR_GAISLER,GAISLER_FTAHBRAM,&ahb) != 1 ){ if ( ambapp_find_ahbslv(&cc1.amba_bus, VENDOR_GAISLER, GAISLER_FTAHBRAM,
&ahb) != 1 ){
printk("On Board FT SRAM not found (AHB)\n"); printk("On Board FT SRAM not found (AHB)\n");
return -1; return -1;
} }

View File

@@ -1,5 +1,9 @@
/* /*
* $Id$ * GR-RASTA-IO PCI board driver
*
* 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.
*/ */
#include <rtems/bspIo.h> #include <rtems/bspIo.h>
@@ -209,16 +213,18 @@ void rasta_interrrupt_register(void *handler, int irqno, void *arg)
} }
int rasta_get_gpio(amba_confarea_type *abus, int index, struct gpio_reg **regs, int *irq) int rasta_get_gpio(struct ambapp_bus *abus, int index, struct gpio_reg **regs,
int *irq)
{ {
amba_apb_device dev; struct ambapp_apb_info dev;
int cores; int cores;
if ( !abus ) if ( !abus )
return -1; return -1;
/* Scan PnP info for GPIO port number 'index' */ /* Scan PnP info for GPIO port number 'index' */
cores = amba_find_next_apbslv(abus,VENDOR_GAISLER,GAISLER_PIOPORT,&dev,index); cores = ambapp_find_apbslv_next(abus, VENDOR_GAISLER, GAISLER_GPIO, &dev,
index);
if ( cores < 1 ) if ( cores < 1 )
return -1; return -1;
@@ -232,8 +238,8 @@ int rasta_get_gpio(amba_confarea_type *abus, int index, struct gpio_reg **regs,
} }
/* AMBA Plug&Play information */ /* AMBA Plug&Play information */
static amba_confarea_type abus; static struct ambapp_bus abus;
static struct amba_mmap amba_maps[3]; static struct ambapp_mmap amba_maps[3];
int rasta_register(void) int rasta_register(void)
{ {
@@ -316,23 +322,24 @@ int rasta_register(void)
/* AMBA MAP bar0 (in CPU) ==> 0x80000000(remote amba address) */ /* AMBA MAP bar0 (in CPU) ==> 0x80000000(remote amba address) */
amba_maps[0].size = 0x10000000; amba_maps[0].size = 0x10000000;
amba_maps[0].cpu_adr = bar0; amba_maps[0].local_adr = bar0;
amba_maps[0].remote_amba_adr = 0x80000000; amba_maps[0].remote_adr = 0x80000000;
/* AMBA MAP bar1 (in CPU) ==> 0x40000000(remote amba address) */ /* AMBA MAP bar1 (in CPU) ==> 0x40000000(remote amba address) */
amba_maps[1].size = 0x10000000; amba_maps[1].size = 0x10000000;
amba_maps[1].cpu_adr = bar1; amba_maps[1].local_adr = bar1;
amba_maps[1].remote_amba_adr = 0x40000000; amba_maps[1].remote_adr = 0x40000000;
/* Mark end of table */ /* Mark end of table */
amba_maps[2].size=0; amba_maps[2].size=0;
amba_maps[2].cpu_adr = 0; amba_maps[2].local_adr = 0;
amba_maps[2].remote_amba_adr = 0; amba_maps[2].remote_adr = 0;
memset(&abus,0,sizeof(abus)); memset(&abus,0,sizeof(abus));
/* Start AMBA PnP scan at first AHB bus */ /* Start AMBA PnP scan at first AHB bus */
amba_scan(&abus,bar0+(AHB1_IOAREA_BASE_ADDR&~0xf0000000),&amba_maps[0]); ambapp_scan(&abus, bar0 + (AHB1_IOAREA_BASE_ADDR & ~0xf0000000), NULL,
&amba_maps[0]);
printk("Registering RASTA GRCAN driver\n\r"); printk("Registering RASTA GRCAN driver\n\r");

View File

@@ -279,7 +279,7 @@ typedef struct {
static int brm_cores; static int brm_cores;
static unsigned int allbrm_memarea; static unsigned int allbrm_memarea;
static brm_priv *brms; static brm_priv *brms;
static amba_confarea_type *amba_bus; static struct ambapp_bus *amba_bus;
static unsigned int allbrm_cfg_clksel; static unsigned int allbrm_cfg_clksel;
static unsigned int allbrm_cfg_clkdiv; static unsigned int allbrm_cfg_clkdiv;
static unsigned int allbrm_cfg_freq; static unsigned int allbrm_cfg_freq;
@@ -325,7 +325,7 @@ int brm_register_leon3_ramon_fpga(void){
* The BRM is always clocked with 24MHz. * The BRM is always clocked with 24MHz.
* 3 in BRM enhanced register will select 24MHz * 3 in BRM enhanced register will select 24MHz
*/ */
return b1553brm_register(&amba_conf,0,0,3); return b1553brm_register(&ambapp_plb, 0, 0, 3);
} }
int brm_register_leon3_ramon_asic(void){ int brm_register_leon3_ramon_asic(void){
@@ -335,12 +335,12 @@ int brm_register_leon3_ramon_asic(void){
* *
* 3 in BRM enhanced register will select 24MHz * 3 in BRM enhanced register will select 24MHz
*/ */
return b1553brm_register(&amba_conf,2,0,3); return b1553brm_register(&ambapp_plb, 2, 0, 3);
} }
#endif #endif
#endif #endif
int B1553BRM_PREFIX(_register)(amba_confarea_type *bus, unsigned int clksel, unsigned int clkdiv, unsigned int brm_freq) int B1553BRM_PREFIX(_register)(struct ambapp_bus *bus, unsigned int clksel, unsigned int clkdiv, unsigned int brm_freq)
{ {
rtems_status_code r; rtems_status_code r;
rtems_device_major_number m; rtems_device_major_number m;
@@ -568,7 +568,7 @@ static rtems_device_driver brm_initialize(rtems_device_major_number major, rtems
int dev_cnt; int dev_cnt;
char fs_name[20]; char fs_name[20];
brm_priv *brm; brm_priv *brm;
amba_ahb_device ambadev; struct ambapp_ahb_info ambadev;
char *mem; char *mem;
FUNCDBG("brm_initialize\n"); FUNCDBG("brm_initialize\n");
@@ -577,7 +577,7 @@ static rtems_device_driver brm_initialize(rtems_device_major_number major, rtems
strcpy(fs_name,B1553BRM_DEVNAME); strcpy(fs_name,B1553BRM_DEVNAME);
/* Find all BRM devices */ /* Find all BRM devices */
dev_cnt = amba_get_number_ahbslv_devices(amba_bus,VENDOR_GAISLER,GAISLER_BRM); dev_cnt = ambapp_get_number_ahbslv_devices(amba_bus, VENDOR_GAISLER, GAISLER_B1553BRM);
if ( dev_cnt < 1 ){ if ( dev_cnt < 1 ){
/* Failed to find any CAN cores! */ /* Failed to find any CAN cores! */
printk("BRM: Failed to find any BRM cores\n\r"); printk("BRM: Failed to find any BRM cores\n\r");
@@ -619,7 +619,8 @@ static rtems_device_driver brm_initialize(rtems_device_major_number major, rtems
brm = &brms[minor]; brm = &brms[minor];
/* Get AMBA AHB device info from Plug&Play */ /* Get AMBA AHB device info from Plug&Play */
amba_find_next_ahbslv(amba_bus,VENDOR_GAISLER,GAISLER_BRM,&ambadev,minor); ambapp_find_ahbslv_next(amba_bus, VENDOR_GAISLER,
GAISLER_B1553BRM, &ambadev, minor);
/* Copy Basic HW info */ /* Copy Basic HW info */
brm->regs = (void *)ambadev.start[0]; brm->regs = (void *)ambadev.start[0];

View File

@@ -82,7 +82,7 @@ static void b1553brmpci_interrupt_handler(int irq, void *arg);
*/ */
int b1553brm_pci_register( int b1553brm_pci_register(
amba_confarea_type *bus, struct ambapp_bus *bus,
unsigned int clksel, unsigned int clksel,
unsigned int clkdiv, unsigned int clkdiv,
unsigned int brm_freq, unsigned int brm_freq,

View File

@@ -82,7 +82,7 @@ static void b1553brmrasta_interrupt_handler(int irq, void *arg);
*/ */
int b1553brm_rasta_register( int b1553brm_rasta_register(
amba_confarea_type *bus, struct ambapp_bus *bus,
unsigned int clksel, unsigned int clksel,
unsigned int clkdiv, unsigned int clkdiv,
unsigned int brm_freq, unsigned int brm_freq,

View File

@@ -212,7 +212,7 @@ struct grcan_priv {
static int grcan_core_cnt; static int grcan_core_cnt;
struct grcan_priv *grcans; struct grcan_priv *grcans;
static amba_confarea_type *amba_bus; static struct ambapp_bus *amba_bus;
struct grcan_device_info *grcan_cores; struct grcan_device_info *grcan_cores;
static int grcan_core_cnt; static int grcan_core_cnt;
@@ -1050,7 +1050,7 @@ static rtems_device_driver grcan_initialize(
{ {
int minor; int minor;
struct grcan_priv *pDev; struct grcan_priv *pDev;
amba_apb_device dev; struct ambapp_apb_info dev;
rtems_status_code status; rtems_status_code status;
char fs_name[20]; char fs_name[20];
unsigned int sys_freq_hz; unsigned int sys_freq_hz;
@@ -1062,10 +1062,12 @@ static rtems_device_driver grcan_initialize(
/* find GRCAN cores */ /* find GRCAN cores */
if ( !grcan_cores ) { if ( !grcan_cores ) {
grcan_core_cnt = amba_get_number_apbslv_devices(amba_bus,VENDOR_GAISLER,deviceid); grcan_core_cnt = ambapp_get_number_apbslv_devices(amba_bus, VENDOR_GAISLER,
deviceid);
if ( grcan_core_cnt < 1 ){ if ( grcan_core_cnt < 1 ){
deviceid = GAISLER_GRCAN; deviceid = GAISLER_GRCAN;
grcan_core_cnt = amba_get_number_apbslv_devices(amba_bus,VENDOR_GAISLER,deviceid); grcan_core_cnt = ambapp_get_number_apbslv_devices(amba_bus, VENDOR_GAISLER,
deviceid);
if ( grcan_core_cnt < 1 ) { if ( grcan_core_cnt < 1 ) {
DBG("GRCAN: Using AMBA Plug&Play, found %d cores\n",grcan_core_cnt); DBG("GRCAN: Using AMBA Plug&Play, found %d cores\n",grcan_core_cnt);
return RTEMS_UNSATISFIED; return RTEMS_UNSATISFIED;
@@ -1094,10 +1096,10 @@ static rtems_device_driver grcan_initialize(
#if defined(LEON3) #if defined(LEON3)
/* LEON3: find timer address via AMBA Plug&Play info */ /* LEON3: find timer address via AMBA Plug&Play info */
{ {
amba_apb_device gptimer; struct ambapp_apb_info gptimer;
LEON3_Timer_Regs_Map *tregs; LEON3_Timer_Regs_Map *tregs;
if (amba_find_apbslv (&amba_conf, VENDOR_GAISLER, GAISLER_GPTIMER, &gptimer) if (ambapp_find_apbslv (&ambapp_plb, VENDOR_GAISLER, GAISLER_GPTIMER, &gptimer)
== 1) { == 1) {
tregs = (LEON3_Timer_Regs_Map *) gptimer.start; tregs = (LEON3_Timer_Regs_Map *) gptimer.start;
sys_freq_hz = (tregs->scaler_reload + 1) * 1000 * 1000; sys_freq_hz = (tregs->scaler_reload + 1) * 1000 * 1000;
@@ -1132,7 +1134,7 @@ static rtems_device_driver grcan_initialize(
/* Find core address & IRQ */ /* Find core address & IRQ */
if ( !grcan_cores ) { if ( !grcan_cores ) {
amba_find_next_apbslv(amba_bus,VENDOR_GAISLER,deviceid,&dev,minor); ambapp_find_apbslv_next(amba_bus, VENDOR_GAISLER, deviceid, &dev, minor);
pDev->irq = dev.irq; pDev->irq = dev.irq;
pDev->regs = (struct grcan_regs *)dev.start; pDev->regs = (struct grcan_regs *)dev.start;
}else{ }else{
@@ -1799,7 +1801,7 @@ int GRCAN_PREFIX(_register_abs)(struct grcan_device_info *devices, int dev_cnt)
} }
/* Use prescanned AMBA Plug&Play information to find all GRCAN cores */ /* Use prescanned AMBA Plug&Play information to find all GRCAN cores */
int GRCAN_PREFIX(_register)(amba_confarea_type *abus) int GRCAN_PREFIX(_register)(struct ambapp_bus *abus)
{ {
FUNCDBG(); FUNCDBG();

View File

@@ -77,7 +77,7 @@ unsigned int grcan_rasta_rambase;
#include "grcan.c" #include "grcan.c"
int grcan_rasta_ram_register(amba_confarea_type *abus, int rambase) int grcan_rasta_ram_register(struct ambapp_bus *abus, int rambase)
{ {
grcan_rasta_rambase = rambase; grcan_rasta_rambase = rambase;

View File

@@ -282,7 +282,7 @@ static void occan_interrupt_handler(rtems_vector_number v);
#endif #endif
static int can_cores; static int can_cores;
static occan_priv *cans; static occan_priv *cans;
static amba_confarea_type *amba_bus; static struct ambapp_bus *amba_bus;
static unsigned int sys_freq_hz; static unsigned int sys_freq_hz;
@@ -914,7 +914,7 @@ static int pelican_speed_auto(occan_priv *priv){
static rtems_device_driver occan_initialize(rtems_device_major_number major, rtems_device_minor_number unused, void *arg){ static rtems_device_driver occan_initialize(rtems_device_major_number major, rtems_device_minor_number unused, void *arg){
int dev_cnt,minor,subcore_cnt,devi,subi,subcores; int dev_cnt,minor,subcore_cnt,devi,subi,subcores;
amba_ahb_device ambadev; struct ambapp_ahb_info ambadev;
occan_priv *can; occan_priv *can;
char fs_name[20]; char fs_name[20];
rtems_status_code status; rtems_status_code status;
@@ -922,7 +922,8 @@ static rtems_device_driver occan_initialize(rtems_device_major_number major, rte
strcpy(fs_name,OCCAN_DEVNAME); strcpy(fs_name,OCCAN_DEVNAME);
/* find device on amba bus */ /* find device on amba bus */
dev_cnt = amba_get_number_ahbslv_devices(amba_bus,VENDOR_GAISLER,GAISLER_OCCAN); dev_cnt = ambapp_get_number_ahbslv_devices(amba_bus, VENDOR_GAISLER,
GAISLER_CANAHB);
if ( dev_cnt < 1 ){ if ( dev_cnt < 1 ){
/* Failed to find any CAN cores! */ /* Failed to find any CAN cores! */
printk("OCCAN: Failed to find any CAN cores\n\r"); printk("OCCAN: Failed to find any CAN cores\n\r");
@@ -934,10 +935,11 @@ static rtems_device_driver occan_initialize(rtems_device_major_number major, rte
#if defined(LEON3) #if defined(LEON3)
/* LEON3: find timer address via AMBA Plug&Play info */ /* LEON3: find timer address via AMBA Plug&Play info */
{ {
amba_apb_device gptimer; struct ambapp_apb_info gptimer;
LEON3_Timer_Regs_Map *tregs; LEON3_Timer_Regs_Map *tregs;
if ( amba_find_apbslv(&amba_conf,VENDOR_GAISLER,GAISLER_GPTIMER,&gptimer) == 1 ){ if ( ambapp_find_apbslv(&ambapp_plb, VENDOR_GAISLER,
GAISLER_GPTIMER, &gptimer) == 1 ){
tregs = (LEON3_Timer_Regs_Map *)gptimer.start; tregs = (LEON3_Timer_Regs_Map *)gptimer.start;
sys_freq_hz = (tregs->scaler_reload+1)*1000*1000; sys_freq_hz = (tregs->scaler_reload+1)*1000*1000;
DBG("OCCAN: detected %dHZ system frequency\n\r",sys_freq_hz); DBG("OCCAN: detected %dHZ system frequency\n\r",sys_freq_hz);
@@ -973,7 +975,8 @@ static rtems_device_driver occan_initialize(rtems_device_major_number major, rte
*/ */
for(subcore_cnt=devi=0; devi<dev_cnt; devi++){ for(subcore_cnt=devi=0; devi<dev_cnt; devi++){
amba_find_next_ahbslv(amba_bus,VENDOR_GAISLER,GAISLER_OCCAN,&ambadev,devi); ambapp_find_ahbslv_next(amba_bus, VENDOR_GAISLER,
GAISLER_CANAHB, &ambadev, devi);
subcore_cnt += (ambadev.ver & 0x7)+1; subcore_cnt += (ambadev.ver & 0x7)+1;
} }
@@ -987,7 +990,8 @@ static rtems_device_driver occan_initialize(rtems_device_major_number major, rte
for(devi=0; devi<dev_cnt; devi++){ for(devi=0; devi<dev_cnt; devi++){
/* Get AHB device info */ /* Get AHB device info */
amba_find_next_ahbslv(amba_bus,VENDOR_GAISLER,GAISLER_OCCAN,&ambadev,devi); ambapp_find_ahbslv_next(amba_bus, VENDOR_GAISLER,
GAISLER_CANAHB, &ambadev, devi);
subcores = (ambadev.ver & 0x7)+1; subcores = (ambadev.ver & 0x7)+1;
DBG("OCCAN: on dev %d found %d sub cores\n\r",devi,subcores); DBG("OCCAN: on dev %d found %d sub cores\n\r",devi,subcores);
@@ -1802,7 +1806,7 @@ static void occan_interrupt_handler(rtems_vector_number v){
static rtems_driver_address_table occan_driver = OCCAN_DRIVER_TABLE_ENTRY; static rtems_driver_address_table occan_driver = OCCAN_DRIVER_TABLE_ENTRY;
int OCCAN_PREFIX(_register)(amba_confarea_type *bus){ int OCCAN_PREFIX(_register)(struct ambapp_bus *bus){
rtems_status_code r; rtems_status_code r;
rtems_device_major_number m; rtems_device_major_number m;

View File

@@ -46,7 +46,7 @@ static void inline occanpci_set_channel(occan_priv *priv, int channel){
*chan_sel = 0xffffffff; *chan_sel = 0xffffffff;
} }
int occan_pci_register(amba_confarea_type *bus) int occan_pci_register(struct ambapp_bus *bus)
{ {
/* Setup configuration */ /* Setup configuration */

View File

@@ -285,7 +285,7 @@ static gr_i2cmst_desc_t gr_i2cmst_desc = {
}; };
/* Scans for I2CMST core and initalizes i2c library */ /* Scans for I2CMST core and initalizes i2c library */
rtems_status_code leon_register_i2c(amba_confarea_type *abus) rtems_status_code leon_register_i2c(struct ambapp_bus *abus)
{ {
#if defined(DEBUG) #if defined(DEBUG)
printk("leon_register_i2c called..."); printk("leon_register_i2c called...");
@@ -293,11 +293,11 @@ rtems_status_code leon_register_i2c(amba_confarea_type *abus)
int rc; int rc;
int device_found = 0; int device_found = 0;
amba_apb_device apbi2cmst; struct ambapp_apb_info apbi2cmst;
/* Scan AMBA bus for I2CMST core */ /* Scan AMBA bus for I2CMST core */
device_found = amba_find_apbslv(abus, VENDOR_GAISLER, GAISLER_I2CMST, device_found = ambapp_find_apbslv(abus, VENDOR_GAISLER, GAISLER_I2CMST,
&apbi2cmst); &apbi2cmst);
if (device_found == 1) { if (device_found == 1) {
@@ -317,11 +317,11 @@ rtems_status_code leon_register_i2c(amba_confarea_type *abus)
#if defined(LEON3) #if defined(LEON3)
/* LEON3: find timer address via AMBA Plug&Play info */ /* LEON3: find timer address via AMBA Plug&Play info */
{ {
amba_apb_device gptimer; struct ambapp_apb_info gptimer;
LEON3_Timer_Regs_Map *tregs; LEON3_Timer_Regs_Map *tregs;
if (amba_find_apbslv(abus,VENDOR_GAISLER, if (ambapp_find_apbslv(abus, VENDOR_GAISLER,
GAISLER_GPTIMER,&gptimer) == 1 ) { GAISLER_GPTIMER, &gptimer) == 1 ) {
tregs = (LEON3_Timer_Regs_Map *)gptimer.start; tregs = (LEON3_Timer_Regs_Map *)gptimer.start;
gr_i2cmst_desc.prv.sysfreq = (tregs->scaler_reload+1)*1000; gr_i2cmst_desc.prv.sysfreq = (tregs->scaler_reload+1)*1000;
} else { } else {

View File

@@ -7,6 +7,8 @@
* The license and distribution terms for this file may be * The license and distribution terms for this file may be
* found in the file LICENSE in this distribution or at * found in the file LICENSE in this distribution or at
* http://www.rtems.com/license/LICENSE. * http://www.rtems.com/license/LICENSE.
*
* $Id$
*/ */
#ifndef __AMBAPP_H__ #ifndef __AMBAPP_H__
@@ -28,21 +30,21 @@ struct ambapp_apb_info;
struct ambapp_ahb_info; struct ambapp_ahb_info;
struct ambapp_dev { struct ambapp_dev {
struct ambapp_dev *next; /* Next */ struct ambapp_dev *next; /* Next */
struct ambapp_dev *prev; /* Previous Device. If (this == struct ambapp_dev *prev; /* Previous Device. If (this ==
* rev->child) prev is bus bridge */ * rev->child) prev is bus bridge */
struct ambapp_dev *children; /* Points to first device on sub-bus */ struct ambapp_dev *children; /* Points to first device on sub-bus */
void *owner; /* Owner of this AMBA device */ void *owner; /* Owner of this AMBA device */
unsigned char dev_type; /* AHB MST, AHB SLV or APB SLV*/ unsigned char dev_type; /* AHB MST, AHB SLV or APB SLV*/
unsigned char vendor; /* Vendor ID */ unsigned char vendor; /* Vendor ID */
unsigned short device; /* Device ID */ unsigned short device; /* Device ID */
int devinfo[0]; /* Device info (APB/AHB dep. on type) */ int devinfo[0]; /* Device info (APB/AHB dep. on type) */
}; };
#define AMBAPP_FLAG_FFACT_DIR 0x100 /* Frequency factor direction, 0=down, 1=up */ #define AMBAPP_FLAG_FFACT_DIR 0x100 /* Frequency factor direction, 0=down, 1=up */
#define AMBAPP_FLAG_FFACT 0x0f0 /* Frequency factor against top bus */ #define AMBAPP_FLAG_FFACT 0x0f0 /* Frequency factor against top bus */
#define AMBAPP_FLAG_MBUS 0x00c #define AMBAPP_FLAG_MBUS 0x00c
#define AMBAPP_FLAG_SBUS 0x003 #define AMBAPP_FLAG_SBUS 0x003
/* Get APB or AHB information from a AMBA device */ /* Get APB or AHB information from a AMBA device */
#define DEV_TO_APB(adev) ((struct ambapp_apb_info *)((adev)->devinfo)) #define DEV_TO_APB(adev) ((struct ambapp_apb_info *)((adev)->devinfo))
@@ -50,70 +52,70 @@ struct ambapp_dev {
#define DEV_TO_COMMON(adev) ((struct ambapp_common_info *)((adev)->devinfo)) #define DEV_TO_COMMON(adev) ((struct ambapp_common_info *)((adev)->devinfo))
/* Convert address of ambapp_apb_info/ambapp_ahb_info into ambapp_dev */ /* Convert address of ambapp_apb_info/ambapp_ahb_info into ambapp_dev */
#define APB_TO_DEV(apb_info) ((struct ambapp_dev *)(unsigned int(apb_info) - \ #define APB_TO_DEV(apb_info) ((struct ambapp_dev *)(unsigned int(apb_info) - \
offsetof(struct ambapp_dev, devinfo))) offsetof(struct ambapp_dev, devinfo)))
#define AHB_TO_DEV(ahb_info) ((struct ambapp_dev *)(unsigned int(ahb_info) - \ #define AHB_TO_DEV(ahb_info) ((struct ambapp_dev *)(unsigned int(ahb_info) - \
offsetof(struct ambapp_dev, devinfo))) offsetof(struct ambapp_dev, devinfo)))
struct ambapp_common_info { struct ambapp_common_info {
unsigned char irq; unsigned char irq;
unsigned char ver; unsigned char ver;
unsigned char ahbidx; /* AHB Bus Index */ unsigned char ahbidx; /* AHB Bus Index */
}; };
struct ambapp_apb_info { struct ambapp_apb_info {
/* COMMON */ /* COMMON */
unsigned char irq; unsigned char irq;
unsigned char ver; unsigned char ver;
unsigned char ahbidx; /* AHB Bus Index */ unsigned char ahbidx; /* AHB Bus Index */
/* APB SPECIFIC */ /* APB SPECIFIC */
unsigned int start; unsigned int start;
unsigned int mask; unsigned int mask;
}; };
struct ambapp_ahb_info { struct ambapp_ahb_info {
/* COMMON */ /* COMMON */
unsigned char irq; unsigned char irq;
unsigned char ver; unsigned char ver;
unsigned char ahbidx; /* AHB Bus Index */ unsigned char ahbidx; /* AHB Bus Index */
/* AHB SPECIFIC */ /* AHB SPECIFIC */
unsigned int start[4]; unsigned int start[4];
unsigned int mask[4]; unsigned int mask[4];
char type[4]; /* type[N] Determine type of start[N]-mask[N], char type[4]; /* type[N] Determine type of start[N]-mask[N],
* 2=AHB Memory Space, 3=AHB I/O Space */ * 2=AHB Memory Space, 3=AHB I/O Space */
unsigned int custom[3]; unsigned int custom[3];
}; };
/* Describes a complete AMBA Core. Each device may consist of 3 interfaces */ /* Describes a complete AMBA Core. Each device may consist of 3 interfaces */
struct ambapp_core { struct ambapp_core {
char irq; /* irq=-1 indicate no IRQ */ char irq; /* irq=-1 indicate no IRQ */
unsigned char vendor; unsigned char vendor;
unsigned short device; unsigned short device;
int index; /* Core index */ int index; /* Core index */
struct ambapp_ahb_info *ahb_mst; struct ambapp_ahb_info *ahb_mst;
struct ambapp_ahb_info *ahb_slv; struct ambapp_ahb_info *ahb_slv;
struct ambapp_apb_info *apb_slv; struct ambapp_apb_info *apb_slv;
}; };
struct ambapp_ahb_bus { struct ambapp_ahb_bus {
unsigned int ioarea; /* AHB Bus IOAREA */ unsigned int ioarea; /* AHB Bus IOAREA */
unsigned int freq_hz; /* Frequency of AHB Bus */ unsigned int freq_hz; /* Frequency of AHB Bus */
struct ambapp_dev *bridge; /* Bridge Device on Parent AHB Bus */ struct ambapp_dev *bridge;/* Bridge Device on Parent AHB Bus */
struct ambapp_dev *dev; /* First Device on AHB Bus */ struct ambapp_dev *dev; /* First Device on AHB Bus */
}; };
struct ambapp_mmap { struct ambapp_mmap {
unsigned int size; unsigned int size;
unsigned int local_adr; unsigned int local_adr;
unsigned int remote_adr; unsigned int remote_adr;
}; };
/* Complete AMBA PnP information */ /* Complete AMBA PnP information */
struct ambapp_bus { struct ambapp_bus {
struct ambapp_dev *root; /* AHB/APB Device Tree*/ struct ambapp_dev *root; /* AHB/APB Device Tree*/
struct ambapp_mmap *mmaps; /* Memory MAP Array */ struct ambapp_mmap *mmaps; /* Memory MAP Array */
struct ambapp_ahb_bus ahbs[AHB_BUS_MAX]; /* AHB Buses */ struct ambapp_ahb_bus ahbs[AHB_BUS_MAX]; /* AHB Buses */
}; };
/* /*
@@ -127,17 +129,17 @@ typedef int (*ambapp_func_t)(struct ambapp_dev *dev, int index, void *arg);
#define DEV_IS_ALLOCATED(dev) (dev->owner != NULL) #define DEV_IS_ALLOCATED(dev) (dev->owner != NULL)
/* Options to ambapp_for_each */ /* Options to ambapp_for_each */
#define OPTIONS_AHB_MSTS 0x00000001 #define OPTIONS_AHB_MSTS 0x00000001
#define OPTIONS_AHB_SLVS 0x00000002 #define OPTIONS_AHB_SLVS 0x00000002
#define OPTIONS_APB_SLVS 0x00000004 #define OPTIONS_APB_SLVS 0x00000004
#define OPTIONS_ALL_DEVS (OPTIONS_AHB_MSTS|OPTIONS_AHB_SLVS|OPTIONS_APB_SLVS) #define OPTIONS_ALL_DEVS (OPTIONS_AHB_MSTS|OPTIONS_AHB_SLVS|OPTIONS_APB_SLVS)
#define OPTIONS_FREE 0x00000010 #define OPTIONS_FREE 0x00000010
#define OPTIONS_ALLOCATED 0x00000020 #define OPTIONS_ALLOCATED 0x00000020
#define OPTIONS_ALL (OPTIONS_FREE|OPTIONS_ALLOCATED) #define OPTIONS_ALL (OPTIONS_FREE|OPTIONS_ALLOCATED)
/* Depth first search, Defualt is breath first search. */ /* Depth first search, Defualt is breath first search. */
#define OPTIONS_DEPTH_FIRST 0x00000100 #define OPTIONS_DEPTH_FIRST 0x00000100
#define DEV_AHB_NONE 0 #define DEV_AHB_NONE 0
#define DEV_AHB_MST 1 #define DEV_AHB_MST 1
@@ -146,14 +148,14 @@ typedef int (*ambapp_func_t)(struct ambapp_dev *dev, int index, void *arg);
/* Structures used to access Plug&Play information directly */ /* Structures used to access Plug&Play information directly */
struct ambapp_pnp_ahb { struct ambapp_pnp_ahb {
const unsigned int id; /* VENDOR, DEVICE, VER, IRQ, */ const unsigned int id; /* VENDOR, DEVICE, VER, IRQ, */
const unsigned int custom[3]; const unsigned int custom[3];
const unsigned int mbar[4]; /* MASK, ADDRESS, TYPE, CACHABLE/PREFETCHABLE */ const unsigned int mbar[4]; /* MASK, ADDRESS, TYPE, CACHABLE/PREFETCHABLE */
}; };
struct ambapp_pnp_apb { struct ambapp_pnp_apb {
const unsigned int id; /* VENDOR, DEVICE, VER, IRQ, */ const unsigned int id; /* VENDOR, DEVICE, VER, IRQ, */
const unsigned int iobar; /* MASK, ADDRESS, TYPE, CACHABLE/PREFETCHABLE */ const unsigned int iobar; /* MASK, ADDRESS, TYPE, CACHABLE/PREFETCHABLE */
}; };
#define ambapp_pnp_vendor(id) (((id) >> 24) & 0xff) #define ambapp_pnp_vendor(id) (((id) >> 24) & 0xff)
@@ -168,7 +170,7 @@ struct ambapp_pnp_apb {
#define ambapp_pnp_apb_start(iobar, base) ((base) | ((((iobar) & 0xfff00000)>>12) & (((iobar) & 0xfff0)<<4)) ) #define ambapp_pnp_apb_start(iobar, base) ((base) | ((((iobar) & 0xfff00000)>>12) & (((iobar) & 0xfff0)<<4)) )
#define ambapp_pnp_apb_mask(iobar) ((~(ambapp_pnp_mbar_mask(iobar)<<8) & 0x000fffff) + 1) #define ambapp_pnp_apb_mask(iobar) ((~(ambapp_pnp_mbar_mask(iobar)<<8) & 0x000fffff) + 1)
#define AMBA_TYPE_AHBIO_ADDR(addr, base_ioarea) ((unsigned int)(base_ioarea) | ((addr) >> 12)) #define AMBA_TYPE_AHBIO_ADDR(addr,base_ioarea) ((unsigned int)(base_ioarea) | ((addr) >> 12))
#define AMBA_TYPE_APBIO 0x1 #define AMBA_TYPE_APBIO 0x1
#define AMBA_TYPE_MEM 0x2 #define AMBA_TYPE_MEM 0x2
@@ -176,11 +178,11 @@ struct ambapp_pnp_apb {
/* Copy Data from AMBA PnP I/O Area */ /* Copy Data from AMBA PnP I/O Area */
typedef void *(*ambapp_memcpy_t)( typedef void *(*ambapp_memcpy_t)(
void *dest, /* Destination RAM copy */ void *dest, /* Destination RAM copy */
const void *src, /* Source AMBA PnP Address to copy from */ const void *src, /* Source AMBA PnP Address to copy from */
int n, /* Number of bytes to be copied */ int n, /* Number of bytes to be copied */
struct ambapp_bus *abus /* Optional AMBA Bus pointer */ struct ambapp_bus *abus /* Optional AMBA Bus pointer */
); );
/* Scan a AMBA Plug & Play bus and create all device structures describing the /* Scan a AMBA Plug & Play bus and create all device structures describing the
* the devices. The devices will form a tree, where every node describes one * the devices. The devices will form a tree, where every node describes one
@@ -196,24 +198,24 @@ typedef void *(*ambapp_memcpy_t)(
* *
*/ */
extern int ambapp_scan( extern int ambapp_scan(
struct ambapp_bus *abus, struct ambapp_bus *abus,
unsigned int ioarea, unsigned int ioarea,
ambapp_memcpy_t memfunc, ambapp_memcpy_t memfunc,
struct ambapp_mmap *mmaps struct ambapp_mmap *mmaps
); );
/* Initialize the frequency [Hz] of all AHB Buses from knowing the frequency /* Initialize the frequency [Hz] of all AHB Buses from knowing the frequency
* of one particular APB/AHB Device. * of one particular APB/AHB Device.
*/ */
extern void ambapp_freq_init( extern void ambapp_freq_init(
struct ambapp_bus *abus, struct ambapp_bus *abus,
struct ambapp_dev *dev, struct ambapp_dev *dev,
unsigned int freq); unsigned int freq);
/* Returns the frequency [Hz] of a AHB/APB device */ /* Returns the frequency [Hz] of a AHB/APB device */
extern unsigned int ambapp_freq_get( extern unsigned int ambapp_freq_get(
struct ambapp_bus *abus, struct ambapp_bus *abus,
struct ambapp_dev *dev); struct ambapp_dev *dev);
/* Iterates through all AMBA devices previously found, it calls func /* Iterates through all AMBA devices previously found, it calls func
* once for every device that match the search arguments. * once for every device that match the search arguments.
@@ -242,12 +244,12 @@ extern unsigned int ambapp_freq_get(
* non-zero - stopped by user function returning the non-zero value * non-zero - stopped by user function returning the non-zero value
*/ */
extern int ambapp_for_each( extern int ambapp_for_each(
struct ambapp_bus *abus, struct ambapp_bus *abus,
unsigned int options, unsigned int options,
int vendor, int vendor,
int device, int device,
ambapp_func_t func, ambapp_func_t func,
void *arg); void *arg);
/* Helper function for ambapp_for_each(), find a device by index. If pcount /* Helper function for ambapp_for_each(), find a device by index. If pcount
* is NULL the first device is returned, else pcount is interpreted as index * is NULL the first device is returned, else pcount is interpreted as index
@@ -264,7 +266,7 @@ extern int ambapp_find_by_idx(struct ambapp_dev *dev, int index, void *pcount);
* arguments are passed onto ambapp_for_each(). * arguments are passed onto ambapp_for_each().
*/ */
extern int ambapp_dev_count(struct ambapp_bus *abus, unsigned int options, extern int ambapp_dev_count(struct ambapp_bus *abus, unsigned int options,
int vendor, int device); int vendor, int device);
/* Print short information about devices on the AMBA bus onto the console */ /* Print short information about devices on the AMBA bus onto the console */
extern void ambapp_print(struct ambapp_bus *abus, int show_depth); extern void ambapp_print(struct ambapp_bus *abus, int show_depth);
@@ -297,70 +299,61 @@ extern int ambapp_vendev_id2str(int vendor, int id, char *buf);
/* Help functions for backwards compability */ /* Help functions for backwards compability */
extern int ambapp_find_apbslv( extern int ambapp_find_apbslv(
struct ambapp_bus *abus, struct ambapp_bus *abus,
int vendor, int vendor,
int device, int device,
struct ambapp_apb_info *dev); struct ambapp_apb_info *dev);
extern int ambapp_find_apbslv_next( extern int ambapp_find_apbslv_next(
struct ambapp_bus *abus, struct ambapp_bus *abus,
int vendor, int vendor,
int device, int device,
struct ambapp_apb_info *dev, struct ambapp_apb_info *dev,
int index); int index);
extern int ambapp_find_apbslvs_next( extern int ambapp_find_apbslvs_next(
struct ambapp_bus *abus, struct ambapp_bus *abus,
int vendor, int vendor,
int device, int device,
struct ambapp_apb_info *dev, struct ambapp_apb_info *dev,
int index, int index,
int maxno); int maxno);
extern int ambapp_find_apbslvs( extern int ambapp_find_apbslvs(
struct ambapp_bus *abus, struct ambapp_bus *abus,
int vendor, int vendor,
int device, int device,
struct ambapp_apb_info *dev, struct ambapp_apb_info *dev,
int maxno); int maxno);
extern int ambapp_get_number_apbslv_devices(
struct ambapp_bus *abus,
int vendor,
int device);
extern int ambapp_find_ahbslv( extern int ambapp_find_ahbslv(
struct ambapp_bus *abus, struct ambapp_bus *abus,
int vendor, int vendor,
int device, int device,
struct ambapp_ahb_info *dev); struct ambapp_ahb_info *dev);
extern int ambapp_find_ahbslv_next( extern int ambapp_find_ahbslv_next(
struct ambapp_bus *abus, struct ambapp_bus *abus,
int vendor, int vendor,
int device, int device,
struct ambapp_ahb_info *dev, struct ambapp_ahb_info *dev,
int index); int index);
extern int ambapp_find_ahbslvs_next( extern int ambapp_find_ahbslvs_next(
struct ambapp_bus *abus, struct ambapp_bus *abus,
int vendor, int vendor,
int device, int device,
struct ambapp_ahb_info *dev, struct ambapp_ahb_info *dev,
int index, int index,
int maxno); int maxno);
extern int ambapp_find_ahbslvs( extern int ambapp_find_ahbslvs(
struct ambapp_bus *abus, struct ambapp_bus *abus,
int vendor, int vendor,
int device, int device,
struct ambapp_ahb_info *dev, struct ambapp_ahb_info *dev,
int maxno); int maxno);
extern int ambapp_get_number_ahbslv_devices(
struct ambapp_bus *abus,
int vendor,
int device);
/******** AMBA DEVICES *******/ /******** AMBA DEVICES *******/

View File

@@ -72,9 +72,9 @@ typedef struct {
/* Register APBUART driver /* Register APBUART driver
* bus = pointer to AMBA bus description used to search for APBUART(s). * bus = pointer to AMBA bus description used to search for APBUART(s).
* (&amba_conf for LEON3), (LEON2: see amba_scan) * (&ambapp_plb for LEON3), (LEON2: see amba_scan)
*/ */
int apbuart_register (amba_confarea_type * bus); int apbuart_register (struct ambapp_bus *bus);
#ifdef __cplusplus #ifdef __cplusplus
} }

View File

@@ -24,7 +24,7 @@ extern "C" {
* *
*/ */
int apbuart_pci_register (amba_confarea_type * bus); int apbuart_pci_register (struct ambapp_bus * bus);
/* This function must be called on APBUART interrupt. Called from the /* This function must be called on APBUART interrupt. Called from the
* PCI interrupt handler. * PCI interrupt handler.

View File

@@ -24,7 +24,7 @@ extern "C" {
* *
*/ */
int apbuart_rasta_register(amba_confarea_type *bus); int apbuart_rasta_register(struct ambapp_bus *bus);
/* This function must be called on APBUART interrupt. Called from the /* This function must be called on APBUART interrupt. Called from the
* RASTA interrupt handler. * RASTA interrupt handler.

View File

@@ -158,9 +158,9 @@ int brm_register_leon3_ramon_asic(void);
/* Register BRM driver /* Register BRM driver
* See (struct brm_reg).w_ctrl for clksel and clkdiv. * See (struct brm_reg).w_ctrl for clksel and clkdiv.
* See Enhanced register (the least signinficant 2 bits) in BRM Core for brm_freq * See Enhanced register (the least signinficant 2 bits) in BRM Core for brm_freq
* bus = &amba_conf for LEON3. (LEON2 not yet supported for this driver) * bus = &ambapp_plb for LEON3. (LEON2 not yet supported for this driver)
*/ */
int b1553brm_register(amba_confarea_type *bus, unsigned int clksel, unsigned int clkdiv, unsigned int brm_freq); int b1553brm_register(struct ambapp_bus *bus, unsigned int clksel, unsigned int clkdiv, unsigned int brm_freq);
#ifdef __cplusplus #ifdef __cplusplus
} }

View File

@@ -22,7 +22,7 @@ extern "C" {
/* Register BRM driver /* Register BRM driver
* See (struct brm_reg).w_ctrl for clksel and clkdiv. * See (struct brm_reg).w_ctrl for clksel and clkdiv.
* See Enhanced register (the least signinficant 2 bits) in BRM Core for brm_freq * See Enhanced register (the least signinficant 2 bits) in BRM Core for brm_freq
* bus = &amba_conf for LEON3. (LEON2 not yet supported for this driver) * bus = &ambapp_plb for LEON3. (LEON2 not yet supported for this driver)
* *
* Memory setup: * Memory setup:
* memarea = 128k aligned pointer to memory (if zero malloc will be used) (as the CPU sees it) * memarea = 128k aligned pointer to memory (if zero malloc will be used) (as the CPU sees it)
@@ -30,7 +30,7 @@ extern "C" {
*/ */
int b1553brm_pci_register( int b1553brm_pci_register(
amba_confarea_type *bus, struct ambapp_bus *bus,
unsigned int clksel, unsigned int clksel,
unsigned int clkdiv, unsigned int clkdiv,
unsigned int brm_freq, unsigned int brm_freq,

View File

@@ -22,7 +22,7 @@ extern "C" {
/* Register BRM driver /* Register BRM driver
* See (struct brm_reg).w_ctrl for clksel and clkdiv. * See (struct brm_reg).w_ctrl for clksel and clkdiv.
* See Enhanced register (the least signinficant 2 bits) in BRM Core for brm_freq * See Enhanced register (the least signinficant 2 bits) in BRM Core for brm_freq
* bus = &amba_conf for LEON3. (LEON2 not yet supported for this driver) * bus = &ambapp_plb for LEON3. (LEON2 not yet supported for this driver)
* *
* Memory setup: * Memory setup:
* memarea = 128k aligned pointer to memory (if zero malloc will be used) (as the CPU sees it) * memarea = 128k aligned pointer to memory (if zero malloc will be used) (as the CPU sees it)
@@ -30,7 +30,7 @@ extern "C" {
*/ */
int b1553brm_rasta_register( int b1553brm_rasta_register(
amba_confarea_type *bus, struct ambapp_bus *bus,
unsigned int clksel, unsigned int clksel,
unsigned int clkdiv, unsigned int clkdiv,
unsigned int brm_freq, unsigned int brm_freq,

View File

@@ -190,7 +190,7 @@ struct grcan_device_info {
int grcan_register_abs(struct grcan_device_info *devices, int dev_cnt); int grcan_register_abs(struct grcan_device_info *devices, int dev_cnt);
/* Use prescanned AMBA Plug&Play information to find all GRFIFO cores */ /* Use prescanned AMBA Plug&Play information to find all GRFIFO cores */
int grcan_register(amba_confarea_type *abus); int grcan_register(struct ambapp_bus *abus);
#if 0 #if 0
void grcan_register(unsigned int baseaddr, unsigned int ram_base); void grcan_register(unsigned int baseaddr, unsigned int ram_base);
void grcan_interrupt_handler(rtems_vector_number v); void grcan_interrupt_handler(rtems_vector_number v);

View File

@@ -13,7 +13,7 @@ extern "C" {
* rambase is address of the first GRCAN core has it's TX buffer, followed by * rambase is address of the first GRCAN core has it's TX buffer, followed by
* it's RX buffer * it's RX buffer
*/ */
int grcan_rasta_ram_register(amba_confarea_type *abus, int rambase); int grcan_rasta_ram_register(struct ambapp_bus *abus, int rambase);
extern void (*grcan_rasta_int_reg)(void *handler, int irq, void *arg); extern void (*grcan_rasta_int_reg)(void *handler, int irq, void *arg);

View File

@@ -111,7 +111,7 @@ typedef struct {
#define SPACEWIRE_IOCTRL_START 64 #define SPACEWIRE_IOCTRL_START 64
#define SPACEWIRE_IOCTRL_STOP 65 #define SPACEWIRE_IOCTRL_STOP 65
int grspw_register(amba_confarea_type *bus); int grspw_register(struct ambapp_bus *bus);
#if 0 #if 0

View File

@@ -20,14 +20,14 @@ extern "C" {
#endif #endif
/* Register GRSPW Driver /* Register GRSPW Driver
* bus = &amba_conf for LEON3 * bus = &ambapp_plb for LEON3
* *
* Memory setup: * Memory setup:
* memarea = 128k aligned pointer to memory (if zero malloc will be used) (as the CPU sees it) * memarea = 128k aligned pointer to memory (if zero malloc will be used) (as the CPU sees it)
* hw_address = address that HW must use to access memarea. (used in the translation process) * hw_address = address that HW must use to access memarea. (used in the translation process)
*/ */
int grspw_pci_register (amba_confarea_type * bus, int grspw_pci_register (struct ambapp_bus *bus,
unsigned int memarea, unsigned int hw_address); unsigned int memarea, unsigned int hw_address);

View File

@@ -20,14 +20,14 @@ extern "C" {
#endif #endif
/* Register GRSPW Driver /* Register GRSPW Driver
* bus = &amba_conf for LEON3 * bus = &ambapp_plb for LEON3
* *
* Memory setup: * Memory setup:
* ram_base = 128k aligned pointer to memory (as the CPU sees it) * ram_base = 128k aligned pointer to memory (as the CPU sees it)
*/ */
int grspw_rasta_register( int grspw_rasta_register(
amba_confarea_type *bus, struct ambapp_bus *bus,
unsigned int ram_base unsigned int ram_base
); );

View File

@@ -68,7 +68,7 @@ typedef struct gr_i2cmst_desc {
} gr_i2cmst_desc_t; } gr_i2cmst_desc_t;
/* Scans for I2CMST core and initalizes i2c library */ /* Scans for I2CMST core and initalizes i2c library */
rtems_status_code leon_register_i2c(amba_confarea_type *abus); rtems_status_code leon_register_i2c(struct ambapp_bus *abus);
#ifdef __cplusplus #ifdef __cplusplus
} }

View File

@@ -147,7 +147,7 @@ struct occan_afilter {
#define OCCAN_BLK_MODE_RX 0x1 #define OCCAN_BLK_MODE_RX 0x1
#define OCCAN_BLK_MODE_TX 0x2 #define OCCAN_BLK_MODE_TX 0x2
int occan_register(amba_confarea_type *bus); int occan_register(struct ambapp_bus *bus);
#define OCCAN_SPEED_500K 500000 #define OCCAN_SPEED_500K 500000

View File

@@ -23,7 +23,7 @@ extern "C" {
* bus = pointer to AMBA bus description used to search for OC_CAN contrller(s). * bus = pointer to AMBA bus description used to search for OC_CAN contrller(s).
*/ */
int occan_pci_register(amba_confarea_type *bus); int occan_pci_register(struct ambapp_bus *bus);
/* This function must be called on OC_CAN interrupt. Called from the /* This function must be called on OC_CAN interrupt. Called from the
* PCI interrupt handler. irq = AMBA IRQ assigned to the OC_CAN device, * PCI interrupt handler. irq = AMBA IRQ assigned to the OC_CAN device,

View File

@@ -370,9 +370,9 @@ static rtems_device_driver grspw_control(
grspw_control } grspw_control }
static rtems_driver_address_table grspw_driver = GRSPW_DRIVER_TABLE_ENTRY; static rtems_driver_address_table grspw_driver = GRSPW_DRIVER_TABLE_ENTRY;
static amba_confarea_type *amba_bus; static struct ambapp_bus *amba_bus;
int GRSPW_PREFIX(_register)(amba_confarea_type *bus) int GRSPW_PREFIX(_register)(struct ambapp_bus *bus)
{ {
rtems_status_code r; rtems_status_code r;
rtems_device_major_number m; rtems_device_major_number m;
@@ -389,10 +389,11 @@ int GRSPW_PREFIX(_register)(amba_confarea_type *bus)
#ifdef LEON3 #ifdef LEON3
/* LEON3: find timer address via AMBA Plug&Play info */ /* LEON3: find timer address via AMBA Plug&Play info */
{ {
amba_apb_device gptimer; struct ambapp_apb_info gptimer;
LEON3_Timer_Regs_Map *tregs; LEON3_Timer_Regs_Map *tregs;
if ( amba_find_apbslv(&amba_conf,VENDOR_GAISLER,GAISLER_GPTIMER,&gptimer) == 1 ){ if ( ambapp_find_apbslv(&ambapp_plb, VENDOR_GAISLER,
GAISLER_GPTIMER, &gptimer) == 1 ) {
tregs = (LEON3_Timer_Regs_Map *)gptimer.start; tregs = (LEON3_Timer_Regs_Map *)gptimer.start;
sys_freq_khz = (tregs->scaler_reload+1)*1000; sys_freq_khz = (tregs->scaler_reload+1)*1000;
SPACEWIRE_DBG("GRSPW: detected %dkHZ system frequency\n\r",sys_freq_khz); SPACEWIRE_DBG("GRSPW: detected %dkHZ system frequency\n\r",sys_freq_khz);
@@ -609,7 +610,7 @@ static rtems_device_driver grspw_initialize(
char c; char c;
GRSPW_DEV *pDev; GRSPW_DEV *pDev;
char console_name[20]; char console_name[20];
amba_apb_device dev; struct ambapp_apb_info dev;
SPACEWIRE_DBG2("spacewire driver initialization\n"); SPACEWIRE_DBG2("spacewire driver initialization\n");
@@ -620,19 +621,10 @@ static rtems_device_driver grspw_initialize(
i=0; spw_cores = 0; spw_cores2 = 0; i=0; spw_cores = 0; spw_cores2 = 0;
/* get number of GRSPW cores */ /* get number of GRSPW cores */
spw_cores = amba_get_number_apbslv_devices(amba_bus,VENDOR_GAISLER,GAISLER_SPACEWIRE); spw_cores = ambapp_get_number_apbslv_devices(amba_bus, VENDOR_GAISLER,
spw_cores2 = amba_get_number_apbslv_devices(amba_bus,VENDOR_GAISLER,GAISLER_GRSPW2); GAISLER_SPW);
#if 0 spw_cores2 = ambapp_get_number_apbslv_devices(amba_bus, VENDOR_GAISLER,
if ( spw_cores > SPACEWIRE_MAX_CORENR ) GAISLER_SPW2);
spw_cores = SPACEWIRE_MAX_CORENR;
while (i < amba_conf.apbslv.devnr) {
conf = amba_get_confword(amba_conf.apbslv, i, 0);
if ((amba_vendor(conf) == VENDOR_GAISLER) && (amba_device(conf) == GAISLER_SPACEWIRE))
spw_cores++;
i++;
}
#endif
if ( (spw_cores+spw_cores2) < 1 ){ if ( (spw_cores+spw_cores2) < 1 ){
/* No GRSPW cores around... */ /* No GRSPW cores around... */
@@ -653,10 +645,13 @@ static rtems_device_driver grspw_initialize(
/* Get device */ /* Get device */
if ( spw_cores > minor ) { if ( spw_cores > minor ) {
amba_find_next_apbslv(amba_bus,VENDOR_GAISLER,GAISLER_SPACEWIRE,&dev,minor); ambapp_find_apbslv_next(amba_bus, VENDOR_GAISLER,
GAISLER_SPW, &dev, minor);
pDev->core_ver = 1; pDev->core_ver = 1;
} else { } else {
amba_find_next_apbslv(amba_bus,VENDOR_GAISLER,GAISLER_GRSPW2,&dev,minor-spw_cores); ambapp_find_apbslv_next(amba_bus, VENDOR_GAISLER,
GAISLER_SPW2, &dev,
minor - spw_cores);
pDev->core_ver = 2; pDev->core_ver = 2;
} }

View File

@@ -79,7 +79,7 @@ int grspwpci_interrupt_handler(int irq, void *arg);
*/ */
int grspw_pci_register( int grspw_pci_register(
amba_confarea_type *bus, struct ambapp_bus *bus,
unsigned int memarea, unsigned int memarea,
unsigned int hw_address unsigned int hw_address
) )

View File

@@ -88,7 +88,7 @@ unsigned int grspw_rasta_memarea_address;
*/ */
int grspw_rasta_register( int grspw_rasta_register(
amba_confarea_type *bus, struct ambapp_bus *bus,
unsigned int ram_base unsigned int ram_base
) )
{ {

View File

@@ -116,7 +116,7 @@ static unsigned int sys_freq_hz;
#define APBUART_DRIVER_TABLE_ENTRY { apbuart_initialize, apbuart_open, apbuart_close, apbuart_read, apbuart_write, apbuart_control } #define APBUART_DRIVER_TABLE_ENTRY { apbuart_initialize, apbuart_open, apbuart_close, apbuart_read, apbuart_write, apbuart_control }
static rtems_driver_address_table apbuart_driver = APBUART_DRIVER_TABLE_ENTRY; static rtems_driver_address_table apbuart_driver = APBUART_DRIVER_TABLE_ENTRY;
static amba_confarea_type *amba_bus; static struct ambapp_bus *amba_bus;
static void apbuart_interrupt(apbuart_priv *uart); static void apbuart_interrupt(apbuart_priv *uart);
#ifdef APBUART_DEFINE_INTHANDLER #ifdef APBUART_DEFINE_INTHANDLER
@@ -322,7 +322,7 @@ static void apbuart_interrupt(apbuart_priv *uart){
} }
} }
int APBUART_PREFIX(_register)(amba_confarea_type *bus) { int APBUART_PREFIX(_register)(struct ambapp_bus *bus) {
rtems_status_code r; rtems_status_code r;
rtems_device_major_number m; rtems_device_major_number m;
@@ -353,13 +353,14 @@ static rtems_device_driver apbuart_initialize(rtems_device_major_number major,
rtems_status_code status; rtems_status_code status;
int i; int i;
amba_apb_device dev; struct ambapp_apb_info dev;
char fs_name[20]; char fs_name[20];
FUNCDBG("apbuart_initialize\n"); FUNCDBG("apbuart_initialize\n");
/* Find all APB UART devices */ /* Find all APB UART devices */
dev_cnt = amba_get_number_apbslv_devices(amba_bus,VENDOR_GAISLER,GAISLER_APBUART); dev_cnt = ambapp_get_number_apbslv_devices(amba_bus, VENDOR_GAISLER,
GAISLER_APBUART);
if ( dev_cnt < 1 ){ if ( dev_cnt < 1 ){
/* Failed to find any CAN cores! */ /* Failed to find any CAN cores! */
printk("APBUART: Failed to find any APBUART cores\n\r"); printk("APBUART: Failed to find any APBUART cores\n\r");
@@ -384,10 +385,11 @@ static rtems_device_driver apbuart_initialize(rtems_device_major_number major,
#if defined(LEON3) #if defined(LEON3)
/* LEON3: find timer address via AMBA Plug&Play info */ /* LEON3: find timer address via AMBA Plug&Play info */
{ {
amba_apb_device gptimer; struct ambapp_apb_info gptimer;
LEON3_Timer_Regs_Map *tregs; LEON3_Timer_Regs_Map *tregs;
if ( amba_find_apbslv(&amba_conf,VENDOR_GAISLER,GAISLER_GPTIMER,&gptimer) == 1 ){ if ( ambapp_find_apbslv(&ambapp_plb, VENDOR_GAISLER,
GAISLER_GPTIMER, &gptimer) == 1 ){
tregs = (LEON3_Timer_Regs_Map *)gptimer.start; tregs = (LEON3_Timer_Regs_Map *)gptimer.start;
sys_freq_hz = (tregs->scaler_reload+1)*1000*1000; sys_freq_hz = (tregs->scaler_reload+1)*1000*1000;
DBG("APBUART: detected %dHZ system frequency\n\r",sys_freq_hz); DBG("APBUART: detected %dHZ system frequency\n\r",sys_freq_hz);
@@ -413,7 +415,7 @@ static rtems_device_driver apbuart_initialize(rtems_device_major_number major,
for(i=0; i<dev_cnt; i++){ for(i=0; i<dev_cnt; i++){
/* Get AMBA AHB device info from Plug&Play */ /* Get AMBA AHB device info from Plug&Play */
amba_find_next_apbslv(amba_bus,VENDOR_GAISLER,GAISLER_APBUART,&dev,i); ambapp_find_apbslv_next(amba_bus,VENDOR_GAISLER,GAISLER_APBUART,&dev,i);
printk("APBUART[%d]: at 0x%x irq %d (0x%x)\n\r",i,dev.start,dev.irq,(unsigned int)&apbuarts[i]); printk("APBUART[%d]: at 0x%x irq %d (0x%x)\n\r",i,dev.start,dev.irq,(unsigned int)&apbuarts[i]);

View File

@@ -24,7 +24,7 @@ void apbuartpci_interrupt_handler(int irq, void *arg);
#include "apbuart.c" #include "apbuart.c"
int apbuart_pci_register(amba_confarea_type *bus) int apbuart_pci_register(struct ambapp_bus *bus)
{ {
/* Setup configuration */ /* Setup configuration */

View File

@@ -24,7 +24,7 @@ void apbuartrasta_interrupt_handler(int irq, void *arg);
#include "apbuart.c" #include "apbuart.c"
int apbuart_rasta_register(amba_confarea_type *bus) int apbuart_rasta_register(struct ambapp_bus *bus)
{ {
/* Setup configuration */ /* Setup configuration */