git://ftp.safe.ca
/
safe
/
jmp
/
linux-2.6
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
ACPI: power_meter: remove double kfree()
[safe/jmp/linux-2.6]
/
drivers
/
acpi
/
pci_irq.c
diff --git
a/drivers/acpi/pci_irq.c
b/drivers/acpi/pci_irq.c
index
03d528e
..
843699e
100644
(file)
--- a/
drivers/acpi/pci_irq.c
+++ b/
drivers/acpi/pci_irq.c
@@
-4,6
+4,8
@@
* Copyright (C) 2001, 2002 Andy Grover <andrew.grover@intel.com>
* Copyright (C) 2001, 2002 Paul Diefenbaugh <paul.s.diefenbaugh@intel.com>
* Copyright (C) 2002 Dominik Brodowski <devel@brodo.de>
* Copyright (C) 2001, 2002 Andy Grover <andrew.grover@intel.com>
* Copyright (C) 2001, 2002 Paul Diefenbaugh <paul.s.diefenbaugh@intel.com>
* Copyright (C) 2002 Dominik Brodowski <devel@brodo.de>
+ * (c) Copyright 2008 Hewlett-Packard Development Company, L.P.
+ * Bjorn Helgaas <bjorn.helgaas@hp.com>
*
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*
*
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*
@@
-38,6
+40,8
@@
#include <acpi/acpi_bus.h>
#include <acpi/acpi_drivers.h>
#include <acpi/acpi_bus.h>
#include <acpi/acpi_drivers.h>
+#define PREFIX "ACPI: "
+
#define _COMPONENT ACPI_PCI_COMPONENT
ACPI_MODULE_NAME("pci_irq");
#define _COMPONENT ACPI_PCI_COMPONENT
ACPI_MODULE_NAME("pci_irq");
@@
-84,7
+88,7
@@
static struct acpi_prt_entry *acpi_pci_irq_find_prt_entry(struct pci_dev *dev,
}
/* http://bugzilla.kernel.org/show_bug.cgi?id=4773 */
}
/* http://bugzilla.kernel.org/show_bug.cgi?id=4773 */
-static struct dmi_system_id medion_md9580[] = {
+static
const
struct dmi_system_id medion_md9580[] = {
{
.ident = "Medion MD9580-F laptop",
.matches = {
{
.ident = "Medion MD9580-F laptop",
.matches = {
@@
-96,7
+100,7
@@
static struct dmi_system_id medion_md9580[] = {
};
/* http://bugzilla.kernel.org/show_bug.cgi?id=5044 */
};
/* http://bugzilla.kernel.org/show_bug.cgi?id=5044 */
-static struct dmi_system_id dell_optiplex[] = {
+static
const
struct dmi_system_id dell_optiplex[] = {
{
.ident = "Dell Optiplex GX1",
.matches = {
{
.ident = "Dell Optiplex GX1",
.matches = {
@@
-108,7
+112,7
@@
static struct dmi_system_id dell_optiplex[] = {
};
/* http://bugzilla.kernel.org/show_bug.cgi?id=10138 */
};
/* http://bugzilla.kernel.org/show_bug.cgi?id=10138 */
-static struct dmi_system_id hp_t5710[] = {
+static
const
struct dmi_system_id hp_t5710[] = {
{
.ident = "HP t5710",
.matches = {
{
.ident = "HP t5710",
.matches = {
@@
-121,13
+125,13
@@
static struct dmi_system_id hp_t5710[] = {
};
struct prt_quirk {
};
struct prt_quirk {
-
struct dmi_system_id
*system;
+
const struct dmi_system_id
*system;
unsigned int segment;
unsigned int bus;
unsigned int device;
unsigned char pin;
unsigned int segment;
unsigned int bus;
unsigned int device;
unsigned char pin;
- c
har
*source; /* according to BIOS */
- c
har
*actual_source;
+ c
onst char
*source; /* according to BIOS */
+ c
onst char
*actual_source;
};
#define PCI_INTX_PIN(c) (c - 'A' + 1)
};
#define PCI_INTX_PIN(c) (c - 'A' + 1)
@@
-137,7
+141,7
@@
struct prt_quirk {
* interrupt at the listed segment/bus/device/pin is connected to the first
* link device, but it is actually connected to the second.
*/
* interrupt at the listed segment/bus/device/pin is connected to the first
* link device, but it is actually connected to the second.
*/
-static struct prt_quirk prt_quirks[] = {
+static
const
struct prt_quirk prt_quirks[] = {
{ medion_md9580, 0, 0, 9, PCI_INTX_PIN('A'),
"\\_SB_.PCI0.ISA_.LNKA",
"\\_SB_.PCI0.ISA_.LNKB"},
{ medion_md9580, 0, 0, 9, PCI_INTX_PIN('A'),
"\\_SB_.PCI0.ISA_.LNKA",
"\\_SB_.PCI0.ISA_.LNKB"},
@@
-149,11
+153,11
@@
static struct prt_quirk prt_quirks[] = {
"\\_SB_.PCI0.LNK3"},
};
"\\_SB_.PCI0.LNK3"},
};
-static void
-
do_prt_fixups(struct acpi_prt_entry *entry,
struct acpi_pci_routing_table *prt)
+static void
do_prt_fixups(struct acpi_prt_entry *entry,
+
struct acpi_pci_routing_table *prt)
{
int i;
{
int i;
- struct prt_quirk *quirk;
+
const
struct prt_quirk *quirk;
for (i = 0; i < ARRAY_SIZE(prt_quirks); i++) {
quirk = &prt_quirks[i];
for (i = 0; i < ARRAY_SIZE(prt_quirks); i++) {
quirk = &prt_quirks[i];
@@
-180,9
+184,8
@@
do_prt_fixups(struct acpi_prt_entry *entry, struct acpi_pci_routing_table *prt)
}
}
}
}
-static int
-acpi_pci_irq_add_entry(acpi_handle handle,
- int segment, int bus, struct acpi_pci_routing_table *prt)
+static int acpi_pci_irq_add_entry(acpi_handle handle, struct pci_bus *bus,
+ struct acpi_pci_routing_table *prt)
{
struct acpi_prt_entry *entry;
{
struct acpi_prt_entry *entry;
@@
-195,8
+198,8
@@
acpi_pci_irq_add_entry(acpi_handle handle,
* 1=INTA, 2=INTB. We use the PCI encoding throughout, so convert
* it here.
*/
* 1=INTA, 2=INTB. We use the PCI encoding throughout, so convert
* it here.
*/
- entry->id.segment =
segment
;
- entry->id.bus = bus;
+ entry->id.segment =
pci_domain_nr(bus)
;
+ entry->id.bus = bus
->number
;
entry->id.device = (prt->address >> 16) & 0xFFFF;
entry->pin = prt->pin + 1;
entry->id.device = (prt->address >> 16) & 0xFFFF;
entry->pin = prt->pin + 1;
@@
-241,7
+244,7
@@
acpi_pci_irq_add_entry(acpi_handle handle,
return 0;
}
return 0;
}
-int acpi_pci_irq_add_prt(acpi_handle handle,
int segment, int
bus)
+int acpi_pci_irq_add_prt(acpi_handle handle,
struct pci_bus *
bus)
{
acpi_status status;
struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL };
{
acpi_status status;
struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL };
@@
-270,7
+273,7
@@
int acpi_pci_irq_add_prt(acpi_handle handle, int segment, int bus)
entry = buffer.pointer;
while (entry && (entry->length > 0)) {
entry = buffer.pointer;
while (entry && (entry->length > 0)) {
- acpi_pci_irq_add_entry(handle,
segment,
bus, entry);
+ acpi_pci_irq_add_entry(handle, bus, entry);
entry = (struct acpi_pci_routing_table *)
((unsigned long)entry + entry->length);
}
entry = (struct acpi_pci_routing_table *)
((unsigned long)entry + entry->length);
}
@@
-279,16
+282,17
@@
int acpi_pci_irq_add_prt(acpi_handle handle, int segment, int bus)
return 0;
}
return 0;
}
-void acpi_pci_irq_del_prt(
int segment, int
bus)
+void acpi_pci_irq_del_prt(
struct pci_bus *
bus)
{
struct acpi_prt_entry *entry, *tmp;
printk(KERN_DEBUG
"ACPI: Delete PCI Interrupt Routing Table for %04x:%02x\n",
{
struct acpi_prt_entry *entry, *tmp;
printk(KERN_DEBUG
"ACPI: Delete PCI Interrupt Routing Table for %04x:%02x\n",
-
segment, bus
);
+
pci_domain_nr(bus), bus->number
);
spin_lock(&acpi_prt_lock);
list_for_each_entry_safe(entry, tmp, &acpi_prt_list, list) {
spin_lock(&acpi_prt_lock);
list_for_each_entry_safe(entry, tmp, &acpi_prt_list, list) {
- if (segment == entry->id.segment && bus == entry->id.bus) {
+ if (pci_domain_nr(bus) == entry->id.segment
+ && bus->number == entry->id.bus) {
list_del(&entry->list);
kfree(entry);
}
list_del(&entry->list);
kfree(entry);
}
@@
-299,8
+303,7
@@
void acpi_pci_irq_del_prt(int segment, int bus)
/* --------------------------------------------------------------------------
PCI Interrupt Routing Support
-------------------------------------------------------------------------- */
/* --------------------------------------------------------------------------
PCI Interrupt Routing Support
-------------------------------------------------------------------------- */
-static struct acpi_prt_entry *
-acpi_pci_irq_lookup(struct pci_dev *dev, int pin)
+static struct acpi_prt_entry *acpi_pci_irq_lookup(struct pci_dev *dev, int pin)
{
struct acpi_prt_entry *entry;
struct pci_dev *bridge;
{
struct acpi_prt_entry *entry;
struct pci_dev *bridge;
@@
-319,7
+322,7
@@
acpi_pci_irq_lookup(struct pci_dev *dev, int pin)
*/
bridge = dev->bus->self;
while (bridge) {
*/
bridge = dev->bus->self;
while (bridge) {
- pin =
(((pin - 1) + PCI_SLOT(dev->devfn)) % 4) + 1
;
+ pin =
pci_swizzle_interrupt_pin(dev, pin)
;
if ((bridge->class >> 8) == PCI_CLASS_BRIDGE_CARDBUS) {
/* PC card has the same IRQ as its cardbridge */
if ((bridge->class >> 8) == PCI_CLASS_BRIDGE_CARDBUS) {
/* PC card has the same IRQ as its cardbridge */
@@
-351,24
+354,17
@@
acpi_pci_irq_lookup(struct pci_dev *dev, int pin)
return NULL;
}
return NULL;
}
-/*
- * acpi_pci_irq_enable
- * success: return 0
- * failure: return < 0
- */
-
int acpi_pci_irq_enable(struct pci_dev *dev)
{
struct acpi_prt_entry *entry;
int acpi_pci_irq_enable(struct pci_dev *dev)
{
struct acpi_prt_entry *entry;
- int gsi
= 0
;
- u8 pin
= 0
;
+ int gsi;
+ u8 pin;
int triggering = ACPI_LEVEL_SENSITIVE;
int polarity = ACPI_ACTIVE_LOW;
char *link = NULL;
char link_desc[16];
int rc;
int triggering = ACPI_LEVEL_SENSITIVE;
int polarity = ACPI_ACTIVE_LOW;
char *link = NULL;
char link_desc[16];
int rc;
-
pin = dev->pin;
if (!pin) {
ACPI_DEBUG_PRINT((ACPI_DB_INFO,
pin = dev->pin;
if (!pin) {
ACPI_DEBUG_PRINT((ACPI_DB_INFO,
@@
-408,7
+404,8
@@
int acpi_pci_irq_enable(struct pci_dev *dev)
/* Interrupt Line values above 0xF are forbidden */
if (dev->irq > 0 && (dev->irq <= 0xF)) {
printk(" - using IRQ %d\n", dev->irq);
/* Interrupt Line values above 0xF are forbidden */
if (dev->irq > 0 && (dev->irq <= 0xF)) {
printk(" - using IRQ %d\n", dev->irq);
- acpi_register_gsi(dev->irq, ACPI_LEVEL_SENSITIVE,
+ acpi_register_gsi(&dev->dev, dev->irq,
+ ACPI_LEVEL_SENSITIVE,
ACPI_ACTIVE_LOW);
return 0;
} else {
ACPI_ACTIVE_LOW);
return 0;
} else {
@@
-417,7
+414,7
@@
int acpi_pci_irq_enable(struct pci_dev *dev)
}
}
}
}
- rc = acpi_register_gsi(gsi, triggering, polarity);
+ rc = acpi_register_gsi(
&dev->dev,
gsi, triggering, polarity);
if (rc < 0) {
dev_warn(&dev->dev, "PCI INT %c: failed to register GSI\n",
pin_name(pin));
if (rc < 0) {
dev_warn(&dev->dev, "PCI INT %c: failed to register GSI\n",
pin_name(pin));
@@
-446,9
+443,8
@@
void __attribute__ ((weak)) acpi_unregister_gsi(u32 i)
void acpi_pci_irq_disable(struct pci_dev *dev)
{
struct acpi_prt_entry *entry;
void acpi_pci_irq_disable(struct pci_dev *dev)
{
struct acpi_prt_entry *entry;
- int gsi = 0;
- u8 pin = 0;
-
+ int gsi;
+ u8 pin;
pin = dev->pin;
if (!pin)
pin = dev->pin;
if (!pin)