Commit e6473d16 authored by Randy Dunlap's avatar Randy Dunlap Committed by James Bottomley

fix scsi/aha15*.c for 2.5.60

parent 2a97afb8
...@@ -306,9 +306,9 @@ ...@@ -306,9 +306,9 @@
#define ERR_LEAD KERN_ERR LEAD #define ERR_LEAD KERN_ERR LEAD
#define DEBUG_LEAD KERN_DEBUG LEAD #define DEBUG_LEAD KERN_DEBUG LEAD
#define CMDINFO(cmd) \ #define CMDINFO(cmd) \
(cmd) ? ((cmd)->host->host_no) : -1, \ (cmd) ? ((cmd)->device->host->host_no) : -1, \
(cmd) ? ((cmd)->target & 0x0f) : -1, \ (cmd) ? ((cmd)->device->id & 0x0f) : -1, \
(cmd) ? ((cmd)->lun & 0x07) : -1 (cmd) ? ((cmd)->device->lun & 0x07) : -1
#define DELAY_DEFAULT 1000 #define DELAY_DEFAULT 1000
...@@ -583,8 +583,8 @@ struct aha152x_scdata { ...@@ -583,8 +583,8 @@ struct aha152x_scdata {
#define DATA_LEN (HOSTDATA(shpnt)->data_len) #define DATA_LEN (HOSTDATA(shpnt)->data_len)
#define SYNCRATE (HOSTDATA(shpnt)->syncrate[CURRENT_SC->target]) #define SYNCRATE (HOSTDATA(shpnt)->syncrate[CURRENT_SC->device->id])
#define SYNCNEG (HOSTDATA(shpnt)->syncneg[CURRENT_SC->target]) #define SYNCNEG (HOSTDATA(shpnt)->syncneg[CURRENT_SC->device->id])
#define DELAY (HOSTDATA(shpnt)->delay) #define DELAY (HOSTDATA(shpnt)->delay)
#define EXT_TRANS (HOSTDATA(shpnt)->ext_trans) #define EXT_TRANS (HOSTDATA(shpnt)->ext_trans)
...@@ -771,7 +771,7 @@ static inline Scsi_Cmnd *remove_lun_SC(Scsi_Cmnd ** SC, int target, int lun) ...@@ -771,7 +771,7 @@ static inline Scsi_Cmnd *remove_lun_SC(Scsi_Cmnd ** SC, int target, int lun)
Scsi_Cmnd *ptr, *prev; Scsi_Cmnd *ptr, *prev;
for (ptr = *SC, prev = NULL; for (ptr = *SC, prev = NULL;
ptr && ((ptr->target != target) || (ptr->lun != lun)); ptr && ((ptr->device->id != target) || (ptr->device->lun != lun));
prev = ptr, ptr = SCNEXT(ptr)) prev = ptr, ptr = SCNEXT(ptr))
; ;
...@@ -1476,7 +1476,7 @@ static int setup_expected_interrupts(struct Scsi_Host *shpnt) ...@@ -1476,7 +1476,7 @@ static int setup_expected_interrupts(struct Scsi_Host *shpnt)
*/ */
int aha152x_internal_queue(Scsi_Cmnd *SCpnt, struct semaphore *sem, int phase, Scsi_Cmnd *done_SC, void (*done)(Scsi_Cmnd *)) int aha152x_internal_queue(Scsi_Cmnd *SCpnt, struct semaphore *sem, int phase, Scsi_Cmnd *done_SC, void (*done)(Scsi_Cmnd *))
{ {
struct Scsi_Host *shpnt = SCpnt->host; struct Scsi_Host *shpnt = SCpnt->device->host;
unsigned long flags; unsigned long flags;
#if defined(AHA152X_DEBUG) #if defined(AHA152X_DEBUG)
...@@ -1589,7 +1589,7 @@ int aha152x_command(Scsi_Cmnd * SCpnt) ...@@ -1589,7 +1589,7 @@ int aha152x_command(Scsi_Cmnd * SCpnt)
*/ */
int aha152x_abort(Scsi_Cmnd *SCpnt) int aha152x_abort(Scsi_Cmnd *SCpnt)
{ {
struct Scsi_Host *shpnt = SCpnt->host; struct Scsi_Host *shpnt = SCpnt->device->host;
Scsi_Cmnd *ptr; Scsi_Cmnd *ptr;
unsigned long flags; unsigned long flags;
...@@ -1641,7 +1641,7 @@ static void timer_expired(unsigned long p) ...@@ -1641,7 +1641,7 @@ static void timer_expired(unsigned long p)
{ {
Scsi_Cmnd *SCp = (Scsi_Cmnd *)p; Scsi_Cmnd *SCp = (Scsi_Cmnd *)p;
struct semaphore *sem = SCSEM(SCp); struct semaphore *sem = SCSEM(SCp);
struct Scsi_Host *shpnt = SCp->host; struct Scsi_Host *shpnt = SCp->device->host;
/* remove command from issue queue */ /* remove command from issue queue */
if(remove_SC(&ISSUE_SC, SCp)) { if(remove_SC(&ISSUE_SC, SCp)) {
...@@ -1663,10 +1663,11 @@ static void timer_expired(unsigned long p) ...@@ -1663,10 +1663,11 @@ static void timer_expired(unsigned long p)
*/ */
int aha152x_device_reset(Scsi_Cmnd * SCpnt) int aha152x_device_reset(Scsi_Cmnd * SCpnt)
{ {
struct Scsi_Host *shpnt = SCpnt->host; struct Scsi_Host *shpnt = SCpnt->device->host;
DECLARE_MUTEX_LOCKED(sem); DECLARE_MUTEX_LOCKED(sem);
struct timer_list timer; struct timer_list timer;
Scsi_Cmnd cmnd; Scsi_Cmnd *cmd;
int ret;
#if defined(AHA152X_DEBUG) #if defined(AHA152X_DEBUG)
if(HOSTDATA(shpnt)->debug & debug_eh) { if(HOSTDATA(shpnt)->debug & debug_eh) {
...@@ -1680,31 +1681,42 @@ int aha152x_device_reset(Scsi_Cmnd * SCpnt) ...@@ -1680,31 +1681,42 @@ int aha152x_device_reset(Scsi_Cmnd * SCpnt)
return FAILED; return FAILED;
} }
cmnd.cmd_len = 0; spin_unlock_irq(shpnt->host_lock);
cmnd.host = SCpnt->host; cmd = scsi_get_command(SCpnt->device, GFP_ATOMIC);
cmnd.target = SCpnt->target; if (!cmd) {
cmnd.lun = SCpnt->lun; spin_lock_irq(shpnt->host_lock);
cmnd.use_sg = 0; return FAILED;
cmnd.request_buffer = 0; }
cmnd.request_bufflen = 0;
cmd->cmd_len = 0;
cmd->device->host = SCpnt->device->host;
cmd->device->id = SCpnt->device->id;
cmd->device->lun = SCpnt->device->lun;
cmd->use_sg = 0;
cmd->request_buffer = 0;
cmd->request_bufflen = 0;
init_timer(&timer); init_timer(&timer);
timer.data = (unsigned long) &cmnd; timer.data = (unsigned long) cmd;
timer.expires = jiffies + 100*HZ; /* 10s */ timer.expires = jiffies + 100*HZ; /* 10s */
timer.function = (void (*)(unsigned long)) timer_expired; timer.function = (void (*)(unsigned long)) timer_expired;
aha152x_internal_queue(&cmnd, &sem, resetting, 0, internal_done); aha152x_internal_queue(cmd, &sem, resetting, 0, internal_done);
add_timer(&timer); add_timer(&timer);
down(&sem); down(&sem);
del_timer(&timer); del_timer(&timer);
if(cmnd.SCp.phase & resetted) { if(cmd->SCp.phase & resetted) {
return SUCCESS; ret = SUCCESS;
} else { } else {
return FAILED; ret = FAILED;
} }
scsi_put_command(cmd);
spin_lock_irq(shpnt->host_lock);
return ret;
} }
void free_hard_reset_SCs(struct Scsi_Host *shpnt, Scsi_Cmnd **SCs) void free_hard_reset_SCs(struct Scsi_Host *shpnt, Scsi_Cmnd **SCs)
...@@ -1738,7 +1750,7 @@ void free_hard_reset_SCs(struct Scsi_Host *shpnt, Scsi_Cmnd **SCs) ...@@ -1738,7 +1750,7 @@ void free_hard_reset_SCs(struct Scsi_Host *shpnt, Scsi_Cmnd **SCs)
*/ */
int aha152x_bus_reset(Scsi_Cmnd *SCpnt) int aha152x_bus_reset(Scsi_Cmnd *SCpnt)
{ {
struct Scsi_Host *shpnt = SCpnt->host; struct Scsi_Host *shpnt = SCpnt->device->host;
unsigned long flags; unsigned long flags;
#if defined(AHA152X_DEBUG) #if defined(AHA152X_DEBUG)
...@@ -1822,7 +1834,7 @@ int aha152x_host_reset(Scsi_Cmnd * SCpnt) ...@@ -1822,7 +1834,7 @@ int aha152x_host_reset(Scsi_Cmnd * SCpnt)
aha152x_bus_reset(SCpnt); aha152x_bus_reset(SCpnt);
DPRINTK(debug_eh, DEBUG_LEAD "resetting ports\n", CMDINFO(SCpnt)); DPRINTK(debug_eh, DEBUG_LEAD "resetting ports\n", CMDINFO(SCpnt));
reset_ports(SCpnt->host); reset_ports(SCpnt->device->host);
return SUCCESS; return SUCCESS;
} }
...@@ -2052,9 +2064,9 @@ static void busfree_run(struct Scsi_Host *shpnt) ...@@ -2052,9 +2064,9 @@ static void busfree_run(struct Scsi_Host *shpnt)
cmnd->cmnd[4] = sizeof(ptr->sense_buffer); cmnd->cmnd[4] = sizeof(ptr->sense_buffer);
cmnd->cmnd[5] = 0; cmnd->cmnd[5] = 0;
cmnd->cmd_len = 6; cmnd->cmd_len = 6;
cmnd->host = ptr->host; cmnd->device->host = ptr->device->host;
cmnd->target = ptr->target; cmnd->device->id = ptr->device->id;
cmnd->lun = ptr->lun; cmnd->device->lun = ptr->device->lun;
cmnd->use_sg = 0; cmnd->use_sg = 0;
cmnd->request_buffer = ptr->sense_buffer; cmnd->request_buffer = ptr->sense_buffer;
cmnd->request_bufflen = sizeof(ptr->sense_buffer); cmnd->request_bufflen = sizeof(ptr->sense_buffer);
...@@ -2113,7 +2125,7 @@ static void busfree_run(struct Scsi_Host *shpnt) ...@@ -2113,7 +2125,7 @@ static void busfree_run(struct Scsi_Host *shpnt)
/* clear selection timeout */ /* clear selection timeout */
SETPORT(SSTAT1, SELTO); SETPORT(SSTAT1, SELTO);
SETPORT(SCSIID, (shpnt->this_id << OID_) | CURRENT_SC->target); SETPORT(SCSIID, (shpnt->this_id << OID_) | CURRENT_SC->device->id);
SETPORT(SXFRCTL1, (PARITY ? ENSPCHK : 0 ) | ENSTIMER); SETPORT(SXFRCTL1, (PARITY ? ENSPCHK : 0 ) | ENSTIMER);
SETPORT(SCSISEQ, ENSELO | ENAUTOATNO | (DISCONNECTED_SC ? ENRESELI : 0)); SETPORT(SCSISEQ, ENSELO | ENAUTOATNO | (DISCONNECTED_SC ? ENRESELI : 0));
} else { } else {
...@@ -2152,7 +2164,7 @@ static void seldo_run(struct Scsi_Host *shpnt) ...@@ -2152,7 +2164,7 @@ static void seldo_run(struct Scsi_Host *shpnt)
SETPORT(SSTAT0, CLRSELDO); SETPORT(SSTAT0, CLRSELDO);
ADDMSGO(IDENTIFY(RECONNECT, CURRENT_SC->lun)); ADDMSGO(IDENTIFY(RECONNECT, CURRENT_SC->device->lun));
if (CURRENT_SC->SCp.phase & aborting) { if (CURRENT_SC->SCp.phase & aborting) {
ADDMSGO(ABORT); ADDMSGO(ABORT);
...@@ -2472,7 +2484,7 @@ static void msgo_init(struct Scsi_Host *shpnt) ...@@ -2472,7 +2484,7 @@ static void msgo_init(struct Scsi_Host *shpnt)
{ {
if(MSGOLEN==0) { if(MSGOLEN==0) {
if((CURRENT_SC->SCp.phase & syncneg) && SYNCNEG==2 && SYNCRATE==0) { if((CURRENT_SC->SCp.phase & syncneg) && SYNCNEG==2 && SYNCRATE==0) {
ADDMSGO(IDENTIFY(RECONNECT, CURRENT_SC->lun)); ADDMSGO(IDENTIFY(RECONNECT, CURRENT_SC->device->lun));
} else { } else {
printk(INFO_LEAD "unexpected MESSAGE OUT phase; rejecting\n", CMDINFO(CURRENT_SC)); printk(INFO_LEAD "unexpected MESSAGE OUT phase; rejecting\n", CMDINFO(CURRENT_SC));
ADDMSGO(MESSAGE_REJECT); ADDMSGO(MESSAGE_REJECT);
...@@ -3376,7 +3388,7 @@ static void disp_enintr(struct Scsi_Host *shpnt) ...@@ -3376,7 +3388,7 @@ static void disp_enintr(struct Scsi_Host *shpnt)
static void show_command(Scsi_Cmnd *ptr) static void show_command(Scsi_Cmnd *ptr)
{ {
printk(KERN_DEBUG "0x%08x: target=%d; lun=%d; cmnd=(", printk(KERN_DEBUG "0x%08x: target=%d; lun=%d; cmnd=(",
(unsigned int) ptr, ptr->target, ptr->lun); (unsigned int) ptr, ptr->device->id, ptr->device->lun);
print_command(ptr->cmnd); print_command(ptr->cmnd);
...@@ -3441,7 +3453,7 @@ static int get_command(char *pos, Scsi_Cmnd * ptr) ...@@ -3441,7 +3453,7 @@ static int get_command(char *pos, Scsi_Cmnd * ptr)
int i; int i;
SPRINTF("0x%08x: target=%d; lun=%d; cmnd=( ", SPRINTF("0x%08x: target=%d; lun=%d; cmnd=( ",
(unsigned int) ptr, ptr->target, ptr->lun); (unsigned int) ptr, ptr->device->id, ptr->device->lun);
for (i = 0; i < COMMAND_SIZE(ptr->cmnd[0]); i++) for (i = 0; i < COMMAND_SIZE(ptr->cmnd[0]); i++)
SPRINTF("0x%02x ", ptr->cmnd[i]); SPRINTF("0x%02x ", ptr->cmnd[i]);
......
...@@ -597,8 +597,8 @@ static int aha1542_queuecommand(Scsi_Cmnd * SCpnt, void (*done) (Scsi_Cmnd *)) ...@@ -597,8 +597,8 @@ static int aha1542_queuecommand(Scsi_Cmnd * SCpnt, void (*done) (Scsi_Cmnd *))
unchar ahacmd = CMD_START_SCSI; unchar ahacmd = CMD_START_SCSI;
unchar direction; unchar direction;
unchar *cmd = (unchar *) SCpnt->cmnd; unchar *cmd = (unchar *) SCpnt->cmnd;
unchar target = SCpnt->target; unchar target = SCpnt->device->id;
unchar lun = SCpnt->lun; unchar lun = SCpnt->device->lun;
unsigned long flags; unsigned long flags;
void *buff = SCpnt->request_buffer; void *buff = SCpnt->request_buffer;
int bufflen = SCpnt->request_bufflen; int bufflen = SCpnt->request_bufflen;
...@@ -608,8 +608,8 @@ static int aha1542_queuecommand(Scsi_Cmnd * SCpnt, void (*done) (Scsi_Cmnd *)) ...@@ -608,8 +608,8 @@ static int aha1542_queuecommand(Scsi_Cmnd * SCpnt, void (*done) (Scsi_Cmnd *))
DEB(int i); DEB(int i);
mb = HOSTDATA(SCpnt->host)->mb; mb = HOSTDATA(SCpnt->device->host)->mb;
ccb = HOSTDATA(SCpnt->host)->ccb; ccb = HOSTDATA(SCpnt->device->host)->ccb;
DEB(if (target > 1) { DEB(if (target > 1) {
SCpnt->result = DID_TIME_OUT << 16; SCpnt->result = DID_TIME_OUT << 16;
...@@ -653,25 +653,25 @@ static int aha1542_queuecommand(Scsi_Cmnd * SCpnt, void (*done) (Scsi_Cmnd *)) ...@@ -653,25 +653,25 @@ static int aha1542_queuecommand(Scsi_Cmnd * SCpnt, void (*done) (Scsi_Cmnd *))
is how the host adapter will scan for them */ is how the host adapter will scan for them */
spin_lock_irqsave(&aha1542_lock, flags); spin_lock_irqsave(&aha1542_lock, flags);
mbo = HOSTDATA(SCpnt->host)->aha1542_last_mbo_used + 1; mbo = HOSTDATA(SCpnt->device->host)->aha1542_last_mbo_used + 1;
if (mbo >= AHA1542_MAILBOXES) if (mbo >= AHA1542_MAILBOXES)
mbo = 0; mbo = 0;
do { do {
if (mb[mbo].status == 0 && HOSTDATA(SCpnt->host)->SCint[mbo] == NULL) if (mb[mbo].status == 0 && HOSTDATA(SCpnt->device->host)->SCint[mbo] == NULL)
break; break;
mbo++; mbo++;
if (mbo >= AHA1542_MAILBOXES) if (mbo >= AHA1542_MAILBOXES)
mbo = 0; mbo = 0;
} while (mbo != HOSTDATA(SCpnt->host)->aha1542_last_mbo_used); } while (mbo != HOSTDATA(SCpnt->device->host)->aha1542_last_mbo_used);
if (mb[mbo].status || HOSTDATA(SCpnt->host)->SCint[mbo]) if (mb[mbo].status || HOSTDATA(SCpnt->device->host)->SCint[mbo])
panic("Unable to find empty mailbox for aha1542.\n"); panic("Unable to find empty mailbox for aha1542.\n");
HOSTDATA(SCpnt->host)->SCint[mbo] = SCpnt; /* This will effectively prevent someone else from HOSTDATA(SCpnt->device->host)->SCint[mbo] = SCpnt; /* This will effectively prevent someone else from
screwing with this cdb. */ screwing with this cdb. */
HOSTDATA(SCpnt->host)->aha1542_last_mbo_used = mbo; HOSTDATA(SCpnt->device->host)->aha1542_last_mbo_used = mbo;
spin_unlock_irqrestore(&aha1542_lock, flags); spin_unlock_irqrestore(&aha1542_lock, flags);
#ifdef DEBUG #ifdef DEBUG
...@@ -762,7 +762,7 @@ static int aha1542_queuecommand(Scsi_Cmnd * SCpnt, void (*done) (Scsi_Cmnd *)) ...@@ -762,7 +762,7 @@ static int aha1542_queuecommand(Scsi_Cmnd * SCpnt, void (*done) (Scsi_Cmnd *))
aha1542_stat()); aha1542_stat());
SCpnt->scsi_done = done; SCpnt->scsi_done = done;
mb[mbo].status = 1; mb[mbo].status = 1;
aha1542_out(SCpnt->host->io_port, &ahacmd, 1); /* start scsi command */ aha1542_out(SCpnt->device->host->io_port, &ahacmd, 1); /* start scsi command */
DEB(aha1542_stat()); DEB(aha1542_stat());
} else } else
printk("aha1542_queuecommand: done can't be NULL\n"); printk("aha1542_queuecommand: done can't be NULL\n");
...@@ -1356,7 +1356,7 @@ static int aha1542_abort(Scsi_Cmnd * SCpnt) ...@@ -1356,7 +1356,7 @@ static int aha1542_abort(Scsi_Cmnd * SCpnt)
*/ */
printk(KERN_ERR "aha1542.c: Unable to abort command for target %d\n", printk(KERN_ERR "aha1542.c: Unable to abort command for target %d\n",
SCpnt->target); SCpnt->device->id);
return FAILED; return FAILED;
} }
...@@ -1368,36 +1368,36 @@ static int aha1542_dev_reset(Scsi_Cmnd * SCpnt) ...@@ -1368,36 +1368,36 @@ static int aha1542_dev_reset(Scsi_Cmnd * SCpnt)
{ {
unsigned long flags; unsigned long flags;
struct mailbox *mb; struct mailbox *mb;
unchar target = SCpnt->target; unchar target = SCpnt->device->id;
unchar lun = SCpnt->lun; unchar lun = SCpnt->device->lun;
int mbo; int mbo;
struct ccb *ccb; struct ccb *ccb;
unchar ahacmd = CMD_START_SCSI; unchar ahacmd = CMD_START_SCSI;
ccb = HOSTDATA(SCpnt->host)->ccb; ccb = HOSTDATA(SCpnt->device->host)->ccb;
mb = HOSTDATA(SCpnt->host)->mb; mb = HOSTDATA(SCpnt->device->host)->mb;
spin_lock_irqsave(&aha1542_lock, flags); spin_lock_irqsave(&aha1542_lock, flags);
mbo = HOSTDATA(SCpnt->host)->aha1542_last_mbo_used + 1; mbo = HOSTDATA(SCpnt->device->host)->aha1542_last_mbo_used + 1;
if (mbo >= AHA1542_MAILBOXES) if (mbo >= AHA1542_MAILBOXES)
mbo = 0; mbo = 0;
do { do {
if (mb[mbo].status == 0 && HOSTDATA(SCpnt->host)->SCint[mbo] == NULL) if (mb[mbo].status == 0 && HOSTDATA(SCpnt->device->host)->SCint[mbo] == NULL)
break; break;
mbo++; mbo++;
if (mbo >= AHA1542_MAILBOXES) if (mbo >= AHA1542_MAILBOXES)
mbo = 0; mbo = 0;
} while (mbo != HOSTDATA(SCpnt->host)->aha1542_last_mbo_used); } while (mbo != HOSTDATA(SCpnt->device->host)->aha1542_last_mbo_used);
if (mb[mbo].status || HOSTDATA(SCpnt->host)->SCint[mbo]) if (mb[mbo].status || HOSTDATA(SCpnt->device->host)->SCint[mbo])
panic("Unable to find empty mailbox for aha1542.\n"); panic("Unable to find empty mailbox for aha1542.\n");
HOSTDATA(SCpnt->host)->SCint[mbo] = SCpnt; /* This will effectively HOSTDATA(SCpnt->device->host)->SCint[mbo] = SCpnt; /* This will effectively
prevent someone else from prevent someone else from
screwing with this cdb. */ screwing with this cdb. */
HOSTDATA(SCpnt->host)->aha1542_last_mbo_used = mbo; HOSTDATA(SCpnt->device->host)->aha1542_last_mbo_used = mbo;
spin_unlock_irqrestore(&aha1542_lock, flags); spin_unlock_irqrestore(&aha1542_lock, flags);
any2scsi(mb[mbo].ccbptr, SCSI_BUF_PA(&ccb[mbo])); /* This gets trashed for some reason */ any2scsi(mb[mbo].ccbptr, SCSI_BUF_PA(&ccb[mbo])); /* This gets trashed for some reason */
...@@ -1415,9 +1415,9 @@ static int aha1542_dev_reset(Scsi_Cmnd * SCpnt) ...@@ -1415,9 +1415,9 @@ static int aha1542_dev_reset(Scsi_Cmnd * SCpnt)
* Now tell the 1542 to flush all pending commands for this * Now tell the 1542 to flush all pending commands for this
* target * target
*/ */
aha1542_out(SCpnt->host->io_port, &ahacmd, 1); aha1542_out(SCpnt->device->host->io_port, &ahacmd, 1);
printk(KERN_WARNING "aha1542.c: Trying device reset for target %d\n", SCpnt->target); printk(KERN_WARNING "aha1542.c: Trying device reset for target %d\n", SCpnt->device->id);
return SUCCESS; return SUCCESS;
...@@ -1467,7 +1467,7 @@ static int aha1542_bus_reset(Scsi_Cmnd * SCpnt) ...@@ -1467,7 +1467,7 @@ static int aha1542_bus_reset(Scsi_Cmnd * SCpnt)
* we do this? Try this first, and we can add that later * we do this? Try this first, and we can add that later
* if it turns out to be useful. * if it turns out to be useful.
*/ */
outb(SCRST, CONTROL(SCpnt->host->io_port)); outb(SCRST, CONTROL(SCpnt->device->host->io_port));
/* /*
* Wait for the thing to settle down a bit. Unfortunately * Wait for the thing to settle down a bit. Unfortunately
...@@ -1476,11 +1476,11 @@ static int aha1542_bus_reset(Scsi_Cmnd * SCpnt) ...@@ -1476,11 +1476,11 @@ static int aha1542_bus_reset(Scsi_Cmnd * SCpnt)
* check for timeout, and if we are doing something like this * check for timeout, and if we are doing something like this
* we are pretty desperate anyways. * we are pretty desperate anyways.
*/ */
spin_unlock_irq(SCpnt->host->host_lock); spin_unlock_irq(SCpnt->device->host->host_lock);
scsi_sleep(4 * HZ); scsi_sleep(4 * HZ);
spin_lock_irq(SCpnt->host->host_lock); spin_lock_irq(SCpnt->device->host->host_lock);
WAIT(STATUS(SCpnt->host->io_port), WAIT(STATUS(SCpnt->device->host->io_port),
STATMASK, INIT | IDLE, STST | DIAGF | INVDCMD | DF | CDF); STATMASK, INIT | IDLE, STST | DIAGF | INVDCMD | DF | CDF);
/* /*
...@@ -1489,12 +1489,12 @@ static int aha1542_bus_reset(Scsi_Cmnd * SCpnt) ...@@ -1489,12 +1489,12 @@ static int aha1542_bus_reset(Scsi_Cmnd * SCpnt)
* out. We do not try and restart any commands or anything - * out. We do not try and restart any commands or anything -
* the strategy handler takes care of that crap. * the strategy handler takes care of that crap.
*/ */
printk(KERN_WARNING "Sent BUS RESET to scsi host %d\n", SCpnt->host->host_no); printk(KERN_WARNING "Sent BUS RESET to scsi host %d\n", SCpnt->device->host->host_no);
for (i = 0; i < AHA1542_MAILBOXES; i++) { for (i = 0; i < AHA1542_MAILBOXES; i++) {
if (HOSTDATA(SCpnt->host)->SCint[i] != NULL) { if (HOSTDATA(SCpnt->device->host)->SCint[i] != NULL) {
Scsi_Cmnd *SCtmp; Scsi_Cmnd *SCtmp;
SCtmp = HOSTDATA(SCpnt->host)->SCint[i]; SCtmp = HOSTDATA(SCpnt->device->host)->SCint[i];
if (SCtmp->device->soft_reset) { if (SCtmp->device->soft_reset) {
...@@ -1510,8 +1510,8 @@ static int aha1542_bus_reset(Scsi_Cmnd * SCpnt) ...@@ -1510,8 +1510,8 @@ static int aha1542_bus_reset(Scsi_Cmnd * SCpnt)
kfree(SCtmp->host_scribble); kfree(SCtmp->host_scribble);
SCtmp->host_scribble = NULL; SCtmp->host_scribble = NULL;
} }
HOSTDATA(SCpnt->host)->SCint[i] = NULL; HOSTDATA(SCpnt->device->host)->SCint[i] = NULL;
HOSTDATA(SCpnt->host)->mb[i].status = 0; HOSTDATA(SCpnt->device->host)->mb[i].status = 0;
} }
} }
...@@ -1531,7 +1531,7 @@ static int aha1542_host_reset(Scsi_Cmnd * SCpnt) ...@@ -1531,7 +1531,7 @@ static int aha1542_host_reset(Scsi_Cmnd * SCpnt)
* we do this? Try this first, and we can add that later * we do this? Try this first, and we can add that later
* if it turns out to be useful. * if it turns out to be useful.
*/ */
outb(HRST | SCRST, CONTROL(SCpnt->host->io_port)); outb(HRST | SCRST, CONTROL(SCpnt->device->host->io_port));
/* /*
* Wait for the thing to settle down a bit. Unfortunately * Wait for the thing to settle down a bit. Unfortunately
...@@ -1540,18 +1540,18 @@ static int aha1542_host_reset(Scsi_Cmnd * SCpnt) ...@@ -1540,18 +1540,18 @@ static int aha1542_host_reset(Scsi_Cmnd * SCpnt)
* check for timeout, and if we are doing something like this * check for timeout, and if we are doing something like this
* we are pretty desperate anyways. * we are pretty desperate anyways.
*/ */
spin_unlock_irq(SCpnt->host->host_lock); spin_unlock_irq(SCpnt->device->host->host_lock);
scsi_sleep(4 * HZ); scsi_sleep(4 * HZ);
spin_lock_irq(SCpnt->host->host_lock); spin_lock_irq(SCpnt->device->host->host_lock);
WAIT(STATUS(SCpnt->host->io_port), WAIT(STATUS(SCpnt->device->host->io_port),
STATMASK, INIT | IDLE, STST | DIAGF | INVDCMD | DF | CDF); STATMASK, INIT | IDLE, STST | DIAGF | INVDCMD | DF | CDF);
/* /*
* We need to do this too before the 1542 can interact with * We need to do this too before the 1542 can interact with
* us again. * us again.
*/ */
setup_mailboxes(SCpnt->host->io_port, SCpnt->host); setup_mailboxes(SCpnt->device->host->io_port, SCpnt->device->host);
/* /*
* Now try to pick up the pieces. For all pending commands, * Now try to pick up the pieces. For all pending commands,
...@@ -1559,12 +1559,12 @@ static int aha1542_host_reset(Scsi_Cmnd * SCpnt) ...@@ -1559,12 +1559,12 @@ static int aha1542_host_reset(Scsi_Cmnd * SCpnt)
* out. We do not try and restart any commands or anything - * out. We do not try and restart any commands or anything -
* the strategy handler takes care of that crap. * the strategy handler takes care of that crap.
*/ */
printk(KERN_WARNING "Sent BUS RESET to scsi host %d\n", SCpnt->host->host_no); printk(KERN_WARNING "Sent BUS RESET to scsi host %d\n", SCpnt->device->host->host_no);
for (i = 0; i < AHA1542_MAILBOXES; i++) { for (i = 0; i < AHA1542_MAILBOXES; i++) {
if (HOSTDATA(SCpnt->host)->SCint[i] != NULL) { if (HOSTDATA(SCpnt->device->host)->SCint[i] != NULL) {
Scsi_Cmnd *SCtmp; Scsi_Cmnd *SCtmp;
SCtmp = HOSTDATA(SCpnt->host)->SCint[i]; SCtmp = HOSTDATA(SCpnt->device->host)->SCint[i];
if (SCtmp->device->soft_reset) { if (SCtmp->device->soft_reset) {
/* /*
...@@ -1579,8 +1579,8 @@ static int aha1542_host_reset(Scsi_Cmnd * SCpnt) ...@@ -1579,8 +1579,8 @@ static int aha1542_host_reset(Scsi_Cmnd * SCpnt)
kfree(SCtmp->host_scribble); kfree(SCtmp->host_scribble);
SCtmp->host_scribble = NULL; SCtmp->host_scribble = NULL;
} }
HOSTDATA(SCpnt->host)->SCint[i] = NULL; HOSTDATA(SCpnt->device->host)->SCint[i] = NULL;
HOSTDATA(SCpnt->host)->mb[i].status = 0; HOSTDATA(SCpnt->device->host)->mb[i].status = 0;
} }
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment