summaryrefslogtreecommitdiff
path: root/util/getpir/pirq_routing.h
diff options
context:
space:
mode:
authorJeremy Jackson <jerj@coplanar.net>2007-04-11 18:44:42 +0000
committerStefan Reinauer <stepan@openbios.org>2007-04-11 18:44:42 +0000
commit46d65e85a1c0449f86497264d5958b3d85784767 (patch)
tree5cdc08216595f7de00c1df21ddc0d188d39b022e /util/getpir/pirq_routing.h
parent4880353e03c62baacecaf634bc66c91be423f853 (diff)
downloadcoreboot-46d65e85a1c0449f86497264d5958b3d85784767.tar.xz
Jeremy Jackson wrote:
I'm guessing nobody has tried compiling it with 64bit userspace? Patch makes it compile cleanly and stops a "SEGV instead of working" issue. I also added a few checks for errors on system calls. Signed-off-by: Jeremy Jackson <jerj@coplanar.net> Reworked and Acked-by: Stefan Reinauer <stepan@coresystems.de> git-svn-id: svn://svn.coreboot.org/coreboot/trunk@2602 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
Diffstat (limited to 'util/getpir/pirq_routing.h')
-rw-r--r--util/getpir/pirq_routing.h50
1 files changed, 50 insertions, 0 deletions
diff --git a/util/getpir/pirq_routing.h b/util/getpir/pirq_routing.h
new file mode 100644
index 0000000000..ef6fbeed0d
--- /dev/null
+++ b/util/getpir/pirq_routing.h
@@ -0,0 +1,50 @@
+#ifndef ARCH_PIRQ_ROUTING_H
+#define ARCH_PIRQ_ROUTING_H
+
+#include <stdint.h>
+
+#define PIRQ_SIGNATURE (('$' << 0) + ('P' << 8) + ('I' << 16) + ('R' << 24))
+#define PIRQ_VERSION 0x0100
+
+struct irq_info {
+ uint8_t bus, devfn; /* Bus, device and function */
+ struct {
+ uint8_t link; /* IRQ line ID, chipset dependent, 0=not routed */
+ uint16_t bitmap; /* Available IRQs */
+ } __attribute__((packed)) irq[4];
+ uint8_t slot; /* Slot number, 0=onboard */
+ uint8_t rfu;
+} __attribute__((packed));
+
+#if defined(IRQ_SLOT_COUNT)
+#define IRQ_SLOTS_COUNT IRQ_SLOT_COUNT
+#elif (__GNUC__ < 3)
+#define IRQ_SLOTS_COUNT 1
+#else
+#define IRQ_SLOTS_COUNT
+#endif
+
+struct irq_routing_table {
+ uint32_t signature; /* PIRQ_SIGNATURE should be here */
+ uint16_t version; /* PIRQ_VERSION */
+ uint16_t size; /* Table size in bytes */
+ uint8_t rtr_bus, rtr_devfn; /* Where the interrupt router lies */
+ uint16_t exclusive_irqs; /* IRQs devoted exclusively to PCI usage */
+ uint16_t rtr_vendor, rtr_device; /* Vendor and device ID of interrupt router */
+ uint32_t miniport_data; /* Crap */
+ uint8_t rfu[11];
+ uint8_t checksum; /* Modulo 256 checksum must give zero */
+ struct irq_info slots[IRQ_SLOTS_COUNT];
+} __attribute__((packed));
+
+extern const struct irq_routing_table intel_irq_routing_table;
+
+#if HAVE_PIRQ_TABLE==1
+unsigned long copy_pirq_routing_table(unsigned long start);
+unsigned long write_pirq_routing_table(unsigned long start);
+#else
+#define copy_pirq_routing_table(start) (start)
+#define write_pirq_routing_table(start) (start)
+#endif
+
+#endif /* ARCH_PIRQ_ROUTING_H */