Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
linux
Commits
e6473d16
Commit
e6473d16
authored
Feb 11, 2003
by
Randy Dunlap
Committed by
James Bottomley
Feb 11, 2003
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
fix scsi/aha15*.c for 2.5.60
parent
2a97afb8
Changes
2
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
88 additions
and
76 deletions
+88
-76
drivers/scsi/aha152x.c
drivers/scsi/aha152x.c
+45
-33
drivers/scsi/aha1542.c
drivers/scsi/aha1542.c
+43
-43
No files found.
drivers/scsi/aha152x.c
View file @
e6473d16
...
@@ -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
)
&
cmn
d
;
timer
.
data
=
(
unsigned
long
)
cm
d
;
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
(
&
cmn
d
,
&
sem
,
resetting
,
0
,
internal_done
);
aha152x_internal_queue
(
cm
d
,
&
sem
,
resetting
,
0
,
internal_done
);
add_timer
(
&
timer
);
add_timer
(
&
timer
);
down
(
&
sem
);
down
(
&
sem
);
del_timer
(
&
timer
);
del_timer
(
&
timer
);
if
(
cm
nd
.
SCp
.
phase
&
resetted
)
{
if
(
cm
d
->
SCp
.
phase
&
resetted
)
{
ret
urn
SUCCESS
;
ret
=
SUCCESS
;
}
else
{
}
else
{
ret
urn
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
]);
...
...
drivers/scsi/aha1542.c
View file @
e6473d16
...
@@ -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
;
}
}
}
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment