aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBjorn Helgaas <bjorn.helgaas@hp.com>2008-06-27 18:57:06 -0400
committerAndi Kleen <andi@basil.nowhere.org>2008-07-16 17:27:06 -0400
commit169aaffe885c56745188e7913f212a67beaa3b80 (patch)
treec673df17aab31ab453c6552aac917c022c55a7d2
parent7aefff51854ccd33599c40b4e360d94cb2b7622f (diff)
PNP: increase I/O port & memory option address sizes
ACPI Address Space Descriptors can be up to 64 bits wide. We should keep track of the whole thing when parsing resource options, so this patch changes PNP port and mem option fields from "unsigned short" and "unsigned int" to "resource_size_t". Signed-off-by: Bjorn Helgaas <bjorn.helgaas@hp.com> Signed-off-by: Andi Kleen <ak@linux.intel.com> Acked-by: Rene Herman <rene.herman@gmail.com> Signed-off-by: Len Brown <len.brown@intel.com>
-rw-r--r--drivers/pnp/base.h16
-rw-r--r--drivers/pnp/interface.c17
-rw-r--r--drivers/pnp/resource.c14
3 files changed, 29 insertions, 18 deletions
diff --git a/drivers/pnp/base.h b/drivers/pnp/base.h
index a9ee0a9fec77..afbeee5b8af6 100644
--- a/drivers/pnp/base.h
+++ b/drivers/pnp/base.h
@@ -20,10 +20,10 @@ int pnp_add_card_device(struct pnp_card *card, struct pnp_dev *dev);
20void pnp_remove_card_device(struct pnp_dev *dev); 20void pnp_remove_card_device(struct pnp_dev *dev);
21 21
22struct pnp_port { 22struct pnp_port {
23 unsigned short min; /* min base number */ 23 resource_size_t min; /* min base number */
24 unsigned short max; /* max base number */ 24 resource_size_t max; /* max base number */
25 unsigned char align; /* align boundary */ 25 resource_size_t align; /* align boundary */
26 unsigned char size; /* size of range */ 26 resource_size_t size; /* size of range */
27 unsigned char flags; /* port flags */ 27 unsigned char flags; /* port flags */
28 unsigned char pad; /* pad */ 28 unsigned char pad; /* pad */
29 struct pnp_port *next; /* next port */ 29 struct pnp_port *next; /* next port */
@@ -46,10 +46,10 @@ struct pnp_dma {
46}; 46};
47 47
48struct pnp_mem { 48struct pnp_mem {
49 unsigned int min; /* min base number */ 49 resource_size_t min; /* min base number */
50 unsigned int max; /* max base number */ 50 resource_size_t max; /* max base number */
51 unsigned int align; /* align boundary */ 51 resource_size_t align; /* align boundary */
52 unsigned int size; /* size of range */ 52 resource_size_t size; /* size of range */
53 unsigned char flags; /* memory flags */ 53 unsigned char flags; /* memory flags */
54 unsigned char pad; /* pad */ 54 unsigned char pad; /* pad */
55 struct pnp_mem *next; /* next memory resource */ 55 struct pnp_mem *next; /* next memory resource */
diff --git a/drivers/pnp/interface.c b/drivers/pnp/interface.c
index 249b4078d1ec..b09f67de13d0 100644
--- a/drivers/pnp/interface.c
+++ b/drivers/pnp/interface.c
@@ -53,10 +53,12 @@ static int pnp_printf(pnp_info_buffer_t * buffer, char *fmt, ...)
53static void pnp_print_port(pnp_info_buffer_t * buffer, char *space, 53static void pnp_print_port(pnp_info_buffer_t * buffer, char *space,
54 struct pnp_port *port) 54 struct pnp_port *port)
55{ 55{
56 pnp_printf(buffer, 56 pnp_printf(buffer, "%sport %#llx-%#llx, align %#llx, size %#llx, "
57 "%sport 0x%x-0x%x, align 0x%x, size 0x%x, %i-bit address decoding\n", 57 "%i-bit address decoding\n", space,
58 space, port->min, port->max, 58 (unsigned long long) port->min,
59 port->align ? (port->align - 1) : 0, port->size, 59 (unsigned long long) port->max,
60 port->align ? ((unsigned long long) port->align - 1) : 0,
61 (unsigned long long) port->size,
60 port->flags & IORESOURCE_IO_16BIT_ADDR ? 16 : 10); 62 port->flags & IORESOURCE_IO_16BIT_ADDR ? 16 : 10);
61} 63}
62 64
@@ -148,8 +150,11 @@ static void pnp_print_mem(pnp_info_buffer_t * buffer, char *space,
148{ 150{
149 char *s; 151 char *s;
150 152
151 pnp_printf(buffer, "%sMemory 0x%x-0x%x, align 0x%x, size 0x%x", 153 pnp_printf(buffer, "%sMemory %#llx-%#llx, align %#llx, size %#llx",
152 space, mem->min, mem->max, mem->align, mem->size); 154 space, (unsigned long long) mem->min,
155 (unsigned long long) mem->max,
156 (unsigned long long) mem->align,
157 (unsigned long long) mem->size);
153 if (mem->flags & IORESOURCE_MEM_WRITEABLE) 158 if (mem->flags & IORESOURCE_MEM_WRITEABLE)
154 pnp_printf(buffer, ", writeable"); 159 pnp_printf(buffer, ", writeable");
155 if (mem->flags & IORESOURCE_MEM_CACHEABLE) 160 if (mem->flags & IORESOURCE_MEM_CACHEABLE)
diff --git a/drivers/pnp/resource.c b/drivers/pnp/resource.c
index 55a57cded24a..391828c7f207 100644
--- a/drivers/pnp/resource.c
+++ b/drivers/pnp/resource.c
@@ -143,8 +143,11 @@ int pnp_register_port_resource(struct pnp_dev *dev, struct pnp_option *option,
143 option->port = data; 143 option->port = data;
144 144
145 dev_dbg(&dev->dev, " io " 145 dev_dbg(&dev->dev, " io "
146 "min %#x max %#x align %d size %d flags %#x\n", 146 "min %#llx max %#llx align %lld size %lld flags %#x\n",
147 data->min, data->max, data->align, data->size, data->flags); 147 (unsigned long long) data->min,
148 (unsigned long long) data->max,
149 (unsigned long long) data->align,
150 (unsigned long long) data->size, data->flags);
148 return 0; 151 return 0;
149} 152}
150 153
@@ -162,8 +165,11 @@ int pnp_register_mem_resource(struct pnp_dev *dev, struct pnp_option *option,
162 option->mem = data; 165 option->mem = data;
163 166
164 dev_dbg(&dev->dev, " mem " 167 dev_dbg(&dev->dev, " mem "
165 "min %#x max %#x align %d size %d flags %#x\n", 168 "min %#llx max %#llx align %lld size %lld flags %#x\n",
166 data->min, data->max, data->align, data->size, data->flags); 169 (unsigned long long) data->min,
170 (unsigned long long) data->max,
171 (unsigned long long) data->align,
172 (unsigned long long) data->size, data->flags);
167 return 0; 173 return 0;
168} 174}
169 175