summaryrefslogtreecommitdiffstats
path: root/bsps/sparc/include/drvmgr/leon2_amba_bus.h
diff options
context:
space:
mode:
authorChris Johns <chrisj@rtems.org>2017-12-23 18:18:56 +1100
committerSebastian Huber <sebastian.huber@embedded-brains.de>2018-01-25 08:45:26 +0100
commit2afb22b7e1ebcbe40373ff7e0efae7d207c655a9 (patch)
tree44759efe9374f13200a97e96d91bd9a2b7e5ce2a /bsps/sparc/include/drvmgr/leon2_amba_bus.h
parentMAINTAINERS: Add myself to Write After Approval. (diff)
downloadrtems-2afb22b7e1ebcbe40373ff7e0efae7d207c655a9.tar.bz2
Remove make preinstall
A speciality of the RTEMS build system was the make preinstall step. It copied header files from arbitrary locations into the build tree. The header files were included via the -Bsome/build/tree/path GCC command line option. This has at least seven problems: * The make preinstall step itself needs time and disk space. * Errors in header files show up in the build tree copy. This makes it hard for editors to open the right file to fix the error. * There is no clear relationship between source and build tree header files. This makes an audit of the build process difficult. * The visibility of all header files in the build tree makes it difficult to enforce API barriers. For example it is discouraged to use BSP-specifics in the cpukit. * An introduction of a new build system is difficult. * Include paths specified by the -B option are system headers. This may suppress warnings. * The parallel build had sporadic failures on some hosts. This patch removes the make preinstall step. All installed header files are moved to dedicated include directories in the source tree. Let @RTEMS_CPU@ be the target architecture, e.g. arm, powerpc, sparc, etc. Let @RTEMS_BSP_FAMILIY@ be a BSP family base directory, e.g. erc32, imx, qoriq, etc. The new cpukit include directories are: * cpukit/include * cpukit/score/cpu/@RTEMS_CPU@/include * cpukit/libnetworking The new BSP include directories are: * bsps/include * bsps/@RTEMS_CPU@/include * bsps/@RTEMS_CPU@/@RTEMS_BSP_FAMILIY@/include There are build tree include directories for generated files. The include directory order favours the most general header file, e.g. it is not possible to override general header files via the include path order. The "bootstrap -p" option was removed. The new "bootstrap -H" option should be used to regenerate the "headers.am" files. Update #3254.
Diffstat (limited to 'bsps/sparc/include/drvmgr/leon2_amba_bus.h')
-rw-r--r--bsps/sparc/include/drvmgr/leon2_amba_bus.h95
1 files changed, 95 insertions, 0 deletions
diff --git a/bsps/sparc/include/drvmgr/leon2_amba_bus.h b/bsps/sparc/include/drvmgr/leon2_amba_bus.h
new file mode 100644
index 0000000000..ebb3a08486
--- /dev/null
+++ b/bsps/sparc/include/drvmgr/leon2_amba_bus.h
@@ -0,0 +1,95 @@
+/* LEON2 Hardcoded bus driver interface.
+ *
+ * COPYRIGHT (c) 2008.
+ * Cobham Gaisler AB.
+ *
+ * Bus driver for a hardcoded setup. LEON2 systems have some
+ * cores always present, here called "Standard Cores". In
+ * addtion to the standard cores there are often extra cores
+ * that can be defined using the "Custom Cores" mechanism.
+ *
+ * A Core is described by assigning a base register and
+ * IRQ0..IRQ15 using the leon2_core structure.
+ *
+ * The license and distribution terms for this file may be
+ * found in the file LICENSE in this distribution or at
+ * http://www.rtems.org/license/LICENSE.
+ */
+
+#ifndef __LEON2_AMBA_BUS_H__
+#define __LEON2_AMBA_BUS_H__
+
+/*** Cores location and IRQs hardcoded ***/
+
+#include <drvmgr/drvmgr.h>
+#include <ambapp.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* LEON2 AMBA Driver ID generation */
+#define DRIVER_LEON2_AMBA(id) DRIVER_ID(DRVMGR_BUS_TYPE_LEON2_AMBA, id)
+
+/* LEON2 Cores (any unique 48-bit number will do) */
+#define LEON2_AMBA_NONE_ID 0
+#define LEON2_AMBA_TIMER_ID 1
+#define LEON2_AMBA_UART_ID 2
+#define LEON2_AMBA_GPIO_ID 3
+#define LEON2_AMBA_IRQCTRL_ID 4
+
+#define LEON2_AMBA_AT697PCI_ID 100
+#define LEON2_AMBA_AMBAPP_ID 0xfff0
+
+/* LEON2 driver IDs */
+#define DRIVER_LEON2_AMBA_TIMER DRIVER_LEON2_AMBA(LEON2_AMBA_TIMER_ID)
+#define DRIVER_LEON2_AMBA_UART DRIVER_LEON2_AMBA(LEON2_AMBA_UART_ID)
+#define DRIVER_LEON2_AMBA_AT697PCI DRIVER_LEON2_AMBA(LEON2_AMBA_AT697PCI_ID)
+#define DRIVER_LEON2_AMBA_AMBAPP DRIVER_LEON2_AMBA(LEON2_AMBA_AMBAPP_ID)
+
+struct leon2_amba_dev_id {
+ unsigned short core_id;
+};
+
+#define EMPTY_LEON2_CORE {{LEON2_AMBA_NONE_ID}, NULL, NULL}
+struct leon2_core {
+ struct leon2_amba_dev_id id; /* Core ID */
+ char *name; /* Name of Core */
+ struct drvmgr_key *keys; /* Core setup (location, IRQs) */
+};
+
+struct leon2_bus {
+ struct leon2_core *std_cores; /* The LEON2 standard cores */
+ struct leon2_core *custom_cores; /* Custom cores on the same bus */
+ struct drvmgr_map_entry *maps_up; /* Memory map ip-stream */
+ struct drvmgr_map_entry *maps_down; /* Memory map down-stream */
+};
+
+extern struct leon2_core leon2_std_cores[];
+
+/* Data structure drivers can access */
+struct leon2_amba_dev_info {
+ unsigned short core_id; /* Core ID */
+ unsigned int reg_base; /* Register base */
+ char irqs[16]; /* 16 irqs */
+};
+
+struct leon2_amba_drv_info {
+ struct drvmgr_drv general; /* General bus info */
+ /* AMBA specific bus information */
+ struct leon2_amba_dev_id *ids; /* Supported hardware */
+};
+
+/* Initialize LEON2 bus with a configuration
+ * bus_config - What cores, their location and irqs
+ * resources - Driver configuration for the cores specified bus_config
+ */
+int leon2_root_register(
+ struct leon2_bus *bus_config,
+ struct drvmgr_bus_res *resources);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif