to get I2O working with Adaptec's zero channel controllers (ASR-2000S, ASR-2005S, ASR-2010S and ASR-2015S)
PATCH 1/1 to get I2O working with Adaptec's zero channel controllers (ASR-2000S, ASR-2005S, ASR-2010S and ASR-2015S)
Hello,
the patch should get the mentioned controllers working with the I2O subsystem. Because we have no hardware to test it on, it would be great, if someone could give it a try and report if it works or not.
We've tested it on i686 and x86_64 with already working I2O controllers without a problem.
Thank you very much.
Best regards,
Markus Lidel
------------------------------------------
Markus Lidel (Senior IT Consultant)
Shadow Connect GmbH
Carl-Reisch-Weg 12
D-86381 Krumbach
Germany
Phone: +49 82 82/99 51-0 Fax: +49 82 82/99 51-11
E-Mail: [email protected] URL: http://www.shadowconnect.com
drivers/message/i2o/i2o_block.c +4 -4
@@ -280,8 +280,8 @@ {struct i2o_controller *c = dev->controller;int tid = dev->tid; -unsigned long msg; -unsigned long mptr; +void *msg; +void *mptr;u64 offset;struct request *req = ireq->req;int count = req->nr_sectors<<9 ;
@@ -291,7 +291,7 @@// printk(KERN_INFO "i2ob_send called\n"); /* Map the message to a virtual address */ - msg = c->mem_offset + m; + msg = c->msg_virt + m; sgnum =i2ob_build_sglist (dev, ireq);
@@ -479,7 +479,7 @@/* Now flush the message by making it a NOP */ m[0 ]&=0x00FFFFFF ; m[0 ]|=(I2O_CMD_UTIL_NOP )<<24 ; -i2o_post_message (c, ((unsigned long )m) - c->mem_offset); +i2o_post_message (c, (unsigned long ) m - (unsigned long ) c->msg_virt);return ; }
drivers/message/i2o/i2o_config.c +1 -1
@@ -97,7 +97,7 @@u32 *msg = (u32 *)m;if (msg[0 ] &MSG_FAIL ) { -u32 *preserved_msg = (u32 *)(c->mem_offset + msg[7 ]); +u32 *preserved_msg = (u32 *)(c->msg_virt + msg[7 ]);printk (KERN_ERR "i2o_config: IOP failed to process the msg.\n" );
drivers/message/i2o/i2o_core.c +100 -53
257 lines not on this page · raw message
drivers/message/i2o/i2o_scsi.c +3 -3
@@ -659,7 +659,7 @@if (m==0xFFFFFFFF )return 1 ; - msg = (u32 *)(c->mem_offset + m); + msg = (u32 *)(c->msg_virt + m);/* * Put together a scsi execscb message
@@ -936,7 +936,7 @@struct Scsi_Host *host;struct i2o_scsi_host *hostdata;u32 m; -unsigned long msg; +void *msg;unsigned long timeout;
@@ -974,7 +974,7 @@while (time_before (jiffies, timeout)); - msg = c->mem_offset + m; + msg = c->msg_virt + m;i2o_raw_writel (FOUR_WORD_MSG_SIZE |SGL_OFFSET_0 , msg);i2o_raw_writel (I2O_CMD_SCSI_BUSRESET <<24 |HOST_TID <<12 |tid, msg+4 );i2o_raw_writel (scsi_context|0x80000000 , msg+8 );
include/linux/i2o.h +9 -5
@@ -99,6 +99,7 @@int irq; int short_req:1; /* Use small block sizes */ int dpt:1; /* Don't quiesce */ + int raptor:1; /* split bar */ int promise:1; /* Promise controller */#ifdef CONFIG_MTRR int mtrr_reg0;
@@ -109,9 +110,9 @@atomic_t users;struct i2o_device *devices;/* I2O device chain */ struct i2o_controller *next;/* Controller chain */ -unsigned long post_port;/* Inbout port address */ -unsigned long reply_port;/* Outbound port address */ -unsigned long irq_mask;/* Interrupt register address */ +void *post_port;/* Inbout port address */ +void *reply_port;/* Outbound port address */ +void *irq_mask;/* Interrupt register address */ /* Dynamic LCT related data */ struct semaphore lct_sem;
@@ -128,8 +129,11 @@dma_addr_t hrt_phys;u32 hrt_len; -unsigned long mem_offset;/* MFA offset */ -unsigned long mem_phys;/* MFA physical */ +void *base_virt;/* base virtual address */ +unsigned long base_phys;/* base physical address */ + +void *msg_virt;/* messages virtual address */ +unsigned long msg_phys;/* messages physical address */ int battery:1; /* Has a battery backup */ int io_alloc:1; /* An I/O resource was allocated */
not my 2010s. it is not found at all. I send details to markus as a direct mail (sample config, dmesg, lspci -vvv).
Does anyone else have success using this patch? (I used it with kernel 2.6.7-rc1 btw, I hope that was ok?)
Regards, Andreas