summaryrefslogtreecommitdiff
path: root/src/arch/x86/include
diff options
context:
space:
mode:
authorAlexandru Gagniuc <mr.nuke.me@gmail.com>2012-08-23 02:32:58 -0500
committerAlexandru Gagniuc <mr.nuke.me@gmail.com>2012-10-04 04:27:29 +0200
commit70c660fd1473b8c6ca7b71276b9552ee2205c99a (patch)
tree51bb9ef72dbe12fa6701005397f2a0c2c06bd688 /src/arch/x86/include
parent93a8b27cbed8a288ee6a65436ec22ad5a67fdbd0 (diff)
pirq_routing: Allow routing with more than 4 PIRQ links
pirq_routing_irqs assumed that only four links are available for PIRQ routing, INTA to INTD. Some chipsets provide more, up to INTH. When pirq_routing_irqs found a link number greater than 4 in the pirq table, it would not assign that IRQ. This is a shame, as it limits the flexibility of routing IRQs. Make the maximum number of links a Kconfig variable, and modify the code to respect it. This works beatifully on the VX900, which provides 8 routable interrupts. While we're at it, also refactor pirq_routing_irqs, and add some much needed comments. Rename pirq_routing_irqs to pirq_route_irqs to demistify the role of this function. The copyrights added were determined from git log filename. Change-Id: I4b565315404c65b871406f616474e2cc9e6e013e Signed-off-by: Alexandru Gagniuc <mr.nuke.me@gmail.com> Reviewed-on: http://review.coreboot.org/1482 Tested-by: build bot (Jenkins)
Diffstat (limited to 'src/arch/x86/include')
-rw-r--r--src/arch/x86/include/arch/pirq_routing.h35
1 files changed, 32 insertions, 3 deletions
diff --git a/src/arch/x86/include/arch/pirq_routing.h b/src/arch/x86/include/arch/pirq_routing.h
index 08ba53506d..c5be5f49ae 100644
--- a/src/arch/x86/include/arch/pirq_routing.h
+++ b/src/arch/x86/include/arch/pirq_routing.h
@@ -1,6 +1,35 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright (C) 2012 Alexandru Gagniuc <mr.nuke.me@gmail.com>
+ * Copyright (C) 2012 Patrick Georgi <patrick@georgi-clan.de>
+ * Copyright (C) 2010 Stefan Reinauer <stepan@coreboot.org>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
#ifndef ARCH_PIRQ_ROUTING_H
#define ARCH_PIRQ_ROUTING_H
+/* This is the maximum number on interrupt entries that a PCI device may have.
+ * This is NOT the number of slots or devices in the system
+ * This is NOT the number of entries in the PIRQ table
+ * This tells us that in the PIRQ table, we are going to have 4 link-bitmap
+ * entries per PCI device
+ * It is fixed at 4: INTA, INTB, INTC, and INTD
+ * CAUTION: If you change this, pirq_routing will not work correctly*/
+#define MAX_INTX_ENTRIES 4
+
#if CONFIG_GENERATE_PIRQ_TABLE
#include <stdint.h>
@@ -40,10 +69,10 @@ unsigned long copy_pirq_routing_table(unsigned long start);
unsigned long write_pirq_routing_table(unsigned long start);
#if CONFIG_PIRQ_ROUTE
-void pirq_routing_irqs(unsigned long start);
-void pirq_assign_irqs(const unsigned char pIntAtoD[4]);
+void pirq_route_irqs(unsigned long start);
+void pirq_assign_irqs(const unsigned char pirq[CONFIG_MAX_PIRQ_LINKS]);
#else
-#define pirq_routing_irqs(start) {}
+#define pirq_route_irqs(start) {}
#endif
#else