
From: Markus Lidel <Markus.Lidel@shadowconnect.com>

The I2O subsystem currently map all memory from the I2O controller for the
controller's in queue, even if it is not necessary.  This is a problem,
because on some systems the size returned from pci_resource_len() could be
128MB and only 1-4MB is needed.

Changes:
--------
- only ioremap as much memory as the controller is actually using.

Signed-off-by: Andrew Morton <akpm@osdl.org>
---

 25-akpm/drivers/message/i2o/pci.c |   15 +++++++++++++++
 1 files changed, 15 insertions(+)

diff -puN drivers/message/i2o/pci.c~reduce-ioremap-memory-size-for-adaptec-i2o-controllers drivers/message/i2o/pci.c
--- 25/drivers/message/i2o/pci.c~reduce-ioremap-memory-size-for-adaptec-i2o-controllers	Wed Sep 15 14:42:05 2004
+++ 25-akpm/drivers/message/i2o/pci.c	Wed Sep 15 14:42:05 2004
@@ -133,6 +133,21 @@ static int __devinit i2o_pci_alloc(struc
 			if (!c->base.phys) {
 				c->base.phys = pci_resource_start(pdev, i);
 				c->base.len = pci_resource_len(pdev, i);
+
+				/*
+				 * If we know what card it is, set the size
+				 * correctly. Code is taken from dpt_i2o.c
+				 */
+				if(pdev->device == 0xa501) {
+					if(pdev->subsystem_device >= 0xc032 &&
+					   pdev->subsystem_device <= 0xc03b) {
+						if(c->base.len > 0x400000)
+							c->base.len = 0x400000;
+					} else {
+						if(c->base.len > 0x100000)
+							c->base.len = 0x100000;
+					}
+				}
 				if (!c->raptor)
 					break;
 			} else {
_
