diff options
author | nwhitehorn <nwhitehorn@FreeBSD.org> | 2010-06-18 14:06:27 +0000 |
---|---|---|
committer | nwhitehorn <nwhitehorn@FreeBSD.org> | 2010-06-18 14:06:27 +0000 |
commit | c757ee90aefd19aff23dfb5e938e8e1e8576dbd4 (patch) | |
tree | 28ab8d6b3802ae7f1a631f84f71839a5baa6a137 /sys/powerpc/include | |
parent | f26dfb440a0d48a874435768ee94475ddbe496a2 (diff) | |
download | FreeBSD-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.h | 16 | ||||
-rw-r--r-- | sys/powerpc/include/ocpbus.h | 4 | ||||
-rw-r--r-- | sys/powerpc/include/openpicvar.h | 3 |
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; |