aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/message/i2o/driver.c
diff options
context:
space:
mode:
authorMarkus Lidel <Markus.Lidel@shadowconnect.com>2005-06-24 01:02:16 -0400
committerLinus Torvalds <torvalds@ppc970.osdl.org>2005-06-24 03:05:28 -0400
commitf10378fff658f61307496e0ae00095041725cf07 (patch)
tree0c0413649317677771fa325dded94f1e12a6a0b7 /drivers/message/i2o/driver.c
parentf88e119c4b824a5017456fa094950d0f4092d96c (diff)
[PATCH] I2O: new sysfs attributes and Adaptec specific block device access and 64-bit DMA support
Changes: - Added Bus-OSM which could be used by user space programs to reset a channel on the controller - Make ioctl's in Config-OSM obsolete in prefer for sysfs attributes and move those to its own file - Added sysfs attribute for firmware read and write access for I2O controllers - Added special handling of firmware read and write access for Adaptec controllers - Added vendor id and product id as sysfs-attribute to Executive classes - Added automatic notification of LCT change handling to Exec-OSM - Added flushing function to Block-OSM for later barrier implementation - Use PRIVATE messages for Block access on Adaptec controllers, which are faster then BLOCK class access - Cleaned up support for Promise controller - New messages are now detected using the IRQ status register as suggested by the I2O spec - Added i2o_dma_high() and i2o_dma_low() functions - Added facility for SG tablesize calculation when using 32-bit and 64-bit DMA addresses - Added i2o_dma_map_single() and i2o_dma_map_sg() which could build the SG list for 32-bit as well as 64-bit DMA addresses Signed-off-by: Markus Lidel <Markus.Lidel@shadowconnect.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'drivers/message/i2o/driver.c')
-rw-r--r--drivers/message/i2o/driver.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/drivers/message/i2o/driver.c b/drivers/message/i2o/driver.c
index bebdd509b5d8..393be8e2914c 100644
--- a/drivers/message/i2o/driver.c
+++ b/drivers/message/i2o/driver.c
@@ -180,7 +180,13 @@ int i2o_driver_dispatch(struct i2o_controller *c, u32 m)
180{ 180{
181 struct i2o_driver *drv; 181 struct i2o_driver *drv;
182 struct i2o_message __iomem *msg = i2o_msg_out_to_virt(c, m); 182 struct i2o_message __iomem *msg = i2o_msg_out_to_virt(c, m);
183 u32 context = readl(&msg->u.s.icntxt); 183 u32 context;
184 unsigned long flags;
185
186 if(unlikely(!msg))
187 return -EIO;
188
189 context = readl(&msg->u.s.icntxt);
184 190
185 if (unlikely(context >= i2o_max_drivers)) { 191 if (unlikely(context >= i2o_max_drivers)) {
186 osm_warn("%s: Spurious reply to unknown driver %d\n", c->name, 192 osm_warn("%s: Spurious reply to unknown driver %d\n", c->name,
@@ -188,9 +194,9 @@ int i2o_driver_dispatch(struct i2o_controller *c, u32 m)
188 return -EIO; 194 return -EIO;
189 } 195 }
190 196
191 spin_lock(&i2o_drivers_lock); 197 spin_lock_irqsave(&i2o_drivers_lock, flags);
192 drv = i2o_drivers[context]; 198 drv = i2o_drivers[context];
193 spin_unlock(&i2o_drivers_lock); 199 spin_unlock_irqrestore(&i2o_drivers_lock, flags);
194 200
195 if (unlikely(!drv)) { 201 if (unlikely(!drv)) {
196 osm_warn("%s: Spurious reply to unknown driver %d\n", c->name, 202 osm_warn("%s: Spurious reply to unknown driver %d\n", c->name,