2008-03-26 17:18:27

by Bjorn Helgaas

[permalink] [raw]
Subject: [patch 28/37] PNP: add pnp_get_resource() interface

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 <[email protected]>

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

Index: work7/include/linux/pnp.h
===================================================================
--- work7.orig/include/linux/pnp.h 2008-03-24 15:26:03.000000000 -0600
+++ work7/include/linux/pnp.h 2008-03-24 15:39:26.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: work7/drivers/pnp/resource.c
===================================================================
--- work7.orig/drivers/pnp/resource.c 2008-03-24 15:26:03.000000000 -0600
+++ work7/drivers/pnp/resource.c 2008-03-24 15:40:25.000000000 -0600
@@ -560,6 +560,32 @@
return 0;
}

+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;
+}
+
/* format is: pnp_reserve_irq=irq1[,irq2] .... */
static int __init pnp_setup_reserve_irq(char *str)
{

--


2008-03-26 23:11:42

by Bjorn Helgaas

[permalink] [raw]
Subject: Re: [patch 28/37] PNP: add pnp_get_resource() interface

PNP: add pnp_get_resource() interface

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.

I used EXPORT_SYMBOL, not EXPORT_SYMBOL_GPL, because it doesn't
seem right to break existing non-GPL PNP drivers.

Signed-off-by: Bjorn Helgaas <[email protected]>

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

Index: work7/include/linux/pnp.h
===================================================================
--- work7.orig/include/linux/pnp.h 2008-03-26 11:10:22.000000000 -0600
+++ work7/include/linux/pnp.h 2008-03-26 16:50:05.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: work7/drivers/pnp/resource.c
===================================================================
--- work7.orig/drivers/pnp/resource.c 2008-03-26 11:10:29.000000000 -0600
+++ work7/drivers/pnp/resource.c 2008-03-26 16:50:42.000000000 -0600
@@ -560,6 +560,33 @@
return 0;
}

+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)
{