public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [patch 00/54] PNP cleanup, v4
@ 2008-04-25 18:38 Bjorn Helgaas
  2008-04-25 18:38 ` [patch 01/54] PNP: turn on -DDEBUG when CONFIG_PNP_DEBUG is set Bjorn Helgaas
                   ` (54 more replies)
  0 siblings, 55 replies; 80+ messages in thread
From: Bjorn Helgaas @ 2008-04-25 18:38 UTC (permalink / raw)
  To: Len Brown
  Cc: linux-acpi, linux-kernel, Adam Belay, Adam M Belay, Li Shaohua,
	Matthieu Castet, Thomas Renninger, Rene Herman, Jaroslav Kysela,
	Andrew Morton

I'm still working through some issues with removing the
fixed pnp_resource_table.  But I'd like to get some of
the earlier patches off my plate, so here they are.  These
should be relatively safe because they don't really change
any fundamental behavior.  I'd like to get them in -mm
for some test time.

I'll start a new series for converting from a table to
a list.

I added some debug code for resource handling, so if you test
this and see problems, it would help me investigate them if you
collect the dmesg log with CONFIG_PNP_DEBUG turned on.

Changes between v3 and v4:

  - changed pnp_check_port(), etc., to take resource instead of index
  - added some decoder/encoder/assign debug output (under CONFIG_PNP_DEBUG)
  - fixed some ISAPNP register index bisectability problems
  - removed the list-based resource management (will work on that separately)

Changes between v2 and v3:

  - several updates from Rene Herman's review:
	- tweak EISA ID conversion and keep high-order bit for ISAPNP
	- fix pnp_add_card_id() so bisection works better
	- fix some "x <= 0" tests when x is unsigned
	- make resource accessors inlines, not #defines
	- fix pnp_{port,mem,irq,dma}_valid() return int, not resource_size_t
	- fold isapnp_read_resources() back into isapnp_get_resources()
  - factored out pnp_init_resource() from pnp_{init,clean}_resource_table()
  - initialize generic pnp_dev fields earlier, to help dev_printk
  - add pnp_resource to hold ISAPNP register index
  - convert to resource management from table to list (finally)
  - remove pnp_dev->regs (only set by ISAPNP, never used)
  - in /sys/.../resources, don't sort resources by type

Changes between first post and v2:

  - export pnp_get_resource()
  - fix EISA ID conversion and make a common function for ISAPNP/PNPBIOS
  - fix typos in pnp_check_{port,mem,etc} that made resource assign fail

  - the following fixes should precede this series (they're in -mm already):
	- parport_pc: wrap PNP probe code in CONFIG_PNP
	- radio-cadet: wrap PNP probe code in CONFIG_PNP
	- smsc-ircc2: wrap PNP probe code in CONFIG_PNP
	- nsc-ircc: wrap PNP probe code in CONFIG_PNP

Bjorn

-- 

^ permalink raw reply	[flat|nested] 80+ messages in thread

* [patch 01/54] PNP: turn on -DDEBUG when CONFIG_PNP_DEBUG is set
  2008-04-25 18:38 [patch 00/54] PNP cleanup, v4 Bjorn Helgaas
@ 2008-04-25 18:38 ` Bjorn Helgaas
  2008-04-25 18:38 ` [patch 02/54] ISAPNP: move config register addresses out of isapnp.h Bjorn Helgaas
                   ` (53 subsequent siblings)
  54 siblings, 0 replies; 80+ messages in thread
From: Bjorn Helgaas @ 2008-04-25 18:38 UTC (permalink / raw)
  To: Len Brown
  Cc: linux-acpi, linux-kernel, Adam Belay, Adam M Belay, Li Shaohua,
	Matthieu Castet, Thomas Renninger, Rene Herman, Jaroslav Kysela,
	Andrew Morton

[-- Attachment #1: pnp-turn-on-debug-in-makefiles --]
[-- Type: text/plain, Size: 1420 bytes --]

Turn on -DDEBUG in CFLAGS when CONFIG_PNP_DEBUG=y.  This makes
dev_dbg() do what you expect.

Signed-off-by: Bjorn Helgaas <bjorn.helgaas@hp.com>

Index: work10/drivers/pnp/isapnp/Makefile
===================================================================
--- work10.orig/drivers/pnp/isapnp/Makefile	2008-04-25 11:12:17.000000000 -0600
+++ work10/drivers/pnp/isapnp/Makefile	2008-04-25 11:14:41.000000000 -0600
@@ -5,3 +5,7 @@
 isapnp-proc-$(CONFIG_PROC_FS) = proc.o
 
 obj-y := core.o compat.o $(isapnp-proc-y)
+
+ifeq ($(CONFIG_PNP_DEBUG),y)
+EXTRA_CFLAGS += -DDEBUG
+endif
Index: work10/drivers/pnp/pnpacpi/Makefile
===================================================================
--- work10.orig/drivers/pnp/pnpacpi/Makefile	2008-04-25 11:12:17.000000000 -0600
+++ work10/drivers/pnp/pnpacpi/Makefile	2008-04-25 11:14:41.000000000 -0600
@@ -3,3 +3,7 @@
 #
 
 obj-y := core.o rsparser.o
+
+ifeq ($(CONFIG_PNP_DEBUG),y)
+EXTRA_CFLAGS += -DDEBUG
+endif
Index: work10/drivers/pnp/pnpbios/Makefile
===================================================================
--- work10.orig/drivers/pnp/pnpbios/Makefile	2008-04-25 11:12:17.000000000 -0600
+++ work10/drivers/pnp/pnpbios/Makefile	2008-04-25 11:14:41.000000000 -0600
@@ -5,3 +5,7 @@
 pnpbios-proc-$(CONFIG_PNPBIOS_PROC_FS) = proc.o
 
 obj-y := core.o bioscalls.o rsparser.o $(pnpbios-proc-y)
+
+ifeq ($(CONFIG_PNP_DEBUG),y)
+EXTRA_CFLAGS += -DDEBUG
+endif

-- 

^ permalink raw reply	[flat|nested] 80+ messages in thread

* [patch 02/54] ISAPNP: move config register addresses out of isapnp.h
  2008-04-25 18:38 [patch 00/54] PNP cleanup, v4 Bjorn Helgaas
  2008-04-25 18:38 ` [patch 01/54] PNP: turn on -DDEBUG when CONFIG_PNP_DEBUG is set Bjorn Helgaas
@ 2008-04-25 18:38 ` Bjorn Helgaas
  2008-04-25 18:38 ` [patch 03/54] PNPACPI: continue after _CRS and _PRS errors Bjorn Helgaas
                   ` (52 subsequent siblings)
  54 siblings, 0 replies; 80+ messages in thread
From: Bjorn Helgaas @ 2008-04-25 18:38 UTC (permalink / raw)
  To: Len Brown
  Cc: linux-acpi, Rene Herman, linux-kernel, Adam Belay, Adam M Belay,
	Li Shaohua, Matthieu Castet, Thomas Renninger, Rene Herman,
	Jaroslav Kysela, Andrew Morton

[-- Attachment #1: isapnp-remove-register-addrs-from-header --]
[-- Type: text/plain, Size: 1555 bytes --]

These are used only in drivers/pnp/isapnp/core.c, so no need to
expose them to the world.

Signed-off-by: Bjorn Helgaas <bjorn.helgaas@hp.com>
Acked-By: Rene Herman <rene.herman@gmail.com>

Index: work10/drivers/pnp/isapnp/core.c
===================================================================
--- work10.orig/drivers/pnp/isapnp/core.c	2008-04-25 11:12:17.000000000 -0600
+++ work10/drivers/pnp/isapnp/core.c	2008-04-25 11:14:44.000000000 -0600
@@ -88,6 +88,14 @@
 #define _LTAG_MEM32RANGE	0x85
 #define _LTAG_FIXEDMEM32RANGE	0x86
 
+/* Logical device control and configuration registers */
+
+#define ISAPNP_CFG_ACTIVATE	0x30	/* byte */
+#define ISAPNP_CFG_MEM		0x40	/* 4 * dword */
+#define ISAPNP_CFG_PORT		0x60	/* 8 * word */
+#define ISAPNP_CFG_IRQ		0x70	/* 2 * word */
+#define ISAPNP_CFG_DMA		0x74	/* 2 * byte */
+
 /*
  * Sizes of ISAPNP logical device configuration register sets.
  * See PNP-ISA-v1.0a.pdf, Appendix A.
Index: work10/include/linux/isapnp.h
===================================================================
--- work10.orig/include/linux/isapnp.h	2008-04-25 11:12:17.000000000 -0600
+++ work10/include/linux/isapnp.h	2008-04-25 11:14:44.000000000 -0600
@@ -26,16 +26,6 @@
 #include <linux/pnp.h>
 
 /*
- *  Configuration registers (TODO: change by specification)
- */ 
-
-#define ISAPNP_CFG_ACTIVATE		0x30	/* byte */
-#define ISAPNP_CFG_MEM			0x40	/* 4 * dword */
-#define ISAPNP_CFG_PORT			0x60	/* 8 * word */
-#define ISAPNP_CFG_IRQ			0x70	/* 2 * word */
-#define ISAPNP_CFG_DMA			0x74	/* 2 * byte */
-
-/*
  *
  */
 

-- 

^ permalink raw reply	[flat|nested] 80+ messages in thread

* [patch 03/54] PNPACPI: continue after _CRS and _PRS errors
  2008-04-25 18:38 [patch 00/54] PNP cleanup, v4 Bjorn Helgaas
  2008-04-25 18:38 ` [patch 01/54] PNP: turn on -DDEBUG when CONFIG_PNP_DEBUG is set Bjorn Helgaas
  2008-04-25 18:38 ` [patch 02/54] ISAPNP: move config register addresses out of isapnp.h Bjorn Helgaas
@ 2008-04-25 18:38 ` Bjorn Helgaas
  2008-04-25 18:38 ` [patch 04/54] PNP: make pnp_add_id() internal to PNP core Bjorn Helgaas
                   ` (51 subsequent siblings)
  54 siblings, 0 replies; 80+ messages in thread
From: Bjorn Helgaas @ 2008-04-25 18:38 UTC (permalink / raw)
  To: Len Brown
  Cc: linux-acpi, linux-kernel, Adam Belay, Adam M Belay, Li Shaohua,
	Matthieu Castet, Thomas Renninger, Rene Herman, Jaroslav Kysela,
	Andrew Morton

[-- Attachment #1: pnpacpi-ignore-errors --]
[-- Type: text/plain, Size: 1233 bytes --]

Keep going and register the device even if we have trouble parsing
_CRS or _PRS.  A parsing problem might mean we ignore some resources
the device is using, or we might not be able to change its resources.
But we should still take note of anything we *could* parse correctly.

Also remove reference to dev_id because I plan to remove it soon.

Signed-off-by: Bjorn Helgaas <bjorn.helgaas@hp.com>

Index: work10/drivers/pnp/pnpacpi/core.c
===================================================================
--- work10.orig/drivers/pnp/pnpacpi/core.c	2008-04-25 11:12:17.000000000 -0600
+++ work10/drivers/pnp/pnpacpi/core.c	2008-04-25 11:14:44.000000000 -0600
@@ -213,8 +213,7 @@
 							  &dev->res);
 		if (ACPI_FAILURE(status) && (status != AE_NOT_FOUND)) {
 			pnp_err("PnPACPI: METHOD_NAME__CRS failure for %s",
-				dev_id->id);
-			goto err1;
+				acpi_device_hid(device));
 		}
 	}
 
@@ -223,8 +222,7 @@
 							    dev);
 		if (ACPI_FAILURE(status) && (status != AE_NOT_FOUND)) {
 			pnp_err("PnPACPI: METHOD_NAME__PRS failure for %s",
-				dev_id->id);
-			goto err1;
+				acpi_device_hid(device));
 		}
 	}
 
@@ -252,8 +250,6 @@
 	num++;
 
 	return AE_OK;
-err1:
-	kfree(dev_id);
 err:
 	kfree(dev);
 	return -EINVAL;

-- 

^ permalink raw reply	[flat|nested] 80+ messages in thread

* [patch 04/54] PNP: make pnp_add_id() internal to PNP core
  2008-04-25 18:38 [patch 00/54] PNP cleanup, v4 Bjorn Helgaas
                   ` (2 preceding siblings ...)
  2008-04-25 18:38 ` [patch 03/54] PNPACPI: continue after _CRS and _PRS errors Bjorn Helgaas
@ 2008-04-25 18:38 ` Bjorn Helgaas
  2008-04-25 18:38 ` [patch 05/54] PNP: change pnp_add_id() to allocate its own pnp_id structures Bjorn Helgaas
                   ` (50 subsequent siblings)
  54 siblings, 0 replies; 80+ messages in thread
From: Bjorn Helgaas @ 2008-04-25 18:38 UTC (permalink / raw)
  To: Len Brown
  Cc: linux-acpi, Rene Herman, linux-kernel, Adam Belay, Adam M Belay,
	Li Shaohua, Matthieu Castet, Thomas Renninger, Rene Herman,
	Jaroslav Kysela, Andrew Morton

[-- Attachment #1: pnp-make-pnp_add_id-internal-to-core --]
[-- Type: text/plain, Size: 2519 bytes --]

pnp_add_id() doesn't need to be exposed outside the PNP core, so
move the declaration to an internal header file.

Signed-off-by: Bjorn Helgaas <bjorn.helgaas@hp.com>
Acked-By: Rene Herman <rene.herman@gmail.com>

Index: work10/include/linux/pnp.h
===================================================================
--- work10.orig/include/linux/pnp.h	2008-04-25 11:12:17.000000000 -0600
+++ work10/include/linux/pnp.h	2008-04-25 11:14:45.000000000 -0600
@@ -403,7 +403,6 @@
 /* protocol helpers */
 int pnp_is_active(struct pnp_dev *dev);
 int compare_pnp_id(struct pnp_id *pos, const char *id);
-int pnp_add_id(struct pnp_id *id, struct pnp_dev *dev);
 int pnp_register_driver(struct pnp_driver *drv);
 void pnp_unregister_driver(struct pnp_driver *drv);
 
@@ -450,7 +449,6 @@
 /* protocol helpers */
 static inline int pnp_is_active(struct pnp_dev *dev) { return 0; }
 static inline int compare_pnp_id(struct pnp_id *pos, const char *id) { return -ENODEV; }
-static inline int pnp_add_id(struct pnp_id *id, struct pnp_dev *dev) { return -ENODEV; }
 static inline int pnp_register_driver(struct pnp_driver *drv) { return -ENODEV; }
 static inline void pnp_unregister_driver(struct pnp_driver *drv) { }
 
Index: work10/drivers/pnp/base.h
===================================================================
--- work10.orig/drivers/pnp/base.h	2008-04-25 11:12:17.000000000 -0600
+++ work10/drivers/pnp/base.h	2008-04-25 11:14:45.000000000 -0600
@@ -1,5 +1,6 @@
 extern spinlock_t pnp_lock;
 void *pnp_alloc(long size);
+int pnp_add_id(struct pnp_id *id, struct pnp_dev *dev);
 int pnp_interface_attach_device(struct pnp_dev *dev);
 void pnp_fixup_device(struct pnp_dev *dev);
 void pnp_free_option(struct pnp_option *option);
Index: work10/drivers/pnp/pnpacpi/core.c
===================================================================
--- work10.orig/drivers/pnp/pnpacpi/core.c	2008-04-25 11:14:44.000000000 -0600
+++ work10/drivers/pnp/pnpacpi/core.c	2008-04-25 11:14:45.000000000 -0600
@@ -25,6 +25,7 @@
 #include <acpi/acpi_bus.h>
 #include <acpi/actypes.h>
 
+#include "../base.h"
 #include "pnpacpi.h"
 
 static int num = 0;
Index: work10/drivers/pnp/pnpbios/core.c
===================================================================
--- work10.orig/drivers/pnp/pnpbios/core.c	2008-04-25 11:12:17.000000000 -0600
+++ work10/drivers/pnp/pnpbios/core.c	2008-04-25 11:14:45.000000000 -0600
@@ -69,6 +69,7 @@
 #include <asm/system.h>
 #include <asm/byteorder.h>
 
+#include "../base.h"
 #include "pnpbios.h"
 
 /*

-- 

^ permalink raw reply	[flat|nested] 80+ messages in thread

* [patch 05/54] PNP: change pnp_add_id() to allocate its own pnp_id structures
  2008-04-25 18:38 [patch 00/54] PNP cleanup, v4 Bjorn Helgaas
                   ` (3 preceding siblings ...)
  2008-04-25 18:38 ` [patch 04/54] PNP: make pnp_add_id() internal to PNP core Bjorn Helgaas
@ 2008-04-25 18:38 ` Bjorn Helgaas
  2008-04-25 18:38 ` [patch 06/54] PNP: add pnp_eisa_id_to_string() Bjorn Helgaas
                   ` (49 subsequent siblings)
  54 siblings, 0 replies; 80+ messages in thread
From: Bjorn Helgaas @ 2008-04-25 18:38 UTC (permalink / raw)
  To: Len Brown
  Cc: linux-acpi, Rene Herman, linux-kernel, Adam Belay, Adam M Belay,
	Li Shaohua, Matthieu Castet, Thomas Renninger, Rene Herman,
	Jaroslav Kysela, Andrew Morton

[-- Attachment #1: pnp-move-allocation-into-pnp_add_id --]
[-- Type: text/plain, Size: 6502 bytes --]

This moves some of the pnp_id knowledge out of the backends and into
the PNP core.

Signed-off-by: Bjorn Helgaas <bjorn.helgaas@hp.com>
Acked-By: Rene Herman <rene.herman@gmail.com>

---
 drivers/pnp/base.h             |    2 +-
 drivers/pnp/driver.c           |   28 +++++++++++++++++++++-------
 drivers/pnp/isapnp/core.c      |   24 +++++++++++-------------
 drivers/pnp/pnpacpi/core.c     |   27 +++------------------------
 drivers/pnp/pnpbios/core.c     |   10 +---------
 drivers/pnp/pnpbios/rsparser.c |    7 +------
 6 files changed, 38 insertions(+), 60 deletions(-)

Index: work10/drivers/pnp/base.h
===================================================================
--- work10.orig/drivers/pnp/base.h	2008-04-25 11:14:45.000000000 -0600
+++ work10/drivers/pnp/base.h	2008-04-25 11:14:46.000000000 -0600
@@ -1,6 +1,6 @@
 extern spinlock_t pnp_lock;
 void *pnp_alloc(long size);
-int pnp_add_id(struct pnp_id *id, struct pnp_dev *dev);
+struct pnp_id *pnp_add_id(struct pnp_dev *dev, char *id);
 int pnp_interface_attach_device(struct pnp_dev *dev);
 void pnp_fixup_device(struct pnp_dev *dev);
 void pnp_free_option(struct pnp_option *option);
Index: work10/drivers/pnp/driver.c
===================================================================
--- work10.orig/drivers/pnp/driver.c	2008-04-25 11:12:17.000000000 -0600
+++ work10/drivers/pnp/driver.c	2008-04-25 11:14:46.000000000 -0600
@@ -226,22 +226,36 @@
 
 /**
  * pnp_add_id - adds an EISA id to the specified device
- * @id: pointer to a pnp_id structure
  * @dev: pointer to the desired device
+ * @id: pointer to an EISA id string
  */
-int pnp_add_id(struct pnp_id *id, struct pnp_dev *dev)
+struct pnp_id *pnp_add_id(struct pnp_dev *dev, char *id)
 {
-	struct pnp_id *ptr;
+	struct pnp_id *dev_id, *ptr;
 
-	id->next = NULL;
+	dev_id = kzalloc(sizeof(struct pnp_id), GFP_KERNEL);
+	if (!dev_id)
+		return NULL;
+
+	dev_id->id[0] = id[0];
+	dev_id->id[1] = id[1];
+	dev_id->id[2] = id[2];
+	dev_id->id[3] = tolower(id[3]);
+	dev_id->id[4] = tolower(id[4]);
+	dev_id->id[5] = tolower(id[5]);
+	dev_id->id[6] = tolower(id[6]);
+	dev_id->id[7] = '\0';
+
+	dev_id->next = NULL;
 	ptr = dev->id;
 	while (ptr && ptr->next)
 		ptr = ptr->next;
 	if (ptr)
-		ptr->next = id;
+		ptr->next = dev_id;
 	else
-		dev->id = id;
-	return 0;
+		dev->id = dev_id;
+
+	return dev_id;
 }
 
 EXPORT_SYMBOL(pnp_register_driver);
Index: work10/drivers/pnp/isapnp/core.c
===================================================================
--- work10.orig/drivers/pnp/isapnp/core.c	2008-04-25 11:14:44.000000000 -0600
+++ work10/drivers/pnp/isapnp/core.c	2008-04-25 11:14:46.000000000 -0600
@@ -44,6 +44,8 @@
 #include <linux/mutex.h>
 #include <asm/io.h>
 
+#include "../base.h"
+
 #if 0
 #define ISAPNP_REGION_OK
 #endif
@@ -401,20 +403,16 @@
 static void isapnp_parse_id(struct pnp_dev *dev, unsigned short vendor,
 			    unsigned short device)
 {
-	struct pnp_id *id;
+	char id[8];
 
-	if (!dev)
-		return;
-	id = kzalloc(sizeof(struct pnp_id), GFP_KERNEL);
-	if (!id)
-		return;
-	sprintf(id->id, "%c%c%c%x%x%x%x",
+	sprintf(id, "%c%c%c%x%x%x%x",
 		'A' + ((vendor >> 2) & 0x3f) - 1,
 		'A' + (((vendor & 3) << 3) | ((vendor >> 13) & 7)) - 1,
 		'A' + ((vendor >> 8) & 0x1f) - 1,
 		(device >> 4) & 0x0f,
 		device & 0x0f, (device >> 12) & 0x0f, (device >> 8) & 0x0f);
-	pnp_add_id(id, dev);
+
+	pnp_add_id(dev, id);
 }
 
 /*
Index: work10/drivers/pnp/pnpacpi/core.c
===================================================================
--- work10.orig/drivers/pnp/pnpacpi/core.c	2008-04-25 11:14:45.000000000 -0600
+++ work10/drivers/pnp/pnpacpi/core.c	2008-04-25 11:14:46.000000000 -0600
@@ -73,18 +73,6 @@
 	return 1;
 }
 
-static void __init pnpidacpi_to_pnpid(char *id, char *str)
-{
-	str[0] = id[0];
-	str[1] = id[1];
-	str[2] = id[2];
-	str[3] = tolower(id[3]);
-	str[4] = tolower(id[4]);
-	str[5] = tolower(id[5]);
-	str[6] = tolower(id[6]);
-	str[7] = '\0';
-}
-
 static int pnpacpi_get_resources(struct pnp_dev *dev,
 				 struct pnp_resource_table *res)
 {
@@ -201,12 +189,9 @@
 
 	dev->number = num;
 
-	/* set the initial values for the PnP device */
-	dev_id = kzalloc(sizeof(struct pnp_id), GFP_KERNEL);
+	dev_id = pnp_add_id(dev, acpi_device_hid(device));
 	if (!dev_id)
 		goto err;
-	pnpidacpi_to_pnpid(acpi_device_hid(device), dev_id->id);
-	pnp_add_id(dev_id, dev);
 
 	if (dev->active) {
 		/* parse allocated resource */
@@ -227,7 +212,6 @@
 		}
 	}
 
-	/* parse compatible ids */
 	if (device->flags.compatible_ids) {
 		struct acpi_compatible_id_list *cid_list = device->pnp.cid_list;
 		int i;
@@ -235,12 +219,7 @@
 		for (i = 0; i < cid_list->count; i++) {
 			if (!ispnpidacpi(cid_list->id[i].value))
 				continue;
-			dev_id = kzalloc(sizeof(struct pnp_id), GFP_KERNEL);
-			if (!dev_id)
-				continue;
-
-			pnpidacpi_to_pnpid(cid_list->id[i].value, dev_id->id);
-			pnp_add_id(dev_id, dev);
+			pnp_add_id(dev, cid_list->id[i].value);
 		}
 	}
 
Index: work10/drivers/pnp/pnpbios/core.c
===================================================================
--- work10.orig/drivers/pnp/pnpbios/core.c	2008-04-25 11:14:45.000000000 -0600
+++ work10/drivers/pnp/pnpbios/core.c	2008-04-25 11:14:46.000000000 -0600
@@ -332,16 +332,14 @@
 	if (!dev)
 		return -1;
 
-	dev_id = kzalloc(sizeof(struct pnp_id), GFP_KERNEL);
+	pnpid32_to_pnpid(node->eisa_id, id);
+	dev_id = pnp_add_id(dev, id);
 	if (!dev_id) {
 		kfree(dev);
 		return -1;
 	}
 
 	dev->number = node->handle;
-	pnpid32_to_pnpid(node->eisa_id, id);
-	memcpy(dev_id->id, id, 7);
-	pnp_add_id(dev_id, dev);
 	pnpbios_parse_data_stream(dev, node);
 	dev->active = pnp_is_active(dev);
 	dev->flags = node->flags;
Index: work10/drivers/pnp/pnpbios/rsparser.c
===================================================================
--- work10.orig/drivers/pnp/pnpbios/rsparser.c	2008-04-25 11:12:17.000000000 -0600
+++ work10/drivers/pnp/pnpbios/rsparser.c	2008-04-25 11:14:46.000000000 -0600
@@ -16,6 +16,7 @@
 }
 #endif				/* CONFIG_PCI */
 
+#include "../base.h"
 #include "pnpbios.h"
 
 /* standard resource tags */
@@ -548,13 +549,11 @@
 		case SMALL_TAG_COMPATDEVID:	/* compatible ID */
 			if (len != 4)
 				goto len_err;
-			dev_id = kzalloc(sizeof(struct pnp_id), GFP_KERNEL);
-			if (!dev_id)
-				return NULL;
 			pnpid32_to_pnpid(p[1] | p[2] << 8 | p[3] << 16 | p[4] <<
 					 24, id);
-			memcpy(&dev_id->id, id, 7);
-			pnp_add_id(dev_id, dev);
+			dev_id = pnp_add_id(dev, id);
+			if (!dev_id)
+				return NULL;
 			break;
 
 		case SMALL_TAG_END:

-- 

^ permalink raw reply	[flat|nested] 80+ messages in thread

* [patch 06/54] PNP: add pnp_eisa_id_to_string()
  2008-04-25 18:38 [patch 00/54] PNP cleanup, v4 Bjorn Helgaas
                   ` (4 preceding siblings ...)
  2008-04-25 18:38 ` [patch 05/54] PNP: change pnp_add_id() to allocate its own pnp_id structures Bjorn Helgaas
@ 2008-04-25 18:38 ` Bjorn Helgaas
  2008-04-25 18:38 ` [patch 07/54] PNP: add pnp_alloc_dev() Bjorn Helgaas
                   ` (48 subsequent siblings)
  54 siblings, 0 replies; 80+ messages in thread
From: Bjorn Helgaas @ 2008-04-25 18:38 UTC (permalink / raw)
  To: Len Brown
  Cc: linux-acpi, linux-kernel, Adam Belay, Adam M Belay, Li Shaohua,
	Matthieu Castet, Thomas Renninger, Rene Herman, Jaroslav Kysela,
	Andrew Morton

[-- Attachment #1: pnp-common-eisa-id-parse --]
[-- Type: text/plain, Size: 6118 bytes --]

Converting the EISA ID to a string is messy and error-prone, and
we might as well use the same code for ISAPNP and PNPBIOS.

PNPACPI uses the conversion done by the ACPI core with
acpi_ex_eisa_id_to_string().

Signed-off-by: Bjorn Helgaas <bjorn.helgaas@hp.com>

---
 drivers/pnp/base.h             |    2 ++
 drivers/pnp/isapnp/core.c      |   32 +++++++++++---------------------
 drivers/pnp/pnpbios/core.c     |    2 +-
 drivers/pnp/pnpbios/rsparser.c |   26 +++-----------------------
 drivers/pnp/support.c          |   26 ++++++++++++++++++++++++++
 5 files changed, 43 insertions(+), 45 deletions(-)

Index: work10/drivers/pnp/base.h
===================================================================
--- work10.orig/drivers/pnp/base.h	2008-04-25 11:14:46.000000000 -0600
+++ work10/drivers/pnp/base.h	2008-04-25 11:14:48.000000000 -0600
@@ -1,5 +1,7 @@
 extern spinlock_t pnp_lock;
 void *pnp_alloc(long size);
+#define PNP_EISA_ID_MASK 0x7fffffff
+void pnp_eisa_id_to_string(u32 id, char *str);
 struct pnp_id *pnp_add_id(struct pnp_dev *dev, char *id);
 int pnp_interface_attach_device(struct pnp_dev *dev);
 void pnp_fixup_device(struct pnp_dev *dev);
Index: work10/drivers/pnp/isapnp/core.c
===================================================================
--- work10.orig/drivers/pnp/isapnp/core.c	2008-04-25 11:14:46.000000000 -0600
+++ work10/drivers/pnp/isapnp/core.c	2008-04-25 11:14:48.000000000 -0600
@@ -398,24 +398,6 @@
 }
 
 /*
- *  Parse EISA id.
- */
-static void isapnp_parse_id(struct pnp_dev *dev, unsigned short vendor,
-			    unsigned short device)
-{
-	char id[8];
-
-	sprintf(id, "%c%c%c%x%x%x%x",
-		'A' + ((vendor >> 2) & 0x3f) - 1,
-		'A' + (((vendor & 3) << 3) | ((vendor >> 13) & 7)) - 1,
-		'A' + ((vendor >> 8) & 0x1f) - 1,
-		(device >> 4) & 0x0f,
-		device & 0x0f, (device >> 12) & 0x0f, (device >> 8) & 0x0f);
-
-	pnp_add_id(dev, id);
-}
-
-/*
  *  Parse logical device tag.
  */
 static struct pnp_dev *__init isapnp_parse_device(struct pnp_card *card,
@@ -423,13 +405,17 @@
 {
 	unsigned char tmp[6];
 	struct pnp_dev *dev;
+	u32 eisa_id;
+	char id[8];
 
 	isapnp_peek(tmp, size);
 	dev = kzalloc(sizeof(struct pnp_dev), GFP_KERNEL);
 	if (!dev)
 		return NULL;
 	dev->number = number;
-	isapnp_parse_id(dev, (tmp[1] << 8) | tmp[0], (tmp[3] << 8) | tmp[2]);
+	eisa_id = tmp[0] | tmp[1] << 8 | tmp[2] << 16 | tmp[3] << 24;
+	pnp_eisa_id_to_string(eisa_id, id);
+	pnp_add_id(dev, id);
 	dev->regs = tmp[4];
 	dev->card = card;
 	if (size > 5)
@@ -619,6 +605,8 @@
 	unsigned char type, tmp[17];
 	struct pnp_option *option;
 	struct pnp_dev *dev;
+	u32 eisa_id;
+	char id[8];
 
 	if ((dev = isapnp_parse_device(card, size, number++)) == NULL)
 		return 1;
@@ -658,8 +646,10 @@
 		case _STAG_COMPATDEVID:
 			if (size == 4 && compat < DEVICE_COUNT_COMPATIBLE) {
 				isapnp_peek(tmp, 4);
-				isapnp_parse_id(dev, (tmp[1] << 8) | tmp[0],
-						(tmp[3] << 8) | tmp[2]);
+				eisa_id = tmp[0] | tmp[1] << 8 |
+					  tmp[2] << 16 | tmp[3] << 24;
+				pnp_eisa_id_to_string(eisa_id, id);
+				pnp_add_id(dev, id);
 				compat++;
 				size = 0;
 			}
Index: work10/drivers/pnp/pnpbios/core.c
===================================================================
--- work10.orig/drivers/pnp/pnpbios/core.c	2008-04-25 11:14:46.000000000 -0600
+++ work10/drivers/pnp/pnpbios/core.c	2008-04-25 11:14:48.000000000 -0600
@@ -332,7 +332,7 @@
 	if (!dev)
 		return -1;
 
-	pnpid32_to_pnpid(node->eisa_id, id);
+	pnp_eisa_id_to_string(node->eisa_id & PNP_EISA_ID_MASK, id);
 	dev_id = pnp_add_id(dev, id);
 	if (!dev_id) {
 		kfree(dev);
Index: work10/drivers/pnp/pnpbios/rsparser.c
===================================================================
--- work10.orig/drivers/pnp/pnpbios/rsparser.c	2008-04-25 11:14:46.000000000 -0600
+++ work10/drivers/pnp/pnpbios/rsparser.c	2008-04-25 11:14:48.000000000 -0600
@@ -494,32 +494,12 @@
  * Compatible Device IDs
  */
 
-#define HEX(id,a) hex[((id)>>a) & 15]
-#define CHAR(id,a) (0x40 + (((id)>>a) & 31))
-
-void pnpid32_to_pnpid(u32 id, char *str)
-{
-	const char *hex = "0123456789abcdef";
-
-	id = be32_to_cpu(id);
-	str[0] = CHAR(id, 26);
-	str[1] = CHAR(id, 21);
-	str[2] = CHAR(id, 16);
-	str[3] = HEX(id, 12);
-	str[4] = HEX(id, 8);
-	str[5] = HEX(id, 4);
-	str[6] = HEX(id, 0);
-	str[7] = '\0';
-}
-
-#undef CHAR
-#undef HEX
-
 static unsigned char *pnpbios_parse_compatible_ids(unsigned char *p,
 						   unsigned char *end,
 						   struct pnp_dev *dev)
 {
 	int len, tag;
+	u32 eisa_id;
 	char id[8];
 	struct pnp_id *dev_id;
 
@@ -549,8 +529,8 @@
 		case SMALL_TAG_COMPATDEVID:	/* compatible ID */
 			if (len != 4)
 				goto len_err;
-			pnpid32_to_pnpid(p[1] | p[2] << 8 | p[3] << 16 | p[4] <<
-					 24, id);
+			eisa_id = p[1] | p[2] << 8 | p[3] << 16 | p[4] << 24;
+			pnp_eisa_id_to_string(eisa_id & PNP_EISA_ID_MASK, id);
 			dev_id = pnp_add_id(dev, id);
 			if (!dev_id)
 				return NULL;
Index: work10/drivers/pnp/support.c
===================================================================
--- work10.orig/drivers/pnp/support.c	2008-04-25 11:12:17.000000000 -0600
+++ work10/drivers/pnp/support.c	2008-04-25 11:14:48.000000000 -0600
@@ -25,3 +25,29 @@
 }
 
 EXPORT_SYMBOL(pnp_is_active);
+
+/*
+ * Functionally similar to acpi_ex_eisa_id_to_string(), but that's
+ * buried in the ACPI CA, and we can't depend on it being present.
+ */
+void pnp_eisa_id_to_string(u32 id, char *str)
+{
+	id = be32_to_cpu(id);
+
+	/*
+	 * According to the specs, the first three characters are five-bit
+	 * compressed ASCII, and the left-over high order bit should be zero.
+	 * However, the Linux ISAPNP code historically used six bits for the
+	 * first character, and there seem to be IDs that depend on that,
+	 * e.g., "nEC8241" in the Linux 8250_pnp serial driver and the
+	 * FreeBSD sys/pc98/cbus/sio_cbus.c driver.
+	 */
+	str[0] = 'A' + ((id >> 26) & 0x3f) - 1;
+	str[1] = 'A' + ((id >> 21) & 0x1f) - 1;
+	str[2] = 'A' + ((id >> 16) & 0x1f) - 1;
+	str[3] = hex_asc((id >> 12) & 0xf);
+	str[4] = hex_asc((id >>  8) & 0xf);
+	str[5] = hex_asc((id >>  4) & 0xf);
+	str[6] = hex_asc((id >>  0) & 0xf);
+	str[7] = '\0';
+}

-- 

^ permalink raw reply	[flat|nested] 80+ messages in thread

* [patch 07/54] PNP: add pnp_alloc_dev()
  2008-04-25 18:38 [patch 00/54] PNP cleanup, v4 Bjorn Helgaas
                   ` (5 preceding siblings ...)
  2008-04-25 18:38 ` [patch 06/54] PNP: add pnp_eisa_id_to_string() Bjorn Helgaas
@ 2008-04-25 18:38 ` Bjorn Helgaas
  2008-04-25 18:38 ` [patch 08/54] PNP: make pnp_add_card_id() internal to PNP core Bjorn Helgaas
                   ` (47 subsequent siblings)
  54 siblings, 0 replies; 80+ messages in thread
From: Bjorn Helgaas @ 2008-04-25 18:38 UTC (permalink / raw)
  To: Len Brown
  Cc: linux-acpi, linux-kernel, Adam Belay, Adam M Belay, Li Shaohua,
	Matthieu Castet, Thomas Renninger, Rene Herman, Jaroslav Kysela,
	Andrew Morton

[-- Attachment #1: pnp-alloc-dev --]
[-- Type: text/plain, Size: 6235 bytes --]

Add pnp_alloc_dev() to allocate a struct pnp_dev and fill in the
protocol, instance number, and initial PNP ID.  Now it is always
valid to use dev_printk() on any pnp_dev pointer.

Signed-off-by: Bjorn Helgaas <bjorn.helgaas@hp.com>

---
 drivers/pnp/base.h         |    1 +
 drivers/pnp/core.c         |   38 +++++++++++++++++++++++++++++++-------
 drivers/pnp/isapnp/core.c  |   11 +++++------
 drivers/pnp/pnpacpi/core.c |   19 +++----------------
 drivers/pnp/pnpbios/core.c |   13 ++-----------
 5 files changed, 42 insertions(+), 40 deletions(-)

Index: work10/drivers/pnp/base.h
===================================================================
--- work10.orig/drivers/pnp/base.h	2008-04-25 11:14:48.000000000 -0600
+++ work10/drivers/pnp/base.h	2008-04-25 11:14:49.000000000 -0600
@@ -2,6 +2,7 @@
 void *pnp_alloc(long size);
 #define PNP_EISA_ID_MASK 0x7fffffff
 void pnp_eisa_id_to_string(u32 id, char *str);
+struct pnp_dev *pnp_alloc_dev(struct pnp_protocol *, int id, char *pnpid);
 struct pnp_id *pnp_add_id(struct pnp_dev *dev, char *id);
 int pnp_interface_attach_device(struct pnp_dev *dev);
 void pnp_fixup_device(struct pnp_dev *dev);
Index: work10/drivers/pnp/core.c
===================================================================
--- work10.orig/drivers/pnp/core.c	2008-04-25 11:12:17.000000000 -0600
+++ work10/drivers/pnp/core.c	2008-04-25 11:14:49.000000000 -0600
@@ -109,15 +109,42 @@
 	kfree(dev);
 }
 
-int __pnp_add_device(struct pnp_dev *dev)
+struct pnp_dev *pnp_alloc_dev(struct pnp_protocol *protocol, int id, char *pnpid)
 {
-	int ret;
+	struct pnp_dev *dev;
+	struct pnp_id *dev_id;
 
-	pnp_fixup_device(dev);
+	dev = kzalloc(sizeof(struct pnp_dev), GFP_KERNEL);
+	if (!dev)
+		return NULL;
+
+	dev->protocol = protocol;
+	dev->number = id;
+	dev->dma_mask = DMA_24BIT_MASK;
+
+	dev->dev.parent = &dev->protocol->dev;
 	dev->dev.bus = &pnp_bus_type;
 	dev->dev.dma_mask = &dev->dma_mask;
-	dev->dma_mask = dev->dev.coherent_dma_mask = DMA_24BIT_MASK;
+	dev->dev.coherent_dma_mask = dev->dma_mask;
 	dev->dev.release = &pnp_release_device;
+
+	sprintf(dev->dev.bus_id, "%02x:%02x", dev->protocol->number,
+		dev->number);
+
+	dev_id = pnp_add_id(dev, pnpid);
+	if (!dev_id) {
+		kfree(dev);
+		return NULL;
+	}
+
+	return dev;
+}
+
+int __pnp_add_device(struct pnp_dev *dev)
+{
+	int ret;
+
+	pnp_fixup_device(dev);
 	dev->status = PNP_READY;
 	spin_lock(&pnp_lock);
 	list_add_tail(&dev->global_list, &pnp_global);
@@ -145,9 +172,6 @@
 	if (dev->card)
 		return -EINVAL;
 
-	dev->dev.parent = &dev->protocol->dev;
-	sprintf(dev->dev.bus_id, "%02x:%02x", dev->protocol->number,
-		dev->number);
 	ret = __pnp_add_device(dev);
 	if (ret)
 		return ret;
Index: work10/drivers/pnp/isapnp/core.c
===================================================================
--- work10.orig/drivers/pnp/isapnp/core.c	2008-04-25 11:14:48.000000000 -0600
+++ work10/drivers/pnp/isapnp/core.c	2008-04-25 11:14:49.000000000 -0600
@@ -409,18 +409,17 @@
 	char id[8];
 
 	isapnp_peek(tmp, size);
-	dev = kzalloc(sizeof(struct pnp_dev), GFP_KERNEL);
-	if (!dev)
-		return NULL;
-	dev->number = number;
 	eisa_id = tmp[0] | tmp[1] << 8 | tmp[2] << 16 | tmp[3] << 24;
 	pnp_eisa_id_to_string(eisa_id, id);
-	pnp_add_id(dev, id);
+
+	dev = pnp_alloc_dev(&isapnp_protocol, number, id);
+	if (!dev)
+		return NULL;
+
 	dev->regs = tmp[4];
 	dev->card = card;
 	if (size > 5)
 		dev->regs |= tmp[5] << 8;
-	dev->protocol = &isapnp_protocol;
 	dev->capabilities |= PNP_CONFIGURABLE;
 	dev->capabilities |= PNP_READ;
 	dev->capabilities |= PNP_WRITE;
Index: work10/drivers/pnp/pnpacpi/core.c
===================================================================
--- work10.orig/drivers/pnp/pnpacpi/core.c	2008-04-25 11:14:46.000000000 -0600
+++ work10/drivers/pnp/pnpacpi/core.c	2008-04-25 11:14:49.000000000 -0600
@@ -152,7 +152,6 @@
 {
 	acpi_handle temp = NULL;
 	acpi_status status;
-	struct pnp_id *dev_id;
 	struct pnp_dev *dev;
 
 	status = acpi_get_handle(device->handle, "_CRS", &temp);
@@ -160,11 +159,10 @@
 	    is_exclusive_device(device))
 		return 0;
 
-	dev = kzalloc(sizeof(struct pnp_dev), GFP_KERNEL);
-	if (!dev) {
-		pnp_err("Out of memory");
+	dev = pnp_alloc_dev(&pnpacpi_protocol, num, acpi_device_hid(device));
+	if (!dev)
 		return -ENOMEM;
-	}
+
 	dev->data = device->handle;
 	/* .enabled means the device can decode the resources */
 	dev->active = device->status.enabled;
@@ -180,19 +178,11 @@
 	if (ACPI_SUCCESS(status))
 		dev->capabilities |= PNP_DISABLE;
 
-	dev->protocol = &pnpacpi_protocol;
-
 	if (strlen(acpi_device_name(device)))
 		strncpy(dev->name, acpi_device_name(device), sizeof(dev->name));
 	else
 		strncpy(dev->name, acpi_device_bid(device), sizeof(dev->name));
 
-	dev->number = num;
-
-	dev_id = pnp_add_id(dev, acpi_device_hid(device));
-	if (!dev_id)
-		goto err;
-
 	if (dev->active) {
 		/* parse allocated resource */
 		status = pnpacpi_parse_allocated_resource(device->handle,
@@ -230,9 +220,6 @@
 	num++;
 
 	return AE_OK;
-err:
-	kfree(dev);
-	return -EINVAL;
 }
 
 static acpi_status __init pnpacpi_add_device_handler(acpi_handle handle,
Index: work10/drivers/pnp/pnpbios/core.c
===================================================================
--- work10.orig/drivers/pnp/pnpbios/core.c	2008-04-25 11:14:48.000000000 -0600
+++ work10/drivers/pnp/pnpbios/core.c	2008-04-25 11:14:49.000000000 -0600
@@ -318,7 +318,6 @@
 {
 	struct list_head *pos;
 	struct pnp_dev *dev;
-	struct pnp_id *dev_id;
 	char id[8];
 
 	/* check if the device is already added */
@@ -328,18 +327,11 @@
 			return -1;
 	}
 
-	dev = kzalloc(sizeof(struct pnp_dev), GFP_KERNEL);
-	if (!dev)
-		return -1;
-
 	pnp_eisa_id_to_string(node->eisa_id & PNP_EISA_ID_MASK, id);
-	dev_id = pnp_add_id(dev, id);
-	if (!dev_id) {
-		kfree(dev);
+	dev = pnp_alloc_dev(&pnpbios_protocol, node->handle, id);
+	if (!dev)
 		return -1;
-	}
 
-	dev->number = node->handle;
 	pnpbios_parse_data_stream(dev, node);
 	dev->active = pnp_is_active(dev);
 	dev->flags = node->flags;
@@ -352,7 +344,6 @@
 		dev->capabilities |= PNP_WRITE;
 	if (dev->flags & PNPBIOS_REMOVABLE)
 		dev->capabilities |= PNP_REMOVABLE;
-	dev->protocol = &pnpbios_protocol;
 
 	/* clear out the damaged flags */
 	if (!dev->active)

-- 

^ permalink raw reply	[flat|nested] 80+ messages in thread

* [patch 08/54] PNP: make pnp_add_card_id() internal to PNP core
  2008-04-25 18:38 [patch 00/54] PNP cleanup, v4 Bjorn Helgaas
                   ` (6 preceding siblings ...)
  2008-04-25 18:38 ` [patch 07/54] PNP: add pnp_alloc_dev() Bjorn Helgaas
@ 2008-04-25 18:38 ` Bjorn Helgaas
  2008-04-25 18:38 ` [patch 09/54] PNP: change pnp_add_card_id() to allocate its own pnp_id structures Bjorn Helgaas
                   ` (46 subsequent siblings)
  54 siblings, 0 replies; 80+ messages in thread
From: Bjorn Helgaas @ 2008-04-25 18:38 UTC (permalink / raw)
  To: Len Brown
  Cc: linux-acpi, Rene Herman, linux-kernel, Adam Belay, Adam M Belay,
	Li Shaohua, Matthieu Castet, Thomas Renninger, Rene Herman,
	Jaroslav Kysela, Andrew Morton

[-- Attachment #1: pnp-make-pnp_add_card_id-internal-to-core --]
[-- Type: text/plain, Size: 2186 bytes --]

pnp_add_card_id() doesn't need to be exposed outside the PNP core, so
move the declaration to an internal header file.

Signed-off-by: Bjorn Helgaas <bjorn.helgaas@hp.com>
Acked-By: Rene Herman <rene.herman@gmail.com>

Index: work10/drivers/pnp/base.h
===================================================================
--- work10.orig/drivers/pnp/base.h	2008-04-25 11:14:49.000000000 -0600
+++ work10/drivers/pnp/base.h	2008-04-25 11:14:50.000000000 -0600
@@ -4,6 +4,7 @@
 void pnp_eisa_id_to_string(u32 id, char *str);
 struct pnp_dev *pnp_alloc_dev(struct pnp_protocol *, int id, char *pnpid);
 struct pnp_id *pnp_add_id(struct pnp_dev *dev, char *id);
+int pnp_add_card_id(struct pnp_id *id, struct pnp_card *card);
 int pnp_interface_attach_device(struct pnp_dev *dev);
 void pnp_fixup_device(struct pnp_dev *dev);
 void pnp_free_option(struct pnp_option *option);
Index: work10/include/linux/pnp.h
===================================================================
--- work10.orig/include/linux/pnp.h	2008-04-25 11:14:45.000000000 -0600
+++ work10/include/linux/pnp.h	2008-04-25 11:14:50.000000000 -0600
@@ -371,7 +371,6 @@
 void pnp_remove_card(struct pnp_card *card);
 int pnp_add_card_device(struct pnp_card *card, struct pnp_dev *dev);
 void pnp_remove_card_device(struct pnp_dev *dev);
-int pnp_add_card_id(struct pnp_id *id, struct pnp_card *card);
 struct pnp_dev *pnp_request_card_device(struct pnp_card_link *clink,
 					const char *id, struct pnp_dev *from);
 void pnp_release_card_device(struct pnp_dev *dev);
@@ -423,7 +422,6 @@
 static inline void pnp_remove_card(struct pnp_card *card) { }
 static inline int pnp_add_card_device(struct pnp_card *card, struct pnp_dev *dev) { return -ENODEV; }
 static inline void pnp_remove_card_device(struct pnp_dev *dev) { }
-static inline int pnp_add_card_id(struct pnp_id *id, struct pnp_card *card) { return -ENODEV; }
 static inline struct pnp_dev *pnp_request_card_device(struct pnp_card_link *clink, const char *id, struct pnp_dev *from) { return NULL; }
 static inline void pnp_release_card_device(struct pnp_dev *dev) { }
 static inline int pnp_register_card_driver(struct pnp_card_driver *drv) { return -ENODEV; }

-- 

^ permalink raw reply	[flat|nested] 80+ messages in thread

* [patch 09/54] PNP: change pnp_add_card_id() to allocate its own pnp_id structures
  2008-04-25 18:38 [patch 00/54] PNP cleanup, v4 Bjorn Helgaas
                   ` (7 preceding siblings ...)
  2008-04-25 18:38 ` [patch 08/54] PNP: make pnp_add_card_id() internal to PNP core Bjorn Helgaas
@ 2008-04-25 18:38 ` Bjorn Helgaas
  2008-04-25 18:38 ` [patch 10/54] ISAPNP: pull pnp_add_card_id() out of isapnp_parse_card_id() Bjorn Helgaas
                   ` (45 subsequent siblings)
  54 siblings, 0 replies; 80+ messages in thread
From: Bjorn Helgaas @ 2008-04-25 18:38 UTC (permalink / raw)
  To: Len Brown
  Cc: linux-acpi, Rene Herman, linux-kernel, Adam Belay, Adam M Belay,
	Li Shaohua, Matthieu Castet, Thomas Renninger, Rene Herman,
	Jaroslav Kysela, Andrew Morton

[-- Attachment #1: pnp-move-allocation-into-pnp_add_card_id --]
[-- Type: text/plain, Size: 3352 bytes --]

This moves some of the pnp_id knowledge out of the backends and into
the PNP core.

Signed-off-by: Bjorn Helgaas <bjorn.helgaas@hp.com>
Acked-By: Rene Herman <rene.herman@gmail.com>

Index: work10/drivers/pnp/base.h
===================================================================
--- work10.orig/drivers/pnp/base.h	2008-04-25 11:14:50.000000000 -0600
+++ work10/drivers/pnp/base.h	2008-04-25 11:14:50.000000000 -0600
@@ -4,7 +4,7 @@
 void pnp_eisa_id_to_string(u32 id, char *str);
 struct pnp_dev *pnp_alloc_dev(struct pnp_protocol *, int id, char *pnpid);
 struct pnp_id *pnp_add_id(struct pnp_dev *dev, char *id);
-int pnp_add_card_id(struct pnp_id *id, struct pnp_card *card);
+struct pnp_id *pnp_add_card_id(struct pnp_card *card, char *id);
 int pnp_interface_attach_device(struct pnp_dev *dev);
 void pnp_fixup_device(struct pnp_dev *dev);
 void pnp_free_option(struct pnp_option *option);
Index: work10/drivers/pnp/card.c
===================================================================
--- work10.orig/drivers/pnp/card.c	2008-04-25 11:12:17.000000000 -0600
+++ work10/drivers/pnp/card.c	2008-04-25 11:14:50.000000000 -0600
@@ -5,6 +5,7 @@
  */
 
 #include <linux/module.h>
+#include <linux/ctype.h>
 #include <linux/slab.h>
 #include <linux/pnp.h>
 #include "base.h"
@@ -100,19 +101,33 @@
  * @id: pointer to a pnp_id structure
  * @card: pointer to the desired card
  */
-int pnp_add_card_id(struct pnp_id *id, struct pnp_card *card)
+struct pnp_id *pnp_add_card_id(struct pnp_card *card, char *id)
 {
-	struct pnp_id *ptr;
+	struct pnp_id *dev_id, *ptr;
 
-	id->next = NULL;
+	dev_id = kzalloc(sizeof(struct pnp_id), GFP_KERNEL);
+	if (!dev_id)
+		return NULL;
+
+	dev_id->id[0] = id[0];
+	dev_id->id[1] = id[1];
+	dev_id->id[2] = id[2];
+	dev_id->id[3] = tolower(id[3]);
+	dev_id->id[4] = tolower(id[4]);
+	dev_id->id[5] = tolower(id[5]);
+	dev_id->id[6] = tolower(id[6]);
+	dev_id->id[7] = '\0';
+
+	dev_id->next = NULL;
 	ptr = card->id;
 	while (ptr && ptr->next)
 		ptr = ptr->next;
 	if (ptr)
-		ptr->next = id;
+		ptr->next = dev_id;
 	else
-		card->id = id;
-	return 0;
+		card->id = dev_id;
+
+	return dev_id;
 }
 
 static void pnp_free_card_ids(struct pnp_card *card)
Index: work10/drivers/pnp/isapnp/core.c
===================================================================
--- work10.orig/drivers/pnp/isapnp/core.c	2008-04-25 11:14:49.000000000 -0600
+++ work10/drivers/pnp/isapnp/core.c	2008-04-25 11:14:50.000000000 -0600
@@ -822,17 +822,18 @@
 static void isapnp_parse_card_id(struct pnp_card *card, unsigned short vendor,
 				 unsigned short device)
 {
-	struct pnp_id *id = kzalloc(sizeof(struct pnp_id), GFP_KERNEL);
+	char id[8];
 
-	if (!id)
-		return;
-	sprintf(id->id, "%c%c%c%x%x%x%x",
-		'A' + ((vendor >> 2) & 0x3f) - 1,
-		'A' + (((vendor & 3) << 3) | ((vendor >> 13) & 7)) - 1,
-		'A' + ((vendor >> 8) & 0x1f) - 1,
-		(device >> 4) & 0x0f,
-		device & 0x0f, (device >> 12) & 0x0f, (device >> 8) & 0x0f);
-	pnp_add_card_id(id, card);
+	id[0] = 'A' + ((vendor >> 2) & 0x3f) - 1;
+	id[1] = 'A' + (((vendor & 3) << 3) | ((vendor >> 13) & 7)) - 1;
+	id[2] = 'A' + ((vendor >> 8) & 0x1f) - 1;
+	id[3] = hex_asc((device >> 4) & 0x0f);
+	id[4] = hex_asc(device & 0x0f);
+	id[5] = hex_asc((device >> 12) & 0x0f);
+	id[6] = hex_asc((device >> 8) & 0x0f);
+	id[7] = '\0';
+
+	pnp_add_card_id(card, id);
 }
 
 /*

-- 

^ permalink raw reply	[flat|nested] 80+ messages in thread

* [patch 10/54] ISAPNP: pull pnp_add_card_id() out of isapnp_parse_card_id()
  2008-04-25 18:38 [patch 00/54] PNP cleanup, v4 Bjorn Helgaas
                   ` (8 preceding siblings ...)
  2008-04-25 18:38 ` [patch 09/54] PNP: change pnp_add_card_id() to allocate its own pnp_id structures Bjorn Helgaas
@ 2008-04-25 18:38 ` Bjorn Helgaas
  2008-04-25 18:38 ` [patch 11/54] PNP: add pnp_alloc_card() Bjorn Helgaas
                   ` (44 subsequent siblings)
  54 siblings, 0 replies; 80+ messages in thread
From: Bjorn Helgaas @ 2008-04-25 18:38 UTC (permalink / raw)
  To: Len Brown
  Cc: linux-acpi, Rene Herman, linux-kernel, Adam Belay, Adam M Belay,
	Li Shaohua, Matthieu Castet, Thomas Renninger, Rene Herman,
	Jaroslav Kysela, Andrew Morton

[-- Attachment #1: isapnp-restructure-parse-card-id --]
[-- Type: text/plain, Size: 1862 bytes --]

Split the pnp_add_card_id() part from the PNPID conversion part so we
can move the initial add_id() into the pnp_card allocation.

This makes the PNPID conversion generic so we can use the same
one for both devices and cards.

Signed-off-by: Bjorn Helgaas <bjorn.helgaas@hp.com>
Acked-By: Rene Herman <rene.herman@gmail.com>

Index: work10/drivers/pnp/isapnp/core.c
===================================================================
--- work10.orig/drivers/pnp/isapnp/core.c	2008-04-25 11:14:50.000000000 -0600
+++ work10/drivers/pnp/isapnp/core.c	2008-04-25 11:14:51.000000000 -0600
@@ -817,26 +817,6 @@
 }
 
 /*
- *  Parse EISA id for ISA PnP card.
- */
-static void isapnp_parse_card_id(struct pnp_card *card, unsigned short vendor,
-				 unsigned short device)
-{
-	char id[8];
-
-	id[0] = 'A' + ((vendor >> 2) & 0x3f) - 1;
-	id[1] = 'A' + (((vendor & 3) << 3) | ((vendor >> 13) & 7)) - 1;
-	id[2] = 'A' + ((vendor >> 8) & 0x1f) - 1;
-	id[3] = hex_asc((device >> 4) & 0x0f);
-	id[4] = hex_asc(device & 0x0f);
-	id[5] = hex_asc((device >> 12) & 0x0f);
-	id[6] = hex_asc((device >> 8) & 0x0f);
-	id[7] = '\0';
-
-	pnp_add_card_id(card, id);
-}
-
-/*
  *  Build device list for all present ISA PnP devices.
  */
 static int __init isapnp_build_device_list(void)
@@ -844,6 +824,8 @@
 	int csn;
 	unsigned char header[9], checksum;
 	struct pnp_card *card;
+	u32 eisa_id;
+	char id[8];
 
 	isapnp_wait();
 	isapnp_key();
@@ -864,8 +846,10 @@
 
 		card->number = csn;
 		INIT_LIST_HEAD(&card->devices);
-		isapnp_parse_card_id(card, (header[1] << 8) | header[0],
-				     (header[3] << 8) | header[2]);
+		eisa_id = header[0] | header[1] << 8 |
+			  header[2] << 16 | header[3] << 24;
+		pnp_eisa_id_to_string(eisa_id, id);
+		pnp_add_card_id(card, id);
 		card->serial =
 		    (header[7] << 24) | (header[6] << 16) | (header[5] << 8) |
 		    header[4];

-- 

^ permalink raw reply	[flat|nested] 80+ messages in thread

* [patch 11/54] PNP: add pnp_alloc_card()
  2008-04-25 18:38 [patch 00/54] PNP cleanup, v4 Bjorn Helgaas
                   ` (9 preceding siblings ...)
  2008-04-25 18:38 ` [patch 10/54] ISAPNP: pull pnp_add_card_id() out of isapnp_parse_card_id() Bjorn Helgaas
@ 2008-04-25 18:38 ` Bjorn Helgaas
  2008-04-25 18:38 ` [patch 12/54] PNPACPI: pnpacpi_encode_ext_irq() wrongly set "irq" instead of "extended_irq" Bjorn Helgaas
                   ` (43 subsequent siblings)
  54 siblings, 0 replies; 80+ messages in thread
From: Bjorn Helgaas @ 2008-04-25 18:38 UTC (permalink / raw)
  To: Len Brown
  Cc: linux-acpi, Rene Herman, linux-kernel, Adam Belay, Adam M Belay,
	Li Shaohua, Matthieu Castet, Thomas Renninger, Rene Herman,
	Jaroslav Kysela, Andrew Morton

[-- Attachment #1: pnp-alloc-card --]
[-- Type: text/plain, Size: 3528 bytes --]

Add pnp_alloc_card() to allocate a struct pnp_card and fill in the
protocol, instance number, and initial PNP ID.  Now it is always
valid to use dev_printk() on any pnp_card pointer.

Signed-off-by: Bjorn Helgaas <bjorn.helgaas@hp.com>
Acked-By: Rene Herman <rene.herman@gmail.com>

---
 drivers/pnp/base.h        |    1 +
 drivers/pnp/card.c        |   28 +++++++++++++++++++++++++---
 drivers/pnp/isapnp/core.c |   11 ++++-------
 3 files changed, 30 insertions(+), 10 deletions(-)

Index: work10/drivers/pnp/base.h
===================================================================
--- work10.orig/drivers/pnp/base.h	2008-04-25 11:14:50.000000000 -0600
+++ work10/drivers/pnp/base.h	2008-04-25 11:14:51.000000000 -0600
@@ -3,6 +3,7 @@
 #define PNP_EISA_ID_MASK 0x7fffffff
 void pnp_eisa_id_to_string(u32 id, char *str);
 struct pnp_dev *pnp_alloc_dev(struct pnp_protocol *, int id, char *pnpid);
+struct pnp_card *pnp_alloc_card(struct pnp_protocol *, int id, char *pnpid);
 struct pnp_id *pnp_add_id(struct pnp_dev *dev, char *id);
 struct pnp_id *pnp_add_card_id(struct pnp_card *card, char *id);
 int pnp_interface_attach_device(struct pnp_dev *dev);
Index: work10/drivers/pnp/card.c
===================================================================
--- work10.orig/drivers/pnp/card.c	2008-04-25 11:14:50.000000000 -0600
+++ work10/drivers/pnp/card.c	2008-04-25 11:14:51.000000000 -0600
@@ -151,6 +151,31 @@
 	kfree(card);
 }
 
+struct pnp_card *pnp_alloc_card(struct pnp_protocol *protocol, int id, char *pnpid)
+{
+	struct pnp_card *card;
+	struct pnp_id *dev_id;
+
+	card = kzalloc(sizeof(struct pnp_card), GFP_KERNEL);
+	if (!card)
+		return NULL;
+
+	card->protocol = protocol;
+	card->number = id;
+
+	card->dev.parent = &card->protocol->dev;
+	sprintf(card->dev.bus_id, "%02x:%02x", card->protocol->number,
+		card->number);
+
+	dev_id = pnp_add_card_id(card, pnpid);
+	if (!dev_id) {
+		kfree(card);
+		return NULL;
+	}
+
+	return card;
+}
+
 static ssize_t pnp_show_card_name(struct device *dmdev,
 				  struct device_attribute *attr, char *buf)
 {
@@ -206,9 +231,6 @@
 	int error;
 	struct list_head *pos, *temp;
 
-	sprintf(card->dev.bus_id, "%02x:%02x", card->protocol->number,
-		card->number);
-	card->dev.parent = &card->protocol->dev;
 	card->dev.bus = NULL;
 	card->dev.release = &pnp_release_card;
 	error = device_register(&card->dev);
Index: work10/drivers/pnp/isapnp/core.c
===================================================================
--- work10.orig/drivers/pnp/isapnp/core.c	2008-04-25 11:14:51.000000000 -0600
+++ work10/drivers/pnp/isapnp/core.c	2008-04-25 11:14:51.000000000 -0600
@@ -840,16 +840,14 @@
 		       header[5], header[6], header[7], header[8]);
 		printk(KERN_DEBUG "checksum = 0x%x\n", checksum);
 #endif
-		if ((card =
-		     kzalloc(sizeof(struct pnp_card), GFP_KERNEL)) == NULL)
-			continue;
-
-		card->number = csn;
-		INIT_LIST_HEAD(&card->devices);
 		eisa_id = header[0] | header[1] << 8 |
 			  header[2] << 16 | header[3] << 24;
 		pnp_eisa_id_to_string(eisa_id, id);
-		pnp_add_card_id(card, id);
+		card = pnp_alloc_card(&isapnp_protocol, csn, id);
+		if (!card)
+			continue;
+
+		INIT_LIST_HEAD(&card->devices);
 		card->serial =
 		    (header[7] << 24) | (header[6] << 16) | (header[5] << 8) |
 		    header[4];
@@ -860,7 +858,6 @@
 			       "isapnp: checksum for device %i is not valid (0x%x)\n",
 			       csn, isapnp_checksum_value);
 		card->checksum = isapnp_checksum_value;
-		card->protocol = &isapnp_protocol;
 
 		pnp_add_card(card);
 	}

-- 

^ permalink raw reply	[flat|nested] 80+ messages in thread

* [patch 12/54] PNPACPI: pnpacpi_encode_ext_irq() wrongly set "irq" instead of "extended_irq"
  2008-04-25 18:38 [patch 00/54] PNP cleanup, v4 Bjorn Helgaas
                   ` (10 preceding siblings ...)
  2008-04-25 18:38 ` [patch 11/54] PNP: add pnp_alloc_card() Bjorn Helgaas
@ 2008-04-25 18:38 ` Bjorn Helgaas
  2008-04-25 18:38 ` [patch 13/54] PNPACPI: use temporaries to reduce repetition Bjorn Helgaas
                   ` (42 subsequent siblings)
  54 siblings, 0 replies; 80+ messages in thread
From: Bjorn Helgaas @ 2008-04-25 18:38 UTC (permalink / raw)
  To: Len Brown
  Cc: linux-acpi, linux-kernel, Adam Belay, Adam M Belay, Li Shaohua,
	Matthieu Castet, Thomas Renninger, Rene Herman, Jaroslav Kysela,
	Andrew Morton

[-- Attachment #1: pnpacpi-fix-encode-extended-irq --]
[-- Type: text/plain, Size: 1019 bytes --]

pnpacpi_encode_ext_irq() should set resource->data.extended_irq, not
resource->data.irq.

This has been wrong since at least 2.6.12.  I haven't seen any bug
reports, but it's clearly incorrect.

Signed-off-by: Bjorn Helgaas <bjorn.helgaas@hp.com>

Index: work10/drivers/pnp/pnpacpi/rsparser.c
===================================================================
--- work10.orig/drivers/pnp/pnpacpi/rsparser.c	2008-04-25 11:12:17.000000000 -0600
+++ work10/drivers/pnp/pnpacpi/rsparser.c	2008-04-25 11:14:52.000000000 -0600
@@ -820,9 +820,9 @@
 	resource->data.extended_irq.triggering = triggering;
 	resource->data.extended_irq.polarity = polarity;
 	if (triggering == ACPI_EDGE_SENSITIVE)
-		resource->data.irq.sharable = ACPI_EXCLUSIVE;
+		resource->data.extended_irq.sharable = ACPI_EXCLUSIVE;
 	else
-		resource->data.irq.sharable = ACPI_SHARED;
+		resource->data.extended_irq.sharable = ACPI_SHARED;
 	resource->data.extended_irq.interrupt_count = 1;
 	resource->data.extended_irq.interrupts[0] = p->start;
 }

-- 

^ permalink raw reply	[flat|nested] 80+ messages in thread

* [patch 13/54] PNPACPI: use temporaries to reduce repetition
  2008-04-25 18:38 [patch 00/54] PNP cleanup, v4 Bjorn Helgaas
                   ` (11 preceding siblings ...)
  2008-04-25 18:38 ` [patch 12/54] PNPACPI: pnpacpi_encode_ext_irq() wrongly set "irq" instead of "extended_irq" Bjorn Helgaas
@ 2008-04-25 18:38 ` Bjorn Helgaas
  2008-04-25 18:38 ` [patch 14/54] PNPACPI: hoist dma_flags() out of pnpacpi_parse_allocated_dmaresource() Bjorn Helgaas
                   ` (41 subsequent siblings)
  54 siblings, 0 replies; 80+ messages in thread
From: Bjorn Helgaas @ 2008-04-25 18:38 UTC (permalink / raw)
  To: Len Brown
  Cc: linux-acpi, Rene Herman, linux-kernel, Adam Belay, Adam M Belay,
	Li Shaohua, Matthieu Castet, Thomas Renninger, Rene Herman,
	Jaroslav Kysela, Andrew Morton

[-- Attachment #1: pnpacpi-use-acpi-resource-temporaries --]
[-- Type: text/plain, Size: 10754 bytes --]

No functional change, just fewer words and fewer chances for
transcription errors.

Signed-off-by: Bjorn Helgaas <bjorn.helgaas@hp.com>
Acked-By: Rene Herman <rene.herman@gmail.com>

Index: work10/drivers/pnp/pnpacpi/rsparser.c
===================================================================
--- work10.orig/drivers/pnp/pnpacpi/rsparser.c	2008-04-25 11:14:52.000000000 -0600
+++ work10/drivers/pnp/pnpacpi/rsparser.c	2008-04-25 11:14:53.000000000 -0600
@@ -280,6 +280,14 @@
 					      void *data)
 {
 	struct pnp_resource_table *res_table = data;
+	struct acpi_resource_irq *irq;
+	struct acpi_resource_dma *dma;
+	struct acpi_resource_io *io;
+	struct acpi_resource_fixed_io *fixed_io;
+	struct acpi_resource_memory24 *memory24;
+	struct acpi_resource_memory32 *memory32;
+	struct acpi_resource_fixed_memory32 *fixed_memory32;
+	struct acpi_resource_extended_irq *extended_irq;
 	int i;
 
 	switch (res->type) {
@@ -288,29 +296,32 @@
 		 * Per spec, only one interrupt per descriptor is allowed in
 		 * _CRS, but some firmware violates this, so parse them all.
 		 */
-		for (i = 0; i < res->data.irq.interrupt_count; i++) {
+		irq = &res->data.irq;
+		for (i = 0; i < irq->interrupt_count; i++) {
 			pnpacpi_parse_allocated_irqresource(res_table,
-				res->data.irq.interrupts[i],
-				res->data.irq.triggering,
-				res->data.irq.polarity,
-				res->data.irq.sharable);
+				irq->interrupts[i],
+				irq->triggering,
+				irq->polarity,
+				irq->sharable);
 		}
 		break;
 
 	case ACPI_RESOURCE_TYPE_DMA:
-		if (res->data.dma.channel_count > 0)
+		dma = &res->data.dma;
+		if (dma->channel_count > 0)
 			pnpacpi_parse_allocated_dmaresource(res_table,
-				res->data.dma.channels[0],
-				res->data.dma.type,
-				res->data.dma.bus_master,
-				res->data.dma.transfer);
+				dma->channels[0],
+				dma->type,
+				dma->bus_master,
+				dma->transfer);
 		break;
 
 	case ACPI_RESOURCE_TYPE_IO:
+		io = &res->data.io;
 		pnpacpi_parse_allocated_ioresource(res_table,
-			res->data.io.minimum,
-			res->data.io.address_length,
-			res->data.io.io_decode);
+			io->minimum,
+			io->address_length,
+			io->io_decode);
 		break;
 
 	case ACPI_RESOURCE_TYPE_START_DEPENDENT:
@@ -318,9 +329,10 @@
 		break;
 
 	case ACPI_RESOURCE_TYPE_FIXED_IO:
+		fixed_io = &res->data.fixed_io;
 		pnpacpi_parse_allocated_ioresource(res_table,
-			res->data.fixed_io.address,
-			res->data.fixed_io.address_length,
+			fixed_io->address,
+			fixed_io->address_length,
 			ACPI_DECODE_10);
 		break;
 
@@ -331,22 +343,25 @@
 		break;
 
 	case ACPI_RESOURCE_TYPE_MEMORY24:
+		memory24 = &res->data.memory24;
 		pnpacpi_parse_allocated_memresource(res_table,
-			res->data.memory24.minimum,
-			res->data.memory24.address_length,
-			res->data.memory24.write_protect);
+			memory24->minimum,
+			memory24->address_length,
+			memory24->write_protect);
 		break;
 	case ACPI_RESOURCE_TYPE_MEMORY32:
+		memory32 = &res->data.memory32;
 		pnpacpi_parse_allocated_memresource(res_table,
-			res->data.memory32.minimum,
-			res->data.memory32.address_length,
-			res->data.memory32.write_protect);
+			memory32->minimum,
+			memory32->address_length,
+			memory32->write_protect);
 		break;
 	case ACPI_RESOURCE_TYPE_FIXED_MEMORY32:
+		fixed_memory32 = &res->data.fixed_memory32;
 		pnpacpi_parse_allocated_memresource(res_table,
-			res->data.fixed_memory32.address,
-			res->data.fixed_memory32.address_length,
-			res->data.fixed_memory32.write_protect);
+			fixed_memory32->address,
+			fixed_memory32->address_length,
+			fixed_memory32->write_protect);
 		break;
 	case ACPI_RESOURCE_TYPE_ADDRESS16:
 	case ACPI_RESOURCE_TYPE_ADDRESS32:
@@ -360,15 +375,16 @@
 		break;
 
 	case ACPI_RESOURCE_TYPE_EXTENDED_IRQ:
-		if (res->data.extended_irq.producer_consumer == ACPI_PRODUCER)
+		extended_irq = &res->data.extended_irq;
+		if (extended_irq->producer_consumer == ACPI_PRODUCER)
 			return AE_OK;
 
-		for (i = 0; i < res->data.extended_irq.interrupt_count; i++) {
+		for (i = 0; i < extended_irq->interrupt_count; i++) {
 			pnpacpi_parse_allocated_irqresource(res_table,
-				res->data.extended_irq.interrupts[i],
-				res->data.extended_irq.triggering,
-				res->data.extended_irq.polarity,
-				res->data.extended_irq.sharable);
+				extended_irq->interrupts[i],
+				extended_irq->triggering,
+				extended_irq->polarity,
+				extended_irq->sharable);
 		}
 		break;
 
@@ -797,122 +813,136 @@
 static void pnpacpi_encode_irq(struct acpi_resource *resource,
 			       struct resource *p)
 {
+	struct acpi_resource_irq *irq = &resource->data.irq;
 	int triggering, polarity;
 
 	decode_irq_flags(p->flags & IORESOURCE_BITS, &triggering, &polarity);
-	resource->data.irq.triggering = triggering;
-	resource->data.irq.polarity = polarity;
+	irq->triggering = triggering;
+	irq->polarity = polarity;
 	if (triggering == ACPI_EDGE_SENSITIVE)
-		resource->data.irq.sharable = ACPI_EXCLUSIVE;
+		irq->sharable = ACPI_EXCLUSIVE;
 	else
-		resource->data.irq.sharable = ACPI_SHARED;
-	resource->data.irq.interrupt_count = 1;
-	resource->data.irq.interrupts[0] = p->start;
+		irq->sharable = ACPI_SHARED;
+	irq->interrupt_count = 1;
+	irq->interrupts[0] = p->start;
 }
 
 static void pnpacpi_encode_ext_irq(struct acpi_resource *resource,
 				   struct resource *p)
 {
+	struct acpi_resource_extended_irq *extended_irq = &resource->data.extended_irq;
 	int triggering, polarity;
 
 	decode_irq_flags(p->flags & IORESOURCE_BITS, &triggering, &polarity);
-	resource->data.extended_irq.producer_consumer = ACPI_CONSUMER;
-	resource->data.extended_irq.triggering = triggering;
-	resource->data.extended_irq.polarity = polarity;
+	extended_irq->producer_consumer = ACPI_CONSUMER;
+	extended_irq->triggering = triggering;
+	extended_irq->polarity = polarity;
 	if (triggering == ACPI_EDGE_SENSITIVE)
-		resource->data.extended_irq.sharable = ACPI_EXCLUSIVE;
+		extended_irq->sharable = ACPI_EXCLUSIVE;
 	else
-		resource->data.extended_irq.sharable = ACPI_SHARED;
-	resource->data.extended_irq.interrupt_count = 1;
-	resource->data.extended_irq.interrupts[0] = p->start;
+		extended_irq->sharable = ACPI_SHARED;
+	extended_irq->interrupt_count = 1;
+	extended_irq->interrupts[0] = p->start;
 }
 
 static void pnpacpi_encode_dma(struct acpi_resource *resource,
 			       struct resource *p)
 {
+	struct acpi_resource_dma *dma = &resource->data.dma;
+
 	/* Note: pnp_assign_dma will copy pnp_dma->flags into p->flags */
 	switch (p->flags & IORESOURCE_DMA_SPEED_MASK) {
 	case IORESOURCE_DMA_TYPEA:
-		resource->data.dma.type = ACPI_TYPE_A;
+		dma->type = ACPI_TYPE_A;
 		break;
 	case IORESOURCE_DMA_TYPEB:
-		resource->data.dma.type = ACPI_TYPE_B;
+		dma->type = ACPI_TYPE_B;
 		break;
 	case IORESOURCE_DMA_TYPEF:
-		resource->data.dma.type = ACPI_TYPE_F;
+		dma->type = ACPI_TYPE_F;
 		break;
 	default:
-		resource->data.dma.type = ACPI_COMPATIBILITY;
+		dma->type = ACPI_COMPATIBILITY;
 	}
 
 	switch (p->flags & IORESOURCE_DMA_TYPE_MASK) {
 	case IORESOURCE_DMA_8BIT:
-		resource->data.dma.transfer = ACPI_TRANSFER_8;
+		dma->transfer = ACPI_TRANSFER_8;
 		break;
 	case IORESOURCE_DMA_8AND16BIT:
-		resource->data.dma.transfer = ACPI_TRANSFER_8_16;
+		dma->transfer = ACPI_TRANSFER_8_16;
 		break;
 	default:
-		resource->data.dma.transfer = ACPI_TRANSFER_16;
+		dma->transfer = ACPI_TRANSFER_16;
 	}
 
-	resource->data.dma.bus_master = !!(p->flags & IORESOURCE_DMA_MASTER);
-	resource->data.dma.channel_count = 1;
-	resource->data.dma.channels[0] = p->start;
+	dma->bus_master = !!(p->flags & IORESOURCE_DMA_MASTER);
+	dma->channel_count = 1;
+	dma->channels[0] = p->start;
 }
 
 static void pnpacpi_encode_io(struct acpi_resource *resource,
 			      struct resource *p)
 {
+	struct acpi_resource_io *io = &resource->data.io;
+
 	/* Note: pnp_assign_port will copy pnp_port->flags into p->flags */
-	resource->data.io.io_decode = (p->flags & PNP_PORT_FLAG_16BITADDR) ?
+	io->io_decode = (p->flags & PNP_PORT_FLAG_16BITADDR) ?
 	    ACPI_DECODE_16 : ACPI_DECODE_10;
-	resource->data.io.minimum = p->start;
-	resource->data.io.maximum = p->end;
-	resource->data.io.alignment = 0;	/* Correct? */
-	resource->data.io.address_length = p->end - p->start + 1;
+	io->minimum = p->start;
+	io->maximum = p->end;
+	io->alignment = 0;	/* Correct? */
+	io->address_length = p->end - p->start + 1;
 }
 
 static void pnpacpi_encode_fixed_io(struct acpi_resource *resource,
 				    struct resource *p)
 {
-	resource->data.fixed_io.address = p->start;
-	resource->data.fixed_io.address_length = p->end - p->start + 1;
+	struct acpi_resource_fixed_io *fixed_io = &resource->data.fixed_io;
+
+	fixed_io->address = p->start;
+	fixed_io->address_length = p->end - p->start + 1;
 }
 
 static void pnpacpi_encode_mem24(struct acpi_resource *resource,
 				 struct resource *p)
 {
+	struct acpi_resource_memory24 *memory24 = &resource->data.memory24;
+
 	/* Note: pnp_assign_mem will copy pnp_mem->flags into p->flags */
-	resource->data.memory24.write_protect =
+	memory24->write_protect =
 	    (p->flags & IORESOURCE_MEM_WRITEABLE) ?
 	    ACPI_READ_WRITE_MEMORY : ACPI_READ_ONLY_MEMORY;
-	resource->data.memory24.minimum = p->start;
-	resource->data.memory24.maximum = p->end;
-	resource->data.memory24.alignment = 0;
-	resource->data.memory24.address_length = p->end - p->start + 1;
+	memory24->minimum = p->start;
+	memory24->maximum = p->end;
+	memory24->alignment = 0;
+	memory24->address_length = p->end - p->start + 1;
 }
 
 static void pnpacpi_encode_mem32(struct acpi_resource *resource,
 				 struct resource *p)
 {
-	resource->data.memory32.write_protect =
+	struct acpi_resource_memory32 *memory32 = &resource->data.memory32;
+
+	memory32->write_protect =
 	    (p->flags & IORESOURCE_MEM_WRITEABLE) ?
 	    ACPI_READ_WRITE_MEMORY : ACPI_READ_ONLY_MEMORY;
-	resource->data.memory32.minimum = p->start;
-	resource->data.memory32.maximum = p->end;
-	resource->data.memory32.alignment = 0;
-	resource->data.memory32.address_length = p->end - p->start + 1;
+	memory32->minimum = p->start;
+	memory32->maximum = p->end;
+	memory32->alignment = 0;
+	memory32->address_length = p->end - p->start + 1;
 }
 
 static void pnpacpi_encode_fixed_mem32(struct acpi_resource *resource,
 				       struct resource *p)
 {
-	resource->data.fixed_memory32.write_protect =
+	struct acpi_resource_fixed_memory32 *fixed_memory32 = &resource->data.fixed_memory32;
+
+	fixed_memory32->write_protect =
 	    (p->flags & IORESOURCE_MEM_WRITEABLE) ?
 	    ACPI_READ_WRITE_MEMORY : ACPI_READ_ONLY_MEMORY;
-	resource->data.fixed_memory32.address = p->start;
-	resource->data.fixed_memory32.address_length = p->end - p->start + 1;
+	fixed_memory32->address = p->start;
+	fixed_memory32->address_length = p->end - p->start + 1;
 }
 
 int pnpacpi_encode_resources(struct pnp_resource_table *res_table,

-- 

^ permalink raw reply	[flat|nested] 80+ messages in thread

* [patch 14/54] PNPACPI: hoist dma_flags() out of pnpacpi_parse_allocated_dmaresource()
  2008-04-25 18:38 [patch 00/54] PNP cleanup, v4 Bjorn Helgaas
                   ` (12 preceding siblings ...)
  2008-04-25 18:38 ` [patch 13/54] PNPACPI: use temporaries to reduce repetition Bjorn Helgaas
@ 2008-04-25 18:38 ` Bjorn Helgaas
  2008-04-25 18:38 ` [patch 15/54] PNPACPI: extend irq_flags() to set IORESOURCE_IRQ_SHAREABLE when appropriate Bjorn Helgaas
                   ` (40 subsequent siblings)
  54 siblings, 0 replies; 80+ messages in thread
From: Bjorn Helgaas @ 2008-04-25 18:38 UTC (permalink / raw)
  To: Len Brown
  Cc: linux-acpi, Rene Herman, linux-kernel, Adam Belay, Adam M Belay,
	Li Shaohua, Matthieu Castet, Thomas Renninger, Rene Herman,
	Jaroslav Kysela, Andrew Morton

[-- Attachment #1: pnpacpi-hoist-dma-flags --]
[-- Type: text/plain, Size: 1435 bytes --]

Hoist dma_flags() out of pnpacpi_parse_allocated_dmaresource() into its
caller.  This makes pnpacpi_parse_allocated_dmaresource() more similar
to pnpbios_parse_allocated_dmaresource().

Signed-off-by: Bjorn Helgaas <bjorn.helgaas@hp.com>
Acked-By: Rene Herman <rene.herman@gmail.com>

Index: work10/drivers/pnp/pnpacpi/rsparser.c
===================================================================
--- work10.orig/drivers/pnp/pnpacpi/rsparser.c	2008-04-25 11:14:53.000000000 -0600
+++ work10/drivers/pnp/pnpacpi/rsparser.c	2008-04-25 11:14:53.000000000 -0600
@@ -169,8 +169,7 @@
 }
 
 static void pnpacpi_parse_allocated_dmaresource(struct pnp_resource_table *res,
-						u32 dma, int type,
-						int bus_master, int transfer)
+						u32 dma, int flags)
 {
 	int i = 0;
 	static unsigned char warned;
@@ -180,8 +179,7 @@
 		i++;
 	if (i < PNP_MAX_DMA) {
 		res->dma_resource[i].flags = IORESOURCE_DMA;	// Also clears _UNSET flag
-		res->dma_resource[i].flags |=
-		    dma_flags(type, bus_master, transfer);
+		res->dma_resource[i].flags |= flags;
 		if (dma == -1) {
 			res->dma_resource[i].flags |= IORESOURCE_DISABLED;
 			return;
@@ -311,9 +309,8 @@
 		if (dma->channel_count > 0)
 			pnpacpi_parse_allocated_dmaresource(res_table,
 				dma->channels[0],
-				dma->type,
-				dma->bus_master,
-				dma->transfer);
+				dma_flags(dma->type, dma->bus_master,
+					  dma->transfer));
 		break;
 
 	case ACPI_RESOURCE_TYPE_IO:

-- 

^ permalink raw reply	[flat|nested] 80+ messages in thread

* [patch 15/54] PNPACPI: extend irq_flags() to set IORESOURCE_IRQ_SHAREABLE when appropriate
  2008-04-25 18:38 [patch 00/54] PNP cleanup, v4 Bjorn Helgaas
                   ` (13 preceding siblings ...)
  2008-04-25 18:38 ` [patch 14/54] PNPACPI: hoist dma_flags() out of pnpacpi_parse_allocated_dmaresource() Bjorn Helgaas
@ 2008-04-25 18:38 ` Bjorn Helgaas
  2008-04-25 18:38 ` [patch 16/54] PNPACPI: pass pnp_dev instead of acpi_handle Bjorn Helgaas
                   ` (39 subsequent siblings)
  54 siblings, 0 replies; 80+ messages in thread
From: Bjorn Helgaas @ 2008-04-25 18:38 UTC (permalink / raw)
  To: Len Brown
  Cc: linux-acpi, Rene Herman, linux-kernel, Adam Belay, Adam M Belay,
	Li Shaohua, Matthieu Castet, Thomas Renninger, Rene Herman,
	Jaroslav Kysela, Andrew Morton

[-- Attachment #1: pnpacpi-add-shareability-to-irq-flags --]
[-- Type: text/plain, Size: 2563 bytes --]

This simplifies IRQ resource parsing slightly by computing all the
IORESOURCE_IRQ_* flags at the same time.

This also keeps track of shareability information when parsing options
from _PRS.  Previously we ignored shareability in _PRS.

Signed-off-by: Bjorn Helgaas <bjorn.helgaas@hp.com>
Acked-By: Rene Herman <rene.herman@gmail.com>

Index: work10/drivers/pnp/pnpacpi/rsparser.c
===================================================================
--- work10.orig/drivers/pnp/pnpacpi/rsparser.c	2008-04-25 11:14:53.000000000 -0600
+++ work10/drivers/pnp/pnpacpi/rsparser.c	2008-04-25 11:14:54.000000000 -0600
@@ -32,19 +32,26 @@
 /*
  * Allocated Resources
  */
-static int irq_flags(int triggering, int polarity)
+static int irq_flags(int triggering, int polarity, int shareable)
 {
+	int flags;
+
 	if (triggering == ACPI_LEVEL_SENSITIVE) {
 		if (polarity == ACPI_ACTIVE_LOW)
-			return IORESOURCE_IRQ_LOWLEVEL;
+			flags = IORESOURCE_IRQ_LOWLEVEL;
 		else
-			return IORESOURCE_IRQ_HIGHLEVEL;
+			flags = IORESOURCE_IRQ_HIGHLEVEL;
 	} else {
 		if (polarity == ACPI_ACTIVE_LOW)
-			return IORESOURCE_IRQ_LOWEDGE;
+			flags = IORESOURCE_IRQ_LOWEDGE;
 		else
-			return IORESOURCE_IRQ_HIGHEDGE;
+			flags = IORESOURCE_IRQ_HIGHEDGE;
 	}
+
+	if (shareable)
+		flags |= IORESOURCE_IRQ_SHAREABLE;
+
+	return flags;
 }
 
 static void decode_irq_flags(int flag, int *triggering, int *polarity)
@@ -110,16 +117,13 @@
 	}
 
 	res->irq_resource[i].flags = IORESOURCE_IRQ;	// Also clears _UNSET flag
-	res->irq_resource[i].flags |= irq_flags(triggering, polarity);
+	res->irq_resource[i].flags |= irq_flags(triggering, polarity, shareable);
 	irq = acpi_register_gsi(gsi, triggering, polarity);
 	if (irq < 0) {
 		res->irq_resource[i].flags |= IORESOURCE_DISABLED;
 		return;
 	}
 
-	if (shareable)
-		res->irq_resource[i].flags |= IORESOURCE_IRQ_SHAREABLE;
-
 	res->irq_resource[i].start = irq;
 	res->irq_resource[i].end = irq;
 	pcibios_penalize_isa_irq(irq, 1);
@@ -441,7 +445,7 @@
 	for (i = 0; i < p->interrupt_count; i++)
 		if (p->interrupts[i])
 			__set_bit(p->interrupts[i], irq->map);
-	irq->flags = irq_flags(p->triggering, p->polarity);
+	irq->flags = irq_flags(p->triggering, p->polarity, p->sharable);
 
 	pnp_register_irq_resource(option, irq);
 }
@@ -461,7 +465,7 @@
 	for (i = 0; i < p->interrupt_count; i++)
 		if (p->interrupts[i])
 			__set_bit(p->interrupts[i], irq->map);
-	irq->flags = irq_flags(p->triggering, p->polarity);
+	irq->flags = irq_flags(p->triggering, p->polarity, p->sharable);
 
 	pnp_register_irq_resource(option, irq);
 }

-- 

^ permalink raw reply	[flat|nested] 80+ messages in thread

* [patch 16/54] PNPACPI: pass pnp_dev instead of acpi_handle
  2008-04-25 18:38 [patch 00/54] PNP cleanup, v4 Bjorn Helgaas
                   ` (14 preceding siblings ...)
  2008-04-25 18:38 ` [patch 15/54] PNPACPI: extend irq_flags() to set IORESOURCE_IRQ_SHAREABLE when appropriate Bjorn Helgaas
@ 2008-04-25 18:38 ` Bjorn Helgaas
  2008-04-25 18:38 ` [patch 17/54] PNP: add debug output to option registration Bjorn Helgaas
                   ` (38 subsequent siblings)
  54 siblings, 0 replies; 80+ messages in thread
From: Bjorn Helgaas @ 2008-04-25 18:38 UTC (permalink / raw)
  To: Len Brown
  Cc: linux-acpi, Rene Herman, linux-kernel, Adam Belay, Adam M Belay,
	Li Shaohua, Matthieu Castet, Thomas Renninger, Rene Herman,
	Jaroslav Kysela, Andrew Morton

[-- Attachment #1: pnpacpi-use-pnp_dev --]
[-- Type: text/plain, Size: 2112 bytes --]

Pass the pnp_dev pointer when possible instead of the acpi_handle.
This allows better error messages and reduces the chance of error
in the caller.

Signed-off-by: Bjorn Helgaas <bjorn.helgaas@hp.com>
Acked-By: Rene Herman <rene.herman@gmail.com>

Index: work10/drivers/pnp/pnpacpi/core.c
===================================================================
--- work10.orig/drivers/pnp/pnpacpi/core.c	2008-04-25 11:14:49.000000000 -0600
+++ work10/drivers/pnp/pnpacpi/core.c	2008-04-25 11:14:54.000000000 -0600
@@ -88,10 +88,10 @@
 {
 	acpi_handle handle = dev->data;
 	struct acpi_buffer buffer;
-	int ret = 0;
+	int ret;
 	acpi_status status;
 
-	ret = pnpacpi_build_resource_template(handle, &buffer);
+	ret = pnpacpi_build_resource_template(dev, &buffer);
 	if (ret)
 		return ret;
 	ret = pnpacpi_encode_resources(res, &buffer);
Index: work10/drivers/pnp/pnpacpi/pnpacpi.h
===================================================================
--- work10.orig/drivers/pnp/pnpacpi/pnpacpi.h	2008-04-25 11:12:17.000000000 -0600
+++ work10/drivers/pnp/pnpacpi/pnpacpi.h	2008-04-25 11:14:54.000000000 -0600
@@ -8,5 +8,5 @@
 acpi_status pnpacpi_parse_allocated_resource(acpi_handle, struct pnp_resource_table*);
 acpi_status pnpacpi_parse_resource_option_data(acpi_handle, struct pnp_dev*);
 int pnpacpi_encode_resources(struct pnp_resource_table *, struct acpi_buffer *);
-int pnpacpi_build_resource_template(acpi_handle, struct acpi_buffer*);
+int pnpacpi_build_resource_template(struct pnp_dev *, struct acpi_buffer *);
 #endif
Index: work10/drivers/pnp/pnpacpi/rsparser.c
===================================================================
--- work10.orig/drivers/pnp/pnpacpi/rsparser.c	2008-04-25 11:14:54.000000000 -0600
+++ work10/drivers/pnp/pnpacpi/rsparser.c	2008-04-25 11:14:54.000000000 -0600
@@ -777,9 +777,10 @@
 	return AE_OK;
 }
 
-int pnpacpi_build_resource_template(acpi_handle handle,
+int pnpacpi_build_resource_template(struct pnp_dev *dev,
 				    struct acpi_buffer *buffer)
 {
+	acpi_handle handle = dev->data;
 	struct acpi_resource *resource;
 	int res_cnt = 0;
 	acpi_status status;

-- 

^ permalink raw reply	[flat|nested] 80+ messages in thread

* [patch 17/54] PNP: add debug output to option registration
  2008-04-25 18:38 [patch 00/54] PNP cleanup, v4 Bjorn Helgaas
                   ` (15 preceding siblings ...)
  2008-04-25 18:38 ` [patch 16/54] PNPACPI: pass pnp_dev instead of acpi_handle Bjorn Helgaas
@ 2008-04-25 18:38 ` Bjorn Helgaas
  2008-04-25 18:38 ` [patch 18/54] PNP: remove pnp_resource_table from internal get/set interfaces Bjorn Helgaas
                   ` (37 subsequent siblings)
  54 siblings, 0 replies; 80+ messages in thread
From: Bjorn Helgaas @ 2008-04-25 18:38 UTC (permalink / raw)
  To: Len Brown
  Cc: linux-acpi, linux-kernel, Adam Belay, Adam M Belay, Li Shaohua,
	Matthieu Castet, Thomas Renninger, Rene Herman, Jaroslav Kysela,
	Andrew Morton

[-- Attachment #1: pnp-add-option-registration-debug-output --]
[-- Type: text/plain, Size: 23558 bytes --]

Add debug output to resource option registration functions (enabled
by CONFIG_PNP_DEBUG).  This uses dev_printk, so I had to add pnp_dev
arguments at the same time.

Signed-off-by: Bjorn Helgaas <bjorn.helgaas@hp.com>

---
 drivers/pnp/isapnp/core.c      |   49 +++++++++++++++++------------
 drivers/pnp/pnpacpi/rsparser.c |   67 +++++++++++++++++++++++------------------
 drivers/pnp/pnpbios/rsparser.c |   53 ++++++++++++++++++--------------
 drivers/pnp/resource.c         |   34 ++++++++++++++++++--
 include/linux/pnp.h            |   11 ++++--
 5 files changed, 134 insertions(+), 80 deletions(-)

Index: work10/drivers/pnp/resource.c
===================================================================
--- work10.orig/drivers/pnp/resource.c	2008-04-25 11:12:17.000000000 -0600
+++ work10/drivers/pnp/resource.c	2008-04-25 11:14:55.000000000 -0600
@@ -53,6 +53,8 @@
 	if (dev->independent)
 		dev_err(&dev->dev, "independent resource already registered\n");
 	dev->independent = option;
+
+	dev_dbg(&dev->dev, "new independent option\n");
 	return option;
 }
 
@@ -70,12 +72,18 @@
 		parent->next = option;
 	} else
 		dev->dependent = option;
+
+	dev_dbg(&dev->dev, "new dependent option (priority 0x%x)\n", priority);
 	return option;
 }
 
-int pnp_register_irq_resource(struct pnp_option *option, struct pnp_irq *data)
+int pnp_register_irq_resource(struct pnp_dev *dev, struct pnp_option *option,
+			      struct pnp_irq *data)
 {
 	struct pnp_irq *ptr;
+#ifdef DEBUG
+	char buf[PNP_IRQ_NR];   /* hex-encoded, so this is overkill but safe */
+#endif
 
 	ptr = option->irq;
 	while (ptr && ptr->next)
@@ -94,10 +102,17 @@
 				pcibios_penalize_isa_irq(i, 0);
 	}
 #endif
+
+#ifdef DEBUG
+	bitmap_scnprintf(buf, sizeof(buf), data->map, PNP_IRQ_NR);
+	dev_dbg(&dev->dev, "  irq bitmask %s flags 0x%x\n", buf,
+		data->flags);
+#endif
 	return 0;
 }
 
-int pnp_register_dma_resource(struct pnp_option *option, struct pnp_dma *data)
+int pnp_register_dma_resource(struct pnp_dev *dev, struct pnp_option *option,
+			      struct pnp_dma *data)
 {
 	struct pnp_dma *ptr;
 
@@ -109,10 +124,13 @@
 	else
 		option->dma = data;
 
+	dev_dbg(&dev->dev, "  dma bitmask 0x%x flags 0x%x\n", data->map,
+		data->flags);
 	return 0;
 }
 
-int pnp_register_port_resource(struct pnp_option *option, struct pnp_port *data)
+int pnp_register_port_resource(struct pnp_dev *dev, struct pnp_option *option,
+			       struct pnp_port *data)
 {
 	struct pnp_port *ptr;
 
@@ -124,10 +142,14 @@
 	else
 		option->port = data;
 
+	dev_dbg(&dev->dev, "  io  "
+		"min 0x%x max 0x%x align %d size %d flags 0x%x\n",
+		data->min, data->max, data->align, data->size, data->flags);
 	return 0;
 }
 
-int pnp_register_mem_resource(struct pnp_option *option, struct pnp_mem *data)
+int pnp_register_mem_resource(struct pnp_dev *dev, struct pnp_option *option,
+			      struct pnp_mem *data)
 {
 	struct pnp_mem *ptr;
 
@@ -138,6 +160,10 @@
 		ptr->next = data;
 	else
 		option->mem = data;
+
+	dev_dbg(&dev->dev, "  mem "
+		"min 0x%x max 0x%x align %d size %d flags 0x%x\n",
+		data->min, data->max, data->align, data->size, data->flags);
 	return 0;
 }
 
Index: work10/include/linux/pnp.h
===================================================================
--- work10.orig/include/linux/pnp.h	2008-04-25 11:14:50.000000000 -0600
+++ work10/include/linux/pnp.h	2008-04-25 11:14:55.000000000 -0600
@@ -382,11 +382,14 @@
 struct pnp_option *pnp_register_independent_option(struct pnp_dev *dev);
 struct pnp_option *pnp_register_dependent_option(struct pnp_dev *dev,
 						 int priority);
-int pnp_register_irq_resource(struct pnp_option *option, struct pnp_irq *data);
-int pnp_register_dma_resource(struct pnp_option *option, struct pnp_dma *data);
-int pnp_register_port_resource(struct pnp_option *option,
+int pnp_register_irq_resource(struct pnp_dev *dev, struct pnp_option *option,
+			      struct pnp_irq *data);
+int pnp_register_dma_resource(struct pnp_dev *dev, struct pnp_option *option,
+			      struct pnp_dma *data);
+int pnp_register_port_resource(struct pnp_dev *dev, struct pnp_option *option,
 			       struct pnp_port *data);
-int pnp_register_mem_resource(struct pnp_option *option, struct pnp_mem *data);
+int pnp_register_mem_resource(struct pnp_dev *dev, struct pnp_option *option,
+			      struct pnp_mem *data);
 void pnp_init_resource_table(struct pnp_resource_table *table);
 int pnp_manual_config_dev(struct pnp_dev *dev, struct pnp_resource_table *res,
 			  int mode);
@@ -430,10 +433,10 @@
 /* resource management */
 static inline struct pnp_option *pnp_register_independent_option(struct pnp_dev *dev) { return NULL; }
 static inline struct pnp_option *pnp_register_dependent_option(struct pnp_dev *dev, int priority) { return NULL; }
-static inline int pnp_register_irq_resource(struct pnp_option *option, struct pnp_irq *data) { return -ENODEV; }
-static inline int pnp_register_dma_resource(struct pnp_option *option, struct pnp_dma *data) { return -ENODEV; }
-static inline int pnp_register_port_resource(struct pnp_option *option, struct pnp_port *data) { return -ENODEV; }
-static inline int pnp_register_mem_resource(struct pnp_option *option, struct pnp_mem *data) { return -ENODEV; }
+static inline int pnp_register_irq_resource(struct pnp_dev *dev, struct pnp_option *option, struct pnp_irq *data) { return -ENODEV; }
+static inline int pnp_register_dma_resource(struct pnp_dev *dev, struct pnp_option *option, struct pnp_dma *data) { return -ENODEV; }
+static inline int pnp_register_port_resource(struct pnp_dev *dev, struct pnp_option *option, struct pnp_port *data) { return -ENODEV; }
+static inline int pnp_register_mem_resource(struct pnp_dev *dev, struct pnp_option *option, struct pnp_mem *data) { return -ENODEV; }
 static inline void pnp_init_resource_table(struct pnp_resource_table *table) { }
 static inline int pnp_manual_config_dev(struct pnp_dev *dev, struct pnp_resource_table *res, int mode) { return -ENODEV; }
 static inline int pnp_auto_config_dev(struct pnp_dev *dev) { return -ENODEV; }
Index: work10/drivers/pnp/isapnp/core.c
===================================================================
--- work10.orig/drivers/pnp/isapnp/core.c	2008-04-25 11:14:51.000000000 -0600
+++ work10/drivers/pnp/isapnp/core.c	2008-04-25 11:14:55.000000000 -0600
@@ -431,7 +431,8 @@
 /*
  *  Add IRQ resource to resources list.
  */
-static void __init isapnp_parse_irq_resource(struct pnp_option *option,
+static void __init isapnp_parse_irq_resource(struct pnp_dev *dev,
+					     struct pnp_option *option,
 					     int size)
 {
 	unsigned char tmp[3];
@@ -448,13 +449,14 @@
 		irq->flags = tmp[2];
 	else
 		irq->flags = IORESOURCE_IRQ_HIGHEDGE;
-	pnp_register_irq_resource(option, irq);
+	pnp_register_irq_resource(dev, option, irq);
 }
 
 /*
  *  Add DMA resource to resources list.
  */
-static void __init isapnp_parse_dma_resource(struct pnp_option *option,
+static void __init isapnp_parse_dma_resource(struct pnp_dev *dev,
+					     struct pnp_option *option,
 					     int size)
 {
 	unsigned char tmp[2];
@@ -466,13 +468,14 @@
 		return;
 	dma->map = tmp[0];
 	dma->flags = tmp[1];
-	pnp_register_dma_resource(option, dma);
+	pnp_register_dma_resource(dev, option, dma);
 }
 
 /*
  *  Add port resource to resources list.
  */
-static void __init isapnp_parse_port_resource(struct pnp_option *option,
+static void __init isapnp_parse_port_resource(struct pnp_dev *dev,
+					      struct pnp_option *option,
 					      int size)
 {
 	unsigned char tmp[7];
@@ -487,13 +490,14 @@
 	port->align = tmp[5];
 	port->size = tmp[6];
 	port->flags = tmp[0] ? PNP_PORT_FLAG_16BITADDR : 0;
-	pnp_register_port_resource(option, port);
+	pnp_register_port_resource(dev, option, port);
 }
 
 /*
  *  Add fixed port resource to resources list.
  */
-static void __init isapnp_parse_fixed_port_resource(struct pnp_option *option,
+static void __init isapnp_parse_fixed_port_resource(struct pnp_dev *dev,
+						    struct pnp_option *option,
 						    int size)
 {
 	unsigned char tmp[3];
@@ -507,13 +511,14 @@
 	port->size = tmp[2];
 	port->align = 0;
 	port->flags = PNP_PORT_FLAG_FIXED;
-	pnp_register_port_resource(option, port);
+	pnp_register_port_resource(dev, option, port);
 }
 
 /*
  *  Add memory resource to resources list.
  */
-static void __init isapnp_parse_mem_resource(struct pnp_option *option,
+static void __init isapnp_parse_mem_resource(struct pnp_dev *dev,
+					     struct pnp_option *option,
 					     int size)
 {
 	unsigned char tmp[9];
@@ -528,13 +533,14 @@
 	mem->align = (tmp[6] << 8) | tmp[5];
 	mem->size = ((tmp[8] << 8) | tmp[7]) << 8;
 	mem->flags = tmp[0];
-	pnp_register_mem_resource(option, mem);
+	pnp_register_mem_resource(dev, option, mem);
 }
 
 /*
  *  Add 32-bit memory resource to resources list.
  */
-static void __init isapnp_parse_mem32_resource(struct pnp_option *option,
+static void __init isapnp_parse_mem32_resource(struct pnp_dev *dev,
+					       struct pnp_option *option,
 					       int size)
 {
 	unsigned char tmp[17];
@@ -551,13 +557,14 @@
 	mem->size =
 	    (tmp[16] << 24) | (tmp[15] << 16) | (tmp[14] << 8) | tmp[13];
 	mem->flags = tmp[0];
-	pnp_register_mem_resource(option, mem);
+	pnp_register_mem_resource(dev, option, mem);
 }
 
 /*
  *  Add 32-bit fixed memory resource to resources list.
  */
-static void __init isapnp_parse_fixed_mem32_resource(struct pnp_option *option,
+static void __init isapnp_parse_fixed_mem32_resource(struct pnp_dev *dev,
+						     struct pnp_option *option,
 						     int size)
 {
 	unsigned char tmp[9];
@@ -572,7 +579,7 @@
 	mem->size = (tmp[8] << 24) | (tmp[7] << 16) | (tmp[6] << 8) | tmp[5];
 	mem->align = 0;
 	mem->flags = tmp[0];
-	pnp_register_mem_resource(option, mem);
+	pnp_register_mem_resource(dev, option, mem);
 }
 
 /*
@@ -656,13 +663,13 @@
 		case _STAG_IRQ:
 			if (size < 2 || size > 3)
 				goto __skip;
-			isapnp_parse_irq_resource(option, size);
+			isapnp_parse_irq_resource(dev, option, size);
 			size = 0;
 			break;
 		case _STAG_DMA:
 			if (size != 2)
 				goto __skip;
-			isapnp_parse_dma_resource(option, size);
+			isapnp_parse_dma_resource(dev, option, size);
 			size = 0;
 			break;
 		case _STAG_STARTDEP:
@@ -682,17 +689,18 @@
 			if (size != 0)
 				goto __skip;
 			priority = 0;
+			dev_dbg(&dev->dev, "end dependent options\n");
 			break;
 		case _STAG_IOPORT:
 			if (size != 7)
 				goto __skip;
-			isapnp_parse_port_resource(option, size);
+			isapnp_parse_port_resource(dev, option, size);
 			size = 0;
 			break;
 		case _STAG_FIXEDIO:
 			if (size != 3)
 				goto __skip;
-			isapnp_parse_fixed_port_resource(option, size);
+			isapnp_parse_fixed_port_resource(dev, option, size);
 			size = 0;
 			break;
 		case _STAG_VENDOR:
@@ -700,7 +708,7 @@
 		case _LTAG_MEMRANGE:
 			if (size != 9)
 				goto __skip;
-			isapnp_parse_mem_resource(option, size);
+			isapnp_parse_mem_resource(dev, option, size);
 			size = 0;
 			break;
 		case _LTAG_ANSISTR:
@@ -715,13 +723,13 @@
 		case _LTAG_MEM32RANGE:
 			if (size != 17)
 				goto __skip;
-			isapnp_parse_mem32_resource(option, size);
+			isapnp_parse_mem32_resource(dev, option, size);
 			size = 0;
 			break;
 		case _LTAG_FIXEDMEM32RANGE:
 			if (size != 9)
 				goto __skip;
-			isapnp_parse_fixed_mem32_resource(option, size);
+			isapnp_parse_fixed_mem32_resource(dev, option, size);
 			size = 0;
 			break;
 		case _STAG_END:
Index: work10/drivers/pnp/pnpbios/rsparser.c
===================================================================
--- work10.orig/drivers/pnp/pnpbios/rsparser.c	2008-04-25 11:14:48.000000000 -0600
+++ work10/drivers/pnp/pnpbios/rsparser.c	2008-04-25 11:14:55.000000000 -0600
@@ -263,7 +263,8 @@
  * Resource Configuration Options
  */
 
-static __init void pnpbios_parse_mem_option(unsigned char *p, int size,
+static __init void pnpbios_parse_mem_option(struct pnp_dev *dev,
+					    unsigned char *p, int size,
 					    struct pnp_option *option)
 {
 	struct pnp_mem *mem;
@@ -276,10 +277,11 @@
 	mem->align = (p[9] << 8) | p[8];
 	mem->size = ((p[11] << 8) | p[10]) << 8;
 	mem->flags = p[3];
-	pnp_register_mem_resource(option, mem);
+	pnp_register_mem_resource(dev, option, mem);
 }
 
-static __init void pnpbios_parse_mem32_option(unsigned char *p, int size,
+static __init void pnpbios_parse_mem32_option(struct pnp_dev *dev,
+					      unsigned char *p, int size,
 					      struct pnp_option *option)
 {
 	struct pnp_mem *mem;
@@ -292,10 +294,11 @@
 	mem->align = (p[15] << 24) | (p[14] << 16) | (p[13] << 8) | p[12];
 	mem->size = (p[19] << 24) | (p[18] << 16) | (p[17] << 8) | p[16];
 	mem->flags = p[3];
-	pnp_register_mem_resource(option, mem);
+	pnp_register_mem_resource(dev, option, mem);
 }
 
-static __init void pnpbios_parse_fixed_mem32_option(unsigned char *p, int size,
+static __init void pnpbios_parse_fixed_mem32_option(struct pnp_dev *dev,
+						    unsigned char *p, int size,
 						    struct pnp_option *option)
 {
 	struct pnp_mem *mem;
@@ -307,11 +310,12 @@
 	mem->size = (p[11] << 24) | (p[10] << 16) | (p[9] << 8) | p[8];
 	mem->align = 0;
 	mem->flags = p[3];
-	pnp_register_mem_resource(option, mem);
+	pnp_register_mem_resource(dev, option, mem);
 }
 
-static __init void pnpbios_parse_irq_option(unsigned char *p, int size,
-				     struct pnp_option *option)
+static __init void pnpbios_parse_irq_option(struct pnp_dev *dev,
+					    unsigned char *p, int size,
+					    struct pnp_option *option)
 {
 	struct pnp_irq *irq;
 	unsigned long bits;
@@ -325,11 +329,12 @@
 		irq->flags = p[3];
 	else
 		irq->flags = IORESOURCE_IRQ_HIGHEDGE;
-	pnp_register_irq_resource(option, irq);
+	pnp_register_irq_resource(dev, option, irq);
 }
 
-static __init void pnpbios_parse_dma_option(unsigned char *p, int size,
-				     struct pnp_option *option)
+static __init void pnpbios_parse_dma_option(struct pnp_dev *dev,
+					    unsigned char *p, int size,
+					    struct pnp_option *option)
 {
 	struct pnp_dma *dma;
 
@@ -338,10 +343,11 @@
 		return;
 	dma->map = p[1];
 	dma->flags = p[2];
-	pnp_register_dma_resource(option, dma);
+	pnp_register_dma_resource(dev, option, dma);
 }
 
-static __init void pnpbios_parse_port_option(unsigned char *p, int size,
+static __init void pnpbios_parse_port_option(struct pnp_dev *dev,
+					     unsigned char *p, int size,
 					     struct pnp_option *option)
 {
 	struct pnp_port *port;
@@ -354,10 +360,11 @@
 	port->align = p[6];
 	port->size = p[7];
 	port->flags = p[1] ? PNP_PORT_FLAG_16BITADDR : 0;
-	pnp_register_port_resource(option, port);
+	pnp_register_port_resource(dev, option, port);
 }
 
-static __init void pnpbios_parse_fixed_port_option(unsigned char *p, int size,
+static __init void pnpbios_parse_fixed_port_option(struct pnp_dev *dev,
+						   unsigned char *p, int size,
 						   struct pnp_option *option)
 {
 	struct pnp_port *port;
@@ -369,7 +376,7 @@
 	port->size = p[3];
 	port->align = 0;
 	port->flags = PNP_PORT_FLAG_FIXED;
-	pnp_register_port_resource(option, port);
+	pnp_register_port_resource(dev, option, port);
 }
 
 static __init unsigned char *
@@ -403,37 +410,37 @@
 		case LARGE_TAG_MEM:
 			if (len != 9)
 				goto len_err;
-			pnpbios_parse_mem_option(p, len, option);
+			pnpbios_parse_mem_option(dev, p, len, option);
 			break;
 
 		case LARGE_TAG_MEM32:
 			if (len != 17)
 				goto len_err;
-			pnpbios_parse_mem32_option(p, len, option);
+			pnpbios_parse_mem32_option(dev, p, len, option);
 			break;
 
 		case LARGE_TAG_FIXEDMEM32:
 			if (len != 9)
 				goto len_err;
-			pnpbios_parse_fixed_mem32_option(p, len, option);
+			pnpbios_parse_fixed_mem32_option(dev, p, len, option);
 			break;
 
 		case SMALL_TAG_IRQ:
 			if (len < 2 || len > 3)
 				goto len_err;
-			pnpbios_parse_irq_option(p, len, option);
+			pnpbios_parse_irq_option(dev, p, len, option);
 			break;
 
 		case SMALL_TAG_DMA:
 			if (len != 2)
 				goto len_err;
-			pnpbios_parse_dma_option(p, len, option);
+			pnpbios_parse_dma_option(dev, p, len, option);
 			break;
 
 		case SMALL_TAG_PORT:
 			if (len != 7)
 				goto len_err;
-			pnpbios_parse_port_option(p, len, option);
+			pnpbios_parse_port_option(dev, p, len, option);
 			break;
 
 		case SMALL_TAG_VENDOR:
@@ -443,7 +450,7 @@
 		case SMALL_TAG_FIXEDPORT:
 			if (len != 3)
 				goto len_err;
-			pnpbios_parse_fixed_port_option(p, len, option);
+			pnpbios_parse_fixed_port_option(dev, p, len, option);
 			break;
 
 		case SMALL_TAG_STARTDEP:
@@ -464,6 +471,7 @@
 				printk(KERN_WARNING
 				       "PnPBIOS: Missing SMALL_TAG_STARTDEP tag\n");
 			option = option_independent;
+			dev_dbg(&dev->dev, "end dependent options\n");
 			break;
 
 		case SMALL_TAG_END:
Index: work10/drivers/pnp/pnpacpi/rsparser.c
===================================================================
--- work10.orig/drivers/pnp/pnpacpi/rsparser.c	2008-04-25 11:14:54.000000000 -0600
+++ work10/drivers/pnp/pnpacpi/rsparser.c	2008-04-25 11:14:55.000000000 -0600
@@ -410,7 +410,8 @@
 				   pnpacpi_allocated_resource, res);
 }
 
-static __init void pnpacpi_parse_dma_option(struct pnp_option *option,
+static __init void pnpacpi_parse_dma_option(struct pnp_dev *dev,
+					    struct pnp_option *option,
 					    struct acpi_resource_dma *p)
 {
 	int i;
@@ -427,10 +428,11 @@
 
 	dma->flags = dma_flags(p->type, p->bus_master, p->transfer);
 
-	pnp_register_dma_resource(option, dma);
+	pnp_register_dma_resource(dev, option, dma);
 }
 
-static __init void pnpacpi_parse_irq_option(struct pnp_option *option,
+static __init void pnpacpi_parse_irq_option(struct pnp_dev *dev,
+					    struct pnp_option *option,
 					    struct acpi_resource_irq *p)
 {
 	int i;
@@ -447,10 +449,11 @@
 			__set_bit(p->interrupts[i], irq->map);
 	irq->flags = irq_flags(p->triggering, p->polarity, p->sharable);
 
-	pnp_register_irq_resource(option, irq);
+	pnp_register_irq_resource(dev, option, irq);
 }
 
-static __init void pnpacpi_parse_ext_irq_option(struct pnp_option *option,
+static __init void pnpacpi_parse_ext_irq_option(struct pnp_dev *dev,
+						struct pnp_option *option,
 					struct acpi_resource_extended_irq *p)
 {
 	int i;
@@ -467,10 +470,11 @@
 			__set_bit(p->interrupts[i], irq->map);
 	irq->flags = irq_flags(p->triggering, p->polarity, p->sharable);
 
-	pnp_register_irq_resource(option, irq);
+	pnp_register_irq_resource(dev, option, irq);
 }
 
-static __init void pnpacpi_parse_port_option(struct pnp_option *option,
+static __init void pnpacpi_parse_port_option(struct pnp_dev *dev,
+					     struct pnp_option *option,
 					     struct acpi_resource_io *io)
 {
 	struct pnp_port *port;
@@ -486,10 +490,11 @@
 	port->size = io->address_length;
 	port->flags = ACPI_DECODE_16 == io->io_decode ?
 	    PNP_PORT_FLAG_16BITADDR : 0;
-	pnp_register_port_resource(option, port);
+	pnp_register_port_resource(dev, option, port);
 }
 
-static __init void pnpacpi_parse_fixed_port_option(struct pnp_option *option,
+static __init void pnpacpi_parse_fixed_port_option(struct pnp_dev *dev,
+						   struct pnp_option *option,
 					struct acpi_resource_fixed_io *io)
 {
 	struct pnp_port *port;
@@ -503,10 +508,11 @@
 	port->size = io->address_length;
 	port->align = 0;
 	port->flags = PNP_PORT_FLAG_FIXED;
-	pnp_register_port_resource(option, port);
+	pnp_register_port_resource(dev, option, port);
 }
 
-static __init void pnpacpi_parse_mem24_option(struct pnp_option *option,
+static __init void pnpacpi_parse_mem24_option(struct pnp_dev *dev,
+					      struct pnp_option *option,
 					      struct acpi_resource_memory24 *p)
 {
 	struct pnp_mem *mem;
@@ -524,10 +530,11 @@
 	mem->flags = (ACPI_READ_WRITE_MEMORY == p->write_protect) ?
 	    IORESOURCE_MEM_WRITEABLE : 0;
 
-	pnp_register_mem_resource(option, mem);
+	pnp_register_mem_resource(dev, option, mem);
 }
 
-static __init void pnpacpi_parse_mem32_option(struct pnp_option *option,
+static __init void pnpacpi_parse_mem32_option(struct pnp_dev *dev,
+					      struct pnp_option *option,
 					      struct acpi_resource_memory32 *p)
 {
 	struct pnp_mem *mem;
@@ -545,10 +552,11 @@
 	mem->flags = (ACPI_READ_WRITE_MEMORY == p->write_protect) ?
 	    IORESOURCE_MEM_WRITEABLE : 0;
 
-	pnp_register_mem_resource(option, mem);
+	pnp_register_mem_resource(dev, option, mem);
 }
 
-static __init void pnpacpi_parse_fixed_mem32_option(struct pnp_option *option,
+static __init void pnpacpi_parse_fixed_mem32_option(struct pnp_dev *dev,
+						    struct pnp_option *option,
 					struct acpi_resource_fixed_memory32 *p)
 {
 	struct pnp_mem *mem;
@@ -565,10 +573,11 @@
 	mem->flags = (ACPI_READ_WRITE_MEMORY == p->write_protect) ?
 	    IORESOURCE_MEM_WRITEABLE : 0;
 
-	pnp_register_mem_resource(option, mem);
+	pnp_register_mem_resource(dev, option, mem);
 }
 
-static __init void pnpacpi_parse_address_option(struct pnp_option *option,
+static __init void pnpacpi_parse_address_option(struct pnp_dev *dev,
+						struct pnp_option *option,
 						struct acpi_resource *r)
 {
 	struct acpi_resource_address64 addr, *p = &addr;
@@ -596,7 +605,7 @@
 		mem->flags = (p->info.mem.write_protect ==
 			      ACPI_READ_WRITE_MEMORY) ? IORESOURCE_MEM_WRITEABLE
 		    : 0;
-		pnp_register_mem_resource(option, mem);
+		pnp_register_mem_resource(dev, option, mem);
 	} else if (p->resource_type == ACPI_IO_RANGE) {
 		port = kzalloc(sizeof(struct pnp_port), GFP_KERNEL);
 		if (!port)
@@ -605,7 +614,7 @@
 		port->size = p->address_length;
 		port->align = 0;
 		port->flags = PNP_PORT_FLAG_FIXED;
-		pnp_register_port_resource(option, port);
+		pnp_register_port_resource(dev, option, port);
 	}
 }
 
@@ -625,11 +634,11 @@
 
 	switch (res->type) {
 	case ACPI_RESOURCE_TYPE_IRQ:
-		pnpacpi_parse_irq_option(option, &res->data.irq);
+		pnpacpi_parse_irq_option(dev, option, &res->data.irq);
 		break;
 
 	case ACPI_RESOURCE_TYPE_DMA:
-		pnpacpi_parse_dma_option(option, &res->data.dma);
+		pnpacpi_parse_dma_option(dev, option, &res->data.dma);
 		break;
 
 	case ACPI_RESOURCE_TYPE_START_DEPENDENT:
@@ -664,14 +673,16 @@
 		}
 		parse_data->option = parse_data->option_independent;
 		parse_data->option_independent = NULL;
+		dev_dbg(&dev->dev, "end dependent options\n");
 		break;
 
 	case ACPI_RESOURCE_TYPE_IO:
-		pnpacpi_parse_port_option(option, &res->data.io);
+		pnpacpi_parse_port_option(dev, option, &res->data.io);
 		break;
 
 	case ACPI_RESOURCE_TYPE_FIXED_IO:
-		pnpacpi_parse_fixed_port_option(option, &res->data.fixed_io);
+		pnpacpi_parse_fixed_port_option(dev, option,
+					        &res->data.fixed_io);
 		break;
 
 	case ACPI_RESOURCE_TYPE_VENDOR:
@@ -679,29 +690,30 @@
 		break;
 
 	case ACPI_RESOURCE_TYPE_MEMORY24:
-		pnpacpi_parse_mem24_option(option, &res->data.memory24);
+		pnpacpi_parse_mem24_option(dev, option, &res->data.memory24);
 		break;
 
 	case ACPI_RESOURCE_TYPE_MEMORY32:
-		pnpacpi_parse_mem32_option(option, &res->data.memory32);
+		pnpacpi_parse_mem32_option(dev, option, &res->data.memory32);
 		break;
 
 	case ACPI_RESOURCE_TYPE_FIXED_MEMORY32:
-		pnpacpi_parse_fixed_mem32_option(option,
+		pnpacpi_parse_fixed_mem32_option(dev, option,
 						 &res->data.fixed_memory32);
 		break;
 
 	case ACPI_RESOURCE_TYPE_ADDRESS16:
 	case ACPI_RESOURCE_TYPE_ADDRESS32:
 	case ACPI_RESOURCE_TYPE_ADDRESS64:
-		pnpacpi_parse_address_option(option, res);
+		pnpacpi_parse_address_option(dev, option, res);
 		break;
 
 	case ACPI_RESOURCE_TYPE_EXTENDED_ADDRESS64:
 		break;
 
 	case ACPI_RESOURCE_TYPE_EXTENDED_IRQ:
-		pnpacpi_parse_ext_irq_option(option, &res->data.extended_irq);
+		pnpacpi_parse_ext_irq_option(dev, option,
+					     &res->data.extended_irq);
 		break;
 
 	case ACPI_RESOURCE_TYPE_GENERIC_REGISTER:

-- 

^ permalink raw reply	[flat|nested] 80+ messages in thread

* [patch 18/54] PNP: remove pnp_resource_table from internal get/set interfaces
  2008-04-25 18:38 [patch 00/54] PNP cleanup, v4 Bjorn Helgaas
                   ` (16 preceding siblings ...)
  2008-04-25 18:38 ` [patch 17/54] PNP: add debug output to option registration Bjorn Helgaas
@ 2008-04-25 18:38 ` Bjorn Helgaas
  2008-04-25 18:38 ` [patch 19/54] PNP: remove more pnp_resource_table arguments Bjorn Helgaas
                   ` (36 subsequent siblings)
  54 siblings, 0 replies; 80+ messages in thread
From: Bjorn Helgaas @ 2008-04-25 18:38 UTC (permalink / raw)
  To: Len Brown
  Cc: linux-acpi, Rene Herman, linux-kernel, Adam Belay, Adam M Belay,
	Li Shaohua, Matthieu Castet, Thomas Renninger, Rene Herman,
	Jaroslav Kysela, Andrew Morton

[-- Attachment #1: pnp-remove-pnp_resource_table-args-from-get-set --]
[-- Type: text/plain, Size: 5442 bytes --]

When we call protocol->get() and protocol->set() methods, we currently
supply pointers to both the pnp_dev and the pnp_resource_table even
though the pnp_resource_table should always be the one associated with
the pnp_dev.

This removes the pnp_resource_table arguments to make it clear that
these methods only operate on the specified pnp_dev.

Signed-off-by: Bjorn Helgaas <bjorn.helgaas@hp.com>
Acked-By: Rene Herman <rene.herman@gmail.com>

---
 include/linux/pnp.h        |    4 ++--
 drivers/pnp/interface.c    |    2 +-
 drivers/pnp/manager.c      |    2 +-
 drivers/pnp/isapnp/core.c  |   11 +++++------
 drivers/pnp/pnpacpi/core.c |    8 +++-----
 drivers/pnp/pnpbios/core.c |   10 ++++------
 6 files changed, 16 insertions(+), 21 deletions(-)

Index: work10/include/linux/pnp.h
===================================================================
--- work10.orig/include/linux/pnp.h	2008-04-25 11:14:55.000000000 -0600
+++ work10/include/linux/pnp.h	2008-04-25 11:14:55.000000000 -0600
@@ -328,8 +328,8 @@
 	char *name;
 
 	/* resource control functions */
-	int (*get) (struct pnp_dev *dev, struct pnp_resource_table *res);
-	int (*set) (struct pnp_dev *dev, struct pnp_resource_table *res);
+	int (*get) (struct pnp_dev *dev);
+	int (*set) (struct pnp_dev *dev);
 	int (*disable) (struct pnp_dev *dev);
 
 	/* protocol specific suspend/resume */
Index: work10/drivers/pnp/interface.c
===================================================================
--- work10.orig/drivers/pnp/interface.c	2008-04-25 11:12:16.000000000 -0600
+++ work10/drivers/pnp/interface.c	2008-04-25 11:14:55.000000000 -0600
@@ -364,7 +364,7 @@
 	if (!strnicmp(buf, "get", 3)) {
 		mutex_lock(&pnp_res_mutex);
 		if (pnp_can_read(dev))
-			dev->protocol->get(dev, &dev->res);
+			dev->protocol->get(dev);
 		mutex_unlock(&pnp_res_mutex);
 		goto done;
 	}
Index: work10/drivers/pnp/manager.c
===================================================================
--- work10.orig/drivers/pnp/manager.c	2008-04-25 11:12:16.000000000 -0600
+++ work10/drivers/pnp/manager.c	2008-04-25 11:14:55.000000000 -0600
@@ -473,7 +473,7 @@
 		return -EINVAL;
 	}
 
-	if (dev->protocol->set(dev, &dev->res) < 0) {
+	if (dev->protocol->set(dev) < 0) {
 		dev_err(&dev->dev, "activation failed\n");
 		return -EIO;
 	}
Index: work10/drivers/pnp/isapnp/core.c
===================================================================
--- work10.orig/drivers/pnp/isapnp/core.c	2008-04-25 11:14:55.000000000 -0600
+++ work10/drivers/pnp/isapnp/core.c	2008-04-25 11:14:55.000000000 -0600
@@ -976,21 +976,20 @@
 	return 0;
 }
 
-static int isapnp_get_resources(struct pnp_dev *dev,
-				struct pnp_resource_table *res)
+static int isapnp_get_resources(struct pnp_dev *dev)
 {
 	int ret;
 
-	pnp_init_resource_table(res);
+	pnp_init_resource_table(&dev->res);
 	isapnp_cfg_begin(dev->card->number, dev->number);
-	ret = isapnp_read_resources(dev, res);
+	ret = isapnp_read_resources(dev, &dev->res);
 	isapnp_cfg_end();
 	return ret;
 }
 
-static int isapnp_set_resources(struct pnp_dev *dev,
-				struct pnp_resource_table *res)
+static int isapnp_set_resources(struct pnp_dev *dev)
 {
+	struct pnp_resource_table *res = &dev->res;
 	int tmp;
 
 	isapnp_cfg_begin(dev->card->number, dev->number);
Index: work10/drivers/pnp/pnpacpi/core.c
===================================================================
--- work10.orig/drivers/pnp/pnpacpi/core.c	2008-04-25 11:14:54.000000000 -0600
+++ work10/drivers/pnp/pnpacpi/core.c	2008-04-25 11:14:55.000000000 -0600
@@ -73,8 +73,7 @@
 	return 1;
 }
 
-static int pnpacpi_get_resources(struct pnp_dev *dev,
-				 struct pnp_resource_table *res)
+static int pnpacpi_get_resources(struct pnp_dev *dev)
 {
 	acpi_status status;
 
@@ -83,8 +82,7 @@
 	return ACPI_FAILURE(status) ? -ENODEV : 0;
 }
 
-static int pnpacpi_set_resources(struct pnp_dev *dev,
-				 struct pnp_resource_table *res)
+static int pnpacpi_set_resources(struct pnp_dev *dev)
 {
 	acpi_handle handle = dev->data;
 	struct acpi_buffer buffer;
@@ -94,7 +92,7 @@
 	ret = pnpacpi_build_resource_template(dev, &buffer);
 	if (ret)
 		return ret;
-	ret = pnpacpi_encode_resources(res, &buffer);
+	ret = pnpacpi_encode_resources(&dev->res, &buffer);
 	if (ret) {
 		kfree(buffer.pointer);
 		return ret;
Index: work10/drivers/pnp/pnpbios/core.c
===================================================================
--- work10.orig/drivers/pnp/pnpbios/core.c	2008-04-25 11:14:49.000000000 -0600
+++ work10/drivers/pnp/pnpbios/core.c	2008-04-25 11:14:55.000000000 -0600
@@ -204,8 +204,7 @@
 
 #endif				/* CONFIG_HOTPLUG */
 
-static int pnpbios_get_resources(struct pnp_dev *dev,
-				 struct pnp_resource_table *res)
+static int pnpbios_get_resources(struct pnp_dev *dev)
 {
 	u8 nodenum = dev->number;
 	struct pnp_bios_node *node;
@@ -220,14 +219,13 @@
 		kfree(node);
 		return -ENODEV;
 	}
-	pnpbios_read_resources_from_node(res, node);
+	pnpbios_read_resources_from_node(&dev->res, node);
 	dev->active = pnp_is_active(dev);
 	kfree(node);
 	return 0;
 }
 
-static int pnpbios_set_resources(struct pnp_dev *dev,
-				 struct pnp_resource_table *res)
+static int pnpbios_set_resources(struct pnp_dev *dev)
 {
 	u8 nodenum = dev->number;
 	struct pnp_bios_node *node;
@@ -243,7 +241,7 @@
 		kfree(node);
 		return -ENODEV;
 	}
-	if (pnpbios_write_resources_to_node(res, node) < 0) {
+	if (pnpbios_write_resources_to_node(&dev->res, node) < 0) {
 		kfree(node);
 		return -1;
 	}

-- 

^ permalink raw reply	[flat|nested] 80+ messages in thread

* [patch 19/54] PNP: remove more pnp_resource_table arguments
  2008-04-25 18:38 [patch 00/54] PNP cleanup, v4 Bjorn Helgaas
                   ` (17 preceding siblings ...)
  2008-04-25 18:38 ` [patch 18/54] PNP: remove pnp_resource_table from internal get/set interfaces Bjorn Helgaas
@ 2008-04-25 18:38 ` Bjorn Helgaas
  2008-04-25 18:38 ` [patch 20/54] PNP: add debug output to encoders Bjorn Helgaas
                   ` (35 subsequent siblings)
  54 siblings, 0 replies; 80+ messages in thread
From: Bjorn Helgaas @ 2008-04-25 18:38 UTC (permalink / raw)
  To: Len Brown
  Cc: linux-acpi, Rene Herman, linux-kernel, Adam Belay, Adam M Belay,
	Li Shaohua, Matthieu Castet, Thomas Renninger, Rene Herman,
	Jaroslav Kysela, Andrew Morton

[-- Attachment #1: pnp-remove-more-pnp_resource_table-args --]
[-- Type: text/plain, Size: 17552 bytes --]

Stop passing around struct pnp_resource_table pointers.  In most cases,
the caller doesn't need to know how the resources are stored inside
the struct pnp_dev.

Signed-off-by: Bjorn Helgaas <bjorn.helgaas@hp.com>
Acked-By: Rene Herman <rene.herman@gmail.com>

---
 drivers/pnp/isapnp/core.c      |    6 ++--
 drivers/pnp/pnpacpi/core.c     |   11 ++-----
 drivers/pnp/pnpacpi/pnpacpi.h  |    6 ++--
 drivers/pnp/pnpacpi/rsparser.c |   55 +++++++++++++++++++++-----------------
 drivers/pnp/pnpbios/core.c     |    4 +-
 drivers/pnp/pnpbios/pnpbios.h  |    4 +-
 drivers/pnp/pnpbios/rsparser.c |   58 ++++++++++++++++++++---------------------
 7 files changed, 73 insertions(+), 71 deletions(-)

Index: work10/drivers/pnp/isapnp/core.c
===================================================================
--- work10.orig/drivers/pnp/isapnp/core.c	2008-04-25 11:14:55.000000000 -0600
+++ work10/drivers/pnp/isapnp/core.c	2008-04-25 11:14:56.000000000 -0600
@@ -932,9 +932,9 @@
 EXPORT_SYMBOL(isapnp_cfg_end);
 EXPORT_SYMBOL(isapnp_write_byte);
 
-static int isapnp_read_resources(struct pnp_dev *dev,
-				 struct pnp_resource_table *res)
+static int isapnp_read_resources(struct pnp_dev *dev)
 {
+	struct pnp_resource_table *res = &dev->res;
 	int tmp, ret;
 
 	dev->active = isapnp_read_byte(ISAPNP_CFG_ACTIVATE);
@@ -982,7 +982,7 @@
 
 	pnp_init_resource_table(&dev->res);
 	isapnp_cfg_begin(dev->card->number, dev->number);
-	ret = isapnp_read_resources(dev, &dev->res);
+	ret = isapnp_read_resources(dev);
 	isapnp_cfg_end();
 	return ret;
 }
Index: work10/drivers/pnp/pnpacpi/core.c
===================================================================
--- work10.orig/drivers/pnp/pnpacpi/core.c	2008-04-25 11:14:55.000000000 -0600
+++ work10/drivers/pnp/pnpacpi/core.c	2008-04-25 11:14:56.000000000 -0600
@@ -77,8 +77,7 @@
 {
 	acpi_status status;
 
-	status = pnpacpi_parse_allocated_resource((acpi_handle) dev->data,
-						  &dev->res);
+	status = pnpacpi_parse_allocated_resource(dev);
 	return ACPI_FAILURE(status) ? -ENODEV : 0;
 }
 
@@ -92,7 +91,7 @@
 	ret = pnpacpi_build_resource_template(dev, &buffer);
 	if (ret)
 		return ret;
-	ret = pnpacpi_encode_resources(&dev->res, &buffer);
+	ret = pnpacpi_encode_resources(dev, &buffer);
 	if (ret) {
 		kfree(buffer.pointer);
 		return ret;
@@ -183,8 +182,7 @@
 
 	if (dev->active) {
 		/* parse allocated resource */
-		status = pnpacpi_parse_allocated_resource(device->handle,
-							  &dev->res);
+		status = pnpacpi_parse_allocated_resource(dev);
 		if (ACPI_FAILURE(status) && (status != AE_NOT_FOUND)) {
 			pnp_err("PnPACPI: METHOD_NAME__CRS failure for %s",
 				acpi_device_hid(device));
@@ -192,8 +190,7 @@
 	}
 
 	if (dev->capabilities & PNP_CONFIGURABLE) {
-		status = pnpacpi_parse_resource_option_data(device->handle,
-							    dev);
+		status = pnpacpi_parse_resource_option_data(dev);
 		if (ACPI_FAILURE(status) && (status != AE_NOT_FOUND)) {
 			pnp_err("PnPACPI: METHOD_NAME__PRS failure for %s",
 				acpi_device_hid(device));
Index: work10/drivers/pnp/pnpacpi/pnpacpi.h
===================================================================
--- work10.orig/drivers/pnp/pnpacpi/pnpacpi.h	2008-04-25 11:14:54.000000000 -0600
+++ work10/drivers/pnp/pnpacpi/pnpacpi.h	2008-04-25 11:14:56.000000000 -0600
@@ -5,8 +5,8 @@
 #include <linux/acpi.h>
 #include <linux/pnp.h>
 
-acpi_status pnpacpi_parse_allocated_resource(acpi_handle, struct pnp_resource_table*);
-acpi_status pnpacpi_parse_resource_option_data(acpi_handle, struct pnp_dev*);
-int pnpacpi_encode_resources(struct pnp_resource_table *, struct acpi_buffer *);
+acpi_status pnpacpi_parse_allocated_resource(struct pnp_dev *);
+acpi_status pnpacpi_parse_resource_option_data(struct pnp_dev *);
+int pnpacpi_encode_resources(struct pnp_dev *, struct acpi_buffer *);
 int pnpacpi_build_resource_template(struct pnp_dev *, struct acpi_buffer *);
 #endif
Index: work10/drivers/pnp/pnpacpi/rsparser.c
===================================================================
--- work10.orig/drivers/pnp/pnpacpi/rsparser.c	2008-04-25 11:14:55.000000000 -0600
+++ work10/drivers/pnp/pnpacpi/rsparser.c	2008-04-25 11:14:56.000000000 -0600
@@ -76,10 +76,11 @@
 	}
 }
 
-static void pnpacpi_parse_allocated_irqresource(struct pnp_resource_table *res,
+static void pnpacpi_parse_allocated_irqresource(struct pnp_dev *dev,
 						u32 gsi, int triggering,
 						int polarity, int shareable)
 {
+	struct pnp_resource_table *res = &dev->res;
 	int i = 0;
 	int irq;
 	int p, t;
@@ -172,9 +173,10 @@
 	return flags;
 }
 
-static void pnpacpi_parse_allocated_dmaresource(struct pnp_resource_table *res,
+static void pnpacpi_parse_allocated_dmaresource(struct pnp_dev *dev,
 						u32 dma, int flags)
 {
+	struct pnp_resource_table *res = &dev->res;
 	int i = 0;
 	static unsigned char warned;
 
@@ -197,9 +199,10 @@
 	}
 }
 
-static void pnpacpi_parse_allocated_ioresource(struct pnp_resource_table *res,
+static void pnpacpi_parse_allocated_ioresource(struct pnp_dev *dev,
 					       u64 io, u64 len, int io_decode)
 {
+	struct pnp_resource_table *res = &dev->res;
 	int i = 0;
 	static unsigned char warned;
 
@@ -223,10 +226,11 @@
 	}
 }
 
-static void pnpacpi_parse_allocated_memresource(struct pnp_resource_table *res,
+static void pnpacpi_parse_allocated_memresource(struct pnp_dev *dev,
 						u64 mem, u64 len,
 						int write_protect)
 {
+	struct pnp_resource_table *res = &dev->res;
 	int i = 0;
 	static unsigned char warned;
 
@@ -251,7 +255,7 @@
 	}
 }
 
-static void pnpacpi_parse_allocated_address_space(struct pnp_resource_table *res_table,
+static void pnpacpi_parse_allocated_address_space(struct pnp_dev *dev,
 						  struct acpi_resource *res)
 {
 	struct acpi_resource_address64 addr, *p = &addr;
@@ -268,11 +272,11 @@
 		return;
 
 	if (p->resource_type == ACPI_MEMORY_RANGE)
-		pnpacpi_parse_allocated_memresource(res_table,
+		pnpacpi_parse_allocated_memresource(dev,
 			p->minimum, p->address_length,
 			p->info.mem.write_protect);
 	else if (p->resource_type == ACPI_IO_RANGE)
-		pnpacpi_parse_allocated_ioresource(res_table,
+		pnpacpi_parse_allocated_ioresource(dev,
 			p->minimum, p->address_length,
 			p->granularity == 0xfff ? ACPI_DECODE_10 :
 				ACPI_DECODE_16);
@@ -281,7 +285,7 @@
 static acpi_status pnpacpi_allocated_resource(struct acpi_resource *res,
 					      void *data)
 {
-	struct pnp_resource_table *res_table = data;
+	struct pnp_dev *dev = data;
 	struct acpi_resource_irq *irq;
 	struct acpi_resource_dma *dma;
 	struct acpi_resource_io *io;
@@ -300,7 +304,7 @@
 		 */
 		irq = &res->data.irq;
 		for (i = 0; i < irq->interrupt_count; i++) {
-			pnpacpi_parse_allocated_irqresource(res_table,
+			pnpacpi_parse_allocated_irqresource(dev,
 				irq->interrupts[i],
 				irq->triggering,
 				irq->polarity,
@@ -311,7 +315,7 @@
 	case ACPI_RESOURCE_TYPE_DMA:
 		dma = &res->data.dma;
 		if (dma->channel_count > 0)
-			pnpacpi_parse_allocated_dmaresource(res_table,
+			pnpacpi_parse_allocated_dmaresource(dev,
 				dma->channels[0],
 				dma_flags(dma->type, dma->bus_master,
 					  dma->transfer));
@@ -319,7 +323,7 @@
 
 	case ACPI_RESOURCE_TYPE_IO:
 		io = &res->data.io;
-		pnpacpi_parse_allocated_ioresource(res_table,
+		pnpacpi_parse_allocated_ioresource(dev,
 			io->minimum,
 			io->address_length,
 			io->io_decode);
@@ -331,7 +335,7 @@
 
 	case ACPI_RESOURCE_TYPE_FIXED_IO:
 		fixed_io = &res->data.fixed_io;
-		pnpacpi_parse_allocated_ioresource(res_table,
+		pnpacpi_parse_allocated_ioresource(dev,
 			fixed_io->address,
 			fixed_io->address_length,
 			ACPI_DECODE_10);
@@ -345,21 +349,21 @@
 
 	case ACPI_RESOURCE_TYPE_MEMORY24:
 		memory24 = &res->data.memory24;
-		pnpacpi_parse_allocated_memresource(res_table,
+		pnpacpi_parse_allocated_memresource(dev,
 			memory24->minimum,
 			memory24->address_length,
 			memory24->write_protect);
 		break;
 	case ACPI_RESOURCE_TYPE_MEMORY32:
 		memory32 = &res->data.memory32;
-		pnpacpi_parse_allocated_memresource(res_table,
+		pnpacpi_parse_allocated_memresource(dev,
 			memory32->minimum,
 			memory32->address_length,
 			memory32->write_protect);
 		break;
 	case ACPI_RESOURCE_TYPE_FIXED_MEMORY32:
 		fixed_memory32 = &res->data.fixed_memory32;
-		pnpacpi_parse_allocated_memresource(res_table,
+		pnpacpi_parse_allocated_memresource(dev,
 			fixed_memory32->address,
 			fixed_memory32->address_length,
 			fixed_memory32->write_protect);
@@ -367,7 +371,7 @@
 	case ACPI_RESOURCE_TYPE_ADDRESS16:
 	case ACPI_RESOURCE_TYPE_ADDRESS32:
 	case ACPI_RESOURCE_TYPE_ADDRESS64:
-		pnpacpi_parse_allocated_address_space(res_table, res);
+		pnpacpi_parse_allocated_address_space(dev, res);
 		break;
 
 	case ACPI_RESOURCE_TYPE_EXTENDED_ADDRESS64:
@@ -381,7 +385,7 @@
 			return AE_OK;
 
 		for (i = 0; i < extended_irq->interrupt_count; i++) {
-			pnpacpi_parse_allocated_irqresource(res_table,
+			pnpacpi_parse_allocated_irqresource(dev,
 				extended_irq->interrupts[i],
 				extended_irq->triggering,
 				extended_irq->polarity,
@@ -400,14 +404,15 @@
 	return AE_OK;
 }
 
-acpi_status pnpacpi_parse_allocated_resource(acpi_handle handle,
-					     struct pnp_resource_table * res)
+acpi_status pnpacpi_parse_allocated_resource(struct pnp_dev *dev)
 {
+	acpi_handle handle = dev->data;
+
 	/* Blank the resource table values */
-	pnp_init_resource_table(res);
+	pnp_init_resource_table(&dev->res);
 
 	return acpi_walk_resources(handle, METHOD_NAME__CRS,
-				   pnpacpi_allocated_resource, res);
+				   pnpacpi_allocated_resource, dev);
 }
 
 static __init void pnpacpi_parse_dma_option(struct pnp_dev *dev,
@@ -727,9 +732,9 @@
 	return AE_OK;
 }
 
-acpi_status __init pnpacpi_parse_resource_option_data(acpi_handle handle,
-						      struct pnp_dev *dev)
+acpi_status __init pnpacpi_parse_resource_option_data(struct pnp_dev *dev)
 {
+	acpi_handle handle = dev->data;
 	acpi_status status;
 	struct acpipnp_parse_option_s parse_data;
 
@@ -959,9 +964,9 @@
 	fixed_memory32->address_length = p->end - p->start + 1;
 }
 
-int pnpacpi_encode_resources(struct pnp_resource_table *res_table,
-			     struct acpi_buffer *buffer)
+int pnpacpi_encode_resources(struct pnp_dev *dev, struct acpi_buffer *buffer)
 {
+	struct pnp_resource_table *res_table = &dev->res;
 	int i = 0;
 	/* pnpacpi_build_resource_template allocates extra mem */
 	int res_cnt = (buffer->length - 1) / sizeof(struct acpi_resource) - 1;
Index: work10/drivers/pnp/pnpbios/core.c
===================================================================
--- work10.orig/drivers/pnp/pnpbios/core.c	2008-04-25 11:14:55.000000000 -0600
+++ work10/drivers/pnp/pnpbios/core.c	2008-04-25 11:14:56.000000000 -0600
@@ -219,7 +219,7 @@
 		kfree(node);
 		return -ENODEV;
 	}
-	pnpbios_read_resources_from_node(&dev->res, node);
+	pnpbios_read_resources_from_node(dev, node);
 	dev->active = pnp_is_active(dev);
 	kfree(node);
 	return 0;
@@ -241,7 +241,7 @@
 		kfree(node);
 		return -ENODEV;
 	}
-	if (pnpbios_write_resources_to_node(&dev->res, node) < 0) {
+	if (pnpbios_write_resources_to_node(dev, node) < 0) {
 		kfree(node);
 		return -1;
 	}
Index: work10/drivers/pnp/pnpbios/pnpbios.h
===================================================================
--- work10.orig/drivers/pnp/pnpbios/pnpbios.h	2008-04-25 11:12:16.000000000 -0600
+++ work10/drivers/pnp/pnpbios/pnpbios.h	2008-04-25 11:14:56.000000000 -0600
@@ -28,8 +28,8 @@
 extern int  pnpbios_dont_use_current_config;
 
 extern int pnpbios_parse_data_stream(struct pnp_dev *dev, struct pnp_bios_node * node);
-extern int pnpbios_read_resources_from_node(struct pnp_resource_table *res, struct pnp_bios_node * node);
-extern int pnpbios_write_resources_to_node(struct pnp_resource_table *res, struct pnp_bios_node * node);
+extern int pnpbios_read_resources_from_node(struct pnp_dev *dev, struct pnp_bios_node *node);
+extern int pnpbios_write_resources_to_node(struct pnp_dev *dev, struct pnp_bios_node *node);
 extern void pnpid32_to_pnpid(u32 id, char *str);
 
 extern void pnpbios_print_status(const char * module, u16 status);
Index: work10/drivers/pnp/pnpbios/rsparser.c
===================================================================
--- work10.orig/drivers/pnp/pnpbios/rsparser.c	2008-04-25 11:14:55.000000000 -0600
+++ work10/drivers/pnp/pnpbios/rsparser.c	2008-04-25 11:14:56.000000000 -0600
@@ -54,9 +54,9 @@
  * Allocated Resources
  */
 
-static void pnpbios_parse_allocated_irqresource(struct pnp_resource_table *res,
-						int irq)
+static void pnpbios_parse_allocated_irqresource(struct pnp_dev *dev, int irq)
 {
+	struct pnp_resource_table *res = &dev->res;
 	int i = 0;
 
 	while (!(res->irq_resource[i].flags & IORESOURCE_UNSET)
@@ -74,9 +74,9 @@
 	}
 }
 
-static void pnpbios_parse_allocated_dmaresource(struct pnp_resource_table *res,
-						int dma)
+static void pnpbios_parse_allocated_dmaresource(struct pnp_dev *dev, int dma)
 {
+	struct pnp_resource_table *res = &dev->res;
 	int i = 0;
 
 	while (i < PNP_MAX_DMA &&
@@ -93,9 +93,10 @@
 	}
 }
 
-static void pnpbios_parse_allocated_ioresource(struct pnp_resource_table *res,
+static void pnpbios_parse_allocated_ioresource(struct pnp_dev *dev,
 					       int io, int len)
 {
+	struct pnp_resource_table *res = &dev->res;
 	int i = 0;
 
 	while (!(res->port_resource[i].flags & IORESOURCE_UNSET)
@@ -112,9 +113,10 @@
 	}
 }
 
-static void pnpbios_parse_allocated_memresource(struct pnp_resource_table *res,
+static void pnpbios_parse_allocated_memresource(struct pnp_dev *dev,
 						int mem, int len)
 {
+	struct pnp_resource_table *res = &dev->res;
 	int i = 0;
 
 	while (!(res->mem_resource[i].flags & IORESOURCE_UNSET)
@@ -131,11 +133,9 @@
 	}
 }
 
-static unsigned char *pnpbios_parse_allocated_resource_data(unsigned char *p,
-							    unsigned char *end,
-							    struct
-							    pnp_resource_table
-							    *res)
+static unsigned char *pnpbios_parse_allocated_resource_data(struct pnp_dev *dev,
+							    unsigned char *p,
+							    unsigned char *end)
 {
 	unsigned int len, tag;
 	int io, size, mask, i;
@@ -144,7 +144,7 @@
 		return NULL;
 
 	/* Blank the resource table values */
-	pnp_init_resource_table(res);
+	pnp_init_resource_table(&dev->res);
 
 	while ((char *)p < (char *)end) {
 
@@ -164,7 +164,7 @@
 				goto len_err;
 			io = *(short *)&p[4];
 			size = *(short *)&p[10];
-			pnpbios_parse_allocated_memresource(res, io, size);
+			pnpbios_parse_allocated_memresource(dev, io, size);
 			break;
 
 		case LARGE_TAG_ANSISTR:
@@ -180,7 +180,7 @@
 				goto len_err;
 			io = *(int *)&p[4];
 			size = *(int *)&p[16];
-			pnpbios_parse_allocated_memresource(res, io, size);
+			pnpbios_parse_allocated_memresource(dev, io, size);
 			break;
 
 		case LARGE_TAG_FIXEDMEM32:
@@ -188,7 +188,7 @@
 				goto len_err;
 			io = *(int *)&p[4];
 			size = *(int *)&p[8];
-			pnpbios_parse_allocated_memresource(res, io, size);
+			pnpbios_parse_allocated_memresource(dev, io, size);
 			break;
 
 		case SMALL_TAG_IRQ:
@@ -199,7 +199,7 @@
 			for (i = 0; i < 16; i++, mask = mask >> 1)
 				if (mask & 0x01)
 					io = i;
-			pnpbios_parse_allocated_irqresource(res, io);
+			pnpbios_parse_allocated_irqresource(dev, io);
 			break;
 
 		case SMALL_TAG_DMA:
@@ -210,7 +210,7 @@
 			for (i = 0; i < 8; i++, mask = mask >> 1)
 				if (mask & 0x01)
 					io = i;
-			pnpbios_parse_allocated_dmaresource(res, io);
+			pnpbios_parse_allocated_dmaresource(dev, io);
 			break;
 
 		case SMALL_TAG_PORT:
@@ -218,7 +218,7 @@
 				goto len_err;
 			io = p[2] + p[3] * 256;
 			size = p[7];
-			pnpbios_parse_allocated_ioresource(res, io, size);
+			pnpbios_parse_allocated_ioresource(dev, io, size);
 			break;
 
 		case SMALL_TAG_VENDOR:
@@ -230,7 +230,7 @@
 				goto len_err;
 			io = p[1] + p[2] * 256;
 			size = p[3];
-			pnpbios_parse_allocated_ioresource(res, io, size);
+			pnpbios_parse_allocated_ioresource(dev, io, size);
 			break;
 
 		case SMALL_TAG_END:
@@ -660,12 +660,12 @@
 	p[3] = len & 0xff;
 }
 
-static unsigned char *pnpbios_encode_allocated_resource_data(unsigned char *p,
-							     unsigned char *end,
-							     struct
-							     pnp_resource_table
-							     *res)
+static unsigned char *pnpbios_encode_allocated_resource_data(struct pnp_dev
+								*dev,
+							     unsigned char *p,
+							     unsigned char *end)
 {
+	struct pnp_resource_table *res = &dev->res;
 	unsigned int len, tag;
 	int port = 0, irq = 0, dma = 0, mem = 0;
 
@@ -774,7 +774,7 @@
 	unsigned char *p = (char *)node->data;
 	unsigned char *end = (char *)(node->data + node->size);
 
-	p = pnpbios_parse_allocated_resource_data(p, end, &dev->res);
+	p = pnpbios_parse_allocated_resource_data(dev, p, end);
 	if (!p)
 		return -EIO;
 	p = pnpbios_parse_resource_option_data(p, end, dev);
@@ -786,25 +786,25 @@
 	return 0;
 }
 
-int pnpbios_read_resources_from_node(struct pnp_resource_table *res,
+int pnpbios_read_resources_from_node(struct pnp_dev *dev,
 				     struct pnp_bios_node *node)
 {
 	unsigned char *p = (char *)node->data;
 	unsigned char *end = (char *)(node->data + node->size);
 
-	p = pnpbios_parse_allocated_resource_data(p, end, res);
+	p = pnpbios_parse_allocated_resource_data(dev, p, end);
 	if (!p)
 		return -EIO;
 	return 0;
 }
 
-int pnpbios_write_resources_to_node(struct pnp_resource_table *res,
+int pnpbios_write_resources_to_node(struct pnp_dev *dev,
 				    struct pnp_bios_node *node)
 {
 	unsigned char *p = (char *)node->data;
 	unsigned char *end = (char *)(node->data + node->size);
 
-	p = pnpbios_encode_allocated_resource_data(p, end, res);
+	p = pnpbios_encode_allocated_resource_data(dev, p, end);
 	if (!p)
 		return -EIO;
 	return 0;

-- 

^ permalink raw reply	[flat|nested] 80+ messages in thread

* [patch 20/54] PNP: add debug output to encoders
  2008-04-25 18:38 [patch 00/54] PNP cleanup, v4 Bjorn Helgaas
                   ` (18 preceding siblings ...)
  2008-04-25 18:38 ` [patch 19/54] PNP: remove more pnp_resource_table arguments Bjorn Helgaas
@ 2008-04-25 18:38 ` Bjorn Helgaas
  2008-04-25 18:38 ` [patch 21/54] PNP: add debug when assigning PNP resources Bjorn Helgaas
                   ` (34 subsequent siblings)
  54 siblings, 0 replies; 80+ messages in thread
From: Bjorn Helgaas @ 2008-04-25 18:38 UTC (permalink / raw)
  To: Len Brown
  Cc: linux-acpi, linux-kernel, Adam Belay, Adam M Belay, Li Shaohua,
	Matthieu Castet, Thomas Renninger, Rene Herman, Jaroslav Kysela,
	Andrew Morton

[-- Attachment #1: pnp-add-encoder-debug-output --]
[-- Type: text/plain, Size: 17121 bytes --]

Add debug output to encoders (enabled by CONFIG_PNP_DEBUG).  This
uses dev_printk, so I had to add pnp_dev arguments at the same time.

Signed-off-by: Bjorn Helgaas <bjorn.helgaas@hp.com>

---
 drivers/pnp/isapnp/core.c      |    2 
 drivers/pnp/pnpacpi/core.c     |    2 
 drivers/pnp/pnpacpi/rsparser.c |   90 +++++++++++++++++++++++++++++------------
 drivers/pnp/pnpbios/core.c     |    2 
 drivers/pnp/pnpbios/rsparser.c |   58 ++++++++++++++++++++------
 5 files changed, 114 insertions(+), 40 deletions(-)

Index: work10/drivers/pnp/isapnp/core.c
===================================================================
--- work10.orig/drivers/pnp/isapnp/core.c	2008-04-25 11:14:56.000000000 -0600
+++ work10/drivers/pnp/isapnp/core.c	2008-04-25 11:14:57.000000000 -0600
@@ -980,6 +980,7 @@
 {
 	int ret;
 
+	dev_dbg(&dev->dev, "get resources\n");
 	pnp_init_resource_table(&dev->res);
 	isapnp_cfg_begin(dev->card->number, dev->number);
 	ret = isapnp_read_resources(dev);
@@ -992,15 +993,19 @@
 	struct pnp_resource_table *res = &dev->res;
 	int tmp;
 
+	dev_dbg(&dev->dev, "set resources\n");
 	isapnp_cfg_begin(dev->card->number, dev->number);
 	dev->active = 1;
 	for (tmp = 0;
 	     tmp < ISAPNP_MAX_PORT
 	     && (res->port_resource[tmp].
 		 flags & (IORESOURCE_IO | IORESOURCE_UNSET)) == IORESOURCE_IO;
-	     tmp++)
+	     tmp++) {
+		dev_dbg(&dev->dev, "  set io  %d to 0x%llx\n",
+			tmp, (unsigned long long) res->port_resource[tmp].start);
 		isapnp_write_word(ISAPNP_CFG_PORT + (tmp << 1),
 				  res->port_resource[tmp].start);
+	}
 	for (tmp = 0;
 	     tmp < ISAPNP_MAX_IRQ
 	     && (res->irq_resource[tmp].
@@ -1009,22 +1014,29 @@
 		int irq = res->irq_resource[tmp].start;
 		if (irq == 2)
 			irq = 9;
+		dev_dbg(&dev->dev, "  set irq %d to %d\n", tmp, irq);
 		isapnp_write_byte(ISAPNP_CFG_IRQ + (tmp << 1), irq);
 	}
 	for (tmp = 0;
 	     tmp < ISAPNP_MAX_DMA
 	     && (res->dma_resource[tmp].
 		 flags & (IORESOURCE_DMA | IORESOURCE_UNSET)) == IORESOURCE_DMA;
-	     tmp++)
+	     tmp++) {
+		dev_dbg(&dev->dev, "  set dma %d to %lld\n",
+			tmp, (unsigned long long) res->dma_resource[tmp].start);
 		isapnp_write_byte(ISAPNP_CFG_DMA + tmp,
 				  res->dma_resource[tmp].start);
+	}
 	for (tmp = 0;
 	     tmp < ISAPNP_MAX_MEM
 	     && (res->mem_resource[tmp].
 		 flags & (IORESOURCE_MEM | IORESOURCE_UNSET)) == IORESOURCE_MEM;
-	     tmp++)
+	     tmp++) {
+		dev_dbg(&dev->dev, "  set mem %d to 0x%llx\n",
+			tmp, (unsigned long long) res->mem_resource[tmp].start);
 		isapnp_write_word(ISAPNP_CFG_MEM + (tmp << 3),
 				  (res->mem_resource[tmp].start >> 8) & 0xffff);
+	}
 	/* FIXME: We aren't handling 32bit mems properly here */
 	isapnp_activate(dev->number);
 	isapnp_cfg_end();
Index: work10/drivers/pnp/pnpacpi/core.c
===================================================================
--- work10.orig/drivers/pnp/pnpacpi/core.c	2008-04-25 11:14:56.000000000 -0600
+++ work10/drivers/pnp/pnpacpi/core.c	2008-04-25 11:14:57.000000000 -0600
@@ -77,6 +77,7 @@
 {
 	acpi_status status;
 
+	dev_dbg(&dev->dev, "get resources\n");
 	status = pnpacpi_parse_allocated_resource(dev);
 	return ACPI_FAILURE(status) ? -ENODEV : 0;
 }
@@ -88,6 +89,7 @@
 	int ret;
 	acpi_status status;
 
+	dev_dbg(&dev->dev, "set resources\n");
 	ret = pnpacpi_build_resource_template(dev, &buffer);
 	if (ret)
 		return ret;
Index: work10/drivers/pnp/pnpacpi/rsparser.c
===================================================================
--- work10.orig/drivers/pnp/pnpacpi/rsparser.c	2008-04-25 11:14:56.000000000 -0600
+++ work10/drivers/pnp/pnpacpi/rsparser.c	2008-04-25 11:14:57.000000000 -0600
@@ -408,6 +408,8 @@
 {
 	acpi_handle handle = dev->data;
 
+	dev_dbg(&dev->dev, "parse allocated resources\n");
+
 	/* Blank the resource table values */
 	pnp_init_resource_table(&dev->res);
 
@@ -738,6 +740,8 @@
 	acpi_status status;
 	struct acpipnp_parse_option_s parse_data;
 
+	dev_dbg(&dev->dev, "parse resource options\n");
+
 	parse_data.option = pnp_register_independent_option(dev);
 	if (!parse_data.option)
 		return AE_ERROR;
@@ -814,7 +818,7 @@
 	buffer->pointer = kzalloc(buffer->length - 1, GFP_KERNEL);
 	if (!buffer->pointer)
 		return -ENOMEM;
-	pnp_dbg("Res cnt %d", res_cnt);
+
 	resource = (struct acpi_resource *)buffer->pointer;
 	status = acpi_walk_resources(handle, METHOD_NAME__CRS,
 				     pnpacpi_type_resources, &resource);
@@ -829,7 +833,8 @@
 	return 0;
 }
 
-static void pnpacpi_encode_irq(struct acpi_resource *resource,
+static void pnpacpi_encode_irq(struct pnp_dev *dev,
+			       struct acpi_resource *resource,
 			       struct resource *p)
 {
 	struct acpi_resource_irq *irq = &resource->data.irq;
@@ -844,9 +849,15 @@
 		irq->sharable = ACPI_SHARED;
 	irq->interrupt_count = 1;
 	irq->interrupts[0] = p->start;
+
+	dev_dbg(&dev->dev, "  encode irq %d %s %s %s\n", (int) p->start,
+		triggering == ACPI_LEVEL_SENSITIVE ? "level" : "edge",
+		polarity == ACPI_ACTIVE_LOW ? "low" : "high",
+		irq->sharable == ACPI_SHARED ? "shared" : "exclusive");
 }
 
-static void pnpacpi_encode_ext_irq(struct acpi_resource *resource,
+static void pnpacpi_encode_ext_irq(struct pnp_dev *dev,
+				   struct acpi_resource *resource,
 				   struct resource *p)
 {
 	struct acpi_resource_extended_irq *extended_irq = &resource->data.extended_irq;
@@ -862,9 +873,15 @@
 		extended_irq->sharable = ACPI_SHARED;
 	extended_irq->interrupt_count = 1;
 	extended_irq->interrupts[0] = p->start;
+
+	dev_dbg(&dev->dev, "  encode irq %d %s %s %s\n", (int) p->start,
+		triggering == ACPI_LEVEL_SENSITIVE ? "level" : "edge",
+		polarity == ACPI_ACTIVE_LOW ? "low" : "high",
+		extended_irq->sharable == ACPI_SHARED ? "shared" : "exclusive");
 }
 
-static void pnpacpi_encode_dma(struct acpi_resource *resource,
+static void pnpacpi_encode_dma(struct pnp_dev *dev,
+			       struct acpi_resource *resource,
 			       struct resource *p)
 {
 	struct acpi_resource_dma *dma = &resource->data.dma;
@@ -898,9 +915,14 @@
 	dma->bus_master = !!(p->flags & IORESOURCE_DMA_MASTER);
 	dma->channel_count = 1;
 	dma->channels[0] = p->start;
+
+	dev_dbg(&dev->dev, "  encode dma %d "
+		"type 0x%x transfer 0x%x master %d\n",
+		(int) p->start, dma->type, dma->transfer, dma->bus_master);
 }
 
-static void pnpacpi_encode_io(struct acpi_resource *resource,
+static void pnpacpi_encode_io(struct pnp_dev *dev,
+			      struct acpi_resource *resource,
 			      struct resource *p)
 {
 	struct acpi_resource_io *io = &resource->data.io;
@@ -912,18 +934,27 @@
 	io->maximum = p->end;
 	io->alignment = 0;	/* Correct? */
 	io->address_length = p->end - p->start + 1;
+
+	dev_dbg(&dev->dev, "  encode io 0x%llx-0x%llx decode 0x%x\n",
+		(unsigned long long) p->start, (unsigned long long) p->end,
+		io->io_decode);
 }
 
-static void pnpacpi_encode_fixed_io(struct acpi_resource *resource,
+static void pnpacpi_encode_fixed_io(struct pnp_dev *dev,
+				    struct acpi_resource *resource,
 				    struct resource *p)
 {
 	struct acpi_resource_fixed_io *fixed_io = &resource->data.fixed_io;
 
 	fixed_io->address = p->start;
 	fixed_io->address_length = p->end - p->start + 1;
+
+	dev_dbg(&dev->dev, "  encode fixed_io 0x%llx-0x%llx\n",
+		(unsigned long long) p->start, (unsigned long long) p->end);
 }
 
-static void pnpacpi_encode_mem24(struct acpi_resource *resource,
+static void pnpacpi_encode_mem24(struct pnp_dev *dev,
+				 struct acpi_resource *resource,
 				 struct resource *p)
 {
 	struct acpi_resource_memory24 *memory24 = &resource->data.memory24;
@@ -936,9 +967,14 @@
 	memory24->maximum = p->end;
 	memory24->alignment = 0;
 	memory24->address_length = p->end - p->start + 1;
+
+	dev_dbg(&dev->dev, "  encode mem24 0x%llx-0x%llx write_protect 0x%x\n",
+		(unsigned long long) p->start, (unsigned long long) p->end,
+		memory24->write_protect);
 }
 
-static void pnpacpi_encode_mem32(struct acpi_resource *resource,
+static void pnpacpi_encode_mem32(struct pnp_dev *dev,
+				 struct acpi_resource *resource,
 				 struct resource *p)
 {
 	struct acpi_resource_memory32 *memory32 = &resource->data.memory32;
@@ -950,9 +986,14 @@
 	memory32->maximum = p->end;
 	memory32->alignment = 0;
 	memory32->address_length = p->end - p->start + 1;
+
+	dev_dbg(&dev->dev, "  encode mem32 0x%llx-0x%llx write_protect 0x%x\n",
+		(unsigned long long) p->start, (unsigned long long) p->end,
+		memory32->write_protect);
 }
 
-static void pnpacpi_encode_fixed_mem32(struct acpi_resource *resource,
+static void pnpacpi_encode_fixed_mem32(struct pnp_dev *dev,
+				       struct acpi_resource *resource,
 				       struct resource *p)
 {
 	struct acpi_resource_fixed_memory32 *fixed_memory32 = &resource->data.fixed_memory32;
@@ -962,6 +1003,11 @@
 	    ACPI_READ_WRITE_MEMORY : ACPI_READ_ONLY_MEMORY;
 	fixed_memory32->address = p->start;
 	fixed_memory32->address_length = p->end - p->start + 1;
+
+	dev_dbg(&dev->dev, "  encode fixed_mem32 0x%llx-0x%llx "
+		"write_protect 0x%x\n",
+		(unsigned long long) p->start, (unsigned long long) p->end,
+		fixed_memory32->write_protect);
 }
 
 int pnpacpi_encode_resources(struct pnp_dev *dev, struct acpi_buffer *buffer)
@@ -973,57 +1019,49 @@
 	struct acpi_resource *resource = buffer->pointer;
 	int port = 0, irq = 0, dma = 0, mem = 0;
 
-	pnp_dbg("res cnt %d", res_cnt);
+	dev_dbg(&dev->dev, "encode %d resources\n", res_cnt);
 	while (i < res_cnt) {
 		switch (resource->type) {
 		case ACPI_RESOURCE_TYPE_IRQ:
-			pnp_dbg("Encode irq");
-			pnpacpi_encode_irq(resource,
+			pnpacpi_encode_irq(dev, resource,
 					   &res_table->irq_resource[irq]);
 			irq++;
 			break;
 
 		case ACPI_RESOURCE_TYPE_DMA:
-			pnp_dbg("Encode dma");
-			pnpacpi_encode_dma(resource,
+			pnpacpi_encode_dma(dev, resource,
 					   &res_table->dma_resource[dma]);
 			dma++;
 			break;
 		case ACPI_RESOURCE_TYPE_IO:
-			pnp_dbg("Encode io");
-			pnpacpi_encode_io(resource,
+			pnpacpi_encode_io(dev, resource,
 					  &res_table->port_resource[port]);
 			port++;
 			break;
 		case ACPI_RESOURCE_TYPE_FIXED_IO:
-			pnp_dbg("Encode fixed io");
-			pnpacpi_encode_fixed_io(resource,
+			pnpacpi_encode_fixed_io(dev, resource,
 						&res_table->
 						port_resource[port]);
 			port++;
 			break;
 		case ACPI_RESOURCE_TYPE_MEMORY24:
-			pnp_dbg("Encode mem24");
-			pnpacpi_encode_mem24(resource,
+			pnpacpi_encode_mem24(dev, resource,
 					     &res_table->mem_resource[mem]);
 			mem++;
 			break;
 		case ACPI_RESOURCE_TYPE_MEMORY32:
-			pnp_dbg("Encode mem32");
-			pnpacpi_encode_mem32(resource,
+			pnpacpi_encode_mem32(dev, resource,
 					     &res_table->mem_resource[mem]);
 			mem++;
 			break;
 		case ACPI_RESOURCE_TYPE_FIXED_MEMORY32:
-			pnp_dbg("Encode fixed mem32");
-			pnpacpi_encode_fixed_mem32(resource,
+			pnpacpi_encode_fixed_mem32(dev, resource,
 						   &res_table->
 						   mem_resource[mem]);
 			mem++;
 			break;
 		case ACPI_RESOURCE_TYPE_EXTENDED_IRQ:
-			pnp_dbg("Encode ext irq");
-			pnpacpi_encode_ext_irq(resource,
+			pnpacpi_encode_ext_irq(dev, resource,
 					       &res_table->irq_resource[irq]);
 			irq++;
 			break;
Index: work10/drivers/pnp/pnpbios/core.c
===================================================================
--- work10.orig/drivers/pnp/pnpbios/core.c	2008-04-25 11:14:56.000000000 -0600
+++ work10/drivers/pnp/pnpbios/core.c	2008-04-25 11:14:57.000000000 -0600
@@ -212,6 +212,7 @@
 	if (!pnpbios_is_dynamic(dev))
 		return -EPERM;
 
+	dev_dbg(&dev->dev, "get resources\n");
 	node = kzalloc(node_info.max_node_size, GFP_KERNEL);
 	if (!node)
 		return -1;
@@ -234,6 +235,7 @@
 	if (!pnpbios_is_dynamic(dev))
 		return -EPERM;
 
+	dev_dbg(&dev->dev, "set resources\n");
 	node = kzalloc(node_info.max_node_size, GFP_KERNEL);
 	if (!node)
 		return -1;
Index: work10/drivers/pnp/pnpbios/rsparser.c
===================================================================
--- work10.orig/drivers/pnp/pnpbios/rsparser.c	2008-04-25 11:14:56.000000000 -0600
+++ work10/drivers/pnp/pnpbios/rsparser.c	2008-04-25 11:14:57.000000000 -0600
@@ -143,6 +143,8 @@
 	if (!p)
 		return NULL;
 
+	dev_dbg(&dev->dev, "parse allocated resources\n");
+
 	/* Blank the resource table values */
 	pnp_init_resource_table(&dev->res);
 
@@ -390,6 +392,8 @@
 	if (!p)
 		return NULL;
 
+	dev_dbg(&dev->dev, "parse resource options\n");
+
 	option_independent = option = pnp_register_independent_option(dev);
 	if (!option)
 		return NULL;
@@ -574,7 +578,8 @@
  * Allocated Resource Encoding
  */
 
-static void pnpbios_encode_mem(unsigned char *p, struct resource *res)
+static void pnpbios_encode_mem(struct pnp_dev *dev, unsigned char *p,
+			       struct resource *res)
 {
 	unsigned long base = res->start;
 	unsigned long len = res->end - res->start + 1;
@@ -585,9 +590,13 @@
 	p[7] = ((base >> 8) >> 8) & 0xff;
 	p[10] = (len >> 8) & 0xff;
 	p[11] = ((len >> 8) >> 8) & 0xff;
+
+	dev_dbg(&dev->dev, "  encode mem 0x%llx-0x%llx\n",
+		(unsigned long long) res->start, (unsigned long long) res->end);
 }
 
-static void pnpbios_encode_mem32(unsigned char *p, struct resource *res)
+static void pnpbios_encode_mem32(struct pnp_dev *dev, unsigned char *p,
+				 struct resource *res)
 {
 	unsigned long base = res->start;
 	unsigned long len = res->end - res->start + 1;
@@ -604,9 +613,13 @@
 	p[17] = (len >> 8) & 0xff;
 	p[18] = (len >> 16) & 0xff;
 	p[19] = (len >> 24) & 0xff;
+
+	dev_dbg(&dev->dev, "  encode mem32 0x%llx-0x%llx\n",
+		(unsigned long long) res->start, (unsigned long long) res->end);
 }
 
-static void pnpbios_encode_fixed_mem32(unsigned char *p, struct resource *res)
+static void pnpbios_encode_fixed_mem32(struct pnp_dev *dev, unsigned char *p,
+				       struct resource *res)
 {
 	unsigned long base = res->start;
 	unsigned long len = res->end - res->start + 1;
@@ -619,26 +632,36 @@
 	p[9] = (len >> 8) & 0xff;
 	p[10] = (len >> 16) & 0xff;
 	p[11] = (len >> 24) & 0xff;
+
+	dev_dbg(&dev->dev, "  encode fixed_mem32 0x%llx-0x%llx\n",
+		(unsigned long long) res->start, (unsigned long long) res->end);
 }
 
-static void pnpbios_encode_irq(unsigned char *p, struct resource *res)
+static void pnpbios_encode_irq(struct pnp_dev *dev, unsigned char *p,
+			       struct resource *res)
 {
 	unsigned long map = 0;
 
 	map = 1 << res->start;
 	p[1] = map & 0xff;
 	p[2] = (map >> 8) & 0xff;
+
+	dev_dbg(&dev->dev, "  encode irq %d\n", res->start);
 }
 
-static void pnpbios_encode_dma(unsigned char *p, struct resource *res)
+static void pnpbios_encode_dma(struct pnp_dev *dev, unsigned char *p,
+			       struct resource *res)
 {
 	unsigned long map = 0;
 
 	map = 1 << res->start;
 	p[1] = map & 0xff;
+
+	dev_dbg(&dev->dev, "  encode dma %d\n", res->start);
 }
 
-static void pnpbios_encode_port(unsigned char *p, struct resource *res)
+static void pnpbios_encode_port(struct pnp_dev *dev, unsigned char *p,
+				struct resource *res)
 {
 	unsigned long base = res->start;
 	unsigned long len = res->end - res->start + 1;
@@ -648,9 +671,13 @@
 	p[4] = base & 0xff;
 	p[5] = (base >> 8) & 0xff;
 	p[7] = len & 0xff;
+
+	dev_dbg(&dev->dev, "  encode io 0x%llx-0x%llx\n",
+		(unsigned long long) res->start, (unsigned long long) res->end);
 }
 
-static void pnpbios_encode_fixed_port(unsigned char *p, struct resource *res)
+static void pnpbios_encode_fixed_port(struct pnp_dev *dev, unsigned char *p,
+				      struct resource *res)
 {
 	unsigned long base = res->start;
 	unsigned long len = res->end - res->start + 1;
@@ -658,6 +685,9 @@
 	p[1] = base & 0xff;
 	p[2] = (base >> 8) & 0xff;
 	p[3] = len & 0xff;
+
+	dev_dbg(&dev->dev, "  encode fixed_io 0x%llx-0x%llx\n",
+		(unsigned long long) res->start, (unsigned long long) res->end);
 }
 
 static unsigned char *pnpbios_encode_allocated_resource_data(struct pnp_dev
@@ -688,42 +718,42 @@
 		case LARGE_TAG_MEM:
 			if (len != 9)
 				goto len_err;
-			pnpbios_encode_mem(p, &res->mem_resource[mem]);
+			pnpbios_encode_mem(dev, p, &res->mem_resource[mem]);
 			mem++;
 			break;
 
 		case LARGE_TAG_MEM32:
 			if (len != 17)
 				goto len_err;
-			pnpbios_encode_mem32(p, &res->mem_resource[mem]);
+			pnpbios_encode_mem32(dev, p, &res->mem_resource[mem]);
 			mem++;
 			break;
 
 		case LARGE_TAG_FIXEDMEM32:
 			if (len != 9)
 				goto len_err;
-			pnpbios_encode_fixed_mem32(p, &res->mem_resource[mem]);
+			pnpbios_encode_fixed_mem32(dev, p, &res->mem_resource[mem]);
 			mem++;
 			break;
 
 		case SMALL_TAG_IRQ:
 			if (len < 2 || len > 3)
 				goto len_err;
-			pnpbios_encode_irq(p, &res->irq_resource[irq]);
+			pnpbios_encode_irq(dev, p, &res->irq_resource[irq]);
 			irq++;
 			break;
 
 		case SMALL_TAG_DMA:
 			if (len != 2)
 				goto len_err;
-			pnpbios_encode_dma(p, &res->dma_resource[dma]);
+			pnpbios_encode_dma(dev, p, &res->dma_resource[dma]);
 			dma++;
 			break;
 
 		case SMALL_TAG_PORT:
 			if (len != 7)
 				goto len_err;
-			pnpbios_encode_port(p, &res->port_resource[port]);
+			pnpbios_encode_port(dev, p, &res->port_resource[port]);
 			port++;
 			break;
 
@@ -734,7 +764,7 @@
 		case SMALL_TAG_FIXEDPORT:
 			if (len != 3)
 				goto len_err;
-			pnpbios_encode_fixed_port(p, &res->port_resource[port]);
+			pnpbios_encode_fixed_port(dev, p, &res->port_resource[port]);
 			port++;
 			break;
 

-- 

^ permalink raw reply	[flat|nested] 80+ messages in thread

* [patch 21/54] PNP: add debug when assigning PNP resources
  2008-04-25 18:38 [patch 00/54] PNP cleanup, v4 Bjorn Helgaas
                   ` (19 preceding siblings ...)
  2008-04-25 18:38 ` [patch 20/54] PNP: add debug output to encoders Bjorn Helgaas
@ 2008-04-25 18:38 ` Bjorn Helgaas
  2008-04-26 21:26   ` Rene Herman
  2008-04-25 18:38 ` [patch 22/54] PNP: add pnp_init_resources(struct pnp_dev *) interface Bjorn Helgaas
                   ` (33 subsequent siblings)
  54 siblings, 1 reply; 80+ messages in thread
From: Bjorn Helgaas @ 2008-04-25 18:38 UTC (permalink / raw)
  To: Len Brown
  Cc: linux-acpi, linux-kernel, Adam Belay, Adam M Belay, Li Shaohua,
	Matthieu Castet, Thomas Renninger, Rene Herman, Jaroslav Kysela,
	Andrew Morton

[-- Attachment #1: pnp-add-resource-list-debug-output --]
[-- Type: text/plain, Size: 8843 bytes --]

This patch adds code to dump PNP resources before and after
assigning resources and before writing them to the device.

This is enabled by CONFIG_PNP_DEBUG=y.

Signed-off-by: Bjorn Helgaas <bjorn.helgaas@hp.com>

Index: work10/drivers/pnp/base.h
===================================================================
--- work10.orig/drivers/pnp/base.h	2008-04-25 11:14:51.000000000 -0600
+++ work10/drivers/pnp/base.h	2008-04-25 11:14:57.000000000 -0600
@@ -16,3 +16,5 @@
 int pnp_check_mem(struct pnp_dev * dev, int idx);
 int pnp_check_irq(struct pnp_dev * dev, int idx);
 int pnp_check_dma(struct pnp_dev * dev, int idx);
+
+void dbg_pnp_show_resources(struct pnp_dev *dev, char *desc);
Index: work10/drivers/pnp/support.c
===================================================================
--- work10.orig/drivers/pnp/support.c	2008-04-25 11:14:48.000000000 -0600
+++ work10/drivers/pnp/support.c	2008-04-25 11:14:57.000000000 -0600
@@ -51,3 +51,44 @@
 	str[6] = hex_asc((id >>  0) & 0xf);
 	str[7] = '\0';
 }
+
+#ifdef DEBUG
+void dbg_pnp_show_resources(struct pnp_dev *dev, char *desc)
+{
+	struct resource *res;
+	int i;
+
+	dev_dbg(&dev->dev, "current resources: %s\n", desc);
+
+	for (i = 0; i < PNP_MAX_IRQ; i++) {
+		res = &dev->res.irq_resource[i];
+		if (!(res->flags & IORESOURCE_UNSET))
+			dev_dbg(&dev->dev, "  irq %lld flags 0x%lx\n",
+				(unsigned long long) res->start, res->flags);
+	}
+	for (i = 0; i < PNP_MAX_DMA; i++) {
+		res = &dev->res.dma_resource[i];
+		if (!(res->flags & IORESOURCE_UNSET))
+			dev_dbg(&dev->dev, "  dma %lld flags 0x%lx\n",
+				(unsigned long long) res->start, res->flags);
+	}
+	for (i = 0; i < PNP_MAX_PORT; i++) {
+		res = &dev->res.port_resource[i];
+		if (!(res->flags & IORESOURCE_UNSET))
+			dev_dbg(&dev->dev, "  io  0x%llx-0x%llx flags 0x%lx\n",
+				(unsigned long long) res->start,
+				(unsigned long long) res->end, res->flags);
+	}
+	for (i = 0; i < PNP_MAX_MEM; i++) {
+		res = &dev->res.mem_resource[i];
+		if (!(res->flags & IORESOURCE_UNSET))
+			dev_dbg(&dev->dev, "  mem 0x%llx-0x%llx flags 0x%lx\n",
+				(unsigned long long) res->start,
+				(unsigned long long) res->end, res->flags);
+	}
+}
+#else
+void dbg_pnp_show_resources(struct pnp_dev *dev, char *desc)
+{
+}
+#endif
Index: work10/drivers/pnp/manager.c
===================================================================
--- work10.orig/drivers/pnp/manager.c	2008-04-25 11:14:55.000000000 -0600
+++ work10/drivers/pnp/manager.c	2008-04-25 11:14:57.000000000 -0600
@@ -28,20 +28,25 @@
 		return 1;
 	}
 
-	/* check if this resource has been manually set, if so skip */
-	if (!(dev->res.port_resource[idx].flags & IORESOURCE_AUTO))
-		return 1;
-
 	start = &dev->res.port_resource[idx].start;
 	end = &dev->res.port_resource[idx].end;
 	flags = &dev->res.port_resource[idx].flags;
 
+	/* check if this resource has been manually set, if so skip */
+	if (!(dev->res.port_resource[idx].flags & IORESOURCE_AUTO)) {
+		dev_dbg(&dev->dev, "  io %d already set to 0x%llx-0x%llx "
+			"flags 0x%x\n", idx, (unsigned long long) *start,
+			(unsigned long long) *end, (int) *flags);
+		return 1;
+	}
+
 	/* set the initial values */
 	*flags |= rule->flags | IORESOURCE_IO;
 	*flags &= ~IORESOURCE_UNSET;
 
 	if (!rule->size) {
 		*flags |= IORESOURCE_DISABLED;
+		dev_dbg(&dev->dev, "  io %d disabled\n", idx);
 		return 1;	/* skip disabled resource requests */
 	}
 
@@ -52,9 +57,13 @@
 	while (!pnp_check_port(dev, idx)) {
 		*start += rule->align;
 		*end = *start + rule->size - 1;
-		if (*start > rule->max || !rule->align)
+		if (*start > rule->max || !rule->align) {
+			dev_dbg(&dev->dev, "  couldn't assign io %d\n", idx);
 			return 0;
+		}
 	}
+	dev_dbg(&dev->dev, "  assign io  %d 0x%llx-0x%llx\n", idx,
+		(unsigned long long) *start, (unsigned long long) *end);
 	return 1;
 }
 
@@ -69,14 +78,18 @@
 		return 1;
 	}
 
-	/* check if this resource has been manually set, if so skip */
-	if (!(dev->res.mem_resource[idx].flags & IORESOURCE_AUTO))
-		return 1;
-
 	start = &dev->res.mem_resource[idx].start;
 	end = &dev->res.mem_resource[idx].end;
 	flags = &dev->res.mem_resource[idx].flags;
 
+	/* check if this resource has been manually set, if so skip */
+	if (!(dev->res.mem_resource[idx].flags & IORESOURCE_AUTO)) {
+		dev_dbg(&dev->dev, "  mem %d already set to 0x%llx-0x%llx "
+			"flags 0x%x\n", idx, (unsigned long long) *start,
+			(unsigned long long) *end, (int) *flags);
+		return 1;
+	}
+
 	/* set the initial values */
 	*flags |= rule->flags | IORESOURCE_MEM;
 	*flags &= ~IORESOURCE_UNSET;
@@ -93,6 +106,7 @@
 
 	if (!rule->size) {
 		*flags |= IORESOURCE_DISABLED;
+		dev_dbg(&dev->dev, "  mem %d disabled\n", idx);
 		return 1;	/* skip disabled resource requests */
 	}
 
@@ -103,9 +117,13 @@
 	while (!pnp_check_mem(dev, idx)) {
 		*start += rule->align;
 		*end = *start + rule->size - 1;
-		if (*start > rule->max || !rule->align)
+		if (*start > rule->max || !rule->align) {
+			dev_dbg(&dev->dev, "  couldn't assign mem %d\n", idx);
 			return 0;
+		}
 	}
+	dev_dbg(&dev->dev, "  assign mem %d 0x%llx-0x%llx\n", idx,
+		(unsigned long long) *start, (unsigned long long) *end);
 	return 1;
 }
 
@@ -126,20 +144,24 @@
 		return 1;
 	}
 
-	/* check if this resource has been manually set, if so skip */
-	if (!(dev->res.irq_resource[idx].flags & IORESOURCE_AUTO))
-		return 1;
-
 	start = &dev->res.irq_resource[idx].start;
 	end = &dev->res.irq_resource[idx].end;
 	flags = &dev->res.irq_resource[idx].flags;
 
+	/* check if this resource has been manually set, if so skip */
+	if (!(dev->res.irq_resource[idx].flags & IORESOURCE_AUTO)) {
+		dev_dbg(&dev->dev, "  irq %d already set to %d flags 0x%x\n",
+			idx, (int) *start, (int) *flags);
+		return 1;
+	}
+
 	/* set the initial values */
 	*flags |= rule->flags | IORESOURCE_IRQ;
 	*flags &= ~IORESOURCE_UNSET;
 
 	if (bitmap_empty(rule->map, PNP_IRQ_NR)) {
 		*flags |= IORESOURCE_DISABLED;
+		dev_dbg(&dev->dev, "  irq %d disabled\n", idx);
 		return 1;	/* skip disabled resource requests */
 	}
 
@@ -147,15 +169,20 @@
 	*start = find_next_bit(rule->map, PNP_IRQ_NR, 16);
 	if (*start < PNP_IRQ_NR) {
 		*end = *start;
+		dev_dbg(&dev->dev, "  assign irq %d %d\n", idx, (int) *start);
 		return 1;
 	}
 	for (i = 0; i < 16; i++) {
 		if (test_bit(xtab[i], rule->map)) {
 			*start = *end = xtab[i];
-			if (pnp_check_irq(dev, idx))
+			if (pnp_check_irq(dev, idx)) {
+				dev_dbg(&dev->dev, "  assign irq %d %d\n", idx,
+					(int) *start);
 				return 1;
+			}
 		}
 	}
+	dev_dbg(&dev->dev, "  couldn't assign irq %d\n", idx);
 	return 0;
 }
 
@@ -175,14 +202,17 @@
 		return;
 	}
 
-	/* check if this resource has been manually set, if so skip */
-	if (!(dev->res.dma_resource[idx].flags & IORESOURCE_AUTO))
-		return;
-
 	start = &dev->res.dma_resource[idx].start;
 	end = &dev->res.dma_resource[idx].end;
 	flags = &dev->res.dma_resource[idx].flags;
 
+	/* check if this resource has been manually set, if so skip */
+	if (!(dev->res.dma_resource[idx].flags & IORESOURCE_AUTO)) {
+		dev_dbg(&dev->dev, "  dma %d already set to %d flags 0x%x\n",
+			idx, (int) *start, (int) *flags);
+		return;
+	}
+
 	/* set the initial values */
 	*flags |= rule->flags | IORESOURCE_DMA;
 	*flags &= ~IORESOURCE_UNSET;
@@ -190,14 +220,18 @@
 	for (i = 0; i < 8; i++) {
 		if (rule->map & (1 << xtab[i])) {
 			*start = *end = xtab[i];
-			if (pnp_check_dma(dev, idx))
+			if (pnp_check_dma(dev, idx)) {
+				dev_dbg(&dev->dev, "  assign dma %d %d\n", idx,
+					(int) *start);
 				return;
+			}
 		}
 	}
 #ifdef MAX_DMA_CHANNELS
 	*start = *end = MAX_DMA_CHANNELS;
 #endif
 	*flags |= IORESOURCE_UNSET | IORESOURCE_DISABLED;
+	dev_dbg(&dev->dev, "  disable dma %d\n", idx);
 }
 
 /**
@@ -298,9 +332,11 @@
 	if (!pnp_can_configure(dev))
 		return -ENODEV;
 
+	dbg_pnp_show_resources(dev, "before pnp_assign_resources");
 	mutex_lock(&pnp_res_mutex);
 	pnp_clean_resource_table(&dev->res);	/* start with a fresh slate */
 	if (dev->independent) {
+		dev_dbg(&dev->dev, "assigning independent options\n");
 		port = dev->independent->port;
 		mem = dev->independent->mem;
 		irq = dev->independent->irq;
@@ -333,6 +369,8 @@
 	if (depnum) {
 		struct pnp_option *dep;
 		int i;
+
+		dev_dbg(&dev->dev, "assigning dependent option %d\n", depnum);
 		for (i = 1, dep = dev->dependent; i < depnum;
 		     i++, dep = dep->next)
 			if (!dep)
@@ -368,11 +406,13 @@
 		goto fail;
 
 	mutex_unlock(&pnp_res_mutex);
+	dbg_pnp_show_resources(dev, "after pnp_assign_resources");
 	return 1;
 
 fail:
 	pnp_clean_resource_table(&dev->res);
 	mutex_unlock(&pnp_res_mutex);
+	dbg_pnp_show_resources(dev, "after pnp_assign_resources (failed)");
 	return 0;
 }
 
@@ -473,6 +513,7 @@
 		return -EINVAL;
 	}
 
+	dbg_pnp_show_resources(dev, "pnp_start_dev");
 	if (dev->protocol->set(dev) < 0) {
 		dev_err(&dev->dev, "activation failed\n");
 		return -EIO;

-- 

^ permalink raw reply	[flat|nested] 80+ messages in thread

* [patch 22/54] PNP: add pnp_init_resources(struct pnp_dev *) interface
  2008-04-25 18:38 [patch 00/54] PNP cleanup, v4 Bjorn Helgaas
                   ` (20 preceding siblings ...)
  2008-04-25 18:38 ` [patch 21/54] PNP: add debug when assigning PNP resources Bjorn Helgaas
@ 2008-04-25 18:38 ` Bjorn Helgaas
  2008-04-25 18:38 ` [patch 23/54] PNP: remove pnp_resource_table from internal pnp_clean_resource_table interface Bjorn Helgaas
                   ` (32 subsequent siblings)
  54 siblings, 0 replies; 80+ messages in thread
From: Bjorn Helgaas @ 2008-04-25 18:38 UTC (permalink / raw)
  To: Len Brown
  Cc: linux-acpi, Rene Herman, linux-kernel, Adam Belay, Adam M Belay,
	Li Shaohua, Matthieu Castet, Thomas Renninger, Rene Herman,
	Jaroslav Kysela, Andrew Morton

[-- Attachment #1: pnp-remove-pnp_resource_table-from-init --]
[-- Type: text/plain, Size: 6299 bytes --]

Add pnp_init_resources(struct pnp_dev *) to replace
pnp_init_resource_table(), which takes a pointer to the
pnp_resource_table itself.  Passing only the pnp_dev * reduces
the possibility for error in the caller and removes the
pnp_resource_table implementation detail from the interface.

Even though pnp_init_resource_table() is exported, I did not
export pnp_init_resources() because it is used only by the PNP
core.

Signed-off-by: Bjorn Helgaas <bjorn.helgaas@hp.com>
Acked-By: Rene Herman <rene.herman@gmail.com>

---
 drivers/pnp/interface.c        |    6 +++---
 drivers/pnp/isapnp/core.c      |    4 ++--
 drivers/pnp/manager.c          |    5 +++++
 drivers/pnp/pnpacpi/core.c     |    2 +-
 drivers/pnp/pnpacpi/rsparser.c |    3 +--
 drivers/pnp/pnpbios/core.c     |    2 +-
 drivers/pnp/pnpbios/rsparser.c |    3 +--
 include/linux/pnp.h            |    2 ++
 8 files changed, 16 insertions(+), 11 deletions(-)

Index: work10/include/linux/pnp.h
===================================================================
--- work10.orig/include/linux/pnp.h	2008-04-25 11:14:55.000000000 -0600
+++ work10/include/linux/pnp.h	2008-04-25 11:14:58.000000000 -0600
@@ -391,6 +391,7 @@
 int pnp_register_mem_resource(struct pnp_dev *dev, struct pnp_option *option,
 			      struct pnp_mem *data);
 void pnp_init_resource_table(struct pnp_resource_table *table);
+void pnp_init_resources(struct pnp_dev *dev);
 int pnp_manual_config_dev(struct pnp_dev *dev, struct pnp_resource_table *res,
 			  int mode);
 int pnp_auto_config_dev(struct pnp_dev *dev);
@@ -438,6 +439,7 @@
 static inline int pnp_register_port_resource(struct pnp_dev *dev, struct pnp_option *option, struct pnp_port *data) { return -ENODEV; }
 static inline int pnp_register_mem_resource(struct pnp_dev *dev, struct pnp_option *option, struct pnp_mem *data) { return -ENODEV; }
 static inline void pnp_init_resource_table(struct pnp_resource_table *table) { }
+static inline void pnp_init_resources(struct pnp_dev *dev) { }
 static inline int pnp_manual_config_dev(struct pnp_dev *dev, struct pnp_resource_table *res, int mode) { return -ENODEV; }
 static inline int pnp_auto_config_dev(struct pnp_dev *dev) { return -ENODEV; }
 static inline int pnp_validate_config(struct pnp_dev *dev) { return -ENODEV; }
Index: work10/drivers/pnp/manager.c
===================================================================
--- work10.orig/drivers/pnp/manager.c	2008-04-25 11:14:57.000000000 -0600
+++ work10/drivers/pnp/manager.c	2008-04-25 11:14:58.000000000 -0600
@@ -272,6 +272,11 @@
 	}
 }
 
+void pnp_init_resources(struct pnp_dev *dev)
+{
+	pnp_init_resource_table(&dev->res);
+}
+
 /**
  * pnp_clean_resources - clears resources that were not manually set
  * @res: the resources to clean
Index: work10/drivers/pnp/interface.c
===================================================================
--- work10.orig/drivers/pnp/interface.c	2008-04-25 11:14:55.000000000 -0600
+++ work10/drivers/pnp/interface.c	2008-04-25 11:14:58.000000000 -0600
@@ -351,14 +351,14 @@
 	if (!strnicmp(buf, "auto", 4)) {
 		if (dev->active)
 			goto done;
-		pnp_init_resource_table(&dev->res);
+		pnp_init_resources(dev);
 		retval = pnp_auto_config_dev(dev);
 		goto done;
 	}
 	if (!strnicmp(buf, "clear", 5)) {
 		if (dev->active)
 			goto done;
-		pnp_init_resource_table(&dev->res);
+		pnp_init_resources(dev);
 		goto done;
 	}
 	if (!strnicmp(buf, "get", 3)) {
@@ -373,7 +373,7 @@
 		if (dev->active)
 			goto done;
 		buf += 3;
-		pnp_init_resource_table(&dev->res);
+		pnp_init_resources(dev);
 		mutex_lock(&pnp_res_mutex);
 		while (1) {
 			while (isspace(*buf))
Index: work10/drivers/pnp/isapnp/core.c
===================================================================
--- work10.orig/drivers/pnp/isapnp/core.c	2008-04-25 11:14:57.000000000 -0600
+++ work10/drivers/pnp/isapnp/core.c	2008-04-25 11:14:58.000000000 -0600
@@ -424,7 +424,7 @@
 	dev->capabilities |= PNP_READ;
 	dev->capabilities |= PNP_WRITE;
 	dev->capabilities |= PNP_DISABLE;
-	pnp_init_resource_table(&dev->res);
+	pnp_init_resources(dev);
 	return dev;
 }
 
@@ -981,7 +981,7 @@
 	int ret;
 
 	dev_dbg(&dev->dev, "get resources\n");
-	pnp_init_resource_table(&dev->res);
+	pnp_init_resources(dev);
 	isapnp_cfg_begin(dev->card->number, dev->number);
 	ret = isapnp_read_resources(dev);
 	isapnp_cfg_end();
Index: work10/drivers/pnp/pnpacpi/core.c
===================================================================
--- work10.orig/drivers/pnp/pnpacpi/core.c	2008-04-25 11:14:57.000000000 -0600
+++ work10/drivers/pnp/pnpacpi/core.c	2008-04-25 11:14:58.000000000 -0600
@@ -212,7 +212,7 @@
 
 	/* clear out the damaged flags */
 	if (!dev->active)
-		pnp_init_resource_table(&dev->res);
+		pnp_init_resources(dev);
 	pnp_add_device(dev);
 	num++;
 
Index: work10/drivers/pnp/pnpbios/core.c
===================================================================
--- work10.orig/drivers/pnp/pnpbios/core.c	2008-04-25 11:14:57.000000000 -0600
+++ work10/drivers/pnp/pnpbios/core.c	2008-04-25 11:14:58.000000000 -0600
@@ -347,7 +347,7 @@
 
 	/* clear out the damaged flags */
 	if (!dev->active)
-		pnp_init_resource_table(&dev->res);
+		pnp_init_resources(dev);
 
 	pnp_add_device(dev);
 	pnpbios_interface_attach_device(node);
Index: work10/drivers/pnp/pnpacpi/rsparser.c
===================================================================
--- work10.orig/drivers/pnp/pnpacpi/rsparser.c	2008-04-25 11:14:57.000000000 -0600
+++ work10/drivers/pnp/pnpacpi/rsparser.c	2008-04-25 11:14:58.000000000 -0600
@@ -410,8 +410,7 @@
 
 	dev_dbg(&dev->dev, "parse allocated resources\n");
 
-	/* Blank the resource table values */
-	pnp_init_resource_table(&dev->res);
+	pnp_init_resources(dev);
 
 	return acpi_walk_resources(handle, METHOD_NAME__CRS,
 				   pnpacpi_allocated_resource, dev);
Index: work10/drivers/pnp/pnpbios/rsparser.c
===================================================================
--- work10.orig/drivers/pnp/pnpbios/rsparser.c	2008-04-25 11:14:57.000000000 -0600
+++ work10/drivers/pnp/pnpbios/rsparser.c	2008-04-25 11:14:58.000000000 -0600
@@ -145,8 +145,7 @@
 
 	dev_dbg(&dev->dev, "parse allocated resources\n");
 
-	/* Blank the resource table values */
-	pnp_init_resource_table(&dev->res);
+	pnp_init_resources(dev);
 
 	while ((char *)p < (char *)end) {
 

-- 

^ permalink raw reply	[flat|nested] 80+ messages in thread

* [patch 23/54] PNP: remove pnp_resource_table from internal pnp_clean_resource_table interface
  2008-04-25 18:38 [patch 00/54] PNP cleanup, v4 Bjorn Helgaas
                   ` (21 preceding siblings ...)
  2008-04-25 18:38 ` [patch 22/54] PNP: add pnp_init_resources(struct pnp_dev *) interface Bjorn Helgaas
@ 2008-04-25 18:38 ` Bjorn Helgaas
  2008-04-25 18:38 ` [patch 24/54] PNP: remove unused interfaces using pnp_resource_table Bjorn Helgaas
                   ` (31 subsequent siblings)
  54 siblings, 0 replies; 80+ messages in thread
From: Bjorn Helgaas @ 2008-04-25 18:38 UTC (permalink / raw)
  To: Len Brown
  Cc: linux-acpi, Rene Herman, linux-kernel, Adam Belay, Adam M Belay,
	Li Shaohua, Matthieu Castet, Thomas Renninger, Rene Herman,
	Jaroslav Kysela, Andrew Morton

[-- Attachment #1: pnp-remove-pnp_resource_table-from-clean --]
[-- Type: text/plain, Size: 1723 bytes --]

This changes pnp_clean_resource_table() to take a pnp_dev pointer
rather than a pnp_resource_table pointer.  This reduces the visibility
of pnp_resource_table and removes an opportunity for error in the
caller.

Signed-off-by: Bjorn Helgaas <bjorn.helgaas@hp.com>
Acked-By: Rene Herman <rene.herman@gmail.com>

Index: work10/drivers/pnp/manager.c
===================================================================
--- work10.orig/drivers/pnp/manager.c	2008-04-25 11:14:58.000000000 -0600
+++ work10/drivers/pnp/manager.c	2008-04-25 11:14:58.000000000 -0600
@@ -281,8 +281,9 @@
  * pnp_clean_resources - clears resources that were not manually set
  * @res: the resources to clean
  */
-static void pnp_clean_resource_table(struct pnp_resource_table *res)
+static void pnp_clean_resource_table(struct pnp_dev *dev)
 {
+	struct pnp_resource_table *res = &dev->res;
 	int idx;
 
 	for (idx = 0; idx < PNP_MAX_IRQ; idx++) {
@@ -339,7 +340,7 @@
 
 	dbg_pnp_show_resources(dev, "before pnp_assign_resources");
 	mutex_lock(&pnp_res_mutex);
-	pnp_clean_resource_table(&dev->res);	/* start with a fresh slate */
+	pnp_clean_resource_table(dev);
 	if (dev->independent) {
 		dev_dbg(&dev->dev, "assigning independent options\n");
 		port = dev->independent->port;
@@ -415,7 +416,7 @@
 	return 1;
 
 fail:
-	pnp_clean_resource_table(&dev->res);
+	pnp_clean_resource_table(dev);
 	mutex_unlock(&pnp_res_mutex);
 	dbg_pnp_show_resources(dev, "after pnp_assign_resources (failed)");
 	return 0;
@@ -595,7 +596,7 @@
 
 	/* release the resources so that other devices can use them */
 	mutex_lock(&pnp_res_mutex);
-	pnp_clean_resource_table(&dev->res);
+	pnp_clean_resource_table(dev);
 	mutex_unlock(&pnp_res_mutex);
 
 	return 0;

-- 

^ permalink raw reply	[flat|nested] 80+ messages in thread

* [patch 24/54] PNP: remove unused interfaces using pnp_resource_table
  2008-04-25 18:38 [patch 00/54] PNP cleanup, v4 Bjorn Helgaas
                   ` (22 preceding siblings ...)
  2008-04-25 18:38 ` [patch 23/54] PNP: remove pnp_resource_table from internal pnp_clean_resource_table interface Bjorn Helgaas
@ 2008-04-25 18:38 ` Bjorn Helgaas
  2008-04-25 18:38 ` [patch 25/54] PNP: use dev_printk when possible Bjorn Helgaas
                   ` (30 subsequent siblings)
  54 siblings, 0 replies; 80+ messages in thread
From: Bjorn Helgaas @ 2008-04-25 18:38 UTC (permalink / raw)
  To: Len Brown
  Cc: linux-acpi, Rene Herman, linux-kernel, Adam Belay, Adam M Belay,
	Li Shaohua, Matthieu Castet, Thomas Renninger, Rene Herman,
	Jaroslav Kysela, Andrew Morton

[-- Attachment #1: pnp-remove-unused-interfaces --]
[-- Type: text/plain, Size: 6228 bytes --]

Rene Herman <rene.herman@gmail.com> recently removed the only in-tree
driver uses of:

    pnp_init_resource_table()
    pnp_manual_config_dev()
    pnp_resource_change()

in this change:

    http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commitdiff;h=109c53f840e551d6e99ecfd8b0131a968332c89f

These are no longer used in the PNP core either, so we can just remove
them completely.

It's possible that there are out-of-tree drivers that use these
interfaces.  They should be changed to either (1) use PNP quirks
to work around broken hardware or firmware, or (2) use the sysfs
interfaces to control resource usage from userspace.

Signed-off-by: Bjorn Helgaas <bjorn.helgaas@hp.com>
Acked-By: Rene Herman <rene.herman@gmail.com>

---
 drivers/pnp/manager.c |   78 +-------------------------------------------------
 include/linux/pnp.h   |    9 -----
 2 files changed, 3 insertions(+), 84 deletions(-)

Index: work10/include/linux/pnp.h
===================================================================
--- work10.orig/include/linux/pnp.h	2008-04-25 11:14:58.000000000 -0600
+++ work10/include/linux/pnp.h	2008-04-25 11:14:59.000000000 -0600
@@ -390,18 +390,13 @@
 			       struct pnp_port *data);
 int pnp_register_mem_resource(struct pnp_dev *dev, struct pnp_option *option,
 			      struct pnp_mem *data);
-void pnp_init_resource_table(struct pnp_resource_table *table);
 void pnp_init_resources(struct pnp_dev *dev);
-int pnp_manual_config_dev(struct pnp_dev *dev, struct pnp_resource_table *res,
-			  int mode);
 int pnp_auto_config_dev(struct pnp_dev *dev);
 int pnp_validate_config(struct pnp_dev *dev);
 int pnp_start_dev(struct pnp_dev *dev);
 int pnp_stop_dev(struct pnp_dev *dev);
 int pnp_activate_dev(struct pnp_dev *dev);
 int pnp_disable_dev(struct pnp_dev *dev);
-void pnp_resource_change(struct resource *resource, resource_size_t start,
-			 resource_size_t size);
 
 /* protocol helpers */
 int pnp_is_active(struct pnp_dev *dev);
@@ -438,16 +433,13 @@
 static inline int pnp_register_dma_resource(struct pnp_dev *dev, struct pnp_option *option, struct pnp_dma *data) { return -ENODEV; }
 static inline int pnp_register_port_resource(struct pnp_dev *dev, struct pnp_option *option, struct pnp_port *data) { return -ENODEV; }
 static inline int pnp_register_mem_resource(struct pnp_dev *dev, struct pnp_option *option, struct pnp_mem *data) { return -ENODEV; }
-static inline void pnp_init_resource_table(struct pnp_resource_table *table) { }
 static inline void pnp_init_resources(struct pnp_dev *dev) { }
-static inline int pnp_manual_config_dev(struct pnp_dev *dev, struct pnp_resource_table *res, int mode) { return -ENODEV; }
 static inline int pnp_auto_config_dev(struct pnp_dev *dev) { return -ENODEV; }
 static inline int pnp_validate_config(struct pnp_dev *dev) { return -ENODEV; }
 static inline int pnp_start_dev(struct pnp_dev *dev) { return -ENODEV; }
 static inline int pnp_stop_dev(struct pnp_dev *dev) { return -ENODEV; }
 static inline int pnp_activate_dev(struct pnp_dev *dev) { return -ENODEV; }
 static inline int pnp_disable_dev(struct pnp_dev *dev) { return -ENODEV; }
-static inline void pnp_resource_change(struct resource *resource, resource_size_t start, resource_size_t size) { }
 
 /* protocol helpers */
 static inline int pnp_is_active(struct pnp_dev *dev) { return 0; }
Index: work10/drivers/pnp/manager.c
===================================================================
--- work10.orig/drivers/pnp/manager.c	2008-04-25 11:14:58.000000000 -0600
+++ work10/drivers/pnp/manager.c	2008-04-25 11:14:59.000000000 -0600
@@ -238,8 +238,9 @@
  * pnp_init_resources - Resets a resource table to default values.
  * @table: pointer to the desired resource table
  */
-void pnp_init_resource_table(struct pnp_resource_table *table)
+void pnp_init_resources(struct pnp_dev *dev)
 {
+	struct pnp_resource_table *table = &dev->res;
 	int idx;
 
 	for (idx = 0; idx < PNP_MAX_IRQ; idx++) {
@@ -272,11 +273,6 @@
 	}
 }
 
-void pnp_init_resources(struct pnp_dev *dev)
-{
-	pnp_init_resource_table(&dev->res);
-}
-
 /**
  * pnp_clean_resources - clears resources that were not manually set
  * @res: the resources to clean
@@ -423,59 +419,6 @@
 }
 
 /**
- * pnp_manual_config_dev - Disables Auto Config and Manually sets the resource table
- * @dev: pointer to the desired device
- * @res: pointer to the new resource config
- * @mode: 0 or PNP_CONFIG_FORCE
- *
- * This function can be used by drivers that want to manually set thier resources.
- */
-int pnp_manual_config_dev(struct pnp_dev *dev, struct pnp_resource_table *res,
-			  int mode)
-{
-	int i;
-	struct pnp_resource_table *bak;
-
-	if (!pnp_can_configure(dev))
-		return -ENODEV;
-	bak = pnp_alloc(sizeof(struct pnp_resource_table));
-	if (!bak)
-		return -ENOMEM;
-	*bak = dev->res;
-
-	mutex_lock(&pnp_res_mutex);
-	dev->res = *res;
-	if (!(mode & PNP_CONFIG_FORCE)) {
-		for (i = 0; i < PNP_MAX_PORT; i++) {
-			if (!pnp_check_port(dev, i))
-				goto fail;
-		}
-		for (i = 0; i < PNP_MAX_MEM; i++) {
-			if (!pnp_check_mem(dev, i))
-				goto fail;
-		}
-		for (i = 0; i < PNP_MAX_IRQ; i++) {
-			if (!pnp_check_irq(dev, i))
-				goto fail;
-		}
-		for (i = 0; i < PNP_MAX_DMA; i++) {
-			if (!pnp_check_dma(dev, i))
-				goto fail;
-		}
-	}
-	mutex_unlock(&pnp_res_mutex);
-
-	kfree(bak);
-	return 0;
-
-fail:
-	dev->res = *bak;
-	mutex_unlock(&pnp_res_mutex);
-	kfree(bak);
-	return -EINVAL;
-}
-
-/**
  * pnp_auto_config_dev - automatically assigns resources to a device
  * @dev: pointer to the desired device
  */
@@ -602,24 +545,7 @@
 	return 0;
 }
 
-/**
- * pnp_resource_change - change one resource
- * @resource: pointer to resource to be changed
- * @start: start of region
- * @size: size of region
- */
-void pnp_resource_change(struct resource *resource, resource_size_t start,
-			 resource_size_t size)
-{
-	resource->flags &= ~(IORESOURCE_AUTO | IORESOURCE_UNSET);
-	resource->start = start;
-	resource->end = start + size - 1;
-}
-
-EXPORT_SYMBOL(pnp_manual_config_dev);
 EXPORT_SYMBOL(pnp_start_dev);
 EXPORT_SYMBOL(pnp_stop_dev);
 EXPORT_SYMBOL(pnp_activate_dev);
 EXPORT_SYMBOL(pnp_disable_dev);
-EXPORT_SYMBOL(pnp_resource_change);
-EXPORT_SYMBOL(pnp_init_resource_table);

-- 

^ permalink raw reply	[flat|nested] 80+ messages in thread

* [patch 25/54] PNP: use dev_printk when possible
  2008-04-25 18:38 [patch 00/54] PNP cleanup, v4 Bjorn Helgaas
                   ` (23 preceding siblings ...)
  2008-04-25 18:38 ` [patch 24/54] PNP: remove unused interfaces using pnp_resource_table Bjorn Helgaas
@ 2008-04-25 18:38 ` Bjorn Helgaas
  2008-04-25 18:38 ` [patch 26/54] PNP: factor pnp_init_resource_table() and pnp_clean_resource_table() Bjorn Helgaas
                   ` (29 subsequent siblings)
  54 siblings, 0 replies; 80+ messages in thread
From: Bjorn Helgaas @ 2008-04-25 18:38 UTC (permalink / raw)
  To: Len Brown
  Cc: linux-acpi, Rene Herman, linux-kernel, Adam Belay, Adam M Belay,
	Li Shaohua, Matthieu Castet, Thomas Renninger, Rene Herman,
	Jaroslav Kysela, Andrew Morton

[-- Attachment #1: pnp-dev_printk --]
[-- Type: text/plain, Size: 8310 bytes --]

Use dev_printk() when possible for more informative error messages.

Signed-off-by: Bjorn Helgaas <bjorn.helgaas@hp.com>
Acked-By: Rene Herman <rene.herman@gmail.com>

---
 drivers/pnp/isapnp/core.c      |   38 ++++++++++++++++++--------------------
 drivers/pnp/pnpacpi/rsparser.c |   20 ++++++++++++--------
 drivers/pnp/pnpbios/rsparser.c |   36 ++++++++++++++----------------------
 3 files changed, 44 insertions(+), 50 deletions(-)

Index: work10/drivers/pnp/isapnp/core.c
===================================================================
--- work10.orig/drivers/pnp/isapnp/core.c	2008-04-25 11:14:58.000000000 -0600
+++ work10/drivers/pnp/isapnp/core.c	2008-04-25 11:14:59.000000000 -0600
@@ -737,9 +737,8 @@
 				isapnp_skip_bytes(size);
 			return 1;
 		default:
-			printk(KERN_ERR
-			       "isapnp: unexpected or unknown tag type 0x%x for logical device %i (device %i), ignored\n",
-			       type, dev->number, card->number);
+			dev_err(&dev->dev, "unknown tag 0x%x (card %i), "
+				"ignored\n", type, card->number);
 		}
 __skip:
 		if (size > 0)
@@ -792,9 +791,8 @@
 				isapnp_skip_bytes(size);
 			return;
 		default:
-			printk(KERN_ERR
-			       "isapnp: unexpected or unknown tag type 0x%x for device %i, ignored\n",
-			       type, card->number);
+			dev_err(&card->dev, "unknown tag 0x%x, ignored\n",
+			       type);
 		}
 __skip:
 		if (size > 0)
@@ -841,13 +839,6 @@
 		isapnp_wake(csn);
 		isapnp_peek(header, 9);
 		checksum = isapnp_checksum(header);
-#if 0
-		printk(KERN_DEBUG
-		       "vendor: %02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x\n",
-		       header[0], header[1], header[2], header[3], header[4],
-		       header[5], header[6], header[7], header[8]);
-		printk(KERN_DEBUG "checksum = 0x%x\n", checksum);
-#endif
 		eisa_id = header[0] | header[1] << 8 |
 			  header[2] << 16 | header[3] << 24;
 		pnp_eisa_id_to_string(eisa_id, id);
@@ -855,6 +846,13 @@
 		if (!card)
 			continue;
 
+#if 0
+		dev_info(&card->dev,
+		       "vendor: %02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x\n",
+		       header[0], header[1], header[2], header[3], header[4],
+		       header[5], header[6], header[7], header[8]);
+		dev_info(&card->dev, "checksum = 0x%x\n", checksum);
+#endif
 		INIT_LIST_HEAD(&card->devices);
 		card->serial =
 		    (header[7] << 24) | (header[6] << 16) | (header[5] << 8) |
@@ -862,9 +860,8 @@
 		isapnp_checksum_value = 0x00;
 		isapnp_parse_resource_map(card);
 		if (isapnp_checksum_value != 0x00)
-			printk(KERN_ERR
-			       "isapnp: checksum for device %i is not valid (0x%x)\n",
-			       csn, isapnp_checksum_value);
+			dev_err(&card->dev, "invalid checksum 0x%x\n",
+				isapnp_checksum_value);
 		card->checksum = isapnp_checksum_value;
 
 		pnp_add_card(card);
@@ -1134,13 +1131,13 @@
 	protocol_for_each_card(&isapnp_protocol, card) {
 		cards++;
 		if (isapnp_verbose) {
-			printk(KERN_INFO "isapnp: Card '%s'\n",
-			       card->name[0] ? card->name : "Unknown");
+			dev_info(&card->dev, "card '%s'\n",
+			       card->name[0] ? card->name : "unknown");
 			if (isapnp_verbose < 2)
 				continue;
 			card_for_each_dev(card, dev) {
-				printk(KERN_INFO "isapnp:   Device '%s'\n",
-				       dev->name[0] ? dev->name : "Unknown");
+				dev_info(&card->dev, "device '%s'\n",
+				       dev->name[0] ? dev->name : "unknown");
 			}
 		}
 	}
Index: work10/drivers/pnp/pnpacpi/rsparser.c
===================================================================
--- work10.orig/drivers/pnp/pnpacpi/rsparser.c	2008-04-25 11:14:58.000000000 -0600
+++ work10/drivers/pnp/pnpacpi/rsparser.c	2008-04-25 11:14:59.000000000 -0600
@@ -110,7 +110,7 @@
 		p = p ? ACPI_ACTIVE_LOW : ACPI_ACTIVE_HIGH;
 
 		if (triggering != t || polarity != p) {
-			pnp_warn("IRQ %d override to %s, %s",
+			dev_warn(&dev->dev, "IRQ %d override to %s, %s\n",
 				gsi, t ? "edge":"level", p ? "low":"high");
 			triggering = t;
 			polarity = p;
@@ -263,7 +263,7 @@
 
 	status = acpi_resource_to_address64(res, p);
 	if (!ACPI_SUCCESS(status)) {
-		pnp_warn("PnPACPI: failed to convert resource type %d",
+		dev_warn(&dev->dev, "failed to convert resource type %d\n",
 			 res->type);
 		return;
 	}
@@ -397,7 +397,8 @@
 		break;
 
 	default:
-		pnp_warn("PnPACPI: unknown resource type %d", res->type);
+		dev_warn(&dev->dev, "unknown resource type %d in _CRS\n",
+			 res->type);
 		return AE_ERROR;
 	}
 
@@ -674,7 +675,8 @@
 	case ACPI_RESOURCE_TYPE_END_DEPENDENT:
 		/*only one EndDependentFn is allowed */
 		if (!parse_data->option_independent) {
-			pnp_warn("PnPACPI: more than one EndDependentFn");
+			dev_warn(&dev->dev, "more than one EndDependentFn "
+				 "in _PRS\n");
 			return AE_ERROR;
 		}
 		parse_data->option = parse_data->option_independent;
@@ -726,7 +728,8 @@
 		break;
 
 	default:
-		pnp_warn("PnPACPI: unknown resource type %d", res->type);
+		dev_warn(&dev->dev, "unknown resource type %d in _PRS\n",
+			 res->type);
 		return AE_ERROR;
 	}
 
@@ -808,7 +811,7 @@
 	status = acpi_walk_resources(handle, METHOD_NAME__CRS,
 				     pnpacpi_count_resources, &res_cnt);
 	if (ACPI_FAILURE(status)) {
-		pnp_err("Evaluate _CRS failed");
+		dev_err(&dev->dev, "can't evaluate _CRS\n");
 		return -EINVAL;
 	}
 	if (!res_cnt)
@@ -823,7 +826,7 @@
 				     pnpacpi_type_resources, &resource);
 	if (ACPI_FAILURE(status)) {
 		kfree(buffer->pointer);
-		pnp_err("Evaluate _CRS failed");
+		dev_err(&dev->dev, "can't evaluate _CRS\n");
 		return -EINVAL;
 	}
 	/* resource will pointer the end resource now */
@@ -1074,7 +1077,8 @@
 		case ACPI_RESOURCE_TYPE_EXTENDED_ADDRESS64:
 		case ACPI_RESOURCE_TYPE_GENERIC_REGISTER:
 		default:	/* other type */
-			pnp_warn("unknown resource type %d", resource->type);
+			dev_warn(&dev->dev, "can't encode unknown resource "
+				 "type %d\n", resource->type);
 			return -EINVAL;
 		}
 		resource++;
Index: work10/drivers/pnp/pnpbios/rsparser.c
===================================================================
--- work10.orig/drivers/pnp/pnpbios/rsparser.c	2008-04-25 11:14:58.000000000 -0600
+++ work10/drivers/pnp/pnpbios/rsparser.c	2008-04-25 11:14:59.000000000 -0600
@@ -241,9 +241,8 @@
 
 		default:	/* an unkown tag */
 len_err:
-			printk(KERN_ERR
-			       "PnPBIOS: Unknown tag '0x%x', length '%d'.\n",
-			       tag, len);
+			dev_err(&dev->dev, "unknown tag 0x%x length %d\n",
+				tag, len);
 			break;
 		}
 
@@ -254,8 +253,7 @@
 			p += len + 1;
 	}
 
-	printk(KERN_ERR
-	       "PnPBIOS: Resource structure does not contain an end tag.\n");
+	dev_err(&dev->dev, "no end tag in resource structure\n");
 
 	return NULL;
 }
@@ -471,8 +469,8 @@
 			if (len != 0)
 				goto len_err;
 			if (option_independent == option)
-				printk(KERN_WARNING
-				       "PnPBIOS: Missing SMALL_TAG_STARTDEP tag\n");
+				dev_warn(&dev->dev, "missing "
+					 "SMALL_TAG_STARTDEP tag\n");
 			option = option_independent;
 			dev_dbg(&dev->dev, "end dependent options\n");
 			break;
@@ -482,9 +480,8 @@
 
 		default:	/* an unkown tag */
 len_err:
-			printk(KERN_ERR
-			       "PnPBIOS: Unknown tag '0x%x', length '%d'.\n",
-			       tag, len);
+			dev_err(&dev->dev, "unknown tag 0x%x length %d\n",
+				tag, len);
 			break;
 		}
 
@@ -495,8 +492,7 @@
 			p += len + 1;
 	}
 
-	printk(KERN_ERR
-	       "PnPBIOS: Resource structure does not contain an end tag.\n");
+	dev_err(&dev->dev, "no end tag in resource structure\n");
 
 	return NULL;
 }
@@ -554,9 +550,8 @@
 
 		default:	/* an unkown tag */
 len_err:
-			printk(KERN_ERR
-			       "PnPBIOS: Unknown tag '0x%x', length '%d'.\n",
-			       tag, len);
+			dev_err(&dev->dev, "unknown tag 0x%x length %d\n",
+				tag, len);
 			break;
 		}
 
@@ -567,8 +562,7 @@
 			p += len + 1;
 	}
 
-	printk(KERN_ERR
-	       "PnPBIOS: Resource structure does not contain an end tag.\n");
+	dev_err(&dev->dev, "no end tag in resource structure\n");
 
 	return NULL;
 }
@@ -774,9 +768,8 @@
 
 		default:	/* an unkown tag */
 len_err:
-			printk(KERN_ERR
-			       "PnPBIOS: Unknown tag '0x%x', length '%d'.\n",
-			       tag, len);
+			dev_err(&dev->dev, "unknown tag 0x%x length %d\n",
+				tag, len);
 			break;
 		}
 
@@ -787,8 +780,7 @@
 			p += len + 1;
 	}
 
-	printk(KERN_ERR
-	       "PnPBIOS: Resource structure does not contain an end tag.\n");
+	dev_err(&dev->dev, "no end tag in resource structure\n");
 
 	return NULL;
 }

-- 

^ permalink raw reply	[flat|nested] 80+ messages in thread

* [patch 26/54] PNP: factor pnp_init_resource_table() and pnp_clean_resource_table()
  2008-04-25 18:38 [patch 00/54] PNP cleanup, v4 Bjorn Helgaas
                   ` (24 preceding siblings ...)
  2008-04-25 18:38 ` [patch 25/54] PNP: use dev_printk when possible Bjorn Helgaas
@ 2008-04-25 18:38 ` Bjorn Helgaas
  2008-04-26 21:33   ` Rene Herman
  2008-04-25 18:38 ` [patch 27/54] PNP: add pnp_get_resource() interface Bjorn Helgaas
                   ` (28 subsequent siblings)
  54 siblings, 1 reply; 80+ messages in thread
From: Bjorn Helgaas @ 2008-04-25 18:38 UTC (permalink / raw)
  To: Len Brown
  Cc: linux-acpi, linux-kernel, Adam Belay, Adam M Belay, Li Shaohua,
	Matthieu Castet, Thomas Renninger, Rene Herman, Jaroslav Kysela,
	Andrew Morton

[-- Attachment #1: pnp-factor-init-resources --]
[-- Type: text/plain, Size: 5042 bytes --]

Move the common part of pnp_init_resource_table() and
pnp_clean_resource_table() into a new pnp_init_resource().
This reduces a little code duplication and will be
useful later to initialize an individual resource.

Signed-off-by: Bjorn Helgaas <bjorn.helgaas@hp.com>

---
 drivers/pnp/base.h    |    2 +
 drivers/pnp/manager.c |   90 ++++++++++++++++++++++++--------------------------
 2 files changed, 46 insertions(+), 46 deletions(-)

Index: work10/drivers/pnp/base.h
===================================================================
--- work10.orig/drivers/pnp/base.h	2008-04-25 11:14:57.000000000 -0600
+++ work10/drivers/pnp/base.h	2008-04-25 11:15:00.000000000 -0600
@@ -18,3 +18,5 @@
 int pnp_check_dma(struct pnp_dev * dev, int idx);
 
 void dbg_pnp_show_resources(struct pnp_dev *dev, char *desc);
+
+void pnp_init_resource(struct resource *res);
Index: work10/drivers/pnp/manager.c
===================================================================
--- work10.orig/drivers/pnp/manager.c	2008-04-25 11:14:59.000000000 -0600
+++ work10/drivers/pnp/manager.c	2008-04-25 11:15:00.000000000 -0600
@@ -234,42 +234,52 @@
 	dev_dbg(&dev->dev, "  disable dma %d\n", idx);
 }
 
+void pnp_init_resource(struct resource *res)
+{
+	unsigned long type;
+
+	type = res->flags & (IORESOURCE_IO  | IORESOURCE_MEM |
+			     IORESOURCE_IRQ | IORESOURCE_DMA);
+
+	res->name = NULL;
+	res->flags = type | IORESOURCE_AUTO | IORESOURCE_UNSET;
+	if (type == IORESOURCE_IRQ || type == IORESOURCE_DMA) {
+		res->start = -1;
+		res->end = -1;
+	} else {
+		res->start = 0;
+		res->end = 0;
+	}
+}
+
 /**
  * pnp_init_resources - Resets a resource table to default values.
  * @table: pointer to the desired resource table
  */
 void pnp_init_resources(struct pnp_dev *dev)
 {
-	struct pnp_resource_table *table = &dev->res;
+	struct resource *res;
 	int idx;
 
 	for (idx = 0; idx < PNP_MAX_IRQ; idx++) {
-		table->irq_resource[idx].name = NULL;
-		table->irq_resource[idx].start = -1;
-		table->irq_resource[idx].end = -1;
-		table->irq_resource[idx].flags =
-		    IORESOURCE_IRQ | IORESOURCE_AUTO | IORESOURCE_UNSET;
+		res = &dev->res.irq_resource[idx];
+		res->flags = IORESOURCE_IRQ;
+		pnp_init_resource(res);
 	}
 	for (idx = 0; idx < PNP_MAX_DMA; idx++) {
-		table->dma_resource[idx].name = NULL;
-		table->dma_resource[idx].start = -1;
-		table->dma_resource[idx].end = -1;
-		table->dma_resource[idx].flags =
-		    IORESOURCE_DMA | IORESOURCE_AUTO | IORESOURCE_UNSET;
+		res = &dev->res.dma_resource[idx];
+		res->flags = IORESOURCE_DMA;
+		pnp_init_resource(res);
 	}
 	for (idx = 0; idx < PNP_MAX_PORT; idx++) {
-		table->port_resource[idx].name = NULL;
-		table->port_resource[idx].start = 0;
-		table->port_resource[idx].end = 0;
-		table->port_resource[idx].flags =
-		    IORESOURCE_IO | IORESOURCE_AUTO | IORESOURCE_UNSET;
+		res = &dev->res.port_resource[idx];
+		res->flags = IORESOURCE_IO;
+		pnp_init_resource(res);
 	}
 	for (idx = 0; idx < PNP_MAX_MEM; idx++) {
-		table->mem_resource[idx].name = NULL;
-		table->mem_resource[idx].start = 0;
-		table->mem_resource[idx].end = 0;
-		table->mem_resource[idx].flags =
-		    IORESOURCE_MEM | IORESOURCE_AUTO | IORESOURCE_UNSET;
+		res = &dev->res.mem_resource[idx];
+		res->flags = IORESOURCE_MEM;
+		pnp_init_resource(res);
 	}
 }
 
@@ -279,40 +289,28 @@
  */
 static void pnp_clean_resource_table(struct pnp_dev *dev)
 {
-	struct pnp_resource_table *res = &dev->res;
+	struct resource *res;
 	int idx;
 
 	for (idx = 0; idx < PNP_MAX_IRQ; idx++) {
-		if (!(res->irq_resource[idx].flags & IORESOURCE_AUTO))
-			continue;
-		res->irq_resource[idx].start = -1;
-		res->irq_resource[idx].end = -1;
-		res->irq_resource[idx].flags =
-		    IORESOURCE_IRQ | IORESOURCE_AUTO | IORESOURCE_UNSET;
+		res = &dev->res.irq_resource[idx];
+		if (res->flags & IORESOURCE_AUTO)
+			pnp_init_resource(res);
 	}
 	for (idx = 0; idx < PNP_MAX_DMA; idx++) {
-		if (!(res->dma_resource[idx].flags & IORESOURCE_AUTO))
-			continue;
-		res->dma_resource[idx].start = -1;
-		res->dma_resource[idx].end = -1;
-		res->dma_resource[idx].flags =
-		    IORESOURCE_DMA | IORESOURCE_AUTO | IORESOURCE_UNSET;
+		res = &dev->res.dma_resource[idx];
+		if (res->flags & IORESOURCE_AUTO)
+			pnp_init_resource(res);
 	}
 	for (idx = 0; idx < PNP_MAX_PORT; idx++) {
-		if (!(res->port_resource[idx].flags & IORESOURCE_AUTO))
-			continue;
-		res->port_resource[idx].start = 0;
-		res->port_resource[idx].end = 0;
-		res->port_resource[idx].flags =
-		    IORESOURCE_IO | IORESOURCE_AUTO | IORESOURCE_UNSET;
+		res = &dev->res.port_resource[idx];
+		if (res->flags & IORESOURCE_AUTO)
+			pnp_init_resource(res);
 	}
 	for (idx = 0; idx < PNP_MAX_MEM; idx++) {
-		if (!(res->mem_resource[idx].flags & IORESOURCE_AUTO))
-			continue;
-		res->mem_resource[idx].start = 0;
-		res->mem_resource[idx].end = 0;
-		res->mem_resource[idx].flags =
-		    IORESOURCE_MEM | IORESOURCE_AUTO | IORESOURCE_UNSET;
+		res = &dev->res.mem_resource[idx];
+		if (res->flags & IORESOURCE_AUTO)
+			pnp_init_resource(res);
 	}
 }
 

-- 

^ permalink raw reply	[flat|nested] 80+ messages in thread

* [patch 27/54] PNP: add pnp_get_resource() interface
  2008-04-25 18:38 [patch 00/54] PNP cleanup, v4 Bjorn Helgaas
                   ` (25 preceding siblings ...)
  2008-04-25 18:38 ` [patch 26/54] PNP: factor pnp_init_resource_table() and pnp_clean_resource_table() Bjorn Helgaas
@ 2008-04-25 18:38 ` Bjorn Helgaas
  2008-04-25 18:38 ` [patch 28/54] PNP: remove pnp_mem_flags() as an lvalue Bjorn Helgaas
                   ` (27 subsequent siblings)
  54 siblings, 0 replies; 80+ messages in thread
From: Bjorn Helgaas @ 2008-04-25 18:38 UTC (permalink / raw)
  To: Len Brown
  Cc: linux-acpi, Rene Herman, linux-kernel, Adam Belay, Adam M Belay,
	Li Shaohua, Matthieu Castet, Thomas Renninger, Rene Herman,
	Jaroslav Kysela, Andrew Morton

[-- Attachment #1: pnp-add-get-resource --]
[-- Type: text/plain, Size: 2016 bytes --]

This adds a pnp_get_resource() that works the same way as
platform_get_resource().  This will enable us to consolidate
many pnp_resource_table references in one place, which will
make it easier to make the table dynamic.

Signed-off-by: Bjorn Helgaas <bjorn.helgaas@hp.com>
Acked-By: Rene Herman <rene.herman@gmail.com>

---
 drivers/pnp/resource.c |   27 +++++++++++++++++++++++++++
 include/linux/pnp.h    |    1 +
 2 files changed, 28 insertions(+)

Index: work10/include/linux/pnp.h
===================================================================
--- work10.orig/include/linux/pnp.h	2008-04-25 11:14:59.000000000 -0600
+++ work10/include/linux/pnp.h	2008-04-25 11:15:01.000000000 -0600
@@ -25,6 +25,7 @@
 /*
  * Resource Management
  */
+struct resource *pnp_get_resource(struct pnp_dev *, unsigned int, unsigned int);
 
 /* Use these instead of directly reading pnp_dev to get resource information */
 #define pnp_port_start(dev,bar)   ((dev)->res.port_resource[(bar)].start)
Index: work10/drivers/pnp/resource.c
===================================================================
--- work10.orig/drivers/pnp/resource.c	2008-04-25 11:14:55.000000000 -0600
+++ work10/drivers/pnp/resource.c	2008-04-25 11:15:01.000000000 -0600
@@ -487,6 +487,33 @@
 #endif
 }
 
+struct resource *pnp_get_resource(struct pnp_dev *dev,
+				  unsigned int type, unsigned int num)
+{
+	struct pnp_resource_table *res = &dev->res;
+
+	switch (type) {
+	case IORESOURCE_IO:
+		if (num >= PNP_MAX_PORT)
+			return NULL;
+		return &res->port_resource[num];
+	case IORESOURCE_MEM:
+		if (num >= PNP_MAX_MEM)
+			return NULL;
+		return &res->mem_resource[num];
+	case IORESOURCE_IRQ:
+		if (num >= PNP_MAX_IRQ)
+			return NULL;
+		return &res->irq_resource[num];
+	case IORESOURCE_DMA:
+		if (num >= PNP_MAX_DMA)
+			return NULL;
+		return &res->dma_resource[num];
+	}
+	return NULL;
+}
+EXPORT_SYMBOL(pnp_get_resource);
+
 /* format is: pnp_reserve_irq=irq1[,irq2] .... */
 static int __init pnp_setup_reserve_irq(char *str)
 {

-- 

^ permalink raw reply	[flat|nested] 80+ messages in thread

* [patch 28/54] PNP: remove pnp_mem_flags() as an lvalue
  2008-04-25 18:38 [patch 00/54] PNP cleanup, v4 Bjorn Helgaas
                   ` (26 preceding siblings ...)
  2008-04-25 18:38 ` [patch 27/54] PNP: add pnp_get_resource() interface Bjorn Helgaas
@ 2008-04-25 18:38 ` Bjorn Helgaas
  2008-04-25 18:38 ` [patch 29/54] PNP: convert resource accessors to use pnp_get_resource(), not pnp_resource_table Bjorn Helgaas
                   ` (26 subsequent siblings)
  54 siblings, 0 replies; 80+ messages in thread
From: Bjorn Helgaas @ 2008-04-25 18:38 UTC (permalink / raw)
  To: Len Brown
  Cc: linux-acpi, linux-kernel, Adam Belay, Adam M Belay, Li Shaohua,
	Matthieu Castet, Thomas Renninger, Rene Herman, Jaroslav Kysela,
	Andrew Morton

[-- Attachment #1: pnp-remove-accessor-lvalues --]
[-- Type: text/plain, Size: 899 bytes --]

A future change will change pnp_mem_flags() from a "#define that
simplifies to an lvalue" to "an inline function that returns the
flags value."

Signed-off-by: Bjorn Helgaas <bjorn.helgaas@hp.com>

Index: work10/drivers/pnp/quirks.c
===================================================================
--- work10.orig/drivers/pnp/quirks.c	2008-04-25 11:12:16.000000000 -0600
+++ work10/drivers/pnp/quirks.c	2008-04-25 11:15:01.000000000 -0600
@@ -114,6 +114,7 @@
 static void quirk_system_pci_resources(struct pnp_dev *dev)
 {
 	struct pci_dev *pdev = NULL;
+	struct resource *res;
 	resource_size_t pnp_start, pnp_end, pci_start, pci_end;
 	int i, j;
 
@@ -173,7 +174,8 @@
 					pci_name(pdev), i,
 					(unsigned long long) pci_start,
 					(unsigned long long) pci_end);
-				pnp_mem_flags(dev, j) = 0;
+				res = pnp_get_resource(dev, IORESOURCE_MEM, j);
+				res->flags = 0;
 			}
 		}
 	}

-- 

^ permalink raw reply	[flat|nested] 80+ messages in thread

* [patch 29/54] PNP: convert resource accessors to use pnp_get_resource(), not pnp_resource_table
  2008-04-25 18:38 [patch 00/54] PNP cleanup, v4 Bjorn Helgaas
                   ` (27 preceding siblings ...)
  2008-04-25 18:38 ` [patch 28/54] PNP: remove pnp_mem_flags() as an lvalue Bjorn Helgaas
@ 2008-04-25 18:38 ` Bjorn Helgaas
  2008-04-26 21:42   ` Rene Herman
  2008-04-25 18:38 ` [patch 30/54] PNP: use conventional "i" for loop indices Bjorn Helgaas
                   ` (25 subsequent siblings)
  54 siblings, 1 reply; 80+ messages in thread
From: Bjorn Helgaas @ 2008-04-25 18:38 UTC (permalink / raw)
  To: Len Brown
  Cc: linux-acpi, linux-kernel, Adam Belay, Adam M Belay, Li Shaohua,
	Matthieu Castet, Thomas Renninger, Rene Herman, Jaroslav Kysela,
	Andrew Morton

[-- Attachment #1: pnp-convert-accessors-to-pnp_get_resource --]
[-- Type: text/plain, Size: 5311 bytes --]

This removes more direct references to pnp_resource_table.

Signed-off-by: Bjorn Helgaas <bjorn.helgaas@hp.com>

---
 include/linux/pnp.h |  148 +++++++++++++++++++++++++++++++++++++---------------
 1 file changed, 108 insertions(+), 40 deletions(-)

Index: work10/include/linux/pnp.h
===================================================================
--- work10.orig/include/linux/pnp.h	2008-04-25 11:15:01.000000000 -0600
+++ work10/include/linux/pnp.h	2008-04-25 11:15:02.000000000 -0600
@@ -27,46 +27,114 @@
  */
 struct resource *pnp_get_resource(struct pnp_dev *, unsigned int, unsigned int);
 
-/* Use these instead of directly reading pnp_dev to get resource information */
-#define pnp_port_start(dev,bar)   ((dev)->res.port_resource[(bar)].start)
-#define pnp_port_end(dev,bar)     ((dev)->res.port_resource[(bar)].end)
-#define pnp_port_flags(dev,bar)   ((dev)->res.port_resource[(bar)].flags)
-#define pnp_port_valid(dev,bar) \
-	((pnp_port_flags((dev),(bar)) & (IORESOURCE_IO | IORESOURCE_UNSET)) \
-		== IORESOURCE_IO)
-#define pnp_port_len(dev,bar) \
-	((pnp_port_start((dev),(bar)) == 0 &&	\
-	  pnp_port_end((dev),(bar)) ==		\
-	  pnp_port_start((dev),(bar))) ? 0 :	\
-	  					\
-	 (pnp_port_end((dev),(bar)) -		\
-	  pnp_port_start((dev),(bar)) + 1))
-
-#define pnp_mem_start(dev,bar)   ((dev)->res.mem_resource[(bar)].start)
-#define pnp_mem_end(dev,bar)     ((dev)->res.mem_resource[(bar)].end)
-#define pnp_mem_flags(dev,bar)   ((dev)->res.mem_resource[(bar)].flags)
-#define pnp_mem_valid(dev,bar) \
-	((pnp_mem_flags((dev),(bar)) & (IORESOURCE_MEM | IORESOURCE_UNSET)) \
-		== IORESOURCE_MEM)
-#define pnp_mem_len(dev,bar) \
-	((pnp_mem_start((dev),(bar)) == 0 &&	\
-	  pnp_mem_end((dev),(bar)) ==		\
-	  pnp_mem_start((dev),(bar))) ? 0 :	\
-	  					\
-	 (pnp_mem_end((dev),(bar)) -		\
-	  pnp_mem_start((dev),(bar)) + 1))
-
-#define pnp_irq(dev,bar)	 ((dev)->res.irq_resource[(bar)].start)
-#define pnp_irq_flags(dev,bar)	 ((dev)->res.irq_resource[(bar)].flags)
-#define pnp_irq_valid(dev,bar) \
-	((pnp_irq_flags((dev),(bar)) & (IORESOURCE_IRQ | IORESOURCE_UNSET)) \
-		== IORESOURCE_IRQ)
-
-#define pnp_dma(dev,bar)	 ((dev)->res.dma_resource[(bar)].start)
-#define pnp_dma_flags(dev,bar)	 ((dev)->res.dma_resource[(bar)].flags)
-#define pnp_dma_valid(dev,bar) \
-	((pnp_dma_flags((dev),(bar)) & (IORESOURCE_DMA | IORESOURCE_UNSET)) \
-		== IORESOURCE_DMA)
+static inline int pnp_resource_valid(struct resource *res)
+{
+	if (res && !(res->flags & IORESOURCE_UNSET))
+		return 1;
+	return 0;
+}
+
+static inline resource_size_t pnp_resource_len(struct resource *res)
+{
+	if (res->start == 0 && res->end == 0)
+		return 0;
+	return res->end - res->start + 1;
+}
+
+
+static inline resource_size_t pnp_port_start(struct pnp_dev *dev,
+					     unsigned int bar)
+{
+	return pnp_get_resource(dev, IORESOURCE_IO, bar)->start;
+}
+
+static inline resource_size_t pnp_port_end(struct pnp_dev *dev,
+					   unsigned int bar)
+{
+	return pnp_get_resource(dev, IORESOURCE_IO, bar)->end;
+}
+
+static inline resource_size_t pnp_port_flags(struct pnp_dev *dev,
+					     unsigned int bar)
+{
+	return pnp_get_resource(dev, IORESOURCE_IO, bar)->flags;
+}
+
+static inline int pnp_port_valid(struct pnp_dev *dev, unsigned int bar)
+{
+	return pnp_resource_valid(pnp_get_resource(dev, IORESOURCE_IO, bar));
+}
+
+static inline resource_size_t pnp_port_len(struct pnp_dev *dev,
+					   unsigned int bar)
+{
+	return pnp_resource_len(pnp_get_resource(dev, IORESOURCE_IO, bar));
+}
+
+
+static inline resource_size_t pnp_mem_start(struct pnp_dev *dev,
+					    unsigned int bar)
+{
+	return pnp_get_resource(dev, IORESOURCE_MEM, bar)->start;
+}
+
+static inline resource_size_t pnp_mem_end(struct pnp_dev *dev,
+					  unsigned int bar)
+{
+	return pnp_get_resource(dev, IORESOURCE_MEM, bar)->end;
+}
+
+static inline resource_size_t pnp_mem_flags(struct pnp_dev *dev,
+					    unsigned int bar)
+{
+	return pnp_get_resource(dev, IORESOURCE_MEM, bar)->flags;
+}
+
+static inline int pnp_mem_valid(struct pnp_dev *dev, unsigned int bar)
+{
+	return pnp_resource_valid(pnp_get_resource(dev, IORESOURCE_MEM, bar));
+}
+
+static inline resource_size_t pnp_mem_len(struct pnp_dev *dev,
+					  unsigned int bar)
+{
+	return pnp_resource_len(pnp_get_resource(dev, IORESOURCE_MEM, bar));
+}
+
+
+static inline resource_size_t pnp_irq(struct pnp_dev *dev, unsigned int bar)
+{
+	return pnp_get_resource(dev, IORESOURCE_IRQ, bar)->start;
+}
+
+static inline resource_size_t pnp_irq_flags(struct pnp_dev *dev,
+					    unsigned int bar)
+{
+	return pnp_get_resource(dev, IORESOURCE_IRQ, bar)->flags;
+}
+
+static inline int pnp_irq_valid(struct pnp_dev *dev, unsigned int bar)
+{
+	return pnp_resource_valid(pnp_get_resource(dev, IORESOURCE_IRQ, bar));
+}
+
+
+static inline resource_size_t pnp_dma(struct pnp_dev *dev, unsigned int bar)
+{
+	return pnp_get_resource(dev, IORESOURCE_DMA, bar)->start;
+}
+
+static inline resource_size_t pnp_dma_flags(struct pnp_dev *dev,
+					    unsigned int bar)
+{
+	return pnp_get_resource(dev, IORESOURCE_DMA, bar)->flags;
+}
+
+static inline int pnp_dma_valid(struct pnp_dev *dev, unsigned int bar)
+{
+	return pnp_resource_valid(pnp_get_resource(dev, IORESOURCE_DMA, bar));
+}
+
 
 #define PNP_PORT_FLAG_16BITADDR	(1<<0)
 #define PNP_PORT_FLAG_FIXED	(1<<1)

-- 

^ permalink raw reply	[flat|nested] 80+ messages in thread

* [patch 30/54] PNP: use conventional "i" for loop indices
  2008-04-25 18:38 [patch 00/54] PNP cleanup, v4 Bjorn Helgaas
                   ` (28 preceding siblings ...)
  2008-04-25 18:38 ` [patch 29/54] PNP: convert resource accessors to use pnp_get_resource(), not pnp_resource_table Bjorn Helgaas
@ 2008-04-25 18:38 ` Bjorn Helgaas
  2008-04-25 18:38 ` [patch 31/54] PNP: reduce redundancy in pnp_assign_port() and others Bjorn Helgaas
                   ` (24 subsequent siblings)
  54 siblings, 0 replies; 80+ messages in thread
From: Bjorn Helgaas @ 2008-04-25 18:38 UTC (permalink / raw)
  To: Len Brown
  Cc: linux-acpi, Rene Herman, linux-kernel, Adam Belay, Adam M Belay,
	Li Shaohua, Matthieu Castet, Thomas Renninger, Rene Herman,
	Jaroslav Kysela, Andrew Morton

[-- Attachment #1: pnp-rename-temps --]
[-- Type: text/plain, Size: 6639 bytes --]

Cosmetic only: just use "i" instead of "tmp".

Signed-off-by: Bjorn Helgaas <bjorn.helgaas@hp.com>
Acked-By: Rene Herman <rene.herman@gmail.com>

Index: work10/drivers/pnp/resource.c
===================================================================
--- work10.orig/drivers/pnp/resource.c	2008-04-25 11:15:01.000000000 -0600
+++ work10/drivers/pnp/resource.c	2008-04-25 11:15:02.000000000 -0600
@@ -241,7 +241,7 @@
 
 int pnp_check_port(struct pnp_dev *dev, int idx)
 {
-	int tmp;
+	int i;
 	struct pnp_dev *tdev;
 	resource_size_t *port, *end, *tport, *tend;
 
@@ -260,18 +260,18 @@
 	}
 
 	/* check if the resource is reserved */
-	for (tmp = 0; tmp < 8; tmp++) {
-		int rport = pnp_reserve_io[tmp << 1];
-		int rend = pnp_reserve_io[(tmp << 1) + 1] + rport - 1;
+	for (i = 0; i < 8; i++) {
+		int rport = pnp_reserve_io[i << 1];
+		int rend = pnp_reserve_io[(i << 1) + 1] + rport - 1;
 		if (ranged_conflict(port, end, &rport, &rend))
 			return 0;
 	}
 
 	/* check for internal conflicts */
-	for (tmp = 0; tmp < PNP_MAX_PORT && tmp != idx; tmp++) {
-		if (dev->res.port_resource[tmp].flags & IORESOURCE_IO) {
-			tport = &dev->res.port_resource[tmp].start;
-			tend = &dev->res.port_resource[tmp].end;
+	for (i = 0; i < PNP_MAX_PORT && i != idx; i++) {
+		if (dev->res.port_resource[i].flags & IORESOURCE_IO) {
+			tport = &dev->res.port_resource[i].start;
+			tend = &dev->res.port_resource[i].end;
 			if (ranged_conflict(port, end, tport, tend))
 				return 0;
 		}
@@ -281,13 +281,13 @@
 	pnp_for_each_dev(tdev) {
 		if (tdev == dev)
 			continue;
-		for (tmp = 0; tmp < PNP_MAX_PORT; tmp++) {
-			if (tdev->res.port_resource[tmp].flags & IORESOURCE_IO) {
+		for (i = 0; i < PNP_MAX_PORT; i++) {
+			if (tdev->res.port_resource[i].flags & IORESOURCE_IO) {
 				if (cannot_compare
-				    (tdev->res.port_resource[tmp].flags))
+				    (tdev->res.port_resource[i].flags))
 					continue;
-				tport = &tdev->res.port_resource[tmp].start;
-				tend = &tdev->res.port_resource[tmp].end;
+				tport = &tdev->res.port_resource[i].start;
+				tend = &tdev->res.port_resource[i].end;
 				if (ranged_conflict(port, end, tport, tend))
 					return 0;
 			}
@@ -299,7 +299,7 @@
 
 int pnp_check_mem(struct pnp_dev *dev, int idx)
 {
-	int tmp;
+	int i;
 	struct pnp_dev *tdev;
 	resource_size_t *addr, *end, *taddr, *tend;
 
@@ -318,18 +318,18 @@
 	}
 
 	/* check if the resource is reserved */
-	for (tmp = 0; tmp < 8; tmp++) {
-		int raddr = pnp_reserve_mem[tmp << 1];
-		int rend = pnp_reserve_mem[(tmp << 1) + 1] + raddr - 1;
+	for (i = 0; i < 8; i++) {
+		int raddr = pnp_reserve_mem[i << 1];
+		int rend = pnp_reserve_mem[(i << 1) + 1] + raddr - 1;
 		if (ranged_conflict(addr, end, &raddr, &rend))
 			return 0;
 	}
 
 	/* check for internal conflicts */
-	for (tmp = 0; tmp < PNP_MAX_MEM && tmp != idx; tmp++) {
-		if (dev->res.mem_resource[tmp].flags & IORESOURCE_MEM) {
-			taddr = &dev->res.mem_resource[tmp].start;
-			tend = &dev->res.mem_resource[tmp].end;
+	for (i = 0; i < PNP_MAX_MEM && i != idx; i++) {
+		if (dev->res.mem_resource[i].flags & IORESOURCE_MEM) {
+			taddr = &dev->res.mem_resource[i].start;
+			tend = &dev->res.mem_resource[i].end;
 			if (ranged_conflict(addr, end, taddr, tend))
 				return 0;
 		}
@@ -339,13 +339,13 @@
 	pnp_for_each_dev(tdev) {
 		if (tdev == dev)
 			continue;
-		for (tmp = 0; tmp < PNP_MAX_MEM; tmp++) {
-			if (tdev->res.mem_resource[tmp].flags & IORESOURCE_MEM) {
+		for (i = 0; i < PNP_MAX_MEM; i++) {
+			if (tdev->res.mem_resource[i].flags & IORESOURCE_MEM) {
 				if (cannot_compare
-				    (tdev->res.mem_resource[tmp].flags))
+				    (tdev->res.mem_resource[i].flags))
 					continue;
-				taddr = &tdev->res.mem_resource[tmp].start;
-				tend = &tdev->res.mem_resource[tmp].end;
+				taddr = &tdev->res.mem_resource[i].start;
+				tend = &tdev->res.mem_resource[i].end;
 				if (ranged_conflict(addr, end, taddr, tend))
 					return 0;
 			}
@@ -362,7 +362,7 @@
 
 int pnp_check_irq(struct pnp_dev *dev, int idx)
 {
-	int tmp;
+	int i;
 	struct pnp_dev *tdev;
 	resource_size_t *irq = &dev->res.irq_resource[idx].start;
 
@@ -375,15 +375,15 @@
 		return 0;
 
 	/* check if the resource is reserved */
-	for (tmp = 0; tmp < 16; tmp++) {
-		if (pnp_reserve_irq[tmp] == *irq)
+	for (i = 0; i < 16; i++) {
+		if (pnp_reserve_irq[i] == *irq)
 			return 0;
 	}
 
 	/* check for internal conflicts */
-	for (tmp = 0; tmp < PNP_MAX_IRQ && tmp != idx; tmp++) {
-		if (dev->res.irq_resource[tmp].flags & IORESOURCE_IRQ) {
-			if (dev->res.irq_resource[tmp].start == *irq)
+	for (i = 0; i < PNP_MAX_IRQ && i != idx; i++) {
+		if (dev->res.irq_resource[i].flags & IORESOURCE_IRQ) {
+			if (dev->res.irq_resource[i].start == *irq)
 				return 0;
 		}
 	}
@@ -414,12 +414,12 @@
 	pnp_for_each_dev(tdev) {
 		if (tdev == dev)
 			continue;
-		for (tmp = 0; tmp < PNP_MAX_IRQ; tmp++) {
-			if (tdev->res.irq_resource[tmp].flags & IORESOURCE_IRQ) {
+		for (i = 0; i < PNP_MAX_IRQ; i++) {
+			if (tdev->res.irq_resource[i].flags & IORESOURCE_IRQ) {
 				if (cannot_compare
-				    (tdev->res.irq_resource[tmp].flags))
+				    (tdev->res.irq_resource[i].flags))
 					continue;
-				if ((tdev->res.irq_resource[tmp].start == *irq))
+				if ((tdev->res.irq_resource[i].start == *irq))
 					return 0;
 			}
 		}
@@ -431,7 +431,7 @@
 int pnp_check_dma(struct pnp_dev *dev, int idx)
 {
 #ifndef CONFIG_IA64
-	int tmp;
+	int i;
 	struct pnp_dev *tdev;
 	resource_size_t *dma = &dev->res.dma_resource[idx].start;
 
@@ -444,15 +444,15 @@
 		return 0;
 
 	/* check if the resource is reserved */
-	for (tmp = 0; tmp < 8; tmp++) {
-		if (pnp_reserve_dma[tmp] == *dma)
+	for (i = 0; i < 8; i++) {
+		if (pnp_reserve_dma[i] == *dma)
 			return 0;
 	}
 
 	/* check for internal conflicts */
-	for (tmp = 0; tmp < PNP_MAX_DMA && tmp != idx; tmp++) {
-		if (dev->res.dma_resource[tmp].flags & IORESOURCE_DMA) {
-			if (dev->res.dma_resource[tmp].start == *dma)
+	for (i = 0; i < PNP_MAX_DMA && i != idx; i++) {
+		if (dev->res.dma_resource[i].flags & IORESOURCE_DMA) {
+			if (dev->res.dma_resource[i].start == *dma)
 				return 0;
 		}
 	}
@@ -469,12 +469,12 @@
 	pnp_for_each_dev(tdev) {
 		if (tdev == dev)
 			continue;
-		for (tmp = 0; tmp < PNP_MAX_DMA; tmp++) {
-			if (tdev->res.dma_resource[tmp].flags & IORESOURCE_DMA) {
+		for (i = 0; i < PNP_MAX_DMA; i++) {
+			if (tdev->res.dma_resource[i].flags & IORESOURCE_DMA) {
 				if (cannot_compare
-				    (tdev->res.dma_resource[tmp].flags))
+				    (tdev->res.dma_resource[i].flags))
 					continue;
-				if ((tdev->res.dma_resource[tmp].start == *dma))
+				if ((tdev->res.dma_resource[i].start == *dma))
 					return 0;
 			}
 		}

-- 

^ permalink raw reply	[flat|nested] 80+ messages in thread

* [patch 31/54] PNP: reduce redundancy in pnp_assign_port() and others
  2008-04-25 18:38 [patch 00/54] PNP cleanup, v4 Bjorn Helgaas
                   ` (29 preceding siblings ...)
  2008-04-25 18:38 ` [patch 30/54] PNP: use conventional "i" for loop indices Bjorn Helgaas
@ 2008-04-25 18:38 ` Bjorn Helgaas
  2008-04-25 18:38 ` [patch 32/54] PNP: reduce redundancy in pnp_check_port() " Bjorn Helgaas
                   ` (23 subsequent siblings)
  54 siblings, 0 replies; 80+ messages in thread
From: Bjorn Helgaas @ 2008-04-25 18:38 UTC (permalink / raw)
  To: Len Brown
  Cc: linux-acpi, linux-kernel, Adam Belay, Adam M Belay, Li Shaohua,
	Matthieu Castet, Thomas Renninger, Rene Herman, Jaroslav Kysela,
	Andrew Morton

[-- Attachment #1: pnp-simplify-assign-functions --]
[-- Type: text/plain, Size: 8597 bytes --]

Use a temporary "res" pointer to replace repeated lookups in
the pnp resource tables.

Signed-off-by: Bjorn Helgaas <bjorn.helgaas@hp.com>

---
 drivers/pnp/manager.c |  108 ++++++++++++++++++++++----------------------------
 1 file changed, 48 insertions(+), 60 deletions(-)

Index: work10/drivers/pnp/manager.c
===================================================================
--- work10.orig/drivers/pnp/manager.c	2008-04-25 11:15:00.000000000 -0600
+++ work10/drivers/pnp/manager.c	2008-04-25 11:15:03.000000000 -0600
@@ -19,8 +19,7 @@
 
 static int pnp_assign_port(struct pnp_dev *dev, struct pnp_port *rule, int idx)
 {
-	resource_size_t *start, *end;
-	unsigned long *flags;
+	struct resource *res;
 
 	if (idx >= PNP_MAX_PORT) {
 		dev_err(&dev->dev, "too many I/O port resources\n");
@@ -28,49 +27,46 @@
 		return 1;
 	}
 
-	start = &dev->res.port_resource[idx].start;
-	end = &dev->res.port_resource[idx].end;
-	flags = &dev->res.port_resource[idx].flags;
+	res = &dev->res.port_resource[idx];
 
 	/* check if this resource has been manually set, if so skip */
-	if (!(dev->res.port_resource[idx].flags & IORESOURCE_AUTO)) {
+	if (!(res->flags & IORESOURCE_AUTO)) {
 		dev_dbg(&dev->dev, "  io %d already set to 0x%llx-0x%llx "
-			"flags 0x%x\n", idx, (unsigned long long) *start,
-			(unsigned long long) *end, (int) *flags);
+			"flags 0x%x\n", idx, (unsigned long long) res->start,
+			(unsigned long long) res->end, (int) res->flags);
 		return 1;
 	}
 
 	/* set the initial values */
-	*flags |= rule->flags | IORESOURCE_IO;
-	*flags &= ~IORESOURCE_UNSET;
+	res->flags |= rule->flags | IORESOURCE_IO;
+	res->flags &= ~IORESOURCE_UNSET;
 
 	if (!rule->size) {
-		*flags |= IORESOURCE_DISABLED;
+		res->flags |= IORESOURCE_DISABLED;
 		dev_dbg(&dev->dev, "  io %d disabled\n", idx);
 		return 1;	/* skip disabled resource requests */
 	}
 
-	*start = rule->min;
-	*end = *start + rule->size - 1;
+	res->start = rule->min;
+	res->end = res->start + rule->size - 1;
 
 	/* run through until pnp_check_port is happy */
 	while (!pnp_check_port(dev, idx)) {
-		*start += rule->align;
-		*end = *start + rule->size - 1;
-		if (*start > rule->max || !rule->align) {
+		res->start += rule->align;
+		res->end = res->start + rule->size - 1;
+		if (res->start > rule->max || !rule->align) {
 			dev_dbg(&dev->dev, "  couldn't assign io %d\n", idx);
 			return 0;
 		}
 	}
 	dev_dbg(&dev->dev, "  assign io  %d 0x%llx-0x%llx\n", idx,
-		(unsigned long long) *start, (unsigned long long) *end);
+		(unsigned long long) res->start, (unsigned long long) res->end);
 	return 1;
 }
 
 static int pnp_assign_mem(struct pnp_dev *dev, struct pnp_mem *rule, int idx)
 {
-	resource_size_t *start, *end;
-	unsigned long *flags;
+	struct resource *res;
 
 	if (idx >= PNP_MAX_MEM) {
 		dev_err(&dev->dev, "too many memory resources\n");
@@ -78,59 +74,56 @@
 		return 1;
 	}
 
-	start = &dev->res.mem_resource[idx].start;
-	end = &dev->res.mem_resource[idx].end;
-	flags = &dev->res.mem_resource[idx].flags;
+	res = &dev->res.mem_resource[idx];
 
 	/* check if this resource has been manually set, if so skip */
-	if (!(dev->res.mem_resource[idx].flags & IORESOURCE_AUTO)) {
+	if (!(res->flags & IORESOURCE_AUTO)) {
 		dev_dbg(&dev->dev, "  mem %d already set to 0x%llx-0x%llx "
-			"flags 0x%x\n", idx, (unsigned long long) *start,
-			(unsigned long long) *end, (int) *flags);
+			"flags 0x%x\n", idx, (unsigned long long) res->start,
+			(unsigned long long) res->end, (int) res->flags);
 		return 1;
 	}
 
 	/* set the initial values */
-	*flags |= rule->flags | IORESOURCE_MEM;
-	*flags &= ~IORESOURCE_UNSET;
+	res->flags |= rule->flags | IORESOURCE_MEM;
+	res->flags &= ~IORESOURCE_UNSET;
 
 	/* convert pnp flags to standard Linux flags */
 	if (!(rule->flags & IORESOURCE_MEM_WRITEABLE))
-		*flags |= IORESOURCE_READONLY;
+		res->flags |= IORESOURCE_READONLY;
 	if (rule->flags & IORESOURCE_MEM_CACHEABLE)
-		*flags |= IORESOURCE_CACHEABLE;
+		res->flags |= IORESOURCE_CACHEABLE;
 	if (rule->flags & IORESOURCE_MEM_RANGELENGTH)
-		*flags |= IORESOURCE_RANGELENGTH;
+		res->flags |= IORESOURCE_RANGELENGTH;
 	if (rule->flags & IORESOURCE_MEM_SHADOWABLE)
-		*flags |= IORESOURCE_SHADOWABLE;
+		res->flags |= IORESOURCE_SHADOWABLE;
 
 	if (!rule->size) {
-		*flags |= IORESOURCE_DISABLED;
+		res->flags |= IORESOURCE_DISABLED;
 		dev_dbg(&dev->dev, "  mem %d disabled\n", idx);
 		return 1;	/* skip disabled resource requests */
 	}
 
-	*start = rule->min;
-	*end = *start + rule->size - 1;
+	res->start = rule->min;
+	res->end = res->start + rule->size - 1;
 
 	/* run through until pnp_check_mem is happy */
 	while (!pnp_check_mem(dev, idx)) {
-		*start += rule->align;
-		*end = *start + rule->size - 1;
-		if (*start > rule->max || !rule->align) {
+		res->start += rule->align;
+		res->end = res->start + rule->size - 1;
+		if (res->start > rule->max || !rule->align) {
 			dev_dbg(&dev->dev, "  couldn't assign mem %d\n", idx);
 			return 0;
 		}
 	}
 	dev_dbg(&dev->dev, "  assign mem %d 0x%llx-0x%llx\n", idx,
-		(unsigned long long) *start, (unsigned long long) *end);
+		(unsigned long long) res->start, (unsigned long long) res->end);
 	return 1;
 }
 
 static int pnp_assign_irq(struct pnp_dev *dev, struct pnp_irq *rule, int idx)
 {
-	resource_size_t *start, *end;
-	unsigned long *flags;
+	struct resource *res;
 	int i;
 
 	/* IRQ priority: this table is good for i386 */
@@ -144,40 +137,39 @@
 		return 1;
 	}
 
-	start = &dev->res.irq_resource[idx].start;
-	end = &dev->res.irq_resource[idx].end;
-	flags = &dev->res.irq_resource[idx].flags;
+	res = &dev->res.irq_resource[idx];
 
 	/* check if this resource has been manually set, if so skip */
-	if (!(dev->res.irq_resource[idx].flags & IORESOURCE_AUTO)) {
+	if (!(res->flags & IORESOURCE_AUTO)) {
 		dev_dbg(&dev->dev, "  irq %d already set to %d flags 0x%x\n",
-			idx, (int) *start, (int) *flags);
+			idx, (int) res->start, (int) res->flags);
 		return 1;
 	}
 
 	/* set the initial values */
-	*flags |= rule->flags | IORESOURCE_IRQ;
-	*flags &= ~IORESOURCE_UNSET;
+	res->flags |= rule->flags | IORESOURCE_IRQ;
+	res->flags &= ~IORESOURCE_UNSET;
 
 	if (bitmap_empty(rule->map, PNP_IRQ_NR)) {
-		*flags |= IORESOURCE_DISABLED;
+		res->flags |= IORESOURCE_DISABLED;
 		dev_dbg(&dev->dev, "  irq %d disabled\n", idx);
 		return 1;	/* skip disabled resource requests */
 	}
 
 	/* TBD: need check for >16 IRQ */
-	*start = find_next_bit(rule->map, PNP_IRQ_NR, 16);
-	if (*start < PNP_IRQ_NR) {
-		*end = *start;
-		dev_dbg(&dev->dev, "  assign irq %d %d\n", idx, (int) *start);
+	res->start = find_next_bit(rule->map, PNP_IRQ_NR, 16);
+	if (res->start < PNP_IRQ_NR) {
+		res->end = res->start;
+		dev_dbg(&dev->dev, "  assign irq %d %d\n", idx,
+			(int) res->start);
 		return 1;
 	}
 	for (i = 0; i < 16; i++) {
 		if (test_bit(xtab[i], rule->map)) {
-			*start = *end = xtab[i];
+			res->start = res->end = xtab[i];
 			if (pnp_check_irq(dev, idx)) {
 				dev_dbg(&dev->dev, "  assign irq %d %d\n", idx,
-					(int) *start);
+					(int) res->start);
 				return 1;
 			}
 		}
@@ -188,8 +180,7 @@
 
 static void pnp_assign_dma(struct pnp_dev *dev, struct pnp_dma *rule, int idx)
 {
-	resource_size_t *start, *end;
-	unsigned long *flags;
+	struct resource *res;
 	int i;
 
 	/* DMA priority: this table is good for i386 */
@@ -202,35 +193,33 @@
 		return;
 	}
 
-	start = &dev->res.dma_resource[idx].start;
-	end = &dev->res.dma_resource[idx].end;
-	flags = &dev->res.dma_resource[idx].flags;
+	res = &dev->res.dma_resource[idx];
 
 	/* check if this resource has been manually set, if so skip */
-	if (!(dev->res.dma_resource[idx].flags & IORESOURCE_AUTO)) {
+	if (!(res->flags & IORESOURCE_AUTO)) {
 		dev_dbg(&dev->dev, "  dma %d already set to %d flags 0x%x\n",
-			idx, (int) *start, (int) *flags);
+			idx, (int) res->start, (int) res->flags);
 		return;
 	}
 
 	/* set the initial values */
-	*flags |= rule->flags | IORESOURCE_DMA;
-	*flags &= ~IORESOURCE_UNSET;
+	res->flags |= rule->flags | IORESOURCE_DMA;
+	res->flags &= ~IORESOURCE_UNSET;
 
 	for (i = 0; i < 8; i++) {
 		if (rule->map & (1 << xtab[i])) {
-			*start = *end = xtab[i];
+			res->start = res->end = xtab[i];
 			if (pnp_check_dma(dev, idx)) {
 				dev_dbg(&dev->dev, "  assign dma %d %d\n", idx,
-					(int) *start);
+					(int) res->start);
 				return;
 			}
 		}
 	}
 #ifdef MAX_DMA_CHANNELS
-	*start = *end = MAX_DMA_CHANNELS;
+	res->start = res->end = MAX_DMA_CHANNELS;
 #endif
-	*flags |= IORESOURCE_UNSET | IORESOURCE_DISABLED;
+	res->flags |= IORESOURCE_UNSET | IORESOURCE_DISABLED;
 	dev_dbg(&dev->dev, "  disable dma %d\n", idx);
 }
 

-- 

^ permalink raw reply	[flat|nested] 80+ messages in thread

* [patch 32/54] PNP: reduce redundancy in pnp_check_port() and others
  2008-04-25 18:38 [patch 00/54] PNP cleanup, v4 Bjorn Helgaas
                   ` (30 preceding siblings ...)
  2008-04-25 18:38 ` [patch 31/54] PNP: reduce redundancy in pnp_assign_port() and others Bjorn Helgaas
@ 2008-04-25 18:38 ` Bjorn Helgaas
  2008-04-25 18:38 ` [patch 33/54] PNP: reduce redundancy in pnp_set_current_resources() Bjorn Helgaas
                   ` (22 subsequent siblings)
  54 siblings, 0 replies; 80+ messages in thread
From: Bjorn Helgaas @ 2008-04-25 18:38 UTC (permalink / raw)
  To: Len Brown
  Cc: linux-acpi, linux-kernel, Adam Belay, Adam M Belay, Li Shaohua,
	Matthieu Castet, Thomas Renninger, Rene Herman, Jaroslav Kysela,
	Andrew Morton

[-- Attachment #1: pnp-simplify-check-functions --]
[-- Type: text/plain, Size: 6020 bytes --]

Use a temporary "res" pointer to replace repeated lookups in
the pnp resource tables.

Signed-off-by: Bjorn Helgaas <bjorn.helgaas@hp.com>

Index: work10/drivers/pnp/resource.c
===================================================================
--- work10.orig/drivers/pnp/resource.c	2008-04-25 11:15:02.000000000 -0600
+++ work10/drivers/pnp/resource.c	2008-04-25 11:15:03.000000000 -0600
@@ -243,13 +243,15 @@
 {
 	int i;
 	struct pnp_dev *tdev;
+	struct resource *res, *tres;
 	resource_size_t *port, *end, *tport, *tend;
 
-	port = &dev->res.port_resource[idx].start;
-	end = &dev->res.port_resource[idx].end;
+	res = &dev->res.port_resource[idx];
+	port = &res->start;
+	end = &res->end;
 
 	/* if the resource doesn't exist, don't complain about it */
-	if (cannot_compare(dev->res.port_resource[idx].flags))
+	if (cannot_compare(res->flags))
 		return 1;
 
 	/* check if the resource is already in use, skip if the
@@ -269,9 +271,10 @@
 
 	/* check for internal conflicts */
 	for (i = 0; i < PNP_MAX_PORT && i != idx; i++) {
-		if (dev->res.port_resource[i].flags & IORESOURCE_IO) {
-			tport = &dev->res.port_resource[i].start;
-			tend = &dev->res.port_resource[i].end;
+		tres = &dev->res.port_resource[i];
+		if (tres->flags & IORESOURCE_IO) {
+			tport = &tres->start;
+			tend = &tres->end;
 			if (ranged_conflict(port, end, tport, tend))
 				return 0;
 		}
@@ -282,12 +285,12 @@
 		if (tdev == dev)
 			continue;
 		for (i = 0; i < PNP_MAX_PORT; i++) {
-			if (tdev->res.port_resource[i].flags & IORESOURCE_IO) {
-				if (cannot_compare
-				    (tdev->res.port_resource[i].flags))
+			tres = &tdev->res.port_resource[i];
+			if (tres->flags & IORESOURCE_IO) {
+				if (cannot_compare(tres->flags))
 					continue;
-				tport = &tdev->res.port_resource[i].start;
-				tend = &tdev->res.port_resource[i].end;
+				tport = &tres->start;
+				tend = &tres->end;
 				if (ranged_conflict(port, end, tport, tend))
 					return 0;
 			}
@@ -301,13 +304,15 @@
 {
 	int i;
 	struct pnp_dev *tdev;
+	struct resource *res, *tres;
 	resource_size_t *addr, *end, *taddr, *tend;
 
-	addr = &dev->res.mem_resource[idx].start;
-	end = &dev->res.mem_resource[idx].end;
+	res = &dev->res.mem_resource[idx];
+	addr = &res->start;
+	end = &res->end;
 
 	/* if the resource doesn't exist, don't complain about it */
-	if (cannot_compare(dev->res.mem_resource[idx].flags))
+	if (cannot_compare(res->flags))
 		return 1;
 
 	/* check if the resource is already in use, skip if the
@@ -327,9 +332,10 @@
 
 	/* check for internal conflicts */
 	for (i = 0; i < PNP_MAX_MEM && i != idx; i++) {
-		if (dev->res.mem_resource[i].flags & IORESOURCE_MEM) {
-			taddr = &dev->res.mem_resource[i].start;
-			tend = &dev->res.mem_resource[i].end;
+		tres = &dev->res.mem_resource[i];
+		if (tres->flags & IORESOURCE_MEM) {
+			taddr = &tres->start;
+			tend = &tres->end;
 			if (ranged_conflict(addr, end, taddr, tend))
 				return 0;
 		}
@@ -340,12 +346,12 @@
 		if (tdev == dev)
 			continue;
 		for (i = 0; i < PNP_MAX_MEM; i++) {
-			if (tdev->res.mem_resource[i].flags & IORESOURCE_MEM) {
-				if (cannot_compare
-				    (tdev->res.mem_resource[i].flags))
+			tres = &tdev->res.mem_resource[i];
+			if (tres->flags & IORESOURCE_MEM) {
+				if (cannot_compare(tres->flags))
 					continue;
-				taddr = &tdev->res.mem_resource[i].start;
-				tend = &tdev->res.mem_resource[i].end;
+				taddr = &tres->start;
+				tend = &tres->end;
 				if (ranged_conflict(addr, end, taddr, tend))
 					return 0;
 			}
@@ -364,10 +370,14 @@
 {
 	int i;
 	struct pnp_dev *tdev;
-	resource_size_t *irq = &dev->res.irq_resource[idx].start;
+	struct resource *res, *tres;
+	resource_size_t *irq;
+
+	res = &dev->res.irq_resource[idx];
+	irq = &res->start;
 
 	/* if the resource doesn't exist, don't complain about it */
-	if (cannot_compare(dev->res.irq_resource[idx].flags))
+	if (cannot_compare(res->flags))
 		return 1;
 
 	/* check if the resource is valid */
@@ -382,8 +392,9 @@
 
 	/* check for internal conflicts */
 	for (i = 0; i < PNP_MAX_IRQ && i != idx; i++) {
-		if (dev->res.irq_resource[i].flags & IORESOURCE_IRQ) {
-			if (dev->res.irq_resource[i].start == *irq)
+		tres = &dev->res.irq_resource[i];
+		if (tres->flags & IORESOURCE_IRQ) {
+			if (tres->start == *irq)
 				return 0;
 		}
 	}
@@ -415,11 +426,11 @@
 		if (tdev == dev)
 			continue;
 		for (i = 0; i < PNP_MAX_IRQ; i++) {
-			if (tdev->res.irq_resource[i].flags & IORESOURCE_IRQ) {
-				if (cannot_compare
-				    (tdev->res.irq_resource[i].flags))
+			tres = &tdev->res.irq_resource[i];
+			if (tres->flags & IORESOURCE_IRQ) {
+				if (cannot_compare(tres->flags))
 					continue;
-				if ((tdev->res.irq_resource[i].start == *irq))
+				if (tres->start == *irq)
 					return 0;
 			}
 		}
@@ -433,10 +444,14 @@
 #ifndef CONFIG_IA64
 	int i;
 	struct pnp_dev *tdev;
-	resource_size_t *dma = &dev->res.dma_resource[idx].start;
+	struct resource *res, *tres;
+	resource_size_t *dma;
+
+	res = &dev->res.dma_resource[idx];
+	dma = &res->start;
 
 	/* if the resource doesn't exist, don't complain about it */
-	if (cannot_compare(dev->res.dma_resource[idx].flags))
+	if (cannot_compare(res->flags))
 		return 1;
 
 	/* check if the resource is valid */
@@ -451,8 +466,9 @@
 
 	/* check for internal conflicts */
 	for (i = 0; i < PNP_MAX_DMA && i != idx; i++) {
-		if (dev->res.dma_resource[i].flags & IORESOURCE_DMA) {
-			if (dev->res.dma_resource[i].start == *dma)
+		tres = &dev->res.dma_resource[i];
+		if (tres->flags & IORESOURCE_DMA) {
+			if (tres->start == *dma)
 				return 0;
 		}
 	}
@@ -470,11 +486,11 @@
 		if (tdev == dev)
 			continue;
 		for (i = 0; i < PNP_MAX_DMA; i++) {
-			if (tdev->res.dma_resource[i].flags & IORESOURCE_DMA) {
-				if (cannot_compare
-				    (tdev->res.dma_resource[i].flags))
+			tres = &tdev->res.dma_resource[i];
+			if (tres->flags & IORESOURCE_DMA) {
+				if (cannot_compare(tres->flags))
 					continue;
-				if ((tdev->res.dma_resource[i].start == *dma))
+				if (tres->start == *dma)
 					return 0;
 			}
 		}

-- 

^ permalink raw reply	[flat|nested] 80+ messages in thread

* [patch 33/54] PNP: reduce redundancy in pnp_set_current_resources()
  2008-04-25 18:38 [patch 00/54] PNP cleanup, v4 Bjorn Helgaas
                   ` (31 preceding siblings ...)
  2008-04-25 18:38 ` [patch 32/54] PNP: reduce redundancy in pnp_check_port() " Bjorn Helgaas
@ 2008-04-25 18:38 ` Bjorn Helgaas
  2008-04-25 18:38 ` [patch 34/54] PNP: check for conflicts with all resources, not just earlier ones Bjorn Helgaas
                   ` (21 subsequent siblings)
  54 siblings, 0 replies; 80+ messages in thread
From: Bjorn Helgaas @ 2008-04-25 18:38 UTC (permalink / raw)
  To: Len Brown
  Cc: linux-acpi, linux-kernel, Adam Belay, Adam M Belay, Li Shaohua,
	Matthieu Castet, Thomas Renninger, Rene Herman, Jaroslav Kysela,
	Andrew Morton

[-- Attachment #1: pnp-simplify-proc-functions --]
[-- Type: text/plain, Size: 2993 bytes --]

Use a temporary "res" pointer to replace repeated lookups in
the pnp resource tables.

Signed-off-by: Bjorn Helgaas <bjorn.helgaas@hp.com>

Index: work10/drivers/pnp/interface.c
===================================================================
--- work10.orig/drivers/pnp/interface.c	2008-04-25 11:14:58.000000000 -0600
+++ work10/drivers/pnp/interface.c	2008-04-25 11:15:04.000000000 -0600
@@ -323,6 +323,7 @@
 			  const char *ubuf, size_t count)
 {
 	struct pnp_dev *dev = to_pnp_dev(dmdev);
+	struct resource *res;
 	char *buf = (void *)ubuf;
 	int retval = 0;
 
@@ -382,21 +383,18 @@
 				buf += 2;
 				while (isspace(*buf))
 					++buf;
-				dev->res.port_resource[nport].start =
-				    simple_strtoul(buf, &buf, 0);
+				res = &dev->res.port_resource[nport];
+				res->start = simple_strtoul(buf, &buf, 0);
 				while (isspace(*buf))
 					++buf;
 				if (*buf == '-') {
 					buf += 1;
 					while (isspace(*buf))
 						++buf;
-					dev->res.port_resource[nport].end =
-					    simple_strtoul(buf, &buf, 0);
+					res->end = simple_strtoul(buf, &buf, 0);
 				} else
-					dev->res.port_resource[nport].end =
-					    dev->res.port_resource[nport].start;
-				dev->res.port_resource[nport].flags =
-				    IORESOURCE_IO;
+					res->end = res->start;
+				res->flags = IORESOURCE_IO;
 				nport++;
 				if (nport >= PNP_MAX_PORT)
 					break;
@@ -406,21 +404,18 @@
 				buf += 3;
 				while (isspace(*buf))
 					++buf;
-				dev->res.mem_resource[nmem].start =
-				    simple_strtoul(buf, &buf, 0);
+				res = &dev->res.mem_resource[nmem];
+				res->start = simple_strtoul(buf, &buf, 0);
 				while (isspace(*buf))
 					++buf;
 				if (*buf == '-') {
 					buf += 1;
 					while (isspace(*buf))
 						++buf;
-					dev->res.mem_resource[nmem].end =
-					    simple_strtoul(buf, &buf, 0);
+					res->end = simple_strtoul(buf, &buf, 0);
 				} else
-					dev->res.mem_resource[nmem].end =
-					    dev->res.mem_resource[nmem].start;
-				dev->res.mem_resource[nmem].flags =
-				    IORESOURCE_MEM;
+					res->end = res->start;
+				res->flags = IORESOURCE_MEM;
 				nmem++;
 				if (nmem >= PNP_MAX_MEM)
 					break;
@@ -430,11 +425,10 @@
 				buf += 3;
 				while (isspace(*buf))
 					++buf;
-				dev->res.irq_resource[nirq].start =
-				    dev->res.irq_resource[nirq].end =
+				res = &dev->res.irq_resource[nirq];
+				res->start = res->end =
 				    simple_strtoul(buf, &buf, 0);
-				dev->res.irq_resource[nirq].flags =
-				    IORESOURCE_IRQ;
+				res->flags = IORESOURCE_IRQ;
 				nirq++;
 				if (nirq >= PNP_MAX_IRQ)
 					break;
@@ -444,11 +438,10 @@
 				buf += 3;
 				while (isspace(*buf))
 					++buf;
-				dev->res.dma_resource[ndma].start =
-				    dev->res.dma_resource[ndma].end =
+				res = &dev->res.dma_resource[ndma];
+				res->start = res->end =
 				    simple_strtoul(buf, &buf, 0);
-				dev->res.dma_resource[ndma].flags =
-				    IORESOURCE_DMA;
+				res->flags = IORESOURCE_DMA;
 				ndma++;
 				if (ndma >= PNP_MAX_DMA)
 					break;

-- 

^ permalink raw reply	[flat|nested] 80+ messages in thread

* [patch 34/54] PNP: check for conflicts with all resources, not just earlier ones
  2008-04-25 18:38 [patch 00/54] PNP cleanup, v4 Bjorn Helgaas
                   ` (32 preceding siblings ...)
  2008-04-25 18:38 ` [patch 33/54] PNP: reduce redundancy in pnp_set_current_resources() Bjorn Helgaas
@ 2008-04-25 18:38 ` Bjorn Helgaas
  2008-04-25 18:38 ` [patch 35/54] PNP: pass resources, not indexes, to pnp_check_port(), et al Bjorn Helgaas
                   ` (20 subsequent siblings)
  54 siblings, 0 replies; 80+ messages in thread
From: Bjorn Helgaas @ 2008-04-25 18:38 UTC (permalink / raw)
  To: Len Brown
  Cc: linux-acpi, linux-kernel, Adam Belay, Adam M Belay, Li Shaohua,
	Matthieu Castet, Thomas Renninger, Rene Herman, Jaroslav Kysela,
	Andrew Morton

[-- Attachment #1: pnp-remove-idx-from-check-functions --]
[-- Type: text/plain, Size: 2260 bytes --]

This patch removes a use of "idx" in pnp_check_port() and similar
functions, in preparation for replacing idx with a pointer to the
resource itself.

I split this out because it changes the behavior slightly: we used
to check for conflicts only with earlier resources, e.g., we checked
resource 2 against resources 0 and 1 but not against 3, 4, etc.  Now
we will check against all resources except 2.

Since resources are assigned in ascending order, the old behavior
was probably safe, but I don't like to depend on that ordering.

Signed-off-by: Bjorn Helgaas <bjorn.helgaas@hp.com>

Index: work10/drivers/pnp/resource.c
===================================================================
--- work10.orig/drivers/pnp/resource.c	2008-04-25 11:15:03.000000000 -0600
+++ work10/drivers/pnp/resource.c	2008-04-25 11:15:05.000000000 -0600
@@ -270,9 +270,9 @@
 	}
 
 	/* check for internal conflicts */
-	for (i = 0; i < PNP_MAX_PORT && i != idx; i++) {
+	for (i = 0; i < PNP_MAX_PORT; i++) {
 		tres = &dev->res.port_resource[i];
-		if (tres->flags & IORESOURCE_IO) {
+		if (tres != res && tres->flags & IORESOURCE_IO) {
 			tport = &tres->start;
 			tend = &tres->end;
 			if (ranged_conflict(port, end, tport, tend))
@@ -331,9 +331,9 @@
 	}
 
 	/* check for internal conflicts */
-	for (i = 0; i < PNP_MAX_MEM && i != idx; i++) {
+	for (i = 0; i < PNP_MAX_MEM; i++) {
 		tres = &dev->res.mem_resource[i];
-		if (tres->flags & IORESOURCE_MEM) {
+		if (tres != res && tres->flags & IORESOURCE_MEM) {
 			taddr = &tres->start;
 			tend = &tres->end;
 			if (ranged_conflict(addr, end, taddr, tend))
@@ -391,9 +391,9 @@
 	}
 
 	/* check for internal conflicts */
-	for (i = 0; i < PNP_MAX_IRQ && i != idx; i++) {
+	for (i = 0; i < PNP_MAX_IRQ; i++) {
 		tres = &dev->res.irq_resource[i];
-		if (tres->flags & IORESOURCE_IRQ) {
+		if (tres != res && tres->flags & IORESOURCE_IRQ) {
 			if (tres->start == *irq)
 				return 0;
 		}
@@ -465,9 +465,9 @@
 	}
 
 	/* check for internal conflicts */
-	for (i = 0; i < PNP_MAX_DMA && i != idx; i++) {
+	for (i = 0; i < PNP_MAX_DMA; i++) {
 		tres = &dev->res.dma_resource[i];
-		if (tres->flags & IORESOURCE_DMA) {
+		if (tres != res && tres->flags & IORESOURCE_DMA) {
 			if (tres->start == *dma)
 				return 0;
 		}

-- 

^ permalink raw reply	[flat|nested] 80+ messages in thread

* [patch 35/54] PNP: pass resources, not indexes, to pnp_check_port(), et al
  2008-04-25 18:38 [patch 00/54] PNP cleanup, v4 Bjorn Helgaas
                   ` (33 preceding siblings ...)
  2008-04-25 18:38 ` [patch 34/54] PNP: check for conflicts with all resources, not just earlier ones Bjorn Helgaas
@ 2008-04-25 18:38 ` Bjorn Helgaas
  2008-04-25 18:38 ` [patch 36/54] PNP: convert resource checks to use pnp_get_resource(), not pnp_resource_table Bjorn Helgaas
                   ` (19 subsequent siblings)
  54 siblings, 0 replies; 80+ messages in thread
From: Bjorn Helgaas @ 2008-04-25 18:38 UTC (permalink / raw)
  To: Len Brown
  Cc: linux-acpi, linux-kernel, Adam Belay, Adam M Belay, Li Shaohua,
	Matthieu Castet, Thomas Renninger, Rene Herman, Jaroslav Kysela,
	Andrew Morton

[-- Attachment #1: pnp-pass-resource-to-check-functions --]
[-- Type: text/plain, Size: 4380 bytes --]

The caller already has the struct resource pointer, so no need for
pnp_check_port(), pnp_check_mem(), etc., to look it up again.

Signed-off-by: Bjorn Helgaas <bjorn.helgaas@hp.com>

Index: work10/drivers/pnp/base.h
===================================================================
--- work10.orig/drivers/pnp/base.h	2008-04-25 11:15:00.000000000 -0600
+++ work10/drivers/pnp/base.h	2008-04-25 11:15:05.000000000 -0600
@@ -12,10 +12,10 @@
 int __pnp_add_device(struct pnp_dev *dev);
 void __pnp_remove_device(struct pnp_dev *dev);
 
-int pnp_check_port(struct pnp_dev * dev, int idx);
-int pnp_check_mem(struct pnp_dev * dev, int idx);
-int pnp_check_irq(struct pnp_dev * dev, int idx);
-int pnp_check_dma(struct pnp_dev * dev, int idx);
+int pnp_check_port(struct pnp_dev *dev, struct resource *res);
+int pnp_check_mem(struct pnp_dev *dev, struct resource *res);
+int pnp_check_irq(struct pnp_dev *dev, struct resource *res);
+int pnp_check_dma(struct pnp_dev *dev, struct resource *res);
 
 void dbg_pnp_show_resources(struct pnp_dev *dev, char *desc);
 
Index: work10/drivers/pnp/manager.c
===================================================================
--- work10.orig/drivers/pnp/manager.c	2008-04-25 11:15:03.000000000 -0600
+++ work10/drivers/pnp/manager.c	2008-04-25 11:15:05.000000000 -0600
@@ -51,7 +51,7 @@
 	res->end = res->start + rule->size - 1;
 
 	/* run through until pnp_check_port is happy */
-	while (!pnp_check_port(dev, idx)) {
+	while (!pnp_check_port(dev, res)) {
 		res->start += rule->align;
 		res->end = res->start + rule->size - 1;
 		if (res->start > rule->max || !rule->align) {
@@ -108,7 +108,7 @@
 	res->end = res->start + rule->size - 1;
 
 	/* run through until pnp_check_mem is happy */
-	while (!pnp_check_mem(dev, idx)) {
+	while (!pnp_check_mem(dev, res)) {
 		res->start += rule->align;
 		res->end = res->start + rule->size - 1;
 		if (res->start > rule->max || !rule->align) {
@@ -167,7 +167,7 @@
 	for (i = 0; i < 16; i++) {
 		if (test_bit(xtab[i], rule->map)) {
 			res->start = res->end = xtab[i];
-			if (pnp_check_irq(dev, idx)) {
+			if (pnp_check_irq(dev, res)) {
 				dev_dbg(&dev->dev, "  assign irq %d %d\n", idx,
 					(int) res->start);
 				return 1;
@@ -209,7 +209,7 @@
 	for (i = 0; i < 8; i++) {
 		if (rule->map & (1 << xtab[i])) {
 			res->start = res->end = xtab[i];
-			if (pnp_check_dma(dev, idx)) {
+			if (pnp_check_dma(dev, res)) {
 				dev_dbg(&dev->dev, "  assign dma %d %d\n", idx,
 					(int) res->start);
 				return;
Index: work10/drivers/pnp/resource.c
===================================================================
--- work10.orig/drivers/pnp/resource.c	2008-04-25 11:15:05.000000000 -0600
+++ work10/drivers/pnp/resource.c	2008-04-25 11:15:05.000000000 -0600
@@ -239,14 +239,13 @@
 #define cannot_compare(flags) \
 ((flags) & (IORESOURCE_UNSET | IORESOURCE_DISABLED))
 
-int pnp_check_port(struct pnp_dev *dev, int idx)
+int pnp_check_port(struct pnp_dev *dev, struct resource *res)
 {
 	int i;
 	struct pnp_dev *tdev;
-	struct resource *res, *tres;
+	struct resource *tres;
 	resource_size_t *port, *end, *tport, *tend;
 
-	res = &dev->res.port_resource[idx];
 	port = &res->start;
 	end = &res->end;
 
@@ -300,14 +299,13 @@
 	return 1;
 }
 
-int pnp_check_mem(struct pnp_dev *dev, int idx)
+int pnp_check_mem(struct pnp_dev *dev, struct resource *res)
 {
 	int i;
 	struct pnp_dev *tdev;
-	struct resource *res, *tres;
+	struct resource *tres;
 	resource_size_t *addr, *end, *taddr, *tend;
 
-	res = &dev->res.mem_resource[idx];
 	addr = &res->start;
 	end = &res->end;
 
@@ -366,14 +364,13 @@
 	return IRQ_HANDLED;
 }
 
-int pnp_check_irq(struct pnp_dev *dev, int idx)
+int pnp_check_irq(struct pnp_dev *dev, struct resource *res)
 {
 	int i;
 	struct pnp_dev *tdev;
-	struct resource *res, *tres;
+	struct resource *tres;
 	resource_size_t *irq;
 
-	res = &dev->res.irq_resource[idx];
 	irq = &res->start;
 
 	/* if the resource doesn't exist, don't complain about it */
@@ -439,15 +436,14 @@
 	return 1;
 }
 
-int pnp_check_dma(struct pnp_dev *dev, int idx)
+int pnp_check_dma(struct pnp_dev *dev, struct resource *res)
 {
 #ifndef CONFIG_IA64
 	int i;
 	struct pnp_dev *tdev;
-	struct resource *res, *tres;
+	struct resource *tres;
 	resource_size_t *dma;
 
-	res = &dev->res.dma_resource[idx];
 	dma = &res->start;
 
 	/* if the resource doesn't exist, don't complain about it */

-- 

^ permalink raw reply	[flat|nested] 80+ messages in thread

* [patch 36/54] PNP: convert resource checks to use pnp_get_resource(), not pnp_resource_table
  2008-04-25 18:38 [patch 00/54] PNP cleanup, v4 Bjorn Helgaas
                   ` (34 preceding siblings ...)
  2008-04-25 18:38 ` [patch 35/54] PNP: pass resources, not indexes, to pnp_check_port(), et al Bjorn Helgaas
@ 2008-04-25 18:38 ` Bjorn Helgaas
  2008-04-25 18:38 ` [patch 37/54] PNP: convert encoders " Bjorn Helgaas
                   ` (18 subsequent siblings)
  54 siblings, 0 replies; 80+ messages in thread
From: Bjorn Helgaas @ 2008-04-25 18:38 UTC (permalink / raw)
  To: Len Brown
  Cc: linux-acpi, linux-kernel, Adam Belay, Adam M Belay, Li Shaohua,
	Matthieu Castet, Thomas Renninger, Rene Herman, Jaroslav Kysela,
	Andrew Morton

[-- Attachment #1: pnp-convert-checks-to-pnp_get_resource --]
[-- Type: text/plain, Size: 3431 bytes --]

This removes more direct references to pnp_resource_table.

Signed-off-by: Bjorn Helgaas <bjorn.helgaas@hp.com>

---
 drivers/pnp/resource.c |   96 +++++++++++++++++++++++++++++--------------------
 1 file changed, 58 insertions(+), 38 deletions(-)

Index: work10/drivers/pnp/resource.c
===================================================================
--- work10.orig/drivers/pnp/resource.c	2008-04-25 11:15:05.000000000 -0600
+++ work10/drivers/pnp/resource.c	2008-04-25 11:15:06.000000000 -0600
@@ -270,8 +270,8 @@
 
 	/* check for internal conflicts */
 	for (i = 0; i < PNP_MAX_PORT; i++) {
-		tres = &dev->res.port_resource[i];
-		if (tres != res && tres->flags & IORESOURCE_IO) {
+		tres = pnp_get_resource(dev, IORESOURCE_IO, i);
+		if (tres && tres != res && tres->flags & IORESOURCE_IO) {
 			tport = &tres->start;
 			tend = &tres->end;
 			if (ranged_conflict(port, end, tport, tend))
@@ -284,8 +284,8 @@
 		if (tdev == dev)
 			continue;
 		for (i = 0; i < PNP_MAX_PORT; i++) {
-			tres = &tdev->res.port_resource[i];
-			if (tres->flags & IORESOURCE_IO) {
+			tres = pnp_get_resource(tdev, IORESOURCE_IO, i);
+			if (tres && tres->flags & IORESOURCE_IO) {
 				if (cannot_compare(tres->flags))
 					continue;
 				tport = &tres->start;
@@ -330,8 +330,8 @@
 
 	/* check for internal conflicts */
 	for (i = 0; i < PNP_MAX_MEM; i++) {
-		tres = &dev->res.mem_resource[i];
-		if (tres != res && tres->flags & IORESOURCE_MEM) {
+		tres = pnp_get_resource(dev, IORESOURCE_MEM, i);
+		if (tres && tres != res && tres->flags & IORESOURCE_MEM) {
 			taddr = &tres->start;
 			tend = &tres->end;
 			if (ranged_conflict(addr, end, taddr, tend))
@@ -344,8 +344,8 @@
 		if (tdev == dev)
 			continue;
 		for (i = 0; i < PNP_MAX_MEM; i++) {
-			tres = &tdev->res.mem_resource[i];
-			if (tres->flags & IORESOURCE_MEM) {
+			tres = pnp_get_resource(tdev, IORESOURCE_MEM, i);
+			if (tres && tres->flags & IORESOURCE_MEM) {
 				if (cannot_compare(tres->flags))
 					continue;
 				taddr = &tres->start;
@@ -389,8 +389,8 @@
 
 	/* check for internal conflicts */
 	for (i = 0; i < PNP_MAX_IRQ; i++) {
-		tres = &dev->res.irq_resource[i];
-		if (tres != res && tres->flags & IORESOURCE_IRQ) {
+		tres = pnp_get_resource(dev, IORESOURCE_IRQ, i);
+		if (tres && tres != res && tres->flags & IORESOURCE_IRQ) {
 			if (tres->start == *irq)
 				return 0;
 		}
@@ -423,8 +423,8 @@
 		if (tdev == dev)
 			continue;
 		for (i = 0; i < PNP_MAX_IRQ; i++) {
-			tres = &tdev->res.irq_resource[i];
-			if (tres->flags & IORESOURCE_IRQ) {
+			tres = pnp_get_resource(tdev, IORESOURCE_IRQ, i);
+			if (tres && tres->flags & IORESOURCE_IRQ) {
 				if (cannot_compare(tres->flags))
 					continue;
 				if (tres->start == *irq)
@@ -462,8 +462,8 @@
 
 	/* check for internal conflicts */
 	for (i = 0; i < PNP_MAX_DMA; i++) {
-		tres = &dev->res.dma_resource[i];
-		if (tres != res && tres->flags & IORESOURCE_DMA) {
+		tres = pnp_get_resource(dev, IORESOURCE_DMA, i);
+		if (tres && tres != res && tres->flags & IORESOURCE_DMA) {
 			if (tres->start == *dma)
 				return 0;
 		}
@@ -482,8 +482,8 @@
 		if (tdev == dev)
 			continue;
 		for (i = 0; i < PNP_MAX_DMA; i++) {
-			tres = &tdev->res.dma_resource[i];
-			if (tres->flags & IORESOURCE_DMA) {
+			tres = pnp_get_resource(tdev, IORESOURCE_DMA, i);
+			if (tres && tres->flags & IORESOURCE_DMA) {
 				if (cannot_compare(tres->flags))
 					continue;
 				if (tres->start == *dma)

-- 

^ permalink raw reply	[flat|nested] 80+ messages in thread

* [patch 37/54] PNP: convert encoders to use pnp_get_resource(), not pnp_resource_table
  2008-04-25 18:38 [patch 00/54] PNP cleanup, v4 Bjorn Helgaas
                   ` (35 preceding siblings ...)
  2008-04-25 18:38 ` [patch 36/54] PNP: convert resource checks to use pnp_get_resource(), not pnp_resource_table Bjorn Helgaas
@ 2008-04-25 18:38 ` Bjorn Helgaas
  2008-04-25 18:38 ` [patch 38/54] PNP: remove PNP_MAX_* uses Bjorn Helgaas
                   ` (17 subsequent siblings)
  54 siblings, 0 replies; 80+ messages in thread
From: Bjorn Helgaas @ 2008-04-25 18:38 UTC (permalink / raw)
  To: Len Brown
  Cc: linux-acpi, linux-kernel, Adam Belay, Adam M Belay, Li Shaohua,
	Matthieu Castet, Thomas Renninger, Rene Herman, Jaroslav Kysela,
	Andrew Morton

[-- Attachment #1: pnp-convert-encoders-to-pnp_get_resource --]
[-- Type: text/plain, Size: 4680 bytes --]

This removes more direct references to pnp_resource_table.  This
path is used when telling a device what resources it should use.

This doesn't convert ISAPNP because ISA needs to know the config
register index in addition to the resource itself.

Signed-off-by: Bjorn Helgaas <bjorn.helgaas@hp.com>

Index: work10/drivers/pnp/pnpacpi/rsparser.c
===================================================================
--- work10.orig/drivers/pnp/pnpacpi/rsparser.c	2008-04-25 11:14:59.000000000 -0600
+++ work10/drivers/pnp/pnpacpi/rsparser.c	2008-04-25 11:15:06.000000000 -0600
@@ -1014,7 +1014,6 @@
 
 int pnpacpi_encode_resources(struct pnp_dev *dev, struct acpi_buffer *buffer)
 {
-	struct pnp_resource_table *res_table = &dev->res;
 	int i = 0;
 	/* pnpacpi_build_resource_template allocates extra mem */
 	int res_cnt = (buffer->length - 1) / sizeof(struct acpi_resource) - 1;
@@ -1026,45 +1025,43 @@
 		switch (resource->type) {
 		case ACPI_RESOURCE_TYPE_IRQ:
 			pnpacpi_encode_irq(dev, resource,
-					   &res_table->irq_resource[irq]);
+			       pnp_get_resource(dev, IORESOURCE_IRQ, irq));
 			irq++;
 			break;
 
 		case ACPI_RESOURCE_TYPE_DMA:
 			pnpacpi_encode_dma(dev, resource,
-					   &res_table->dma_resource[dma]);
+				pnp_get_resource(dev, IORESOURCE_DMA, dma));
 			dma++;
 			break;
 		case ACPI_RESOURCE_TYPE_IO:
 			pnpacpi_encode_io(dev, resource,
-					  &res_table->port_resource[port]);
+				pnp_get_resource(dev, IORESOURCE_IO, port));
 			port++;
 			break;
 		case ACPI_RESOURCE_TYPE_FIXED_IO:
 			pnpacpi_encode_fixed_io(dev, resource,
-						&res_table->
-						port_resource[port]);
+				pnp_get_resource(dev, IORESOURCE_IO, port));
 			port++;
 			break;
 		case ACPI_RESOURCE_TYPE_MEMORY24:
 			pnpacpi_encode_mem24(dev, resource,
-					     &res_table->mem_resource[mem]);
+				pnp_get_resource(dev, IORESOURCE_MEM, mem));
 			mem++;
 			break;
 		case ACPI_RESOURCE_TYPE_MEMORY32:
 			pnpacpi_encode_mem32(dev, resource,
-					     &res_table->mem_resource[mem]);
+				pnp_get_resource(dev, IORESOURCE_MEM, mem));
 			mem++;
 			break;
 		case ACPI_RESOURCE_TYPE_FIXED_MEMORY32:
 			pnpacpi_encode_fixed_mem32(dev, resource,
-						   &res_table->
-						   mem_resource[mem]);
+				pnp_get_resource(dev, IORESOURCE_MEM, mem));
 			mem++;
 			break;
 		case ACPI_RESOURCE_TYPE_EXTENDED_IRQ:
 			pnpacpi_encode_ext_irq(dev, resource,
-					       &res_table->irq_resource[irq]);
+				pnp_get_resource(dev, IORESOURCE_IRQ, irq));
 			irq++;
 			break;
 		case ACPI_RESOURCE_TYPE_START_DEPENDENT:
Index: work10/drivers/pnp/pnpbios/rsparser.c
===================================================================
--- work10.orig/drivers/pnp/pnpbios/rsparser.c	2008-04-25 11:14:59.000000000 -0600
+++ work10/drivers/pnp/pnpbios/rsparser.c	2008-04-25 11:15:06.000000000 -0600
@@ -688,7 +688,6 @@
 							     unsigned char *p,
 							     unsigned char *end)
 {
-	struct pnp_resource_table *res = &dev->res;
 	unsigned int len, tag;
 	int port = 0, irq = 0, dma = 0, mem = 0;
 
@@ -711,42 +710,48 @@
 		case LARGE_TAG_MEM:
 			if (len != 9)
 				goto len_err;
-			pnpbios_encode_mem(dev, p, &res->mem_resource[mem]);
+			pnpbios_encode_mem(dev, p,
+				pnp_get_resource(dev, IORESOURCE_MEM, mem));
 			mem++;
 			break;
 
 		case LARGE_TAG_MEM32:
 			if (len != 17)
 				goto len_err;
-			pnpbios_encode_mem32(dev, p, &res->mem_resource[mem]);
+			pnpbios_encode_mem32(dev, p,
+				pnp_get_resource(dev, IORESOURCE_MEM, mem));
 			mem++;
 			break;
 
 		case LARGE_TAG_FIXEDMEM32:
 			if (len != 9)
 				goto len_err;
-			pnpbios_encode_fixed_mem32(dev, p, &res->mem_resource[mem]);
+			pnpbios_encode_fixed_mem32(dev, p,
+				pnp_get_resource(dev, IORESOURCE_MEM, mem));
 			mem++;
 			break;
 
 		case SMALL_TAG_IRQ:
 			if (len < 2 || len > 3)
 				goto len_err;
-			pnpbios_encode_irq(dev, p, &res->irq_resource[irq]);
+			pnpbios_encode_irq(dev, p,
+				pnp_get_resource(dev, IORESOURCE_IRQ, irq));
 			irq++;
 			break;
 
 		case SMALL_TAG_DMA:
 			if (len != 2)
 				goto len_err;
-			pnpbios_encode_dma(dev, p, &res->dma_resource[dma]);
+			pnpbios_encode_dma(dev, p,
+				pnp_get_resource(dev, IORESOURCE_DMA, dma));
 			dma++;
 			break;
 
 		case SMALL_TAG_PORT:
 			if (len != 7)
 				goto len_err;
-			pnpbios_encode_port(dev, p, &res->port_resource[port]);
+			pnpbios_encode_port(dev, p,
+				pnp_get_resource(dev, IORESOURCE_IO, port));
 			port++;
 			break;
 
@@ -757,7 +762,8 @@
 		case SMALL_TAG_FIXEDPORT:
 			if (len != 3)
 				goto len_err;
-			pnpbios_encode_fixed_port(dev, p, &res->port_resource[port]);
+			pnpbios_encode_fixed_port(dev, p,
+				pnp_get_resource(dev, IORESOURCE_IO, port));
 			port++;
 			break;
 

-- 

^ permalink raw reply	[flat|nested] 80+ messages in thread

* [patch 38/54] PNP: remove PNP_MAX_* uses
  2008-04-25 18:38 [patch 00/54] PNP cleanup, v4 Bjorn Helgaas
                   ` (36 preceding siblings ...)
  2008-04-25 18:38 ` [patch 37/54] PNP: convert encoders " Bjorn Helgaas
@ 2008-04-25 18:38 ` Bjorn Helgaas
  2008-04-26 22:10   ` Rene Herman
  2008-04-25 18:38 ` [patch 39/54] rtc: dont reference pnp_resource_table directly Bjorn Helgaas
                   ` (16 subsequent siblings)
  54 siblings, 1 reply; 80+ messages in thread
From: Bjorn Helgaas @ 2008-04-25 18:38 UTC (permalink / raw)
  To: Len Brown
  Cc: linux-acpi, linux-kernel, Adam Belay, Adam M Belay, Li Shaohua,
	Matthieu Castet, Thomas Renninger, Rene Herman, Jaroslav Kysela,
	Andrew Morton

[-- Attachment #1: pnp-remove-max-uses --]
[-- Type: text/plain, Size: 9566 bytes --]

Remove some PNP_MAX_* uses.  The pnp_resource_table isn't
dynamic yet, but with pnp_get_resource(), we can start moving
away from the table size constants.

Signed-off-by: Bjorn Helgaas <bjorn.helgaas@hp.com>

---
 drivers/pnp/interface.c |   43 ++++++++++++++++++------------------
 drivers/pnp/quirks.c    |   13 ++++++-----
 drivers/pnp/resource.c  |   56 +++++++++++++++++++++++++++---------------------
 drivers/pnp/system.c    |   21 ++++++++----------
 4 files changed, 70 insertions(+), 63 deletions(-)

Index: work10/drivers/pnp/interface.c
===================================================================
--- work10.orig/drivers/pnp/interface.c	2008-04-25 11:15:04.000000000 -0600
+++ work10/drivers/pnp/interface.c	2008-04-25 11:15:07.000000000 -0600
@@ -243,11 +243,14 @@
 
 static DEVICE_ATTR(options, S_IRUGO, pnp_show_options, NULL);
 
+#define set(flags)      ((flags & IORESOURCE_UNSET) == 0)
+
 static ssize_t pnp_show_current_resources(struct device *dmdev,
 					  struct device_attribute *attr,
 					  char *buf)
 {
 	struct pnp_dev *dev = to_pnp_dev(dmdev);
+	struct resource *res;
 	int i, ret;
 	pnp_info_buffer_t *buffer;
 
@@ -267,50 +270,46 @@
 	else
 		pnp_printf(buffer, "disabled\n");
 
-	for (i = 0; i < PNP_MAX_PORT; i++) {
-		if (pnp_port_valid(dev, i)) {
+	for (i = 0; (res = pnp_get_resource(dev, IORESOURCE_IO, i)); i++) {
+		if (set(res->flags)) {
 			pnp_printf(buffer, "io");
-			if (pnp_port_flags(dev, i) & IORESOURCE_DISABLED)
+			if (res->flags & IORESOURCE_DISABLED)
 				pnp_printf(buffer, " disabled\n");
 			else
 				pnp_printf(buffer, " 0x%llx-0x%llx\n",
-					   (unsigned long long)
-					   pnp_port_start(dev, i),
-					   (unsigned long long)pnp_port_end(dev,
-									    i));
+					   (unsigned long long) res->start,
+					   (unsigned long long) res->end);
 		}
 	}
-	for (i = 0; i < PNP_MAX_MEM; i++) {
-		if (pnp_mem_valid(dev, i)) {
+	for (i = 0; (res = pnp_get_resource(dev, IORESOURCE_MEM, i)); i++) {
+		if (set(res->flags)) {
 			pnp_printf(buffer, "mem");
-			if (pnp_mem_flags(dev, i) & IORESOURCE_DISABLED)
+			if (res->flags & IORESOURCE_DISABLED)
 				pnp_printf(buffer, " disabled\n");
 			else
 				pnp_printf(buffer, " 0x%llx-0x%llx\n",
-					   (unsigned long long)
-					   pnp_mem_start(dev, i),
-					   (unsigned long long)pnp_mem_end(dev,
-									   i));
+					   (unsigned long long) res->start,
+					   (unsigned long long) res->end);
 		}
 	}
-	for (i = 0; i < PNP_MAX_IRQ; i++) {
-		if (pnp_irq_valid(dev, i)) {
+	for (i = 0; (res = pnp_get_resource(dev, IORESOURCE_IRQ, i)); i++) {
+		if (set(res->flags)) {
 			pnp_printf(buffer, "irq");
-			if (pnp_irq_flags(dev, i) & IORESOURCE_DISABLED)
+			if (res->flags & IORESOURCE_DISABLED)
 				pnp_printf(buffer, " disabled\n");
 			else
 				pnp_printf(buffer, " %lld\n",
-					   (unsigned long long)pnp_irq(dev, i));
+					   (unsigned long long) res->start);
 		}
 	}
-	for (i = 0; i < PNP_MAX_DMA; i++) {
-		if (pnp_dma_valid(dev, i)) {
+	for (i = 0; (res = pnp_get_resource(dev, IORESOURCE_DMA, i)); i++) {
+		if (set(res->flags)) {
 			pnp_printf(buffer, "dma");
-			if (pnp_dma_flags(dev, i) & IORESOURCE_DISABLED)
+			if (res->flags & IORESOURCE_DISABLED)
 				pnp_printf(buffer, " disabled\n");
 			else
 				pnp_printf(buffer, " %lld\n",
-					   (unsigned long long)pnp_dma(dev, i));
+					   (unsigned long long) res->start);
 		}
 	}
 	ret = (buffer->curr - buf);
Index: work10/drivers/pnp/quirks.c
===================================================================
--- work10.orig/drivers/pnp/quirks.c	2008-04-25 11:15:01.000000000 -0600
+++ work10/drivers/pnp/quirks.c	2008-04-25 11:15:07.000000000 -0600
@@ -135,13 +135,15 @@
 
 			pci_start = pci_resource_start(pdev, i);
 			pci_end = pci_resource_end(pdev, i);
-			for (j = 0; j < PNP_MAX_MEM; j++) {
-				if (!pnp_mem_valid(dev, j) ||
-				    pnp_mem_len(dev, j) == 0)
+			for (j = 0;
+			     (res = pnp_get_resource(dev, IORESOURCE_MEM, j));
+			     j++) {
+				if (res->flags & IORESOURCE_UNSET ||
+				    (res->start == 0 && res->end == 0))
 					continue;
 
-				pnp_start = pnp_mem_start(dev, j);
-				pnp_end = pnp_mem_end(dev, j);
+				pnp_start = res->start;
+				pnp_end = res->end;
 
 				/*
 				 * If the PNP region doesn't overlap the PCI
@@ -174,7 +176,6 @@
 					pci_name(pdev), i,
 					(unsigned long long) pci_start,
 					(unsigned long long) pci_end);
-				res = pnp_get_resource(dev, IORESOURCE_MEM, j);
 				res->flags = 0;
 			}
 		}
Index: work10/drivers/pnp/resource.c
===================================================================
--- work10.orig/drivers/pnp/resource.c	2008-04-25 11:15:06.000000000 -0600
+++ work10/drivers/pnp/resource.c	2008-04-25 11:15:07.000000000 -0600
@@ -269,9 +269,8 @@
 	}
 
 	/* check for internal conflicts */
-	for (i = 0; i < PNP_MAX_PORT; i++) {
-		tres = pnp_get_resource(dev, IORESOURCE_IO, i);
-		if (tres && tres != res && tres->flags & IORESOURCE_IO) {
+	for (i = 0; (tres = pnp_get_resource(dev, IORESOURCE_IO, i)); i++) {
+		if (tres != res && tres->flags & IORESOURCE_IO) {
 			tport = &tres->start;
 			tend = &tres->end;
 			if (ranged_conflict(port, end, tport, tend))
@@ -283,9 +282,10 @@
 	pnp_for_each_dev(tdev) {
 		if (tdev == dev)
 			continue;
-		for (i = 0; i < PNP_MAX_PORT; i++) {
-			tres = pnp_get_resource(tdev, IORESOURCE_IO, i);
-			if (tres && tres->flags & IORESOURCE_IO) {
+		for (i = 0;
+		     (tres = pnp_get_resource(tdev, IORESOURCE_IO, i));
+		     i++) {
+			if (tres->flags & IORESOURCE_IO) {
 				if (cannot_compare(tres->flags))
 					continue;
 				tport = &tres->start;
@@ -329,9 +329,8 @@
 	}
 
 	/* check for internal conflicts */
-	for (i = 0; i < PNP_MAX_MEM; i++) {
-		tres = pnp_get_resource(dev, IORESOURCE_MEM, i);
-		if (tres && tres != res && tres->flags & IORESOURCE_MEM) {
+	for (i = 0; (tres = pnp_get_resource(dev, IORESOURCE_MEM, i)); i++) {
+		if (tres != res && tres->flags & IORESOURCE_MEM) {
 			taddr = &tres->start;
 			tend = &tres->end;
 			if (ranged_conflict(addr, end, taddr, tend))
@@ -343,9 +342,10 @@
 	pnp_for_each_dev(tdev) {
 		if (tdev == dev)
 			continue;
-		for (i = 0; i < PNP_MAX_MEM; i++) {
-			tres = pnp_get_resource(tdev, IORESOURCE_MEM, i);
-			if (tres && tres->flags & IORESOURCE_MEM) {
+		for (i = 0;
+		     (tres = pnp_get_resource(tdev, IORESOURCE_MEM, i));
+		     i++) {
+			if (tres->flags & IORESOURCE_MEM) {
 				if (cannot_compare(tres->flags))
 					continue;
 				taddr = &tres->start;
@@ -388,9 +388,8 @@
 	}
 
 	/* check for internal conflicts */
-	for (i = 0; i < PNP_MAX_IRQ; i++) {
-		tres = pnp_get_resource(dev, IORESOURCE_IRQ, i);
-		if (tres && tres != res && tres->flags & IORESOURCE_IRQ) {
+	for (i = 0; (tres = pnp_get_resource(dev, IORESOURCE_IRQ, i)); i++) {
+		if (tres != res && tres->flags & IORESOURCE_IRQ) {
 			if (tres->start == *irq)
 				return 0;
 		}
@@ -422,9 +421,10 @@
 	pnp_for_each_dev(tdev) {
 		if (tdev == dev)
 			continue;
-		for (i = 0; i < PNP_MAX_IRQ; i++) {
-			tres = pnp_get_resource(tdev, IORESOURCE_IRQ, i);
-			if (tres && tres->flags & IORESOURCE_IRQ) {
+		for (i = 0;
+		     (tres = pnp_get_resource(tdev, IORESOURCE_IRQ, i));
+		     i++) {
+			if (tres->flags & IORESOURCE_IRQ) {
 				if (cannot_compare(tres->flags))
 					continue;
 				if (tres->start == *irq)
@@ -461,9 +461,8 @@
 	}
 
 	/* check for internal conflicts */
-	for (i = 0; i < PNP_MAX_DMA; i++) {
-		tres = pnp_get_resource(dev, IORESOURCE_DMA, i);
-		if (tres && tres != res && tres->flags & IORESOURCE_DMA) {
+	for (i = 0; (tres = pnp_get_resource(dev, IORESOURCE_DMA, i)); i++) {
+		if (tres != res && tres->flags & IORESOURCE_DMA) {
 			if (tres->start == *dma)
 				return 0;
 		}
@@ -481,9 +480,10 @@
 	pnp_for_each_dev(tdev) {
 		if (tdev == dev)
 			continue;
-		for (i = 0; i < PNP_MAX_DMA; i++) {
-			tres = pnp_get_resource(tdev, IORESOURCE_DMA, i);
-			if (tres && tres->flags & IORESOURCE_DMA) {
+		for (i = 0;
+		     (tres = pnp_get_resource(tdev, IORESOURCE_DMA, i));
+		     i++) {
+			if (tres->flags & IORESOURCE_DMA) {
 				if (cannot_compare(tres->flags))
 					continue;
 				if (tres->start == *dma)
Index: work10/drivers/pnp/system.c
===================================================================
--- work10.orig/drivers/pnp/system.c	2008-04-25 11:12:15.000000000 -0600
+++ work10/drivers/pnp/system.c	2008-04-25 11:15:07.000000000 -0600
@@ -56,14 +56,15 @@
 
 static void reserve_resources_of_dev(struct pnp_dev *dev)
 {
+	struct resource *res;
 	int i;
 
-	for (i = 0; i < PNP_MAX_PORT; i++) {
-		if (!pnp_port_valid(dev, i))
+	for (i = 0; (res = pnp_get_resource(dev, IORESOURCE_IO, i)); i++) {
+		if (res->flags & IORESOURCE_UNSET)
 			continue;
-		if (pnp_port_start(dev, i) == 0)
+		if (res->start == 0)
 			continue;	/* disabled */
-		if (pnp_port_start(dev, i) < 0x100)
+		if (res->start < 0x100)
 			/*
 			 * Below 0x100 is only standard PC hardware
 			 * (pics, kbd, timer, dma, ...)
@@ -73,19 +74,17 @@
 			 * So, do nothing
 			 */
 			continue;
-		if (pnp_port_end(dev, i) < pnp_port_start(dev, i))
+		if (res->end < res->start)
 			continue;	/* invalid */
 
-		reserve_range(dev, pnp_port_start(dev, i),
-			      pnp_port_end(dev, i), 1);
+		reserve_range(dev, res->start, res->end, 1);
 	}
 
-	for (i = 0; i < PNP_MAX_MEM; i++) {
-		if (!pnp_mem_valid(dev, i))
+	for (i = 0; (res = pnp_get_resource(dev, IORESOURCE_MEM, i)); i++) {
+		if (res->flags & IORESOURCE_UNSET)
 			continue;
 
-		reserve_range(dev, pnp_mem_start(dev, i),
-			      pnp_mem_end(dev, i), 0);
+		reserve_range(dev, res->start, res->end, 0);
 	}
 }
 

-- 

^ permalink raw reply	[flat|nested] 80+ messages in thread

* [patch 39/54] rtc: dont reference pnp_resource_table directly
  2008-04-25 18:38 [patch 00/54] PNP cleanup, v4 Bjorn Helgaas
                   ` (37 preceding siblings ...)
  2008-04-25 18:38 ` [patch 38/54] PNP: remove PNP_MAX_* uses Bjorn Helgaas
@ 2008-04-25 18:38 ` Bjorn Helgaas
  2008-04-25 18:38 ` [patch 40/54] PNP: make pnp_resource_table private to PNP core Bjorn Helgaas
                   ` (15 subsequent siblings)
  54 siblings, 0 replies; 80+ messages in thread
From: Bjorn Helgaas @ 2008-04-25 18:38 UTC (permalink / raw)
  To: Len Brown
  Cc: linux-acpi, Rene Herman, linux-kernel, Adam Belay, Adam M Belay,
	Li Shaohua, Matthieu Castet, Thomas Renninger, Rene Herman,
	Jaroslav Kysela, Andrew Morton

[-- Attachment #1: rtc-remove-pnp_resource_table-use --]
[-- Type: text/plain, Size: 969 bytes --]

pnp_resource_table is going away soon, so use the more
generic public interfaces instead.

Signed-off-by: Bjorn Helgaas <bjorn.helgaas@hp.com>
Acked-By: Rene Herman <rene.herman@gmail.com>

Index: work10/drivers/rtc/rtc-cmos.c
===================================================================
--- work10.orig/drivers/rtc/rtc-cmos.c	2008-04-25 11:12:15.000000000 -0600
+++ work10/drivers/rtc/rtc-cmos.c	2008-04-25 11:15:08.000000000 -0600
@@ -854,11 +854,12 @@
 		 * don't define the IRQ. It should always be safe to
 		 * hardcode it in these cases
 		 */
-		return cmos_do_probe(&pnp->dev, &pnp->res.port_resource[0], 8);
+		return cmos_do_probe(&pnp->dev,
+				pnp_get_resource(pnp, IORESOURCE_IO, 0), 8);
 	else
 		return cmos_do_probe(&pnp->dev,
-				     &pnp->res.port_resource[0],
-				     pnp->res.irq_resource[0].start);
+				pnp_get_resource(pnp, IORESOURCE_IO, 0),
+				pnp_irq(pnp, 0));
 }
 
 static void __exit cmos_pnp_remove(struct pnp_dev *pnp)

-- 

^ permalink raw reply	[flat|nested] 80+ messages in thread

* [patch 40/54] PNP: make pnp_resource_table private to PNP core
  2008-04-25 18:38 [patch 00/54] PNP cleanup, v4 Bjorn Helgaas
                   ` (38 preceding siblings ...)
  2008-04-25 18:38 ` [patch 39/54] rtc: dont reference pnp_resource_table directly Bjorn Helgaas
@ 2008-04-25 18:38 ` Bjorn Helgaas
  2008-04-25 18:38 ` [patch 41/54] PNP: remove pnp_resource_table references from resource decoders Bjorn Helgaas
                   ` (14 subsequent siblings)
  54 siblings, 0 replies; 80+ messages in thread
From: Bjorn Helgaas @ 2008-04-25 18:38 UTC (permalink / raw)
  To: Len Brown
  Cc: linux-acpi, linux-kernel, Adam Belay, Adam M Belay, Li Shaohua,
	Matthieu Castet, Thomas Renninger, Rene Herman, Jaroslav Kysela,
	Andrew Morton

[-- Attachment #1: pnp-private-resource-table --]
[-- Type: text/plain, Size: 12785 bytes --]

There are no remaining references to the PNP_MAX_* constants or
the pnp_resource_table structure outside of the PNP core.  Make
them private to the PNP core.

Signed-off-by: Bjorn Helgaas <bjorn.helgaas@hp.com>

---
 drivers/pnp/base.h             |   12 ++++++++++++
 drivers/pnp/core.c             |    8 ++++++++
 drivers/pnp/interface.c        |    8 ++++----
 drivers/pnp/isapnp/core.c      |    4 ++--
 drivers/pnp/manager.c          |   24 ++++++++++++------------
 drivers/pnp/pnpacpi/rsparser.c |   10 ++++++----
 drivers/pnp/pnpbios/rsparser.c |    8 ++++----
 drivers/pnp/resource.c         |    2 +-
 drivers/pnp/support.c          |    8 ++++----
 include/linux/pnp.h            |   14 ++------------
 10 files changed, 55 insertions(+), 43 deletions(-)

Index: work10/include/linux/pnp.h
===================================================================
--- work10.orig/include/linux/pnp.h	2008-04-25 11:15:02.000000000 -0600
+++ work10/include/linux/pnp.h	2008-04-25 11:15:08.000000000 -0600
@@ -13,14 +13,11 @@
 #include <linux/errno.h>
 #include <linux/mod_devicetable.h>
 
-#define PNP_MAX_PORT		40
-#define PNP_MAX_MEM		24
-#define PNP_MAX_IRQ		2
-#define PNP_MAX_DMA		2
 #define PNP_NAME_LEN		50
 
 struct pnp_protocol;
 struct pnp_dev;
+struct pnp_resource_table;
 
 /*
  * Resource Management
@@ -187,13 +184,6 @@
 	struct pnp_option *next;	/* used to chain dependent resources */
 };
 
-struct pnp_resource_table {
-	struct resource port_resource[PNP_MAX_PORT];
-	struct resource mem_resource[PNP_MAX_MEM];
-	struct resource dma_resource[PNP_MAX_DMA];
-	struct resource irq_resource[PNP_MAX_IRQ];
-};
-
 /*
  * Device Management
  */
@@ -263,7 +253,7 @@
 	int capabilities;
 	struct pnp_option *independent;
 	struct pnp_option *dependent;
-	struct pnp_resource_table res;
+	struct pnp_resource_table *res;
 
 	char name[PNP_NAME_LEN];	/* contains a human-readable name */
 	unsigned short regs;		/* ISAPnP: supported registers */
Index: work10/drivers/pnp/base.h
===================================================================
--- work10.orig/drivers/pnp/base.h	2008-04-25 11:15:05.000000000 -0600
+++ work10/drivers/pnp/base.h	2008-04-25 11:15:08.000000000 -0600
@@ -20,3 +20,15 @@
 void dbg_pnp_show_resources(struct pnp_dev *dev, char *desc);
 
 void pnp_init_resource(struct resource *res);
+
+#define PNP_MAX_PORT		40
+#define PNP_MAX_MEM		24
+#define PNP_MAX_IRQ		 2
+#define PNP_MAX_DMA		 2
+
+struct pnp_resource_table {
+	struct resource port_resource[PNP_MAX_PORT];
+	struct resource mem_resource[PNP_MAX_MEM];
+	struct resource dma_resource[PNP_MAX_DMA];
+	struct resource irq_resource[PNP_MAX_IRQ];
+};
Index: work10/drivers/pnp/core.c
===================================================================
--- work10.orig/drivers/pnp/core.c	2008-04-25 11:14:49.000000000 -0600
+++ work10/drivers/pnp/core.c	2008-04-25 11:15:08.000000000 -0600
@@ -106,6 +106,7 @@
 	pnp_free_option(dev->independent);
 	pnp_free_option(dev->dependent);
 	pnp_free_ids(dev);
+	kfree(dev->res);
 	kfree(dev);
 }
 
@@ -118,6 +119,12 @@
 	if (!dev)
 		return NULL;
 
+	dev->res = kzalloc(sizeof(struct pnp_resource_table), GFP_KERNEL);
+	if (!dev->res) {
+		kfree(dev);
+		return NULL;
+	}
+
 	dev->protocol = protocol;
 	dev->number = id;
 	dev->dma_mask = DMA_24BIT_MASK;
@@ -133,6 +140,7 @@
 
 	dev_id = pnp_add_id(dev, pnpid);
 	if (!dev_id) {
+		kfree(dev->res);
 		kfree(dev);
 		return NULL;
 	}
Index: work10/drivers/pnp/isapnp/core.c
===================================================================
--- work10.orig/drivers/pnp/isapnp/core.c	2008-04-25 11:14:59.000000000 -0600
+++ work10/drivers/pnp/isapnp/core.c	2008-04-25 11:15:08.000000000 -0600
@@ -931,7 +931,7 @@
 
 static int isapnp_read_resources(struct pnp_dev *dev)
 {
-	struct pnp_resource_table *res = &dev->res;
+	struct pnp_resource_table *res = dev->res;
 	int tmp, ret;
 
 	dev->active = isapnp_read_byte(ISAPNP_CFG_ACTIVATE);
@@ -987,7 +987,7 @@
 
 static int isapnp_set_resources(struct pnp_dev *dev)
 {
-	struct pnp_resource_table *res = &dev->res;
+	struct pnp_resource_table *res = dev->res;
 	int tmp;
 
 	dev_dbg(&dev->dev, "set resources\n");
Index: work10/drivers/pnp/pnpacpi/rsparser.c
===================================================================
--- work10.orig/drivers/pnp/pnpacpi/rsparser.c	2008-04-25 11:15:06.000000000 -0600
+++ work10/drivers/pnp/pnpacpi/rsparser.c	2008-04-25 11:15:08.000000000 -0600
@@ -21,6 +21,8 @@
 #include <linux/kernel.h>
 #include <linux/acpi.h>
 #include <linux/pci.h>
+#include <linux/pnp.h>
+#include "../base.h"
 #include "pnpacpi.h"
 
 #ifdef CONFIG_IA64
@@ -80,7 +82,7 @@
 						u32 gsi, int triggering,
 						int polarity, int shareable)
 {
-	struct pnp_resource_table *res = &dev->res;
+	struct pnp_resource_table *res = dev->res;
 	int i = 0;
 	int irq;
 	int p, t;
@@ -176,7 +178,7 @@
 static void pnpacpi_parse_allocated_dmaresource(struct pnp_dev *dev,
 						u32 dma, int flags)
 {
-	struct pnp_resource_table *res = &dev->res;
+	struct pnp_resource_table *res = dev->res;
 	int i = 0;
 	static unsigned char warned;
 
@@ -202,7 +204,7 @@
 static void pnpacpi_parse_allocated_ioresource(struct pnp_dev *dev,
 					       u64 io, u64 len, int io_decode)
 {
-	struct pnp_resource_table *res = &dev->res;
+	struct pnp_resource_table *res = dev->res;
 	int i = 0;
 	static unsigned char warned;
 
@@ -230,7 +232,7 @@
 						u64 mem, u64 len,
 						int write_protect)
 {
-	struct pnp_resource_table *res = &dev->res;
+	struct pnp_resource_table *res = dev->res;
 	int i = 0;
 	static unsigned char warned;
 
Index: work10/drivers/pnp/pnpbios/rsparser.c
===================================================================
--- work10.orig/drivers/pnp/pnpbios/rsparser.c	2008-04-25 11:15:06.000000000 -0600
+++ work10/drivers/pnp/pnpbios/rsparser.c	2008-04-25 11:15:08.000000000 -0600
@@ -56,7 +56,7 @@
 
 static void pnpbios_parse_allocated_irqresource(struct pnp_dev *dev, int irq)
 {
-	struct pnp_resource_table *res = &dev->res;
+	struct pnp_resource_table *res = dev->res;
 	int i = 0;
 
 	while (!(res->irq_resource[i].flags & IORESOURCE_UNSET)
@@ -76,7 +76,7 @@
 
 static void pnpbios_parse_allocated_dmaresource(struct pnp_dev *dev, int dma)
 {
-	struct pnp_resource_table *res = &dev->res;
+	struct pnp_resource_table *res = dev->res;
 	int i = 0;
 
 	while (i < PNP_MAX_DMA &&
@@ -96,7 +96,7 @@
 static void pnpbios_parse_allocated_ioresource(struct pnp_dev *dev,
 					       int io, int len)
 {
-	struct pnp_resource_table *res = &dev->res;
+	struct pnp_resource_table *res = dev->res;
 	int i = 0;
 
 	while (!(res->port_resource[i].flags & IORESOURCE_UNSET)
@@ -116,7 +116,7 @@
 static void pnpbios_parse_allocated_memresource(struct pnp_dev *dev,
 						int mem, int len)
 {
-	struct pnp_resource_table *res = &dev->res;
+	struct pnp_resource_table *res = dev->res;
 	int i = 0;
 
 	while (!(res->mem_resource[i].flags & IORESOURCE_UNSET)
Index: work10/drivers/pnp/resource.c
===================================================================
--- work10.orig/drivers/pnp/resource.c	2008-04-25 11:15:07.000000000 -0600
+++ work10/drivers/pnp/resource.c	2008-04-25 11:15:08.000000000 -0600
@@ -502,7 +502,7 @@
 struct resource *pnp_get_resource(struct pnp_dev *dev,
 				  unsigned int type, unsigned int num)
 {
-	struct pnp_resource_table *res = &dev->res;
+	struct pnp_resource_table *res = dev->res;
 
 	switch (type) {
 	case IORESOURCE_IO:
Index: work10/drivers/pnp/manager.c
===================================================================
--- work10.orig/drivers/pnp/manager.c	2008-04-25 11:15:05.000000000 -0600
+++ work10/drivers/pnp/manager.c	2008-04-25 11:15:08.000000000 -0600
@@ -27,7 +27,7 @@
 		return 1;
 	}
 
-	res = &dev->res.port_resource[idx];
+	res = &dev->res->port_resource[idx];
 
 	/* check if this resource has been manually set, if so skip */
 	if (!(res->flags & IORESOURCE_AUTO)) {
@@ -74,7 +74,7 @@
 		return 1;
 	}
 
-	res = &dev->res.mem_resource[idx];
+	res = &dev->res->mem_resource[idx];
 
 	/* check if this resource has been manually set, if so skip */
 	if (!(res->flags & IORESOURCE_AUTO)) {
@@ -137,7 +137,7 @@
 		return 1;
 	}
 
-	res = &dev->res.irq_resource[idx];
+	res = &dev->res->irq_resource[idx];
 
 	/* check if this resource has been manually set, if so skip */
 	if (!(res->flags & IORESOURCE_AUTO)) {
@@ -193,7 +193,7 @@
 		return;
 	}
 
-	res = &dev->res.dma_resource[idx];
+	res = &dev->res->dma_resource[idx];
 
 	/* check if this resource has been manually set, if so skip */
 	if (!(res->flags & IORESOURCE_AUTO)) {
@@ -251,22 +251,22 @@
 	int idx;
 
 	for (idx = 0; idx < PNP_MAX_IRQ; idx++) {
-		res = &dev->res.irq_resource[idx];
+		res = &dev->res->irq_resource[idx];
 		res->flags = IORESOURCE_IRQ;
 		pnp_init_resource(res);
 	}
 	for (idx = 0; idx < PNP_MAX_DMA; idx++) {
-		res = &dev->res.dma_resource[idx];
+		res = &dev->res->dma_resource[idx];
 		res->flags = IORESOURCE_DMA;
 		pnp_init_resource(res);
 	}
 	for (idx = 0; idx < PNP_MAX_PORT; idx++) {
-		res = &dev->res.port_resource[idx];
+		res = &dev->res->port_resource[idx];
 		res->flags = IORESOURCE_IO;
 		pnp_init_resource(res);
 	}
 	for (idx = 0; idx < PNP_MAX_MEM; idx++) {
-		res = &dev->res.mem_resource[idx];
+		res = &dev->res->mem_resource[idx];
 		res->flags = IORESOURCE_MEM;
 		pnp_init_resource(res);
 	}
@@ -282,22 +282,22 @@
 	int idx;
 
 	for (idx = 0; idx < PNP_MAX_IRQ; idx++) {
-		res = &dev->res.irq_resource[idx];
+		res = &dev->res->irq_resource[idx];
 		if (res->flags & IORESOURCE_AUTO)
 			pnp_init_resource(res);
 	}
 	for (idx = 0; idx < PNP_MAX_DMA; idx++) {
-		res = &dev->res.dma_resource[idx];
+		res = &dev->res->dma_resource[idx];
 		if (res->flags & IORESOURCE_AUTO)
 			pnp_init_resource(res);
 	}
 	for (idx = 0; idx < PNP_MAX_PORT; idx++) {
-		res = &dev->res.port_resource[idx];
+		res = &dev->res->port_resource[idx];
 		if (res->flags & IORESOURCE_AUTO)
 			pnp_init_resource(res);
 	}
 	for (idx = 0; idx < PNP_MAX_MEM; idx++) {
-		res = &dev->res.mem_resource[idx];
+		res = &dev->res->mem_resource[idx];
 		if (res->flags & IORESOURCE_AUTO)
 			pnp_init_resource(res);
 	}
Index: work10/drivers/pnp/interface.c
===================================================================
--- work10.orig/drivers/pnp/interface.c	2008-04-25 11:15:07.000000000 -0600
+++ work10/drivers/pnp/interface.c	2008-04-25 11:15:08.000000000 -0600
@@ -382,7 +382,7 @@
 				buf += 2;
 				while (isspace(*buf))
 					++buf;
-				res = &dev->res.port_resource[nport];
+				res = &dev->res->port_resource[nport];
 				res->start = simple_strtoul(buf, &buf, 0);
 				while (isspace(*buf))
 					++buf;
@@ -403,7 +403,7 @@
 				buf += 3;
 				while (isspace(*buf))
 					++buf;
-				res = &dev->res.mem_resource[nmem];
+				res = &dev->res->mem_resource[nmem];
 				res->start = simple_strtoul(buf, &buf, 0);
 				while (isspace(*buf))
 					++buf;
@@ -424,7 +424,7 @@
 				buf += 3;
 				while (isspace(*buf))
 					++buf;
-				res = &dev->res.irq_resource[nirq];
+				res = &dev->res->irq_resource[nirq];
 				res->start = res->end =
 				    simple_strtoul(buf, &buf, 0);
 				res->flags = IORESOURCE_IRQ;
@@ -437,7 +437,7 @@
 				buf += 3;
 				while (isspace(*buf))
 					++buf;
-				res = &dev->res.dma_resource[ndma];
+				res = &dev->res->dma_resource[ndma];
 				res->start = res->end =
 				    simple_strtoul(buf, &buf, 0);
 				res->flags = IORESOURCE_DMA;
Index: work10/drivers/pnp/support.c
===================================================================
--- work10.orig/drivers/pnp/support.c	2008-04-25 11:14:57.000000000 -0600
+++ work10/drivers/pnp/support.c	2008-04-25 11:15:08.000000000 -0600
@@ -61,26 +61,26 @@
 	dev_dbg(&dev->dev, "current resources: %s\n", desc);
 
 	for (i = 0; i < PNP_MAX_IRQ; i++) {
-		res = &dev->res.irq_resource[i];
+		res = &dev->res->irq_resource[i];
 		if (!(res->flags & IORESOURCE_UNSET))
 			dev_dbg(&dev->dev, "  irq %lld flags 0x%lx\n",
 				(unsigned long long) res->start, res->flags);
 	}
 	for (i = 0; i < PNP_MAX_DMA; i++) {
-		res = &dev->res.dma_resource[i];
+		res = &dev->res->dma_resource[i];
 		if (!(res->flags & IORESOURCE_UNSET))
 			dev_dbg(&dev->dev, "  dma %lld flags 0x%lx\n",
 				(unsigned long long) res->start, res->flags);
 	}
 	for (i = 0; i < PNP_MAX_PORT; i++) {
-		res = &dev->res.port_resource[i];
+		res = &dev->res->port_resource[i];
 		if (!(res->flags & IORESOURCE_UNSET))
 			dev_dbg(&dev->dev, "  io  0x%llx-0x%llx flags 0x%lx\n",
 				(unsigned long long) res->start,
 				(unsigned long long) res->end, res->flags);
 	}
 	for (i = 0; i < PNP_MAX_MEM; i++) {
-		res = &dev->res.mem_resource[i];
+		res = &dev->res->mem_resource[i];
 		if (!(res->flags & IORESOURCE_UNSET))
 			dev_dbg(&dev->dev, "  mem 0x%llx-0x%llx flags 0x%lx\n",
 				(unsigned long long) res->start,

-- 

^ permalink raw reply	[flat|nested] 80+ messages in thread

* [patch 41/54] PNP: remove pnp_resource_table references from resource decoders
  2008-04-25 18:38 [patch 00/54] PNP cleanup, v4 Bjorn Helgaas
                   ` (39 preceding siblings ...)
  2008-04-25 18:38 ` [patch 40/54] PNP: make pnp_resource_table private to PNP core Bjorn Helgaas
@ 2008-04-25 18:38 ` Bjorn Helgaas
  2008-04-26 22:28   ` Rene Herman
  2008-04-25 18:38 ` [patch 42/54] PNP: add struct pnp_resource Bjorn Helgaas
                   ` (13 subsequent siblings)
  54 siblings, 1 reply; 80+ messages in thread
From: Bjorn Helgaas @ 2008-04-25 18:38 UTC (permalink / raw)
  To: Len Brown
  Cc: linux-acpi, linux-kernel, Adam Belay, Adam M Belay, Li Shaohua,
	Matthieu Castet, Thomas Renninger, Rene Herman, Jaroslav Kysela,
	Andrew Morton

[-- Attachment #1: pnp-remove-pnp_resource_table-from-decoders --]
[-- Type: text/plain, Size: 14292 bytes --]

This removes a few more references to the pnp_resource_table.
No functional change.

Signed-off-by: Bjorn Helgaas <bjorn.helgaas@hp.com>

---
 drivers/pnp/isapnp/core.c      |   87 ++++++++++++++++++++--------------------
 drivers/pnp/pnpacpi/rsparser.c |   88 ++++++++++++++++++++++-------------------
 drivers/pnp/pnpbios/rsparser.c |   82 +++++++++++++++++++++-----------------
 3 files changed, 138 insertions(+), 119 deletions(-)

Index: work10/drivers/pnp/isapnp/core.c
===================================================================
--- work10.orig/drivers/pnp/isapnp/core.c	2008-04-25 11:15:08.000000000 -0600
+++ work10/drivers/pnp/isapnp/core.c	2008-04-25 11:15:09.000000000 -0600
@@ -931,7 +931,7 @@
 
 static int isapnp_read_resources(struct pnp_dev *dev)
 {
-	struct pnp_resource_table *res = dev->res;
+	struct resource *res;
 	int tmp, ret;
 
 	dev->active = isapnp_read_byte(ISAPNP_CFG_ACTIVATE);
@@ -940,16 +940,18 @@
 			ret = isapnp_read_word(ISAPNP_CFG_PORT + (tmp << 1));
 			if (!ret)
 				continue;
-			res->port_resource[tmp].start = ret;
-			res->port_resource[tmp].flags = IORESOURCE_IO;
+			res = &dev->res->port_resource[tmp];
+			res->start = ret;
+			res->flags = IORESOURCE_IO;
 		}
 		for (tmp = 0; tmp < ISAPNP_MAX_MEM; tmp++) {
 			ret =
 			    isapnp_read_word(ISAPNP_CFG_MEM + (tmp << 3)) << 8;
 			if (!ret)
 				continue;
-			res->mem_resource[tmp].start = ret;
-			res->mem_resource[tmp].flags = IORESOURCE_MEM;
+			res = &dev->res->mem_resource[tmp];
+			res->start = ret;
+			res->flags = IORESOURCE_MEM;
 		}
 		for (tmp = 0; tmp < ISAPNP_MAX_IRQ; tmp++) {
 			ret =
@@ -957,17 +959,17 @@
 			     8);
 			if (!ret)
 				continue;
-			res->irq_resource[tmp].start =
-			    res->irq_resource[tmp].end = ret;
-			res->irq_resource[tmp].flags = IORESOURCE_IRQ;
+			res = &dev->res->irq_resource[tmp];
+			res->start = res->end = ret;
+			res->flags = IORESOURCE_IRQ;
 		}
 		for (tmp = 0; tmp < ISAPNP_MAX_DMA; tmp++) {
 			ret = isapnp_read_byte(ISAPNP_CFG_DMA + tmp);
 			if (ret == 4)
 				continue;
-			res->dma_resource[tmp].start =
-			    res->dma_resource[tmp].end = ret;
-			res->dma_resource[tmp].flags = IORESOURCE_DMA;
+			res = &dev->res->dma_resource[tmp];
+			res->start = res->end = ret;
+			res->flags = IORESOURCE_DMA;
 		}
 	}
 	return 0;
@@ -987,52 +989,51 @@
 
 static int isapnp_set_resources(struct pnp_dev *dev)
 {
-	struct pnp_resource_table *res = dev->res;
+	struct resource *res;
 	int tmp;
 
 	dev_dbg(&dev->dev, "set resources\n");
 	isapnp_cfg_begin(dev->card->number, dev->number);
 	dev->active = 1;
-	for (tmp = 0;
-	     tmp < ISAPNP_MAX_PORT
-	     && (res->port_resource[tmp].
-		 flags & (IORESOURCE_IO | IORESOURCE_UNSET)) == IORESOURCE_IO;
-	     tmp++) {
-		dev_dbg(&dev->dev, "  set io  %d to 0x%llx\n",
-			tmp, (unsigned long long) res->port_resource[tmp].start);
-		isapnp_write_word(ISAPNP_CFG_PORT + (tmp << 1),
-				  res->port_resource[tmp].start);
-	}
-	for (tmp = 0;
-	     tmp < ISAPNP_MAX_IRQ
-	     && (res->irq_resource[tmp].
-		 flags & (IORESOURCE_IRQ | IORESOURCE_UNSET)) == IORESOURCE_IRQ;
-	     tmp++) {
-		int irq = res->irq_resource[tmp].start;
-		if (irq == 2)
-			irq = 9;
-		dev_dbg(&dev->dev, "  set irq %d to %d\n", tmp, irq);
-		isapnp_write_byte(ISAPNP_CFG_IRQ + (tmp << 1), irq);
-	}
-	for (tmp = 0;
-	     tmp < ISAPNP_MAX_DMA
-	     && (res->dma_resource[tmp].
-		 flags & (IORESOURCE_DMA | IORESOURCE_UNSET)) == IORESOURCE_DMA;
-	     tmp++) {
-		dev_dbg(&dev->dev, "  set dma %d to %lld\n",
-			tmp, (unsigned long long) res->dma_resource[tmp].start);
-		isapnp_write_byte(ISAPNP_CFG_DMA + tmp,
-				  res->dma_resource[tmp].start);
-	}
-	for (tmp = 0;
-	     tmp < ISAPNP_MAX_MEM
-	     && (res->mem_resource[tmp].
-		 flags & (IORESOURCE_MEM | IORESOURCE_UNSET)) == IORESOURCE_MEM;
-	     tmp++) {
-		dev_dbg(&dev->dev, "  set mem %d to 0x%llx\n",
-			tmp, (unsigned long long) res->mem_resource[tmp].start);
-		isapnp_write_word(ISAPNP_CFG_MEM + (tmp << 3),
-				  (res->mem_resource[tmp].start >> 8) & 0xffff);
+	for (tmp = 0; tmp < ISAPNP_MAX_PORT; tmp++) {
+		res = &dev->res->port_resource[tmp];
+		if ((res->flags & (IORESOURCE_IO | IORESOURCE_UNSET)) ==
+				IORESOURCE_IO) {
+			dev_dbg(&dev->dev, "  set io  %d to 0x%llx\n",
+				tmp, (unsigned long long) res->start);
+			isapnp_write_word(ISAPNP_CFG_PORT + (tmp << 1),
+					  res->start);
+		}
+	}
+	for (tmp = 0; tmp < ISAPNP_MAX_IRQ; tmp++) {
+		res = &dev->res->irq_resource[tmp];
+		if ((res->flags & (IORESOURCE_IRQ | IORESOURCE_UNSET)) ==
+				IORESOURCE_IRQ) {
+			int irq = res->start;
+			if (irq == 2)
+				irq = 9;
+			dev_dbg(&dev->dev, "  set irq %d to %d\n", tmp, irq);
+			isapnp_write_byte(ISAPNP_CFG_IRQ + (tmp << 1), irq);
+		}
+	}
+	for (tmp = 0; tmp < ISAPNP_MAX_DMA; tmp++) {
+		res = &dev->res->dma_resource[tmp];
+		if ((res->flags & (IORESOURCE_DMA | IORESOURCE_UNSET)) ==
+				IORESOURCE_DMA) {
+			dev_dbg(&dev->dev, "  set dma %d to %lld\n",
+				tmp, (unsigned long long) res->start);
+			isapnp_write_byte(ISAPNP_CFG_DMA + tmp, res->start);
+		}
+	}
+	for (tmp = 0; tmp < ISAPNP_MAX_MEM; tmp++) {
+		res = &dev->res->mem_resource[tmp];
+		if ((res->flags & (IORESOURCE_MEM | IORESOURCE_UNSET)) ==
+				IORESOURCE_MEM) {
+			dev_dbg(&dev->dev, "  set mem %d to 0x%llx\n",
+				tmp, (unsigned long long) res->start);
+			isapnp_write_word(ISAPNP_CFG_MEM + (tmp << 3),
+					  (res->start >> 8) & 0xffff);
+		}
 	}
 	/* FIXME: We aren't handling 32bit mems properly here */
 	isapnp_activate(dev->number);
Index: work10/drivers/pnp/pnpacpi/rsparser.c
===================================================================
--- work10.orig/drivers/pnp/pnpacpi/rsparser.c	2008-04-25 11:15:08.000000000 -0600
+++ work10/drivers/pnp/pnpacpi/rsparser.c	2008-04-25 11:15:09.000000000 -0600
@@ -82,8 +82,8 @@
 						u32 gsi, int triggering,
 						int polarity, int shareable)
 {
-	struct pnp_resource_table *res = dev->res;
-	int i = 0;
+	struct resource *res;
+	int i;
 	int irq;
 	int p, t;
 	static unsigned char warned;
@@ -91,9 +91,11 @@
 	if (!valid_IRQ(gsi))
 		return;
 
-	while (!(res->irq_resource[i].flags & IORESOURCE_UNSET) &&
-	       i < PNP_MAX_IRQ)
-		i++;
+	for (i = 0; i < PNP_MAX_IRQ; i++) {
+		res = &dev->res->irq_resource[i];
+		if (res->flags & IORESOURCE_UNSET)
+			break;
+	}
 	if (i >= PNP_MAX_IRQ) {
 		if (!warned) {
 			printk(KERN_WARNING "pnpacpi: exceeded the max number"
@@ -119,16 +121,16 @@
 		}
 	}
 
-	res->irq_resource[i].flags = IORESOURCE_IRQ;	// Also clears _UNSET flag
-	res->irq_resource[i].flags |= irq_flags(triggering, polarity, shareable);
+	res->flags = IORESOURCE_IRQ;	// Also clears _UNSET flag
+	res->flags |= irq_flags(triggering, polarity, shareable);
 	irq = acpi_register_gsi(gsi, triggering, polarity);
 	if (irq < 0) {
-		res->irq_resource[i].flags |= IORESOURCE_DISABLED;
+		res->flags |= IORESOURCE_DISABLED;
 		return;
 	}
 
-	res->irq_resource[i].start = irq;
-	res->irq_resource[i].end = irq;
+	res->start = irq;
+	res->end = irq;
 	pcibios_penalize_isa_irq(irq, 1);
 }
 
@@ -178,22 +180,24 @@
 static void pnpacpi_parse_allocated_dmaresource(struct pnp_dev *dev,
 						u32 dma, int flags)
 {
-	struct pnp_resource_table *res = dev->res;
-	int i = 0;
+	struct resource *res;
+	int i;
 	static unsigned char warned;
 
-	while (i < PNP_MAX_DMA &&
-	       !(res->dma_resource[i].flags & IORESOURCE_UNSET))
-		i++;
+	for (i = 0; i < PNP_MAX_DMA; i++) {
+		res = &dev->res->dma_resource[i];
+		if (res->flags & IORESOURCE_UNSET)
+			break;
+	}
 	if (i < PNP_MAX_DMA) {
-		res->dma_resource[i].flags = IORESOURCE_DMA;	// Also clears _UNSET flag
-		res->dma_resource[i].flags |= flags;
+		res->flags = IORESOURCE_DMA;	// Also clears _UNSET flag
+		res->flags |= flags;
 		if (dma == -1) {
-			res->dma_resource[i].flags |= IORESOURCE_DISABLED;
+			res->flags |= IORESOURCE_DISABLED;
 			return;
 		}
-		res->dma_resource[i].start = dma;
-		res->dma_resource[i].end = dma;
+		res->start = dma;
+		res->end = dma;
 	} else if (!warned) {
 		printk(KERN_WARNING "pnpacpi: exceeded the max number of DMA "
 				"resources: %d \n", PNP_MAX_DMA);
@@ -204,23 +208,25 @@
 static void pnpacpi_parse_allocated_ioresource(struct pnp_dev *dev,
 					       u64 io, u64 len, int io_decode)
 {
-	struct pnp_resource_table *res = dev->res;
-	int i = 0;
+	struct resource *res;
+	int i;
 	static unsigned char warned;
 
-	while (!(res->port_resource[i].flags & IORESOURCE_UNSET) &&
-	       i < PNP_MAX_PORT)
-		i++;
+	for (i = 0; i < PNP_MAX_PORT; i++) {
+		res = &dev->res->port_resource[i];
+		if (res->flags & IORESOURCE_UNSET)
+			break;
+	}
 	if (i < PNP_MAX_PORT) {
-		res->port_resource[i].flags = IORESOURCE_IO;	// Also clears _UNSET flag
+		res->flags = IORESOURCE_IO;	// Also clears _UNSET flag
 		if (io_decode == ACPI_DECODE_16)
-			res->port_resource[i].flags |= PNP_PORT_FLAG_16BITADDR;
+			res->flags |= PNP_PORT_FLAG_16BITADDR;
 		if (len <= 0 || (io + len - 1) >= 0x10003) {
-			res->port_resource[i].flags |= IORESOURCE_DISABLED;
+			res->flags |= IORESOURCE_DISABLED;
 			return;
 		}
-		res->port_resource[i].start = io;
-		res->port_resource[i].end = io + len - 1;
+		res->start = io;
+		res->end = io + len - 1;
 	} else if (!warned) {
 		printk(KERN_WARNING "pnpacpi: exceeded the max number of IO "
 				"resources: %d \n", PNP_MAX_PORT);
@@ -232,24 +238,26 @@
 						u64 mem, u64 len,
 						int write_protect)
 {
-	struct pnp_resource_table *res = dev->res;
-	int i = 0;
+	struct resource *res;
+	int i;
 	static unsigned char warned;
 
-	while (!(res->mem_resource[i].flags & IORESOURCE_UNSET) &&
-	       (i < PNP_MAX_MEM))
-		i++;
+	for (i = 0; i < PNP_MAX_MEM; i++) {
+		res = &dev->res->mem_resource[i];
+		if (res->flags & IORESOURCE_UNSET)
+			break;
+	}
 	if (i < PNP_MAX_MEM) {
-		res->mem_resource[i].flags = IORESOURCE_MEM;	// Also clears _UNSET flag
+		res->flags = IORESOURCE_MEM;	// Also clears _UNSET flag
 		if (len <= 0) {
-			res->mem_resource[i].flags |= IORESOURCE_DISABLED;
+			res->flags |= IORESOURCE_DISABLED;
 			return;
 		}
 		if (write_protect == ACPI_READ_WRITE_MEMORY)
-			res->mem_resource[i].flags |= IORESOURCE_MEM_WRITEABLE;
+			res->flags |= IORESOURCE_MEM_WRITEABLE;
 
-		res->mem_resource[i].start = mem;
-		res->mem_resource[i].end = mem + len - 1;
+		res->start = mem;
+		res->end = mem + len - 1;
 	} else if (!warned) {
 		printk(KERN_WARNING "pnpacpi: exceeded the max number of mem "
 				"resources: %d\n", PNP_MAX_MEM);
Index: work10/drivers/pnp/pnpbios/rsparser.c
===================================================================
--- work10.orig/drivers/pnp/pnpbios/rsparser.c	2008-04-25 11:15:08.000000000 -0600
+++ work10/drivers/pnp/pnpbios/rsparser.c	2008-04-25 11:15:09.000000000 -0600
@@ -56,80 +56,90 @@
 
 static void pnpbios_parse_allocated_irqresource(struct pnp_dev *dev, int irq)
 {
-	struct pnp_resource_table *res = dev->res;
-	int i = 0;
+	struct resource *res;
+	int i;
+
+	for (i = 0; i < PNP_MAX_IRQ; i++) {
+		res = &dev->res->irq_resource[i];
+		if (res->flags & IORESOURCE_UNSET)
+			break;
+	}
 
-	while (!(res->irq_resource[i].flags & IORESOURCE_UNSET)
-	       && i < PNP_MAX_IRQ)
-		i++;
 	if (i < PNP_MAX_IRQ) {
-		res->irq_resource[i].flags = IORESOURCE_IRQ;	// Also clears _UNSET flag
+		res->flags = IORESOURCE_IRQ;	// Also clears _UNSET flag
 		if (irq == -1) {
-			res->irq_resource[i].flags |= IORESOURCE_DISABLED;
+			res->flags |= IORESOURCE_DISABLED;
 			return;
 		}
-		res->irq_resource[i].start =
-		    res->irq_resource[i].end = (unsigned long)irq;
+		res->start = res->end = (unsigned long)irq;
 		pcibios_penalize_isa_irq(irq, 1);
 	}
 }
 
 static void pnpbios_parse_allocated_dmaresource(struct pnp_dev *dev, int dma)
 {
-	struct pnp_resource_table *res = dev->res;
-	int i = 0;
+	struct resource *res;
+	int i;
+
+	for (i = 0; i < PNP_MAX_DMA; i++) {
+		res = &dev->res->dma_resource[i];
+		if (res->flags & IORESOURCE_UNSET)
+			break;
+	}
 
-	while (i < PNP_MAX_DMA &&
-	       !(res->dma_resource[i].flags & IORESOURCE_UNSET))
-		i++;
 	if (i < PNP_MAX_DMA) {
-		res->dma_resource[i].flags = IORESOURCE_DMA;	// Also clears _UNSET flag
+		res->flags = IORESOURCE_DMA;	// Also clears _UNSET flag
 		if (dma == -1) {
-			res->dma_resource[i].flags |= IORESOURCE_DISABLED;
+			res->flags |= IORESOURCE_DISABLED;
 			return;
 		}
-		res->dma_resource[i].start =
-		    res->dma_resource[i].end = (unsigned long)dma;
+		res->start = res->end = (unsigned long)dma;
 	}
 }
 
 static void pnpbios_parse_allocated_ioresource(struct pnp_dev *dev,
 					       int io, int len)
 {
-	struct pnp_resource_table *res = dev->res;
-	int i = 0;
+	struct resource *res;
+	int i;
+
+	for (i = 0; i < PNP_MAX_PORT; i++) {
+		res = &dev->res->port_resource[i];
+		if (res->flags & IORESOURCE_UNSET)
+			break;
+	}
 
-	while (!(res->port_resource[i].flags & IORESOURCE_UNSET)
-	       && i < PNP_MAX_PORT)
-		i++;
 	if (i < PNP_MAX_PORT) {
-		res->port_resource[i].flags = IORESOURCE_IO;	// Also clears _UNSET flag
+		res->flags = IORESOURCE_IO;	// Also clears _UNSET flag
 		if (len <= 0 || (io + len - 1) >= 0x10003) {
-			res->port_resource[i].flags |= IORESOURCE_DISABLED;
+			res->flags |= IORESOURCE_DISABLED;
 			return;
 		}
-		res->port_resource[i].start = (unsigned long)io;
-		res->port_resource[i].end = (unsigned long)(io + len - 1);
+		res->start = (unsigned long)io;
+		res->end = (unsigned long)(io + len - 1);
 	}
 }
 
 static void pnpbios_parse_allocated_memresource(struct pnp_dev *dev,
 						int mem, int len)
 {
-	struct pnp_resource_table *res = dev->res;
-	int i = 0;
+	struct resource *res;
+	int i;
+
+	for (i = 0; i < PNP_MAX_MEM; i++) {
+		res = &dev->res->mem_resource[i];
+		if (res->flags & IORESOURCE_UNSET)
+			break;
+	}
 
-	while (!(res->mem_resource[i].flags & IORESOURCE_UNSET)
-	       && i < PNP_MAX_MEM)
-		i++;
 	if (i < PNP_MAX_MEM) {
-		res->mem_resource[i].flags = IORESOURCE_MEM;	// Also clears _UNSET flag
+		res->flags = IORESOURCE_MEM;	// Also clears _UNSET flag
 		if (len <= 0) {
-			res->mem_resource[i].flags |= IORESOURCE_DISABLED;
+			res->flags |= IORESOURCE_DISABLED;
 			return;
 		}
-		res->mem_resource[i].start = (unsigned long)mem;
-		res->mem_resource[i].end = (unsigned long)(mem + len - 1);
+		res->start = (unsigned long)mem;
+		res->end = (unsigned long)(mem + len - 1);
 	}
 }
 

-- 

^ permalink raw reply	[flat|nested] 80+ messages in thread

* [patch 42/54] PNP: add struct pnp_resource
  2008-04-25 18:38 [patch 00/54] PNP cleanup, v4 Bjorn Helgaas
                   ` (40 preceding siblings ...)
  2008-04-25 18:38 ` [patch 41/54] PNP: remove pnp_resource_table references from resource decoders Bjorn Helgaas
@ 2008-04-25 18:38 ` Bjorn Helgaas
  2008-04-25 18:38 ` [patch 43/54] PNP: add pnp_resource index for ISAPNP Bjorn Helgaas
                   ` (12 subsequent siblings)
  54 siblings, 0 replies; 80+ messages in thread
From: Bjorn Helgaas @ 2008-04-25 18:38 UTC (permalink / raw)
  To: Len Brown
  Cc: linux-acpi, linux-kernel, Adam Belay, Adam M Belay, Li Shaohua,
	Matthieu Castet, Thomas Renninger, Rene Herman, Jaroslav Kysela,
	Andrew Morton

[-- Attachment #1: pnp-add-struct-pnp_resource --]
[-- Type: text/plain, Size: 13697 bytes --]

This patch adds a "struct pnp_resource".  This currently
contains only a struct resource, but we will soon need
additional PNP-specific information.

Signed-off-by: Bjorn Helgaas <bjorn.helgaas@hp.com>

---
 drivers/pnp/base.h             |   12 ++++++++----
 drivers/pnp/interface.c        |   13 +++++++++----
 drivers/pnp/isapnp/core.c      |   26 ++++++++++++++++++--------
 drivers/pnp/manager.c          |   32 ++++++++++++++++++++------------
 drivers/pnp/pnpacpi/rsparser.c |    8 ++++----
 drivers/pnp/pnpbios/rsparser.c |    8 ++++----
 drivers/pnp/resource.c         |    8 ++++----
 drivers/pnp/support.c          |    8 ++++----
 8 files changed, 71 insertions(+), 44 deletions(-)

Index: work10/drivers/pnp/base.h
===================================================================
--- work10.orig/drivers/pnp/base.h	2008-04-25 11:15:08.000000000 -0600
+++ work10/drivers/pnp/base.h	2008-04-25 11:15:09.000000000 -0600
@@ -26,9 +26,13 @@
 #define PNP_MAX_IRQ		 2
 #define PNP_MAX_DMA		 2
 
+struct pnp_resource {
+	struct resource res;
+};
+
 struct pnp_resource_table {
-	struct resource port_resource[PNP_MAX_PORT];
-	struct resource mem_resource[PNP_MAX_MEM];
-	struct resource dma_resource[PNP_MAX_DMA];
-	struct resource irq_resource[PNP_MAX_IRQ];
+	struct pnp_resource port[PNP_MAX_PORT];
+	struct pnp_resource mem[PNP_MAX_MEM];
+	struct pnp_resource dma[PNP_MAX_DMA];
+	struct pnp_resource irq[PNP_MAX_IRQ];
 };
Index: work10/drivers/pnp/isapnp/core.c
===================================================================
--- work10.orig/drivers/pnp/isapnp/core.c	2008-04-25 11:15:09.000000000 -0600
+++ work10/drivers/pnp/isapnp/core.c	2008-04-25 11:15:09.000000000 -0600
@@ -931,6 +931,7 @@
 
 static int isapnp_read_resources(struct pnp_dev *dev)
 {
+	struct pnp_resource *pnp_res;
 	struct resource *res;
 	int tmp, ret;
 
@@ -940,7 +941,8 @@
 			ret = isapnp_read_word(ISAPNP_CFG_PORT + (tmp << 1));
 			if (!ret)
 				continue;
-			res = &dev->res->port_resource[tmp];
+			pnp_res = &dev->res->port[tmp];
+			res = &pnp_res->res;
 			res->start = ret;
 			res->flags = IORESOURCE_IO;
 		}
@@ -949,7 +951,8 @@
 			    isapnp_read_word(ISAPNP_CFG_MEM + (tmp << 3)) << 8;
 			if (!ret)
 				continue;
-			res = &dev->res->mem_resource[tmp];
+			pnp_res = &dev->res->mem[tmp];
+			res = &pnp_res->res;
 			res->start = ret;
 			res->flags = IORESOURCE_MEM;
 		}
@@ -959,7 +962,8 @@
 			     8);
 			if (!ret)
 				continue;
-			res = &dev->res->irq_resource[tmp];
+			pnp_res = &dev->res->irq[tmp];
+			res = &pnp_res->res;
 			res->start = res->end = ret;
 			res->flags = IORESOURCE_IRQ;
 		}
@@ -967,7 +971,8 @@
 			ret = isapnp_read_byte(ISAPNP_CFG_DMA + tmp);
 			if (ret == 4)
 				continue;
-			res = &dev->res->dma_resource[tmp];
+			pnp_res = &dev->res->dma[tmp];
+			res = &pnp_res->res;
 			res->start = res->end = ret;
 			res->flags = IORESOURCE_DMA;
 		}
@@ -989,6 +994,7 @@
 
 static int isapnp_set_resources(struct pnp_dev *dev)
 {
+	struct pnp_resource *pnp_res;
 	struct resource *res;
 	int tmp;
 
@@ -996,7 +1002,8 @@
 	isapnp_cfg_begin(dev->card->number, dev->number);
 	dev->active = 1;
 	for (tmp = 0; tmp < ISAPNP_MAX_PORT; tmp++) {
-		res = &dev->res->port_resource[tmp];
+		pnp_res = &dev->res->port[tmp];
+		res = &pnp_res->res;
 		if ((res->flags & (IORESOURCE_IO | IORESOURCE_UNSET)) ==
 				IORESOURCE_IO) {
 			dev_dbg(&dev->dev, "  set io  %d to 0x%llx\n",
@@ -1006,7 +1013,8 @@
 		}
 	}
 	for (tmp = 0; tmp < ISAPNP_MAX_IRQ; tmp++) {
-		res = &dev->res->irq_resource[tmp];
+		pnp_res = &dev->res->irq[tmp];
+		res = &pnp_res->res;
 		if ((res->flags & (IORESOURCE_IRQ | IORESOURCE_UNSET)) ==
 				IORESOURCE_IRQ) {
 			int irq = res->start;
@@ -1017,7 +1025,8 @@
 		}
 	}
 	for (tmp = 0; tmp < ISAPNP_MAX_DMA; tmp++) {
-		res = &dev->res->dma_resource[tmp];
+		pnp_res = &dev->res->dma[tmp];
+		res = &pnp_res->res;
 		if ((res->flags & (IORESOURCE_DMA | IORESOURCE_UNSET)) ==
 				IORESOURCE_DMA) {
 			dev_dbg(&dev->dev, "  set dma %d to %lld\n",
@@ -1026,7 +1035,8 @@
 		}
 	}
 	for (tmp = 0; tmp < ISAPNP_MAX_MEM; tmp++) {
-		res = &dev->res->mem_resource[tmp];
+		pnp_res = &dev->res->mem[tmp];
+		res = &pnp_res->res;
 		if ((res->flags & (IORESOURCE_MEM | IORESOURCE_UNSET)) ==
 				IORESOURCE_MEM) {
 			dev_dbg(&dev->dev, "  set mem %d to 0x%llx\n",
Index: work10/drivers/pnp/pnpacpi/rsparser.c
===================================================================
--- work10.orig/drivers/pnp/pnpacpi/rsparser.c	2008-04-25 11:15:09.000000000 -0600
+++ work10/drivers/pnp/pnpacpi/rsparser.c	2008-04-25 11:15:09.000000000 -0600
@@ -92,7 +92,7 @@
 		return;
 
 	for (i = 0; i < PNP_MAX_IRQ; i++) {
-		res = &dev->res->irq_resource[i];
+		res = &dev->res->irq[i].res;
 		if (res->flags & IORESOURCE_UNSET)
 			break;
 	}
@@ -185,7 +185,7 @@
 	static unsigned char warned;
 
 	for (i = 0; i < PNP_MAX_DMA; i++) {
-		res = &dev->res->dma_resource[i];
+		res = &dev->res->dma[i].res;
 		if (res->flags & IORESOURCE_UNSET)
 			break;
 	}
@@ -213,7 +213,7 @@
 	static unsigned char warned;
 
 	for (i = 0; i < PNP_MAX_PORT; i++) {
-		res = &dev->res->port_resource[i];
+		res = &dev->res->port[i].res;
 		if (res->flags & IORESOURCE_UNSET)
 			break;
 	}
@@ -243,7 +243,7 @@
 	static unsigned char warned;
 
 	for (i = 0; i < PNP_MAX_MEM; i++) {
-		res = &dev->res->mem_resource[i];
+		res = &dev->res->mem[i].res;
 		if (res->flags & IORESOURCE_UNSET)
 			break;
 	}
Index: work10/drivers/pnp/pnpbios/rsparser.c
===================================================================
--- work10.orig/drivers/pnp/pnpbios/rsparser.c	2008-04-25 11:15:09.000000000 -0600
+++ work10/drivers/pnp/pnpbios/rsparser.c	2008-04-25 11:15:09.000000000 -0600
@@ -60,7 +60,7 @@
 	int i;
 
 	for (i = 0; i < PNP_MAX_IRQ; i++) {
-		res = &dev->res->irq_resource[i];
+		res = &dev->res->irq[i].res;
 		if (res->flags & IORESOURCE_UNSET)
 			break;
 	}
@@ -82,7 +82,7 @@
 	int i;
 
 	for (i = 0; i < PNP_MAX_DMA; i++) {
-		res = &dev->res->dma_resource[i];
+		res = &dev->res->dma[i].res;
 		if (res->flags & IORESOURCE_UNSET)
 			break;
 	}
@@ -104,7 +104,7 @@
 	int i;
 
 	for (i = 0; i < PNP_MAX_PORT; i++) {
-		res = &dev->res->port_resource[i];
+		res = &dev->res->port[i].res;
 		if (res->flags & IORESOURCE_UNSET)
 			break;
 	}
@@ -127,7 +127,7 @@
 	int i;
 
 	for (i = 0; i < PNP_MAX_MEM; i++) {
-		res = &dev->res->mem_resource[i];
+		res = &dev->res->mem[i].res;
 		if (res->flags & IORESOURCE_UNSET)
 			break;
 	}
Index: work10/drivers/pnp/resource.c
===================================================================
--- work10.orig/drivers/pnp/resource.c	2008-04-25 11:15:08.000000000 -0600
+++ work10/drivers/pnp/resource.c	2008-04-25 11:15:09.000000000 -0600
@@ -508,19 +508,19 @@
 	case IORESOURCE_IO:
 		if (num >= PNP_MAX_PORT)
 			return NULL;
-		return &res->port_resource[num];
+		return &res->port[num].res;
 	case IORESOURCE_MEM:
 		if (num >= PNP_MAX_MEM)
 			return NULL;
-		return &res->mem_resource[num];
+		return &res->mem[num].res;
 	case IORESOURCE_IRQ:
 		if (num >= PNP_MAX_IRQ)
 			return NULL;
-		return &res->irq_resource[num];
+		return &res->irq[num].res;
 	case IORESOURCE_DMA:
 		if (num >= PNP_MAX_DMA)
 			return NULL;
-		return &res->dma_resource[num];
+		return &res->dma[num].res;
 	}
 	return NULL;
 }
Index: work10/drivers/pnp/manager.c
===================================================================
--- work10.orig/drivers/pnp/manager.c	2008-04-25 11:15:08.000000000 -0600
+++ work10/drivers/pnp/manager.c	2008-04-25 11:15:09.000000000 -0600
@@ -19,6 +19,7 @@
 
 static int pnp_assign_port(struct pnp_dev *dev, struct pnp_port *rule, int idx)
 {
+	struct pnp_resource *pnp_res;
 	struct resource *res;
 
 	if (idx >= PNP_MAX_PORT) {
@@ -27,7 +28,8 @@
 		return 1;
 	}
 
-	res = &dev->res->port_resource[idx];
+	pnp_res = &dev->res->port[idx];
+	res = &pnp_res->res;
 
 	/* check if this resource has been manually set, if so skip */
 	if (!(res->flags & IORESOURCE_AUTO)) {
@@ -66,6 +68,7 @@
 
 static int pnp_assign_mem(struct pnp_dev *dev, struct pnp_mem *rule, int idx)
 {
+	struct pnp_resource *pnp_res;
 	struct resource *res;
 
 	if (idx >= PNP_MAX_MEM) {
@@ -74,7 +77,8 @@
 		return 1;
 	}
 
-	res = &dev->res->mem_resource[idx];
+	pnp_res = &dev->res->mem[idx];
+	res = &pnp_res->res;
 
 	/* check if this resource has been manually set, if so skip */
 	if (!(res->flags & IORESOURCE_AUTO)) {
@@ -123,6 +127,7 @@
 
 static int pnp_assign_irq(struct pnp_dev *dev, struct pnp_irq *rule, int idx)
 {
+	struct pnp_resource *pnp_res;
 	struct resource *res;
 	int i;
 
@@ -137,7 +142,8 @@
 		return 1;
 	}
 
-	res = &dev->res->irq_resource[idx];
+	pnp_res = &dev->res->irq[idx];
+	res = &pnp_res->res;
 
 	/* check if this resource has been manually set, if so skip */
 	if (!(res->flags & IORESOURCE_AUTO)) {
@@ -180,6 +186,7 @@
 
 static void pnp_assign_dma(struct pnp_dev *dev, struct pnp_dma *rule, int idx)
 {
+	struct pnp_resource *pnp_res;
 	struct resource *res;
 	int i;
 
@@ -193,7 +200,8 @@
 		return;
 	}
 
-	res = &dev->res->dma_resource[idx];
+	pnp_res = &dev->res->dma[idx];
+	res = &pnp_res->res;
 
 	/* check if this resource has been manually set, if so skip */
 	if (!(res->flags & IORESOURCE_AUTO)) {
@@ -251,22 +259,22 @@
 	int idx;
 
 	for (idx = 0; idx < PNP_MAX_IRQ; idx++) {
-		res = &dev->res->irq_resource[idx];
+		res = &dev->res->irq[idx].res;
 		res->flags = IORESOURCE_IRQ;
 		pnp_init_resource(res);
 	}
 	for (idx = 0; idx < PNP_MAX_DMA; idx++) {
-		res = &dev->res->dma_resource[idx];
+		res = &dev->res->dma[idx].res;
 		res->flags = IORESOURCE_DMA;
 		pnp_init_resource(res);
 	}
 	for (idx = 0; idx < PNP_MAX_PORT; idx++) {
-		res = &dev->res->port_resource[idx];
+		res = &dev->res->port[idx].res;
 		res->flags = IORESOURCE_IO;
 		pnp_init_resource(res);
 	}
 	for (idx = 0; idx < PNP_MAX_MEM; idx++) {
-		res = &dev->res->mem_resource[idx];
+		res = &dev->res->mem[idx].res;
 		res->flags = IORESOURCE_MEM;
 		pnp_init_resource(res);
 	}
@@ -282,22 +290,22 @@
 	int idx;
 
 	for (idx = 0; idx < PNP_MAX_IRQ; idx++) {
-		res = &dev->res->irq_resource[idx];
+		res = &dev->res->irq[idx].res;
 		if (res->flags & IORESOURCE_AUTO)
 			pnp_init_resource(res);
 	}
 	for (idx = 0; idx < PNP_MAX_DMA; idx++) {
-		res = &dev->res->dma_resource[idx];
+		res = &dev->res->dma[idx].res;
 		if (res->flags & IORESOURCE_AUTO)
 			pnp_init_resource(res);
 	}
 	for (idx = 0; idx < PNP_MAX_PORT; idx++) {
-		res = &dev->res->port_resource[idx];
+		res = &dev->res->port[idx].res;
 		if (res->flags & IORESOURCE_AUTO)
 			pnp_init_resource(res);
 	}
 	for (idx = 0; idx < PNP_MAX_MEM; idx++) {
-		res = &dev->res->mem_resource[idx];
+		res = &dev->res->mem[idx].res;
 		if (res->flags & IORESOURCE_AUTO)
 			pnp_init_resource(res);
 	}
Index: work10/drivers/pnp/interface.c
===================================================================
--- work10.orig/drivers/pnp/interface.c	2008-04-25 11:15:08.000000000 -0600
+++ work10/drivers/pnp/interface.c	2008-04-25 11:15:09.000000000 -0600
@@ -322,6 +322,7 @@
 			  const char *ubuf, size_t count)
 {
 	struct pnp_dev *dev = to_pnp_dev(dmdev);
+	struct pnp_resource *pnp_res;
 	struct resource *res;
 	char *buf = (void *)ubuf;
 	int retval = 0;
@@ -382,7 +383,8 @@
 				buf += 2;
 				while (isspace(*buf))
 					++buf;
-				res = &dev->res->port_resource[nport];
+				pnp_res = &dev->res->port[nport];
+				res = &pnp_res->res;
 				res->start = simple_strtoul(buf, &buf, 0);
 				while (isspace(*buf))
 					++buf;
@@ -403,7 +405,8 @@
 				buf += 3;
 				while (isspace(*buf))
 					++buf;
-				res = &dev->res->mem_resource[nmem];
+				pnp_res = &dev->res->mem[nmem];
+				res = &pnp_res->res;
 				res->start = simple_strtoul(buf, &buf, 0);
 				while (isspace(*buf))
 					++buf;
@@ -424,7 +427,8 @@
 				buf += 3;
 				while (isspace(*buf))
 					++buf;
-				res = &dev->res->irq_resource[nirq];
+				pnp_res = &dev->res->irq[nirq];
+				res = &pnp_res->res;
 				res->start = res->end =
 				    simple_strtoul(buf, &buf, 0);
 				res->flags = IORESOURCE_IRQ;
@@ -437,7 +441,8 @@
 				buf += 3;
 				while (isspace(*buf))
 					++buf;
-				res = &dev->res->dma_resource[ndma];
+				pnp_res = &dev->res->dma[ndma];
+				res = &pnp_res->res;
 				res->start = res->end =
 				    simple_strtoul(buf, &buf, 0);
 				res->flags = IORESOURCE_DMA;
Index: work10/drivers/pnp/support.c
===================================================================
--- work10.orig/drivers/pnp/support.c	2008-04-25 11:15:08.000000000 -0600
+++ work10/drivers/pnp/support.c	2008-04-25 11:15:09.000000000 -0600
@@ -61,26 +61,26 @@
 	dev_dbg(&dev->dev, "current resources: %s\n", desc);
 
 	for (i = 0; i < PNP_MAX_IRQ; i++) {
-		res = &dev->res->irq_resource[i];
+		res = &dev->res->irq[i].res;
 		if (!(res->flags & IORESOURCE_UNSET))
 			dev_dbg(&dev->dev, "  irq %lld flags 0x%lx\n",
 				(unsigned long long) res->start, res->flags);
 	}
 	for (i = 0; i < PNP_MAX_DMA; i++) {
-		res = &dev->res->dma_resource[i];
+		res = &dev->res->dma[i].res;
 		if (!(res->flags & IORESOURCE_UNSET))
 			dev_dbg(&dev->dev, "  dma %lld flags 0x%lx\n",
 				(unsigned long long) res->start, res->flags);
 	}
 	for (i = 0; i < PNP_MAX_PORT; i++) {
-		res = &dev->res->port_resource[i];
+		res = &dev->res->port[i].res;
 		if (!(res->flags & IORESOURCE_UNSET))
 			dev_dbg(&dev->dev, "  io  0x%llx-0x%llx flags 0x%lx\n",
 				(unsigned long long) res->start,
 				(unsigned long long) res->end, res->flags);
 	}
 	for (i = 0; i < PNP_MAX_MEM; i++) {
-		res = &dev->res->mem_resource[i];
+		res = &dev->res->mem[i].res;
 		if (!(res->flags & IORESOURCE_UNSET))
 			dev_dbg(&dev->dev, "  mem 0x%llx-0x%llx flags 0x%lx\n",
 				(unsigned long long) res->start,

-- 

^ permalink raw reply	[flat|nested] 80+ messages in thread

* [patch 43/54] PNP: add pnp_resource index for ISAPNP
  2008-04-25 18:38 [patch 00/54] PNP cleanup, v4 Bjorn Helgaas
                   ` (41 preceding siblings ...)
  2008-04-25 18:38 ` [patch 42/54] PNP: add struct pnp_resource Bjorn Helgaas
@ 2008-04-25 18:38 ` Bjorn Helgaas
  2008-04-25 18:38 ` [patch 44/54] PNP: add pnp_new_resource() to find a new unset pnp_resource Bjorn Helgaas
                   ` (11 subsequent siblings)
  54 siblings, 0 replies; 80+ messages in thread
From: Bjorn Helgaas @ 2008-04-25 18:38 UTC (permalink / raw)
  To: Len Brown
  Cc: linux-acpi, linux-kernel, Adam Belay, Adam M Belay, Li Shaohua,
	Matthieu Castet, Thomas Renninger, Rene Herman, Jaroslav Kysela,
	Andrew Morton

[-- Attachment #1: pnp-add-pnp_resource-index --]
[-- Type: text/plain, Size: 6582 bytes --]

Save the ISAPNP config register index in the struct pnp_resource.

We need this because it is important to write ISAPNP configuration
back to the same registers we read it from.  For example, if we
read valid regions from memory descriptors 0, 1, and 3, we'd
better write them back to the same registers, without compressing
them to descriptors 0, 1, and 2.

This was previously guaranteed by using the index into the
pnp_resource_table array as the ISAPNP config register index.
However, I am removing those fixed-size arrays, so we need to
save the ISAPNP register index elsewhere.

Signed-off-by: Bjorn Helgaas <bjorn.helgaas@hp.com>

---
 drivers/pnp/base.h        |    1 +
 drivers/pnp/interface.c   |    4 ++++
 drivers/pnp/isapnp/core.c |   26 +++++++++++++++++---------
 drivers/pnp/manager.c     |    4 ++++
 4 files changed, 26 insertions(+), 9 deletions(-)

Index: work10/drivers/pnp/base.h
===================================================================
--- work10.orig/drivers/pnp/base.h	2008-04-25 11:15:09.000000000 -0600
+++ work10/drivers/pnp/base.h	2008-04-25 11:15:10.000000000 -0600
@@ -28,6 +28,7 @@
 
 struct pnp_resource {
 	struct resource res;
+	unsigned int index;		/* ISAPNP config register index */
 };
 
 struct pnp_resource_table {
Index: work10/drivers/pnp/isapnp/core.c
===================================================================
--- work10.orig/drivers/pnp/isapnp/core.c	2008-04-25 11:15:09.000000000 -0600
+++ work10/drivers/pnp/isapnp/core.c	2008-04-25 11:15:10.000000000 -0600
@@ -942,6 +942,7 @@
 			if (!ret)
 				continue;
 			pnp_res = &dev->res->port[tmp];
+			pnp_res->index = tmp;
 			res = &pnp_res->res;
 			res->start = ret;
 			res->flags = IORESOURCE_IO;
@@ -952,6 +953,7 @@
 			if (!ret)
 				continue;
 			pnp_res = &dev->res->mem[tmp];
+			pnp_res->index = tmp;
 			res = &pnp_res->res;
 			res->start = ret;
 			res->flags = IORESOURCE_MEM;
@@ -963,6 +965,7 @@
 			if (!ret)
 				continue;
 			pnp_res = &dev->res->irq[tmp];
+			pnp_res->index = tmp;
 			res = &pnp_res->res;
 			res->start = res->end = ret;
 			res->flags = IORESOURCE_IRQ;
@@ -972,6 +975,7 @@
 			if (ret == 4)
 				continue;
 			pnp_res = &dev->res->dma[tmp];
+			pnp_res->index = tmp;
 			res = &pnp_res->res;
 			res->start = res->end = ret;
 			res->flags = IORESOURCE_DMA;
@@ -996,52 +1000,56 @@
 {
 	struct pnp_resource *pnp_res;
 	struct resource *res;
-	int tmp;
+	int tmp, index;
 
 	dev_dbg(&dev->dev, "set resources\n");
 	isapnp_cfg_begin(dev->card->number, dev->number);
 	dev->active = 1;
 	for (tmp = 0; tmp < ISAPNP_MAX_PORT; tmp++) {
 		pnp_res = &dev->res->port[tmp];
+		index = pnp_res->index;
 		res = &pnp_res->res;
 		if ((res->flags & (IORESOURCE_IO | IORESOURCE_UNSET)) ==
 				IORESOURCE_IO) {
 			dev_dbg(&dev->dev, "  set io  %d to 0x%llx\n",
-				tmp, (unsigned long long) res->start);
-			isapnp_write_word(ISAPNP_CFG_PORT + (tmp << 1),
+				index, (unsigned long long) res->start);
+			isapnp_write_word(ISAPNP_CFG_PORT + (index << 1),
 					  res->start);
 		}
 	}
 	for (tmp = 0; tmp < ISAPNP_MAX_IRQ; tmp++) {
 		pnp_res = &dev->res->irq[tmp];
+		index = pnp_res->index;
 		res = &pnp_res->res;
 		if ((res->flags & (IORESOURCE_IRQ | IORESOURCE_UNSET)) ==
 				IORESOURCE_IRQ) {
 			int irq = res->start;
 			if (irq == 2)
 				irq = 9;
-			dev_dbg(&dev->dev, "  set irq %d to %d\n", tmp, irq);
-			isapnp_write_byte(ISAPNP_CFG_IRQ + (tmp << 1), irq);
+			dev_dbg(&dev->dev, "  set irq %d to %d\n", index, irq);
+			isapnp_write_byte(ISAPNP_CFG_IRQ + (index << 1), irq);
 		}
 	}
 	for (tmp = 0; tmp < ISAPNP_MAX_DMA; tmp++) {
 		pnp_res = &dev->res->dma[tmp];
+		index = pnp_res->index;
 		res = &pnp_res->res;
 		if ((res->flags & (IORESOURCE_DMA | IORESOURCE_UNSET)) ==
 				IORESOURCE_DMA) {
 			dev_dbg(&dev->dev, "  set dma %d to %lld\n",
-				tmp, (unsigned long long) res->start);
-			isapnp_write_byte(ISAPNP_CFG_DMA + tmp, res->start);
+				index, (unsigned long long) res->start);
+			isapnp_write_byte(ISAPNP_CFG_DMA + index, res->start);
 		}
 	}
 	for (tmp = 0; tmp < ISAPNP_MAX_MEM; tmp++) {
 		pnp_res = &dev->res->mem[tmp];
+		index = pnp_res->index;
 		res = &pnp_res->res;
 		if ((res->flags & (IORESOURCE_MEM | IORESOURCE_UNSET)) ==
 				IORESOURCE_MEM) {
 			dev_dbg(&dev->dev, "  set mem %d to 0x%llx\n",
-				tmp, (unsigned long long) res->start);
-			isapnp_write_word(ISAPNP_CFG_MEM + (tmp << 3),
+				index, (unsigned long long) res->start);
+			isapnp_write_word(ISAPNP_CFG_MEM + (index << 3),
 					  (res->start >> 8) & 0xffff);
 		}
 	}
Index: work10/drivers/pnp/interface.c
===================================================================
--- work10.orig/drivers/pnp/interface.c	2008-04-25 11:15:09.000000000 -0600
+++ work10/drivers/pnp/interface.c	2008-04-25 11:15:10.000000000 -0600
@@ -384,6 +384,7 @@
 				while (isspace(*buf))
 					++buf;
 				pnp_res = &dev->res->port[nport];
+				pnp_res->index = nport;
 				res = &pnp_res->res;
 				res->start = simple_strtoul(buf, &buf, 0);
 				while (isspace(*buf))
@@ -406,6 +407,7 @@
 				while (isspace(*buf))
 					++buf;
 				pnp_res = &dev->res->mem[nmem];
+				pnp_res->index = nmem;
 				res = &pnp_res->res;
 				res->start = simple_strtoul(buf, &buf, 0);
 				while (isspace(*buf))
@@ -428,6 +430,7 @@
 				while (isspace(*buf))
 					++buf;
 				pnp_res = &dev->res->irq[nirq];
+				pnp_res->index = nirq;
 				res = &pnp_res->res;
 				res->start = res->end =
 				    simple_strtoul(buf, &buf, 0);
@@ -442,6 +445,7 @@
 				while (isspace(*buf))
 					++buf;
 				pnp_res = &dev->res->dma[ndma];
+				pnp_res->index = ndma;
 				res = &pnp_res->res;
 				res->start = res->end =
 				    simple_strtoul(buf, &buf, 0);
Index: work10/drivers/pnp/manager.c
===================================================================
--- work10.orig/drivers/pnp/manager.c	2008-04-25 11:15:09.000000000 -0600
+++ work10/drivers/pnp/manager.c	2008-04-25 11:15:10.000000000 -0600
@@ -40,6 +40,7 @@
 	}
 
 	/* set the initial values */
+	pnp_res->index = idx;
 	res->flags |= rule->flags | IORESOURCE_IO;
 	res->flags &= ~IORESOURCE_UNSET;
 
@@ -89,6 +90,7 @@
 	}
 
 	/* set the initial values */
+	pnp_res->index = idx;
 	res->flags |= rule->flags | IORESOURCE_MEM;
 	res->flags &= ~IORESOURCE_UNSET;
 
@@ -153,6 +155,7 @@
 	}
 
 	/* set the initial values */
+	pnp_res->index = idx;
 	res->flags |= rule->flags | IORESOURCE_IRQ;
 	res->flags &= ~IORESOURCE_UNSET;
 
@@ -211,6 +214,7 @@
 	}
 
 	/* set the initial values */
+	pnp_res->index = idx;
 	res->flags |= rule->flags | IORESOURCE_DMA;
 	res->flags &= ~IORESOURCE_UNSET;
 

-- 

^ permalink raw reply	[flat|nested] 80+ messages in thread

* [patch 44/54] PNP: add pnp_new_resource() to find a new unset pnp_resource
  2008-04-25 18:38 [patch 00/54] PNP cleanup, v4 Bjorn Helgaas
                   ` (42 preceding siblings ...)
  2008-04-25 18:38 ` [patch 43/54] PNP: add pnp_resource index for ISAPNP Bjorn Helgaas
@ 2008-04-25 18:38 ` Bjorn Helgaas
  2008-04-26 22:37   ` Rene Herman
  2008-04-25 18:38 ` [patch 45/54] PNP: make generic pnp_add_irq_resource() Bjorn Helgaas
                   ` (10 subsequent siblings)
  54 siblings, 1 reply; 80+ messages in thread
From: Bjorn Helgaas @ 2008-04-25 18:38 UTC (permalink / raw)
  To: Len Brown
  Cc: linux-acpi, linux-kernel, Adam Belay, Adam M Belay, Li Shaohua,
	Matthieu Castet, Thomas Renninger, Rene Herman, Jaroslav Kysela,
	Andrew Morton

[-- Attachment #1: pnp-add-pnp_new_resource --]
[-- Type: text/plain, Size: 1628 bytes --]

This encapsulates the code to locate a new pnp_resource of the
desired type.  Currently this uses the pnp_resource_table, but
it will soon change to find a resource in a linked list.

Signed-off-by: Bjorn Helgaas <bjorn.helgaas@hp.com>

Index: work10/drivers/pnp/resource.c
===================================================================
--- work10.orig/drivers/pnp/resource.c	2008-04-25 11:15:09.000000000 -0600
+++ work10/drivers/pnp/resource.c	2008-04-25 11:15:11.000000000 -0600
@@ -526,6 +526,49 @@
 }
 EXPORT_SYMBOL(pnp_get_resource);
 
+static struct pnp_resource *pnp_new_resource(struct pnp_dev *dev, int type)
+{
+	struct pnp_resource *pnp_res;
+	struct resource *res;
+	int i;
+
+	switch (type) {
+	case IORESOURCE_IO:
+		for (i = 0; i < PNP_MAX_PORT; i++) {
+			pnp_res = &dev->res->port[i];
+			res = &pnp_res->res;
+			if (res->flags & IORESOURCE_UNSET)
+				return pnp_res;
+		}
+		break;
+	case IORESOURCE_MEM:
+		for (i = 0; i < PNP_MAX_MEM; i++) {
+			pnp_res = &dev->res->mem[i];
+			res = &pnp_res->res;
+			if (res->flags & IORESOURCE_UNSET)
+				return pnp_res;
+		}
+		break;
+	case IORESOURCE_IRQ:
+		for (i = 0; i < PNP_MAX_IRQ; i++) {
+			pnp_res = &dev->res->irq[i];
+			res = &pnp_res->res;
+			if (res->flags & IORESOURCE_UNSET)
+				return pnp_res;
+		}
+		break;
+	case IORESOURCE_DMA:
+		for (i = 0; i < PNP_MAX_DMA; i++) {
+			pnp_res = &dev->res->dma[i];
+			res = &pnp_res->res;
+			if (res->flags & IORESOURCE_UNSET)
+				return pnp_res;
+		}
+		break;
+	}
+	return NULL;
+}
+
 /* format is: pnp_reserve_irq=irq1[,irq2] .... */
 static int __init pnp_setup_reserve_irq(char *str)
 {

-- 

^ permalink raw reply	[flat|nested] 80+ messages in thread

* [patch 45/54] PNP: make generic pnp_add_irq_resource()
  2008-04-25 18:38 [patch 00/54] PNP cleanup, v4 Bjorn Helgaas
                   ` (43 preceding siblings ...)
  2008-04-25 18:38 ` [patch 44/54] PNP: add pnp_new_resource() to find a new unset pnp_resource Bjorn Helgaas
@ 2008-04-25 18:38 ` Bjorn Helgaas
  2008-04-25 18:38 ` [patch 46/54] PNP: make generic pnp_add_dma_resource() Bjorn Helgaas
                   ` (9 subsequent siblings)
  54 siblings, 0 replies; 80+ messages in thread
From: Bjorn Helgaas @ 2008-04-25 18:38 UTC (permalink / raw)
  To: Len Brown
  Cc: linux-acpi, linux-kernel, Adam Belay, Adam M Belay, Li Shaohua,
	Matthieu Castet, Thomas Renninger, Rene Herman, Jaroslav Kysela,
	Andrew Morton

[-- Attachment #1: pnp-common-add-irq-resource --]
[-- Type: text/plain, Size: 6706 bytes --]

Add a pnp_add_irq_resource() that can be used by all the PNP
backends.  This consolidates a little more pnp_resource_table
knowledge into one place.

Signed-off-by: Bjorn Helgaas <bjorn.helgaas@hp.com>

---
 drivers/pnp/base.h             |    3 +++
 drivers/pnp/interface.c        |   14 +++++---------
 drivers/pnp/isapnp/core.c      |    8 +++-----
 drivers/pnp/pnpacpi/rsparser.c |   31 +++++++------------------------
 drivers/pnp/pnpbios/rsparser.c |   31 +++++++------------------------
 drivers/pnp/resource.c         |   26 ++++++++++++++++++++++++++
 6 files changed, 51 insertions(+), 62 deletions(-)

Index: work10/drivers/pnp/base.h
===================================================================
--- work10.orig/drivers/pnp/base.h	2008-04-25 11:15:10.000000000 -0600
+++ work10/drivers/pnp/base.h	2008-04-25 11:15:11.000000000 -0600
@@ -37,3 +37,6 @@
 	struct pnp_resource dma[PNP_MAX_DMA];
 	struct pnp_resource irq[PNP_MAX_IRQ];
 };
+
+struct pnp_resource *pnp_add_irq_resource(struct pnp_dev *dev, int irq,
+					  int flags);
Index: work10/drivers/pnp/resource.c
===================================================================
--- work10.orig/drivers/pnp/resource.c	2008-04-25 11:15:11.000000000 -0600
+++ work10/drivers/pnp/resource.c	2008-04-25 11:15:11.000000000 -0600
@@ -569,6 +569,32 @@
 	return NULL;
 }
 
+struct pnp_resource *pnp_add_irq_resource(struct pnp_dev *dev, int irq,
+					  int flags)
+{
+	struct pnp_resource *pnp_res;
+	struct resource *res;
+	static unsigned char warned;
+
+	pnp_res = pnp_new_resource(dev, IORESOURCE_IRQ);
+	if (!pnp_res) {
+		if (!warned) {
+			dev_err(&dev->dev, "can't add resource for IRQ %d\n",
+				irq);
+			warned = 1;
+		}
+		return NULL;
+	}
+
+	res = &pnp_res->res;
+	res->flags = IORESOURCE_IRQ | flags;
+	res->start = irq;
+	res->end = irq;
+
+	dev_dbg(&dev->dev, "  add irq %d flags 0x%x\n", irq, flags);
+	return pnp_res;
+}
+
 /* format is: pnp_reserve_irq=irq1[,irq2] .... */
 static int __init pnp_setup_reserve_irq(char *str)
 {
Index: work10/drivers/pnp/interface.c
===================================================================
--- work10.orig/drivers/pnp/interface.c	2008-04-25 11:15:10.000000000 -0600
+++ work10/drivers/pnp/interface.c	2008-04-25 11:15:11.000000000 -0600
@@ -326,6 +326,7 @@
 	struct resource *res;
 	char *buf = (void *)ubuf;
 	int retval = 0;
+	resource_size_t start;
 
 	if (dev->status & PNP_ATTACHED) {
 		retval = -EBUSY;
@@ -429,15 +430,10 @@
 				buf += 3;
 				while (isspace(*buf))
 					++buf;
-				pnp_res = &dev->res->irq[nirq];
-				pnp_res->index = nirq;
-				res = &pnp_res->res;
-				res->start = res->end =
-				    simple_strtoul(buf, &buf, 0);
-				res->flags = IORESOURCE_IRQ;
-				nirq++;
-				if (nirq >= PNP_MAX_IRQ)
-					break;
+				start = simple_strtoul(buf, &buf, 0);
+				pnp_res = pnp_add_irq_resource(dev, start, 0);
+				if (pnp_res)
+					pnp_res->index = nirq++;
 				continue;
 			}
 			if (!strnicmp(buf, "dma", 3)) {
Index: work10/drivers/pnp/isapnp/core.c
===================================================================
--- work10.orig/drivers/pnp/isapnp/core.c	2008-04-25 11:15:10.000000000 -0600
+++ work10/drivers/pnp/isapnp/core.c	2008-04-25 11:15:11.000000000 -0600
@@ -964,11 +964,9 @@
 			     8);
 			if (!ret)
 				continue;
-			pnp_res = &dev->res->irq[tmp];
-			pnp_res->index = tmp;
-			res = &pnp_res->res;
-			res->start = res->end = ret;
-			res->flags = IORESOURCE_IRQ;
+			pnp_res = pnp_add_irq_resource(dev, ret, 0);
+			if (pnp_res)
+				pnp_res->index = tmp;
 		}
 		for (tmp = 0; tmp < ISAPNP_MAX_DMA; tmp++) {
 			ret = isapnp_read_byte(ISAPNP_CFG_DMA + tmp);
Index: work10/drivers/pnp/pnpacpi/rsparser.c
===================================================================
--- work10.orig/drivers/pnp/pnpacpi/rsparser.c	2008-04-25 11:15:09.000000000 -0600
+++ work10/drivers/pnp/pnpacpi/rsparser.c	2008-04-25 11:15:11.000000000 -0600
@@ -82,28 +82,12 @@
 						u32 gsi, int triggering,
 						int polarity, int shareable)
 {
-	struct resource *res;
-	int i;
-	int irq;
+	int irq, flags;
 	int p, t;
-	static unsigned char warned;
 
 	if (!valid_IRQ(gsi))
 		return;
 
-	for (i = 0; i < PNP_MAX_IRQ; i++) {
-		res = &dev->res->irq[i].res;
-		if (res->flags & IORESOURCE_UNSET)
-			break;
-	}
-	if (i >= PNP_MAX_IRQ) {
-		if (!warned) {
-			printk(KERN_WARNING "pnpacpi: exceeded the max number"
-				" of IRQ resources: %d\n", PNP_MAX_IRQ);
-			warned = 1;
-		}
-		return;
-	}
 	/*
 	 * in IO-APIC mode, use overrided attribute. Two reasons:
 	 * 1. BIOS bug in DSDT
@@ -121,17 +105,14 @@
 		}
 	}
 
-	res->flags = IORESOURCE_IRQ;	// Also clears _UNSET flag
-	res->flags |= irq_flags(triggering, polarity, shareable);
+	flags = irq_flags(triggering, polarity, shareable);
 	irq = acpi_register_gsi(gsi, triggering, polarity);
-	if (irq < 0) {
-		res->flags |= IORESOURCE_DISABLED;
-		return;
-	}
+	if (irq >= 0)
+		pcibios_penalize_isa_irq(irq, 1);
+	else
+		flags |= IORESOURCE_DISABLED;
 
-	res->start = irq;
-	res->end = irq;
-	pcibios_penalize_isa_irq(irq, 1);
+	pnp_add_irq_resource(dev, irq, flags);
 }
 
 static int dma_flags(int type, int bus_master, int transfer)
Index: work10/drivers/pnp/pnpbios/rsparser.c
===================================================================
--- work10.orig/drivers/pnp/pnpbios/rsparser.c	2008-04-25 11:15:09.000000000 -0600
+++ work10/drivers/pnp/pnpbios/rsparser.c	2008-04-25 11:15:11.000000000 -0600
@@ -54,28 +54,6 @@
  * Allocated Resources
  */
 
-static void pnpbios_parse_allocated_irqresource(struct pnp_dev *dev, int irq)
-{
-	struct resource *res;
-	int i;
-
-	for (i = 0; i < PNP_MAX_IRQ; i++) {
-		res = &dev->res->irq[i].res;
-		if (res->flags & IORESOURCE_UNSET)
-			break;
-	}
-
-	if (i < PNP_MAX_IRQ) {
-		res->flags = IORESOURCE_IRQ;	// Also clears _UNSET flag
-		if (irq == -1) {
-			res->flags |= IORESOURCE_DISABLED;
-			return;
-		}
-		res->start = res->end = (unsigned long)irq;
-		pcibios_penalize_isa_irq(irq, 1);
-	}
-}
-
 static void pnpbios_parse_allocated_dmaresource(struct pnp_dev *dev, int dma)
 {
 	struct resource *res;
@@ -148,7 +126,7 @@
 							    unsigned char *end)
 {
 	unsigned int len, tag;
-	int io, size, mask, i;
+	int io, size, mask, i, flags;
 
 	if (!p)
 		return NULL;
@@ -205,12 +183,17 @@
 		case SMALL_TAG_IRQ:
 			if (len < 2 || len > 3)
 				goto len_err;
+			flags = 0;
 			io = -1;
 			mask = p[1] + p[2] * 256;
 			for (i = 0; i < 16; i++, mask = mask >> 1)
 				if (mask & 0x01)
 					io = i;
-			pnpbios_parse_allocated_irqresource(dev, io);
+			if (io != -1)
+				pcibios_penalize_isa_irq(io, 1);
+			else
+				flags = IORESOURCE_DISABLED;
+			pnp_add_irq_resource(dev, io, flags);
 			break;
 
 		case SMALL_TAG_DMA:

-- 

^ permalink raw reply	[flat|nested] 80+ messages in thread

* [patch 46/54] PNP: make generic pnp_add_dma_resource()
  2008-04-25 18:38 [patch 00/54] PNP cleanup, v4 Bjorn Helgaas
                   ` (44 preceding siblings ...)
  2008-04-25 18:38 ` [patch 45/54] PNP: make generic pnp_add_irq_resource() Bjorn Helgaas
@ 2008-04-25 18:38 ` Bjorn Helgaas
  2008-04-25 18:38 ` [patch 47/54] PNP: make generic pnp_add_io_resource() Bjorn Helgaas
                   ` (8 subsequent siblings)
  54 siblings, 0 replies; 80+ messages in thread
From: Bjorn Helgaas @ 2008-04-25 18:38 UTC (permalink / raw)
  To: Len Brown
  Cc: linux-acpi, linux-kernel, Adam Belay, Adam M Belay, Li Shaohua,
	Matthieu Castet, Thomas Renninger, Rene Herman, Jaroslav Kysela,
	Andrew Morton

[-- Attachment #1: pnp-common-add-dma-resource --]
[-- Type: text/plain, Size: 6568 bytes --]

Add a pnp_add_dma_resource() that can be used by all the PNP
backends.  This consolidates a little more pnp_resource_table
knowledge into one place.

Signed-off-by: Bjorn Helgaas <bjorn.helgaas@hp.com>

---
 drivers/pnp/base.h             |    2 +
 drivers/pnp/interface.c        |   13 +++---------
 drivers/pnp/isapnp/core.c      |    8 ++-----
 drivers/pnp/pnpacpi/rsparser.c |   42 +++++++----------------------------------
 drivers/pnp/pnpbios/rsparser.c |   26 +++----------------------
 drivers/pnp/resource.c         |   26 +++++++++++++++++++++++++
 6 files changed, 47 insertions(+), 70 deletions(-)

Index: work10/drivers/pnp/base.h
===================================================================
--- work10.orig/drivers/pnp/base.h	2008-04-25 11:15:11.000000000 -0600
+++ work10/drivers/pnp/base.h	2008-04-25 11:15:12.000000000 -0600
@@ -40,3 +40,5 @@
 
 struct pnp_resource *pnp_add_irq_resource(struct pnp_dev *dev, int irq,
 					  int flags);
+struct pnp_resource *pnp_add_dma_resource(struct pnp_dev *dev, int dma,
+					  int flags);
Index: work10/drivers/pnp/resource.c
===================================================================
--- work10.orig/drivers/pnp/resource.c	2008-04-25 11:15:11.000000000 -0600
+++ work10/drivers/pnp/resource.c	2008-04-25 11:15:12.000000000 -0600
@@ -595,6 +595,32 @@
 	return pnp_res;
 }
 
+struct pnp_resource *pnp_add_dma_resource(struct pnp_dev *dev, int dma,
+					  int flags)
+{
+	struct pnp_resource *pnp_res;
+	struct resource *res;
+	static unsigned char warned;
+
+	pnp_res = pnp_new_resource(dev, IORESOURCE_DMA);
+	if (!pnp_res) {
+		if (!warned) {
+			dev_err(&dev->dev, "can't add resource for DMA %d\n",
+				dma);
+			warned = 1;
+		}
+		return NULL;
+	}
+
+	res = &pnp_res->res;
+	res->flags = IORESOURCE_DMA | flags;
+	res->start = dma;
+	res->end = dma;
+
+	dev_dbg(&dev->dev, "  add dma %d flags 0x%x\n", dma, flags);
+	return pnp_res;
+}
+
 /* format is: pnp_reserve_irq=irq1[,irq2] .... */
 static int __init pnp_setup_reserve_irq(char *str)
 {
Index: work10/drivers/pnp/interface.c
===================================================================
--- work10.orig/drivers/pnp/interface.c	2008-04-25 11:15:11.000000000 -0600
+++ work10/drivers/pnp/interface.c	2008-04-25 11:15:12.000000000 -0600
@@ -440,15 +440,10 @@
 				buf += 3;
 				while (isspace(*buf))
 					++buf;
-				pnp_res = &dev->res->dma[ndma];
-				pnp_res->index = ndma;
-				res = &pnp_res->res;
-				res->start = res->end =
-				    simple_strtoul(buf, &buf, 0);
-				res->flags = IORESOURCE_DMA;
-				ndma++;
-				if (ndma >= PNP_MAX_DMA)
-					break;
+				start = simple_strtoul(buf, &buf, 0);
+				pnp_res = pnp_add_dma_resource(dev, start, 0);
+				if (pnp_res)
+					pnp_res->index = ndma++;
 				continue;
 			}
 			break;
Index: work10/drivers/pnp/isapnp/core.c
===================================================================
--- work10.orig/drivers/pnp/isapnp/core.c	2008-04-25 11:15:11.000000000 -0600
+++ work10/drivers/pnp/isapnp/core.c	2008-04-25 11:15:12.000000000 -0600
@@ -972,11 +972,9 @@
 			ret = isapnp_read_byte(ISAPNP_CFG_DMA + tmp);
 			if (ret == 4)
 				continue;
-			pnp_res = &dev->res->dma[tmp];
-			pnp_res->index = tmp;
-			res = &pnp_res->res;
-			res->start = res->end = ret;
-			res->flags = IORESOURCE_DMA;
+			pnp_res = pnp_add_dma_resource(dev, ret, 0);
+			if  (pnp_res)
+				pnp_res->index = tmp;
 		}
 	}
 	return 0;
Index: work10/drivers/pnp/pnpacpi/rsparser.c
===================================================================
--- work10.orig/drivers/pnp/pnpacpi/rsparser.c	2008-04-25 11:15:11.000000000 -0600
+++ work10/drivers/pnp/pnpacpi/rsparser.c	2008-04-25 11:15:12.000000000 -0600
@@ -158,34 +158,6 @@
 	return flags;
 }
 
-static void pnpacpi_parse_allocated_dmaresource(struct pnp_dev *dev,
-						u32 dma, int flags)
-{
-	struct resource *res;
-	int i;
-	static unsigned char warned;
-
-	for (i = 0; i < PNP_MAX_DMA; i++) {
-		res = &dev->res->dma[i].res;
-		if (res->flags & IORESOURCE_UNSET)
-			break;
-	}
-	if (i < PNP_MAX_DMA) {
-		res->flags = IORESOURCE_DMA;	// Also clears _UNSET flag
-		res->flags |= flags;
-		if (dma == -1) {
-			res->flags |= IORESOURCE_DISABLED;
-			return;
-		}
-		res->start = dma;
-		res->end = dma;
-	} else if (!warned) {
-		printk(KERN_WARNING "pnpacpi: exceeded the max number of DMA "
-				"resources: %d \n", PNP_MAX_DMA);
-		warned = 1;
-	}
-}
-
 static void pnpacpi_parse_allocated_ioresource(struct pnp_dev *dev,
 					       u64 io, u64 len, int io_decode)
 {
@@ -285,7 +257,7 @@
 	struct acpi_resource_memory32 *memory32;
 	struct acpi_resource_fixed_memory32 *fixed_memory32;
 	struct acpi_resource_extended_irq *extended_irq;
-	int i;
+	int i, flags;
 
 	switch (res->type) {
 	case ACPI_RESOURCE_TYPE_IRQ:
@@ -305,11 +277,13 @@
 
 	case ACPI_RESOURCE_TYPE_DMA:
 		dma = &res->data.dma;
-		if (dma->channel_count > 0)
-			pnpacpi_parse_allocated_dmaresource(dev,
-				dma->channels[0],
-				dma_flags(dma->type, dma->bus_master,
-					  dma->transfer));
+		if (dma->channel_count > 0) {
+			flags = dma_flags(dma->type, dma->bus_master,
+					  dma->transfer);
+			if (dma->channels[0] == (u8) -1)
+				flags |= IORESOURCE_DISABLED;
+			pnp_add_dma_resource(dev, dma->channels[0], flags);
+		}
 		break;
 
 	case ACPI_RESOURCE_TYPE_IO:
Index: work10/drivers/pnp/pnpbios/rsparser.c
===================================================================
--- work10.orig/drivers/pnp/pnpbios/rsparser.c	2008-04-25 11:15:11.000000000 -0600
+++ work10/drivers/pnp/pnpbios/rsparser.c	2008-04-25 11:15:12.000000000 -0600
@@ -54,27 +54,6 @@
  * Allocated Resources
  */
 
-static void pnpbios_parse_allocated_dmaresource(struct pnp_dev *dev, int dma)
-{
-	struct resource *res;
-	int i;
-
-	for (i = 0; i < PNP_MAX_DMA; i++) {
-		res = &dev->res->dma[i].res;
-		if (res->flags & IORESOURCE_UNSET)
-			break;
-	}
-
-	if (i < PNP_MAX_DMA) {
-		res->flags = IORESOURCE_DMA;	// Also clears _UNSET flag
-		if (dma == -1) {
-			res->flags |= IORESOURCE_DISABLED;
-			return;
-		}
-		res->start = res->end = (unsigned long)dma;
-	}
-}
-
 static void pnpbios_parse_allocated_ioresource(struct pnp_dev *dev,
 					       int io, int len)
 {
@@ -199,12 +178,15 @@
 		case SMALL_TAG_DMA:
 			if (len != 2)
 				goto len_err;
+			flags = 0;
 			io = -1;
 			mask = p[1];
 			for (i = 0; i < 8; i++, mask = mask >> 1)
 				if (mask & 0x01)
 					io = i;
-			pnpbios_parse_allocated_dmaresource(dev, io);
+			if (io == -1)
+				flags = IORESOURCE_DISABLED;
+			pnp_add_dma_resource(dev, io, flags);
 			break;
 
 		case SMALL_TAG_PORT:

-- 

^ permalink raw reply	[flat|nested] 80+ messages in thread

* [patch 47/54] PNP: make generic pnp_add_io_resource()
  2008-04-25 18:38 [patch 00/54] PNP cleanup, v4 Bjorn Helgaas
                   ` (45 preceding siblings ...)
  2008-04-25 18:38 ` [patch 46/54] PNP: make generic pnp_add_dma_resource() Bjorn Helgaas
@ 2008-04-25 18:38 ` Bjorn Helgaas
  2008-04-25 18:38 ` [patch 48/54] PNP: make generic pnp_add_mem_resource() Bjorn Helgaas
                   ` (7 subsequent siblings)
  54 siblings, 0 replies; 80+ messages in thread
From: Bjorn Helgaas @ 2008-04-25 18:38 UTC (permalink / raw)
  To: Len Brown
  Cc: linux-acpi, linux-kernel, Adam Belay, Adam M Belay, Li Shaohua,
	Matthieu Castet, Thomas Renninger, Rene Herman, Jaroslav Kysela,
	Andrew Morton

[-- Attachment #1: pnp-common-add-io-resource --]
[-- Type: text/plain, Size: 6808 bytes --]

Add a pnp_add_io_resource() that can be used by all the PNP
backends.  This consolidates a little more pnp_resource_table
knowledge into one place.

Signed-off-by: Bjorn Helgaas <bjorn.helgaas@hp.com>

---
 drivers/pnp/base.h             |    3 +++
 drivers/pnp/interface.c        |   19 ++++++++-----------
 drivers/pnp/isapnp/core.c      |    8 +++-----
 drivers/pnp/pnpacpi/rsparser.c |   35 ++++++++++-------------------------
 drivers/pnp/pnpbios/rsparser.c |   23 ++++++-----------------
 drivers/pnp/resource.c         |   29 +++++++++++++++++++++++++++++
 6 files changed, 59 insertions(+), 58 deletions(-)

Index: work10/drivers/pnp/base.h
===================================================================
--- work10.orig/drivers/pnp/base.h	2008-04-25 11:15:12.000000000 -0600
+++ work10/drivers/pnp/base.h	2008-04-25 11:15:12.000000000 -0600
@@ -42,3 +42,6 @@
 					  int flags);
 struct pnp_resource *pnp_add_dma_resource(struct pnp_dev *dev, int dma,
 					  int flags);
+struct pnp_resource *pnp_add_io_resource(struct pnp_dev *dev,
+					 resource_size_t start,
+					 resource_size_t end, int flags);
Index: work10/drivers/pnp/interface.c
===================================================================
--- work10.orig/drivers/pnp/interface.c	2008-04-25 11:15:12.000000000 -0600
+++ work10/drivers/pnp/interface.c	2008-04-25 11:15:12.000000000 -0600
@@ -326,7 +326,7 @@
 	struct resource *res;
 	char *buf = (void *)ubuf;
 	int retval = 0;
-	resource_size_t start;
+	resource_size_t start, end;
 
 	if (dev->status & PNP_ATTACHED) {
 		retval = -EBUSY;
@@ -384,23 +384,20 @@
 				buf += 2;
 				while (isspace(*buf))
 					++buf;
-				pnp_res = &dev->res->port[nport];
-				pnp_res->index = nport;
-				res = &pnp_res->res;
-				res->start = simple_strtoul(buf, &buf, 0);
+				start = simple_strtoul(buf, &buf, 0);
 				while (isspace(*buf))
 					++buf;
 				if (*buf == '-') {
 					buf += 1;
 					while (isspace(*buf))
 						++buf;
-					res->end = simple_strtoul(buf, &buf, 0);
+					end = simple_strtoul(buf, &buf, 0);
 				} else
-					res->end = res->start;
-				res->flags = IORESOURCE_IO;
-				nport++;
-				if (nport >= PNP_MAX_PORT)
-					break;
+					end = start;
+				pnp_res = pnp_add_io_resource(dev, start, end,
+							      0);
+				if (pnp_res)
+					pnp_res->index = nport++;
 				continue;
 			}
 			if (!strnicmp(buf, "mem", 3)) {
Index: work10/drivers/pnp/isapnp/core.c
===================================================================
--- work10.orig/drivers/pnp/isapnp/core.c	2008-04-25 11:15:12.000000000 -0600
+++ work10/drivers/pnp/isapnp/core.c	2008-04-25 11:15:12.000000000 -0600
@@ -941,11 +941,9 @@
 			ret = isapnp_read_word(ISAPNP_CFG_PORT + (tmp << 1));
 			if (!ret)
 				continue;
-			pnp_res = &dev->res->port[tmp];
-			pnp_res->index = tmp;
-			res = &pnp_res->res;
-			res->start = ret;
-			res->flags = IORESOURCE_IO;
+			pnp_res = pnp_add_io_resource(dev, ret, ret, 0);
+			if (pnp_res)
+				pnp_res->index = tmp;
 		}
 		for (tmp = 0; tmp < ISAPNP_MAX_MEM; tmp++) {
 			ret =
Index: work10/drivers/pnp/pnpacpi/rsparser.c
===================================================================
--- work10.orig/drivers/pnp/pnpacpi/rsparser.c	2008-04-25 11:15:12.000000000 -0600
+++ work10/drivers/pnp/pnpacpi/rsparser.c	2008-04-25 11:15:12.000000000 -0600
@@ -158,33 +158,18 @@
 	return flags;
 }
 
-static void pnpacpi_parse_allocated_ioresource(struct pnp_dev *dev,
-					       u64 io, u64 len, int io_decode)
+static void pnpacpi_parse_allocated_ioresource(struct pnp_dev *dev, u64 start,
+					       u64 len, int io_decode)
 {
-	struct resource *res;
-	int i;
-	static unsigned char warned;
+	int flags = 0;
+	u64 end = start + len - 1;
 
-	for (i = 0; i < PNP_MAX_PORT; i++) {
-		res = &dev->res->port[i].res;
-		if (res->flags & IORESOURCE_UNSET)
-			break;
-	}
-	if (i < PNP_MAX_PORT) {
-		res->flags = IORESOURCE_IO;	// Also clears _UNSET flag
-		if (io_decode == ACPI_DECODE_16)
-			res->flags |= PNP_PORT_FLAG_16BITADDR;
-		if (len <= 0 || (io + len - 1) >= 0x10003) {
-			res->flags |= IORESOURCE_DISABLED;
-			return;
-		}
-		res->start = io;
-		res->end = io + len - 1;
-	} else if (!warned) {
-		printk(KERN_WARNING "pnpacpi: exceeded the max number of IO "
-				"resources: %d \n", PNP_MAX_PORT);
-		warned = 1;
-	}
+	if (io_decode == ACPI_DECODE_16)
+		flags |= PNP_PORT_FLAG_16BITADDR;
+	if (len == 0 || end >= 0x10003)
+		flags |= IORESOURCE_DISABLED;
+
+	pnp_add_io_resource(dev, start, end, flags);
 }
 
 static void pnpacpi_parse_allocated_memresource(struct pnp_dev *dev,
Index: work10/drivers/pnp/pnpbios/rsparser.c
===================================================================
--- work10.orig/drivers/pnp/pnpbios/rsparser.c	2008-04-25 11:15:12.000000000 -0600
+++ work10/drivers/pnp/pnpbios/rsparser.c	2008-04-25 11:15:12.000000000 -0600
@@ -55,26 +55,15 @@
  */
 
 static void pnpbios_parse_allocated_ioresource(struct pnp_dev *dev,
-					       int io, int len)
+					       int start, int len)
 {
-	struct resource *res;
-	int i;
+	int flags = 0;
+	int end = start + len - 1;
 
-	for (i = 0; i < PNP_MAX_PORT; i++) {
-		res = &dev->res->port[i].res;
-		if (res->flags & IORESOURCE_UNSET)
-			break;
-	}
+	if (len <= 0 || end >= 0x10003)
+		flags |= IORESOURCE_DISABLED;
 
-	if (i < PNP_MAX_PORT) {
-		res->flags = IORESOURCE_IO;	// Also clears _UNSET flag
-		if (len <= 0 || (io + len - 1) >= 0x10003) {
-			res->flags |= IORESOURCE_DISABLED;
-			return;
-		}
-		res->start = (unsigned long)io;
-		res->end = (unsigned long)(io + len - 1);
-	}
+	pnp_add_io_resource(dev, start, end, flags);
 }
 
 static void pnpbios_parse_allocated_memresource(struct pnp_dev *dev,
Index: work10/drivers/pnp/resource.c
===================================================================
--- work10.orig/drivers/pnp/resource.c	2008-04-25 11:15:12.000000000 -0600
+++ work10/drivers/pnp/resource.c	2008-04-25 11:15:12.000000000 -0600
@@ -621,6 +621,35 @@
 	return pnp_res;
 }
 
+struct pnp_resource *pnp_add_io_resource(struct pnp_dev *dev,
+					 resource_size_t start,
+					 resource_size_t end, int flags)
+{
+	struct pnp_resource *pnp_res;
+	struct resource *res;
+	static unsigned char warned;
+
+	pnp_res = pnp_new_resource(dev, IORESOURCE_IO);
+	if (!pnp_res) {
+		if (!warned) {
+			dev_err(&dev->dev, "can't add resource for IO "
+				"0x%llx-0x%llx\n",(unsigned long long) start,
+				(unsigned long long) end);
+			warned = 1;
+		}
+		return NULL;
+	}
+
+	res = &pnp_res->res;
+	res->flags = IORESOURCE_IO | flags;
+	res->start = start;
+	res->end = end;
+
+	dev_dbg(&dev->dev, "  add io  0x%llx-0x%llx flags 0x%x\n",
+		(unsigned long long) start, (unsigned long long) end, flags);
+	return pnp_res;
+}
+
 /* format is: pnp_reserve_irq=irq1[,irq2] .... */
 static int __init pnp_setup_reserve_irq(char *str)
 {

-- 

^ permalink raw reply	[flat|nested] 80+ messages in thread

* [patch 48/54] PNP: make generic pnp_add_mem_resource()
  2008-04-25 18:38 [patch 00/54] PNP cleanup, v4 Bjorn Helgaas
                   ` (46 preceding siblings ...)
  2008-04-25 18:38 ` [patch 47/54] PNP: make generic pnp_add_io_resource() Bjorn Helgaas
@ 2008-04-25 18:38 ` Bjorn Helgaas
  2008-04-25 18:38 ` [patch 49/54] PNP: use pnp_get_pnp_resource() in resource assignment functions Bjorn Helgaas
                   ` (6 subsequent siblings)
  54 siblings, 0 replies; 80+ messages in thread
From: Bjorn Helgaas @ 2008-04-25 18:38 UTC (permalink / raw)
  To: Len Brown
  Cc: linux-acpi, linux-kernel, Adam Belay, Adam M Belay, Li Shaohua,
	Matthieu Castet, Thomas Renninger, Rene Herman, Jaroslav Kysela,
	Andrew Morton

[-- Attachment #1: pnp-common-add-mem-resource --]
[-- Type: text/plain, Size: 6872 bytes --]

Add a pnp_add_mem_resource() that can be used by all the PNP
backends.  This consolidates a little more pnp_resource_table
knowledge into one place.

Signed-off-by: Bjorn Helgaas <bjorn.helgaas@hp.com>

---
 drivers/pnp/base.h             |    3 +++
 drivers/pnp/interface.c        |   18 +++++++-----------
 drivers/pnp/isapnp/core.c      |    9 +++------
 drivers/pnp/pnpacpi/rsparser.c |   32 ++++++++------------------------
 drivers/pnp/pnpbios/rsparser.c |   23 ++++++-----------------
 drivers/pnp/resource.c         |   29 +++++++++++++++++++++++++++++
 6 files changed, 56 insertions(+), 58 deletions(-)

Index: work10/drivers/pnp/base.h
===================================================================
--- work10.orig/drivers/pnp/base.h	2008-04-25 11:15:12.000000000 -0600
+++ work10/drivers/pnp/base.h	2008-04-25 11:15:13.000000000 -0600
@@ -45,3 +45,6 @@
 struct pnp_resource *pnp_add_io_resource(struct pnp_dev *dev,
 					 resource_size_t start,
 					 resource_size_t end, int flags);
+struct pnp_resource *pnp_add_mem_resource(struct pnp_dev *dev,
+					  resource_size_t start,
+					  resource_size_t end, int flags);
Index: work10/drivers/pnp/resource.c
===================================================================
--- work10.orig/drivers/pnp/resource.c	2008-04-25 11:15:12.000000000 -0600
+++ work10/drivers/pnp/resource.c	2008-04-25 11:15:13.000000000 -0600
@@ -650,6 +650,35 @@
 	return pnp_res;
 }
 
+struct pnp_resource *pnp_add_mem_resource(struct pnp_dev *dev,
+					  resource_size_t start,
+					  resource_size_t end, int flags)
+{
+	struct pnp_resource *pnp_res;
+	struct resource *res;
+	static unsigned char warned;
+
+	pnp_res = pnp_new_resource(dev, IORESOURCE_MEM);
+	if (!pnp_res) {
+		if (!warned) {
+			dev_err(&dev->dev, "can't add resource for MEM "
+				"0x%llx-0x%llx\n",(unsigned long long) start,
+				(unsigned long long) end);
+			warned = 1;
+		}
+		return NULL;
+	}
+
+	res = &pnp_res->res;
+	res->flags = IORESOURCE_MEM | flags;
+	res->start = start;
+	res->end = end;
+
+	dev_dbg(&dev->dev, "  add mem 0x%llx-0x%llx flags 0x%x\n",
+		(unsigned long long) start, (unsigned long long) end, flags);
+	return pnp_res;
+}
+
 /* format is: pnp_reserve_irq=irq1[,irq2] .... */
 static int __init pnp_setup_reserve_irq(char *str)
 {
Index: work10/drivers/pnp/interface.c
===================================================================
--- work10.orig/drivers/pnp/interface.c	2008-04-25 11:15:12.000000000 -0600
+++ work10/drivers/pnp/interface.c	2008-04-25 11:15:13.000000000 -0600
@@ -323,7 +323,6 @@
 {
 	struct pnp_dev *dev = to_pnp_dev(dmdev);
 	struct pnp_resource *pnp_res;
-	struct resource *res;
 	char *buf = (void *)ubuf;
 	int retval = 0;
 	resource_size_t start, end;
@@ -404,23 +403,20 @@
 				buf += 3;
 				while (isspace(*buf))
 					++buf;
-				pnp_res = &dev->res->mem[nmem];
-				pnp_res->index = nmem;
-				res = &pnp_res->res;
-				res->start = simple_strtoul(buf, &buf, 0);
+				start = simple_strtoul(buf, &buf, 0);
 				while (isspace(*buf))
 					++buf;
 				if (*buf == '-') {
 					buf += 1;
 					while (isspace(*buf))
 						++buf;
-					res->end = simple_strtoul(buf, &buf, 0);
+					end = simple_strtoul(buf, &buf, 0);
 				} else
-					res->end = res->start;
-				res->flags = IORESOURCE_MEM;
-				nmem++;
-				if (nmem >= PNP_MAX_MEM)
-					break;
+					end = start;
+				pnp_res = pnp_add_mem_resource(dev, start, end,
+							       0);
+				if (pnp_res)
+					pnp_res->index = nmem++;
 				continue;
 			}
 			if (!strnicmp(buf, "irq", 3)) {
Index: work10/drivers/pnp/isapnp/core.c
===================================================================
--- work10.orig/drivers/pnp/isapnp/core.c	2008-04-25 11:15:12.000000000 -0600
+++ work10/drivers/pnp/isapnp/core.c	2008-04-25 11:15:13.000000000 -0600
@@ -932,7 +932,6 @@
 static int isapnp_read_resources(struct pnp_dev *dev)
 {
 	struct pnp_resource *pnp_res;
-	struct resource *res;
 	int tmp, ret;
 
 	dev->active = isapnp_read_byte(ISAPNP_CFG_ACTIVATE);
@@ -950,11 +949,9 @@
 			    isapnp_read_word(ISAPNP_CFG_MEM + (tmp << 3)) << 8;
 			if (!ret)
 				continue;
-			pnp_res = &dev->res->mem[tmp];
-			pnp_res->index = tmp;
-			res = &pnp_res->res;
-			res->start = ret;
-			res->flags = IORESOURCE_MEM;
+			pnp_res = pnp_add_mem_resource(dev, ret, ret, 0);
+			if (pnp_res)
+				pnp_res->index = tmp;
 		}
 		for (tmp = 0; tmp < ISAPNP_MAX_IRQ; tmp++) {
 			ret =
Index: work10/drivers/pnp/pnpacpi/rsparser.c
===================================================================
--- work10.orig/drivers/pnp/pnpacpi/rsparser.c	2008-04-25 11:15:12.000000000 -0600
+++ work10/drivers/pnp/pnpacpi/rsparser.c	2008-04-25 11:15:13.000000000 -0600
@@ -173,34 +173,18 @@
 }
 
 static void pnpacpi_parse_allocated_memresource(struct pnp_dev *dev,
-						u64 mem, u64 len,
+						u64 start, u64 len,
 						int write_protect)
 {
-	struct resource *res;
-	int i;
-	static unsigned char warned;
+	int flags = 0;
+	u64 end = start + len - 1;
 
-	for (i = 0; i < PNP_MAX_MEM; i++) {
-		res = &dev->res->mem[i].res;
-		if (res->flags & IORESOURCE_UNSET)
-			break;
-	}
-	if (i < PNP_MAX_MEM) {
-		res->flags = IORESOURCE_MEM;	// Also clears _UNSET flag
-		if (len <= 0) {
-			res->flags |= IORESOURCE_DISABLED;
-			return;
-		}
-		if (write_protect == ACPI_READ_WRITE_MEMORY)
-			res->flags |= IORESOURCE_MEM_WRITEABLE;
+	if (len == 0)
+		flags |= IORESOURCE_DISABLED;
+	if (write_protect == ACPI_READ_WRITE_MEMORY)
+		flags |= IORESOURCE_MEM_WRITEABLE;
 
-		res->start = mem;
-		res->end = mem + len - 1;
-	} else if (!warned) {
-		printk(KERN_WARNING "pnpacpi: exceeded the max number of mem "
-				"resources: %d\n", PNP_MAX_MEM);
-		warned = 1;
-	}
+	pnp_add_mem_resource(dev, start, end, flags);
 }
 
 static void pnpacpi_parse_allocated_address_space(struct pnp_dev *dev,
Index: work10/drivers/pnp/pnpbios/rsparser.c
===================================================================
--- work10.orig/drivers/pnp/pnpbios/rsparser.c	2008-04-25 11:15:12.000000000 -0600
+++ work10/drivers/pnp/pnpbios/rsparser.c	2008-04-25 11:15:13.000000000 -0600
@@ -67,26 +67,15 @@
 }
 
 static void pnpbios_parse_allocated_memresource(struct pnp_dev *dev,
-						int mem, int len)
+						int start, int len)
 {
-	struct resource *res;
-	int i;
+	int flags = 0;
+	int end = start + len - 1;
 
-	for (i = 0; i < PNP_MAX_MEM; i++) {
-		res = &dev->res->mem[i].res;
-		if (res->flags & IORESOURCE_UNSET)
-			break;
-	}
+	if (len <= 0)
+		flags |= IORESOURCE_DISABLED;
 
-	if (i < PNP_MAX_MEM) {
-		res->flags = IORESOURCE_MEM;	// Also clears _UNSET flag
-		if (len <= 0) {
-			res->flags |= IORESOURCE_DISABLED;
-			return;
-		}
-		res->start = (unsigned long)mem;
-		res->end = (unsigned long)(mem + len - 1);
-	}
+	pnp_add_mem_resource(dev, start, end, flags);
 }
 
 static unsigned char *pnpbios_parse_allocated_resource_data(struct pnp_dev *dev,

-- 

^ permalink raw reply	[flat|nested] 80+ messages in thread

* [patch 49/54] PNP: use pnp_get_pnp_resource() in resource assignment functions
  2008-04-25 18:38 [patch 00/54] PNP cleanup, v4 Bjorn Helgaas
                   ` (47 preceding siblings ...)
  2008-04-25 18:38 ` [patch 48/54] PNP: make generic pnp_add_mem_resource() Bjorn Helgaas
@ 2008-04-25 18:38 ` Bjorn Helgaas
  2008-04-25 18:38 ` [patch 50/54] ISAPNP: fold isapnp_read_resources() back into isapnp_get_resources() Bjorn Helgaas
                   ` (5 subsequent siblings)
  54 siblings, 0 replies; 80+ messages in thread
From: Bjorn Helgaas @ 2008-04-25 18:38 UTC (permalink / raw)
  To: Len Brown
  Cc: linux-acpi, linux-kernel, Adam Belay, Adam M Belay, Li Shaohua,
	Matthieu Castet, Thomas Renninger, Rene Herman, Jaroslav Kysela,
	Andrew Morton

[-- Attachment #1: pnp-add-get-pnp-resource --]
[-- Type: text/plain, Size: 4458 bytes --]

This removes PNP_MAX_PORT, etc., uses and removes direct references
to the pnp_resource_table.

I don't like pnp_get_pnp_resource() and hope that it is temporary,
but the assignment functions need the pnp_resource (not just the
struct resource) because they need to fill in the ISAPNP index.

Signed-off-by: Bjorn Helgaas <bjorn.helgaas@hp.com>

---
 drivers/pnp/base.h     |    3 +++
 drivers/pnp/manager.c  |   16 ++++++++--------
 drivers/pnp/resource.c |   24 ++++++++++++++++++------
 3 files changed, 29 insertions(+), 14 deletions(-)

Index: work10/drivers/pnp/base.h
===================================================================
--- work10.orig/drivers/pnp/base.h	2008-04-25 11:15:13.000000000 -0600
+++ work10/drivers/pnp/base.h	2008-04-25 11:15:14.000000000 -0600
@@ -21,6 +21,9 @@
 
 void pnp_init_resource(struct resource *res);
 
+struct pnp_resource *pnp_get_pnp_resource(struct pnp_dev *dev,
+					  unsigned int type, unsigned int num);
+
 #define PNP_MAX_PORT		40
 #define PNP_MAX_MEM		24
 #define PNP_MAX_IRQ		 2
Index: work10/drivers/pnp/resource.c
===================================================================
--- work10.orig/drivers/pnp/resource.c	2008-04-25 11:15:13.000000000 -0600
+++ work10/drivers/pnp/resource.c	2008-04-25 11:15:14.000000000 -0600
@@ -499,8 +499,8 @@
 #endif
 }
 
-struct resource *pnp_get_resource(struct pnp_dev *dev,
-				  unsigned int type, unsigned int num)
+struct pnp_resource *pnp_get_pnp_resource(struct pnp_dev *dev,
+					  unsigned int type, unsigned int num)
 {
 	struct pnp_resource_table *res = dev->res;
 
@@ -508,22 +508,34 @@
 	case IORESOURCE_IO:
 		if (num >= PNP_MAX_PORT)
 			return NULL;
-		return &res->port[num].res;
+		return &res->port[num];
 	case IORESOURCE_MEM:
 		if (num >= PNP_MAX_MEM)
 			return NULL;
-		return &res->mem[num].res;
+		return &res->mem[num];
 	case IORESOURCE_IRQ:
 		if (num >= PNP_MAX_IRQ)
 			return NULL;
-		return &res->irq[num].res;
+		return &res->irq[num];
 	case IORESOURCE_DMA:
 		if (num >= PNP_MAX_DMA)
 			return NULL;
-		return &res->dma[num].res;
+		return &res->dma[num];
 	}
 	return NULL;
 }
+
+struct resource *pnp_get_resource(struct pnp_dev *dev,
+				  unsigned int type, unsigned int num)
+{
+	struct pnp_resource *pnp_res;
+
+	pnp_res = pnp_get_pnp_resource(dev, type, num);
+	if (pnp_res)
+		return &pnp_res->res;
+
+	return NULL;
+}
 EXPORT_SYMBOL(pnp_get_resource);
 
 static struct pnp_resource *pnp_new_resource(struct pnp_dev *dev, int type)
Index: work10/drivers/pnp/manager.c
===================================================================
--- work10.orig/drivers/pnp/manager.c	2008-04-25 11:15:10.000000000 -0600
+++ work10/drivers/pnp/manager.c	2008-04-25 11:15:14.000000000 -0600
@@ -22,13 +22,13 @@
 	struct pnp_resource *pnp_res;
 	struct resource *res;
 
-	if (idx >= PNP_MAX_PORT) {
+	pnp_res = pnp_get_pnp_resource(dev, IORESOURCE_IO, idx);
+	if (!pnp_res) {
 		dev_err(&dev->dev, "too many I/O port resources\n");
 		/* pretend we were successful so at least the manager won't try again */
 		return 1;
 	}
 
-	pnp_res = &dev->res->port[idx];
 	res = &pnp_res->res;
 
 	/* check if this resource has been manually set, if so skip */
@@ -72,13 +72,13 @@
 	struct pnp_resource *pnp_res;
 	struct resource *res;
 
-	if (idx >= PNP_MAX_MEM) {
+	pnp_res = pnp_get_pnp_resource(dev, IORESOURCE_MEM, idx);
+	if (!pnp_res) {
 		dev_err(&dev->dev, "too many memory resources\n");
 		/* pretend we were successful so at least the manager won't try again */
 		return 1;
 	}
 
-	pnp_res = &dev->res->mem[idx];
 	res = &pnp_res->res;
 
 	/* check if this resource has been manually set, if so skip */
@@ -138,13 +138,13 @@
 		5, 10, 11, 12, 9, 14, 15, 7, 3, 4, 13, 0, 1, 6, 8, 2
 	};
 
-	if (idx >= PNP_MAX_IRQ) {
+	pnp_res = pnp_get_pnp_resource(dev, IORESOURCE_IRQ, idx);
+	if (!pnp_res) {
 		dev_err(&dev->dev, "too many IRQ resources\n");
 		/* pretend we were successful so at least the manager won't try again */
 		return 1;
 	}
 
-	pnp_res = &dev->res->irq[idx];
 	res = &pnp_res->res;
 
 	/* check if this resource has been manually set, if so skip */
@@ -198,12 +198,12 @@
 		1, 3, 5, 6, 7, 0, 2, 4
 	};
 
-	if (idx >= PNP_MAX_DMA) {
+	pnp_res = pnp_get_pnp_resource(dev, IORESOURCE_DMA, idx);
+	if (!pnp_res) {
 		dev_err(&dev->dev, "too many DMA resources\n");
 		return;
 	}
 
-	pnp_res = &dev->res->dma[idx];
 	res = &pnp_res->res;
 
 	/* check if this resource has been manually set, if so skip */

-- 

^ permalink raw reply	[flat|nested] 80+ messages in thread

* [patch 50/54] ISAPNP: fold isapnp_read_resources() back into isapnp_get_resources()
  2008-04-25 18:38 [patch 00/54] PNP cleanup, v4 Bjorn Helgaas
                   ` (48 preceding siblings ...)
  2008-04-25 18:38 ` [patch 49/54] PNP: use pnp_get_pnp_resource() in resource assignment functions Bjorn Helgaas
@ 2008-04-25 18:38 ` Bjorn Helgaas
  2008-04-26 23:07   ` Rene Herman
  2008-04-25 18:38 ` [patch 51/54] PNPACPI: move _CRS/_PRS warnings closer to the action Bjorn Helgaas
                   ` (4 subsequent siblings)
  54 siblings, 1 reply; 80+ messages in thread
From: Bjorn Helgaas @ 2008-04-25 18:38 UTC (permalink / raw)
  To: Len Brown
  Cc: linux-acpi, linux-kernel, Adam Belay, Adam M Belay, Li Shaohua,
	Matthieu Castet, Thomas Renninger, Rene Herman, Jaroslav Kysela,
	Andrew Morton

[-- Attachment #1: isapnp-fold-isapnp_read_resources --]
[-- Type: text/plain, Size: 3120 bytes --]

isapnp_get_resources() does very little besides call
isapnp_read_resources(), so just fold them back together.

Based on a patch by Rene Herman <rene.herman@gmail.com>

Signed-off-by: Bjorn Helgaas <bjorn.helgaas@hp.com>

Index: work10/drivers/pnp/isapnp/core.c
===================================================================
--- work10.orig/drivers/pnp/isapnp/core.c	2008-04-25 11:15:13.000000000 -0600
+++ work10/drivers/pnp/isapnp/core.c	2008-04-25 11:15:14.000000000 -0600
@@ -929,62 +929,55 @@
 EXPORT_SYMBOL(isapnp_cfg_end);
 EXPORT_SYMBOL(isapnp_write_byte);
 
-static int isapnp_read_resources(struct pnp_dev *dev)
-{
-	struct pnp_resource *pnp_res;
-	int tmp, ret;
-
-	dev->active = isapnp_read_byte(ISAPNP_CFG_ACTIVATE);
-	if (dev->active) {
-		for (tmp = 0; tmp < ISAPNP_MAX_PORT; tmp++) {
-			ret = isapnp_read_word(ISAPNP_CFG_PORT + (tmp << 1));
-			if (!ret)
-				continue;
-			pnp_res = pnp_add_io_resource(dev, ret, ret, 0);
-			if (pnp_res)
-				pnp_res->index = tmp;
-		}
-		for (tmp = 0; tmp < ISAPNP_MAX_MEM; tmp++) {
-			ret =
-			    isapnp_read_word(ISAPNP_CFG_MEM + (tmp << 3)) << 8;
-			if (!ret)
-				continue;
-			pnp_res = pnp_add_mem_resource(dev, ret, ret, 0);
-			if (pnp_res)
-				pnp_res->index = tmp;
-		}
-		for (tmp = 0; tmp < ISAPNP_MAX_IRQ; tmp++) {
-			ret =
-			    (isapnp_read_word(ISAPNP_CFG_IRQ + (tmp << 1)) >>
-			     8);
-			if (!ret)
-				continue;
-			pnp_res = pnp_add_irq_resource(dev, ret, 0);
-			if (pnp_res)
-				pnp_res->index = tmp;
-		}
-		for (tmp = 0; tmp < ISAPNP_MAX_DMA; tmp++) {
-			ret = isapnp_read_byte(ISAPNP_CFG_DMA + tmp);
-			if (ret == 4)
-				continue;
-			pnp_res = pnp_add_dma_resource(dev, ret, 0);
-			if  (pnp_res)
-				pnp_res->index = tmp;
-		}
-	}
-	return 0;
-}
-
 static int isapnp_get_resources(struct pnp_dev *dev)
 {
-	int ret;
+	struct pnp_resource *pnp_res;
+	int i, ret;
 
 	dev_dbg(&dev->dev, "get resources\n");
 	pnp_init_resources(dev);
 	isapnp_cfg_begin(dev->card->number, dev->number);
-	ret = isapnp_read_resources(dev);
+	dev->active = isapnp_read_byte(ISAPNP_CFG_ACTIVATE);
+	if (!dev->active)
+		goto __end;
+
+	for (i = 0; i < ISAPNP_MAX_PORT; i++) {
+		ret = isapnp_read_word(ISAPNP_CFG_PORT + (i << 1));
+		if (!ret)
+			continue;
+		pnp_res = pnp_add_io_resource(dev, ret, ret, 0);
+		if (pnp_res)
+			pnp_res->index = i;
+	}
+	for (i = 0; i < ISAPNP_MAX_MEM; i++) {
+		ret = isapnp_read_word(ISAPNP_CFG_MEM + (i << 3)) << 8;
+		if (!ret)
+			continue;
+		pnp_res = pnp_add_mem_resource(dev, ret, ret, 0);
+		if (pnp_res)
+			pnp_res->index = i;
+	}
+	for (i = 0; i < ISAPNP_MAX_IRQ; i++) {
+		ret = (isapnp_read_word(ISAPNP_CFG_IRQ + (i << 1)) >>
+		     8);
+		if (!ret)
+			continue;
+		pnp_res = pnp_add_irq_resource(dev, ret, 0);
+		if (pnp_res)
+			pnp_res->index = i;
+	}
+	for (i = 0; i < ISAPNP_MAX_DMA; i++) {
+		ret = isapnp_read_byte(ISAPNP_CFG_DMA + i);
+		if (ret == 4)
+			continue;
+		pnp_res = pnp_add_dma_resource(dev, ret, 0);
+		if  (pnp_res)
+			pnp_res->index = i;
+	}
+
+__end:
 	isapnp_cfg_end();
-	return ret;
+	return 0;
 }
 
 static int isapnp_set_resources(struct pnp_dev *dev)

-- 

^ permalink raw reply	[flat|nested] 80+ messages in thread

* [patch 51/54] PNPACPI: move _CRS/_PRS warnings closer to the action
  2008-04-25 18:38 [patch 00/54] PNP cleanup, v4 Bjorn Helgaas
                   ` (49 preceding siblings ...)
  2008-04-25 18:38 ` [patch 50/54] ISAPNP: fold isapnp_read_resources() back into isapnp_get_resources() Bjorn Helgaas
@ 2008-04-25 18:38 ` Bjorn Helgaas
  2008-04-25 18:38 ` [patch 52/54] PNP: make interfaces private to the PNP core Bjorn Helgaas
                   ` (3 subsequent siblings)
  54 siblings, 0 replies; 80+ messages in thread
From: Bjorn Helgaas @ 2008-04-25 18:38 UTC (permalink / raw)
  To: Len Brown
  Cc: linux-acpi, linux-kernel, Adam Belay, Adam M Belay, Li Shaohua,
	Matthieu Castet, Thomas Renninger, Rene Herman, Jaroslav Kysela,
	Andrew Morton

[-- Attachment #1: pnpacpi-cleanup-CRS-PRS-warnings --]
[-- Type: text/plain, Size: 4897 bytes --]

Move warnings about _CRS and _PRS problems to the place where we
actually make the ACPI calls.  Then we don't have to pass around
acpi_status values any more than necessary.

Signed-off-by: Bjorn Helgaas <bjorn.helgaas@hp.com>

Index: work10/drivers/pnp/pnpacpi/pnpacpi.h
===================================================================
--- work10.orig/drivers/pnp/pnpacpi/pnpacpi.h	2008-04-25 11:14:56.000000000 -0600
+++ work10/drivers/pnp/pnpacpi/pnpacpi.h	2008-04-25 11:15:15.000000000 -0600
@@ -5,8 +5,8 @@
 #include <linux/acpi.h>
 #include <linux/pnp.h>
 
-acpi_status pnpacpi_parse_allocated_resource(struct pnp_dev *);
-acpi_status pnpacpi_parse_resource_option_data(struct pnp_dev *);
+int pnpacpi_parse_allocated_resource(struct pnp_dev *);
+int pnpacpi_parse_resource_option_data(struct pnp_dev *);
 int pnpacpi_encode_resources(struct pnp_dev *, struct acpi_buffer *);
 int pnpacpi_build_resource_template(struct pnp_dev *, struct acpi_buffer *);
 #endif
Index: work10/drivers/pnp/pnpacpi/core.c
===================================================================
--- work10.orig/drivers/pnp/pnpacpi/core.c	2008-04-25 11:14:58.000000000 -0600
+++ work10/drivers/pnp/pnpacpi/core.c	2008-04-25 11:15:15.000000000 -0600
@@ -75,11 +75,8 @@
 
 static int pnpacpi_get_resources(struct pnp_dev *dev)
 {
-	acpi_status status;
-
 	dev_dbg(&dev->dev, "get resources\n");
-	status = pnpacpi_parse_allocated_resource(dev);
-	return ACPI_FAILURE(status) ? -ENODEV : 0;
+	return pnpacpi_parse_allocated_resource(dev);
 }
 
 static int pnpacpi_set_resources(struct pnp_dev *dev)
@@ -182,22 +179,11 @@
 	else
 		strncpy(dev->name, acpi_device_bid(device), sizeof(dev->name));
 
-	if (dev->active) {
-		/* parse allocated resource */
-		status = pnpacpi_parse_allocated_resource(dev);
-		if (ACPI_FAILURE(status) && (status != AE_NOT_FOUND)) {
-			pnp_err("PnPACPI: METHOD_NAME__CRS failure for %s",
-				acpi_device_hid(device));
-		}
-	}
+	if (dev->active)
+		pnpacpi_parse_allocated_resource(dev);
 
-	if (dev->capabilities & PNP_CONFIGURABLE) {
-		status = pnpacpi_parse_resource_option_data(dev);
-		if (ACPI_FAILURE(status) && (status != AE_NOT_FOUND)) {
-			pnp_err("PnPACPI: METHOD_NAME__PRS failure for %s",
-				acpi_device_hid(device));
-		}
-	}
+	if (dev->capabilities & PNP_CONFIGURABLE)
+		pnpacpi_parse_resource_option_data(dev);
 
 	if (device->flags.compatible_ids) {
 		struct acpi_compatible_id_list *cid_list = device->pnp.cid_list;
Index: work10/drivers/pnp/pnpacpi/rsparser.c
===================================================================
--- work10.orig/drivers/pnp/pnpacpi/rsparser.c	2008-04-25 11:15:13.000000000 -0600
+++ work10/drivers/pnp/pnpacpi/rsparser.c	2008-04-25 11:15:15.000000000 -0600
@@ -339,16 +339,24 @@
 	return AE_OK;
 }
 
-acpi_status pnpacpi_parse_allocated_resource(struct pnp_dev *dev)
+int pnpacpi_parse_allocated_resource(struct pnp_dev *dev)
 {
 	acpi_handle handle = dev->data;
+	acpi_status status;
 
 	dev_dbg(&dev->dev, "parse allocated resources\n");
 
 	pnp_init_resources(dev);
 
-	return acpi_walk_resources(handle, METHOD_NAME__CRS,
-				   pnpacpi_allocated_resource, dev);
+	status = acpi_walk_resources(handle, METHOD_NAME__CRS,
+				     pnpacpi_allocated_resource, dev);
+
+	if (ACPI_FAILURE(status)) {
+		if (status != AE_NOT_FOUND)
+			dev_err(&dev->dev, "can't evaluate _CRS: %d", status);
+		return -EPERM;
+	}
+	return 0;
 }
 
 static __init void pnpacpi_parse_dma_option(struct pnp_dev *dev,
@@ -670,7 +678,7 @@
 	return AE_OK;
 }
 
-acpi_status __init pnpacpi_parse_resource_option_data(struct pnp_dev *dev)
+int __init pnpacpi_parse_resource_option_data(struct pnp_dev *dev)
 {
 	acpi_handle handle = dev->data;
 	acpi_status status;
@@ -680,13 +688,19 @@
 
 	parse_data.option = pnp_register_independent_option(dev);
 	if (!parse_data.option)
-		return AE_ERROR;
+		return -ENOMEM;
+
 	parse_data.option_independent = parse_data.option;
 	parse_data.dev = dev;
 	status = acpi_walk_resources(handle, METHOD_NAME__PRS,
 				     pnpacpi_option_resource, &parse_data);
 
-	return status;
+	if (ACPI_FAILURE(status)) {
+		if (status != AE_NOT_FOUND)
+			dev_err(&dev->dev, "can't evaluate _PRS: %d", status);
+		return -EPERM;
+	}
+	return 0;
 }
 
 static int pnpacpi_supported_resource(struct acpi_resource *res)
@@ -745,7 +759,7 @@
 	status = acpi_walk_resources(handle, METHOD_NAME__CRS,
 				     pnpacpi_count_resources, &res_cnt);
 	if (ACPI_FAILURE(status)) {
-		dev_err(&dev->dev, "can't evaluate _CRS\n");
+		dev_err(&dev->dev, "can't evaluate _CRS: %d\n", status);
 		return -EINVAL;
 	}
 	if (!res_cnt)
@@ -760,7 +774,7 @@
 				     pnpacpi_type_resources, &resource);
 	if (ACPI_FAILURE(status)) {
 		kfree(buffer->pointer);
-		dev_err(&dev->dev, "can't evaluate _CRS\n");
+		dev_err(&dev->dev, "can't evaluate _CRS: %d\n", status);
 		return -EINVAL;
 	}
 	/* resource will pointer the end resource now */

-- 

^ permalink raw reply	[flat|nested] 80+ messages in thread

* [patch 52/54] PNP: make interfaces private to the PNP core
  2008-04-25 18:38 [patch 00/54] PNP cleanup, v4 Bjorn Helgaas
                   ` (50 preceding siblings ...)
  2008-04-25 18:38 ` [patch 51/54] PNPACPI: move _CRS/_PRS warnings closer to the action Bjorn Helgaas
@ 2008-04-25 18:38 ` Bjorn Helgaas
  2008-04-25 18:39 ` [patch 53/54] ISAPNP: remove unused pnp_dev->regs field Bjorn Helgaas
                   ` (2 subsequent siblings)
  54 siblings, 0 replies; 80+ messages in thread
From: Bjorn Helgaas @ 2008-04-25 18:38 UTC (permalink / raw)
  To: Len Brown
  Cc: linux-acpi, Rene Herman, linux-kernel, Adam Belay, Adam M Belay,
	Li Shaohua, Matthieu Castet, Thomas Renninger, Rene Herman,
	Jaroslav Kysela, Andrew Morton

[-- Attachment #1: pnp-make-interfaces-private --]
[-- Type: text/plain, Size: 6939 bytes --]

The interfaces for registering protocols, devices, cards,
and resource options should only be used inside the PNP core.

Signed-off-by: Bjorn Helgaas <bjorn.helgaas@hp.com>
Acked-By: Rene Herman <rene.herman@gmail.com>

---
 drivers/pnp/base.h  |   24 +++++++++++++++++++++++-
 include/linux/pnp.h |   34 ----------------------------------
 2 files changed, 23 insertions(+), 35 deletions(-)

Index: work10/include/linux/pnp.h
===================================================================
--- work10.orig/include/linux/pnp.h	2008-04-25 11:15:08.000000000 -0600
+++ work10/include/linux/pnp.h	2008-04-25 11:15:16.000000000 -0600
@@ -417,19 +417,12 @@
 #if defined(CONFIG_PNP)
 
 /* device management */
-int pnp_register_protocol(struct pnp_protocol *protocol);
-void pnp_unregister_protocol(struct pnp_protocol *protocol);
-int pnp_add_device(struct pnp_dev *dev);
 int pnp_device_attach(struct pnp_dev *pnp_dev);
 void pnp_device_detach(struct pnp_dev *pnp_dev);
 extern struct list_head pnp_global;
 extern int pnp_platform_devices;
 
 /* multidevice card support */
-int pnp_add_card(struct pnp_card *card);
-void pnp_remove_card(struct pnp_card *card);
-int pnp_add_card_device(struct pnp_card *card, struct pnp_dev *dev);
-void pnp_remove_card_device(struct pnp_dev *dev);
 struct pnp_dev *pnp_request_card_device(struct pnp_card_link *clink,
 					const char *id, struct pnp_dev *from);
 void pnp_release_card_device(struct pnp_dev *dev);
@@ -438,20 +431,7 @@
 extern struct list_head pnp_cards;
 
 /* resource management */
-struct pnp_option *pnp_register_independent_option(struct pnp_dev *dev);
-struct pnp_option *pnp_register_dependent_option(struct pnp_dev *dev,
-						 int priority);
-int pnp_register_irq_resource(struct pnp_dev *dev, struct pnp_option *option,
-			      struct pnp_irq *data);
-int pnp_register_dma_resource(struct pnp_dev *dev, struct pnp_option *option,
-			      struct pnp_dma *data);
-int pnp_register_port_resource(struct pnp_dev *dev, struct pnp_option *option,
-			       struct pnp_port *data);
-int pnp_register_mem_resource(struct pnp_dev *dev, struct pnp_option *option,
-			      struct pnp_mem *data);
-void pnp_init_resources(struct pnp_dev *dev);
 int pnp_auto_config_dev(struct pnp_dev *dev);
-int pnp_validate_config(struct pnp_dev *dev);
 int pnp_start_dev(struct pnp_dev *dev);
 int pnp_stop_dev(struct pnp_dev *dev);
 int pnp_activate_dev(struct pnp_dev *dev);
@@ -466,35 +446,19 @@
 #else
 
 /* device management */
-static inline int pnp_register_protocol(struct pnp_protocol *protocol) { return -ENODEV; }
-static inline void pnp_unregister_protocol(struct pnp_protocol *protocol) { }
-static inline int pnp_init_device(struct pnp_dev *dev) { return -ENODEV; }
-static inline int pnp_add_device(struct pnp_dev *dev) { return -ENODEV; }
 static inline int pnp_device_attach(struct pnp_dev *pnp_dev) { return -ENODEV; }
 static inline void pnp_device_detach(struct pnp_dev *pnp_dev) { }
 
 #define pnp_platform_devices 0
 
 /* multidevice card support */
-static inline int pnp_add_card(struct pnp_card *card) { return -ENODEV; }
-static inline void pnp_remove_card(struct pnp_card *card) { }
-static inline int pnp_add_card_device(struct pnp_card *card, struct pnp_dev *dev) { return -ENODEV; }
-static inline void pnp_remove_card_device(struct pnp_dev *dev) { }
 static inline struct pnp_dev *pnp_request_card_device(struct pnp_card_link *clink, const char *id, struct pnp_dev *from) { return NULL; }
 static inline void pnp_release_card_device(struct pnp_dev *dev) { }
 static inline int pnp_register_card_driver(struct pnp_card_driver *drv) { return -ENODEV; }
 static inline void pnp_unregister_card_driver(struct pnp_card_driver *drv) { }
 
 /* resource management */
-static inline struct pnp_option *pnp_register_independent_option(struct pnp_dev *dev) { return NULL; }
-static inline struct pnp_option *pnp_register_dependent_option(struct pnp_dev *dev, int priority) { return NULL; }
-static inline int pnp_register_irq_resource(struct pnp_dev *dev, struct pnp_option *option, struct pnp_irq *data) { return -ENODEV; }
-static inline int pnp_register_dma_resource(struct pnp_dev *dev, struct pnp_option *option, struct pnp_dma *data) { return -ENODEV; }
-static inline int pnp_register_port_resource(struct pnp_dev *dev, struct pnp_option *option, struct pnp_port *data) { return -ENODEV; }
-static inline int pnp_register_mem_resource(struct pnp_dev *dev, struct pnp_option *option, struct pnp_mem *data) { return -ENODEV; }
-static inline void pnp_init_resources(struct pnp_dev *dev) { }
 static inline int pnp_auto_config_dev(struct pnp_dev *dev) { return -ENODEV; }
-static inline int pnp_validate_config(struct pnp_dev *dev) { return -ENODEV; }
 static inline int pnp_start_dev(struct pnp_dev *dev) { return -ENODEV; }
 static inline int pnp_stop_dev(struct pnp_dev *dev) { return -ENODEV; }
 static inline int pnp_activate_dev(struct pnp_dev *dev) { return -ENODEV; }
Index: work10/drivers/pnp/base.h
===================================================================
--- work10.orig/drivers/pnp/base.h	2008-04-25 11:15:14.000000000 -0600
+++ work10/drivers/pnp/base.h	2008-04-25 11:15:16.000000000 -0600
@@ -1,12 +1,37 @@
 extern spinlock_t pnp_lock;
 void *pnp_alloc(long size);
+
+int pnp_register_protocol(struct pnp_protocol *protocol);
+void pnp_unregister_protocol(struct pnp_protocol *protocol);
+
 #define PNP_EISA_ID_MASK 0x7fffffff
 void pnp_eisa_id_to_string(u32 id, char *str);
 struct pnp_dev *pnp_alloc_dev(struct pnp_protocol *, int id, char *pnpid);
 struct pnp_card *pnp_alloc_card(struct pnp_protocol *, int id, char *pnpid);
+
+int pnp_add_device(struct pnp_dev *dev);
 struct pnp_id *pnp_add_id(struct pnp_dev *dev, char *id);
-struct pnp_id *pnp_add_card_id(struct pnp_card *card, char *id);
 int pnp_interface_attach_device(struct pnp_dev *dev);
+
+int pnp_add_card(struct pnp_card *card);
+struct pnp_id *pnp_add_card_id(struct pnp_card *card, char *id);
+void pnp_remove_card(struct pnp_card *card);
+int pnp_add_card_device(struct pnp_card *card, struct pnp_dev *dev);
+void pnp_remove_card_device(struct pnp_dev *dev);
+
+struct pnp_option *pnp_register_independent_option(struct pnp_dev *dev);
+struct pnp_option *pnp_register_dependent_option(struct pnp_dev *dev,
+						 int priority);
+int pnp_register_irq_resource(struct pnp_dev *dev, struct pnp_option *option,
+			      struct pnp_irq *data);
+int pnp_register_dma_resource(struct pnp_dev *dev, struct pnp_option *option,
+			      struct pnp_dma *data);
+int pnp_register_port_resource(struct pnp_dev *dev, struct pnp_option *option,
+			       struct pnp_port *data);
+int pnp_register_mem_resource(struct pnp_dev *dev, struct pnp_option *option,
+			      struct pnp_mem *data);
+void pnp_init_resources(struct pnp_dev *dev);
+
 void pnp_fixup_device(struct pnp_dev *dev);
 void pnp_free_option(struct pnp_option *option);
 int __pnp_add_device(struct pnp_dev *dev);

-- 

^ permalink raw reply	[flat|nested] 80+ messages in thread

* [patch 53/54] ISAPNP: remove unused pnp_dev->regs field
  2008-04-25 18:38 [patch 00/54] PNP cleanup, v4 Bjorn Helgaas
                   ` (51 preceding siblings ...)
  2008-04-25 18:38 ` [patch 52/54] PNP: make interfaces private to the PNP core Bjorn Helgaas
@ 2008-04-25 18:39 ` Bjorn Helgaas
  2008-04-25 18:39 ` [patch 54/54] PNPBIOS: remove include/linux/pnpbios.h Bjorn Helgaas
  2008-04-26 23:34 ` [patch 00/54] PNP cleanup, v4 Rene Herman
  54 siblings, 0 replies; 80+ messages in thread
From: Bjorn Helgaas @ 2008-04-25 18:39 UTC (permalink / raw)
  To: Len Brown
  Cc: linux-acpi, linux-kernel, Adam Belay, Adam M Belay, Li Shaohua,
	Matthieu Castet, Thomas Renninger, Rene Herman, Jaroslav Kysela,
	Andrew Morton

[-- Attachment #1: isapnp-remove-unused-pnp_dev-fields --]
[-- Type: text/plain, Size: 1181 bytes --]

The "regs" field in struct pnp_dev is set but never read, so remove it.

Signed-off-by: Bjorn Helgaas <bjorn.helgaas@hp.com>

Index: work10/drivers/pnp/isapnp/core.c
===================================================================
--- work10.orig/drivers/pnp/isapnp/core.c	2008-04-25 11:15:14.000000000 -0600
+++ work10/drivers/pnp/isapnp/core.c	2008-04-25 11:15:17.000000000 -0600
@@ -416,10 +416,7 @@
 	if (!dev)
 		return NULL;
 
-	dev->regs = tmp[4];
 	dev->card = card;
-	if (size > 5)
-		dev->regs |= tmp[5] << 8;
 	dev->capabilities |= PNP_CONFIGURABLE;
 	dev->capabilities |= PNP_READ;
 	dev->capabilities |= PNP_WRITE;
Index: work10/include/linux/pnp.h
===================================================================
--- work10.orig/include/linux/pnp.h	2008-04-25 11:15:16.000000000 -0600
+++ work10/include/linux/pnp.h	2008-04-25 11:15:17.000000000 -0600
@@ -256,7 +256,6 @@
 	struct pnp_resource_table *res;
 
 	char name[PNP_NAME_LEN];	/* contains a human-readable name */
-	unsigned short regs;		/* ISAPnP: supported registers */
 	int flags;			/* used by protocols */
 	struct proc_dir_entry *procent;	/* device entry in /proc/bus/isapnp */
 	void *data;

-- 

^ permalink raw reply	[flat|nested] 80+ messages in thread

* [patch 54/54] PNPBIOS: remove include/linux/pnpbios.h
  2008-04-25 18:38 [patch 00/54] PNP cleanup, v4 Bjorn Helgaas
                   ` (52 preceding siblings ...)
  2008-04-25 18:39 ` [patch 53/54] ISAPNP: remove unused pnp_dev->regs field Bjorn Helgaas
@ 2008-04-25 18:39 ` Bjorn Helgaas
  2008-04-26 23:34 ` [patch 00/54] PNP cleanup, v4 Rene Herman
  54 siblings, 0 replies; 80+ messages in thread
From: Bjorn Helgaas @ 2008-04-25 18:39 UTC (permalink / raw)
  To: Len Brown
  Cc: linux-acpi, linux-kernel, Adam Belay, Adam M Belay, Li Shaohua,
	Matthieu Castet, Thomas Renninger, Rene Herman, Jaroslav Kysela,
	Andrew Morton

[-- Attachment #1: pnpbios-remove-public-header --]
[-- Type: text/plain, Size: 12205 bytes --]

The contents of include/linux/pnpbios.h are used only inside the PNPBIOS
backend, so this file doesn't need to be visible outside PNP.

This patch moves the contents into an existing PNPBIOS-specific file,
drivers/pnp/pnpbios/pnpbios.h.

Signed-off-by: Bjorn Helgaas <bjorn.helgaas@hp.com>

---
 drivers/pnp/pnpbios/bioscalls.c |    1 
 drivers/pnp/pnpbios/core.c      |    1 
 drivers/pnp/pnpbios/pnpbios.h   |  136 ++++++++++++++++++++++++++++++++++++
 drivers/pnp/pnpbios/proc.c      |    2 
 drivers/pnp/pnpbios/rsparser.c  |    1 
 include/linux/pnpbios.h         |  151 ----------------------------------------
 6 files changed, 137 insertions(+), 155 deletions(-)

Index: work10/drivers/pnp/pnpbios/bioscalls.c
===================================================================
--- work10.orig/drivers/pnp/pnpbios/bioscalls.c	2008-04-25 11:12:14.000000000 -0600
+++ work10/drivers/pnp/pnpbios/bioscalls.c	2008-04-25 11:15:17.000000000 -0600
@@ -7,7 +7,6 @@
 #include <linux/init.h>
 #include <linux/linkage.h>
 #include <linux/kernel.h>
-#include <linux/pnpbios.h>
 #include <linux/device.h>
 #include <linux/pnp.h>
 #include <linux/mm.h>
Index: work10/drivers/pnp/pnpbios/core.c
===================================================================
--- work10.orig/drivers/pnp/pnpbios/core.c	2008-04-25 11:14:58.000000000 -0600
+++ work10/drivers/pnp/pnpbios/core.c	2008-04-25 11:15:17.000000000 -0600
@@ -50,7 +50,6 @@
 #include <linux/init.h>
 #include <linux/linkage.h>
 #include <linux/kernel.h>
-#include <linux/pnpbios.h>
 #include <linux/device.h>
 #include <linux/pnp.h>
 #include <linux/mm.h>
Index: work10/drivers/pnp/pnpbios/pnpbios.h
===================================================================
--- work10.orig/drivers/pnp/pnpbios/pnpbios.h	2008-04-25 11:14:56.000000000 -0600
+++ work10/drivers/pnp/pnpbios/pnpbios.h	2008-04-25 11:15:17.000000000 -0600
@@ -2,6 +2,142 @@
  * pnpbios.h - contains local definitions
  */
 
+/*
+ * Include file for the interface to a PnP BIOS
+ *
+ * Original BIOS code (C) 1998 Christian Schmidt (chr.schmidt@tu-bs.de)
+ * PnP handler parts (c) 1998 Tom Lees <tom@lpsg.demon.co.uk>
+ * Minor reorganizations by David Hinds <dahinds@users.sourceforge.net>
+ *
+ * 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, 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, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ */
+
+/*
+ * Return codes
+ */
+#define PNP_SUCCESS                     0x00
+#define PNP_NOT_SET_STATICALLY          0x7f
+#define PNP_UNKNOWN_FUNCTION            0x81
+#define PNP_FUNCTION_NOT_SUPPORTED      0x82
+#define PNP_INVALID_HANDLE              0x83
+#define PNP_BAD_PARAMETER               0x84
+#define PNP_SET_FAILED                  0x85
+#define PNP_EVENTS_NOT_PENDING          0x86
+#define PNP_SYSTEM_NOT_DOCKED           0x87
+#define PNP_NO_ISA_PNP_CARDS            0x88
+#define PNP_UNABLE_TO_DETERMINE_DOCK_CAPABILITIES 0x89
+#define PNP_CONFIG_CHANGE_FAILED_NO_BATTERY 0x8a
+#define PNP_CONFIG_CHANGE_FAILED_RESOURCE_CONFLICT 0x8b
+#define PNP_BUFFER_TOO_SMALL            0x8c
+#define PNP_USE_ESCD_SUPPORT            0x8d
+#define PNP_MESSAGE_NOT_SUPPORTED       0x8e
+#define PNP_HARDWARE_ERROR              0x8f
+
+#define ESCD_SUCCESS                    0x00
+#define ESCD_IO_ERROR_READING           0x55
+#define ESCD_INVALID                    0x56
+#define ESCD_BUFFER_TOO_SMALL           0x59
+#define ESCD_NVRAM_TOO_SMALL            0x5a
+#define ESCD_FUNCTION_NOT_SUPPORTED     0x81
+
+/*
+ * Events that can be received by "get event"
+ */
+#define PNPEV_ABOUT_TO_CHANGE_CONFIG	0x0001
+#define PNPEV_DOCK_CHANGED		0x0002
+#define PNPEV_SYSTEM_DEVICE_CHANGED	0x0003
+#define PNPEV_CONFIG_CHANGED_FAILED	0x0004
+#define PNPEV_UNKNOWN_SYSTEM_EVENT	0xffff
+/* 0x8000 through 0xfffe are OEM defined */
+
+/*
+ * Messages that should be sent through "send message"
+ */
+#define PNPMSG_OK			0x00
+#define PNPMSG_ABORT			0x01
+#define PNPMSG_UNDOCK_DEFAULT_ACTION	0x40
+#define PNPMSG_POWER_OFF		0x41
+#define PNPMSG_PNP_OS_ACTIVE		0x42
+#define PNPMSG_PNP_OS_INACTIVE		0x43
+
+/*
+ * Plug and Play BIOS flags
+ */
+#define PNPBIOS_NO_DISABLE		0x0001
+#define PNPBIOS_NO_CONFIG		0x0002
+#define PNPBIOS_OUTPUT			0x0004
+#define PNPBIOS_INPUT			0x0008
+#define PNPBIOS_BOOTABLE		0x0010
+#define PNPBIOS_DOCK			0x0020
+#define PNPBIOS_REMOVABLE		0x0040
+#define pnpbios_is_static(x) (((x)->flags & 0x0100) == 0x0000)
+#define pnpbios_is_dynamic(x) ((x)->flags & 0x0080)
+
+/*
+ * Function Parameters
+ */
+#define PNPMODE_STATIC 1
+#define PNPMODE_DYNAMIC 0
+
+/* 0x8000 through 0xffff are OEM defined */
+
+#pragma pack(1)
+struct pnp_dev_node_info {
+	__u16 no_nodes;
+	__u16 max_node_size;
+};
+struct pnp_docking_station_info {
+	__u32 location_id;
+	__u32 serial;
+	__u16 capabilities;
+};
+struct pnp_isa_config_struc {
+	__u8 revision;
+	__u8 no_csns;
+	__u16 isa_rd_data_port;
+	__u16 reserved;
+};
+struct escd_info_struc {
+	__u16 min_escd_write_size;
+	__u16 escd_size;
+	__u32 nv_storage_base;
+};
+struct pnp_bios_node {
+	__u16 size;
+	__u8 handle;
+	__u32 eisa_id;
+	__u8 type_code[3];
+	__u16 flags;
+	__u8 data[0];
+};
+#pragma pack()
+
+/* non-exported */
+extern struct pnp_dev_node_info node_info;
+
+extern int pnp_bios_dev_node_info(struct pnp_dev_node_info *data);
+extern int pnp_bios_get_dev_node(u8 *nodenum, char config,
+				 struct pnp_bios_node *data);
+extern int pnp_bios_set_dev_node(u8 nodenum, char config,
+				 struct pnp_bios_node *data);
+extern int pnp_bios_get_stat_res(char *info);
+extern int pnp_bios_isapnp_config(struct pnp_isa_config_struc *data);
+extern int pnp_bios_escd_info(struct escd_info_struc *data);
+extern int pnp_bios_read_escd(char *data, u32 nvram_base);
+extern int pnp_bios_dock_station_info(struct pnp_docking_station_info *data);
+
 #pragma pack(1)
 union pnp_bios_install_struct {
 	struct {
Index: work10/drivers/pnp/pnpbios/proc.c
===================================================================
--- work10.orig/drivers/pnp/pnpbios/proc.c	2008-04-25 11:12:14.000000000 -0600
+++ work10/drivers/pnp/pnpbios/proc.c	2008-04-25 11:15:17.000000000 -0600
@@ -23,7 +23,7 @@
 #include <linux/slab.h>
 #include <linux/types.h>
 #include <linux/proc_fs.h>
-#include <linux/pnpbios.h>
+#include <linux/pnp.h>
 #include <linux/init.h>
 
 #include <asm/uaccess.h>
Index: work10/drivers/pnp/pnpbios/rsparser.c
===================================================================
--- work10.orig/drivers/pnp/pnpbios/rsparser.c	2008-04-25 11:15:13.000000000 -0600
+++ work10/drivers/pnp/pnpbios/rsparser.c	2008-04-25 11:15:17.000000000 -0600
@@ -4,7 +4,6 @@
 
 #include <linux/ctype.h>
 #include <linux/pnp.h>
-#include <linux/pnpbios.h>
 #include <linux/string.h>
 #include <linux/slab.h>
 
Index: work10/include/linux/pnpbios.h
===================================================================
--- work10.orig/include/linux/pnpbios.h	2008-04-25 11:12:14.000000000 -0600
+++ /dev/null	1970-01-01 00:00:00.000000000 +0000
@@ -1,151 +0,0 @@
-/*
- * Include file for the interface to a PnP BIOS
- *
- * Original BIOS code (C) 1998 Christian Schmidt (chr.schmidt@tu-bs.de)
- * PnP handler parts (c) 1998 Tom Lees <tom@lpsg.demon.co.uk>
- * Minor reorganizations by David Hinds <dahinds@users.sourceforge.net>
- *
- * 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, 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, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- */
-
-#ifndef _LINUX_PNPBIOS_H
-#define _LINUX_PNPBIOS_H
-
-#ifdef __KERNEL__
-
-#include <linux/types.h>
-#include <linux/pnp.h>
-
-/*
- * Return codes
- */
-#define PNP_SUCCESS                     0x00
-#define PNP_NOT_SET_STATICALLY          0x7f
-#define PNP_UNKNOWN_FUNCTION            0x81
-#define PNP_FUNCTION_NOT_SUPPORTED      0x82
-#define PNP_INVALID_HANDLE              0x83
-#define PNP_BAD_PARAMETER               0x84
-#define PNP_SET_FAILED                  0x85
-#define PNP_EVENTS_NOT_PENDING          0x86
-#define PNP_SYSTEM_NOT_DOCKED           0x87
-#define PNP_NO_ISA_PNP_CARDS            0x88
-#define PNP_UNABLE_TO_DETERMINE_DOCK_CAPABILITIES 0x89
-#define PNP_CONFIG_CHANGE_FAILED_NO_BATTERY 0x8a
-#define PNP_CONFIG_CHANGE_FAILED_RESOURCE_CONFLICT 0x8b
-#define PNP_BUFFER_TOO_SMALL            0x8c
-#define PNP_USE_ESCD_SUPPORT            0x8d
-#define PNP_MESSAGE_NOT_SUPPORTED       0x8e
-#define PNP_HARDWARE_ERROR              0x8f
-
-#define ESCD_SUCCESS                    0x00
-#define ESCD_IO_ERROR_READING           0x55
-#define ESCD_INVALID                    0x56
-#define ESCD_BUFFER_TOO_SMALL           0x59
-#define ESCD_NVRAM_TOO_SMALL            0x5a
-#define ESCD_FUNCTION_NOT_SUPPORTED     0x81
-
-/*
- * Events that can be received by "get event"
- */
-#define PNPEV_ABOUT_TO_CHANGE_CONFIG	0x0001
-#define PNPEV_DOCK_CHANGED		0x0002
-#define PNPEV_SYSTEM_DEVICE_CHANGED	0x0003
-#define PNPEV_CONFIG_CHANGED_FAILED	0x0004
-#define PNPEV_UNKNOWN_SYSTEM_EVENT	0xffff
-/* 0x8000 through 0xfffe are OEM defined */
-
-/*
- * Messages that should be sent through "send message"
- */
-#define PNPMSG_OK			0x00
-#define PNPMSG_ABORT			0x01
-#define PNPMSG_UNDOCK_DEFAULT_ACTION	0x40
-#define PNPMSG_POWER_OFF		0x41
-#define PNPMSG_PNP_OS_ACTIVE		0x42
-#define PNPMSG_PNP_OS_INACTIVE		0x43
-
-/*
- * Plug and Play BIOS flags
- */
-#define PNPBIOS_NO_DISABLE		0x0001
-#define PNPBIOS_NO_CONFIG		0x0002
-#define PNPBIOS_OUTPUT			0x0004
-#define PNPBIOS_INPUT			0x0008
-#define PNPBIOS_BOOTABLE		0x0010
-#define PNPBIOS_DOCK			0x0020
-#define PNPBIOS_REMOVABLE		0x0040
-#define pnpbios_is_static(x) (((x)->flags & 0x0100) == 0x0000)
-#define pnpbios_is_dynamic(x) ((x)->flags & 0x0080)
-
-/*
- * Function Parameters
- */
-#define PNPMODE_STATIC 1
-#define PNPMODE_DYNAMIC 0
-
-/* 0x8000 through 0xffff are OEM defined */
-
-#pragma pack(1)
-struct pnp_dev_node_info {
-	__u16 no_nodes;
-	__u16 max_node_size;
-};
-struct pnp_docking_station_info {
-	__u32 location_id;
-	__u32 serial;
-	__u16 capabilities;
-};
-struct pnp_isa_config_struc {
-	__u8 revision;
-	__u8 no_csns;
-	__u16 isa_rd_data_port;
-	__u16 reserved;
-};
-struct escd_info_struc {
-	__u16 min_escd_write_size;
-	__u16 escd_size;
-	__u32 nv_storage_base;
-};
-struct pnp_bios_node {
-	__u16 size;
-	__u8 handle;
-	__u32 eisa_id;
-	__u8 type_code[3];
-	__u16 flags;
-	__u8 data[0];
-};
-#pragma pack()
-
-#ifdef CONFIG_PNPBIOS
-
-/* non-exported */
-extern struct pnp_dev_node_info node_info;
-
-extern int pnp_bios_dev_node_info(struct pnp_dev_node_info *data);
-extern int pnp_bios_get_dev_node(u8 *nodenum, char config,
-				 struct pnp_bios_node *data);
-extern int pnp_bios_set_dev_node(u8 nodenum, char config,
-				 struct pnp_bios_node *data);
-extern int pnp_bios_get_stat_res(char *info);
-extern int pnp_bios_isapnp_config(struct pnp_isa_config_struc *data);
-extern int pnp_bios_escd_info(struct escd_info_struc *data);
-extern int pnp_bios_read_escd(char *data, u32 nvram_base);
-extern int pnp_bios_dock_station_info(struct pnp_docking_station_info *data);
-
-#endif /* CONFIG_PNPBIOS */
-
-#endif /* __KERNEL__ */
-
-#endif /* _LINUX_PNPBIOS_H */

-- 

^ permalink raw reply	[flat|nested] 80+ messages in thread

* Re: [patch 21/54] PNP: add debug when assigning PNP resources
  2008-04-25 18:38 ` [patch 21/54] PNP: add debug when assigning PNP resources Bjorn Helgaas
@ 2008-04-26 21:26   ` Rene Herman
  2008-04-28 15:25     ` Bjorn Helgaas
  0 siblings, 1 reply; 80+ messages in thread
From: Rene Herman @ 2008-04-26 21:26 UTC (permalink / raw)
  To: Bjorn Helgaas
  Cc: Len Brown, linux-acpi, linux-kernel, Adam Belay, Adam M Belay,
	Li Shaohua, Matthieu Castet, Thomas Renninger, Jaroslav Kysela,
	Andrew Morton

On 25-04-08 20:38, Bjorn Helgaas wrote:

Comments inline:

> This patch adds code to dump PNP resources before and after
> assigning resources and before writing them to the device.
> 
> This is enabled by CONFIG_PNP_DEBUG=y.
> 
> Signed-off-by: Bjorn Helgaas <bjorn.helgaas@hp.com>
> 
> Index: work10/drivers/pnp/base.h
> ===================================================================
> --- work10.orig/drivers/pnp/base.h	2008-04-25 11:14:51.000000000 -0600
> +++ work10/drivers/pnp/base.h	2008-04-25 11:14:57.000000000 -0600
> @@ -16,3 +16,5 @@
>  int pnp_check_mem(struct pnp_dev * dev, int idx);
>  int pnp_check_irq(struct pnp_dev * dev, int idx);
>  int pnp_check_dma(struct pnp_dev * dev, int idx);
> +
> +void dbg_pnp_show_resources(struct pnp_dev *dev, char *desc);
> Index: work10/drivers/pnp/support.c
> ===================================================================
> --- work10.orig/drivers/pnp/support.c	2008-04-25 11:14:48.000000000 -0600
> +++ work10/drivers/pnp/support.c	2008-04-25 11:14:57.000000000 -0600
> @@ -51,3 +51,44 @@
>  	str[6] = hex_asc((id >>  0) & 0xf);
>  	str[7] = '\0';
>  }
> +
> +#ifdef DEBUG
> +void dbg_pnp_show_resources(struct pnp_dev *dev, char *desc)
> +{
> +	struct resource *res;
> +	int i;
> +
> +	dev_dbg(&dev->dev, "current resources: %s\n", desc);
> +
> +	for (i = 0; i < PNP_MAX_IRQ; i++) {
> +		res = &dev->res.irq_resource[i];
> +		if (!(res->flags & IORESOURCE_UNSET))
> +			dev_dbg(&dev->dev, "  irq %lld flags 0x%lx\n",
> +				(unsigned long long) res->start, res->flags);
> +	}
> +	for (i = 0; i < PNP_MAX_DMA; i++) {
> +		res = &dev->res.dma_resource[i];
> +		if (!(res->flags & IORESOURCE_UNSET))
> +			dev_dbg(&dev->dev, "  dma %lld flags 0x%lx\n",
> +				(unsigned long long) res->start, res->flags);
> +	}
> +	for (i = 0; i < PNP_MAX_PORT; i++) {
> +		res = &dev->res.port_resource[i];
> +		if (!(res->flags & IORESOURCE_UNSET))
> +			dev_dbg(&dev->dev, "  io  0x%llx-0x%llx flags 0x%lx\n",
> +				(unsigned long long) res->start,
> +				(unsigned long long) res->end, res->flags);
> +	}
> +	for (i = 0; i < PNP_MAX_MEM; i++) {
> +		res = &dev->res.mem_resource[i];
> +		if (!(res->flags & IORESOURCE_UNSET))
> +			dev_dbg(&dev->dev, "  mem 0x%llx-0x%llx flags 0x%lx\n",
> +				(unsigned long long) res->start,
> +				(unsigned long long) res->end, res->flags);
> +	}
> +}
> +#else
> +void dbg_pnp_show_resources(struct pnp_dev *dev, char *desc)
> +{
> +}
> +#endif

Not too important, but #ifdef could be inside body.

> Index: work10/drivers/pnp/manager.c
> ===================================================================
> --- work10.orig/drivers/pnp/manager.c	2008-04-25 11:14:55.000000000 -0600
> +++ work10/drivers/pnp/manager.c	2008-04-25 11:14:57.000000000 -0600
> @@ -28,20 +28,25 @@
>  		return 1;
>  	}
>  
> -	/* check if this resource has been manually set, if so skip */
> -	if (!(dev->res.port_resource[idx].flags & IORESOURCE_AUTO))
> -		return 1;
> -
>  	start = &dev->res.port_resource[idx].start;
>  	end = &dev->res.port_resource[idx].end;
>  	flags = &dev->res.port_resource[idx].flags;
>  
> +	/* check if this resource has been manually set, if so skip */
> +	if (!(dev->res.port_resource[idx].flags & IORESOURCE_AUTO)) {
> +		dev_dbg(&dev->dev, "  io %d already set to 0x%llx-0x%llx "
> +			"flags 0x%x\n", idx, (unsigned long long) *start,
> +			(unsigned long long) *end, (int) *flags);

I wanted to ask/comment why you're casting the flags to int though. It's an 
unsigned long, both in the resource and by type here. Ie, 0x%lx and no 
casting? (I btw also like %#lx better then the explicit 0x, but that doesn't 
really matter).

> +		return 1;
> +	}
> +
>  	/* set the initial values */
>  	*flags |= rule->flags | IORESOURCE_IO;
>  	*flags &= ~IORESOURCE_UNSET;
>  
>  	if (!rule->size) {
>  		*flags |= IORESOURCE_DISABLED;
> +		dev_dbg(&dev->dev, "  io %d disabled\n", idx);
>  		return 1;	/* skip disabled resource requests */
>  	}
>  
> @@ -52,9 +57,13 @@
>  	while (!pnp_check_port(dev, idx)) {
>  		*start += rule->align;
>  		*end = *start + rule->size - 1;
> -		if (*start > rule->max || !rule->align)
> +		if (*start > rule->max || !rule->align) {
> +			dev_dbg(&dev->dev, "  couldn't assign io %d\n", idx);
>  			return 0;
> +		}
>  	}
> +	dev_dbg(&dev->dev, "  assign io  %d 0x%llx-0x%llx\n", idx,
> +		(unsigned long long) *start, (unsigned long long) *end);
>  	return 1;
>  }
>  
> @@ -69,14 +78,18 @@
>  		return 1;
>  	}
>  
> -	/* check if this resource has been manually set, if so skip */
> -	if (!(dev->res.mem_resource[idx].flags & IORESOURCE_AUTO))
> -		return 1;
> -
>  	start = &dev->res.mem_resource[idx].start;
>  	end = &dev->res.mem_resource[idx].end;
>  	flags = &dev->res.mem_resource[idx].flags;
>  
> +	/* check if this resource has been manually set, if so skip */
> +	if (!(dev->res.mem_resource[idx].flags & IORESOURCE_AUTO)) {
> +		dev_dbg(&dev->dev, "  mem %d already set to 0x%llx-0x%llx "
> +			"flags 0x%x\n", idx, (unsigned long long) *start,
> +			(unsigned long long) *end, (int) *flags);

Ditto.

> +		return 1;
> +	}
> +
>  	/* set the initial values */
>  	*flags |= rule->flags | IORESOURCE_MEM;
>  	*flags &= ~IORESOURCE_UNSET;
> @@ -93,6 +106,7 @@
>  
>  	if (!rule->size) {
>  		*flags |= IORESOURCE_DISABLED;
> +		dev_dbg(&dev->dev, "  mem %d disabled\n", idx);
>  		return 1;	/* skip disabled resource requests */
>  	}
>  
> @@ -103,9 +117,13 @@
>  	while (!pnp_check_mem(dev, idx)) {
>  		*start += rule->align;
>  		*end = *start + rule->size - 1;
> -		if (*start > rule->max || !rule->align)
> +		if (*start > rule->max || !rule->align) {
> +			dev_dbg(&dev->dev, "  couldn't assign mem %d\n", idx);
>  			return 0;
> +		}
>  	}
> +	dev_dbg(&dev->dev, "  assign mem %d 0x%llx-0x%llx\n", idx,
> +		(unsigned long long) *start, (unsigned long long) *end);
>  	return 1;
>  }
>  
> @@ -126,20 +144,24 @@
>  		return 1;
>  	}
>  
> -	/* check if this resource has been manually set, if so skip */
> -	if (!(dev->res.irq_resource[idx].flags & IORESOURCE_AUTO))
> -		return 1;
> -
>  	start = &dev->res.irq_resource[idx].start;
>  	end = &dev->res.irq_resource[idx].end;
>  	flags = &dev->res.irq_resource[idx].flags;
>  
> +	/* check if this resource has been manually set, if so skip */
> +	if (!(dev->res.irq_resource[idx].flags & IORESOURCE_AUTO)) {
> +		dev_dbg(&dev->dev, "  irq %d already set to %d flags 0x%x\n",
> +			idx, (int) *start, (int) *flags);

Ditto.

> +		return 1;
> +	}
> +
>  	/* set the initial values */
>  	*flags |= rule->flags | IORESOURCE_IRQ;
>  	*flags &= ~IORESOURCE_UNSET;
>  
>  	if (bitmap_empty(rule->map, PNP_IRQ_NR)) {
>  		*flags |= IORESOURCE_DISABLED;
> +		dev_dbg(&dev->dev, "  irq %d disabled\n", idx);
>  		return 1;	/* skip disabled resource requests */
>  	}
>  
> @@ -147,15 +169,20 @@
>  	*start = find_next_bit(rule->map, PNP_IRQ_NR, 16);
>  	if (*start < PNP_IRQ_NR) {
>  		*end = *start;
> +		dev_dbg(&dev->dev, "  assign irq %d %d\n", idx, (int) *start);
>  		return 1;
>  	}
>  	for (i = 0; i < 16; i++) {
>  		if (test_bit(xtab[i], rule->map)) {
>  			*start = *end = xtab[i];
> -			if (pnp_check_irq(dev, idx))
> +			if (pnp_check_irq(dev, idx)) {
> +				dev_dbg(&dev->dev, "  assign irq %d %d\n", idx,
> +					(int) *start);
>  				return 1;
> +			}
>  		}
>  	}
> +	dev_dbg(&dev->dev, "  couldn't assign irq %d\n", idx);
>  	return 0;
>  }
>  
> @@ -175,14 +202,17 @@
>  		return;
>  	}
>  
> -	/* check if this resource has been manually set, if so skip */
> -	if (!(dev->res.dma_resource[idx].flags & IORESOURCE_AUTO))
> -		return;
> -
>  	start = &dev->res.dma_resource[idx].start;
>  	end = &dev->res.dma_resource[idx].end;
>  	flags = &dev->res.dma_resource[idx].flags;
>  
> +	/* check if this resource has been manually set, if so skip */
> +	if (!(dev->res.dma_resource[idx].flags & IORESOURCE_AUTO)) {
> +		dev_dbg(&dev->dev, "  dma %d already set to %d flags 0x%x\n",
> +			idx, (int) *start, (int) *flags);

... and ditto.

Rene

^ permalink raw reply	[flat|nested] 80+ messages in thread

* Re: [patch 26/54] PNP: factor pnp_init_resource_table() and pnp_clean_resource_table()
  2008-04-25 18:38 ` [patch 26/54] PNP: factor pnp_init_resource_table() and pnp_clean_resource_table() Bjorn Helgaas
@ 2008-04-26 21:33   ` Rene Herman
  2008-04-28 17:15     ` Bjorn Helgaas
  0 siblings, 1 reply; 80+ messages in thread
From: Rene Herman @ 2008-04-26 21:33 UTC (permalink / raw)
  To: Bjorn Helgaas
  Cc: Len Brown, linux-acpi, linux-kernel, Adam Belay, Adam M Belay,
	Li Shaohua, Matthieu Castet, Thomas Renninger, Jaroslav Kysela,
	Andrew Morton

On 25-04-08 20:38, Bjorn Helgaas wrote:

>  void pnp_init_resources(struct pnp_dev *dev)
>  {
> -	struct pnp_resource_table *table = &dev->res;
> +	struct resource *res;
>  	int idx;
>  
>  	for (idx = 0; idx < PNP_MAX_IRQ; idx++) {
> -		table->irq_resource[idx].name = NULL;
> -		table->irq_resource[idx].start = -1;
> -		table->irq_resource[idx].end = -1;
> -		table->irq_resource[idx].flags =
> -		    IORESOURCE_IRQ | IORESOURCE_AUTO | IORESOURCE_UNSET;
> +		res = &dev->res.irq_resource[idx];
> +		res->flags = IORESOURCE_IRQ;

ACK as commented earlier but pnp_clean_resource_table would seem to want the 
same treatment of setting the type, at least to again guarantee current 
behaviour:

>  static void pnp_clean_resource_table(struct pnp_dev *dev)
>  {
> -	struct pnp_resource_table *res = &dev->res;
> +	struct resource *res;
>  	int idx;
>  
>  	for (idx = 0; idx < PNP_MAX_IRQ; idx++) {
> -		if (!(res->irq_resource[idx].flags & IORESOURCE_AUTO))
> -			continue;
> -		res->irq_resource[idx].start = -1;
> -		res->irq_resource[idx].end = -1;
> -		res->irq_resource[idx].flags =
> -		    IORESOURCE_IRQ | IORESOURCE_AUTO | IORESOURCE_UNSET;
> +		res = &dev->res.irq_resource[idx];
> +		if (res->flags & IORESOURCE_AUTO)
> +			pnp_init_resource(res);
>  	}

Rene.

^ permalink raw reply	[flat|nested] 80+ messages in thread

* Re: [patch 29/54] PNP: convert resource accessors to use pnp_get_resource(), not pnp_resource_table
  2008-04-25 18:38 ` [patch 29/54] PNP: convert resource accessors to use pnp_get_resource(), not pnp_resource_table Bjorn Helgaas
@ 2008-04-26 21:42   ` Rene Herman
  2008-04-28 17:19     ` Bjorn Helgaas
  0 siblings, 1 reply; 80+ messages in thread
From: Rene Herman @ 2008-04-26 21:42 UTC (permalink / raw)
  To: Bjorn Helgaas
  Cc: Len Brown, linux-acpi, linux-kernel, Adam Belay, Adam M Belay,
	Li Shaohua, Matthieu Castet, Thomas Renninger, Jaroslav Kysela,
	Andrew Morton

On 25-04-08 20:38, Bjorn Helgaas wrote:

> +static inline resource_size_t pnp_port_flags(struct pnp_dev *dev,
> +static inline resource_size_t pnp_mem_flags(struct pnp_dev *dev,
> +static inline resource_size_t pnp_irq_flags(struct pnp_dev *dev,
> +static inline resource_size_t pnp_dma_flags(struct pnp_dev *dev,

These should return unsigned long.

Rene.

^ permalink raw reply	[flat|nested] 80+ messages in thread

* Re: [patch 38/54] PNP: remove PNP_MAX_* uses
  2008-04-25 18:38 ` [patch 38/54] PNP: remove PNP_MAX_* uses Bjorn Helgaas
@ 2008-04-26 22:10   ` Rene Herman
  0 siblings, 0 replies; 80+ messages in thread
From: Rene Herman @ 2008-04-26 22:10 UTC (permalink / raw)
  To: Bjorn Helgaas
  Cc: Len Brown, linux-acpi, linux-kernel, Adam Belay, Adam M Belay,
	Li Shaohua, Matthieu Castet, Thomas Renninger, Jaroslav Kysela,
	Andrew Morton

On 25-04-08 20:38, Bjorn Helgaas wrote:

> +#define set(flags)      ((flags & IORESOURCE_UNSET) == 0)
> +
>  static ssize_t pnp_show_current_resources(struct device *dmdev,
>  					  struct device_attribute *attr,
>  					  char *buf)
>  {
>  	struct pnp_dev *dev = to_pnp_dev(dmdev);
> +	struct resource *res;
>  	int i, ret;
>  	pnp_info_buffer_t *buffer;
>  
> @@ -267,50 +270,46 @@
>  	else
>  		pnp_printf(buffer, "disabled\n");
>  
> -	for (i = 0; i < PNP_MAX_PORT; i++) {
> -		if (pnp_port_valid(dev, i)) {
> +	for (i = 0; (res = pnp_get_resource(dev, IORESOURCE_IO, i)); i++) {
> +		if (set(res->flags)) {


You've at this point already introduced the pnp_resource_valid() inline. Use 
here maybe? (also other locations here)

Rene.

^ permalink raw reply	[flat|nested] 80+ messages in thread

* Re: [patch 41/54] PNP: remove pnp_resource_table references from resource decoders
  2008-04-25 18:38 ` [patch 41/54] PNP: remove pnp_resource_table references from resource decoders Bjorn Helgaas
@ 2008-04-26 22:28   ` Rene Herman
  2008-04-28 20:36     ` Bjorn Helgaas
  0 siblings, 1 reply; 80+ messages in thread
From: Rene Herman @ 2008-04-26 22:28 UTC (permalink / raw)
  To: Bjorn Helgaas
  Cc: Len Brown, linux-acpi, linux-kernel, Adam Belay, Adam M Belay,
	Li Shaohua, Matthieu Castet, Thomas Renninger, Jaroslav Kysela,
	Andrew Morton

On 25-04-08 20:38, Bjorn Helgaas wrote:

> Index: work10/drivers/pnp/pnpacpi/rsparser.c
> ===================================================================
> --- work10.orig/drivers/pnp/pnpacpi/rsparser.c	2008-04-25 11:15:08.000000000 -0600
> +++ work10/drivers/pnp/pnpacpi/rsparser.c	2008-04-25 11:15:09.000000000 -0600
> @@ -82,8 +82,8 @@
>  						u32 gsi, int triggering,
>  						int polarity, int shareable)
>  {
> -	struct pnp_resource_table *res = dev->res;
> -	int i = 0;
> +	struct resource *res;
> +	int i;
>  	int irq;
>  	int p, t;
>  	static unsigned char warned;
> @@ -91,9 +91,11 @@
>  	if (!valid_IRQ(gsi))
>  		return;
>  
> -	while (!(res->irq_resource[i].flags & IORESOURCE_UNSET) &&
> -	       i < PNP_MAX_IRQ)
> -		i++;
> +	for (i = 0; i < PNP_MAX_IRQ; i++) {
> +		res = &dev->res->irq_resource[i];
> +		if (res->flags & IORESOURCE_UNSET)
> +			break;
> +	}

Another possible user of pnp_resource_valid.

> +	for (i = 0; i < PNP_MAX_DMA; i++) {
> +		res = &dev->res->dma_resource[i];
> +		if (res->flags & IORESOURCE_UNSET)
> +			break;
> +	}

.

> +	for (i = 0; i < PNP_MAX_PORT; i++) {
> +		res = &dev->res->port_resource[i];
> +		if (res->flags & IORESOURCE_UNSET)
> +			break;
> +	}

.

> +	for (i = 0; i < PNP_MAX_MEM; i++) {
> +		res = &dev->res->mem_resource[i];
> +		if (res->flags & IORESOURCE_UNSET)
> +			break;
> +	}

.

> Index: work10/drivers/pnp/pnpbios/rsparser.c
> ===================================================================
> --- work10.orig/drivers/pnp/pnpbios/rsparser.c	2008-04-25 11:15:08.000000000 -0600
> +++ work10/drivers/pnp/pnpbios/rsparser.c	2008-04-25 11:15:09.000000000 -0600
> @@ -56,80 +56,90 @@
>  
>  static void pnpbios_parse_allocated_irqresource(struct pnp_dev *dev, int irq)
>  {
> -	struct pnp_resource_table *res = dev->res;
> -	int i = 0;
> +	struct resource *res;
> +	int i;
> +
> +	for (i = 0; i < PNP_MAX_IRQ; i++) {
> +		res = &dev->res->irq_resource[i];
> +		if (res->flags & IORESOURCE_UNSET)
> +			break;
> +	}

.

> +	for (i = 0; i < PNP_MAX_DMA; i++) {
> +		res = &dev->res->dma_resource[i];
> +		if (res->flags & IORESOURCE_UNSET)
> +			break;
> +	}

.

> +	for (i = 0; i < PNP_MAX_PORT; i++) {
> +		res = &dev->res->port_resource[i];
> +		if (res->flags & IORESOURCE_UNSET)
> +			break;
> +	}

.

> +	for (i = 0; i < PNP_MAX_MEM; i++) {
> +		res = &dev->res->mem_resource[i];
> +		if (res->flags & IORESOURCE_UNSET)
> +			break;
> +	}

.

Rene


^ permalink raw reply	[flat|nested] 80+ messages in thread

* Re: [patch 44/54] PNP: add pnp_new_resource() to find a new unset pnp_resource
  2008-04-25 18:38 ` [patch 44/54] PNP: add pnp_new_resource() to find a new unset pnp_resource Bjorn Helgaas
@ 2008-04-26 22:37   ` Rene Herman
  2008-04-28 20:43     ` Bjorn Helgaas
  0 siblings, 1 reply; 80+ messages in thread
From: Rene Herman @ 2008-04-26 22:37 UTC (permalink / raw)
  To: Bjorn Helgaas
  Cc: Len Brown, linux-acpi, linux-kernel, Adam Belay, Adam M Belay,
	Li Shaohua, Matthieu Castet, Thomas Renninger, Jaroslav Kysela,
	Andrew Morton

On 25-04-08 20:38, Bjorn Helgaas wrote:

> +	switch (type) {
> +	case IORESOURCE_IO:
> +		for (i = 0; i < PNP_MAX_PORT; i++) {
> +			pnp_res = &dev->res->port[i];
> +			res = &pnp_res->res;
> +			if (res->flags & IORESOURCE_UNSET)
> +				return pnp_res;

Again possible users of pnp_resource_valid().

> +		}
> +		break;
> +	case IORESOURCE_MEM:
> +		for (i = 0; i < PNP_MAX_MEM; i++) {
> +			pnp_res = &dev->res->mem[i];
> +			res = &pnp_res->res;
> +			if (res->flags & IORESOURCE_UNSET)
> +				return pnp_res;
> +		}
> +		break;
> +	case IORESOURCE_IRQ:
> +		for (i = 0; i < PNP_MAX_IRQ; i++) {
> +			pnp_res = &dev->res->irq[i];
> +			res = &pnp_res->res;
> +			if (res->flags & IORESOURCE_UNSET)
> +				return pnp_res;
> +		}
> +		break;
> +	case IORESOURCE_DMA:
> +		for (i = 0; i < PNP_MAX_DMA; i++) {
> +			pnp_res = &dev->res->dma[i];
> +			res = &pnp_res->res;
> +			if (res->flags & IORESOURCE_UNSET)
> +				return pnp_res;
> +		}
> +		break;
> +	}
> +	return NULL;
> +}
> +

Rene

^ permalink raw reply	[flat|nested] 80+ messages in thread

* Re: [patch 50/54] ISAPNP: fold isapnp_read_resources() back into isapnp_get_resources()
  2008-04-25 18:38 ` [patch 50/54] ISAPNP: fold isapnp_read_resources() back into isapnp_get_resources() Bjorn Helgaas
@ 2008-04-26 23:07   ` Rene Herman
  2008-04-28 21:07     ` Bjorn Helgaas
  0 siblings, 1 reply; 80+ messages in thread
From: Rene Herman @ 2008-04-26 23:07 UTC (permalink / raw)
  To: Bjorn Helgaas
  Cc: Len Brown, linux-acpi, linux-kernel, Adam Belay, Adam M Belay,
	Li Shaohua, Matthieu Castet, Thomas Renninger, Jaroslav Kysela,
	Andrew Morton

On 25-04-08 20:38, Bjorn Helgaas wrote:

> +	for (i = 0; i < ISAPNP_MAX_MEM; i++) {
> +		ret = isapnp_read_word(ISAPNP_CFG_MEM + (i << 3)) << 8;
> +		if (!ret)
> +			continue;
> +		pnp_res = pnp_add_mem_resource(dev, ret, ret, 0);
> +		if (pnp_res)
> +			pnp_res->index = i;
> +	}
> +	for (i = 0; i < ISAPNP_MAX_IRQ; i++) {
> +		ret = (isapnp_read_word(ISAPNP_CFG_IRQ + (i << 1)) >>
> +		     8);

Truly trivial, but if you kill the useless outer (), it fits on one line...

Rene

^ permalink raw reply	[flat|nested] 80+ messages in thread

* Re: [patch 00/54] PNP cleanup, v4
  2008-04-25 18:38 [patch 00/54] PNP cleanup, v4 Bjorn Helgaas
                   ` (53 preceding siblings ...)
  2008-04-25 18:39 ` [patch 54/54] PNPBIOS: remove include/linux/pnpbios.h Bjorn Helgaas
@ 2008-04-26 23:34 ` Rene Herman
  2008-04-26 23:47   ` Rene Herman
  54 siblings, 1 reply; 80+ messages in thread
From: Rene Herman @ 2008-04-26 23:34 UTC (permalink / raw)
  To: Bjorn Helgaas
  Cc: Len Brown, linux-acpi, linux-kernel, Adam Belay, Adam M Belay,
	Li Shaohua, Matthieu Castet, Thomas Renninger, Jaroslav Kysela,
	Andrew Morton

On 25-04-08 20:38, Bjorn Helgaas wrote:

> I'm still working through some issues with removing the
> fixed pnp_resource_table.  But I'd like to get some of
> the earlier patches off my plate, so here they are. 

Good idea...

[patch 01/54] PNP: turn on -DDEBUG when CONFIG_PNP_DEBUG is set
[patch 06/54] PNP: add pnp_eisa_id_to_string()
[patch 07/54] PNP: add pnp_alloc_dev()
[patch 17/54] PNP: add debug output to option registration
[patch 20/54] PNP: add debug output to encoders
[patch 28/54] PNP: remove pnp_mem_flags() as an lvalue
[patch 31/54] PNP: reduce redundancy in pnp_assign_port() and others
[patch 32/54] PNP: reduce redundancy in pnp_check_port() and others
[patch 33/54] PNP: reduce redundancy in pnp_set_current_resources()
[patch 34/54] PNP: check for conflicts with all resources, not just earlier 
[patch 35/54] PNP: pass resources, not indexes, to pnp_check_port(), et al
[patch 36/54] PNP: convert resource checks to use pnp_get_resource(), not
[patch 37/54] PNP: convert encoders to use pnp_get_resource(), not
[patch 40/54] PNP: make pnp_resource_table private to PNP core
[patch 42/54] PNP: add struct pnp_resource
[patch 43/54] PNP: add pnp_resource index for ISAPNP
[patch 45/54] PNP: make generic pnp_add_irq_resource()
[patch 46/54] PNP: make generic pnp_add_dma_resource()
[patch 47/54] PNP: make generic pnp_add_io_resource()
[patch 48/54] PNP: make generic pnp_add_mem_resource()
[patch 49/54] PNP: use pnp_get_pnp_resource() in resource assignment
[patch 51/54] PNPACPI: move _CRS/_PRS warnings closer to the action
[patch 52/54] PNP: make interfaces private to the PNP core
[patch 53/54] ISAPNP: remove unused pnp_dev->regs field
[patch 54/54] PNPBIOS: remove include/linux/pnpbios.

All of the above Acked-By: Rene Herman <rene.herman@gmail.com>

[patch 21/54] PNP: add debug when assigning PNP resources
[patch 26/54] PNP: factor pnp_init_resource_table() and
[patch 29/54] PNP: convert resource accessors to use pnp_get_resource(), not
[patch 38/54] PNP: remove PNP_MAX_* uses
[patch 41/54] PNP: remove pnp_resource_table references from resource
[patch 44/54] PNP: add pnp_new_resource() to find a new unset pnp_resource
[patch 50/54] ISAPNP: fold isapnp_read_resources() back into

The above just now commented on...

[patch 02/54] ISAPNP: move config register addresses out of isapnp.h
[patch 04/54] PNP: make pnp_add_id() internal to PNP core
[patch 05/54] PNP: change pnp_add_id() to allocate its own pnp_id structures
[patch 08/54] PNP: make pnp_add_card_id() internal to PNP core
[patch 09/54] PNP: change pnp_add_card_id() to allocate its own pnp_id
[patch 10/54] ISAPNP: pull pnp_add_card_id() out of isapnp_parse_card_id()
[patch 11/54] PNP: add pnp_alloc_card()
[patch 13/54] PNPACPI: use temporaries to reduce repetition
[patch 14/54] PNPACPI: hoist dma_flags() out of
[patch 15/54] PNPACPI: extend irq_flags() to set IORESOURCE_IRQ_SHAREABLE
[patch 16/54] PNPACPI: pass pnp_dev instead of acpi_handle
[patch 18/54] PNP: remove pnp_resource_table from internal get/set
[patch 19/54] PNP: remove more pnp_resource_table arguments
[patch 22/54] PNP: add pnp_init_resources(struct pnp_dev *) interface
[patch 23/54] PNP: remove pnp_resource_table from internal
[patch 24/54] PNP: remove unused interfaces using pnp_resource_table
[patch 25/54] PNP: use dev_printk when possible
[patch 27/54] PNP: add pnp_get_resource() interface
[patch 30/54] PNP: use conventional "i" for loop indices
[patch 39/54] rtc: dont reference pnp_resource_table directly

The above already had my Acked-By.

[patch 03/54] PNPACPI: continue after _CRS and _PRS errors
[patch 12/54] PNPACPI: pnpacpi_encode_ext_irq() wrongly set "irq" instead of

The above no opinion.

The series has also been (lightly) tested with ISA-PnP on two machines.

Rene.

^ permalink raw reply	[flat|nested] 80+ messages in thread

* Re: [patch 00/54] PNP cleanup, v4
  2008-04-26 23:34 ` [patch 00/54] PNP cleanup, v4 Rene Herman
@ 2008-04-26 23:47   ` Rene Herman
  2008-04-28 21:16     ` Bjorn Helgaas
  0 siblings, 1 reply; 80+ messages in thread
From: Rene Herman @ 2008-04-26 23:47 UTC (permalink / raw)
  To: Bjorn Helgaas
  Cc: Len Brown, linux-acpi, linux-kernel, Adam Belay, Adam M Belay,
	Li Shaohua, Matthieu Castet, Thomas Renninger, Jaroslav Kysela,
	Andrew Morton

[-- Attachment #1: Type: text/plain, Size: 166 bytes --]

On 27-04-08 01:34, Rene Herman wrote:

> Good idea...

By the way, would you terribly mind submitting this alongside? It's been 
ages since we heard from Adam.

Rene

[-- Attachment #2: pnp-maintainer.diff --]
[-- Type: text/plain, Size: 299 bytes --]

diff --git a/MAINTAINERS b/MAINTAINERS
index a942f38..7b10551 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -3171,8 +3171,8 @@ L:	netdev@vger.kernel.org
 S:	Maintained
 
 PNP SUPPORT
-P:	Adam Belay
-M:	ambx1@neo.rr.com
+P:	Bjorn Helgaas
+M:	bjorn.helgaas@hp.com
 S:	Maintained
 
 PNXxxxx I2C DRIVER

^ permalink raw reply related	[flat|nested] 80+ messages in thread

* Re: [patch 21/54] PNP: add debug when assigning PNP resources
  2008-04-26 21:26   ` Rene Herman
@ 2008-04-28 15:25     ` Bjorn Helgaas
  0 siblings, 0 replies; 80+ messages in thread
From: Bjorn Helgaas @ 2008-04-28 15:25 UTC (permalink / raw)
  To: Rene Herman
  Cc: Len Brown, linux-acpi, linux-kernel, Adam Belay, Adam M Belay,
	Li Shaohua, Matthieu Castet, Thomas Renninger, Jaroslav Kysela,
	Andrew Morton

On Saturday 26 April 2008 03:26:20 pm Rene Herman wrote:
> On 25-04-08 20:38, Bjorn Helgaas wrote:
> > +#else
> > +void dbg_pnp_show_resources(struct pnp_dev *dev, char *desc)
> > +{
> > +}
> > +#endif
> 
> Not too important, but #ifdef could be inside body.

Much nicer, thanks.

I'll add your updates and acks and repost this series today.

> > +		dev_dbg(&dev->dev, "  io %d already set to 0x%llx-0x%llx "
> > +			"flags 0x%x\n", idx, (unsigned long long) *start,
> > +			(unsigned long long) *end, (int) *flags);
> 
> I wanted to ask/comment why you're casting the flags to int though. It's an 
> unsigned long, both in the resource and by type here. Ie, 0x%lx and no 
> casting? (I btw also like %#lx better then the explicit 0x, but that doesn't 
> really matter).

Two more good ideas.  The cast was just me not paying attention, and
the "0x%x" habit is deeply ingrained.  I'll change both.

Bjorn


^ permalink raw reply	[flat|nested] 80+ messages in thread

* Re: [patch 26/54] PNP: factor pnp_init_resource_table() and pnp_clean_resource_table()
  2008-04-26 21:33   ` Rene Herman
@ 2008-04-28 17:15     ` Bjorn Helgaas
  0 siblings, 0 replies; 80+ messages in thread
From: Bjorn Helgaas @ 2008-04-28 17:15 UTC (permalink / raw)
  To: Rene Herman
  Cc: Len Brown, linux-acpi, linux-kernel, Adam Belay, Adam M Belay,
	Li Shaohua, Matthieu Castet, Thomas Renninger, Jaroslav Kysela,
	Andrew Morton

On Saturday 26 April 2008 03:33:16 pm Rene Herman wrote:
> On 25-04-08 20:38, Bjorn Helgaas wrote:
> 
> >  void pnp_init_resources(struct pnp_dev *dev)
> >  {
> > -	struct pnp_resource_table *table = &dev->res;
> > +	struct resource *res;
> >  	int idx;
> >  
> >  	for (idx = 0; idx < PNP_MAX_IRQ; idx++) {
> > -		table->irq_resource[idx].name = NULL;
> > -		table->irq_resource[idx].start = -1;
> > -		table->irq_resource[idx].end = -1;
> > -		table->irq_resource[idx].flags =
> > -		    IORESOURCE_IRQ | IORESOURCE_AUTO | IORESOURCE_UNSET;
> > +		res = &dev->res.irq_resource[idx];
> > +		res->flags = IORESOURCE_IRQ;
> 
> ACK as commented earlier but pnp_clean_resource_table would seem to want the 
> same treatment of setting the type, at least to again guarantee current 
> behaviour:

We always initialize the type in pnp_init_resources(), and while we
do fiddle with some of the other bits in the flags element, I can't
see anyplace where we would clear the type.

But I did add code to set the type in pnp_clean_resource_table(),
just in case.  It could be hard to debug a problem there, and it's
harmless to set it again.

Bjorn

^ permalink raw reply	[flat|nested] 80+ messages in thread

* Re: [patch 29/54] PNP: convert resource accessors to use pnp_get_resource(), not pnp_resource_table
  2008-04-26 21:42   ` Rene Herman
@ 2008-04-28 17:19     ` Bjorn Helgaas
  0 siblings, 0 replies; 80+ messages in thread
From: Bjorn Helgaas @ 2008-04-28 17:19 UTC (permalink / raw)
  To: Rene Herman
  Cc: Len Brown, linux-acpi, linux-kernel, Adam Belay, Adam M Belay,
	Li Shaohua, Matthieu Castet, Thomas Renninger, Jaroslav Kysela,
	Andrew Morton

On Saturday 26 April 2008 03:42:19 pm Rene Herman wrote:
> On 25-04-08 20:38, Bjorn Helgaas wrote:
> 
> > +static inline resource_size_t pnp_port_flags(struct pnp_dev *dev,
> > +static inline resource_size_t pnp_mem_flags(struct pnp_dev *dev,
> > +static inline resource_size_t pnp_irq_flags(struct pnp_dev *dev,
> > +static inline resource_size_t pnp_dma_flags(struct pnp_dev *dev,
> 
> These should return unsigned long.

Fixed, thanks. 

Bjorn

^ permalink raw reply	[flat|nested] 80+ messages in thread

* Re: [patch 41/54] PNP: remove pnp_resource_table references from resource decoders
  2008-04-26 22:28   ` Rene Herman
@ 2008-04-28 20:36     ` Bjorn Helgaas
  2008-04-28 20:41       ` Rene Herman
  0 siblings, 1 reply; 80+ messages in thread
From: Bjorn Helgaas @ 2008-04-28 20:36 UTC (permalink / raw)
  To: Rene Herman
  Cc: Len Brown, linux-acpi, linux-kernel, Adam Belay, Adam M Belay,
	Li Shaohua, Matthieu Castet, Thomas Renninger, Jaroslav Kysela,
	Andrew Morton

On Saturday 26 April 2008 04:28:13 pm Rene Herman wrote:
> On 25-04-08 20:38, Bjorn Helgaas wrote:
> 
> > Index: work10/drivers/pnp/pnpacpi/rsparser.c
> > ===================================================================
> > --- work10.orig/drivers/pnp/pnpacpi/rsparser.c	2008-04-25 11:15:08.000000000 -0600
> > +++ work10/drivers/pnp/pnpacpi/rsparser.c	2008-04-25 11:15:09.000000000 -0600
> > @@ -82,8 +82,8 @@
> >  						u32 gsi, int triggering,
> >  						int polarity, int shareable)
> >  {
> > -	struct pnp_resource_table *res = dev->res;
> > -	int i = 0;
> > +	struct resource *res;
> > +	int i;
> >  	int irq;
> >  	int p, t;
> >  	static unsigned char warned;
> > @@ -91,9 +91,11 @@
> >  	if (!valid_IRQ(gsi))
> >  		return;
> >  
> > -	while (!(res->irq_resource[i].flags & IORESOURCE_UNSET) &&
> > -	       i < PNP_MAX_IRQ)
> > -		i++;
> > +	for (i = 0; i < PNP_MAX_IRQ; i++) {
> > +		res = &dev->res->irq_resource[i];
> > +		if (res->flags & IORESOURCE_UNSET)
> > +			break;
> > +	}
> 
> Another possible user of pnp_resource_valid.

I changed this, and also changed the array lookups to use
pnp_get_resource().  And I made similar changes in ISAPNP.

And I replaced many of these &dev->res->irq_resource[] things
with pnp_get_resource().  This change rippled through several
subsequent patches, but it's just more mechanical changes.

Bjorn


^ permalink raw reply	[flat|nested] 80+ messages in thread

* Re: [patch 41/54] PNP: remove pnp_resource_table references from resource decoders
  2008-04-28 20:36     ` Bjorn Helgaas
@ 2008-04-28 20:41       ` Rene Herman
  0 siblings, 0 replies; 80+ messages in thread
From: Rene Herman @ 2008-04-28 20:41 UTC (permalink / raw)
  To: Bjorn Helgaas
  Cc: Len Brown, linux-acpi, linux-kernel, Adam Belay, Adam M Belay,
	Li Shaohua, Matthieu Castet, Thomas Renninger, Jaroslav Kysela,
	Andrew Morton

On 28-04-08 22:36, Bjorn Helgaas wrote:
> On Saturday 26 April 2008 04:28:13 pm Rene Herman wrote:
>> On 25-04-08 20:38, Bjorn Helgaas wrote:
>>
>>> Index: work10/drivers/pnp/pnpacpi/rsparser.c
>>> ===================================================================
>>> --- work10.orig/drivers/pnp/pnpacpi/rsparser.c	2008-04-25 11:15:08.000000000 -0600
>>> +++ work10/drivers/pnp/pnpacpi/rsparser.c	2008-04-25 11:15:09.000000000 -0600
>>> @@ -82,8 +82,8 @@
>>>  						u32 gsi, int triggering,
>>>  						int polarity, int shareable)
>>>  {
>>> -	struct pnp_resource_table *res = dev->res;
>>> -	int i = 0;
>>> +	struct resource *res;
>>> +	int i;
>>>  	int irq;
>>>  	int p, t;
>>>  	static unsigned char warned;
>>> @@ -91,9 +91,11 @@
>>>  	if (!valid_IRQ(gsi))
>>>  		return;
>>>  
>>> -	while (!(res->irq_resource[i].flags & IORESOURCE_UNSET) &&
>>> -	       i < PNP_MAX_IRQ)
>>> -		i++;
>>> +	for (i = 0; i < PNP_MAX_IRQ; i++) {
>>> +		res = &dev->res->irq_resource[i];
>>> +		if (res->flags & IORESOURCE_UNSET)
>>> +			break;
>>> +	}
>> Another possible user of pnp_resource_valid.
> 
> I changed this, and also changed the array lookups to use
> pnp_get_resource().  And I made similar changes in ISAPNP.
> 
> And I replaced many of these &dev->res->irq_resource[] things
> with pnp_get_resource().  This change rippled through several
> subsequent patches, but it's just more mechanical changes.

Great. If you can do the same thing as previously, and leave out / remove my 
Acked-By from the ones that changed so that I can easily identify them, I'll 
  go over the remaining ones (tomorrow, probably).

Rene.



^ permalink raw reply	[flat|nested] 80+ messages in thread

* Re: [patch 44/54] PNP: add pnp_new_resource() to find a new unset pnp_resource
  2008-04-26 22:37   ` Rene Herman
@ 2008-04-28 20:43     ` Bjorn Helgaas
  0 siblings, 0 replies; 80+ messages in thread
From: Bjorn Helgaas @ 2008-04-28 20:43 UTC (permalink / raw)
  To: Rene Herman
  Cc: Len Brown, linux-acpi, linux-kernel, Adam Belay, Adam M Belay,
	Li Shaohua, Matthieu Castet, Thomas Renninger, Jaroslav Kysela,
	Andrew Morton

On Saturday 26 April 2008 04:37:42 pm Rene Herman wrote:
> On 25-04-08 20:38, Bjorn Helgaas wrote:
> 
> > +	switch (type) {
> > +	case IORESOURCE_IO:
> > +		for (i = 0; i < PNP_MAX_PORT; i++) {
> > +			pnp_res = &dev->res->port[i];
> > +			res = &pnp_res->res;
> > +			if (res->flags & IORESOURCE_UNSET)
> > +				return pnp_res;
> 
> Again possible users of pnp_resource_valid().

Done; I also converted to use pnp_get_pnp_resource().

^ permalink raw reply	[flat|nested] 80+ messages in thread

* Re: [patch 50/54] ISAPNP: fold isapnp_read_resources() back into isapnp_get_resources()
  2008-04-26 23:07   ` Rene Herman
@ 2008-04-28 21:07     ` Bjorn Helgaas
  2008-04-29  6:53       ` 2.6.25 pci=noacpi Richard
  0 siblings, 1 reply; 80+ messages in thread
From: Bjorn Helgaas @ 2008-04-28 21:07 UTC (permalink / raw)
  To: Rene Herman
  Cc: Len Brown, linux-acpi, linux-kernel, Adam Belay, Adam M Belay,
	Li Shaohua, Matthieu Castet, Thomas Renninger, Jaroslav Kysela,
	Andrew Morton

On Saturday 26 April 2008 05:07:23 pm Rene Herman wrote:
> On 25-04-08 20:38, Bjorn Helgaas wrote:
> 
> > +	for (i = 0; i < ISAPNP_MAX_MEM; i++) {
> > +		ret = isapnp_read_word(ISAPNP_CFG_MEM + (i << 3)) << 8;
> > +		if (!ret)
> > +			continue;
> > +		pnp_res = pnp_add_mem_resource(dev, ret, ret, 0);
> > +		if (pnp_res)
> > +			pnp_res->index = i;
> > +	}
> > +	for (i = 0; i < ISAPNP_MAX_IRQ; i++) {
> > +		ret = (isapnp_read_word(ISAPNP_CFG_IRQ + (i << 1)) >>
> > +		     8);
> 
> Truly trivial, but if you kill the useless outer (), it fits on one line...

Fixed.  I also removed the negation, e.g., we have

    if (ret) {
        pnp_res = ...
    }

rather than

    if (!ret)
        continue;
    pnp_res = ...

Bjorn

^ permalink raw reply	[flat|nested] 80+ messages in thread

* Re: [patch 00/54] PNP cleanup, v4
  2008-04-26 23:47   ` Rene Herman
@ 2008-04-28 21:16     ` Bjorn Helgaas
  0 siblings, 0 replies; 80+ messages in thread
From: Bjorn Helgaas @ 2008-04-28 21:16 UTC (permalink / raw)
  To: Rene Herman
  Cc: Len Brown, linux-acpi, linux-kernel, Adam Belay, Adam M Belay,
	Li Shaohua, Matthieu Castet, Thomas Renninger, Jaroslav Kysela,
	Andrew Morton

On Saturday 26 April 2008 05:47:32 pm Rene Herman wrote:
> By the way, would you terribly mind submitting this alongside? It's been 
> ages since we heard from Adam.

I actually poked Adam about this recently and volunteered to take
over PNP maintenance.  He's been really busy with coursework and
hasn't been able to do much Linux work.  But he's about to graduate
and should soon have more free time, so he's going to continue as
the official maintainer, and I'll continue kibitzing.

Bjorn

^ permalink raw reply	[flat|nested] 80+ messages in thread

* 2.6.25 pci=noacpi
  2008-04-28 21:07     ` Bjorn Helgaas
@ 2008-04-29  6:53       ` Richard
  2008-04-29  7:04         ` Andrew Morton
  2008-05-04 19:23         ` Rene Herman
  0 siblings, 2 replies; 80+ messages in thread
From: Richard @ 2008-04-29  6:53 UTC (permalink / raw)
  To: linux-acpi
  Cc: linux-kernel, Adam Belay, Adam M Belay, Li Shaohua,
	Matthieu Castet, Thomas Renninger, Jaroslav Kysela, Andrew Morton

Hi all,

Using an AMD Sempron notebook (HP Compaq 6715b) single processor 
machine,  It shuts down during bootup when ACPI is fully enabled.  I 
added pci=noacpi to the cmdline and it finally boots, but its extremely 
slow...  (kdm times out with error saying it took too long to load and 
disables graphical)

Dmesg doest show anything out of the ordinary, irq_stats only shows the 
timer interrupts being incremented. (noirq also works, but same 
behaviour) Can someone please offer me some pointers so I can fault find 
this problem.

Thanks in advance
Richard

^ permalink raw reply	[flat|nested] 80+ messages in thread

* Re: 2.6.25 pci=noacpi
  2008-04-29  6:53       ` 2.6.25 pci=noacpi Richard
@ 2008-04-29  7:04         ` Andrew Morton
  2008-04-29  7:17           ` Richard
  2008-04-29  7:27           ` Richard
  2008-05-04 19:23         ` Rene Herman
  1 sibling, 2 replies; 80+ messages in thread
From: Andrew Morton @ 2008-04-29  7:04 UTC (permalink / raw)
  To: Richard
  Cc: linux-acpi, linux-kernel, Adam Belay, Adam M Belay, Li Shaohua,
	Matthieu Castet, Thomas Renninger, Jaroslav Kysela

On Tue, 29 Apr 2008 07:53:57 +0100 Richard <tuxbox.guru@gmail.com> wrote:

> Hi all,
> 
> Using an AMD Sempron notebook (HP Compaq 6715b) single processor 
> machine,  It shuts down during bootup when ACPI is fully enabled.  I 
> added pci=noacpi to the cmdline and it finally boots, but its extremely 
> slow...  (kdm times out with error saying it took too long to load and 
> disables graphical)
> 
> Dmesg doest show anything out of the ordinary, irq_stats only shows the 
> timer interrupts being incremented. (noirq also works, but same 
> behaviour) Can someone please offer me some pointers so I can fault find 
> this problem.
> 

Did any earlier kernels work OK?  If so, which versions?

Thanks.

^ permalink raw reply	[flat|nested] 80+ messages in thread

* Re: 2.6.25 pci=noacpi
  2008-04-29  7:04         ` Andrew Morton
@ 2008-04-29  7:17           ` Richard
  2008-04-29  7:27           ` Richard
  1 sibling, 0 replies; 80+ messages in thread
From: Richard @ 2008-04-29  7:17 UTC (permalink / raw)
  To: Andrew Morton
  Cc: linux-acpi, linux-kernel, Adam Belay, Adam M Belay, Li Shaohua,
	Matthieu Castet, Thomas Renninger, Jaroslav Kysela

Hi Andrew/all

A stock standard 2.6.24 kernel worked fine, but it exhibited a problem 
where the timer sources didnt run as expected. ( I didnt put too much 
effort in to it as I wanted a hot off the press kernel ) in 2.6.24 the 
ACPI done its job :-)

I am going to enable netconsole to try see if it can throw me a bone.

Thanks,
Richard

Andrew Morton wrote:
> On Tue, 29 Apr 2008 07:53:57 +0100 Richard <tuxbox.guru@gmail.com> wrote:
>
>   
>> Hi all,
>>
>> Using an AMD Sempron notebook (HP Compaq 6715b) single processor 
>> machine,  It shuts down during bootup when ACPI is fully enabled.  I 
>> added pci=noacpi to the cmdline and it finally boots, but its extremely 
>> slow...  (kdm times out with error saying it took too long to load and 
>> disables graphical)
>>
>> Dmesg doest show anything out of the ordinary, irq_stats only shows the 
>> timer interrupts being incremented. (noirq also works, but same 
>> behaviour) Can someone please offer me some pointers so I can fault find 
>> this problem.
>>
>>     
>
> Did any earlier kernels work OK?  If so, which versions?
>
> Thanks.
>
>   


^ permalink raw reply	[flat|nested] 80+ messages in thread

* Re: 2.6.25 pci=noacpi
  2008-04-29  7:04         ` Andrew Morton
  2008-04-29  7:17           ` Richard
@ 2008-04-29  7:27           ` Richard
  1 sibling, 0 replies; 80+ messages in thread
From: Richard @ 2008-04-29  7:27 UTC (permalink / raw)
  To: Andrew Morton
  Cc: linux-acpi, linux-kernel, Adam Belay, Adam M Belay, Li Shaohua,
	Matthieu Castet, Thomas Renninger, Jaroslav Kysela

Sorry,

I sent my previous mail too eagerly..

2.6.22 worked
2.6.23 not tested
2.6.24 broken

I will grab a .23 kernel and see if its problem too :-P

R

Andrew Morton wrote:
> On Tue, 29 Apr 2008 07:53:57 +0100 Richard <tuxbox.guru@gmail.com> wrote:
>
>   
>> Hi all,
>>
>> Using an AMD Sempron notebook (HP Compaq 6715b) single processor 
>> machine,  It shuts down during bootup when ACPI is fully enabled.  I 
>> added pci=noacpi to the cmdline and it finally boots, but its extremely 
>> slow...  (kdm times out with error saying it took too long to load and 
>> disables graphical)
>>
>> Dmesg doest show anything out of the ordinary, irq_stats only shows the 
>> timer interrupts being incremented. (noirq also works, but same 
>> behaviour) Can someone please offer me some pointers so I can fault find 
>> this problem.
>>
>>     
>
> Did any earlier kernels work OK?  If so, which versions?
>
> Thanks.
>
>   


^ permalink raw reply	[flat|nested] 80+ messages in thread

* Re: 2.6.25 pci=noacpi
  2008-04-29  6:53       ` 2.6.25 pci=noacpi Richard
  2008-04-29  7:04         ` Andrew Morton
@ 2008-05-04 19:23         ` Rene Herman
  2008-05-08  6:59           ` Richard
  2008-05-08  7:08           ` Richard
  1 sibling, 2 replies; 80+ messages in thread
From: Rene Herman @ 2008-05-04 19:23 UTC (permalink / raw)
  To: Richard
  Cc: linux-acpi, linux-kernel, Adam Belay, Adam M Belay, Li Shaohua,
	Matthieu Castet, Thomas Renninger, Jaroslav Kysela, Andrew Morton

On 29-04-08 08:53, Richard wrote:

> Using an AMD Sempron notebook (HP Compaq 6715b) single processor 
> machine,  It shuts down during bootup when ACPI is fully enabled.  I 
> added pci=noacpi to the cmdline and it finally boots, but its extremely 
> slow...  (kdm times out with error saying it took too long to load and 
> disables graphical)

Does booting with io_delay=0xed on the kernel command line fix it? If so, we 
need the output of

# dmidecode -s baseboard-manufacturer

and

# dmidecode -s baseboard-product-name

Rene.

^ permalink raw reply	[flat|nested] 80+ messages in thread

* Re: 2.6.25 pci=noacpi
  2008-05-04 19:23         ` Rene Herman
@ 2008-05-08  6:59           ` Richard
  2008-05-08  7:08           ` Richard
  1 sibling, 0 replies; 80+ messages in thread
From: Richard @ 2008-05-08  6:59 UTC (permalink / raw)
  To: Rene Herman
  Cc: linux-acpi, linux-kernel, Adam Belay, Adam M Belay, Li Shaohua,
	Matthieu Castet, Thomas Renninger, Jaroslav Kysela, Andrew Morton

Rene Herman wrote:
> On 29-04-08 08:53, Richard wrote:
>
>> Using an AMD Sempron notebook (HP Compaq 6715b) single processor 
>> machine,  It shuts down during bootup when ACPI is fully enabled.  I 
>> added pci=noacpi to the cmdline and it finally boots, but its 
>> extremely slow...  (kdm times out with error saying it took too long 
>> to load and disables graphical)
>
> Does booting with io_delay=0xed on the kernel command line fix it? If 
> so, we need the output of
>
> # dmidecode -s baseboard-manufacturer
>
> and
>
> # dmidecode -s baseboard-product-name
>
> Rene.
>
dmidecode -s baseboard-manufacturer
Hewlett-Packard

dmidecode -s baseboard-product-name
30C2


...................
dmidecode
# dmidecode 2.9
SMBIOS 2.4 present.
23 structures occupying 1029 bytes.
Table at 0x000FBBE6.

Handle 0x0000, DMI type 0, 24 bytes
BIOS Information
        Vendor: Hewlett-Packard
        Version: 68YTT Ver. F.07
        Release Date: 07/16/2007
        Address: 0xE0000
        Runtime Size: 128 kB
        ROM Size: 1024 kB
        Characteristics:
                PCI is supported
                PC Card (PCMCIA) is supported
                PNP is supported
                BIOS is upgradeable
                BIOS shadowing is allowed
                Boot from CD is supported
                Selectable boot is supported
                EDD is supported
                3.5"/720 KB floppy services are supported (int 13h)
                Print screen service is supported (int 5h)
                8042 keyboard services are supported (int 9h)
                Serial services are supported (int 14h)
                Printer services are supported (int 17h)
                ACPI is supported
                USB legacy is supported
                LS-120 boot is supported
                Smart battery is supported
                BIOS boot specification is supported
                Function key-initiated network boot is supported
                Targeted content distribution is supported
        BIOS Revision: 15.7
        Firmware Revision: 113.40

Handle 0x0001, DMI type 1, 27 bytes
System Information
        Manufacturer: Hewlett-Packard
        Product Name: HP Compaq 6715b (GR616ES#ABN)
        Version: F.07
        Serial Number: CNU1234RYP
        UUID: 3B9F2FDD-B215-EE11-3898-6D99022F5D29
        Wake-up Type: Power Switch
        SKU Number: GR616ES#ABN
        Family: 103C_5336AN

Handle 0x0040, DMI type 126, 34 bytes
Inactive

Handle 0x0002, DMI type 2, 8 bytes
Base Board Information
        Manufacturer: Hewlett-Packard
        Product Name: 30C2
        Version: KBC Version 71.28
        Serial Number: Not Specified

Handle 0x0003, DMI type 3, 13 bytes
Chassis Information
        Manufacturer: Hewlett-Packard
        Type: Notebook
        Lock: Not Present
        Version: Not Specified
        Serial Number: CNU1234RYP
        Asset Tag: CNU1234RYP
        Boot-up State: Safe
        Power Supply State: Safe
        Thermal State: Safe
        Security Status: External Interface Enabled

Handle 0x0041, DMI type 126, 32 bytes
Inactive

Handle 0x0004, DMI type 4, 35 bytes
Processor Information
        Socket Designation: U10
        Type: Central Processor
        Family: Pentium M
        Manufacturer: AMD(R)
        ID: C2 0F 04 00 FF FB 8B 07
        Signature: Type 0, Family 15, Model 76, Stepping 2
        Flags:
                FPU (Floating-point unit on-chip)
                VME (Virtual mode extension)
                DE (Debugging extension)
                PSE (Page size extension)
                TSC (Time stamp counter)
                MSR (Model specific registers)
                PAE (Physical address extension)
                MCE (Machine check exception)
                CX8 (CMPXCHG8 instruction supported)
                APIC (On-chip APIC hardware supported)
                SEP (Fast system call)
                MTRR (Memory type range registers)
                PGE (Page global enable)
                MCA (Machine check architecture)
                CMOV (Conditional move instruction supported)
                PAT (Page attribute table)
                PSE-36 (36-bit page size extension)
                CLFSH (CLFLUSH instruction supported)
                MMX (MMX technology supported)
                FXSR (Fast floating-point save and restore)
                SSE (Streaming SIMD extensions)
                SSE2 (Streaming SIMD extensions 2)
        Version: Mobile AMD Sempron(tm) 3600+
        Voltage: 1.1 V
        External Clock: 200 MHz
        Max Speed: 2000 MHz
        Current Speed: 2000 MHz
        Status: Populated, Enabled
        Upgrade: None
        L1 Cache Handle: 0x0005
        L2 Cache Handle: 0x0006
        L3 Cache Handle: Not Provided
        Serial Number: Not Specified
        Asset Tag: Not Specified
        Part Number: Not Specified

Handle 0x0005, DMI type 7, 19 bytes
Cache Information
        Socket Designation: Internal L1 Cache
        Configuration: Enabled, Not Socketed, Level 1
        Operational Mode: Write Back
        Location: Internal
        Installed Size: 64 KB
        Maximum Size: 64 KB
        Supported SRAM Types:
                Burst
        Installed SRAM Type: Burst
        Speed: Unknown
        Error Correction Type: Unknown
        System Type: Unified
        Associativity: 4-way Set-associative

Handle 0x0006, DMI type 7, 19 bytes
Cache Information
        Socket Designation: Internal L2 Cache
        Configuration: Enabled, Not Socketed, Level 2
        Operational Mode: Write Back
        Location: External
        Installed Size: 256 KB
        Maximum Size: 256 KB
        Supported SRAM Types:
                Burst
        Installed SRAM Type: Burst
        Speed: Unknown
        Error Correction Type: None
        System Type: Unified
        Associativity: 4-way Set-associative

Handle 0x0007, DMI type 9, 13 bytes
System Slot Information
        Designation: PC CARD-Slot 0
        Type: 32-bit PC Card (PCMCIA)
        Current Usage: Available
        Length: Short
        ID: Adapter 0, Socket 0
        Characteristics:
                5.0 V is provided
                3.3 V is provided
                PC Card-16 is supported
                Cardbus is supported
                PME signal is supported

Handle 0x0008, DMI type 10, 6 bytes
On Board Device Information
        Type: Video
        Status: Enabled
        Description: 00

Handle 0x0009, DMI type 11, 5 bytes
OEM Strings
        String 1: www.hp.com
        String 2: ABS 70/71 79 7A 7B 7C

Handle 0x000A, DMI type 16, 15 bytes
Physical Memory Array
        Location: System Board Or Motherboard
        Use: System Memory
        Error Correction Type: None
        Maximum Capacity: 4 GB
        Error Information Handle: No Error
        Number Of Devices: 2

Handle 0x000B, DMI type 17, 27 bytes
Memory Device
        Array Handle: 0x000A
        Error Information Handle: No Error
        Total Width: 64 bits
        Data Width: 64 bits
        Size: 1024 MB
        Form Factor: SODIMM
        Set: None
        Locator: DIMM #1
        Bank Locator: Not Specified
        Type: DDR2
        Type Detail: Synchronous
        Speed: 667 MHz (1.5 ns)
        Manufacturer: 7F7F7F0B00000000
        Serial Number: E6892811
        Asset Tag: Not Specified
        Part Number: NT1GT64U8HB0BN-3C

Handle 0x000C, DMI type 17, 27 bytes
Memory Device
        Array Handle: 0x000A
        Error Information Handle: No Error
        Total Width: Unknown
        Data Width: Unknown
        Size: No Module Installed
        Form Factor: SODIMM
        Set: None
        Locator: DIMM #2
        Bank Locator: Not Specified
        Type: DDR2
        Type Detail: Synchronous
        Speed: Unknown
        Manufacturer:
        Serial Number:
        Asset Tag: Not Specified
        Part Number:

Handle 0x000D, DMI type 19, 15 bytes
Memory Array Mapped Address
        Starting Address: 0x00000000000
        Ending Address: 0x0003FFFFFFF
        Range Size: 1 GB
        Physical Array Handle: 0x000A
        Partition Width: 0

Handle 0x000E, DMI type 20, 19 bytes
Memory Device Mapped Address
        Starting Address: 0x00000000000
        Ending Address: 0x0003FFFFFFF
        Range Size: 1 GB
        Physical Device Handle: 0x000B
        Memory Array Mapped Address Handle: 0x000D
        Partition Row Position: 1

Handle 0x000F, DMI type 126, 19 bytes
Inactive

Handle 0x0010, DMI type 32, 11 bytes
System Boot Information
        Status: No errors detected

Handle 0x0085, DMI type 133, 34 bytes
OEM-specific Type
        Header and Data:
                85 22 85 00 01 EC 13 A7 11 52 11 02 00 5E 00 1D
                00 C5 2D 47 F5 30 2A 02 E0 40 00 00 55 0F 70 0F
                00 0F
        Strings:
                01358 06/17/2007
                HP

Handle 0x0086, DMI type 126, 34 bytes
Inactive

Handle 0x0011, DMI type 144, 26 bytes
OEM-specific Type
        Header and Data:
                90 1A 11 00 FF FF FF FF FF FF FF FF FF FF FF FF
                FF FF FF FF FF FF FF FF 00 00

Handle 0x0012, DMI type 127, 4 bytes
End Of Table




^ permalink raw reply	[flat|nested] 80+ messages in thread

* Re: 2.6.25 pci=noacpi
  2008-05-04 19:23         ` Rene Herman
  2008-05-08  6:59           ` Richard
@ 2008-05-08  7:08           ` Richard
  2008-05-08 11:50             ` Rene Herman
  1 sibling, 1 reply; 80+ messages in thread
From: Richard @ 2008-05-08  7:08 UTC (permalink / raw)
  To: Rene Herman
  Cc: linux-acpi, linux-kernel, Adam Belay, Adam M Belay, Li Shaohua,
	Matthieu Castet, Thomas Renninger, Jaroslav Kysela, Andrew Morton

Rene Herman wrote:
> On 29-04-08 08:53, Richard wrote:
>
>> Using an AMD Sempron notebook (HP Compaq 6715b) single processor 
>> machine,  It shuts down during bootup when ACPI is fully enabled.  I 
>> added pci=noacpi to the cmdline and it finally boots, but its 
>> extremely slow...  (kdm times out with error saying it took too long 
>> to load and disables graphical)
>
> Does booting with io_delay=0xed on the kernel command line fix it? If 
> so, we need the output of
>
> # dmidecode -s baseboard-manufacturer
>
> and
>
> # dmidecode -s baseboard-product-name
>
> Rene.
>

Tried the io_delay=0xed.... doesnt fix it. machine shuts down :-P

Richard


^ permalink raw reply	[flat|nested] 80+ messages in thread

* Re: 2.6.25 pci=noacpi
  2008-05-08  7:08           ` Richard
@ 2008-05-08 11:50             ` Rene Herman
  0 siblings, 0 replies; 80+ messages in thread
From: Rene Herman @ 2008-05-08 11:50 UTC (permalink / raw)
  To: Richard
  Cc: linux-acpi, linux-kernel, Adam Belay, Adam M Belay, Li Shaohua,
	Matthieu Castet, Thomas Renninger, Jaroslav Kysela, Andrew Morton

On 08-05-08 09:08, Richard wrote:

> Rene Herman wrote:
>> On 29-04-08 08:53, Richard wrote:
>>
>>> Using an AMD Sempron notebook (HP Compaq 6715b) single processor 
>>> machine,  It shuts down during bootup when ACPI is fully enabled.  I 
>>> added pci=noacpi to the cmdline and it finally boots, but its 
>>> extremely slow...  (kdm times out with error saying it took too long 
>>> to load and disables graphical)
>>
>> Does booting with io_delay=0xed on the kernel command line fix it? If 
>> so, we need the output of

> Tried the io_delay=0xed.... doesnt fix it. machine shuts down :-P

Blast. Sounded somewhat plausible given the original trouble with that
io_delay thing. Don't know then, sorry.

Rene.



^ permalink raw reply	[flat|nested] 80+ messages in thread

end of thread, other threads:[~2008-05-08 11:49 UTC | newest]

Thread overview: 80+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-04-25 18:38 [patch 00/54] PNP cleanup, v4 Bjorn Helgaas
2008-04-25 18:38 ` [patch 01/54] PNP: turn on -DDEBUG when CONFIG_PNP_DEBUG is set Bjorn Helgaas
2008-04-25 18:38 ` [patch 02/54] ISAPNP: move config register addresses out of isapnp.h Bjorn Helgaas
2008-04-25 18:38 ` [patch 03/54] PNPACPI: continue after _CRS and _PRS errors Bjorn Helgaas
2008-04-25 18:38 ` [patch 04/54] PNP: make pnp_add_id() internal to PNP core Bjorn Helgaas
2008-04-25 18:38 ` [patch 05/54] PNP: change pnp_add_id() to allocate its own pnp_id structures Bjorn Helgaas
2008-04-25 18:38 ` [patch 06/54] PNP: add pnp_eisa_id_to_string() Bjorn Helgaas
2008-04-25 18:38 ` [patch 07/54] PNP: add pnp_alloc_dev() Bjorn Helgaas
2008-04-25 18:38 ` [patch 08/54] PNP: make pnp_add_card_id() internal to PNP core Bjorn Helgaas
2008-04-25 18:38 ` [patch 09/54] PNP: change pnp_add_card_id() to allocate its own pnp_id structures Bjorn Helgaas
2008-04-25 18:38 ` [patch 10/54] ISAPNP: pull pnp_add_card_id() out of isapnp_parse_card_id() Bjorn Helgaas
2008-04-25 18:38 ` [patch 11/54] PNP: add pnp_alloc_card() Bjorn Helgaas
2008-04-25 18:38 ` [patch 12/54] PNPACPI: pnpacpi_encode_ext_irq() wrongly set "irq" instead of "extended_irq" Bjorn Helgaas
2008-04-25 18:38 ` [patch 13/54] PNPACPI: use temporaries to reduce repetition Bjorn Helgaas
2008-04-25 18:38 ` [patch 14/54] PNPACPI: hoist dma_flags() out of pnpacpi_parse_allocated_dmaresource() Bjorn Helgaas
2008-04-25 18:38 ` [patch 15/54] PNPACPI: extend irq_flags() to set IORESOURCE_IRQ_SHAREABLE when appropriate Bjorn Helgaas
2008-04-25 18:38 ` [patch 16/54] PNPACPI: pass pnp_dev instead of acpi_handle Bjorn Helgaas
2008-04-25 18:38 ` [patch 17/54] PNP: add debug output to option registration Bjorn Helgaas
2008-04-25 18:38 ` [patch 18/54] PNP: remove pnp_resource_table from internal get/set interfaces Bjorn Helgaas
2008-04-25 18:38 ` [patch 19/54] PNP: remove more pnp_resource_table arguments Bjorn Helgaas
2008-04-25 18:38 ` [patch 20/54] PNP: add debug output to encoders Bjorn Helgaas
2008-04-25 18:38 ` [patch 21/54] PNP: add debug when assigning PNP resources Bjorn Helgaas
2008-04-26 21:26   ` Rene Herman
2008-04-28 15:25     ` Bjorn Helgaas
2008-04-25 18:38 ` [patch 22/54] PNP: add pnp_init_resources(struct pnp_dev *) interface Bjorn Helgaas
2008-04-25 18:38 ` [patch 23/54] PNP: remove pnp_resource_table from internal pnp_clean_resource_table interface Bjorn Helgaas
2008-04-25 18:38 ` [patch 24/54] PNP: remove unused interfaces using pnp_resource_table Bjorn Helgaas
2008-04-25 18:38 ` [patch 25/54] PNP: use dev_printk when possible Bjorn Helgaas
2008-04-25 18:38 ` [patch 26/54] PNP: factor pnp_init_resource_table() and pnp_clean_resource_table() Bjorn Helgaas
2008-04-26 21:33   ` Rene Herman
2008-04-28 17:15     ` Bjorn Helgaas
2008-04-25 18:38 ` [patch 27/54] PNP: add pnp_get_resource() interface Bjorn Helgaas
2008-04-25 18:38 ` [patch 28/54] PNP: remove pnp_mem_flags() as an lvalue Bjorn Helgaas
2008-04-25 18:38 ` [patch 29/54] PNP: convert resource accessors to use pnp_get_resource(), not pnp_resource_table Bjorn Helgaas
2008-04-26 21:42   ` Rene Herman
2008-04-28 17:19     ` Bjorn Helgaas
2008-04-25 18:38 ` [patch 30/54] PNP: use conventional "i" for loop indices Bjorn Helgaas
2008-04-25 18:38 ` [patch 31/54] PNP: reduce redundancy in pnp_assign_port() and others Bjorn Helgaas
2008-04-25 18:38 ` [patch 32/54] PNP: reduce redundancy in pnp_check_port() " Bjorn Helgaas
2008-04-25 18:38 ` [patch 33/54] PNP: reduce redundancy in pnp_set_current_resources() Bjorn Helgaas
2008-04-25 18:38 ` [patch 34/54] PNP: check for conflicts with all resources, not just earlier ones Bjorn Helgaas
2008-04-25 18:38 ` [patch 35/54] PNP: pass resources, not indexes, to pnp_check_port(), et al Bjorn Helgaas
2008-04-25 18:38 ` [patch 36/54] PNP: convert resource checks to use pnp_get_resource(), not pnp_resource_table Bjorn Helgaas
2008-04-25 18:38 ` [patch 37/54] PNP: convert encoders " Bjorn Helgaas
2008-04-25 18:38 ` [patch 38/54] PNP: remove PNP_MAX_* uses Bjorn Helgaas
2008-04-26 22:10   ` Rene Herman
2008-04-25 18:38 ` [patch 39/54] rtc: dont reference pnp_resource_table directly Bjorn Helgaas
2008-04-25 18:38 ` [patch 40/54] PNP: make pnp_resource_table private to PNP core Bjorn Helgaas
2008-04-25 18:38 ` [patch 41/54] PNP: remove pnp_resource_table references from resource decoders Bjorn Helgaas
2008-04-26 22:28   ` Rene Herman
2008-04-28 20:36     ` Bjorn Helgaas
2008-04-28 20:41       ` Rene Herman
2008-04-25 18:38 ` [patch 42/54] PNP: add struct pnp_resource Bjorn Helgaas
2008-04-25 18:38 ` [patch 43/54] PNP: add pnp_resource index for ISAPNP Bjorn Helgaas
2008-04-25 18:38 ` [patch 44/54] PNP: add pnp_new_resource() to find a new unset pnp_resource Bjorn Helgaas
2008-04-26 22:37   ` Rene Herman
2008-04-28 20:43     ` Bjorn Helgaas
2008-04-25 18:38 ` [patch 45/54] PNP: make generic pnp_add_irq_resource() Bjorn Helgaas
2008-04-25 18:38 ` [patch 46/54] PNP: make generic pnp_add_dma_resource() Bjorn Helgaas
2008-04-25 18:38 ` [patch 47/54] PNP: make generic pnp_add_io_resource() Bjorn Helgaas
2008-04-25 18:38 ` [patch 48/54] PNP: make generic pnp_add_mem_resource() Bjorn Helgaas
2008-04-25 18:38 ` [patch 49/54] PNP: use pnp_get_pnp_resource() in resource assignment functions Bjorn Helgaas
2008-04-25 18:38 ` [patch 50/54] ISAPNP: fold isapnp_read_resources() back into isapnp_get_resources() Bjorn Helgaas
2008-04-26 23:07   ` Rene Herman
2008-04-28 21:07     ` Bjorn Helgaas
2008-04-29  6:53       ` 2.6.25 pci=noacpi Richard
2008-04-29  7:04         ` Andrew Morton
2008-04-29  7:17           ` Richard
2008-04-29  7:27           ` Richard
2008-05-04 19:23         ` Rene Herman
2008-05-08  6:59           ` Richard
2008-05-08  7:08           ` Richard
2008-05-08 11:50             ` Rene Herman
2008-04-25 18:38 ` [patch 51/54] PNPACPI: move _CRS/_PRS warnings closer to the action Bjorn Helgaas
2008-04-25 18:38 ` [patch 52/54] PNP: make interfaces private to the PNP core Bjorn Helgaas
2008-04-25 18:39 ` [patch 53/54] ISAPNP: remove unused pnp_dev->regs field Bjorn Helgaas
2008-04-25 18:39 ` [patch 54/54] PNPBIOS: remove include/linux/pnpbios.h Bjorn Helgaas
2008-04-26 23:34 ` [patch 00/54] PNP cleanup, v4 Rene Herman
2008-04-26 23:47   ` Rene Herman
2008-04-28 21:16     ` Bjorn Helgaas

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox