summaryrefslogtreecommitdiffstats
path: root/sys/powerpc/include
diff options
context:
space:
mode:
authornwhitehorn <nwhitehorn@FreeBSD.org>2010-06-18 14:06:27 +0000
committernwhitehorn <nwhitehorn@FreeBSD.org>2010-06-18 14:06:27 +0000
commitc757ee90aefd19aff23dfb5e938e8e1e8576dbd4 (patch)
tree28ab8d6b3802ae7f1a631f84f71839a5baa6a137 /sys/powerpc/include
parentf26dfb440a0d48a874435768ee94475ddbe496a2 (diff)
downloadFreeBSD-src-c757ee90aefd19aff23dfb5e938e8e1e8576dbd4.zip
FreeBSD-src-c757ee90aefd19aff23dfb5e938e8e1e8576dbd4.tar.gz
Provide for multiple, cascaded PICs on PowerPC systems, and extend the
OFW interrupt map interface to also return the device's interrupt parent. MFC after: 8.1-RELEASE
Diffstat (limited to 'sys/powerpc/include')
-rw-r--r--sys/powerpc/include/intr_machdep.h16
-rw-r--r--sys/powerpc/include/ocpbus.h4
-rw-r--r--sys/powerpc/include/openpicvar.h3
3 files changed, 18 insertions, 5 deletions
diff --git a/sys/powerpc/include/intr_machdep.h b/sys/powerpc/include/intr_machdep.h
index 5f0a02a..6267055 100644
--- a/sys/powerpc/include/intr_machdep.h
+++ b/sys/powerpc/include/intr_machdep.h
@@ -29,26 +29,32 @@
#define _MACHINE_INTR_MACHDEP_H_
#define INTR_VECTORS 256
+#define MAX_PICS 5
+
+#define IGN_SHIFT 8
+#define INTR_INTLINE(irq) (irq & ((1 << IGN_SHIFT) - 1))
+#define INTR_IGN(irq) (irq >> IGN_SHIFT)
+
+#define INTR_VEC(pic_id, irq) ((powerpc_ign_lookup(pic_id) << IGN_SHIFT) | irq)
/*
* Default base address for MSI messages on PowerPC
*/
#define MSI_INTEL_ADDR_BASE 0xfee00000
-extern device_t pic;
-extern device_t pic8259;
+extern device_t root_pic;
struct trapframe;
driver_filter_t powerpc_ipi_handler;
void powerpc_register_pic(device_t, u_int);
-void powerpc_register_8259(device_t);
+int powerpc_ign_lookup(uint32_t pic_id);
void powerpc_dispatch_intr(u_int, struct trapframe *);
int powerpc_enable_intr(void);
-int powerpc_setup_intr(const char *, u_int, driver_filter_t,
- driver_intr_t, void *, enum intr_type, void **);
+int powerpc_setup_intr(const char *, u_int, driver_filter_t, driver_intr_t,
+ void *, enum intr_type, void **);
int powerpc_teardown_intr(void *);
int powerpc_config_intr(int, enum intr_trigger, enum intr_polarity);
diff --git a/sys/powerpc/include/ocpbus.h b/sys/powerpc/include/ocpbus.h
index 8b17508..daa952b 100644
--- a/sys/powerpc/include/ocpbus.h
+++ b/sys/powerpc/include/ocpbus.h
@@ -44,4 +44,8 @@
#define OCPBUS_DEVTYPE_I2C 7
#define OCPBUS_DEVTYPE_SEC 8
+/* PIC IDs */
+#define OPIC_ID 0
+#define ATPIC_ID 1
+
#endif /* _MACHINE_OCPBUS_H_ */
diff --git a/sys/powerpc/include/openpicvar.h b/sys/powerpc/include/openpicvar.h
index 403823b..5f28734 100644
--- a/sys/powerpc/include/openpicvar.h
+++ b/sys/powerpc/include/openpicvar.h
@@ -35,10 +35,13 @@
struct openpic_softc {
device_t sc_dev;
struct resource *sc_memr;
+ struct resource *sc_intr;
bus_space_tag_t sc_bt;
bus_space_handle_t sc_bh;
char *sc_version;
int sc_rid;
+ int sc_irq;
+ void *sc_icookie;
u_int sc_ncpu;
u_int sc_nirq;
int sc_psim;
OpenPOWER on IntegriCloud