Skip to content

Commit a8c78f7

Browse files
Bjorn Helgaaslenb
Bjorn Helgaas
authored andcommitted
PNP: reserve system board iomem resources as well as ioport resources
Most x86 boxes have no iomem system board resources, but some ia64 boxes do. Signed-off-by: Bjorn Helgaas <[email protected]> Signed-off-by: Len Brown <[email protected]>
1 parent 9a47cdb commit a8c78f7

File tree

1 file changed

+19
-7
lines changed

1 file changed

+19
-7
lines changed

drivers/pnp/system.c

+19-7
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@
33
*
44
* Some code is based on pnpbios_core.c
55
* Copyright 2002 Adam Belay <[email protected]>
6-
*
6+
* (c) Copyright 2007 Hewlett-Packard Development Company, L.P.
7+
* Bjorn Helgaas <[email protected]>
78
*/
89

910
#include <linux/pnp.h>
@@ -21,7 +22,7 @@ static const struct pnp_device_id pnp_dev_table[] = {
2122
{ "", 0 }
2223
};
2324

24-
static void reserve_ioport_range(char *pnpid, int start, int end)
25+
static void reserve_range(char *pnpid, int start, int end, int port)
2526
{
2627
struct resource *res;
2728
char *regionid;
@@ -30,7 +31,10 @@ static void reserve_ioport_range(char *pnpid, int start, int end)
3031
if ( regionid == NULL )
3132
return;
3233
snprintf(regionid, 16, "pnp %s", pnpid);
33-
res = request_region(start,end-start+1,regionid);
34+
if (port)
35+
res = request_region(start,end-start+1,regionid);
36+
else
37+
res = request_mem_region(start,end-start+1,regionid);
3438
if ( res == NULL )
3539
kfree( regionid );
3640
else
@@ -41,8 +45,8 @@ static void reserve_ioport_range(char *pnpid, int start, int end)
4145
* have double reservations.
4246
*/
4347
printk(KERN_INFO
44-
"pnp: %s: ioport range 0x%x-0x%x %s reserved\n",
45-
pnpid, start, end,
48+
"pnp: %s: %s range 0x%x-0x%x %s reserved\n",
49+
pnpid, port ? "ioport" : "iomem", start, end,
4650
NULL != res ? "has been" : "could not be"
4751
);
4852

@@ -75,13 +79,21 @@ static void reserve_resources_of_dev( struct pnp_dev *dev )
7579
/* invalid endpoint */
7680
/* Do nothing */
7781
continue;
78-
reserve_ioport_range(
82+
reserve_range(
7983
dev->dev.bus_id,
8084
pnp_port_start(dev, i),
81-
pnp_port_end(dev, i)
85+
pnp_port_end(dev, i), 1
8286
);
8387
}
8488

89+
for (i = 0; i < PNP_MAX_MEM; i++) {
90+
if (!pnp_mem_valid(dev, i))
91+
continue;
92+
93+
reserve_range(dev->dev.bus_id, pnp_mem_start(dev, i),
94+
pnp_mem_end(dev, i), 0);
95+
}
96+
8597
return;
8698
}
8799

0 commit comments

Comments
 (0)