ChangeSet 1.828, 2002/12/06 09:31:02-08:00, t-kouchi@mvf.biglobe.ne.jp
[PATCH] ACPI PCI hotplug updates
These are updates of the acpiphp driver for 2.4
This is mainly for backporting of bugfixes in 2.5 to 2.4.
Please apply.
- backport of 2.5 changes & bugfixes
- whitespace cleanup
- message cleanup
diff -Nru a/drivers/hotplug/Makefile b/drivers/hotplug/Makefile
--- a/drivers/hotplug/Makefile Fri Dec 6 09:51:04 2002
+++ b/drivers/hotplug/Makefile Fri Dec 6 09:51:04 2002
@@ -29,9 +29,6 @@
ifdef CONFIG_HOTPLUG_PCI_ACPI
EXTRA_CFLAGS += -D_LINUX -I$(CURDIR)/../acpi
- ifdef CONFIG_ACPI_DEBUG
- EXTRA_CFLAGS += -DACPI_DEBUG -Wno-unused
- endif
endif
acpiphp_objs := acpiphp_core.o \
diff -Nru a/drivers/hotplug/acpiphp.h b/drivers/hotplug/acpiphp.h
--- a/drivers/hotplug/acpiphp.h Fri Dec 6 09:51:04 2002
+++ b/drivers/hotplug/acpiphp.h Fri Dec 6 09:51:04 2002
@@ -97,17 +97,17 @@
#define dbg(format, arg...) \
do { \
- if (debug) \
- printk (KERN_DEBUG "%s: " format "\n", \
+ if (acpiphp_debug) \
+ printk(KERN_DEBUG "%s: " format, \
MY_NAME , ## arg); \
} while (0)
-#define err(format, arg...) printk (KERN_ERR "%s: " format "\n", MY_NAME , ## arg)
-#define info(format, arg...) printk (KERN_INFO "%s: " format "\n", MY_NAME , ## arg)
-#define warn(format, arg...) printk (KERN_WARNING "%s: " format "\n", MY_NAME , ## arg)
+#define err(format, arg...) printk(KERN_ERR "%s: " format, MY_NAME , ## arg)
+#define info(format, arg...) printk(KERN_INFO "%s: " format, MY_NAME , ## arg)
+#define warn(format, arg...) printk(KERN_WARNING "%s: " format, MY_NAME , ## arg)
#define SLOT_MAGIC 0x67267322
/* name size which is used for entries in pcihpfs */
-#define SLOT_NAME_SIZE 16 /* ACPIxxxx */
+#define SLOT_NAME_SIZE 32 /* ACPI{_SUN}-{BUS}:{DEV} */
struct acpiphp_bridge;
struct acpiphp_slot;
@@ -122,8 +122,6 @@
struct hotplug_slot *hotplug_slot;
struct list_head slot_list;
- /* if there are multiple corresponding ACPI slot objects,
- this points to one of them */
struct acpiphp_slot *acpi_slot;
};
@@ -200,7 +198,6 @@
struct acpiphp_bridge *bridge; /* parent */
struct list_head funcs; /* one slot may have different
objects (i.e. for each function) */
- struct acpiphp_func *func; /* functions */
struct semaphore crit_sect;
u32 id; /* slot id (serial #) for hotplug core */
@@ -213,7 +210,7 @@
/**
- * struct acpiphp_func - PCI slot information
+ * struct acpiphp_func - PCI function information
*
* PCI function information for each object in ACPI namespace
* typically 8 objects per slot (i.e. for each PCI function)
@@ -318,5 +315,8 @@
extern void acpiphp_free_resource (struct pci_resource **res);
extern void acpiphp_dump_resource (struct acpiphp_bridge *bridge); /* debug */
extern void acpiphp_dump_func_resource (struct acpiphp_func *func); /* debug */
+
+/* variables */
+extern int acpiphp_debug;
#endif /* _ACPIPHP_H */
diff -Nru a/drivers/hotplug/acpiphp_core.c b/drivers/hotplug/acpiphp_core.c
--- a/drivers/hotplug/acpiphp_core.c Fri Dec 6 09:51:04 2002
+++ b/drivers/hotplug/acpiphp_core.c Fri Dec 6 09:51:04 2002
@@ -50,12 +50,14 @@
#define MY_NAME THIS_MODULE->name
#endif
+static int debug;
+int acpiphp_debug;
+
/* local variables */
-static int debug = 1; /* XXX set to 0 after debug */
static int num_slots;
-#define DRIVER_VERSION "0.3"
-#define DRIVER_AUTHOR "Greg Kroah-Hartman <gregkh@us.ibm.com>"
+#define DRIVER_VERSION "0.4"
+#define DRIVER_AUTHOR "Greg Kroah-Hartman <gregkh@us.ibm.com>, Takayoshi Kochi <t-kouchi@cq.jp.nec.com>"
#define DRIVER_DESC "ACPI Hot Plug PCI Controller Driver"
MODULE_AUTHOR(DRIVER_AUTHOR);
@@ -72,17 +74,21 @@
static int get_attention_status (struct hotplug_slot *slot, u8 *value);
static int get_latch_status (struct hotplug_slot *slot, u8 *value);
static int get_adapter_status (struct hotplug_slot *slot, u8 *value);
+static int get_max_bus_speed (struct hotplug_slot *hotplug_slot, enum pci_bus_speed *value);
+static int get_cur_bus_speed (struct hotplug_slot *hotplug_slot, enum pci_bus_speed *value);
static struct hotplug_slot_ops acpi_hotplug_slot_ops = {
- owner: THIS_MODULE,
- enable_slot: enable_slot,
- disable_slot: disable_slot,
- set_attention_status: set_attention_status,
- hardware_test: hardware_test,
- get_power_status: get_power_status,
- get_attention_status: get_attention_status,
- get_latch_status: get_latch_status,
- get_adapter_status: get_adapter_status,
+ .owner = THIS_MODULE,
+ .enable_slot = enable_slot,
+ .disable_slot = disable_slot,
+ .set_attention_status = set_attention_status,
+ .hardware_test = hardware_test,
+ .get_power_status = get_power_status,
+ .get_attention_status = get_attention_status,
+ .get_latch_status = get_latch_status,
+ .get_adapter_status = get_adapter_status,
+ .get_max_bus_speed = get_max_bus_speed,
+ .get_cur_bus_speed = get_cur_bus_speed,
};
@@ -90,15 +96,15 @@
static inline int slot_paranoia_check (struct slot *slot, const char *function)
{
if (!slot) {
- dbg("%s - slot == NULL", function);
+ dbg("%s - slot == NULL\n", function);
return -1;
}
if (slot->magic != SLOT_MAGIC) {
- dbg("%s - bad magic number for slot", function);
+ dbg("%s - bad magic number for slot\n", function);
return -1;
}
if (!slot->hotplug_slot) {
- dbg("%s - slot->hotplug_slot == NULL!", function);
+ dbg("%s - slot->hotplug_slot == NULL!\n", function);
return -1;
}
return 0;
@@ -106,16 +112,16 @@
static inline struct slot *get_slot (struct hotplug_slot *hotplug_slot, const char *function)
-{
+{
struct slot *slot;
if (!hotplug_slot) {
- dbg("%s - hotplug_slot == NULL", function);
+ dbg("%s - hotplug_slot == NULL\n", function);
return NULL;
}
slot = (struct slot *)hotplug_slot->private;
- if (slot_paranoia_check (slot, function))
+ if (slot_paranoia_check(slot, function))
return NULL;
return slot;
}
@@ -130,16 +136,16 @@
*/
static int enable_slot (struct hotplug_slot *hotplug_slot)
{
- struct slot *slot = get_slot (hotplug_slot, __FUNCTION__);
+ struct slot *slot = get_slot(hotplug_slot, __FUNCTION__);
int retval = 0;
-
+
if (slot == NULL)
return -ENODEV;
- dbg ("%s - physical_slot = %s", __FUNCTION__, hotplug_slot->name);
+ dbg("%s - physical_slot = %s\n", __FUNCTION__, hotplug_slot->name);
/* enable the specified slot */
- retval = acpiphp_enable_slot (slot->acpi_slot);
+ retval = acpiphp_enable_slot(slot->acpi_slot);
return retval;
}
@@ -154,16 +160,16 @@
*/
static int disable_slot (struct hotplug_slot *hotplug_slot)
{
- struct slot *slot = get_slot (hotplug_slot, __FUNCTION__);
+ struct slot *slot = get_slot(hotplug_slot, __FUNCTION__);
int retval = 0;
if (slot == NULL)
return -ENODEV;
-
- dbg ("%s - physical_slot = %s", __FUNCTION__, hotplug_slot->name);
+
+ dbg("%s - physical_slot = %s\n", __FUNCTION__, hotplug_slot->name);
/* disable the specified slot */
- retval = acpiphp_disable_slot (slot->acpi_slot);
+ retval = acpiphp_disable_slot(slot->acpi_slot);
return retval;
}
@@ -180,8 +186,8 @@
static int set_attention_status (struct hotplug_slot *hotplug_slot, u8 status)
{
int retval = 0;
-
- dbg ("%s - physical_slot = %s", __FUNCTION__, hotplug_slot->name);
+
+ dbg("%s - physical_slot = %s\n", __FUNCTION__, hotplug_slot->name);
switch (status) {
case 0:
@@ -208,15 +214,15 @@
*/
static int hardware_test (struct hotplug_slot *hotplug_slot, u32 value)
{
- struct slot *slot = get_slot (hotplug_slot, __FUNCTION__);
+ struct slot *slot = get_slot(hotplug_slot, __FUNCTION__);
int retval = 0;
-
+
if (slot == NULL)
return -ENODEV;
-
- dbg ("%s - physical_slot = %s", __FUNCTION__, hotplug_slot->name);
- err ("No hardware tests are defined for this driver");
+ dbg("%s - physical_slot = %s\n", __FUNCTION__, hotplug_slot->name);
+
+ err("No hardware tests are defined for this driver\n");
retval = -ENODEV;
return retval;
@@ -234,15 +240,15 @@
*/
static int get_power_status (struct hotplug_slot *hotplug_slot, u8 *value)
{
- struct slot *slot = get_slot (hotplug_slot, __FUNCTION__);
+ struct slot *slot = get_slot(hotplug_slot, __FUNCTION__);
int retval = 0;
-
+
if (slot == NULL)
return -ENODEV;
-
- dbg("%s - physical_slot = %s", __FUNCTION__, hotplug_slot->name);
- *value = acpiphp_get_power_status (slot->acpi_slot);
+ dbg("%s - physical_slot = %s\n", __FUNCTION__, hotplug_slot->name);
+
+ *value = acpiphp_get_power_status(slot->acpi_slot);
return retval;
}
@@ -258,8 +264,8 @@
static int get_attention_status (struct hotplug_slot *hotplug_slot, u8 *value)
{
int retval = 0;
-
- dbg("%s - physical_slot = %s", __FUNCTION__, hotplug_slot->name);
+
+ dbg("%s - physical_slot = %s\n", __FUNCTION__, hotplug_slot->name);
*value = hotplug_slot->info->attention_status;
@@ -278,15 +284,15 @@
*/
static int get_latch_status (struct hotplug_slot *hotplug_slot, u8 *value)
{
- struct slot *slot = get_slot (hotplug_slot, __FUNCTION__);
+ struct slot *slot = get_slot(hotplug_slot, __FUNCTION__);
int retval = 0;
-
+
if (slot == NULL)
return -ENODEV;
-
- dbg("%s - physical_slot = %s", __FUNCTION__, hotplug_slot->name);
- *value = acpiphp_get_latch_status (slot->acpi_slot);
+ dbg("%s - physical_slot = %s\n", __FUNCTION__, hotplug_slot->name);
+
+ *value = acpiphp_get_latch_status(slot->acpi_slot);
return retval;
}
@@ -303,20 +309,48 @@
*/
static int get_adapter_status (struct hotplug_slot *hotplug_slot, u8 *value)
{
- struct slot *slot = get_slot (hotplug_slot, __FUNCTION__);
+ struct slot *slot = get_slot(hotplug_slot, __FUNCTION__);
int retval = 0;
-
+
if (slot == NULL)
return -ENODEV;
-
- dbg("%s - physical_slot = %s", __FUNCTION__, hotplug_slot->name);
- *value = acpiphp_get_adapter_status (slot->acpi_slot);
+ dbg("%s - physical_slot = %s\n", __FUNCTION__, hotplug_slot->name);
+
+ *value = acpiphp_get_adapter_status(slot->acpi_slot);
return retval;
}
+/* return dummy value because ACPI doesn't provide any method... */
+static int get_max_bus_speed (struct hotplug_slot *hotplug_slot, enum pci_bus_speed *value)
+{
+ struct slot *slot = get_slot(hotplug_slot, __FUNCTION__);
+
+ if (slot == NULL)
+ return -ENODEV;
+
+ *value = PCI_SPEED_UNKNOWN;
+
+ return 0;
+}
+
+
+/* return dummy value because ACPI doesn't provide any method... */
+static int get_cur_bus_speed (struct hotplug_slot *hotplug_slot, enum pci_bus_speed *value)
+{
+ struct slot *slot = get_slot(hotplug_slot, __FUNCTION__);
+
+ if (slot == NULL)
+ return -ENODEV;
+
+ *value = PCI_SPEED_UNKNOWN;
+
+ return 0;
+}
+
+
static int init_acpi (void)
{
int retval;
@@ -335,13 +369,6 @@
}
-static void exit_acpi (void)
-{
- /* deallocate internal data structures etc. */
- acpiphp_glue_exit();
-}
-
-
/**
* make_slot_name - make a slot name that appears in pcihpfs
* @slot: slot to name
@@ -349,7 +376,10 @@
*/
static void make_slot_name (struct slot *slot)
{
- snprintf (slot->hotplug_slot->name, SLOT_NAME_SIZE, "ACPI%x", slot->acpi_slot->sun);
+ snprintf(slot->hotplug_slot->name, SLOT_NAME_SIZE, "ACPI%d-%02x:%02x",
+ slot->acpi_slot->sun,
+ slot->acpi_slot->bridge->bus,
+ slot->acpi_slot->device);
}
/**
@@ -363,31 +393,31 @@
int i;
for (i = 0; i < num_slots; ++i) {
- slot = kmalloc (sizeof (struct slot), GFP_KERNEL);
+ slot = kmalloc(sizeof(struct slot), GFP_KERNEL);
if (!slot)
return -ENOMEM;
memset(slot, 0, sizeof(struct slot));
- slot->hotplug_slot = kmalloc (sizeof (struct hotplug_slot), GFP_KERNEL);
+ slot->hotplug_slot = kmalloc(sizeof(struct hotplug_slot), GFP_KERNEL);
if (!slot->hotplug_slot) {
- kfree (slot);
+ kfree(slot);
return -ENOMEM;
}
- memset(slot->hotplug_slot, 0, sizeof (struct hotplug_slot));
+ memset(slot->hotplug_slot, 0, sizeof(struct hotplug_slot));
- slot->hotplug_slot->info = kmalloc (sizeof (struct hotplug_slot_info), GFP_KERNEL);
+ slot->hotplug_slot->info = kmalloc(sizeof(struct hotplug_slot_info), GFP_KERNEL);
if (!slot->hotplug_slot->info) {
- kfree (slot->hotplug_slot);
- kfree (slot);
+ kfree(slot->hotplug_slot);
+ kfree(slot);
return -ENOMEM;
}
- memset(slot->hotplug_slot->info, 0, sizeof (struct hotplug_slot_info));
+ memset(slot->hotplug_slot->info, 0, sizeof(struct hotplug_slot_info));
- slot->hotplug_slot->name = kmalloc (SLOT_NAME_SIZE, GFP_KERNEL);
+ slot->hotplug_slot->name = kmalloc(SLOT_NAME_SIZE, GFP_KERNEL);
if (!slot->hotplug_slot->name) {
- kfree (slot->hotplug_slot->info);
- kfree (slot->hotplug_slot);
- kfree (slot);
+ kfree(slot->hotplug_slot->info);
+ kfree(slot->hotplug_slot);
+ kfree(slot);
return -ENOMEM;
}
@@ -397,26 +427,27 @@
slot->hotplug_slot->private = slot;
slot->hotplug_slot->ops = &acpi_hotplug_slot_ops;
- slot->acpi_slot = get_slot_from_id (i);
+ slot->acpi_slot = get_slot_from_id(i);
slot->hotplug_slot->info->power_status = acpiphp_get_power_status(slot->acpi_slot);
slot->hotplug_slot->info->attention_status = acpiphp_get_attention_status(slot->acpi_slot);
slot->hotplug_slot->info->latch_status = acpiphp_get_latch_status(slot->acpi_slot);
slot->hotplug_slot->info->adapter_status = acpiphp_get_adapter_status(slot->acpi_slot);
- make_slot_name (slot);
+ make_slot_name(slot);
- retval = pci_hp_register (slot->hotplug_slot);
+ retval = pci_hp_register(slot->hotplug_slot);
if (retval) {
- err ("pci_hp_register failed with error %d", retval);
- kfree (slot->hotplug_slot->info);
- kfree (slot->hotplug_slot->name);
- kfree (slot->hotplug_slot);
- kfree (slot);
+ err("pci_hp_register failed with error %d\n", retval);
+ kfree(slot->hotplug_slot->info);
+ kfree(slot->hotplug_slot->name);
+ kfree(slot->hotplug_slot);
+ kfree(slot);
return retval;
}
/* add slot to our internal list */
- list_add (&slot->slot_list, &slot_list);
+ list_add(&slot->slot_list, &slot_list);
+ info("Slot [%s] registered\n", slot->hotplug_slot->name);
}
return retval;
@@ -425,17 +456,17 @@
static void cleanup_slots (void)
{
- struct list_head *tmp;
+ struct list_head *tmp, *n;
struct slot *slot;
- list_for_each (tmp, &slot_list) {
- slot = list_entry (tmp, struct slot, slot_list);
- list_del (&slot->slot_list);
- pci_hp_deregister (slot->hotplug_slot);
- kfree (slot->hotplug_slot->info);
- kfree (slot->hotplug_slot->name);
- kfree (slot->hotplug_slot);
- kfree (slot);
+ list_for_each_safe (tmp, n, &slot_list) {
+ slot = list_entry(tmp, struct slot, slot_list);
+ list_del(&slot->slot_list);
+ pci_hp_deregister(slot->hotplug_slot);
+ kfree(slot->hotplug_slot->info);
+ kfree(slot->hotplug_slot->name);
+ kfree(slot->hotplug_slot);
+ kfree(slot);
}
return;
@@ -446,6 +477,10 @@
{
int retval;
+ info(DRIVER_DESC " version: " DRIVER_VERSION "\n");
+
+ acpiphp_debug = debug;
+
/* read all the ACPI info from the system */
retval = init_acpi();
if (retval)
@@ -455,7 +490,6 @@
if (retval)
return retval;
- info (DRIVER_DESC " version: " DRIVER_VERSION);
return 0;
}
@@ -463,7 +497,8 @@
static void __exit acpiphp_exit(void)
{
cleanup_slots();
- exit_acpi();
+ /* deallocate internal data structures etc. */
+ acpiphp_glue_exit();
}
module_init(acpiphp_init);
diff -Nru a/drivers/hotplug/acpiphp_glue.c b/drivers/hotplug/acpiphp_glue.c
--- a/drivers/hotplug/acpiphp_glue.c Fri Dec 6 09:51:04 2002
+++ b/drivers/hotplug/acpiphp_glue.c Fri Dec 6 09:51:04 2002
@@ -39,7 +39,6 @@
static LIST_HEAD(bridge_list);
-static int debug = 1; /* XXX set 0 after debug */
#define MY_NAME "acpiphp_glue"
static void handle_hotplug_event_bridge (acpi_handle, u32, void *);
@@ -90,8 +89,6 @@
static acpi_status
is_ejectable_slot (acpi_handle handle, u32 lvl, void *context, void **rv)
{
- acpi_status status;
- acpi_handle tmp;
int *count = (int *)context;
if (is_ejectable(handle)) {
@@ -157,7 +154,7 @@
for (slot = bridge->slots; slot; slot = slot->next)
if (slot->device == device) {
if (slot->sun != sun)
- warn("sibling found, but _SUN doesn't match!");
+ warn("sibling found, but _SUN doesn't match!\n");
break;
}
@@ -181,7 +178,7 @@
bridge->nr_slots++;
- dbg("found ACPI PCI Hotplug slot at PCI %02x:%02x Slot:%d",
+ dbg("found ACPI PCI Hotplug slot at PCI %02x:%02x Slot:%d\n",
slot->bridge->bus, slot->device, slot->sun);
}
@@ -206,7 +203,7 @@
newfunc);
if (ACPI_FAILURE(status)) {
- err("failed to register interrupt notify handler");
+ err("failed to register interrupt notify handler\n");
return status;
}
@@ -306,21 +303,21 @@
switch (resource_type) {
case ACPI_MEMORY_RANGE:
if (cache_attribute == ACPI_PREFETCHABLE_MEMORY) {
- dbg("resource type: prefetchable memory 0x%x - 0x%x", (u32)min_address_range, (u32)max_address_range);
+ dbg("resource type: prefetchable memory 0x%x - 0x%x\n", (u32)min_address_range, (u32)max_address_range);
res = acpiphp_make_resource(min_address_range,
address_length);
if (!res) {
- err("out of memory");
+ err("out of memory\n");
return;
}
res->next = bridge->p_mem_head;
bridge->p_mem_head = res;
} else {
- dbg("resource type: memory 0x%x - 0x%x", (u32)min_address_range, (u32)max_address_range);
+ dbg("resource type: memory 0x%x - 0x%x\n", (u32)min_address_range, (u32)max_address_range);
res = acpiphp_make_resource(min_address_range,
address_length);
if (!res) {
- err("out of memory");
+ err("out of memory\n");
return;
}
res->next = bridge->mem_head;
@@ -328,22 +325,22 @@
}
break;
case ACPI_IO_RANGE:
- dbg("resource type: io 0x%x - 0x%x", (u32)min_address_range, (u32)max_address_range);
+ dbg("resource type: io 0x%x - 0x%x\n", (u32)min_address_range, (u32)max_address_range);
res = acpiphp_make_resource(min_address_range,
address_length);
if (!res) {
- err("out of memory");
+ err("out of memory\n");
return;
}
res->next = bridge->io_head;
bridge->io_head = res;
break;
case ACPI_BUS_NUMBER_RANGE:
- dbg("resource type: bus number %d - %d", (u32)min_address_range, (u32)max_address_range);
+ dbg("resource type: bus number %d - %d\n", (u32)min_address_range, (u32)max_address_range);
res = acpiphp_make_resource(min_address_range,
address_length);
if (!res) {
- err("out of memory");
+ err("out of memory\n");
return;
}
res->next = bridge->bus_head;
@@ -360,10 +357,9 @@
acpiphp_resource_sort_and_combine(&bridge->mem_head);
acpiphp_resource_sort_and_combine(&bridge->p_mem_head);
acpiphp_resource_sort_and_combine(&bridge->bus_head);
-#if 1
- info("ACPI _CRS resource:");
+
+ dbg("ACPI _CRS resource:\n");
acpiphp_dump_resource(bridge);
-#endif
}
@@ -372,7 +368,7 @@
{
const struct list_head *l;
- list_for_each(l, list) {
+ list_for_each (l, list) {
struct pci_bus *b = pci_bus_b(l);
if (b->number == bus)
return b;
@@ -386,7 +382,7 @@
}
}
- return 0;
+ return NULL;
}
@@ -397,7 +393,8 @@
#if ACPI_CA_VERSION < 0x20020201
acpi_buffer buffer;
#else
- acpi_buffer buffer = {ACPI_ALLOCATE_BUFFER, NULL};
+ acpi_buffer buffer = { .length = ACPI_ALLOCATE_BUFFER,
+ .pointer = NULL};
#endif
acpi_object *package;
int i;
@@ -425,7 +422,7 @@
#endif
if (ACPI_FAILURE(status)) {
- dbg("_HPP evaluation failed");
+ dbg("_HPP evaluation failed\n");
return;
}
@@ -433,13 +430,13 @@
if (!package || package->type != ACPI_TYPE_PACKAGE ||
package->package.count != 4 || !package->package.elements) {
- err("invalid _HPP object; ignoring");
+ err("invalid _HPP object; ignoring\n");
goto err_exit;
}
for (i = 0; i < 4; i++) {
if (package->package.elements[i].type != ACPI_TYPE_INTEGER) {
- err("invalid _HPP parameter type; ignoring");
+ err("invalid _HPP parameter type; ignoring\n");
goto err_exit;
}
}
@@ -449,7 +446,7 @@
bridge->hpp.enable_SERR = package->package.elements[2].integer.value;
bridge->hpp.enable_PERR = package->package.elements[3].integer.value;
- dbg("_HPP parameter = (%02x, %02x, %02x, %02x)",
+ dbg("_HPP parameter = (%02x, %02x, %02x, %02x)\n",
bridge->hpp.cache_line_size,
bridge->hpp.latency_timer,
bridge->hpp.enable_SERR,
@@ -484,15 +481,13 @@
bridge);
if (ACPI_FAILURE(status)) {
- err("failed to register interrupt notify handler");
+ err("failed to register interrupt notify handler\n");
}
list_add(&bridge->list, &bridge_list);
-#if 1
- dbg("Bridge resource:");
+ dbg("Bridge resource:\n");
acpiphp_dump_resource(bridge);
-#endif
}
@@ -503,7 +498,8 @@
#if ACPI_CA_VERSION < 0x20020201
acpi_buffer buffer;
#else
- acpi_buffer buffer = {ACPI_ALLOCATE_BUFFER, NULL};
+ acpi_buffer buffer = { .length = ACPI_ALLOCATE_BUFFER,
+ .pointer = NULL};
#endif
struct acpiphp_bridge *bridge;
@@ -545,7 +541,7 @@
#endif
if (ACPI_FAILURE(status)) {
- err("failed to decode bridge resources");
+ err("failed to decode bridge resources\n");
kfree(bridge);
return;
}
@@ -565,17 +561,15 @@
/* allocate and initialize PCI-to-PCI bridge data structure */
static void add_p2p_bridge (acpi_handle *handle, int seg, int bus, int dev, int fn)
{
- acpi_status status;
struct acpiphp_bridge *bridge;
u8 tmp8;
u16 tmp16;
- u32 tmp;
u64 base64, limit64;
u32 base, limit, base32u, limit32u;
bridge = kmalloc(sizeof(struct acpiphp_bridge), GFP_KERNEL);
if (bridge == NULL) {
- err("out of memory");
+ err("out of memory\n");
return;
}
@@ -587,14 +581,14 @@
bridge->pci_dev = pci_find_slot(bus, PCI_DEVFN(dev, fn));
if (!bridge->pci_dev) {
- err("Can't get pci_dev");
+ err("Can't get pci_dev\n");
kfree(bridge);
return;
}
bridge->pci_bus = bridge->pci_dev->subordinate;
if (!bridge->pci_bus) {
- err("This is not a PCI-to-PCI bridge!");
+ err("This is not a PCI-to-PCI bridge!\n");
kfree(bridge);
return;
}
@@ -621,10 +615,10 @@
limit = ((limit << 8) & 0xf000) + 0xfff;
bridge->io_head = acpiphp_make_resource((u64)base, limit - base + 1);
if (!bridge->io_head) {
- err("out of memory");
+ err("out of memory\n");
return;
}
- dbg("16bit I/O range: %04x-%04x",
+ dbg("16bit I/O range: %04x-%04x\n",
(u32)bridge->io_head->base,
(u32)(bridge->io_head->base + bridge->io_head->length - 1));
break;
@@ -635,18 +629,18 @@
limit = (((u32)tmp16 << 16) | ((limit << 8) & 0xf000)) + 0xfff;
bridge->io_head = acpiphp_make_resource((u64)base, limit - base + 1);
if (!bridge->io_head) {
- err("out of memory");
+ err("out of memory\n");
return;
}
- dbg("32bit I/O range: %08x-%08x",
+ dbg("32bit I/O range: %08x-%08x\n",
(u32)bridge->io_head->base,
(u32)(bridge->io_head->base + bridge->io_head->length - 1));
break;
case 0x0f:
- dbg("I/O space unsupported");
+ dbg("I/O space unsupported\n");
break;
default:
- warn("Unknown I/O range type");
+ warn("Unknown I/O range type\n");
}
/* Memory resources (mandatory for P2P bridge) */
@@ -656,10 +650,10 @@
limit = ((tmp16 & 0xfff0) << 16) | 0xfffff;
bridge->mem_head = acpiphp_make_resource((u64)base, limit - base + 1);
if (!bridge->mem_head) {
- err("out of memory");
+ err("out of memory\n");
return;
}
- dbg("32bit Memory range: %08x-%08x",
+ dbg("32bit Memory range: %08x-%08x\n",
(u32)bridge->mem_head->base,
(u32)(bridge->mem_head->base + bridge->mem_head->length-1));
@@ -675,10 +669,10 @@
limit = ((limit & 0xfff0) << 16) | 0xfffff;
bridge->p_mem_head = acpiphp_make_resource((u64)base, limit - base + 1);
if (!bridge->p_mem_head) {
- err("out of memory");
+ err("out of memory\n");
return;
}
- dbg("32bit Prefetchable memory range: %08x-%08x",
+ dbg("32bit Prefetchable memory range: %08x-%08x\n",
(u32)bridge->p_mem_head->base,
(u32)(bridge->p_mem_head->base + bridge->p_mem_head->length - 1));
break;
@@ -690,10 +684,10 @@
bridge->p_mem_head = acpiphp_make_resource(base64, limit64 - base64 + 1);
if (!bridge->p_mem_head) {
- err("out of memory");
+ err("out of memory\n");
return;
}
- dbg("64bit Prefetchable memory range: %08x%08x-%08x%08x",
+ dbg("64bit Prefetchable memory range: %08x%08x-%08x%08x\n",
(u32)(bridge->p_mem_head->base >> 32),
(u32)(bridge->p_mem_head->base & 0xffffffff),
(u32)((bridge->p_mem_head->base + bridge->p_mem_head->length - 1) >> 32),
@@ -702,7 +696,7 @@
case 0x0f:
break;
default:
- warn("Unknown prefetchale memory type");
+ warn("Unknown prefetchale memory type\n");
}
init_bridge_misc(bridge);
@@ -719,7 +713,6 @@
unsigned long tmp;
int seg, bus, device, function;
struct pci_dev *dev;
- u32 val;
/* get PCI address */
seg = (*segbus >> 8) & 0xff;
@@ -731,7 +724,7 @@
status = acpi_evaluate_integer(handle, "_ADR", NULL, &tmp);
if (ACPI_FAILURE(status)) {
- dbg("%s: _ADR evaluation failure", __FUNCTION__);
+ dbg("%s: _ADR evaluation failure\n", __FUNCTION__);
return AE_OK;
}
@@ -748,7 +741,7 @@
/* check if this bridge has ejectable slots */
if (detect_ejectable_slots(handle) > 0) {
- dbg("found PCI-to-PCI bridge at PCI %02x:%02x.%d", bus, device, function);
+ dbg("found PCI-to-PCI bridge at PCI %s\n", dev->slot_name);
add_p2p_bridge(handle, seg, bus, device, function);
}
@@ -763,14 +756,13 @@
unsigned long tmp;
int seg, bus;
acpi_handle dummy_handle;
- int sta = -1;
/* if the bridge doesn't have _STA, we assume it is always there */
status = acpi_get_handle(handle, "_STA", &dummy_handle);
if (ACPI_SUCCESS(status)) {
status = acpi_evaluate_integer(handle, "_STA", NULL, &tmp);
if (ACPI_FAILURE(status)) {
- dbg("%s: _STA evaluation failure", __FUNCTION__);
+ dbg("%s: _STA evaluation failure\n", __FUNCTION__);
return 0;
}
if ((tmp & ACPI_STA_FUNCTIONING) == 0)
@@ -789,13 +781,13 @@
if (ACPI_SUCCESS(status)) {
bus = tmp;
} else {
- warn("can't get bus number, assuming 0");
+ warn("can't get bus number, assuming 0\n");
bus = 0;
}
/* check if this bridge has ejectable slots */
if (detect_ejectable_slots(handle) > 0) {
- dbg("found PCI host-bus bridge with hot-pluggable slots");
+ dbg("found PCI host-bus bridge with hot-pluggable slots\n");
add_host_bridge(handle, seg, bus);
return 0;
}
@@ -807,7 +799,7 @@
find_p2p_bridge, &tmp, NULL);
if (ACPI_FAILURE(status))
- warn("find_p2p_bridge faied (error code = 0x%x)",status);
+ warn("find_p2p_bridge faied (error code = 0x%x)\n",status);
return 0;
}
@@ -820,21 +812,23 @@
acpi_status status;
acpi_device_info info;
char objname[5];
- acpi_buffer buffer = { sizeof(objname), objname };
+ acpi_buffer buffer = { .length = sizeof(objname),
+ .pointer = objname };
status = acpi_get_object_info(handle, &info);
if (ACPI_FAILURE(status)) {
- dbg("%s: failed to get bridge information", __FUNCTION__);
+ dbg("%s: failed to get bridge information\n", __FUNCTION__);
return AE_OK; /* continue */
}
info.hardware_id[sizeof(info.hardware_id)-1] = '\0';
- /* TBD check _CID also */
- if (strcmp(info.hardware_id, ACPI_PCI_HOST_HID) == 0) {
-
+ /* TBD use acpi_get_devices() API */
+ if (info.current_status &&
+ (info.valid & ACPI_VALID_HID) &&
+ strcmp(info.hardware_id, ACPI_PCI_HOST_HID) == 0) {
acpi_get_name(handle, ACPI_SINGLE_NAME, &buffer);
- dbg("checking PCI-hotplug capable bridges under [%s]", objname);
+ dbg("checking PCI-hotplug capable bridges under [%s]\n", objname);
add_bridges(handle);
}
return AE_OK;
@@ -852,15 +846,15 @@
if (slot->flags & SLOT_POWEREDON)
goto err_exit;
- list_for_each(l, &slot->funcs) {
+ list_for_each (l, &slot->funcs) {
func = list_entry(l, struct acpiphp_func, sibling);
if (func->flags & FUNC_HAS_PS0) {
- dbg("%s: executing _PS0 on %02x:%02x.%d", __FUNCTION__,
- slot->bridge->bus, slot->device, func->function);
+ dbg("%s: executing _PS0 on %s\n", __FUNCTION__,
+ func->pci_dev->slot_name);
status = acpi_evaluate_object(func->handle, "_PS0", NULL, NULL);
if (ACPI_FAILURE(status)) {
- warn("%s: _PS0 failed", __FUNCTION__);
+ warn("%s: _PS0 failed\n", __FUNCTION__);
retval = -1;
goto err_exit;
}
@@ -890,27 +884,27 @@
if ((slot->flags & SLOT_POWEREDON) == 0)
goto err_exit;
- list_for_each(l, &slot->funcs) {
+ list_for_each (l, &slot->funcs) {
func = list_entry(l, struct acpiphp_func, sibling);
if (func->flags & FUNC_HAS_PS3) {
- dbg("%s: executing _PS3 on %02x:%02x.%d", __FUNCTION__,
- slot->bridge->bus, slot->device, func->function);
+ dbg("%s: executing _PS3 on %s\n", __FUNCTION__,
+ func->pci_dev->slot_name);
status = acpi_evaluate_object(func->handle, "_PS3", NULL, NULL);
if (ACPI_FAILURE(status)) {
- warn("%s: _PS3 failed", __FUNCTION__);
+ warn("%s: _PS3 failed\n", __FUNCTION__);
retval = -1;
goto err_exit;
}
}
}
- list_for_each(l, &slot->funcs) {
+ list_for_each (l, &slot->funcs) {
func = list_entry(l, struct acpiphp_func, sibling);
if (func->flags & FUNC_HAS_EJ0) {
- dbg("%s: executing _EJ0 on %02x:%02x.%d", __FUNCTION__,
- slot->bridge->bus, slot->device, func->function);
+ dbg("%s: executing _EJ0 on %s\n", __FUNCTION__,
+ func->pci_dev->slot_name);
/* _EJ0 method take one argument */
arg_list.count = 1;
@@ -920,7 +914,7 @@
status = acpi_evaluate_object(func->handle, "_EJ0", &arg_list, NULL);
if (ACPI_FAILURE(status)) {
- warn("%s: _EJ0 failed", __FUNCTION__);
+ warn("%s: _EJ0 failed\n", __FUNCTION__);
retval = -1;
goto err_exit;
}
@@ -946,7 +940,6 @@
*/
static int enable_device (struct acpiphp_slot *slot)
{
- acpi_status status;
u8 bus;
struct pci_dev dev0, *dev;
struct pci_bus *child;
@@ -961,7 +954,7 @@
dev = pci_find_slot(slot->bridge->bus, PCI_DEVFN(slot->device, 0));
if (dev) {
/* This case shouldn't happen */
- err("pci_dev structure already exists.");
+ err("pci_dev structure already exists.\n");
retval = -1;
goto err_exit;
}
@@ -981,7 +974,7 @@
dev = pci_scan_slot (&dev0);
if (!dev) {
- err("No new device found");
+ err("No new device found\n");
retval = -1;
goto err_exit;
}
@@ -993,7 +986,7 @@
}
/* associate pci_dev to our representation */
- list_for_each(l, &slot->funcs) {
+ list_for_each (l, &slot->funcs) {
func = list_entry(l, struct acpiphp_func, sibling);
func->pci_dev = pci_find_slot(slot->bridge->bus,
@@ -1010,10 +1003,8 @@
slot->flags |= SLOT_ENABLED;
-#if 1
- dbg("Available resources:");
+ dbg("Available resources:\n");
acpiphp_dump_resource(slot->bridge);
-#endif
err_exit:
return retval;
@@ -1028,20 +1019,19 @@
int retval = 0;
struct acpiphp_func *func;
struct list_head *l;
- acpi_status status;
/* is this slot already disabled? */
if (!(slot->flags & SLOT_ENABLED))
goto err_exit;
- list_for_each(l, &slot->funcs) {
+ list_for_each (l, &slot->funcs) {
func = list_entry(l, struct acpiphp_func, sibling);
if (func->pci_dev) {
if (acpiphp_unconfigure_function(func) == 0) {
func->pci_dev = NULL;
} else {
- err("failed to unconfigure device");
+ err("failed to unconfigure device\n");
retval = -1;
goto err_exit;
}
@@ -1070,12 +1060,11 @@
{
acpi_status status;
unsigned long sta = 0;
- int fn;
u32 dvid;
struct list_head *l;
struct acpiphp_func *func;
- list_for_each(l, &slot->funcs) {
+ list_for_each (l, &slot->funcs) {
func = list_entry(l, struct acpiphp_func, sibling);
if (func->flags & FUNC_HAS_STA) {
@@ -1106,7 +1095,7 @@
/**
* handle_hotplug_event_bridge - handle ACPI event on bridges
*
- * @handle: Notify()'ed acpi_handle
+ * @handle: Notify()'ed acpi_handle
* @type: Notify code
* @context: pointer to acpiphp_bridge structure
*
@@ -1117,7 +1106,8 @@
{
struct acpiphp_bridge *bridge;
char objname[64];
- acpi_buffer buffer = { sizeof(objname), objname };
+ acpi_buffer buffer = { .length = sizeof(objname),
+ .pointer = objname };
bridge = (struct acpiphp_bridge *)context;
@@ -1126,28 +1116,28 @@
switch (type) {
case ACPI_NOTIFY_BUS_CHECK:
/* bus re-enumerate */
- dbg("%s: Bus check notify on %s", __FUNCTION__, objname);
+ dbg("%s: Bus check notify on %s\n", __FUNCTION__, objname);
acpiphp_check_bridge(bridge);
break;
case ACPI_NOTIFY_DEVICE_CHECK:
/* device check */
- dbg("%s: Device check notify on %s", __FUNCTION__, objname);
+ dbg("%s: Device check notify on %s\n", __FUNCTION__, objname);
acpiphp_check_bridge(bridge);
break;
case ACPI_NOTIFY_DEVICE_WAKE:
/* wake event */
- dbg("%s: Device wake notify on %s", __FUNCTION__, objname);
+ dbg("%s: Device wake notify on %s\n", __FUNCTION__, objname);
break;
case ACPI_NOTIFY_EJECT_REQUEST:
/* request device eject */
- dbg("%s: Device eject notify on %s", __FUNCTION__, objname);
+ dbg("%s: Device eject notify on %s\n", __FUNCTION__, objname);
break;
default:
- warn("notify_handler: unknown event type 0x%x for %s", type, objname);
+ warn("notify_handler: unknown event type 0x%x for %s\n", type, objname);
break;
}
}
@@ -1156,7 +1146,7 @@
/**
* handle_hotplug_event_func - handle ACPI event on functions (i.e. slots)
*
- * @handle: Notify()'ed acpi_handle
+ * @handle: Notify()'ed acpi_handle
* @type: Notify code
* @context: pointer to acpiphp_func structure
*
@@ -1167,7 +1157,8 @@
{
struct acpiphp_func *func;
char objname[64];
- acpi_buffer buffer = { sizeof(objname), objname };
+ acpi_buffer buffer = { .length = sizeof(objname),
+ .pointer = objname };
acpi_get_name(handle, ACPI_FULL_PATHNAME, &buffer);
@@ -1176,29 +1167,29 @@
switch (type) {
case ACPI_NOTIFY_BUS_CHECK:
/* bus re-enumerate */
- dbg("%s: Bus check notify on %s", __FUNCTION__, objname);
+ dbg("%s: Bus check notify on %s\n", __FUNCTION__, objname);
acpiphp_enable_slot(func->slot);
break;
case ACPI_NOTIFY_DEVICE_CHECK:
/* device check : re-enumerate from parent bus */
- dbg("%s: Device check notify on %s", __FUNCTION__, objname);
+ dbg("%s: Device check notify on %s\n", __FUNCTION__, objname);
acpiphp_check_bridge(func->slot->bridge);
break;
case ACPI_NOTIFY_DEVICE_WAKE:
/* wake event */
- dbg("%s: Device wake notify on %s", __FUNCTION__, objname);
+ dbg("%s: Device wake notify on %s\n", __FUNCTION__, objname);
break;
case ACPI_NOTIFY_EJECT_REQUEST:
/* request device eject */
- dbg("%s: Device eject notify on %s", __FUNCTION__, objname);
+ dbg("%s: Device eject notify on %s\n", __FUNCTION__, objname);
acpiphp_disable_slot(func->slot);
break;
default:
- warn("notify_handler: unknown event type 0x%x for %s", type, objname);
+ warn("notify_handler: unknown event type 0x%x for %s\n", type, objname);
break;
}
}
@@ -1225,7 +1216,7 @@
NULL, NULL);
if (ACPI_FAILURE(status)) {
- err("%s: acpi_walk_namespace() failed", __FUNCTION__);
+ err("%s: acpi_walk_namespace() failed\n", __FUNCTION__);
return -1;
}
@@ -1240,19 +1231,19 @@
*/
void acpiphp_glue_exit (void)
{
- struct list_head *node, *shead, *l, *n;
+ struct list_head *l1, *l2, *n1, *n2;
struct acpiphp_bridge *bridge;
struct acpiphp_slot *slot, *next;
struct acpiphp_func *func;
acpi_status status;
- list_for_each(node, &bridge_list) {
- bridge = (struct acpiphp_bridge *)node;
+ list_for_each_safe (l1, n1, &bridge_list) {
+ bridge = (struct acpiphp_bridge *)l1;
slot = bridge->slots;
while (slot) {
next = slot->next;
- list_for_each_safe(l, n, &slot->funcs) {
- func = list_entry(l, struct acpiphp_func, sibling);
+ list_for_each_safe (l2, n2, &slot->funcs) {
+ func = list_entry(l2, struct acpiphp_func, sibling);
acpiphp_free_resource(&func->io_head);
acpiphp_free_resource(&func->mem_head);
acpiphp_free_resource(&func->p_mem_head);
@@ -1261,7 +1252,7 @@
ACPI_SYSTEM_NOTIFY,
handle_hotplug_event_func);
if (ACPI_FAILURE(status))
- err("failed to remove notify handler");
+ err("failed to remove notify handler\n");
kfree(func);
}
kfree(slot);
@@ -1270,7 +1261,7 @@
status = acpi_remove_notify_handler(bridge->handle, ACPI_SYSTEM_NOTIFY,
handle_hotplug_event_bridge);
if (ACPI_FAILURE(status))
- err("failed to remove notify handler");
+ err("failed to remove notify handler\n");
acpiphp_free_resource(&bridge->io_head);
acpiphp_free_resource(&bridge->mem_head);
@@ -1293,13 +1284,13 @@
num_slots = 0;
- list_for_each(node, &bridge_list) {
+ list_for_each (node, &bridge_list) {
bridge = (struct acpiphp_bridge *)node;
- dbg("Bus%d %dslot(s)", bridge->bus, bridge->nr_slots);
+ dbg("Bus%d %dslot(s)\n", bridge->bus, bridge->nr_slots);
num_slots += bridge->nr_slots;
}
- dbg("Total %dslots", num_slots);
+ dbg("Total %dslots\n", num_slots);
return num_slots;
}
@@ -1317,7 +1308,7 @@
struct acpiphp_slot *slot;
int retval = 0;
- list_for_each(node, &bridge_list) {
+ list_for_each (node, &bridge_list) {
bridge = (struct acpiphp_bridge *)node;
for (slot = bridge->slots; slot; slot = slot->next) {
retval = fn(slot, data);
@@ -1338,7 +1329,7 @@
struct acpiphp_bridge *bridge;
struct acpiphp_slot *slot;
- list_for_each(node, &bridge_list) {
+ list_for_each (node, &bridge_list) {
bridge = (struct acpiphp_bridge *)node;
for (slot = bridge->slots; slot; slot = slot->next)
if (slot->id == id)
@@ -1346,7 +1337,7 @@
}
/* should never happen! */
- err("%s: no object for id %d",__FUNCTION__, id);
+ err("%s: no object for id %d\n",__FUNCTION__, id);
return 0;
}
@@ -1357,7 +1348,6 @@
int acpiphp_enable_slot (struct acpiphp_slot *slot)
{
int retval;
- int online = 0;
down(&slot->crit_sect);
@@ -1381,8 +1371,6 @@
*/
int acpiphp_disable_slot (struct acpiphp_slot *slot)
{
- struct list_head *l;
- struct acpiphp_func *func;
int retval = 0;
down(&slot->crit_sect);
@@ -1397,14 +1385,12 @@
if (retval)
goto err_exit;
-#if 1
acpiphp_resource_sort_and_combine(&slot->bridge->io_head);
acpiphp_resource_sort_and_combine(&slot->bridge->mem_head);
acpiphp_resource_sort_and_combine(&slot->bridge->p_mem_head);
acpiphp_resource_sort_and_combine(&slot->bridge->bus_head);
- dbg("Available resources:");
+ dbg("Available resources:\n");
acpiphp_dump_resource(slot->bridge);
-#endif
err_exit:
up(&slot->crit_sect);
@@ -1431,7 +1417,7 @@
if (sta != ACPI_STA_ALL) {
retval = acpiphp_disable_slot(slot);
if (retval) {
- err("Error occured in enabling");
+ err("Error occured in enabling\n");
up(&slot->crit_sect);
goto err_exit;
}
@@ -1442,7 +1428,7 @@
if (sta == ACPI_STA_ALL) {
retval = acpiphp_enable_slot(slot);
if (retval) {
- err("Error occured in enabling");
+ err("Error occured in enabling\n");
up(&slot->crit_sect);
goto err_exit;
}
@@ -1451,7 +1437,7 @@
}
}
- dbg("%s: %d enabled, %d disabled", __FUNCTION__, enabled, disabled);
+ dbg("%s: %d enabled, %d disabled\n", __FUNCTION__, enabled, disabled);
err_exit:
return retval;
diff -Nru a/drivers/hotplug/acpiphp_pci.c b/drivers/hotplug/acpiphp_pci.c
--- a/drivers/hotplug/acpiphp_pci.c Fri Dec 6 09:51:04 2002
+++ b/drivers/hotplug/acpiphp_pci.c Fri Dec 6 09:51:04 2002
@@ -37,16 +37,14 @@
#include "pci_hotplug.h"
#include "acpiphp.h"
-static int debug = 1; /* XXX set 0 after debug */
#define MY_NAME "acpiphp_pci"
static void acpiphp_configure_irq (struct pci_dev *dev);
/* allocate mem/pmem/io resource to a new function */
-static int alloc_resource (struct acpiphp_func *func)
+static int init_config_space (struct acpiphp_func *func)
{
- u64 base;
u32 bar, len;
u32 address[] = {
PCI_BASE_ADDRESS_0,
@@ -70,13 +68,13 @@
ops = bridge->pci_ops;
for (count = 0; address[count]; count++) { /* for 6 BARs */
- pci_write_config_dword_nodev (ops, bus, device, function, address[count], 0xFFFFFFFF);
+ pci_write_config_dword_nodev(ops, bus, device, function, address[count], 0xFFFFFFFF);
pci_read_config_dword_nodev(ops, bus, device, function, address[count], &bar);
if (!bar) /* This BAR is not implemented */
continue;
- dbg("Device %02x.%02x BAR %d wants %x", device, function, count, bar);
+ dbg("Device %02x.%02x BAR %d wants %x\n", device, function, count, bar);
if (bar & PCI_BASE_ADDRESS_SPACE_IO) {
/* This is IO */
@@ -84,7 +82,7 @@
len = bar & 0xFFFFFFFC;
len = ~len + 1;
- dbg ("len in IO %x, BAR %d", len, count);
+ dbg("len in IO %x, BAR %d\n", len, count);
spin_lock(&bridge->res_lock);
res = acpiphp_get_io_resource(&bridge->io_head, len);
@@ -107,7 +105,7 @@
len = bar & 0xFFFFFFF0;
len = ~len + 1;
- dbg("len in PFMEM %x, BAR %d", len, count);
+ dbg("len in PFMEM %x, BAR %d\n", len, count);
spin_lock(&bridge->res_lock);
res = acpiphp_get_resource(&bridge->p_mem_head, len);
@@ -122,7 +120,7 @@
pci_write_config_dword_nodev(ops, bus, device, function, address[count], (u32)res->base);
if (bar & PCI_BASE_ADDRESS_MEM_TYPE_64) { /* takes up another dword */
- dbg ("inside the pfmem 64 case, count %d", count);
+ dbg("inside the pfmem 64 case, count %d\n", count);
count += 1;
pci_write_config_dword_nodev(ops, bus, device, function, address[count], (u32)(res->base >> 32));
}
@@ -136,7 +134,7 @@
len = bar & 0xFFFFFFF0;
len = ~len + 1;
- dbg("len in MEM %x, BAR %d", len, count);
+ dbg("len in MEM %x, BAR %d\n", len, count);
spin_lock(&bridge->res_lock);
res = acpiphp_get_resource(&bridge->mem_head, len);
@@ -152,7 +150,7 @@
if (bar & PCI_BASE_ADDRESS_MEM_TYPE_64) {
/* takes up another dword */
- dbg ("inside mem 64 case, reg. mem, count %d", count);
+ dbg("inside mem 64 case, reg. mem, count %d\n", count);
count += 1;
pci_write_config_dword_nodev(ops, bus, device, function, address[count], (u32)(res->base >> 32));
}
@@ -203,15 +201,16 @@
pci_proc_attach_device(dev);
#endif
pci_announce_device_to_drivers(dev);
+ info("Device %s configured\n", dev->slot_name);
return 0;
}
-static int is_pci_dev_in_use (struct pci_dev* dev)
+static int is_pci_dev_in_use (struct pci_dev* dev)
{
- /*
- * dev->driver will be set if the device is in use by a new-style
+ /*
+ * dev->driver will be set if the device is in use by a new-style
* driver -- otherwise, check the device's regions to see if any
* driver has claimed them
*/
@@ -253,13 +252,13 @@
{
struct pci_dev *dev = wrapped_dev->dev;
- dbg("attempting removal of driver for device %s", dev->slot_name);
+ dbg("attempting removal of driver for device %s\n", dev->slot_name);
/* Now, remove the Linux Driver Representation */
if (dev->driver) {
if (dev->driver->remove) {
dev->driver->remove(dev);
- dbg("driver was properly removed");
+ dbg("driver was properly removed\n");
}
dev->driver = NULL;
}
@@ -276,6 +275,7 @@
/* Now, remove the Linux Representation */
if (dev) {
if (pci_hp_remove_device(dev) == 0) {
+ info("Device %s removed\n", dev->slot_name);
kfree(dev); /* Now, remove */
} else {
return -1; /* problems while freeing, abort visitation */
@@ -313,7 +313,7 @@
/* detect_used_resource - subtract resource under dev from bridge */
static int detect_used_resource (struct acpiphp_bridge *bridge, struct pci_dev *dev)
{
- u32 bar, len, pin;
+ u32 bar, len;
u64 base;
u32 address[] = {
PCI_BASE_ADDRESS_0,
@@ -327,7 +327,7 @@
int count;
struct pci_resource *res;
- dbg("Device %s", dev->slot_name);
+ dbg("Device %s\n", dev->slot_name);
for (count = 0; address[count]; count++) { /* for 6 BARs */
pci_read_config_dword(dev, address[count], &bar);
@@ -344,7 +344,7 @@
len &= 0xFFFFFFFC;
len = ~len + 1;
- dbg("BAR[%d] %08x - %08x (IO)", count, (u32)base, (u32)base + len - 1);
+ dbg("BAR[%d] %08x - %08x (IO)\n", count, (u32)base, (u32)base + len - 1);
spin_lock(&bridge->res_lock);
res = acpiphp_get_resource_with_base(&bridge->io_head, base, len);
@@ -361,10 +361,10 @@
len = ~len + 1;
if (len & PCI_BASE_ADDRESS_MEM_TYPE_64) { /* takes up another dword */
- dbg ("prefetch mem 64");
+ dbg("prefetch mem 64\n");
count += 1;
}
- dbg("BAR[%d] %08x - %08x (PMEM)", count, (u32)base, (u32)base + len - 1);
+ dbg("BAR[%d] %08x - %08x (PMEM)\n", count, (u32)base, (u32)base + len - 1);
spin_lock(&bridge->res_lock);
res = acpiphp_get_resource_with_base(&bridge->p_mem_head, base, len);
spin_unlock(&bridge->res_lock);
@@ -378,10 +378,10 @@
if (len & PCI_BASE_ADDRESS_MEM_TYPE_64) {
/* takes up another dword */
- dbg ("mem 64");
+ dbg("mem 64\n");
count += 1;
}
- dbg("BAR[%d] %08x - %08x (MEM)", count, (u32)base, (u32)base + len - 1);
+ dbg("BAR[%d] %08x - %08x (MEM)\n", count, (u32)base, (u32)base + len - 1);
spin_lock(&bridge->res_lock);
res = acpiphp_get_resource_with_base(&bridge->mem_head, base, len);
spin_unlock(&bridge->res_lock);
@@ -403,7 +403,7 @@
struct list_head *l;
struct pci_dev *dev;
- list_for_each(l, &bus->devices) {
+ list_for_each (l, &bus->devices) {
dev = pci_dev_b(l);
detect_used_resource(bridge, dev);
/* XXX recursive call */
@@ -421,9 +421,6 @@
*/
int acpiphp_detect_pci_resource (struct acpiphp_bridge *bridge)
{
- struct list_head *l;
- struct pci_dev *dev;
-
detect_used_resource_bus(bridge, bridge->pci_bus);
return 0;
@@ -452,20 +449,19 @@
};
int count;
struct pci_resource *res;
- struct pci_ops *ops;
struct pci_dev *dev;
dev = func->pci_dev;
- dbg("Hot-pluggable device %s", dev->slot_name);
+ dbg("Hot-pluggable device %s\n", dev->slot_name);
for (count = 0; address[count]; count++) { /* for 6 BARs */
- pci_read_config_dword (dev, address[count], &bar);
+ pci_read_config_dword(dev, address[count], &bar);
if (!bar) /* This BAR is not implemented */
continue;
- pci_write_config_dword (dev, address[count], 0xFFFFFFFF);
- pci_read_config_dword (dev, address[count], &len);
+ pci_write_config_dword(dev, address[count], 0xFFFFFFFF);
+ pci_read_config_dword(dev, address[count], &len);
if (len & PCI_BASE_ADDRESS_SPACE_IO) {
/* This is IO */
@@ -473,7 +469,7 @@
len &= 0xFFFFFFFC;
len = ~len + 1;
- dbg("BAR[%d] %08x - %08x (IO)", count, (u32)base, (u32)base + len - 1);
+ dbg("BAR[%d] %08x - %08x (IO)\n", count, (u32)base, (u32)base + len - 1);
res = acpiphp_make_resource(base, len);
if (!res)
@@ -492,10 +488,10 @@
len = ~len + 1;
if (len & PCI_BASE_ADDRESS_MEM_TYPE_64) { /* takes up another dword */
- dbg ("prefetch mem 64");
+ dbg("prefetch mem 64\n");
count += 1;
}
- dbg("BAR[%d] %08x - %08x (PMEM)", count, (u32)base, (u32)base + len - 1);
+ dbg("BAR[%d] %08x - %08x (PMEM)\n", count, (u32)base, (u32)base + len - 1);
res = acpiphp_make_resource(base, len);
if (!res)
goto no_memory;
@@ -511,10 +507,10 @@
if (len & PCI_BASE_ADDRESS_MEM_TYPE_64) {
/* takes up another dword */
- dbg ("mem 64");
+ dbg("mem 64\n");
count += 1;
}
- dbg("BAR[%d] %08x - %08x (MEM)", count, (u32)base, (u32)base + len - 1);
+ dbg("BAR[%d] %08x - %08x (MEM)\n", count, (u32)base, (u32)base + len - 1);
res = acpiphp_make_resource(base, len);
if (!res)
goto no_memory;
@@ -525,7 +521,7 @@
}
}
- pci_write_config_dword (dev, address[count], bar);
+ pci_write_config_dword(dev, address[count], bar);
}
#if 1
acpiphp_dump_func_resource(func);
@@ -534,7 +530,7 @@
return 0;
no_memory:
- err("out of memory");
+ err("out of memory\n");
acpiphp_free_resource(&func->io_head);
acpiphp_free_resource(&func->mem_head);
acpiphp_free_resource(&func->p_mem_head);
@@ -567,7 +563,7 @@
if (hdr & 0x80)
is_multi = 1;
- list_for_each(l, &slot->funcs) {
+ list_for_each (l, &slot->funcs) {
func = list_entry(l, struct acpiphp_func, sibling);
if (is_multi || func->function == 0) {
pci_read_config_dword_nodev(slot->bridge->pci_ops,
@@ -576,7 +572,7 @@
func->function,
PCI_VENDOR_ID, &dvid);
if (dvid != 0xffffffff) {
- retval = alloc_resource(func);
+ retval = init_config_space(func);
if (retval)
break;
}
@@ -589,16 +585,16 @@
/* for pci_visit_dev() */
static struct pci_visit configure_functions = {
- post_visit_pci_dev: configure_pci_dev
+ .post_visit_pci_dev = configure_pci_dev
};
static struct pci_visit unconfigure_functions_phase1 = {
- post_visit_pci_dev: unconfigure_pci_dev_driver
+ .post_visit_pci_dev = unconfigure_pci_dev_driver
};
static struct pci_visit unconfigure_functions_phase2 = {
- post_visit_pci_bus: unconfigure_pci_bus,
- post_visit_pci_dev: unconfigure_pci_dev
+ .post_visit_pci_bus = unconfigure_pci_bus,
+ .post_visit_pci_dev = unconfigure_pci_dev
};
@@ -647,7 +643,6 @@
int acpiphp_unconfigure_function (struct acpiphp_func *func)
{
struct acpiphp_bridge *bridge;
- struct pci_resource *tmp;
struct pci_dev_wrapped wrapped_dev;
struct pci_bus_wrapped wrapped_bus;
int retval = 0;
@@ -686,45 +681,6 @@
}
-/* XXX IA64 specific */
-#ifdef CONFIG_IA64
-static int ia64_get_irq(struct pci_dev *dev, int pin)
-{
- extern int pci_pin_to_vector(int bus, int slot, int pci_pin);
- int irq;
-
- irq = pci_pin_to_vector(dev->bus->number, PCI_SLOT(dev->devfn), pin);
-
- if (irq < 0 && dev->bus->parent) {
- /* go back to the bridge */
- struct pci_dev *bridge = dev->bus->self;
-
- if (bridge) {
- /* allow for multiple bridges on an adapter */
- do {
- /* do the bridge swizzle... */
- pin = (pin + PCI_SLOT(dev->devfn)) % 4;
- irq = pci_pin_to_vector(bridge->bus->number,
- PCI_SLOT(bridge->devfn),
- pin);
- } while (irq < 0 && (bridge = bridge->bus->self));
- }
- if (irq >= 0)
- printk(KERN_WARNING
- "PCI: using PPB(B%d,I%d,P%d) to get vector %02x\n",
- dev->bus->number, PCI_SLOT(dev->devfn),
- pin, irq);
- else
- printk(KERN_WARNING
- "PCI: Couldn't map irq for (B%d,I%d,P%d)\n",
- dev->bus->number, PCI_SLOT(dev->devfn), pin);
- }
-
- return irq;
-}
-#endif
-
-
/*
* acpiphp_configure_irq - configure PCI_INTERRUPT_PIN
*
@@ -740,24 +696,10 @@
*/
static void acpiphp_configure_irq (struct pci_dev *dev)
{
-#if CONFIG_IA64 /* XXX IA64 specific, need i386 version */
- int bus, device, function, irq;
- u8 tmp;
-
- bus = dev->bus->number;
- device = PCI_SLOT(dev->devfn);
- function = PCI_FUNC(dev->devfn);
-
- pci_read_config_byte (dev, PCI_INTERRUPT_PIN, &tmp);
-
- if ((tmp > 0x00) && (tmp < 0x05)) {
- irq = ia64_get_irq(dev, tmp - 1);
- if (irq > 0) {
- dev->irq = irq;
- pci_write_config_byte (dev, PCI_INTERRUPT_LINE, irq);
- } else {
- err("Couldn't get IRQ for INT%c", 'A' + tmp - 1);
- }
- }
+#if CONFIG_IA64 /* XXX IA64 specific */
+ extern void iosapic_fixup_pci_interrupt (struct pci_dev *dev);
+
+ iosapic_fixup_pci_interrupt(dev);
+ pci_write_config_byte(dev, PCI_INTERRUPT_LINE, dev->irq);
#endif
}
diff -Nru a/drivers/hotplug/acpiphp_res.c b/drivers/hotplug/acpiphp_res.c
--- a/drivers/hotplug/acpiphp_res.c Fri Dec 6 09:51:04 2002
+++ b/drivers/hotplug/acpiphp_res.c Fri Dec 6 09:51:04 2002
@@ -59,8 +59,6 @@
#define MY_NAME "acpiphp_res"
-/* local variables */
-static int debug = 0;
/*
* sort_by_size - sort nodes by their length, smallest first
@@ -275,7 +273,7 @@
for (max = *head;max; max = max->next) {
- /* If not big enough we could probably just bail,
+ /* If not big enough we could probably just bail,
instead we'll continue to the next. */
if (max->length < size)
continue;
@@ -372,13 +370,13 @@
return NULL;
for (node = *head; node; node = node->next) {
- dbg("%s: req_size =%x node=%p, base=%x, length=%x",
+ dbg("%s: req_size =%x node=%p, base=%x, length=%x\n",
__FUNCTION__, size, node, (u32)node->base, node->length);
if (node->length < size)
continue;
if (node->base & (size - 1)) {
- dbg("%s: not aligned", __FUNCTION__);
+ dbg("%s: not aligned\n", __FUNCTION__);
/* this one isn't base aligned properly
so we'll make a new entry and split it up */
temp_qword = (node->base | (size-1)) + 1;
@@ -402,7 +400,7 @@
/* Don't need to check if too small since we already did */
if (node->length > size) {
- dbg("%s: too big", __FUNCTION__);
+ dbg("%s: too big\n", __FUNCTION__);
/* this one is longer than we need
so we'll make a new entry and split it up */
split_node = acpiphp_make_resource(node->base + size, node->length - size);
@@ -417,7 +415,7 @@
node->next = split_node;
} /* End of too big on top end */
- dbg("%s: got one!!!", __FUNCTION__);
+ dbg("%s: got one!!!\n", __FUNCTION__);
/* If we got here, then it is the right size
Now take it out of the list */
if (*head == node) {
@@ -439,7 +437,7 @@
/**
* get_resource_with_base - get resource with specific base address
*
- * this function
+ * this function
* returns the first node of "size" length located at specified base address.
* If it finds a node larger than "size" it will split it up.
*
@@ -460,7 +458,7 @@
return NULL;
for (node = *head; node; node = node->next) {
- dbg(": 1st req_base=%x req_size =%x node=%p, base=%x, length=%x",
+ dbg(": 1st req_base=%x req_size =%x node=%p, base=%x, length=%x\n",
(u32)base, size, node, (u32)node->base, node->length);
if (node->base > base)
continue;
@@ -469,7 +467,7 @@
continue;
if (node->base < base) {
- dbg(": split 1");
+ dbg(": split 1\n");
/* this one isn't base aligned properly
so we'll make a new entry and split it up */
temp_qword = base;
@@ -491,12 +489,12 @@
node->next = split_node;
}
- dbg(": 2nd req_base=%x req_size =%x node=%p, base=%x, length=%x",
+ dbg(": 2nd req_base=%x req_size =%x node=%p, base=%x, length=%x\n",
(u32)base, size, node, (u32)node->base, node->length);
/* Don't need to check if too small since we already did */
if (node->length > size) {
- dbg(": split 2");
+ dbg(": split 2\n");
/* this one is longer than we need
so we'll make a new entry and split it up */
split_node = acpiphp_make_resource(node->base + size, node->length - size);
@@ -511,7 +509,7 @@
node->next = split_node;
} /* End of too big on top end */
- dbg(": got one!!!");
+ dbg(": got one!!!\n");
/* If we got here, then it is the right size
Now take it out of the list */
if (*head == node) {
@@ -549,13 +547,13 @@
if (!(*head))
return 1;
- dbg("*head->next = %p",(*head)->next);
+ dbg("*head->next = %p\n",(*head)->next);
if (!(*head)->next)
return 0; /* only one item on the list, already sorted! */
- dbg("*head->base = 0x%x",(u32)(*head)->base);
- dbg("*head->next->base = 0x%x", (u32)(*head)->next->base);
+ dbg("*head->base = 0x%x\n",(u32)(*head)->base);
+ dbg("*head->next->base = 0x%x\n", (u32)(*head)->next->base);
while (out_of_order) {
out_of_order = 0;
@@ -589,7 +587,7 @@
while (node1 && node1->next) {
if ((node1->base + node1->length) == node1->next->base) {
/* Combine */
- dbg("8..");
+ dbg("8..\n");
node1->length += node1->next->length;
node2 = node1->next;
node1->next = node1->next->next;
@@ -670,39 +668,32 @@
cnt = 0;
while (p) {
- info("[%02d] %08x - %08x",
- cnt++, (u32)p->base, (u32)p->base + p->length - 1);
+ dbg("[%02d] %08x - %08x\n",
+ cnt++, (u32)p->base, (u32)p->base + p->length - 1);
p = p->next;
}
}
void acpiphp_dump_resource(struct acpiphp_bridge *bridge)
{
- info("I/O resource:");
+ dbg("I/O resource:\n");
dump_resource(bridge->io_head);
- info("MEM resource:");
+ dbg("MEM resource:\n");
dump_resource(bridge->mem_head);
- info("PMEM resource:");
+ dbg("PMEM resource:\n");
dump_resource(bridge->p_mem_head);
- info("BUS resource:");
+ dbg("BUS resource:\n");
dump_resource(bridge->bus_head);
}
void acpiphp_dump_func_resource(struct acpiphp_func *func)
{
- info("I/O resource:");
+ dbg("I/O resource:\n");
dump_resource(func->io_head);
- info("MEM resource:");
+ dbg("MEM resource:\n");
dump_resource(func->mem_head);
- info("PMEM resource:");
+ dbg("PMEM resource:\n");
dump_resource(func->p_mem_head);
- info("BUS resource:");
+ dbg("BUS resource:\n");
dump_resource(func->bus_head);
}
-
-/*
-EXPORT_SYMBOL(acpiphp_get_io_resource);
-EXPORT_SYMBOL(acpiphp_get_max_resource);
-EXPORT_SYMBOL(acpiphp_get_resource);
-EXPORT_SYMBOL(acpiphp_resource_sort_and_combine);
-*/
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
This archive was generated by hypermail 2b29 : Sat Dec 07 2002 - 22:00:27 EST