public inbox for linux-acpi@vger.kernel.org
 help / color / mirror / Atom feed
From: Bjorn Helgaas <bjorn.helgaas@hp.com>
To: Len Brown <lenb@kernel.org>
Cc: linux-acpi@vger.kernel.org
Subject: [PATCH 08/20] ACPI: PCI: always use the PCI INTx pin values, not the _PRT ones
Date: Mon, 08 Dec 2008 21:30:41 -0700	[thread overview]
Message-ID: <20081209043041.26415.59498.stgit@bob.kio> (raw)
In-Reply-To: <20081209042833.26415.24906.stgit@bob.kio>

This patch changes pci_irq.c to always use PCI INTx pin encodings
instead of a mix of PCI and _PRT encodings.

The PCI INTx pin numbers from the PCI_INTERRUPT_PIN config register
are 0=device doesn't use interrupts, 1=INTA, ..., 4=INTD.  But the
_PRT table uses 0=INTA, ..., 3=INTD.

This patch converts the _PRT encoding to the PCI encoding immediately
when we add a _PRT entry to the global list.  All the rest of the
code can then use the PCI encoding consistently.

The point of this is to make the interrupt swizzling look the same
as on other architectures, so someday we can unify them.

Signed-off-by: Bjorn Helgaas <bjorn.helgaas@hp.com>
---
 drivers/acpi/pci_irq.c |   15 ++++++++-------
 1 files changed, 8 insertions(+), 7 deletions(-)

diff --git a/drivers/acpi/pci_irq.c b/drivers/acpi/pci_irq.c
index ccbb163..0036055 100644
--- a/drivers/acpi/pci_irq.c
+++ b/drivers/acpi/pci_irq.c
@@ -64,7 +64,7 @@ static DEFINE_SPINLOCK(acpi_prt_lock);
 
 static inline char pin_name(int pin)
 {
-	return 'A' + pin;
+	return 'A' + pin - 1;
 }
 
 /* --------------------------------------------------------------------------
@@ -205,10 +205,15 @@ acpi_pci_irq_add_entry(acpi_handle handle,
 	if (!entry)
 		return -ENOMEM;
 
+	/*
+	 * Note that the _PRT uses 0=INTA, 1=INTB, etc, while PCI uses
+	 * 1=INTA, 2=INTB.  We use the PCI encoding throughout, so convert
+	 * it here.
+	 */
 	entry->id.segment = segment;
 	entry->id.bus = bus;
 	entry->id.device = (prt->address >> 16) & 0xFFFF;
-	entry->pin = prt->pin;
+	entry->pin = prt->pin + 1;
 
 	do_prt_fixups(entry, prt);
 
@@ -427,7 +432,7 @@ acpi_pci_irq_derive(struct pci_dev *dev,
 	 * PCI interrupt routing entry (eg. yenta bridge and add-in card bridge).
 	 */
 	while (irq < 0 && bridge->bus->self) {
-		pin = (pin + PCI_SLOT(bridge->devfn)) % 4;
+		pin = (((pin - 1) + PCI_SLOT(bridge->devfn)) % 4) + 1;
 		bridge = bridge->bus->self;
 
 		if ((bridge->class >> 8) == PCI_CLASS_BRIDGE_CARDBUS) {
@@ -439,8 +444,6 @@ acpi_pci_irq_derive(struct pci_dev *dev,
 						  pci_name(bridge)));
 				return -1;
 			}
-			/* Pin is from 0 to 3 */
-			bridge_pin--;
 			pin = bridge_pin;
 		}
 
@@ -485,7 +488,6 @@ int acpi_pci_irq_enable(struct pci_dev *dev)
 				  pci_name(dev)));
 		return 0;
 	}
-	pin--;
 
 	/* 
 	 * First we check the PCI IRQ routing table (PRT) for an IRQ.  PRT
@@ -568,7 +570,6 @@ void acpi_pci_irq_disable(struct pci_dev *dev)
 	pin = dev->pin;
 	if (!pin)
 		return;
-	pin--;
 
 	/*
 	 * First we check the PCI IRQ routing table (PRT) for an IRQ.


  parent reply	other threads:[~2008-12-09  4:30 UTC|newest]

Thread overview: 23+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-12-09  4:30 [PATCH 00/20] ACPI: PCI: simplify _PRT handling Bjorn Helgaas
2008-12-09  4:30 ` [PATCH 01/20] ACPI: PCI: use conventional PCI address format Bjorn Helgaas
2008-12-09  4:30 ` [PATCH 02/20] ACPI: PCI: remove unnecessary null pointer checks Bjorn Helgaas
2008-12-09  4:30 ` [PATCH 03/20] ACPI: PCI: simplify buffer management for evaluating _PRT Bjorn Helgaas
2008-12-31  4:15   ` [PATCH] ACPI: simplify buffer management for acpi_pci_bind() etc Len Brown
2008-12-09  4:30 ` [PATCH 04/20] ACPI: PCI: ignore _PRT function information Bjorn Helgaas
2008-12-09  4:30 ` [PATCH 05/20] ACPI: PCI: fix GSI/IRQ naming confusion Bjorn Helgaas
2008-12-09  4:30 ` [PATCH 06/20] ACPI: PCI: move struct acpi_prt_entry declaration out of public header file Bjorn Helgaas
2008-12-09  4:30 ` [PATCH 07/20] ACPI: PCI: add a helper to convert _PRT INTx pin number to name Bjorn Helgaas
2008-12-09  4:30 ` Bjorn Helgaas [this message]
2008-12-09  4:30 ` [PATCH 09/20] ACPI: PCI: use 1-based encoding for _PRT quirks Bjorn Helgaas
2008-12-09  4:30 ` [PATCH 10/20] ACPI: PCI: lookup _PRT entry by PCI dev and pin, not segment/bus/dev/pin Bjorn Helgaas
2008-12-09  4:30 ` [PATCH 11/20] ACPI: PCI: tweak _PRT lookup debug Bjorn Helgaas
2008-12-09  4:31 ` [PATCH 12/20] ACPI: PCI: remove callback from acpi_pci_irq_lookup & acpi_pci_irq_derive Bjorn Helgaas
2008-12-09  4:31 ` [PATCH 13/20] ACPI: PCI: use positive logic to simplify code Bjorn Helgaas
2008-12-09  4:31 ` [PATCH 14/20] ACPI: PCI: follow typical PCI INTx swizzling pattern Bjorn Helgaas
2008-12-09  4:31 ` [PATCH 15/20] ACPI: PCI: combine lookup and derive Bjorn Helgaas
2008-12-09  4:31 ` [PATCH 16/20] ACPI: PCI: simplify list of _PRT entries Bjorn Helgaas
2008-12-09  4:31 ` [PATCH 17/20] ACPI: PCI: simplify struct acpi_prt_entry Bjorn Helgaas
2008-12-09  4:31 ` [PATCH 18/20] ACPI: PCI: expand acpi_pci_allocate_irq() and acpi_pci_free_irq() inline Bjorn Helgaas
2008-12-09  4:31 ` [PATCH 19/20] ACPI: PCI: whitespace and useless initialization cleanup Bjorn Helgaas
2008-12-09  4:31 ` [PATCH 20/20] ACPI: PCI: add HP copyright Bjorn Helgaas
2008-12-31  4:17 ` [PATCH 00/20] ACPI: PCI: simplify _PRT handling Len Brown

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20081209043041.26415.59498.stgit@bob.kio \
    --to=bjorn.helgaas@hp.com \
    --cc=lenb@kernel.org \
    --cc=linux-acpi@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox