diff options
Diffstat (limited to 'libgloss/sparc_leon/asm-leon/amba.h')
-rw-r--r-- | libgloss/sparc_leon/asm-leon/amba.h | 429 |
1 files changed, 0 insertions, 429 deletions
diff --git a/libgloss/sparc_leon/asm-leon/amba.h b/libgloss/sparc_leon/asm-leon/amba.h deleted file mode 100644 index 0dd2d987f..000000000 --- a/libgloss/sparc_leon/asm-leon/amba.h +++ /dev/null @@ -1,429 +0,0 @@ -/* - * Copyright (c) 2011 Aeroflex Gaisler - * - * BSD license: - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - */ - - -#ifndef _LEON3_AMBA_H__ -#define _LEON3_AMBA_H__ - -#define LEON3_IO_AREA 0xfff00000 -#define LEON3_CONF_AREA 0xff000 -#define LEON3_AHB_SLAVE_CONF_AREA (1 << 11) - -#define LEON3_AHB_CONF_WORDS 8 -#define LEON3_APB_CONF_WORDS 2 -#define LEON3_AHB_MASTERS 8 -#define LEON3_AHB_SLAVES 8 -#define LEON3_APB_SLAVES 16 -#define LEON3_APBUARTS 8 - -/* Vendor codes */ -#define VENDOR_GAISLER 1 -#define VENDOR_PENDER 2 -#define VENDOR_ESA 4 -#define VENDOR_OPENCORES 8 - -/* Gaisler Research device id's */ -#define GAISLER_LEON3 0x003 -#define GAISLER_LEON3DSU 0x004 -#define GAISLER_ETHAHB 0x005 -#define GAISLER_APBMST 0x006 -#define GAISLER_AHBUART 0x007 -#define GAISLER_SRCTRL 0x008 -#define GAISLER_SDCTRL 0x009 -#define GAISLER_APBUART 0x00c -#define GAISLER_IRQMP 0x00d -#define GAISLER_AHBRAM 0x00e -#define GAISLER_GPTIMER 0x011 -#define GAISLER_PCITRG 0x012 -#define GAISLER_PCISBRG 0x013 -#define GAISLER_PCIFBRG 0x014 -#define GAISLER_PCITRACE 0x015 -#define GAISLER_PCIDMA 0x016 -#define GAISLER_AHBTRACE 0x017 -#define GAISLER_ETHDSU 0x018 -#define GAISLER_PIOPORT 0x01A -#define GAISLER_SPACEWIRE 0x01f - -#define GAISLER_ETHMAC 0x01d -#define GAISLER_EHCI 0x026 -#define GAISLER_UHCI 0x027 - -#define GAISLER_L2TIME 0xffd /* internal device: leon2 timer */ -#define GAISLER_L2C 0xffe /* internal device: leon2compat */ -#define GAISLER_PLUGPLAY 0xfff /* internal device: plug & play configarea */ - -#ifndef __ASSEMBLER__ - -extern inline char * -gaisler_device_str (int id) -{ - switch (id) - { - case GAISLER_LEON3: - return "GAISLER_LEON3"; - case GAISLER_LEON3DSU: - return "GAISLER_LEON3DSU"; - case GAISLER_ETHAHB: - return "GAISLER_ETHAHB"; - case GAISLER_APBMST: - return "GAISLER_APBMST"; - case GAISLER_AHBUART: - return "GAISLER_AHBUART"; - case GAISLER_SRCTRL: - return "GAISLER_SRCTRL"; - case GAISLER_SDCTRL: - return "GAISLER_SDCTRL"; - case GAISLER_APBUART: - return "GAISLER_APBUART"; - case GAISLER_IRQMP: - return "GAISLER_IRQMP"; - case GAISLER_AHBRAM: - return "GAISLER_AHBRAM"; - case GAISLER_GPTIMER: - return "GAISLER_GPTIMER"; - case GAISLER_PCITRG: - return "GAISLER_PCITRG"; - case GAISLER_PCISBRG: - return "GAISLER_PCISBRG"; - case GAISLER_PCIFBRG: - return "GAISLER_PCIFBRG"; - case GAISLER_PCITRACE: - return "GAISLER_PCITRACE"; - case GAISLER_AHBTRACE: - return "GAISLER_AHBTRACE"; - case GAISLER_ETHDSU: - return "GAISLER_ETHDSU"; - case GAISLER_PIOPORT: - return "GAISLER_PIOPORT"; - case GAISLER_SPACEWIRE: - return "GAISLER_SPACEWIRE"; - - - case GAISLER_L2TIME: - return "GAISLER_L2TIME"; - case GAISLER_L2C: - return "GAISLER_L2C"; - case GAISLER_PLUGPLAY: - return "GAISLER_PLUGPLAY"; - - default: - break; - } - return 0; -} - -#endif - -/* European Space Agency device id's */ -#define ESA_LEON2 0x002 -#define ESA_MCTRL 0x00f - -#ifndef __ASSEMBLER__ - -extern inline char * -esa_device_str (int id) -{ - switch (id) - { - case ESA_LEON2: - return "ESA_LEON2"; - case ESA_MCTRL: - return "ESA_MCTRL"; - default: - break; - } - return 0; -} - -#endif - -/* Opencores device id's */ -#define OPENCORES_PCIBR 0x4 -#define OPENCORES_ETHMAC 0x5 - -#ifndef __ASSEMBLER__ - -extern inline char * -opencores_device_str (int id) -{ - switch (id) - { - case OPENCORES_PCIBR: - return "OPENCORES_PCIBR"; - case OPENCORES_ETHMAC: - return "OPENCORES_ETHMAC"; - default: - break; - } - return 0; -} - -extern inline char * -device_id2str (int vendor, int id) -{ - switch (vendor) - { - case VENDOR_GAISLER: - return gaisler_device_str (id); - case VENDOR_ESA: - return esa_device_str (id); - case VENDOR_OPENCORES: - return opencores_device_str (id); - case VENDOR_PENDER: - default: - break; - } - return 0; -} - -extern inline char * -vendor_id2str (int vendor) -{ - switch (vendor) - { - case VENDOR_GAISLER: - return "VENDOR_GAISLER"; - case VENDOR_ESA: - return "VENDOR_ESA"; - case VENDOR_OPENCORES: - return "VENDOR_OPENCORES"; - case VENDOR_PENDER: - return "VENDOR_PENDER"; - default: - break; - } - return 0; -} - -#endif - -/* Vendor codes */ - -/* - * - * Macros for manipulating Configuration registers - * - */ - -#define LEON3_BYPASS_LOAD_PA(x) (*((unsigned long*)x)) -#define LEON3_BYPASS_STORE_PA(x,v) (*((unsigned long*)x) = (v)) - -#define amba_get_confword(tab, index, word) (*((tab).addr[(index)]+(word))) - -#define amba_vendor(x) (((x) >> 24) & 0xff) - -#define amba_device(x) (((x) >> 12) & 0xfff) - -#define amba_ahb_get_membar(tab, index, nr) (*((tab).addr[(index)]+4+(nr))) - -#define amba_apb_get_membar(tab, index) (*((tab).addr[(index)]+1)) - -#define amba_membar_start(mbar) (((mbar) & 0xfff00000) & (((mbar) & 0xfff0) << 16)) - -#define amba_iobar_start(base, iobar) ((base) | ((((iobar) & 0xfff00000)>>12) & (((iobar) & 0xfff0)<<4)) ) - -#define amba_irq(conf) ((conf) & 0xf) - -#define amba_membar_type(mbar) ((mbar) & 0xf) - -#define AMBA_TYPE_APBIO 0x1 -#define AMBA_TYPE_MEM 0x2 -#define AMBA_TYPE_AHBIO 0x3 - -#define AMBA_TYPE_AHBIO_ADDR(addr) (LEON3_IO_AREA | ((addr) >> 12)) - - - - - - -#ifndef __ASSEMBLER__ - -/* - * The following defines the bits in the LEON UART Status Registers. - */ - -#define LEON_REG_UART_STATUS_DR 0x00000001 /* Data Ready */ -#define LEON_REG_UART_STATUS_TSE 0x00000002 /* TX Send Register Empty */ -#define LEON_REG_UART_STATUS_THE 0x00000004 /* TX Hold Register Empty */ -#define LEON_REG_UART_STATUS_BR 0x00000008 /* Break Error */ -#define LEON_REG_UART_STATUS_OE 0x00000010 /* RX Overrun Error */ -#define LEON_REG_UART_STATUS_PE 0x00000020 /* RX Parity Error */ -#define LEON_REG_UART_STATUS_FE 0x00000040 /* RX Framing Error */ -#define LEON_REG_UART_STATUS_ERR 0x00000078 /* Error Mask */ - -/* - * The following defines the bits in the LEON UART Ctrl Registers. - */ - -#define LEON_REG_UART_CTRL_RE 0x00000001 /* Receiver enable */ -#define LEON_REG_UART_CTRL_TE 0x00000002 /* Transmitter enable */ -#define LEON_REG_UART_CTRL_RI 0x00000004 /* Receiver interrupt enable */ -#define LEON_REG_UART_CTRL_TI 0x00000008 /* Transmitter interrupt enable */ -#define LEON_REG_UART_CTRL_PS 0x00000010 /* Parity select */ -#define LEON_REG_UART_CTRL_PE 0x00000020 /* Parity enable */ -#define LEON_REG_UART_CTRL_FL 0x00000040 /* Flow control enable */ -#define LEON_REG_UART_CTRL_LB 0x00000080 /* Loop Back enable */ - -#define LEON3_GPTIMER_EN 1 -#define LEON3_GPTIMER_RL 2 -#define LEON3_GPTIMER_LD 4 -#define LEON3_GPTIMER_IRQEN 8 -#define LEON3_GPTIMER_IP 0x10 - -#define LEON3_GPTIMER_CONFIG_TIMERMASK 0x7 -#define LEON3_GPTIMER_CONFIG_SEPERATE (1<<8) - -typedef struct -{ - volatile unsigned int ilevel; - volatile unsigned int ipend; - volatile unsigned int iforce; - volatile unsigned int iclear; - volatile unsigned int notused00; - 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]; -} LEON3_IrqCtrl_Regs_Map; -extern volatile LEON3_IrqCtrl_Regs_Map *LEON3_IrqCtrl_Regs; /* in amba.c */ - -typedef struct -{ - volatile unsigned int data; - volatile unsigned int status; - volatile unsigned int ctrl; - volatile unsigned int scaler; -} LEON23_APBUART_Regs_Map; -extern volatile LEON23_APBUART_Regs_Map *leon23_uarts[2]; /* in console.c */ -extern unsigned int leon23_irqs[2]; /* in console.c */ - -typedef struct -{ - volatile unsigned int val; - volatile unsigned int rld; - volatile unsigned int ctrl; - volatile unsigned int unused; -} LEON3_GpTimerElem_Regs_Map; - - -typedef struct -{ - volatile unsigned int scalar; - volatile unsigned int scalar_reload; - volatile unsigned int config; - volatile unsigned int unused; - volatile LEON3_GpTimerElem_Regs_Map e[8]; -} LEON3_GpTimer_Regs_Map; -#define LEON3_GPTIMER_CONFIG_NRTIMERS(c) ((c)->config & 0x7) -int Timer_getTimer1 (unsigned int **count, unsigned int **reload, unsigned int **ctrl); /* in timer.c */ -int Timer_getTimer2 (unsigned int **count, unsigned int **reload, unsigned int **ctrl); /* in timer.c */ -extern volatile LEON3_GpTimer_Regs_Map *LEON3_GpTimer_Regs; -extern unsigned long LEON3_GpTimer_Irq; - -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; - - -/* - * Types and structure used for AMBA Plug & Play bus scanning - */ -extern int amba_init_done; - -#define AMBA_MAXAPB_DEVS 64 -#define AMBA_MAXAPB_DEVS_PERBUS 16 - -typedef struct amba_device_table -{ - int devnr; /* numbrer of devices on AHB or APB bus */ - unsigned int *addr[16]; /* addresses to the devices configuration tables */ - unsigned int allocbits[1]; /* 0=unallocated, 1=allocated driver */ -} amba_device_table; - -typedef struct amba_apbslv_device_table -{ - int devnr; /* number of devices on AHB or APB bus */ - unsigned int *addr[AMBA_MAXAPB_DEVS]; /* addresses to the devices configuration tables */ - unsigned int apbmst[AMBA_MAXAPB_DEVS]; /* apb master if a entry is a apb slave */ - unsigned int apbmstidx[AMBA_MAXAPB_DEVS]; /* apb master idx if a entry is a apb slave */ - unsigned int allocbits[4]; /* 0=unallocated, 1=allocated driver */ -} amba_apbslv_device_table; - -typedef struct amba_confarea_type -{ - amba_device_table ahbmst; - amba_device_table ahbslv; - amba_apbslv_device_table apbslv; - /*unsigned int apbmst; */ -} amba_confarea_type; - - -extern unsigned long amba_find_apbslv_addr (unsigned long vendor, - unsigned long device, - unsigned long *irq); - -// collect apb slaves -typedef struct amba_apb_device -{ - unsigned int start, irq; -} amba_apb_device; -extern int amba_get_free_apbslv_devices (int vendor, int device, - amba_apb_device * dev, int nr); - -// collect ahb slaves -typedef struct amba_ahb_device -{ - unsigned int start[4], irq; -} amba_ahb_device; -extern int amba_get_free_ahbslv_devices (int vendor, int device, - amba_ahb_device * dev, int nr); - - -/*amba_scan.c*/ -unsigned int leon3_getapbbase (register unsigned int vendor, - register unsigned int driver, - amba_apb_device * apbdevs, int c); - -#endif //!__ASSEMBLER__ - - - - - -#endif |