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
f4e7ddb6
Commit
f4e7ddb6
authored
Jun 26, 2004
by
Guennadi Liakhovetski
Committed by
James Bottomley
Jun 26, 2004
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[PATCH] kill obsolete typedefs and wrappers from tmscsim
Signed-off-by:
James Bottomley
<
James.Bottomley@SteelEye.com
>
parent
f51608c8
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
462 additions
and
554 deletions
+462
-554
drivers/scsi/scsiiom.c
drivers/scsi/scsiiom.c
+153
-154
drivers/scsi/tmscsim.c
drivers/scsi/tmscsim.c
+196
-239
drivers/scsi/tmscsim.h
drivers/scsi/tmscsim.h
+113
-161
No files found.
drivers/scsi/scsiiom.c
View file @
f4e7ddb6
...
@@ -6,7 +6,7 @@
...
@@ -6,7 +6,7 @@
***********************************************************************/
***********************************************************************/
/* $Id: scsiiom.c,v 2.55.2.17 2000/12/20 00:39:37 garloff Exp $ */
/* $Id: scsiiom.c,v 2.55.2.17 2000/12/20 00:39:37 garloff Exp $ */
static
void
__inline__
static
void
__inline__
dc390_freetag
(
PDCB
pDCB
,
PSRB
pSRB
)
dc390_freetag
(
struct
dc390_dcb
*
pDCB
,
struct
dc390_srb
*
pSRB
)
{
{
if
(
pSRB
->
TagNumber
<
255
)
{
if
(
pSRB
->
TagNumber
<
255
)
{
pDCB
->
TagMask
&=
~
(
1
<<
pSRB
->
TagNumber
);
/* free tag mask */
pDCB
->
TagMask
&=
~
(
1
<<
pSRB
->
TagNumber
);
/* free tag mask */
...
@@ -15,10 +15,10 @@ dc390_freetag (PDCB pDCB, PSRB pSRB)
...
@@ -15,10 +15,10 @@ dc390_freetag (PDCB pDCB, PSRB pSRB)
}
}
static
UCHAR
static
u8
dc390_StartSCSI
(
PACB
pACB
,
PDCB
pDCB
,
PSRB
pSRB
)
dc390_StartSCSI
(
struct
dc390_acb
*
pACB
,
struct
dc390_dcb
*
pDCB
,
struct
dc390_srb
*
pSRB
)
{
{
UCHAR
cmd
;
UCHAR
disc_allowed
,
try_sync_nego
;
u8
cmd
;
u8
disc_allowed
,
try_sync_nego
;
pSRB
->
ScsiPhase
=
SCSI_NOP0
;
pSRB
->
ScsiPhase
=
SCSI_NOP0
;
...
@@ -69,7 +69,7 @@ dc390_StartSCSI( PACB pACB, PDCB pDCB, PSRB pSRB )
...
@@ -69,7 +69,7 @@ dc390_StartSCSI( PACB pACB, PDCB pDCB, PSRB pSRB )
/* Change 99/05/31: Don't use tags when not disconnecting (BUSY) */
/* Change 99/05/31: Don't use tags when not disconnecting (BUSY) */
if
((
pDCB
->
SyncMode
&
EN_TAG_QUEUEING
)
&&
disc_allowed
)
if
((
pDCB
->
SyncMode
&
EN_TAG_QUEUEING
)
&&
disc_allowed
)
{
{
UCHAR
tag_no
=
0
;
u8
tag_no
=
0
;
while
((
1
<<
tag_no
)
&
pDCB
->
TagMask
)
tag_no
++
;
while
((
1
<<
tag_no
)
&
pDCB
->
TagMask
)
tag_no
++
;
if
(
tag_no
>=
sizeof
(
pDCB
->
TagMask
)
*
8
||
tag_no
>=
pDCB
->
MaxCommand
)
{
if
(
tag_no
>=
sizeof
(
pDCB
->
TagMask
)
*
8
||
tag_no
>=
pDCB
->
MaxCommand
)
{
printk
(
KERN_WARNING
"DC390: Out of tags for Dev. %02x %02x
\n
"
,
pDCB
->
TargetID
,
pDCB
->
TargetLUN
);
printk
(
KERN_WARNING
"DC390: Out of tags for Dev. %02x %02x
\n
"
,
pDCB
->
TargetID
,
pDCB
->
TargetLUN
);
...
@@ -92,7 +92,7 @@ dc390_StartSCSI( PACB pACB, PDCB pDCB, PSRB pSRB )
...
@@ -92,7 +92,7 @@ dc390_StartSCSI( PACB pACB, PDCB pDCB, PSRB pSRB )
if
(
try_sync_nego
)
if
(
try_sync_nego
)
{
{
UCHAR
Sync_Off
=
pDCB
->
SyncOffset
;
u8
Sync_Off
=
pDCB
->
SyncOffset
;
DEBUG0
(
printk
(
KERN_INFO
"DC390: NEW Sync Nego code triggered (%i %i)
\n
"
,
pDCB
->
TargetID
,
pDCB
->
TargetLUN
));
DEBUG0
(
printk
(
KERN_INFO
"DC390: NEW Sync Nego code triggered (%i %i)
\n
"
,
pDCB
->
TargetID
,
pDCB
->
TargetLUN
));
pSRB
->
MsgOutBuf
[
0
]
=
EXTENDED_MESSAGE
;
pSRB
->
MsgOutBuf
[
0
]
=
EXTENDED_MESSAGE
;
pSRB
->
MsgOutBuf
[
1
]
=
3
;
pSRB
->
MsgOutBuf
[
1
]
=
3
;
...
@@ -121,8 +121,8 @@ dc390_StartSCSI( PACB pACB, PDCB pDCB, PSRB pSRB )
...
@@ -121,8 +121,8 @@ dc390_StartSCSI( PACB pACB, PDCB pDCB, PSRB pSRB )
}
}
else
/* write cmnd to bus */
else
/* write cmnd to bus */
{
{
PUCHAR
ptr
;
UCHAR
i
;
u8
*
ptr
;
u8
i
;
ptr
=
(
PUCHAR
)
pSRB
->
pcmd
->
cmnd
;
ptr
=
(
u8
*
)
pSRB
->
pcmd
->
cmnd
;
for
(
i
=
0
;
i
<
pSRB
->
pcmd
->
cmd_len
;
i
++
)
for
(
i
=
0
;
i
<
pSRB
->
pcmd
->
cmd_len
;
i
++
)
DC390_write8
(
ScsiFifo
,
*
(
ptr
++
));
DC390_write8
(
ScsiFifo
,
*
(
ptr
++
));
}
}
...
@@ -154,18 +154,17 @@ dc390_StartSCSI( PACB pACB, PDCB pDCB, PSRB pSRB )
...
@@ -154,18 +154,17 @@ dc390_StartSCSI( PACB pACB, PDCB pDCB, PSRB pSRB )
#if DMA_INT
#if DMA_INT
/* This is similar to AM53C974.c ... */
/* This is similar to AM53C974.c ... */
static
UCHAR
static
u8
dc390_dma_intr
(
PACB
pACB
)
dc390_dma_intr
(
struct
dc390_acb
*
pACB
)
{
{
PSRB
pSRB
;
struct
dc390_srb
*
pSRB
;
UCHAR
dstate
;
u8
dstate
;
DEBUG0
(
USHORT
pstate
;
PDEVDECL1
);
DEBUG0
(
u16
pstate
;
struct
pci_dev
*
pdev
=
pACB
->
pdev
);
DEBUG0
(
PDEVSET1
);
DEBUG0
(
pci_read_config_word
(
pdev
,
PCI_STATUS
,
&
pstate
));
DEBUG0
(
PCI_READ_CONFIG_WORD
(
PDEV
,
PCI_STATUS
,
&
pstate
));
DEBUG0
(
if
(
pstate
&
(
PCI_STATUS_SIG_SYSTEM_ERROR
|
PCI_STATUS_DETECTED_PARITY
))
\
DEBUG0
(
if
(
pstate
&
(
PCI_STATUS_SIG_SYSTEM_ERROR
|
PCI_STATUS_DETECTED_PARITY
))
\
{
printk
(
KERN_WARNING
"DC390: PCI state = %04x!
\n
"
,
pstate
);
\
{
printk
(
KERN_WARNING
"DC390: PCI state = %04x!
\n
"
,
pstate
);
\
PCI_WRITE_CONFIG_WORD
(
PDEV
,
PCI_STATUS
,
(
PCI_STATUS_SIG_SYSTEM_ERROR
|
PCI_STATUS_DETECTED_PARITY
));});
pci_write_config_word
(
pdev
,
PCI_STATUS
,
(
PCI_STATUS_SIG_SYSTEM_ERROR
|
PCI_STATUS_DETECTED_PARITY
));});
dstate
=
DC390_read8
(
DMA_Status
);
dstate
=
DC390_read8
(
DMA_Status
);
...
@@ -179,7 +178,7 @@ dc390_dma_intr (PACB pACB)
...
@@ -179,7 +178,7 @@ dc390_dma_intr (PACB pACB)
}
}
if
(
dstate
&
DMA_XFER_DONE
)
if
(
dstate
&
DMA_XFER_DONE
)
{
{
UINT
residual
,
xferCnt
;
int
ctr
=
6000000
;
u32
residual
,
xferCnt
;
int
ctr
=
6000000
;
if
(
!
(
DC390_read8
(
DMA_Cmd
)
&
READ_DIRECTION
))
if
(
!
(
DC390_read8
(
DMA_Cmd
)
&
READ_DIRECTION
))
{
{
do
do
...
@@ -217,18 +216,18 @@ dc390_dma_intr (PACB pACB)
...
@@ -217,18 +216,18 @@ dc390_dma_intr (PACB pACB)
static
irqreturn_t
__inline__
static
irqreturn_t
__inline__
DC390_Interrupt
(
int
irq
,
void
*
dev_id
,
struct
pt_regs
*
regs
)
DC390_Interrupt
(
int
irq
,
void
*
dev_id
,
struct
pt_regs
*
regs
)
{
{
PACB
pACB
,
pACB2
;
struct
dc390_acb
*
pACB
,
*
pACB2
;
PDCB
pDCB
;
struct
dc390_dcb
*
pDCB
;
PSRB
pSRB
;
struct
dc390_srb
*
pSRB
;
UCHAR
sstatus
=
0
;
u8
sstatus
=
0
;
UCHAR
phase
;
u8
phase
;
void
(
*
stateV
)(
PACB
,
PSRB
,
PUCHAR
);
void
(
*
stateV
)(
struct
dc390_acb
*
,
struct
dc390_srb
*
,
u8
*
);
UCHAR
istate
,
istatus
;
u8
istate
,
istatus
;
#if DMA_INT
#if DMA_INT
UCHAR
dstatus
;
u8
dstatus
;
#endif
#endif
pACB
=
(
PACB
)
dev_id
;
pACB
=
(
struct
dc390_acb
*
)
dev_id
;
for
(
pACB2
=
dc390_pACB_start
;
(
pACB2
&&
pACB2
!=
pACB
);
pACB2
=
pACB2
->
pNextACB
);
for
(
pACB2
=
dc390_pACB_start
;
(
pACB2
&&
pACB2
!=
pACB
);
pACB2
=
pACB2
->
pNextACB
);
if
(
!
pACB2
)
if
(
!
pACB2
)
{
{
...
@@ -323,7 +322,7 @@ DC390_Interrupt( int irq, void *dev_id, struct pt_regs *regs)
...
@@ -323,7 +322,7 @@ DC390_Interrupt( int irq, void *dev_id, struct pt_regs *regs)
(
*
stateV
)(
pACB
,
pSRB
,
&
sstatus
);
(
*
stateV
)(
pACB
,
pSRB
,
&
sstatus
);
pSRB
->
ScsiPhase
=
sstatus
&
7
;
pSRB
->
ScsiPhase
=
sstatus
&
7
;
phase
=
(
UCHAR
)
sstatus
&
7
;
phase
=
(
u8
)
sstatus
&
7
;
DEBUG1
(
printk
(
KERN_INFO
"DC390: [%i]%s(1) (%02x)
\n
"
,
phase
,
dc390_p1_str
[
phase
],
sstatus
));
DEBUG1
(
printk
(
KERN_INFO
"DC390: [%i]%s(1) (%02x)
\n
"
,
phase
,
dc390_p1_str
[
phase
],
sstatus
));
stateV
=
(
void
*
)
dc390_phase1
[
phase
];
stateV
=
(
void
*
)
dc390_phase1
[
phase
];
(
*
stateV
)(
pACB
,
pSRB
,
&
sstatus
);
(
*
stateV
)(
pACB
,
pSRB
,
&
sstatus
);
...
@@ -345,12 +344,12 @@ static irqreturn_t do_DC390_Interrupt( int irq, void *dev_id, struct pt_regs *re
...
@@ -345,12 +344,12 @@ static irqreturn_t do_DC390_Interrupt( int irq, void *dev_id, struct pt_regs *re
}
}
static
void
static
void
dc390_DataOut_0
(
PACB
pACB
,
PSRB
pSRB
,
PUCHAR
psstatus
)
dc390_DataOut_0
(
struct
dc390_acb
*
pACB
,
struct
dc390_srb
*
pSRB
,
u8
*
psstatus
)
{
{
UCHAR
sstatus
;
u8
sstatus
;
PSGL
psgl
;
struct
scatterlist
*
psgl
;
UINT
ResidCnt
,
xferCnt
;
u32
ResidCnt
,
xferCnt
;
UCHAR
dstate
=
0
;
u8
dstate
=
0
;
sstatus
=
*
psstatus
;
sstatus
=
*
psstatus
;
...
@@ -390,10 +389,10 @@ dc390_DataOut_0( PACB pACB, PSRB pSRB, PUCHAR psstatus)
...
@@ -390,10 +389,10 @@ dc390_DataOut_0( PACB pACB, PSRB pSRB, PUCHAR psstatus)
}
}
else
else
{
{
ResidCnt
=
(
UINT
)
DC390_read8
(
Current_Fifo
)
&
0x1f
;
ResidCnt
=
(
u32
)
DC390_read8
(
Current_Fifo
)
&
0x1f
;
ResidCnt
|=
(
UINT
)
DC390_read8
(
CtcReg_High
)
<<
16
;
ResidCnt
|=
(
u32
)
DC390_read8
(
CtcReg_High
)
<<
16
;
ResidCnt
|=
(
UINT
)
DC390_read8
(
CtcReg_Mid
)
<<
8
;
ResidCnt
|=
(
u32
)
DC390_read8
(
CtcReg_Mid
)
<<
8
;
ResidCnt
+=
(
UINT
)
DC390_read8
(
CtcReg_Low
);
ResidCnt
+=
(
u32
)
DC390_read8
(
CtcReg_Low
);
xferCnt
=
pSRB
->
SGToBeXferLen
-
ResidCnt
;
xferCnt
=
pSRB
->
SGToBeXferLen
-
ResidCnt
;
pSRB
->
SGBusAddr
+=
xferCnt
;
pSRB
->
SGBusAddr
+=
xferCnt
;
...
@@ -409,13 +408,13 @@ dc390_DataOut_0( PACB pACB, PSRB pSRB, PUCHAR psstatus)
...
@@ -409,13 +408,13 @@ dc390_DataOut_0( PACB pACB, PSRB pSRB, PUCHAR psstatus)
}
}
static
void
static
void
dc390_DataIn_0
(
PACB
pACB
,
PSRB
pSRB
,
PUCHAR
psstatus
)
dc390_DataIn_0
(
struct
dc390_acb
*
pACB
,
struct
dc390_srb
*
pSRB
,
u8
*
psstatus
)
{
{
UCHAR
sstatus
,
residual
,
bval
;
u8
sstatus
,
residual
,
bval
;
PSGL
psgl
;
struct
scatterlist
*
psgl
;
UINT
ResidCnt
,
i
;
u32
ResidCnt
,
i
;
ULONG
xferCnt
;
unsigned
long
xferCnt
;
PUCHAR
ptr
;
u8
*
ptr
;
sstatus
=
*
psstatus
;
sstatus
=
*
psstatus
;
...
@@ -443,9 +442,9 @@ dc390_DataIn_0( PACB pACB, PSRB pSRB, PUCHAR psstatus)
...
@@ -443,9 +442,9 @@ dc390_DataIn_0( PACB pACB, PSRB pSRB, PUCHAR psstatus)
}
}
dc390_laststatus
&=
~
0xff000000
;
dc390_laststatus
&=
~
0xff000000
;
dc390_laststatus
|=
dstate
<<
24
;
dc390_laststatus
|=
dstate
<<
24
;
DEBUG1
(
ResidCnt
=
((
ULONG
)
DC390_read8
(
CtcReg_High
)
<<
16
)
\
DEBUG1
(
ResidCnt
=
((
unsigned
long
)
DC390_read8
(
CtcReg_High
)
<<
16
)
\
+
((
ULONG
)
DC390_read8
(
CtcReg_Mid
)
<<
8
)
\
+
((
unsigned
long
)
DC390_read8
(
CtcReg_Mid
)
<<
8
)
\
+
((
ULONG
)
DC390_read8
(
CtcReg_Low
)));
+
((
unsigned
long
)
DC390_read8
(
CtcReg_Low
)));
DEBUG1
(
printk
(
KERN_DEBUG
"Count_2_Zero (ResidCnt=%i,ToBeXfer=%li),"
,
ResidCnt
,
pSRB
->
SGToBeXferLen
));
DEBUG1
(
printk
(
KERN_DEBUG
"Count_2_Zero (ResidCnt=%i,ToBeXfer=%li),"
,
ResidCnt
,
pSRB
->
SGToBeXferLen
));
DC390_write8
(
DMA_Cmd
,
READ_DIRECTION
+
DMA_IDLE_CMD
);
/* | DMA_INT */
DC390_write8
(
DMA_Cmd
,
READ_DIRECTION
+
DMA_IDLE_CMD
);
/* | DMA_INT */
...
@@ -501,11 +500,11 @@ dc390_DataIn_0( PACB pACB, PSRB pSRB, PUCHAR psstatus)
...
@@ -501,11 +500,11 @@ dc390_DataIn_0( PACB pACB, PSRB pSRB, PUCHAR psstatus)
dc390_laststatus
&=
~
0xff000000
;
dc390_laststatus
|=
bval
<<
24
;
dc390_laststatus
&=
~
0xff000000
;
dc390_laststatus
|=
bval
<<
24
;
DEBUG1
(
printk
(
KERN_DEBUG
"Blast: Read %i times DMA_Status %02x"
,
0xa000
-
i
,
bval
));
DEBUG1
(
printk
(
KERN_DEBUG
"Blast: Read %i times DMA_Status %02x"
,
0xa000
-
i
,
bval
));
ResidCnt
=
(
UINT
)
DC390_read8
(
CtcReg_High
);
ResidCnt
=
(
u32
)
DC390_read8
(
CtcReg_High
);
ResidCnt
<<=
8
;
ResidCnt
<<=
8
;
ResidCnt
|=
(
UINT
)
DC390_read8
(
CtcReg_Mid
);
ResidCnt
|=
(
u32
)
DC390_read8
(
CtcReg_Mid
);
ResidCnt
<<=
8
;
ResidCnt
<<=
8
;
ResidCnt
|=
(
UINT
)
DC390_read8
(
CtcReg_Low
);
ResidCnt
|=
(
u32
)
DC390_read8
(
CtcReg_Low
);
xferCnt
=
pSRB
->
SGToBeXferLen
-
ResidCnt
;
xferCnt
=
pSRB
->
SGToBeXferLen
-
ResidCnt
;
pSRB
->
SGBusAddr
+=
xferCnt
;
pSRB
->
SGBusAddr
+=
xferCnt
;
...
@@ -515,7 +514,7 @@ dc390_DataIn_0( PACB pACB, PSRB pSRB, PUCHAR psstatus)
...
@@ -515,7 +514,7 @@ dc390_DataIn_0( PACB pACB, PSRB pSRB, PUCHAR psstatus)
if
(
residual
)
if
(
residual
)
{
{
bval
=
DC390_read8
(
ScsiFifo
);
/* get one residual byte */
bval
=
DC390_read8
(
ScsiFifo
);
/* get one residual byte */
ptr
=
(
PUCHAR
)
bus_to_virt
(
pSRB
->
SGBusAddr
);
ptr
=
(
u8
*
)
bus_to_virt
(
pSRB
->
SGBusAddr
);
*
ptr
=
bval
;
*
ptr
=
bval
;
pSRB
->
SGBusAddr
++
;
xferCnt
++
;
pSRB
->
SGBusAddr
++
;
xferCnt
++
;
pSRB
->
TotalXferredLen
++
;
pSRB
->
TotalXferredLen
++
;
...
@@ -534,12 +533,12 @@ dc390_DataIn_0( PACB pACB, PSRB pSRB, PUCHAR psstatus)
...
@@ -534,12 +533,12 @@ dc390_DataIn_0( PACB pACB, PSRB pSRB, PUCHAR psstatus)
}
}
static
void
static
void
dc390_Command_0
(
PACB
pACB
,
PSRB
pSRB
,
PUCHAR
psstatus
)
dc390_Command_0
(
struct
dc390_acb
*
pACB
,
struct
dc390_srb
*
pSRB
,
u8
*
psstatus
)
{
{
}
}
static
void
static
void
dc390_Status_0
(
PACB
pACB
,
PSRB
pSRB
,
PUCHAR
psstatus
)
dc390_Status_0
(
struct
dc390_acb
*
pACB
,
struct
dc390_srb
*
pSRB
,
u8
*
psstatus
)
{
{
pSRB
->
TargetStatus
=
DC390_read8
(
ScsiFifo
);
pSRB
->
TargetStatus
=
DC390_read8
(
ScsiFifo
);
...
@@ -552,7 +551,7 @@ dc390_Status_0( PACB pACB, PSRB pSRB, PUCHAR psstatus)
...
@@ -552,7 +551,7 @@ dc390_Status_0( PACB pACB, PSRB pSRB, PUCHAR psstatus)
}
}
static
void
static
void
dc390_MsgOut_0
(
PACB
pACB
,
PSRB
pSRB
,
PUCHAR
psstatus
)
dc390_MsgOut_0
(
struct
dc390_acb
*
pACB
,
struct
dc390_srb
*
pSRB
,
u8
*
psstatus
)
{
{
if
(
pSRB
->
SRBState
&
(
SRB_UNEXPECT_RESEL
+
SRB_ABORT_SENT
)
)
if
(
pSRB
->
SRBState
&
(
SRB_UNEXPECT_RESEL
+
SRB_ABORT_SENT
)
)
*
psstatus
=
SCSI_NOP0
;
*
psstatus
=
SCSI_NOP0
;
...
@@ -561,7 +560,7 @@ dc390_MsgOut_0( PACB pACB, PSRB pSRB, PUCHAR psstatus)
...
@@ -561,7 +560,7 @@ dc390_MsgOut_0( PACB pACB, PSRB pSRB, PUCHAR psstatus)
static
void
__inline__
static
void
__inline__
dc390_reprog
(
PACB
pACB
,
PDCB
pDCB
)
dc390_reprog
(
struct
dc390_acb
*
pACB
,
struct
dc390_dcb
*
pDCB
)
{
{
DC390_write8
(
Sync_Period
,
pDCB
->
SyncPeriod
);
DC390_write8
(
Sync_Period
,
pDCB
->
SyncPeriod
);
DC390_write8
(
Sync_Offset
,
pDCB
->
SyncOffset
);
DC390_write8
(
Sync_Offset
,
pDCB
->
SyncOffset
);
...
@@ -573,7 +572,7 @@ dc390_reprog (PACB pACB, PDCB pDCB)
...
@@ -573,7 +572,7 @@ dc390_reprog (PACB pACB, PDCB pDCB)
#ifdef DC390_DEBUG0
#ifdef DC390_DEBUG0
static
void
static
void
dc390_printMsg
(
UCHAR
*
MsgBuf
,
UCHAR
len
)
dc390_printMsg
(
u8
*
MsgBuf
,
u8
len
)
{
{
int
i
;
int
i
;
printk
(
" %02x"
,
MsgBuf
[
0
]);
printk
(
" %02x"
,
MsgBuf
[
0
]);
...
@@ -587,7 +586,7 @@ dc390_printMsg (UCHAR *MsgBuf, UCHAR len)
...
@@ -587,7 +586,7 @@ dc390_printMsg (UCHAR *MsgBuf, UCHAR len)
/* reject_msg */
/* reject_msg */
static
void
__inline__
static
void
__inline__
dc390_MsgIn_reject
(
PACB
pACB
,
PSRB
pSRB
)
dc390_MsgIn_reject
(
struct
dc390_acb
*
pACB
,
struct
dc390_srb
*
pSRB
)
{
{
pSRB
->
MsgOutBuf
[
0
]
=
MESSAGE_REJECT
;
pSRB
->
MsgOutBuf
[
0
]
=
MESSAGE_REJECT
;
pSRB
->
MsgCnt
=
1
;
DC390_ENABLE_MSGOUT
;
pSRB
->
MsgCnt
=
1
;
DC390_ENABLE_MSGOUT
;
...
@@ -596,18 +595,18 @@ dc390_MsgIn_reject (PACB pACB, PSRB pSRB)
...
@@ -596,18 +595,18 @@ dc390_MsgIn_reject (PACB pACB, PSRB pSRB)
/* abort command */
/* abort command */
static
void
__inline__
static
void
__inline__
dc390_EnableMsgOut_Abort
(
PACB
pACB
,
PSRB
pSRB
)
dc390_EnableMsgOut_Abort
(
struct
dc390_acb
*
pACB
,
struct
dc390_srb
*
pSRB
)
{
{
pSRB
->
MsgOutBuf
[
0
]
=
ABORT
;
pSRB
->
MsgOutBuf
[
0
]
=
ABORT
;
pSRB
->
MsgCnt
=
1
;
DC390_ENABLE_MSGOUT
;
pSRB
->
MsgCnt
=
1
;
DC390_ENABLE_MSGOUT
;
pSRB
->
pSRBDCB
->
DCBFlag
&=
~
ABORT_DEV_
;
pSRB
->
pSRBDCB
->
DCBFlag
&=
~
ABORT_DEV_
;
}
}
static
PSRB
static
struct
dc390_srb
*
dc390_MsgIn_QTag
(
PACB
pACB
,
PDCB
pDCB
,
UCHAR
tag
)
dc390_MsgIn_QTag
(
struct
dc390_acb
*
pACB
,
struct
dc390_dcb
*
pDCB
,
u8
tag
)
{
{
PSRB
lastSRB
=
pDCB
->
pGoingLast
;
struct
dc390_srb
*
lastSRB
=
pDCB
->
pGoingLast
;
PSRB
pSRB
=
pDCB
->
pGoingSRB
;
struct
dc390_srb
*
pSRB
=
pDCB
->
pGoingSRB
;
if
(
pSRB
)
if
(
pSRB
)
{
{
...
@@ -645,9 +644,9 @@ dc390_MsgIn_QTag (PACB pACB, PDCB pDCB, UCHAR tag)
...
@@ -645,9 +644,9 @@ dc390_MsgIn_QTag (PACB pACB, PDCB pDCB, UCHAR tag)
/* set async transfer mode */
/* set async transfer mode */
static
void
static
void
dc390_MsgIn_set_async
(
PACB
pACB
,
PSRB
pSRB
)
dc390_MsgIn_set_async
(
struct
dc390_acb
*
pACB
,
struct
dc390_srb
*
pSRB
)
{
{
PDCB
pDCB
=
pSRB
->
pSRBDCB
;
struct
dc390_dcb
*
pDCB
=
pSRB
->
pSRBDCB
;
if
(
!
(
pSRB
->
SRBState
&
DO_SYNC_NEGO
))
if
(
!
(
pSRB
->
SRBState
&
DO_SYNC_NEGO
))
printk
(
KERN_INFO
"DC390: Target %i initiates Non-Sync?
\n
"
,
pDCB
->
TargetID
);
printk
(
KERN_INFO
"DC390: Target %i initiates Non-Sync?
\n
"
,
pDCB
->
TargetID
);
pSRB
->
SRBState
&=
~
DO_SYNC_NEGO
;
pSRB
->
SRBState
&=
~
DO_SYNC_NEGO
;
...
@@ -663,13 +662,13 @@ dc390_MsgIn_set_async (PACB pACB, PSRB pSRB)
...
@@ -663,13 +662,13 @@ dc390_MsgIn_set_async (PACB pACB, PSRB pSRB)
/* set sync transfer mode */
/* set sync transfer mode */
static
void
static
void
dc390_MsgIn_set_sync
(
PACB
pACB
,
PSRB
pSRB
)
dc390_MsgIn_set_sync
(
struct
dc390_acb
*
pACB
,
struct
dc390_srb
*
pSRB
)
{
{
UCHAR
bval
;
u8
bval
;
USHORT
wval
,
wval1
;
u16
wval
,
wval1
;
PDCB
pDCB
=
pSRB
->
pSRBDCB
;
struct
dc390_dcb
*
pDCB
=
pSRB
->
pSRBDCB
;
UCHAR
oldsyncperiod
=
pDCB
->
SyncPeriod
;
u8
oldsyncperiod
=
pDCB
->
SyncPeriod
;
UCHAR
oldsyncoffset
=
pDCB
->
SyncOffset
;
u8
oldsyncoffset
=
pDCB
->
SyncOffset
;
if
(
!
(
pSRB
->
SRBState
&
DO_SYNC_NEGO
))
if
(
!
(
pSRB
->
SRBState
&
DO_SYNC_NEGO
))
{
{
...
@@ -702,7 +701,7 @@ dc390_MsgIn_set_sync (PACB pACB, PSRB pSRB)
...
@@ -702,7 +701,7 @@ dc390_MsgIn_set_sync (PACB pACB, PSRB pSRB)
pDCB
->
SyncOffset
|=
pSRB
->
MsgInBuf
[
4
];
pDCB
->
SyncOffset
|=
pSRB
->
MsgInBuf
[
4
];
pDCB
->
NegoPeriod
=
pSRB
->
MsgInBuf
[
3
];
pDCB
->
NegoPeriod
=
pSRB
->
MsgInBuf
[
3
];
wval
=
(
USHORT
)
pSRB
->
MsgInBuf
[
3
];
wval
=
(
u16
)
pSRB
->
MsgInBuf
[
3
];
wval
=
wval
<<
2
;
wval
-=
3
;
wval1
=
wval
/
25
;
/* compute speed */
wval
=
wval
<<
2
;
wval
-=
3
;
wval1
=
wval
/
25
;
/* compute speed */
if
(
(
wval1
*
25
)
!=
wval
)
wval1
++
;
if
(
(
wval1
*
25
)
!=
wval
)
wval1
++
;
bval
=
FAST_CLK
+
FAST_SCSI
;
/* fast clock / fast scsi */
bval
=
FAST_CLK
+
FAST_SCSI
;
/* fast clock / fast scsi */
...
@@ -722,7 +721,7 @@ dc390_MsgIn_set_sync (PACB pACB, PSRB pSRB)
...
@@ -722,7 +721,7 @@ dc390_MsgIn_set_sync (PACB pACB, PSRB pSRB)
}
}
pDCB
->
CtrlR3
=
bval
;
pDCB
->
CtrlR3
=
bval
;
pDCB
->
SyncPeriod
=
(
UCHAR
)
wval1
;
pDCB
->
SyncPeriod
=
(
u8
)
wval1
;
if
((
oldsyncperiod
!=
wval1
||
oldsyncoffset
!=
pDCB
->
SyncOffset
)
&&
pDCB
->
TargetLUN
==
0
)
if
((
oldsyncperiod
!=
wval1
||
oldsyncoffset
!=
pDCB
->
SyncOffset
)
&&
pDCB
->
TargetLUN
==
0
)
{
{
...
@@ -738,20 +737,20 @@ dc390_MsgIn_set_sync (PACB pACB, PSRB pSRB)
...
@@ -738,20 +737,20 @@ dc390_MsgIn_set_sync (PACB pACB, PSRB pSRB)
/* handle RESTORE_PTR */
/* handle RESTORE_PTR */
/* I presume, this command is already mapped, so, have to remap. */
/* I presume, this command is already mapped, so, have to remap. */
static
void
static
void
dc390_restore_ptr
(
PACB
pACB
,
PSRB
pSRB
)
dc390_restore_ptr
(
struct
dc390_acb
*
pACB
,
struct
dc390_srb
*
pSRB
)
{
{
Scsi_Cmnd
*
pcmd
=
pSRB
->
pcmd
;
struct
scsi_cmnd
*
pcmd
=
pSRB
->
pcmd
;
PSGL
psgl
;
struct
scatterlist
*
psgl
;
pSRB
->
TotalXferredLen
=
0
;
pSRB
->
TotalXferredLen
=
0
;
pSRB
->
SGIndex
=
0
;
pSRB
->
SGIndex
=
0
;
if
(
pcmd
->
use_sg
)
{
if
(
pcmd
->
use_sg
)
{
pSRB
->
pSegmentList
=
(
PSGL
)
pcmd
->
request_buffer
;
pSRB
->
pSegmentList
=
(
struct
scatterlist
*
)
pcmd
->
request_buffer
;
psgl
=
pSRB
->
pSegmentList
;
psgl
=
pSRB
->
pSegmentList
;
//dc390_pci_sync(pSRB);
//dc390_pci_sync(pSRB);
while
(
pSRB
->
TotalXferredLen
+
(
ULONG
)
sg_dma_len
(
psgl
)
<
pSRB
->
Saved_Ptr
)
while
(
pSRB
->
TotalXferredLen
+
(
unsigned
long
)
sg_dma_len
(
psgl
)
<
pSRB
->
Saved_Ptr
)
{
{
pSRB
->
TotalXferredLen
+=
(
ULONG
)
sg_dma_len
(
psgl
);
pSRB
->
TotalXferredLen
+=
(
unsigned
long
)
sg_dma_len
(
psgl
);
pSRB
->
SGIndex
++
;
pSRB
->
SGIndex
++
;
if
(
pSRB
->
SGIndex
<
pSRB
->
SGcount
)
if
(
pSRB
->
SGIndex
<
pSRB
->
SGcount
)
{
{
...
@@ -773,7 +772,7 @@ dc390_restore_ptr (PACB pACB, PSRB pSRB)
...
@@ -773,7 +772,7 @@ dc390_restore_ptr (PACB pACB, PSRB pSRB)
sg_dma_len
(
&
pSRB
->
Segmentx
)
=
pcmd
->
request_bufflen
-
pSRB
->
Saved_Ptr
;
sg_dma_len
(
&
pSRB
->
Segmentx
)
=
pcmd
->
request_bufflen
-
pSRB
->
Saved_Ptr
;
pSRB
->
SGcount
=
1
;
pSRB
->
SGcount
=
1
;
pSRB
->
pSegmentList
=
(
PSGL
)
&
pSRB
->
Segmentx
;
pSRB
->
pSegmentList
=
(
struct
scatterlist
*
)
&
pSRB
->
Segmentx
;
}
else
{
}
else
{
pSRB
->
SGcount
=
0
;
pSRB
->
SGcount
=
0
;
printk
(
KERN_INFO
"DC390: RESTORE_PTR message for Transfer without Scatter-Gather ??
\n
"
);
printk
(
KERN_INFO
"DC390: RESTORE_PTR message for Transfer without Scatter-Gather ??
\n
"
);
...
@@ -792,8 +791,8 @@ dc390_restore_ptr (PACB pACB, PSRB pSRB)
...
@@ -792,8 +791,8 @@ dc390_restore_ptr (PACB pACB, PSRB pSRB)
/* The old implementation was correct. Sigh! */
/* The old implementation was correct. Sigh! */
/* Check if the message is complete */
/* Check if the message is complete */
static
UCHAR
__inline__
static
u8
__inline__
dc390_MsgIn_complete
(
UCHAR
*
msgbuf
,
UINT
len
)
dc390_MsgIn_complete
(
u8
*
msgbuf
,
u32
len
)
{
{
if
(
*
msgbuf
==
EXTENDED_MESSAGE
)
if
(
*
msgbuf
==
EXTENDED_MESSAGE
)
{
{
...
@@ -809,9 +808,9 @@ dc390_MsgIn_complete (UCHAR *msgbuf, UINT len)
...
@@ -809,9 +808,9 @@ dc390_MsgIn_complete (UCHAR *msgbuf, UINT len)
/* read and eval received messages */
/* read and eval received messages */
static
void
static
void
dc390_MsgIn_0
(
PACB
pACB
,
PSRB
pSRB
,
PUCHAR
psstatus
)
dc390_MsgIn_0
(
struct
dc390_acb
*
pACB
,
struct
dc390_srb
*
pSRB
,
u8
*
psstatus
)
{
{
PDCB
pDCB
=
pACB
->
pActiveDCB
;
struct
dc390_dcb
*
pDCB
=
pACB
->
pActiveDCB
;
/* Read the msg */
/* Read the msg */
...
@@ -856,7 +855,7 @@ dc390_MsgIn_0( PACB pACB, PSRB pSRB, PUCHAR psstatus)
...
@@ -856,7 +855,7 @@ dc390_MsgIn_0( PACB pACB, PSRB pSRB, PUCHAR psstatus)
// nothing has to be done
// nothing has to be done
case
COMMAND_COMPLETE
:
break
;
case
COMMAND_COMPLETE
:
break
;
// SAVE POINTER may be ignored as we have the
PSRB
associated with the
// SAVE POINTER may be ignored as we have the
struct dc390_srb*
associated with the
// scsi command. Thanks, Gerard, for pointing it out.
// scsi command. Thanks, Gerard, for pointing it out.
case
SAVE_POINTERS
:
case
SAVE_POINTERS
:
pSRB
->
Saved_Ptr
=
pSRB
->
TotalXferredLen
;
pSRB
->
Saved_Ptr
=
pSRB
->
TotalXferredLen
;
...
@@ -883,11 +882,11 @@ dc390_MsgIn_0( PACB pACB, PSRB pSRB, PUCHAR psstatus)
...
@@ -883,11 +882,11 @@ dc390_MsgIn_0( PACB pACB, PSRB pSRB, PUCHAR psstatus)
static
void
static
void
dc390_DataIO_Comm
(
PACB
pACB
,
PSRB
pSRB
,
UCHAR
ioDir
)
dc390_DataIO_Comm
(
struct
dc390_acb
*
pACB
,
struct
dc390_srb
*
pSRB
,
u8
ioDir
)
{
{
PSGL
psgl
;
struct
scatterlist
*
psgl
;
ULONG
lval
;
unsigned
long
lval
;
PDCB
pDCB
=
pACB
->
pActiveDCB
;
struct
dc390_dcb
*
pDCB
=
pACB
->
pActiveDCB
;
if
(
pSRB
==
pACB
->
pTmpSRB
)
if
(
pSRB
==
pACB
->
pTmpSRB
)
{
{
...
@@ -913,11 +912,11 @@ dc390_DataIO_Comm( PACB pACB, PSRB pSRB, UCHAR ioDir)
...
@@ -913,11 +912,11 @@ dc390_DataIO_Comm( PACB pACB, PSRB pSRB, UCHAR ioDir)
}
}
lval
=
pSRB
->
SGToBeXferLen
;
lval
=
pSRB
->
SGToBeXferLen
;
DEBUG1
(
printk
(
KERN_DEBUG
" DC390: Start transfer: %li bytes (address %08lx)
\n
"
,
lval
,
pSRB
->
SGBusAddr
));
DEBUG1
(
printk
(
KERN_DEBUG
" DC390: Start transfer: %li bytes (address %08lx)
\n
"
,
lval
,
pSRB
->
SGBusAddr
));
DC390_write8
(
CtcReg_Low
,
(
UCHAR
)
lval
);
DC390_write8
(
CtcReg_Low
,
(
u8
)
lval
);
lval
>>=
8
;
lval
>>=
8
;
DC390_write8
(
CtcReg_Mid
,
(
UCHAR
)
lval
);
DC390_write8
(
CtcReg_Mid
,
(
u8
)
lval
);
lval
>>=
8
;
lval
>>=
8
;
DC390_write8
(
CtcReg_High
,
(
UCHAR
)
lval
);
DC390_write8
(
CtcReg_High
,
(
u8
)
lval
);
DC390_write32
(
DMA_XferCnt
,
pSRB
->
SGToBeXferLen
);
DC390_write32
(
DMA_XferCnt
,
pSRB
->
SGToBeXferLen
);
DC390_write32
(
DMA_XferAddr
,
pSRB
->
SGBusAddr
);
DC390_write32
(
DMA_XferAddr
,
pSRB
->
SGBusAddr
);
...
@@ -956,36 +955,36 @@ dc390_DataIO_Comm( PACB pACB, PSRB pSRB, UCHAR ioDir)
...
@@ -956,36 +955,36 @@ dc390_DataIO_Comm( PACB pACB, PSRB pSRB, UCHAR ioDir)
static
void
static
void
dc390_DataOutPhase
(
PACB
pACB
,
PSRB
pSRB
,
PUCHAR
psstatus
)
dc390_DataOutPhase
(
struct
dc390_acb
*
pACB
,
struct
dc390_srb
*
pSRB
,
u8
*
psstatus
)
{
{
dc390_DataIO_Comm
(
pACB
,
pSRB
,
WRITE_DIRECTION
);
dc390_DataIO_Comm
(
pACB
,
pSRB
,
WRITE_DIRECTION
);
}
}
static
void
static
void
dc390_DataInPhase
(
PACB
pACB
,
PSRB
pSRB
,
PUCHAR
psstatus
)
dc390_DataInPhase
(
struct
dc390_acb
*
pACB
,
struct
dc390_srb
*
pSRB
,
u8
*
psstatus
)
{
{
dc390_DataIO_Comm
(
pACB
,
pSRB
,
READ_DIRECTION
);
dc390_DataIO_Comm
(
pACB
,
pSRB
,
READ_DIRECTION
);
}
}
static
void
static
void
dc390_CommandPhase
(
PACB
pACB
,
PSRB
pSRB
,
PUCHAR
psstatus
)
dc390_CommandPhase
(
struct
dc390_acb
*
pACB
,
struct
dc390_srb
*
pSRB
,
u8
*
psstatus
)
{
{
PDCB
pDCB
;
struct
dc390_dcb
*
pDCB
;
UCHAR
i
,
cnt
;
u8
i
,
cnt
;
PUCHAR
ptr
;
u8
*
ptr
;
DC390_write8
(
ScsiCmd
,
RESET_ATN_CMD
);
DC390_write8
(
ScsiCmd
,
RESET_ATN_CMD
);
DC390_write8
(
ScsiCmd
,
CLEAR_FIFO_CMD
);
DC390_write8
(
ScsiCmd
,
CLEAR_FIFO_CMD
);
if
(
!
(
pSRB
->
SRBFlag
&
AUTO_REQSENSE
)
)
if
(
!
(
pSRB
->
SRBFlag
&
AUTO_REQSENSE
)
)
{
{
cnt
=
(
UCHAR
)
pSRB
->
pcmd
->
cmd_len
;
cnt
=
(
u8
)
pSRB
->
pcmd
->
cmd_len
;
ptr
=
(
PUCHAR
)
pSRB
->
pcmd
->
cmnd
;
ptr
=
(
u8
*
)
pSRB
->
pcmd
->
cmnd
;
for
(
i
=
0
;
i
<
cnt
;
i
++
)
for
(
i
=
0
;
i
<
cnt
;
i
++
)
DC390_write8
(
ScsiFifo
,
*
(
ptr
++
));
DC390_write8
(
ScsiFifo
,
*
(
ptr
++
));
}
}
else
else
{
{
UCHAR
bval
=
0
;
u8
bval
=
0
;
DC390_write8
(
ScsiFifo
,
REQUEST_SENSE
);
DC390_write8
(
ScsiFifo
,
REQUEST_SENSE
);
pDCB
=
pACB
->
pActiveDCB
;
pDCB
=
pACB
->
pActiveDCB
;
DC390_write8
(
ScsiFifo
,
pDCB
->
TargetLUN
<<
5
);
DC390_write8
(
ScsiFifo
,
pDCB
->
TargetLUN
<<
5
);
...
@@ -1000,7 +999,7 @@ dc390_CommandPhase( PACB pACB, PSRB pSRB, PUCHAR psstatus)
...
@@ -1000,7 +999,7 @@ dc390_CommandPhase( PACB pACB, PSRB pSRB, PUCHAR psstatus)
}
}
static
void
static
void
dc390_StatusPhase
(
PACB
pACB
,
PSRB
pSRB
,
PUCHAR
psstatus
)
dc390_StatusPhase
(
struct
dc390_acb
*
pACB
,
struct
dc390_srb
*
pSRB
,
u8
*
psstatus
)
{
{
DC390_write8
(
ScsiCmd
,
CLEAR_FIFO_CMD
);
DC390_write8
(
ScsiCmd
,
CLEAR_FIFO_CMD
);
pSRB
->
SRBState
=
SRB_STATUS
;
pSRB
->
SRBState
=
SRB_STATUS
;
...
@@ -1009,11 +1008,11 @@ dc390_StatusPhase( PACB pACB, PSRB pSRB, PUCHAR psstatus)
...
@@ -1009,11 +1008,11 @@ dc390_StatusPhase( PACB pACB, PSRB pSRB, PUCHAR psstatus)
}
}
static
void
static
void
dc390_MsgOutPhase
(
PACB
pACB
,
PSRB
pSRB
,
PUCHAR
psstatus
)
dc390_MsgOutPhase
(
struct
dc390_acb
*
pACB
,
struct
dc390_srb
*
pSRB
,
u8
*
psstatus
)
{
{
UCHAR
bval
,
i
,
cnt
;
u8
bval
,
i
,
cnt
;
PUCHAR
ptr
;
u8
*
ptr
;
PDCB
pDCB
;
struct
dc390_dcb
*
pDCB
;
DC390_write8
(
ScsiCmd
,
CLEAR_FIFO_CMD
);
DC390_write8
(
ScsiCmd
,
CLEAR_FIFO_CMD
);
pDCB
=
pACB
->
pActiveDCB
;
pDCB
=
pACB
->
pActiveDCB
;
...
@@ -1022,7 +1021,7 @@ dc390_MsgOutPhase( PACB pACB, PSRB pSRB, PUCHAR psstatus)
...
@@ -1022,7 +1021,7 @@ dc390_MsgOutPhase( PACB pACB, PSRB pSRB, PUCHAR psstatus)
cnt
=
pSRB
->
MsgCnt
;
cnt
=
pSRB
->
MsgCnt
;
if
(
cnt
)
if
(
cnt
)
{
{
ptr
=
(
PUCHAR
)
pSRB
->
MsgOutBuf
;
ptr
=
(
u8
*
)
pSRB
->
MsgOutBuf
;
for
(
i
=
0
;
i
<
cnt
;
i
++
)
for
(
i
=
0
;
i
<
cnt
;
i
++
)
DC390_write8
(
ScsiFifo
,
*
(
ptr
++
));
DC390_write8
(
ScsiFifo
,
*
(
ptr
++
));
pSRB
->
MsgCnt
=
0
;
pSRB
->
MsgCnt
=
0
;
...
@@ -1062,7 +1061,7 @@ dc390_MsgOutPhase( PACB pACB, PSRB pSRB, PUCHAR psstatus)
...
@@ -1062,7 +1061,7 @@ dc390_MsgOutPhase( PACB pACB, PSRB pSRB, PUCHAR psstatus)
}
}
static
void
static
void
dc390_MsgInPhase
(
PACB
pACB
,
PSRB
pSRB
,
PUCHAR
psstatus
)
dc390_MsgInPhase
(
struct
dc390_acb
*
pACB
,
struct
dc390_srb
*
pSRB
,
u8
*
psstatus
)
{
{
DC390_write8
(
ScsiCmd
,
CLEAR_FIFO_CMD
);
DC390_write8
(
ScsiCmd
,
CLEAR_FIFO_CMD
);
if
(
!
(
pSRB
->
SRBState
&
SRB_MSGIN
)
)
if
(
!
(
pSRB
->
SRBState
&
SRB_MSGIN
)
)
...
@@ -1075,21 +1074,21 @@ dc390_MsgInPhase( PACB pACB, PSRB pSRB, PUCHAR psstatus)
...
@@ -1075,21 +1074,21 @@ dc390_MsgInPhase( PACB pACB, PSRB pSRB, PUCHAR psstatus)
}
}
static
void
static
void
dc390_Nop_0
(
PACB
pACB
,
PSRB
pSRB
,
PUCHAR
psstatus
)
dc390_Nop_0
(
struct
dc390_acb
*
pACB
,
struct
dc390_srb
*
pSRB
,
u8
*
psstatus
)
{
{
}
}
static
void
static
void
dc390_Nop_1
(
PACB
pACB
,
PSRB
pSRB
,
PUCHAR
psstatus
)
dc390_Nop_1
(
struct
dc390_acb
*
pACB
,
struct
dc390_srb
*
pSRB
,
u8
*
psstatus
)
{
{
}
}
static
void
static
void
dc390_SetXferRate
(
PACB
pACB
,
PDCB
pDCB
)
dc390_SetXferRate
(
struct
dc390_acb
*
pACB
,
struct
dc390_dcb
*
pDCB
)
{
{
UCHAR
bval
,
i
,
cnt
;
u8
bval
,
i
,
cnt
;
PDCB
ptr
;
struct
dc390_dcb
*
ptr
;
if
(
!
(
pDCB
->
TargetLUN
)
)
if
(
!
(
pDCB
->
TargetLUN
)
)
{
{
...
@@ -1117,11 +1116,11 @@ dc390_SetXferRate( PACB pACB, PDCB pDCB )
...
@@ -1117,11 +1116,11 @@ dc390_SetXferRate( PACB pACB, PDCB pDCB )
static
void
static
void
dc390_Disconnect
(
PACB
pACB
)
dc390_Disconnect
(
struct
dc390_acb
*
pACB
)
{
{
PDCB
pDCB
;
struct
dc390_dcb
*
pDCB
;
PSRB
pSRB
,
psrb
;
struct
dc390_srb
*
pSRB
,
*
psrb
;
UCHAR
i
,
cnt
;
u8
i
,
cnt
;
DEBUG0
(
printk
(
KERN_INFO
"DISC,"
));
DEBUG0
(
printk
(
KERN_INFO
"DISC,"
));
...
@@ -1198,11 +1197,11 @@ dc390_Disconnect( PACB pACB )
...
@@ -1198,11 +1197,11 @@ dc390_Disconnect( PACB pACB )
static
void
static
void
dc390_Reselect
(
PACB
pACB
)
dc390_Reselect
(
struct
dc390_acb
*
pACB
)
{
{
PDCB
pDCB
;
struct
dc390_dcb
*
pDCB
;
PSRB
pSRB
;
struct
dc390_srb
*
pSRB
;
UCHAR
id
,
lun
;
u8
id
,
lun
;
DEBUG0
(
printk
(
KERN_INFO
"RSEL,"
));
DEBUG0
(
printk
(
KERN_INFO
"RSEL,"
));
pACB
->
Connected
=
1
;
pACB
->
Connected
=
1
;
...
@@ -1283,10 +1282,10 @@ dc390_Reselect( PACB pACB )
...
@@ -1283,10 +1282,10 @@ dc390_Reselect( PACB pACB )
DC390_write8
(
ScsiCmd
,
MSG_ACCEPTED_CMD
);
/* ;to release the /ACK signal */
DC390_write8
(
ScsiCmd
,
MSG_ACCEPTED_CMD
);
/* ;to release the /ACK signal */
}
}
static
UCHAR
__inline__
static
u8
__inline__
dc390_tagq_blacklist
(
char
*
name
)
dc390_tagq_blacklist
(
char
*
name
)
{
{
UCHAR
i
;
u8
i
;
for
(
i
=
0
;
i
<
BADDEVCNT
;
i
++
)
for
(
i
=
0
;
i
<
BADDEVCNT
;
i
++
)
if
(
memcmp
(
name
,
dc390_baddevname1
[
i
],
28
)
==
0
)
if
(
memcmp
(
name
,
dc390_baddevname1
[
i
],
28
)
==
0
)
return
1
;
return
1
;
...
@@ -1295,7 +1294,7 @@ dc390_tagq_blacklist (char* name)
...
@@ -1295,7 +1294,7 @@ dc390_tagq_blacklist (char* name)
static
void
static
void
dc390_disc_tagq_set
(
PDCB
pDCB
,
PSCSI_INQDATA
ptr
)
dc390_disc_tagq_set
(
struct
dc390_dcb
*
pDCB
,
PSCSI_INQDATA
ptr
)
{
{
/* Check for SCSI format (ANSI and Response data format) */
/* Check for SCSI format (ANSI and Response data format) */
if
(
(
ptr
->
Vers
&
0x07
)
>=
2
||
(
ptr
->
RDF
&
0x0F
)
==
2
)
if
(
(
ptr
->
Vers
&
0x07
)
>=
2
||
(
ptr
->
RDF
&
0x0F
)
==
2
)
...
@@ -1317,9 +1316,9 @@ dc390_disc_tagq_set (PDCB pDCB, PSCSI_INQDATA ptr)
...
@@ -1317,9 +1316,9 @@ dc390_disc_tagq_set (PDCB pDCB, PSCSI_INQDATA ptr)
static
void
static
void
dc390_add_dev
(
PACB
pACB
,
PDCB
pDCB
,
PSCSI_INQDATA
ptr
)
dc390_add_dev
(
struct
dc390_acb
*
pACB
,
struct
dc390_dcb
*
pDCB
,
PSCSI_INQDATA
ptr
)
{
{
UCHAR
bval1
=
ptr
->
DevType
&
SCSI_DEVTYPE
;
u8
bval1
=
ptr
->
DevType
&
SCSI_DEVTYPE
;
pDCB
->
DevType
=
bval1
;
pDCB
->
DevType
=
bval1
;
/* if (bval1 == TYPE_DISK || bval1 == TYPE_MOD) */
/* if (bval1 == TYPE_DISK || bval1 == TYPE_MOD) */
dc390_disc_tagq_set
(
pDCB
,
ptr
);
dc390_disc_tagq_set
(
pDCB
,
ptr
);
...
@@ -1327,22 +1326,24 @@ dc390_add_dev (PACB pACB, PDCB pDCB, PSCSI_INQDATA ptr)
...
@@ -1327,22 +1326,24 @@ dc390_add_dev (PACB pACB, PDCB pDCB, PSCSI_INQDATA ptr)
static
void
static
void
dc390_SRBdone
(
PACB
pACB
,
PDCB
pDCB
,
PSRB
pSRB
)
dc390_SRBdone
(
struct
dc390_acb
*
pACB
,
struct
dc390_dcb
*
pDCB
,
struct
dc390_srb
*
pSRB
)
{
{
UCHAR
bval
,
status
,
i
;
u8
bval
,
status
,
i
;
PSCSICMD
pcmd
;
struct
scsi_cmnd
*
pcmd
;
PSCSI_INQDATA
ptr
;
PSCSI_INQDATA
ptr
;
PSGL
ptr2
;
struct
scatterlist
*
ptr2
;
ULONG
swlval
;
unsigned
long
swlval
;
pcmd
=
pSRB
->
pcmd
;
pcmd
=
pSRB
->
pcmd
;
/* KG: Moved pci_unmap here */
/* KG: Moved pci_unmap here */
dc390_pci_unmap
(
pSRB
);
dc390_pci_unmap
(
pSRB
);
status
=
pSRB
->
TargetStatus
;
status
=
pSRB
->
TargetStatus
;
ptr
=
(
PSCSI_INQDATA
)
(
pcmd
->
request_buffer
);
if
(
pcmd
->
use_sg
)
{
if
(
pcmd
->
use_sg
)
ptr2
=
(
struct
scatterlist
*
)
(
pcmd
->
request_buffer
);
ptr
=
(
PSCSI_INQDATA
)
(
page_address
(((
PSGL
)
ptr
)
->
page
)
+
((
PSGL
)
ptr
)
->
offset
);
ptr
=
(
PSCSI_INQDATA
)
(
page_address
(
ptr2
->
page
)
+
ptr2
->
offset
);
}
else
ptr
=
(
PSCSI_INQDATA
)
(
pcmd
->
request_buffer
);
DEBUG0
(
printk
(
" SRBdone (%02x,%08x), SRB %p, pid %li
\n
"
,
status
,
pcmd
->
result
,
\
DEBUG0
(
printk
(
" SRBdone (%02x,%08x), SRB %p, pid %li
\n
"
,
status
,
pcmd
->
result
,
\
pSRB
,
pcmd
->
pid
));
pSRB
,
pcmd
->
pid
));
...
@@ -1379,7 +1380,7 @@ dc390_SRBdone( PACB pACB, PDCB pDCB, PSRB pSRB )
...
@@ -1379,7 +1380,7 @@ dc390_SRBdone( PACB pACB, PDCB pDCB, PSRB pSRB )
}
}
if
(
pSRB
->
RetryCnt
==
0
)
if
(
pSRB
->
RetryCnt
==
0
)
{
{
//(
UINT
)(pSRB->pcmd->cmnd[0]) = pSRB->Segment0[0];
//(
u32
)(pSRB->pcmd->cmnd[0]) = pSRB->Segment0[0];
pSRB
->
TotalXferredLen
=
pSRB
->
SavedTotXLen
;
pSRB
->
TotalXferredLen
=
pSRB
->
SavedTotXLen
;
if
(
(
pSRB
->
TotalXferredLen
)
&&
if
(
(
pSRB
->
TotalXferredLen
)
&&
(
pSRB
->
TotalXferredLen
>=
pcmd
->
underflow
)
)
(
pSRB
->
TotalXferredLen
>=
pcmd
->
underflow
)
)
...
@@ -1387,7 +1388,7 @@ dc390_SRBdone( PACB pACB, PDCB pDCB, PSRB pSRB )
...
@@ -1387,7 +1388,7 @@ dc390_SRBdone( PACB pACB, PDCB pDCB, PSRB pSRB )
else
else
pcmd
->
result
=
MK_RES_LNX
(
DRIVER_SENSE
,
DID_OK
,
0
,
CHECK_CONDITION
);
pcmd
->
result
=
MK_RES_LNX
(
DRIVER_SENSE
,
DID_OK
,
0
,
CHECK_CONDITION
);
REMOVABLEDEBUG
(
printk
(
KERN_INFO
"Cmd=%02x,Result=%08x,XferL=%08x
\n
"
,
pSRB
->
pcmd
->
cmnd
[
0
],
\
REMOVABLEDEBUG
(
printk
(
KERN_INFO
"Cmd=%02x,Result=%08x,XferL=%08x
\n
"
,
pSRB
->
pcmd
->
cmnd
[
0
],
\
(
UINT
)
pcmd
->
result
,
(
UINT
)
pSRB
->
TotalXferredLen
));
(
u32
)
pcmd
->
result
,
(
u32
)
pSRB
->
TotalXferredLen
));
goto
ckc_e
;
goto
ckc_e
;
}
}
else
/* Retry */
else
/* Retry */
...
@@ -1395,19 +1396,17 @@ dc390_SRBdone( PACB pACB, PDCB pDCB, PSRB pSRB )
...
@@ -1395,19 +1396,17 @@ dc390_SRBdone( PACB pACB, PDCB pDCB, PSRB pSRB )
pSRB
->
RetryCnt
--
;
pSRB
->
RetryCnt
--
;
pSRB
->
AdaptStatus
=
0
;
pSRB
->
AdaptStatus
=
0
;
pSRB
->
TargetStatus
=
0
;
pSRB
->
TargetStatus
=
0
;
//*((PUINT) &(pSRB->CmdBlock[0])) = pSRB->Segment0[0];
//*((PUINT) &(pSRB->CmdBlock[4])) = pSRB->Segment0[1];
/* Don't retry on TEST_UNIT_READY */
/* Don't retry on TEST_UNIT_READY */
if
(
pSRB
->
pcmd
->
cmnd
[
0
]
==
TEST_UNIT_READY
/* || pSRB->pcmd->cmnd[0] == START_STOP */
)
if
(
pSRB
->
pcmd
->
cmnd
[
0
]
==
TEST_UNIT_READY
/* || pSRB->pcmd->cmnd[0] == START_STOP */
)
{
{
pcmd
->
result
=
MK_RES_LNX
(
DRIVER_SENSE
,
DID_OK
,
0
,
CHECK_CONDITION
);
pcmd
->
result
=
MK_RES_LNX
(
DRIVER_SENSE
,
DID_OK
,
0
,
CHECK_CONDITION
);
REMOVABLEDEBUG
(
printk
(
KERN_INFO
"Cmd=%02x, Result=%08x, XferL=%08x
\n
"
,
pSRB
->
pcmd
->
cmnd
[
0
],
\
REMOVABLEDEBUG
(
printk
(
KERN_INFO
"Cmd=%02x, Result=%08x, XferL=%08x
\n
"
,
pSRB
->
pcmd
->
cmnd
[
0
],
\
(
UINT
)
pcmd
->
result
,
(
UINT
)
pSRB
->
TotalXferredLen
));
(
u32
)
pcmd
->
result
,
(
u32
)
pSRB
->
TotalXferredLen
));
goto
ckc_e
;
goto
ckc_e
;
}
}
SET_RES_DRV
(
pcmd
->
result
,
DRIVER_SENSE
);
SET_RES_DRV
(
pcmd
->
result
,
DRIVER_SENSE
);
pcmd
->
use_sg
=
pSRB
->
SavedSGCount
;
pcmd
->
use_sg
=
pSRB
->
SavedSGCount
;
//pSRB->ScsiCmdLen = (
UCHAR
) (pSRB->Segment1[0] >> 8);
//pSRB->ScsiCmdLen = (
u8
) (pSRB->Segment1[0] >> 8);
DEBUG0
(
printk
(
"DC390: RETRY pid %li (%02x), target %02i-%02i
\n
"
,
pcmd
->
pid
,
pcmd
->
cmnd
[
0
],
pcmd
->
device
->
id
,
pcmd
->
device
->
lun
));
DEBUG0
(
printk
(
"DC390: RETRY pid %li (%02x), target %02i-%02i
\n
"
,
pcmd
->
pid
,
pcmd
->
cmnd
[
0
],
pcmd
->
device
->
id
,
pcmd
->
device
->
lun
));
pSRB
->
SGIndex
=
0
;
pSRB
->
SGIndex
=
0
;
pSRB
->
TotalXferredLen
=
0
;
pSRB
->
TotalXferredLen
=
0
;
...
@@ -1437,14 +1436,14 @@ dc390_SRBdone( PACB pACB, PDCB pDCB, PSRB pSRB )
...
@@ -1437,14 +1436,14 @@ dc390_SRBdone( PACB pACB, PDCB pDCB, PSRB pSRB )
ptr2
++
;
ptr2
++
;
}
}
REMOVABLEDEBUG
(
printk
(
KERN_INFO
"XferredLen=%08x,NotXferLen=%08x
\n
"
,
\
REMOVABLEDEBUG
(
printk
(
KERN_INFO
"XferredLen=%08x,NotXferLen=%08x
\n
"
,
\
(
UINT
)
pSRB
->
TotalXferredLen
,
(
UINT
)
swlval
));
(
u32
)
pSRB
->
TotalXferredLen
,
(
u32
)
swlval
));
}
}
dc390_RequestSense
(
pACB
,
pDCB
,
pSRB
);
dc390_RequestSense
(
pACB
,
pDCB
,
pSRB
);
return
;
return
;
}
}
else
if
(
status_byte
(
status
)
==
QUEUE_FULL
)
else
if
(
status_byte
(
status
)
==
QUEUE_FULL
)
{
{
bval
=
(
UCHAR
)
pDCB
->
GoingSRBCnt
;
bval
=
(
u8
)
pDCB
->
GoingSRBCnt
;
bval
--
;
bval
--
;
pDCB
->
MaxCommand
=
bval
;
pDCB
->
MaxCommand
=
bval
;
dc390_freetag
(
pDCB
,
pSRB
);
dc390_freetag
(
pDCB
,
pSRB
);
...
@@ -1569,12 +1568,12 @@ dc390_SRBdone( PACB pACB, PDCB pDCB, PSRB pSRB )
...
@@ -1569,12 +1568,12 @@ dc390_SRBdone( PACB pACB, PDCB pDCB, PSRB pSRB )
/* Remove all SRBs from Going list and inform midlevel */
/* Remove all SRBs from Going list and inform midlevel */
static
void
static
void
dc390_DoingSRB_Done
(
PACB
pACB
,
PSCSICMD
cmd
)
dc390_DoingSRB_Done
(
struct
dc390_acb
*
pACB
,
struct
scsi_cmnd
*
cmd
)
{
{
PDCB
pDCB
,
pdcb
;
struct
dc390_dcb
*
pDCB
,
*
pdcb
;
PSRB
psrb
,
psrb2
;
struct
dc390_srb
*
psrb
,
*
psrb2
;
UCHAR
i
;
u8
i
;
PSCSICMD
pcmd
;
struct
scsi_cmnd
*
pcmd
;
pDCB
=
pACB
->
pLinkDCB
;
pDCB
=
pACB
->
pLinkDCB
;
pdcb
=
pDCB
;
pdcb
=
pDCB
;
...
@@ -1610,7 +1609,7 @@ dc390_DoingSRB_Done( PACB pACB, PSCSICMD cmd )
...
@@ -1610,7 +1609,7 @@ dc390_DoingSRB_Done( PACB pACB, PSCSICMD cmd )
static
void
static
void
dc390_ResetSCSIBus
(
PACB
pACB
)
dc390_ResetSCSIBus
(
struct
dc390_acb
*
pACB
)
{
{
//DC390_write8 (ScsiCmd, RST_DEVICE_CMD);
//DC390_write8 (ScsiCmd, RST_DEVICE_CMD);
//udelay (250);
//udelay (250);
...
@@ -1625,7 +1624,7 @@ dc390_ResetSCSIBus( PACB pACB )
...
@@ -1625,7 +1624,7 @@ dc390_ResetSCSIBus( PACB pACB )
}
}
static
void
static
void
dc390_ScsiRstDetect
(
PACB
pACB
)
dc390_ScsiRstDetect
(
struct
dc390_acb
*
pACB
)
{
{
printk
(
"DC390: Rst_Detect: laststat = %08x
\n
"
,
dc390_laststatus
);
printk
(
"DC390: Rst_Detect: laststat = %08x
\n
"
,
dc390_laststatus
);
//DEBUG0(printk(KERN_INFO "RST_DETECT,"));
//DEBUG0(printk(KERN_INFO "RST_DETECT,"));
...
@@ -1658,9 +1657,9 @@ dc390_ScsiRstDetect( PACB pACB )
...
@@ -1658,9 +1657,9 @@ dc390_ScsiRstDetect( PACB pACB )
static
void
__inline__
static
void
__inline__
dc390_RequestSense
(
PACB
pACB
,
PDCB
pDCB
,
PSRB
pSRB
)
dc390_RequestSense
(
struct
dc390_acb
*
pACB
,
struct
dc390_dcb
*
pDCB
,
struct
dc390_srb
*
pSRB
)
{
{
PSCSICMD
pcmd
;
struct
scsi_cmnd
*
pcmd
;
pcmd
=
pSRB
->
pcmd
;
pcmd
=
pSRB
->
pcmd
;
...
@@ -1668,9 +1667,9 @@ dc390_RequestSense( PACB pACB, PDCB pDCB, PSRB pSRB )
...
@@ -1668,9 +1667,9 @@ dc390_RequestSense( PACB pACB, PDCB pDCB, PSRB pSRB )
pcmd
->
cmnd
[
0
],
pDCB
->
TargetID
,
pDCB
->
TargetLUN
));
pcmd
->
cmnd
[
0
],
pDCB
->
TargetID
,
pDCB
->
TargetLUN
));
pSRB
->
SRBFlag
|=
AUTO_REQSENSE
;
pSRB
->
SRBFlag
|=
AUTO_REQSENSE
;
//pSRB->Segment0[0] = (
UINT
) pSRB->CmdBlock[0];
//pSRB->Segment0[0] = (
u32
) pSRB->CmdBlock[0];
//pSRB->Segment0[1] = (
UINT
) pSRB->CmdBlock[4];
//pSRB->Segment0[1] = (
u32
) pSRB->CmdBlock[4];
//pSRB->Segment1[0] = ((
UINT
)(pcmd->cmd_len) << 8) + pSRB->SGcount;
//pSRB->Segment1[0] = ((
u32
)(pcmd->cmd_len) << 8) + pSRB->SGcount;
//pSRB->Segment1[1] = pSRB->TotalXferredLen;
//pSRB->Segment1[1] = pSRB->TotalXferredLen;
pSRB
->
SavedSGCount
=
pcmd
->
use_sg
;
pSRB
->
SavedSGCount
=
pcmd
->
use_sg
;
pSRB
->
SavedTotXLen
=
pSRB
->
TotalXferredLen
;
pSRB
->
SavedTotXLen
=
pSRB
->
TotalXferredLen
;
...
@@ -1683,8 +1682,8 @@ dc390_RequestSense( PACB pACB, PDCB pDCB, PSRB pSRB )
...
@@ -1683,8 +1682,8 @@ dc390_RequestSense( PACB pACB, PDCB pDCB, PSRB pSRB )
//pSRB->CmdBlock[0] = REQUEST_SENSE;
//pSRB->CmdBlock[0] = REQUEST_SENSE;
//pSRB->CmdBlock[1] = pDCB->TargetLUN << 5;
//pSRB->CmdBlock[1] = pDCB->TargetLUN << 5;
//(
USHORT
) pSRB->CmdBlock[2] = 0;
//(
u16
) pSRB->CmdBlock[2] = 0;
//(
USHORT
) pSRB->CmdBlock[4] = sizeof(pcmd->sense_buffer);
//(
u16
) pSRB->CmdBlock[4] = sizeof(pcmd->sense_buffer);
//pSRB->ScsiCmdLen = 6;
//pSRB->ScsiCmdLen = 6;
pSRB
->
TotalXferredLen
=
0
;
pSRB
->
TotalXferredLen
=
0
;
...
@@ -1698,7 +1697,7 @@ dc390_RequestSense( PACB pACB, PDCB pDCB, PSRB pSRB )
...
@@ -1698,7 +1697,7 @@ dc390_RequestSense( PACB pACB, PDCB pDCB, PSRB pSRB )
static
void
__inline__
static
void
__inline__
dc390_InvalidCmd
(
PACB
pACB
)
dc390_InvalidCmd
(
struct
dc390_acb
*
pACB
)
{
{
if
(
pACB
->
pActiveDCB
->
pActiveSRB
->
SRBState
&
(
SRB_START_
+
SRB_MSGOUT
)
)
if
(
pACB
->
pActiveDCB
->
pActiveSRB
->
SRBState
&
(
SRB_START_
+
SRB_MSGOUT
)
)
DC390_write8
(
ScsiCmd
,
CLEAR_FIFO_CMD
);
DC390_write8
(
ScsiCmd
,
CLEAR_FIFO_CMD
);
...
...
drivers/scsi/tmscsim.c
View file @
f4e7ddb6
...
@@ -221,11 +221,8 @@
...
@@ -221,11 +221,8 @@
#endif
#endif
#define DCBDEBUG1(x) C_NOP
#define DCBDEBUG1(x) C_NOP
/* Includes */
#include <linux/config.h>
#include <linux/module.h>
#include <linux/module.h>
#include <asm/dma.h>
#include <asm/io.h>
#include <asm/system.h>
#include <linux/delay.h>
#include <linux/delay.h>
#include <linux/signal.h>
#include <linux/signal.h>
#include <linux/sched.h>
#include <linux/sched.h>
...
@@ -235,44 +232,30 @@
...
@@ -235,44 +232,30 @@
#include <linux/pci.h>
#include <linux/pci.h>
#include <linux/proc_fs.h>
#include <linux/proc_fs.h>
#include <linux/string.h>
#include <linux/string.h>
#include <linux/ctype.h>
#include <linux/mm.h>
#include <linux/mm.h>
#include <linux/config.h>
#include <linux/version.h>
#include <linux/blkdev.h>
#include <linux/blkdev.h>
#include <linux/timer.h>
#include <linux/timer.h>
#include <linux/interrupt.h>
#include <linux/interrupt.h>
#include <linux/init.h>
#include <linux/spinlock.h>
#include <asm/io.h>
#if 0
#include <scsi/scsi.h>
#include <scsi/scsi_cmnd.h>
#include <scsi/scsi_device.h>
#else
#include "scsi.h"
#include "scsi.h"
#endif
#include <scsi/scsi_host.h>
#include <scsi/scsi_host.h>
#include <linux/stat.h>
#include <scsi/scsicam.h>
#include <scsi/scsicam.h>
#include "dc390.h"
#include "dc390.h"
#define PCI_DEVICE_ID_AMD53C974 PCI_DEVICE_ID_AMD_SCSI
#define PCI_DEVICE_ID_AMD53C974 PCI_DEVICE_ID_AMD_SCSI
/* Locking */
/* Note: Starting from 2.1.9x, the mid-level scsi code issues a
* spinlock_irqsave (&io_request_lock) before calling the driver's
* routines, so we don't need to lock, except in the IRQ handler.
* The policy 3, let the midlevel scsi code do the io_request_locks
* and us locking on a driver specific lock, shouldn't hurt anybody; it
* just causes a minor performance degradation for setting the locks.
*/
/* spinlock things
* level 3: lock on both adapter specific locks and (global) io_request_lock
* level 2: lock on adapter specific locks only
* level 1: rely on the locking of the mid level code (io_request_lock)
* undef : traditional save_flags; cli; restore_flags;
*/
#include <linux/init.h>
#include <linux/spinlock.h>
static
struct
pci_device_id
tmscsim_pci_tbl
[]
=
{
static
struct
pci_device_id
tmscsim_pci_tbl
[]
=
{
{
{
.
vendor
=
PCI_VENDOR_ID_AMD
,
.
vendor
=
PCI_VENDOR_ID_AMD
,
.
device
=
PCI_DEVICE_ID_AMD53C974
,
.
device
=
PCI_DEVICE_ID_AMD53C974
,
...
@@ -283,62 +266,47 @@ static struct pci_device_id tmscsim_pci_tbl[] = {
...
@@ -283,62 +266,47 @@ static struct pci_device_id tmscsim_pci_tbl[] = {
};
};
MODULE_DEVICE_TABLE
(
pci
,
tmscsim_pci_tbl
);
MODULE_DEVICE_TABLE
(
pci
,
tmscsim_pci_tbl
);
/* These macros are used for uniform access to 2.0.x and 2.1.x PCI config space*/
#define PDEV pdev
#define PDEVDECL struct pci_dev *pdev
#define PDEVDECL0 struct pci_dev *pdev = NULL
#define PDEVDECL1 struct pci_dev *pdev
#define PDEVSET pACB->pdev=pdev
#define PDEVSET1 pdev=pACB->pdev
#define PCI_WRITE_CONFIG_BYTE(pd, rv, bv) pci_write_config_byte (pd, rv, bv)
#define PCI_READ_CONFIG_BYTE(pd, rv, bv) pci_read_config_byte (pd, rv, bv)
#define PCI_WRITE_CONFIG_WORD(pd, rv, bv) pci_write_config_word (pd, rv, bv)
#define PCI_READ_CONFIG_WORD(pd, rv, bv) pci_read_config_word (pd, rv, bv)
#define PCI_PRESENT (1)
#define PCI_GET_IO_AND_IRQ do{io_port = pci_resource_start (pdev, 0); irq = pdev->irq;} while(0)
#include "tmscsim.h"
#include "tmscsim.h"
static
UCHAR
dc390_StartSCSI
(
PACB
pACB
,
PDCB
pDCB
,
PSRB
pSRB
);
static
u8
dc390_StartSCSI
(
struct
dc390_acb
*
pACB
,
struct
dc390_dcb
*
pDCB
,
struct
dc390_srb
*
pSRB
);
static
void
dc390_DataOut_0
(
PACB
pACB
,
PSRB
pSRB
,
PUCHAR
psstatus
);
static
void
dc390_DataOut_0
(
struct
dc390_acb
*
pACB
,
struct
dc390_srb
*
pSRB
,
u8
*
psstatus
);
static
void
dc390_DataIn_0
(
PACB
pACB
,
PSRB
pSRB
,
PUCHAR
psstatus
);
static
void
dc390_DataIn_0
(
struct
dc390_acb
*
pACB
,
struct
dc390_srb
*
pSRB
,
u8
*
psstatus
);
static
void
dc390_Command_0
(
PACB
pACB
,
PSRB
pSRB
,
PUCHAR
psstatus
);
static
void
dc390_Command_0
(
struct
dc390_acb
*
pACB
,
struct
dc390_srb
*
pSRB
,
u8
*
psstatus
);
static
void
dc390_Status_0
(
PACB
pACB
,
PSRB
pSRB
,
PUCHAR
psstatus
);
static
void
dc390_Status_0
(
struct
dc390_acb
*
pACB
,
struct
dc390_srb
*
pSRB
,
u8
*
psstatus
);
static
void
dc390_MsgOut_0
(
PACB
pACB
,
PSRB
pSRB
,
PUCHAR
psstatus
);
static
void
dc390_MsgOut_0
(
struct
dc390_acb
*
pACB
,
struct
dc390_srb
*
pSRB
,
u8
*
psstatus
);
static
void
dc390_MsgIn_0
(
PACB
pACB
,
PSRB
pSRB
,
PUCHAR
psstatus
);
static
void
dc390_MsgIn_0
(
struct
dc390_acb
*
pACB
,
struct
dc390_srb
*
pSRB
,
u8
*
psstatus
);
static
void
dc390_DataOutPhase
(
PACB
pACB
,
PSRB
pSRB
,
PUCHAR
psstatus
);
static
void
dc390_DataOutPhase
(
struct
dc390_acb
*
pACB
,
struct
dc390_srb
*
pSRB
,
u8
*
psstatus
);
static
void
dc390_DataInPhase
(
PACB
pACB
,
PSRB
pSRB
,
PUCHAR
psstatus
);
static
void
dc390_DataInPhase
(
struct
dc390_acb
*
pACB
,
struct
dc390_srb
*
pSRB
,
u8
*
psstatus
);
static
void
dc390_CommandPhase
(
PACB
pACB
,
PSRB
pSRB
,
PUCHAR
psstatus
);
static
void
dc390_CommandPhase
(
struct
dc390_acb
*
pACB
,
struct
dc390_srb
*
pSRB
,
u8
*
psstatus
);
static
void
dc390_StatusPhase
(
PACB
pACB
,
PSRB
pSRB
,
PUCHAR
psstatus
);
static
void
dc390_StatusPhase
(
struct
dc390_acb
*
pACB
,
struct
dc390_srb
*
pSRB
,
u8
*
psstatus
);
static
void
dc390_MsgOutPhase
(
PACB
pACB
,
PSRB
pSRB
,
PUCHAR
psstatus
);
static
void
dc390_MsgOutPhase
(
struct
dc390_acb
*
pACB
,
struct
dc390_srb
*
pSRB
,
u8
*
psstatus
);
static
void
dc390_MsgInPhase
(
PACB
pACB
,
PSRB
pSRB
,
PUCHAR
psstatus
);
static
void
dc390_MsgInPhase
(
struct
dc390_acb
*
pACB
,
struct
dc390_srb
*
pSRB
,
u8
*
psstatus
);
static
void
dc390_Nop_0
(
PACB
pACB
,
PSRB
pSRB
,
PUCHAR
psstatus
);
static
void
dc390_Nop_0
(
struct
dc390_acb
*
pACB
,
struct
dc390_srb
*
pSRB
,
u8
*
psstatus
);
static
void
dc390_Nop_1
(
PACB
pACB
,
PSRB
pSRB
,
PUCHAR
psstatus
);
static
void
dc390_Nop_1
(
struct
dc390_acb
*
pACB
,
struct
dc390_srb
*
pSRB
,
u8
*
psstatus
);
static
void
dc390_SetXferRate
(
PACB
pACB
,
PDCB
pDCB
);
static
void
dc390_SetXferRate
(
struct
dc390_acb
*
pACB
,
struct
dc390_dcb
*
pDCB
);
static
void
dc390_Disconnect
(
PACB
pACB
);
static
void
dc390_Disconnect
(
struct
dc390_acb
*
pACB
);
static
void
dc390_Reselect
(
PACB
pACB
);
static
void
dc390_Reselect
(
struct
dc390_acb
*
pACB
);
static
void
dc390_SRBdone
(
PACB
pACB
,
PDCB
pDCB
,
PSRB
pSRB
);
static
void
dc390_SRBdone
(
struct
dc390_acb
*
pACB
,
struct
dc390_dcb
*
pDCB
,
struct
dc390_srb
*
pSRB
);
static
void
dc390_DoingSRB_Done
(
PACB
pACB
,
PSCSICMD
cmd
);
static
void
dc390_DoingSRB_Done
(
struct
dc390_acb
*
pACB
,
struct
scsi_cmnd
*
cmd
);
static
void
dc390_ScsiRstDetect
(
PACB
pACB
);
static
void
dc390_ScsiRstDetect
(
struct
dc390_acb
*
pACB
);
static
void
dc390_ResetSCSIBus
(
PACB
pACB
);
static
void
dc390_ResetSCSIBus
(
struct
dc390_acb
*
pACB
);
static
void
__inline__
dc390_RequestSense
(
PACB
pACB
,
PDCB
pDCB
,
PSRB
pSRB
);
static
void
__inline__
dc390_RequestSense
(
struct
dc390_acb
*
pACB
,
struct
dc390_dcb
*
pDCB
,
struct
dc390_srb
*
pSRB
);
static
void
__inline__
dc390_InvalidCmd
(
PACB
pACB
);
static
void
__inline__
dc390_InvalidCmd
(
struct
dc390_acb
*
pACB
);
static
void
__inline__
dc390_EnableMsgOut_Abort
(
PACB
,
PSRB
);
static
void
__inline__
dc390_EnableMsgOut_Abort
(
struct
dc390_acb
*
,
struct
dc390_srb
*
);
static
irqreturn_t
do_DC390_Interrupt
(
int
,
void
*
,
struct
pt_regs
*
);
static
irqreturn_t
do_DC390_Interrupt
(
int
,
void
*
,
struct
pt_regs
*
);
static
int
dc390_initAdapter
(
PSH
psh
,
ULONG
io_port
,
UCHAR
Irq
,
UCHAR
index
);
static
int
dc390_initAdapter
(
struct
Scsi_Host
*
psh
,
unsigned
long
io_port
,
u8
Irq
,
u8
index
);
static
void
dc390_updateDCB
(
PACB
pACB
,
PDCB
pDCB
);
static
void
dc390_updateDCB
(
struct
dc390_acb
*
pACB
,
struct
dc390_dcb
*
pDCB
);
static
int
DC390_proc_info
(
struct
Scsi_Host
*
shpnt
,
char
*
buffer
,
char
**
start
,
static
int
DC390_proc_info
(
struct
Scsi_Host
*
shpnt
,
char
*
buffer
,
char
**
start
,
off_t
offset
,
int
length
,
int
inout
);
off_t
offset
,
int
length
,
int
inout
);
static
PACB
dc390_pACB_start
=
NULL
;
static
struct
dc390_acb
*
dc390_pACB_start
=
NULL
;
static
PACB
dc390_pACB_current
=
NULL
;
static
struct
dc390_acb
*
dc390_pACB_current
=
NULL
;
static
ULONG
dc390_lastabortedpid
=
0
;
static
unsigned
long
dc390_lastabortedpid
=
0
;
static
UINT
dc390_laststatus
=
0
;
static
u32
dc390_laststatus
=
0
;
static
UCHAR
dc390_adapterCnt
=
0
;
static
u8
dc390_adapterCnt
=
0
;
/* Startup values, to be overriden on the commandline */
/* Startup values, to be overriden on the commandline */
static
int
tmscsim
[]
=
{
-
2
,
-
2
,
-
2
,
-
2
,
-
2
,
-
2
};
static
int
tmscsim
[]
=
{
-
2
,
-
2
,
-
2
,
-
2
,
-
2
,
-
2
};
...
@@ -351,7 +319,7 @@ MODULE_DESCRIPTION("SCSI host adapter driver for Tekram DC390 and other AMD53C97
...
@@ -351,7 +319,7 @@ MODULE_DESCRIPTION("SCSI host adapter driver for Tekram DC390 and other AMD53C97
MODULE_LICENSE
(
"GPL"
);
MODULE_LICENSE
(
"GPL"
);
MODULE_SUPPORTED_DEVICE
(
"sd,sr,sg,st"
);
MODULE_SUPPORTED_DEVICE
(
"sd,sr,sg,st"
);
static
PVOID
dc390_phase0
[]
=
{
static
void
*
dc390_phase0
[]
=
{
dc390_DataOut_0
,
dc390_DataOut_0
,
dc390_DataIn_0
,
dc390_DataIn_0
,
dc390_Command_0
,
dc390_Command_0
,
...
@@ -363,7 +331,7 @@ static PVOID dc390_phase0[]={
...
@@ -363,7 +331,7 @@ static PVOID dc390_phase0[]={
dc390_Nop_1
dc390_Nop_1
};
};
static
PVOID
dc390_phase1
[]
=
{
static
void
*
dc390_phase1
[]
=
{
dc390_DataOutPhase
,
dc390_DataOutPhase
,
dc390_DataInPhase
,
dc390_DataInPhase
,
dc390_CommandPhase
,
dc390_CommandPhase
,
...
@@ -402,15 +370,15 @@ static char* dc390_p1_str[] = {
...
@@ -402,15 +370,15 @@ static char* dc390_p1_str[] = {
#endif
#endif
/* Devices erroneously pretending to be able to do TagQ */
/* Devices erroneously pretending to be able to do TagQ */
static
UCHAR
dc390_baddevname1
[
2
][
28
]
=
{
static
u8
dc390_baddevname1
[
2
][
28
]
=
{
"SEAGATE ST3390N 9546"
,
"SEAGATE ST3390N 9546"
,
"HP C3323-300 4269"
};
"HP C3323-300 4269"
};
#define BADDEVCNT 2
#define BADDEVCNT 2
static
char
*
dc390_adapname
=
"DC390"
;
static
char
*
dc390_adapname
=
"DC390"
;
static
UCHAR
dc390_eepromBuf
[
MAX_ADAPTER_NUM
][
EE_LEN
];
static
u8
dc390_eepromBuf
[
MAX_ADAPTER_NUM
][
EE_LEN
];
static
UCHAR
dc390_clock_period1
[]
=
{
4
,
5
,
6
,
7
,
8
,
10
,
13
,
20
};
static
u8
dc390_clock_period1
[]
=
{
4
,
5
,
6
,
7
,
8
,
10
,
13
,
20
};
static
UCHAR
dc390_clock_speed
[]
=
{
100
,
80
,
67
,
57
,
50
,
40
,
31
,
20
};
static
u8
dc390_clock_speed
[]
=
{
100
,
80
,
67
,
57
,
50
,
40
,
31
,
20
};
/***********************************************************************
/***********************************************************************
* Functions for access to DC390 EEPROM
* Functions for access to DC390 EEPROM
...
@@ -419,46 +387,45 @@ static UCHAR dc390_clock_speed[] = {100,80,67,57,50, 40, 31, 20};
...
@@ -419,46 +387,45 @@ static UCHAR dc390_clock_speed[] = {100,80,67,57,50, 40, 31, 20};
**********************************************************************/
**********************************************************************/
static
void
__devinit
dc390_EnDisableCE
(
UCHAR
mode
,
PDEVDECL
,
PUCHAR
regval
)
static
void
__devinit
dc390_EnDisableCE
(
u8
mode
,
struct
pci_dev
*
pdev
,
u8
*
regval
)
{
{
UCHAR
bval
;
u8
bval
;
bval
=
0
;
bval
=
0
;
if
(
mode
==
ENABLE_CE
)
if
(
mode
==
ENABLE_CE
)
*
regval
=
0xc0
;
*
regval
=
0xc0
;
else
else
*
regval
=
0x80
;
*
regval
=
0x80
;
PCI_WRITE_CONFIG_BYTE
(
PDEV
,
*
regval
,
bval
);
pci_write_config_byte
(
pdev
,
*
regval
,
bval
);
if
(
mode
==
DISABLE_CE
)
if
(
mode
==
DISABLE_CE
)
PCI_WRITE_CONFIG_BYTE
(
PDEV
,
*
regval
,
bval
);
pci_write_config_byte
(
pdev
,
*
regval
,
bval
);
udelay
(
160
);
udelay
(
160
);
}
}
/* Override EEprom values with explicitly set values */
/* Override EEprom values with explicitly set values */
static
void
__devinit
dc390_EEprom_Override
(
UCHAR
index
)
static
void
__devinit
dc390_EEprom_Override
(
u8
index
)
{
{
PUCHAR
ptr
;
u8
*
ptr
=
(
u8
*
)
dc390_eepromBuf
[
index
];
UCHAR
id
;
u8
id
;
ptr
=
(
PUCHAR
)
dc390_eepromBuf
[
index
];
/* Adapter Settings */
/* Adapter Settings */
if
(
tmscsim
[
0
]
!=
-
2
)
if
(
tmscsim
[
0
]
!=
-
2
)
ptr
[
EE_ADAPT_SCSI_ID
]
=
(
UCHAR
)
tmscsim
[
0
];
/* Adapter ID */
ptr
[
EE_ADAPT_SCSI_ID
]
=
(
u8
)
tmscsim
[
0
];
/* Adapter ID */
if
(
tmscsim
[
3
]
!=
-
2
)
if
(
tmscsim
[
3
]
!=
-
2
)
ptr
[
EE_MODE2
]
=
(
UCHAR
)
tmscsim
[
3
];
ptr
[
EE_MODE2
]
=
(
u8
)
tmscsim
[
3
];
if
(
tmscsim
[
5
]
!=
-
2
)
if
(
tmscsim
[
5
]
!=
-
2
)
ptr
[
EE_DELAY
]
=
tmscsim
[
5
];
/* Reset delay */
ptr
[
EE_DELAY
]
=
tmscsim
[
5
];
/* Reset delay */
if
(
tmscsim
[
4
]
!=
-
2
)
if
(
tmscsim
[
4
]
!=
-
2
)
ptr
[
EE_TAG_CMD_NUM
]
=
(
UCHAR
)
tmscsim
[
4
];
/* Tagged Cmds */
ptr
[
EE_TAG_CMD_NUM
]
=
(
u8
)
tmscsim
[
4
];
/* Tagged Cmds */
/* Device Settings */
/* Device Settings */
for
(
id
=
0
;
id
<
MAX_SCSI_ID
;
id
++
)
for
(
id
=
0
;
id
<
MAX_SCSI_ID
;
id
++
)
{
{
if
(
tmscsim
[
2
]
!=
-
2
)
if
(
tmscsim
[
2
]
!=
-
2
)
ptr
[
id
<<
2
]
=
(
UCHAR
)
tmscsim
[
2
];
/* EE_MODE1 */
ptr
[
id
<<
2
]
=
(
u8
)
tmscsim
[
2
];
/* EE_MODE1 */
if
(
tmscsim
[
1
]
!=
-
2
)
if
(
tmscsim
[
1
]
!=
-
2
)
ptr
[(
id
<<
2
)
+
1
]
=
(
UCHAR
)
tmscsim
[
1
];
/* EE_Speed */
ptr
[(
id
<<
2
)
+
1
]
=
(
u8
)
tmscsim
[
1
];
/* EE_Speed */
}
}
}
}
...
@@ -527,36 +494,36 @@ static int __init dc390_setup (char *str)
...
@@ -527,36 +494,36 @@ static int __init dc390_setup (char *str)
__setup
(
"tmscsim="
,
dc390_setup
);
__setup
(
"tmscsim="
,
dc390_setup
);
#endif
#endif
static
void
__devinit
dc390_EEpromOutDI
(
PDEVDECL
,
PUCHAR
regval
,
UCHAR
Carry
)
static
void
__devinit
dc390_EEpromOutDI
(
struct
pci_dev
*
pdev
,
u8
*
regval
,
u8
Carry
)
{
{
UCHAR
bval
;
u8
bval
;
bval
=
0
;
bval
=
0
;
if
(
Carry
)
if
(
Carry
)
{
{
bval
=
0x40
;
bval
=
0x40
;
*
regval
=
0x80
;
*
regval
=
0x80
;
PCI_WRITE_CONFIG_BYTE
(
PDEV
,
*
regval
,
bval
);
pci_write_config_byte
(
pdev
,
*
regval
,
bval
);
}
}
udelay
(
160
);
udelay
(
160
);
bval
|=
0x80
;
bval
|=
0x80
;
PCI_WRITE_CONFIG_BYTE
(
PDEV
,
*
regval
,
bval
);
pci_write_config_byte
(
pdev
,
*
regval
,
bval
);
udelay
(
160
);
udelay
(
160
);
bval
=
0
;
bval
=
0
;
PCI_WRITE_CONFIG_BYTE
(
PDEV
,
*
regval
,
bval
);
pci_write_config_byte
(
pdev
,
*
regval
,
bval
);
udelay
(
160
);
udelay
(
160
);
}
}
static
UCHAR
__devinit
dc390_EEpromInDO
(
PDEVDECL
)
static
u8
__devinit
dc390_EEpromInDO
(
struct
pci_dev
*
pdev
)
{
{
UCHAR
bval
;
u8
bval
;
PCI_WRITE_CONFIG_BYTE
(
PDEV
,
0x80
,
0x80
);
pci_write_config_byte
(
pdev
,
0x80
,
0x80
);
udelay
(
160
);
udelay
(
160
);
PCI_WRITE_CONFIG_BYTE
(
PDEV
,
0x80
,
0x40
);
pci_write_config_byte
(
pdev
,
0x80
,
0x40
);
udelay
(
160
);
udelay
(
160
);
PCI_READ_CONFIG_BYTE
(
PDEV
,
0x00
,
&
bval
);
pci_read_config_byte
(
pdev
,
0x00
,
&
bval
);
if
(
bval
==
0x22
)
if
(
bval
==
0x22
)
return
(
1
);
return
(
1
);
else
else
...
@@ -564,68 +531,68 @@ static UCHAR __devinit dc390_EEpromInDO( PDEVDECL )
...
@@ -564,68 +531,68 @@ static UCHAR __devinit dc390_EEpromInDO( PDEVDECL )
}
}
static
USHORT
__devinit
dc390_EEpromGetData1
(
PDEVDECL
)
static
u16
__devinit
dc390_EEpromGetData1
(
struct
pci_dev
*
pdev
)
{
{
UCHAR
i
;
u8
i
;
UCHAR
carryFlag
;
u8
carryFlag
;
USHORT
wval
;
u16
wval
;
wval
=
0
;
wval
=
0
;
for
(
i
=
0
;
i
<
16
;
i
++
)
for
(
i
=
0
;
i
<
16
;
i
++
)
{
{
wval
<<=
1
;
wval
<<=
1
;
carryFlag
=
dc390_EEpromInDO
(
PDEV
);
carryFlag
=
dc390_EEpromInDO
(
pdev
);
wval
|=
carryFlag
;
wval
|=
carryFlag
;
}
}
return
(
wval
);
return
(
wval
);
}
}
static
void
__devinit
dc390_Prepare
(
PDEVDECL
,
PUCHAR
regval
,
UCHAR
EEpromCmd
)
static
void
__devinit
dc390_Prepare
(
struct
pci_dev
*
pdev
,
u8
*
regval
,
u8
EEpromCmd
)
{
{
UCHAR
i
,
j
;
u8
i
,
j
;
UCHAR
carryFlag
;
u8
carryFlag
;
carryFlag
=
1
;
carryFlag
=
1
;
j
=
0x80
;
j
=
0x80
;
for
(
i
=
0
;
i
<
9
;
i
++
)
for
(
i
=
0
;
i
<
9
;
i
++
)
{
{
dc390_EEpromOutDI
(
PDEV
,
regval
,
carryFlag
);
dc390_EEpromOutDI
(
pdev
,
regval
,
carryFlag
);
carryFlag
=
(
EEpromCmd
&
j
)
?
1
:
0
;
carryFlag
=
(
EEpromCmd
&
j
)
?
1
:
0
;
j
>>=
1
;
j
>>=
1
;
}
}
}
}
static
void
__devinit
dc390_ReadEEprom
(
PDEVDECL
,
PUSHORT
ptr
)
static
void
__devinit
dc390_ReadEEprom
(
struct
pci_dev
*
pdev
,
u16
*
ptr
)
{
{
UCHAR
regval
,
cmd
;
u8
regval
,
cmd
;
UCHAR
i
;
u8
i
;
cmd
=
EEPROM_READ
;
cmd
=
EEPROM_READ
;
for
(
i
=
0
;
i
<
0x40
;
i
++
)
for
(
i
=
0
;
i
<
0x40
;
i
++
)
{
{
dc390_EnDisableCE
(
ENABLE_CE
,
PDEV
,
&
regval
);
dc390_EnDisableCE
(
ENABLE_CE
,
pdev
,
&
regval
);
dc390_Prepare
(
PDEV
,
&
regval
,
cmd
++
);
dc390_Prepare
(
pdev
,
&
regval
,
cmd
++
);
*
ptr
++
=
dc390_EEpromGetData1
(
PDEV
);
*
ptr
++
=
dc390_EEpromGetData1
(
pdev
);
dc390_EnDisableCE
(
DISABLE_CE
,
PDEV
,
&
regval
);
dc390_EnDisableCE
(
DISABLE_CE
,
pdev
,
&
regval
);
}
}
}
}
static
void
__devinit
dc390_interpret_delay
(
UCHAR
index
)
static
void
__devinit
dc390_interpret_delay
(
u8
index
)
{
{
char
interpd
[]
=
{
1
,
3
,
5
,
10
,
16
,
30
,
60
,
120
};
char
interpd
[]
=
{
1
,
3
,
5
,
10
,
16
,
30
,
60
,
120
};
dc390_eepromBuf
[
index
][
EE_DELAY
]
=
interpd
[
dc390_eepromBuf
[
index
][
EE_DELAY
]];
dc390_eepromBuf
[
index
][
EE_DELAY
]
=
interpd
[
dc390_eepromBuf
[
index
][
EE_DELAY
]];
}
}
static
UCHAR
__devinit
dc390_CheckEEpromCheckSum
(
PDEVDECL
,
UCHAR
index
)
static
u8
__devinit
dc390_CheckEEpromCheckSum
(
struct
pci_dev
*
pdev
,
u8
index
)
{
{
UCHAR
i
;
u8
i
;
char
EEbuf
[
128
];
char
EEbuf
[
128
];
USHORT
wval
,
*
ptr
=
(
PUSHORT
)
EEbuf
;
u16
wval
,
*
ptr
=
(
u16
*
)
EEbuf
;
dc390_ReadEEprom
(
PDEV
,
ptr
);
dc390_ReadEEprom
(
pdev
,
ptr
);
memcpy
(
dc390_eepromBuf
[
index
],
EEbuf
,
EE_ADAPT_SCSI_ID
);
memcpy
(
dc390_eepromBuf
[
index
],
EEbuf
,
EE_ADAPT_SCSI_ID
);
memcpy
(
&
dc390_eepromBuf
[
index
][
EE_ADAPT_SCSI_ID
],
memcpy
(
&
dc390_eepromBuf
[
index
][
EE_ADAPT_SCSI_ID
],
&
EEbuf
[
REAL_EE_ADAPT_SCSI_ID
],
EE_LEN
-
EE_ADAPT_SCSI_ID
);
&
EEbuf
[
REAL_EE_ADAPT_SCSI_ID
],
EE_LEN
-
EE_ADAPT_SCSI_ID
);
...
@@ -643,9 +610,9 @@ static UCHAR __devinit dc390_CheckEEpromCheckSum( PDEVDECL, UCHAR index )
...
@@ -643,9 +610,9 @@ static UCHAR __devinit dc390_CheckEEpromCheckSum( PDEVDECL, UCHAR index )
* (DCBs, SRBs, Queueing)
* (DCBs, SRBs, Queueing)
*
*
**********************************************************************/
**********************************************************************/
static
PDCB
__inline__
dc390_findDCB
(
PACB
pACB
,
UCHAR
id
,
UCHAR
lun
)
static
struct
dc390_dcb
__inline__
*
dc390_findDCB
(
struct
dc390_acb
*
pACB
,
u8
id
,
u8
lun
)
{
{
PDCB
pDCB
=
pACB
->
pLinkDCB
;
if
(
!
pDCB
)
return
0
;
struct
dc390_dcb
*
pDCB
=
pACB
->
pLinkDCB
;
if
(
!
pDCB
)
return
0
;
while
(
pDCB
->
TargetID
!=
id
||
pDCB
->
TargetLUN
!=
lun
)
while
(
pDCB
->
TargetID
!=
id
||
pDCB
->
TargetLUN
!=
lun
)
{
{
pDCB
=
pDCB
->
pNextDCB
;
pDCB
=
pDCB
->
pNextDCB
;
...
@@ -675,26 +642,10 @@ static PDCB __inline__ dc390_findDCB ( PACB pACB, UCHAR id, UCHAR lun)
...
@@ -675,26 +642,10 @@ static PDCB __inline__ dc390_findDCB ( PACB pACB, UCHAR id, UCHAR lun)
* Lists are managed using two pointers and eventually a counter
* Lists are managed using two pointers and eventually a counter
*/
*/
#if 0
/* Look for a SCSI cmd in a SRB queue */
static PSRB dc390_find_cmd_in_SRBq (PSCSICMD cmd, PSRB queue)
{
PSRB q = queue;
while (q)
{
if (q->pcmd == cmd) return q;
q = q->pNextSRB;
if (q == queue) return 0;
}
return q;
}
#endif
/* Return next free SRB */
/* Return next free SRB */
static
__inline__
PSRB
dc390_Free_get
(
PACB
pACB
)
static
__inline__
struct
dc390_srb
*
dc390_Free_get
(
struct
dc390_acb
*
pACB
)
{
{
PSRB
pSRB
;
struct
dc390_srb
*
pSRB
;
pSRB
=
pACB
->
pFreeSRB
;
pSRB
=
pACB
->
pFreeSRB
;
DEBUG0
(
printk
(
"DC390: Get Free SRB %p
\n
"
,
pSRB
));
DEBUG0
(
printk
(
"DC390: Get Free SRB %p
\n
"
,
pSRB
));
...
@@ -708,7 +659,7 @@ static __inline__ PSRB dc390_Free_get ( PACB pACB )
...
@@ -708,7 +659,7 @@ static __inline__ PSRB dc390_Free_get ( PACB pACB )
}
}
/* Insert SRB oin top of free list */
/* Insert SRB oin top of free list */
static
__inline__
void
dc390_Free_insert
(
PACB
pACB
,
PSRB
pSRB
)
static
__inline__
void
dc390_Free_insert
(
struct
dc390_acb
*
pACB
,
struct
dc390_srb
*
pSRB
)
{
{
DEBUG0
(
printk
(
"DC390: Free SRB %p
\n
"
,
pSRB
));
DEBUG0
(
printk
(
"DC390: Free SRB %p
\n
"
,
pSRB
));
pSRB
->
pNextSRB
=
pACB
->
pFreeSRB
;
pSRB
->
pNextSRB
=
pACB
->
pFreeSRB
;
...
@@ -717,7 +668,7 @@ static __inline__ void dc390_Free_insert (PACB pACB, PSRB pSRB)
...
@@ -717,7 +668,7 @@ static __inline__ void dc390_Free_insert (PACB pACB, PSRB pSRB)
/* Inserts a SRB to the top of the Waiting list */
/* Inserts a SRB to the top of the Waiting list */
static
__inline__
void
dc390_Waiting_insert
(
PDCB
pDCB
,
PSRB
pSRB
)
static
__inline__
void
dc390_Waiting_insert
(
struct
dc390_dcb
*
pDCB
,
struct
dc390_srb
*
pSRB
)
{
{
DEBUG0
(
printk
(
"DC390: Insert pSRB %p cmd %li to Waiting
\n
"
,
pSRB
,
pSRB
->
pcmd
->
pid
));
DEBUG0
(
printk
(
"DC390: Insert pSRB %p cmd %li to Waiting
\n
"
,
pSRB
,
pSRB
->
pcmd
->
pid
));
pSRB
->
pNextSRB
=
pDCB
->
pWaitingSRB
;
pSRB
->
pNextSRB
=
pDCB
->
pWaitingSRB
;
...
@@ -729,7 +680,7 @@ static __inline__ void dc390_Waiting_insert ( PDCB pDCB, PSRB pSRB )
...
@@ -729,7 +680,7 @@ static __inline__ void dc390_Waiting_insert ( PDCB pDCB, PSRB pSRB )
/* Queue SRB to waiting list */
/* Queue SRB to waiting list */
static
__inline__
void
dc390_Waiting_append
(
PDCB
pDCB
,
PSRB
pSRB
)
static
__inline__
void
dc390_Waiting_append
(
struct
dc390_dcb
*
pDCB
,
struct
dc390_srb
*
pSRB
)
{
{
DEBUG0
(
printk
(
"DC390: Append pSRB %p cmd %li to Waiting
\n
"
,
pSRB
,
pSRB
->
pcmd
->
pid
));
DEBUG0
(
printk
(
"DC390: Append pSRB %p cmd %li to Waiting
\n
"
,
pSRB
,
pSRB
->
pcmd
->
pid
));
if
(
pDCB
->
pWaitingSRB
)
if
(
pDCB
->
pWaitingSRB
)
...
@@ -743,7 +694,7 @@ static __inline__ void dc390_Waiting_append ( PDCB pDCB, PSRB pSRB)
...
@@ -743,7 +694,7 @@ static __inline__ void dc390_Waiting_append ( PDCB pDCB, PSRB pSRB)
pDCB
->
pDCBACB
->
CmdInQ
++
;
pDCB
->
pDCBACB
->
CmdInQ
++
;
}
}
static
__inline__
void
dc390_Going_append
(
PDCB
pDCB
,
PSRB
pSRB
)
static
__inline__
void
dc390_Going_append
(
struct
dc390_dcb
*
pDCB
,
struct
dc390_srb
*
pSRB
)
{
{
pDCB
->
GoingSRBCnt
++
;
pDCB
->
GoingSRBCnt
++
;
DEBUG0
(
printk
(
"DC390: Append SRB %p to Going
\n
"
,
pSRB
));
DEBUG0
(
printk
(
"DC390: Append SRB %p to Going
\n
"
,
pSRB
));
...
@@ -758,14 +709,14 @@ static __inline__ void dc390_Going_append (PDCB pDCB, PSRB pSRB)
...
@@ -758,14 +709,14 @@ static __inline__ void dc390_Going_append (PDCB pDCB, PSRB pSRB)
pSRB
->
pNextSRB
=
NULL
;
pSRB
->
pNextSRB
=
NULL
;
}
}
static
__inline__
void
dc390_Going_remove
(
PDCB
pDCB
,
PSRB
pSRB
)
static
__inline__
void
dc390_Going_remove
(
struct
dc390_dcb
*
pDCB
,
struct
dc390_srb
*
pSRB
)
{
{
DEBUG0
(
printk
(
"DC390: Remove SRB %p from Going
\n
"
,
pSRB
));
DEBUG0
(
printk
(
"DC390: Remove SRB %p from Going
\n
"
,
pSRB
));
if
(
pSRB
==
pDCB
->
pGoingSRB
)
if
(
pSRB
==
pDCB
->
pGoingSRB
)
pDCB
->
pGoingSRB
=
pSRB
->
pNextSRB
;
pDCB
->
pGoingSRB
=
pSRB
->
pNextSRB
;
else
else
{
{
PSRB
psrb
=
pDCB
->
pGoingSRB
;
struct
dc390_srb
*
psrb
=
pDCB
->
pGoingSRB
;
while
(
psrb
&&
psrb
->
pNextSRB
!=
pSRB
)
while
(
psrb
&&
psrb
->
pNextSRB
!=
pSRB
)
psrb
=
psrb
->
pNextSRB
;
psrb
=
psrb
->
pNextSRB
;
if
(
!
psrb
)
if
(
!
psrb
)
...
@@ -778,7 +729,7 @@ static __inline__ void dc390_Going_remove (PDCB pDCB, PSRB pSRB)
...
@@ -778,7 +729,7 @@ static __inline__ void dc390_Going_remove (PDCB pDCB, PSRB pSRB)
}
}
/* Moves SRB from Going list to the top of Waiting list */
/* Moves SRB from Going list to the top of Waiting list */
static
void
dc390_Going_to_Waiting
(
PDCB
pDCB
,
PSRB
pSRB
)
static
void
dc390_Going_to_Waiting
(
struct
dc390_dcb
*
pDCB
,
struct
dc390_srb
*
pSRB
)
{
{
DEBUG0
(
printk
(
KERN_INFO
"DC390: Going_to_Waiting (SRB %p) pid = %li
\n
"
,
pSRB
,
pSRB
->
pcmd
->
pid
));
DEBUG0
(
printk
(
KERN_INFO
"DC390: Going_to_Waiting (SRB %p) pid = %li
\n
"
,
pSRB
,
pSRB
->
pcmd
->
pid
));
/* Remove SRB from Going */
/* Remove SRB from Going */
...
@@ -789,7 +740,7 @@ static void dc390_Going_to_Waiting ( PDCB pDCB, PSRB pSRB )
...
@@ -789,7 +740,7 @@ static void dc390_Going_to_Waiting ( PDCB pDCB, PSRB pSRB )
}
}
/* Moves first SRB from Waiting list to Going list */
/* Moves first SRB from Waiting list to Going list */
static
__inline__
void
dc390_Waiting_to_Going
(
PDCB
pDCB
,
PSRB
pSRB
)
static
__inline__
void
dc390_Waiting_to_Going
(
struct
dc390_dcb
*
pDCB
,
struct
dc390_srb
*
pSRB
)
{
{
/* Remove from waiting list */
/* Remove from waiting list */
DEBUG0
(
printk
(
"DC390: Remove SRB %p from head of Waiting
\n
"
,
pSRB
));
DEBUG0
(
printk
(
"DC390: Remove SRB %p from head of Waiting
\n
"
,
pSRB
));
...
@@ -801,7 +752,7 @@ static __inline__ void dc390_Waiting_to_Going ( PDCB pDCB, PSRB pSRB )
...
@@ -801,7 +752,7 @@ static __inline__ void dc390_Waiting_to_Going ( PDCB pDCB, PSRB pSRB )
static
void
DC390_waiting_timed_out
(
unsigned
long
ptr
);
static
void
DC390_waiting_timed_out
(
unsigned
long
ptr
);
/* Sets the timer to wake us up */
/* Sets the timer to wake us up */
static
void
dc390_waiting_timer
(
PACB
pACB
,
unsigned
long
to
)
static
void
dc390_waiting_timer
(
struct
dc390_acb
*
pACB
,
unsigned
long
to
)
{
{
if
(
timer_pending
(
&
pACB
->
Waiting_Timer
))
return
;
if
(
timer_pending
(
&
pACB
->
Waiting_Timer
))
return
;
init_timer
(
&
pACB
->
Waiting_Timer
);
init_timer
(
&
pACB
->
Waiting_Timer
);
...
@@ -816,10 +767,10 @@ static void dc390_waiting_timer (PACB pACB, unsigned long to)
...
@@ -816,10 +767,10 @@ static void dc390_waiting_timer (PACB pACB, unsigned long to)
/* Send the next command from the waiting list to the bus */
/* Send the next command from the waiting list to the bus */
static
void
dc390_Waiting_process
(
PACB
pACB
)
static
void
dc390_Waiting_process
(
struct
dc390_acb
*
pACB
)
{
{
PDCB
ptr
,
ptr1
;
struct
dc390_dcb
*
ptr
,
*
ptr1
;
PSRB
pSRB
;
struct
dc390_srb
*
pSRB
;
if
(
(
pACB
->
pActiveDCB
)
||
(
pACB
->
ACBFlag
&
(
RESET_DETECT
+
RESET_DONE
+
RESET_DEV
)
)
)
if
(
(
pACB
->
pActiveDCB
)
||
(
pACB
->
ACBFlag
&
(
RESET_DETECT
+
RESET_DONE
+
RESET_DEV
)
)
)
return
;
return
;
...
@@ -854,7 +805,7 @@ static void dc390_Waiting_process ( PACB pACB )
...
@@ -854,7 +805,7 @@ static void dc390_Waiting_process ( PACB pACB )
/* Wake up waiting queue */
/* Wake up waiting queue */
static
void
DC390_waiting_timed_out
(
unsigned
long
ptr
)
static
void
DC390_waiting_timed_out
(
unsigned
long
ptr
)
{
{
PACB
pACB
=
(
PACB
)
ptr
;
struct
dc390_acb
*
pACB
=
(
struct
dc390_acb
*
)
ptr
;
unsigned
long
iflags
;
unsigned
long
iflags
;
DEBUG0
(
printk
(
"DC390: Debug: Waiting queue woken up by timer!
\n
"
));
DEBUG0
(
printk
(
"DC390: Debug: Waiting queue woken up by timer!
\n
"
));
spin_lock_irqsave
(
pACB
->
pScsiHost
->
host_lock
,
iflags
);
spin_lock_irqsave
(
pACB
->
pScsiHost
->
host_lock
,
iflags
);
...
@@ -863,15 +814,15 @@ static void DC390_waiting_timed_out (unsigned long ptr)
...
@@ -863,15 +814,15 @@ static void DC390_waiting_timed_out (unsigned long ptr)
}
}
/***********************************************************************
/***********************************************************************
* Function: static void dc390_SendSRB (
PACB pACB, PSRB
pSRB)
* Function: static void dc390_SendSRB (
struct dc390_acb* pACB, struct dc390_srb*
pSRB)
*
*
* Purpose: Send SCSI Request Block (pSRB) to adapter (pACB)
* Purpose: Send SCSI Request Block (pSRB) to adapter (pACB)
*
*
***********************************************************************/
***********************************************************************/
static
void
dc390_SendSRB
(
PACB
pACB
,
PSRB
pSRB
)
static
void
dc390_SendSRB
(
struct
dc390_acb
*
pACB
,
struct
dc390_srb
*
pSRB
)
{
{
PDCB
pDCB
;
struct
dc390_dcb
*
pDCB
;
pDCB
=
pSRB
->
pSRBDCB
;
pDCB
=
pSRB
->
pSRBDCB
;
if
(
(
pDCB
->
MaxCommand
<=
pDCB
->
GoingSRBCnt
)
||
(
pACB
->
pActiveDCB
)
||
if
(
(
pDCB
->
MaxCommand
<=
pDCB
->
GoingSRBCnt
)
||
(
pACB
->
pActiveDCB
)
||
...
@@ -913,10 +864,10 @@ static struct scatterlist* dc390_sg_build_single(struct scatterlist *sg, void *a
...
@@ -913,10 +864,10 @@ static struct scatterlist* dc390_sg_build_single(struct scatterlist *sg, void *a
}
}
/* Create pci mapping */
/* Create pci mapping */
static
int
dc390_pci_map
(
PSRB
pSRB
)
static
int
dc390_pci_map
(
struct
dc390_srb
*
pSRB
)
{
{
int
error
=
0
;
int
error
=
0
;
Scsi_C
mnd
*
pcmd
=
pSRB
->
pcmd
;
struct
scsi_c
mnd
*
pcmd
=
pSRB
->
pcmd
;
struct
pci_dev
*
pdev
=
pSRB
->
pSRBDCB
->
pDCBACB
->
pdev
;
struct
pci_dev
*
pdev
=
pSRB
->
pSRBDCB
->
pDCBACB
->
pdev
;
dc390_cmd_scp_t
*
cmdp
=
((
dc390_cmd_scp_t
*
)(
&
pcmd
->
SCp
));
dc390_cmd_scp_t
*
cmdp
=
((
dc390_cmd_scp_t
*
)(
&
pcmd
->
SCp
));
...
@@ -933,9 +884,9 @@ static int dc390_pci_map (PSRB pSRB)
...
@@ -933,9 +884,9 @@ static int dc390_pci_map (PSRB pSRB)
DEBUG1
(
printk
(
"%s(): Mapped sense buffer %p at %x
\n
"
,
__FUNCTION__
,
pcmd
->
sense_buffer
,
cmdp
->
saved_dma_handle
));
DEBUG1
(
printk
(
"%s(): Mapped sense buffer %p at %x
\n
"
,
__FUNCTION__
,
pcmd
->
sense_buffer
,
cmdp
->
saved_dma_handle
));
/* Map SG list */
/* Map SG list */
}
else
if
(
pcmd
->
use_sg
)
{
}
else
if
(
pcmd
->
use_sg
)
{
pSRB
->
pSegmentList
=
(
PSGL
)
pcmd
->
request_buffer
;
pSRB
->
pSegmentList
=
(
struct
scatterlist
*
)
pcmd
->
request_buffer
;
pSRB
->
SGcount
=
pci_map_sg
(
pdev
,
pSRB
->
pSegmentList
,
pcmd
->
use_sg
,
pSRB
->
SGcount
=
pci_map_sg
(
pdev
,
pSRB
->
pSegmentList
,
pcmd
->
use_sg
,
scsi_to_pci_dma_dir
(
pcmd
->
sc_data_direction
)
);
pcmd
->
sc_data_direction
);
/* TODO: error handling */
/* TODO: error handling */
if
(
!
pSRB
->
SGcount
)
if
(
!
pSRB
->
SGcount
)
error
=
1
;
error
=
1
;
...
@@ -945,7 +896,7 @@ static int dc390_pci_map (PSRB pSRB)
...
@@ -945,7 +896,7 @@ static int dc390_pci_map (PSRB pSRB)
}
else
if
(
pcmd
->
request_buffer
&&
pcmd
->
request_bufflen
)
{
}
else
if
(
pcmd
->
request_buffer
&&
pcmd
->
request_bufflen
)
{
pSRB
->
pSegmentList
=
dc390_sg_build_single
(
&
pSRB
->
Segmentx
,
pcmd
->
request_buffer
,
pcmd
->
request_bufflen
);
pSRB
->
pSegmentList
=
dc390_sg_build_single
(
&
pSRB
->
Segmentx
,
pcmd
->
request_buffer
,
pcmd
->
request_bufflen
);
pSRB
->
SGcount
=
pci_map_sg
(
pdev
,
pSRB
->
pSegmentList
,
1
,
pSRB
->
SGcount
=
pci_map_sg
(
pdev
,
pSRB
->
pSegmentList
,
1
,
scsi_to_pci_dma_dir
(
pcmd
->
sc_data_direction
)
);
pcmd
->
sc_data_direction
);
cmdp
->
saved_dma_handle
=
sg_dma_address
(
pSRB
->
pSegmentList
);
cmdp
->
saved_dma_handle
=
sg_dma_address
(
pSRB
->
pSegmentList
);
/* TODO: error handling */
/* TODO: error handling */
...
@@ -960,9 +911,9 @@ static int dc390_pci_map (PSRB pSRB)
...
@@ -960,9 +911,9 @@ static int dc390_pci_map (PSRB pSRB)
}
}
/* Remove pci mapping */
/* Remove pci mapping */
static
void
dc390_pci_unmap
(
PSRB
pSRB
)
static
void
dc390_pci_unmap
(
struct
dc390_srb
*
pSRB
)
{
{
Scsi_Cmnd
*
pcmd
=
pSRB
->
pcmd
;
struct
scsi_cmnd
*
pcmd
=
pSRB
->
pcmd
;
struct
pci_dev
*
pdev
=
pSRB
->
pSRBDCB
->
pDCBACB
->
pdev
;
struct
pci_dev
*
pdev
=
pSRB
->
pSRBDCB
->
pDCBACB
->
pdev
;
DEBUG1
(
dc390_cmd_scp_t
*
cmdp
=
((
dc390_cmd_scp_t
*
)(
&
pcmd
->
SCp
)));
DEBUG1
(
dc390_cmd_scp_t
*
cmdp
=
((
dc390_cmd_scp_t
*
)(
&
pcmd
->
SCp
)));
...
@@ -970,24 +921,24 @@ static void dc390_pci_unmap (PSRB pSRB)
...
@@ -970,24 +921,24 @@ static void dc390_pci_unmap (PSRB pSRB)
pci_unmap_sg
(
pdev
,
&
pSRB
->
Segmentx
,
1
,
DMA_FROM_DEVICE
);
pci_unmap_sg
(
pdev
,
&
pSRB
->
Segmentx
,
1
,
DMA_FROM_DEVICE
);
DEBUG1
(
printk
(
"%s(): Unmapped sense buffer at %x
\n
"
,
__FUNCTION__
,
cmdp
->
saved_dma_handle
));
DEBUG1
(
printk
(
"%s(): Unmapped sense buffer at %x
\n
"
,
__FUNCTION__
,
cmdp
->
saved_dma_handle
));
}
else
if
(
pcmd
->
use_sg
)
{
}
else
if
(
pcmd
->
use_sg
)
{
pci_unmap_sg
(
pdev
,
pcmd
->
request_buffer
,
pcmd
->
use_sg
,
scsi_to_pci_dma_dir
(
pcmd
->
sc_data_direction
)
);
pci_unmap_sg
(
pdev
,
pcmd
->
request_buffer
,
pcmd
->
use_sg
,
pcmd
->
sc_data_direction
);
DEBUG1
(
printk
(
"%s(): Unmapped SG at %p with %d elements
\n
"
,
__FUNCTION__
,
pcmd
->
request_buffer
,
pcmd
->
use_sg
));
DEBUG1
(
printk
(
"%s(): Unmapped SG at %p with %d elements
\n
"
,
__FUNCTION__
,
pcmd
->
request_buffer
,
pcmd
->
use_sg
));
}
else
if
(
pcmd
->
request_buffer
&&
pcmd
->
request_bufflen
)
{
}
else
if
(
pcmd
->
request_buffer
&&
pcmd
->
request_bufflen
)
{
pci_unmap_sg
(
pdev
,
&
pSRB
->
Segmentx
,
1
,
scsi_to_pci_dma_dir
(
pcmd
->
sc_data_direction
)
);
pci_unmap_sg
(
pdev
,
&
pSRB
->
Segmentx
,
1
,
pcmd
->
sc_data_direction
);
DEBUG1
(
printk
(
"%s(): Unmapped request buffer at %x
\n
"
,
__FUNCTION__
,
cmdp
->
saved_dma_handle
));
DEBUG1
(
printk
(
"%s(): Unmapped request buffer at %x
\n
"
,
__FUNCTION__
,
cmdp
->
saved_dma_handle
));
}
}
}
}
/***********************************************************************
/***********************************************************************
* Function: static void dc390_BuildSRB (Scsi_Cmd *pcmd,
PDCB
pDCB,
* Function: static void dc390_BuildSRB (Scsi_Cmd *pcmd,
struct dc390_dcb*
pDCB,
*
PSRB
pSRB)
*
struct dc390_srb*
pSRB)
*
*
* Purpose: Prepare SRB for being sent to Device DCB w/ command *pcmd
* Purpose: Prepare SRB for being sent to Device DCB w/ command *pcmd
*
*
***********************************************************************/
***********************************************************************/
static
void
dc390_BuildSRB
(
Scsi_Cmnd
*
pcmd
,
PDCB
pDCB
,
PSRB
pSRB
)
static
void
dc390_BuildSRB
(
struct
scsi_cmnd
*
pcmd
,
struct
dc390_dcb
*
pDCB
,
struct
dc390_srb
*
pSRB
)
{
{
pSRB
->
pSRBDCB
=
pDCB
;
pSRB
->
pSRBDCB
=
pDCB
;
pSRB
->
pcmd
=
pcmd
;
pSRB
->
pcmd
=
pcmd
;
...
@@ -1015,8 +966,8 @@ static void dc390_BuildSRB (Scsi_Cmnd* pcmd, PDCB pDCB, PSRB pSRB)
...
@@ -1015,8 +966,8 @@ static void dc390_BuildSRB (Scsi_Cmnd* pcmd, PDCB pDCB, PSRB pSRB)
}
}
/***********************************************************************
/***********************************************************************
* Function : static int DC390_queue_command (
Scsi_C
mnd *cmd,
* Function : static int DC390_queue_command (
struct scsi_c
mnd *cmd,
* void (*done)(
Scsi_C
mnd *))
* void (*done)(
struct scsi_c
mnd *))
*
*
* Purpose : enqueues a SCSI command
* Purpose : enqueues a SCSI command
*
*
...
@@ -1033,11 +984,12 @@ static void dc390_BuildSRB (Scsi_Cmnd* pcmd, PDCB pDCB, PSRB pSRB)
...
@@ -1033,11 +984,12 @@ static void dc390_BuildSRB (Scsi_Cmnd* pcmd, PDCB pDCB, PSRB pSRB)
*
*
***********************************************************************/
***********************************************************************/
static
int
DC390_queue_command
(
Scsi_Cmnd
*
cmd
,
void
(
*
done
)(
Scsi_Cmnd
*
))
static
int
DC390_queue_command
(
struct
scsi_cmnd
*
cmd
,
void
(
*
done
)(
struct
scsi_cmnd
*
))
{
{
PDCB
pDCB
=
(
PDCB
)
cmd
->
device
->
hostdata
;
struct
dc390_dcb
*
pDCB
=
(
struct
dc390_dcb
*
)
cmd
->
device
->
hostdata
;
PSRB
pSRB
;
struct
dc390_srb
*
pSRB
;
PACB
pACB
=
(
PACB
)
cmd
->
device
->
host
->
hostdata
;
struct
dc390_acb
*
pACB
=
(
struct
dc390_acb
*
)
cmd
->
device
->
host
->
hostdata
;
DEBUG0
(
/* if(pACB->scan_devices) */
\
DEBUG0
(
/* if(pACB->scan_devices) */
\
printk
(
KERN_INFO
"DC390: Queue Cmd=%02x,Tgt=%d,LUN=%d (pid=%li), buffer=%p
\n
"
,
\
printk
(
KERN_INFO
"DC390: Queue Cmd=%02x,Tgt=%d,LUN=%d (pid=%li), buffer=%p
\n
"
,
\
...
@@ -1181,7 +1133,7 @@ static int DC390_bios_param (struct scsi_device *sdev, struct block_device *bdev
...
@@ -1181,7 +1133,7 @@ static int DC390_bios_param (struct scsi_device *sdev, struct block_device *bdev
sector_t
capacity
,
int
geom
[])
sector_t
capacity
,
int
geom
[])
{
{
int
heads
,
sectors
,
cylinders
;
int
heads
,
sectors
,
cylinders
;
PACB
pACB
=
(
PACB
)
sdev
->
host
->
hostdata
;
struct
dc390_acb
*
pACB
=
(
struct
dc390_acb
*
)
sdev
->
host
->
hostdata
;
int
ret_code
=
-
1
;
int
ret_code
=
-
1
;
int
size
=
capacity
;
int
size
=
capacity
;
unsigned
char
*
buf
;
unsigned
char
*
buf
;
...
@@ -1221,9 +1173,11 @@ static int DC390_bios_param (struct scsi_device *sdev, struct block_device *bdev
...
@@ -1221,9 +1173,11 @@ static int DC390_bios_param (struct scsi_device *sdev, struct block_device *bdev
}
}
#endif
#endif
static
void
dc390_dumpinfo
(
PACB
pACB
,
PDCB
pDCB
,
PSRB
pSRB
)
static
void
dc390_dumpinfo
(
struct
dc390_acb
*
pACB
,
struct
dc390_dcb
*
pDCB
,
struct
dc390_srb
*
pSRB
)
{
{
USHORT
pstat
;
PDEVDECL1
;
struct
pci_dev
*
pdev
;
u16
pstat
;
if
(
!
pDCB
)
pDCB
=
pACB
->
pActiveDCB
;
if
(
!
pDCB
)
pDCB
=
pACB
->
pActiveDCB
;
if
(
!
pSRB
&&
pDCB
)
pSRB
=
pDCB
->
pActiveSRB
;
if
(
!
pSRB
&&
pDCB
)
pSRB
=
pDCB
->
pActiveSRB
;
...
@@ -1257,14 +1211,16 @@ static void dc390_dumpinfo (PACB pACB, PDCB pDCB, PSRB pSRB)
...
@@ -1257,14 +1211,16 @@ static void dc390_dumpinfo (PACB pACB, PDCB pDCB, PSRB pSRB)
DC390_read32
(
DMA_Wk_ByteCntr
),
DC390_read32
(
DMA_Wk_AddrCntr
),
DC390_read32
(
DMA_Wk_ByteCntr
),
DC390_read32
(
DMA_Wk_AddrCntr
),
DC390_read8
(
DMA_Status
),
DC390_read32
(
DMA_ScsiBusCtrl
));
DC390_read8
(
DMA_Status
),
DC390_read32
(
DMA_ScsiBusCtrl
));
DC390_write32
(
DMA_ScsiBusCtrl
,
EN_INT_ON_PCI_ABORT
);
DC390_write32
(
DMA_ScsiBusCtrl
,
EN_INT_ON_PCI_ABORT
);
PDEVSET1
;
PCI_READ_CONFIG_WORD
(
PDEV
,
PCI_STATUS
,
&
pstat
);
pdev
=
pACB
->
pdev
;
pci_read_config_word
(
pdev
,
PCI_STATUS
,
&
pstat
);
printk
(
"DC390: Register dump: PCI Status: %04x
\n
"
,
pstat
);
printk
(
"DC390: Register dump: PCI Status: %04x
\n
"
,
pstat
);
printk
(
"DC390: In case of driver trouble read linux/Documentation/scsi/tmscsim.txt
\n
"
);
printk
(
"DC390: In case of driver trouble read linux/Documentation/scsi/tmscsim.txt
\n
"
);
}
}
/***********************************************************************
/***********************************************************************
* Function : int DC390_abort (
Scsi_C
mnd *cmd)
* Function : int DC390_abort (
struct scsi_c
mnd *cmd)
*
*
* Purpose : Abort an errant SCSI command
* Purpose : Abort an errant SCSI command
*
*
...
@@ -1275,14 +1231,14 @@ static void dc390_dumpinfo (PACB pACB, PDCB pDCB, PSRB pSRB)
...
@@ -1275,14 +1231,14 @@ static void dc390_dumpinfo (PACB pACB, PDCB pDCB, PSRB pSRB)
* Status: Buggy !
* Status: Buggy !
***********************************************************************/
***********************************************************************/
static
int
DC390_abort
(
Scsi_C
mnd
*
cmd
)
static
int
DC390_abort
(
struct
scsi_c
mnd
*
cmd
)
{
{
PDCB
pDCB
=
(
PDCB
)
cmd
->
device
->
hostdata
;
struct
dc390_dcb
*
pDCB
=
(
struct
dc390_dcb
*
)
cmd
->
device
->
hostdata
;
PSRB
pSRB
,
psrb
;
struct
dc390_srb
*
pSRB
,
*
psrb
;
UINT
count
,
i
;
u32
count
,
i
;
int
status
;
int
status
;
//
ULONG
sbac;
//
unsigned long
sbac;
PACB
pACB
=
(
PACB
)
cmd
->
device
->
host
->
hostdata
;
struct
dc390_acb
*
pACB
=
(
struct
dc390_acb
*
)
cmd
->
device
->
host
->
hostdata
;
printk
(
"DC390: Abort command (pid %li, Device %02i-%02i)
\n
"
,
printk
(
"DC390: Abort command (pid %li, Device %02i-%02i)
\n
"
,
cmd
->
pid
,
cmd
->
device
->
id
,
cmd
->
device
->
lun
);
cmd
->
pid
,
cmd
->
device
->
id
,
cmd
->
device
->
lun
);
...
@@ -1406,9 +1362,9 @@ static int DC390_abort (Scsi_Cmnd *cmd)
...
@@ -1406,9 +1362,9 @@ static int DC390_abort (Scsi_Cmnd *cmd)
}
}
static
void
dc390_ResetDevParam
(
PACB
pACB
)
static
void
dc390_ResetDevParam
(
struct
dc390_acb
*
pACB
)
{
{
PDCB
pDCB
,
pdcb
;
struct
dc390_dcb
*
pDCB
,
*
pdcb
;
pDCB
=
pACB
->
pLinkDCB
;
pDCB
=
pACB
->
pLinkDCB
;
if
(
!
pDCB
)
return
;
if
(
!
pDCB
)
return
;
...
@@ -1431,11 +1387,11 @@ static void dc390_ResetDevParam( PACB pACB )
...
@@ -1431,11 +1387,11 @@ static void dc390_ResetDevParam( PACB pACB )
#if 0
#if 0
/* Moves all SRBs from Going to Waiting for all DCBs */
/* Moves all SRBs from Going to Waiting for all DCBs */
static void dc390_RecoverSRB(
PACB
pACB )
static void dc390_RecoverSRB(
struct dc390_acb*
pACB )
{
{
PDCB pDCB,
pdcb;
struct dc390_dcb *pDCB, *
pdcb;
PSRB psrb,
psrb2;
struct dc390_srb *psrb, *
psrb2;
UINT
cnt, i;
u32
cnt, i;
pDCB = pACB->pLinkDCB;
pDCB = pACB->pLinkDCB;
if( !pDCB ) return;
if( !pDCB ) return;
...
@@ -1470,7 +1426,7 @@ static void dc390_RecoverSRB( PACB pACB )
...
@@ -1470,7 +1426,7 @@ static void dc390_RecoverSRB( PACB pACB )
#endif
#endif
/***********************************************************************
/***********************************************************************
* Function : int DC390_reset (
Scsi_C
mnd *cmd, ...)
* Function : int DC390_reset (
struct scsi_c
mnd *cmd, ...)
*
*
* Purpose : perform a hard reset on the SCSI bus
* Purpose : perform a hard reset on the SCSI bus
*
*
...
@@ -1480,10 +1436,10 @@ static void dc390_RecoverSRB( PACB pACB )
...
@@ -1480,10 +1436,10 @@ static void dc390_RecoverSRB( PACB pACB )
* Returns : 0 on success.
* Returns : 0 on success.
***********************************************************************/
***********************************************************************/
static
int
DC390_reset
(
Scsi_C
mnd
*
cmd
)
static
int
DC390_reset
(
struct
scsi_c
mnd
*
cmd
)
{
{
UCHAR
bval
;
u8
bval
;
PACB
pACB
=
(
PACB
)
cmd
->
device
->
host
->
hostdata
;
struct
dc390_acb
*
pACB
=
(
struct
dc390_acb
*
)
cmd
->
device
->
host
->
hostdata
;
printk
(
KERN_INFO
"DC390: RESET ... "
);
printk
(
KERN_INFO
"DC390: RESET ... "
);
...
@@ -1526,7 +1482,7 @@ static int DC390_reset (Scsi_Cmnd *cmd)
...
@@ -1526,7 +1482,7 @@ static int DC390_reset (Scsi_Cmnd *cmd)
* Purpose : Set the configuration dependent DCB parameters
* Purpose : Set the configuration dependent DCB parameters
***********************************************************************/
***********************************************************************/
static
void
dc390_updateDCB
(
PACB
pACB
,
PDCB
pDCB
)
static
void
dc390_updateDCB
(
struct
dc390_acb
*
pACB
,
struct
dc390_dcb
*
pDCB
)
{
{
pDCB
->
SyncMode
&=
EN_TAG_QUEUEING
|
SYNC_NEGO_DONE
/*| EN_ATN_STOP*/
;
pDCB
->
SyncMode
&=
EN_TAG_QUEUEING
|
SYNC_NEGO_DONE
/*| EN_ATN_STOP*/
;
if
(
pDCB
->
DevMode
&
TAG_QUEUEING_
)
{
if
(
pDCB
->
DevMode
&
TAG_QUEUEING_
)
{
...
@@ -1558,15 +1514,15 @@ static void dc390_updateDCB (PACB pACB, PDCB pDCB)
...
@@ -1558,15 +1514,15 @@ static void dc390_updateDCB (PACB pACB, PDCB pDCB)
* Inputs : psrb - pointer to this scsi request block structure
* Inputs : psrb - pointer to this scsi request block structure
***********************************************************************/
***********************************************************************/
static
void
__inline__
dc390_initSRB
(
PSRB
psrb
)
static
void
__inline__
dc390_initSRB
(
struct
dc390_srb
*
psrb
)
{
{
/* psrb->PhysSRB = virt_to_phys( psrb ); */
/* psrb->PhysSRB = virt_to_phys( psrb ); */
}
}
static
void
dc390_linkSRB
(
PACB
pACB
)
static
void
dc390_linkSRB
(
struct
dc390_acb
*
pACB
)
{
{
UINT
count
,
i
;
u32
count
,
i
;
count
=
pACB
->
SRBCount
;
count
=
pACB
->
SRBCount
;
for
(
i
=
0
;
i
<
count
;
i
++
)
for
(
i
=
0
;
i
<
count
;
i
++
)
...
@@ -1589,10 +1545,10 @@ static void dc390_linkSRB( PACB pACB )
...
@@ -1589,10 +1545,10 @@ static void dc390_linkSRB( PACB pACB )
* io_port, Irq, index: Resources and adapter index
* io_port, Irq, index: Resources and adapter index
***********************************************************************/
***********************************************************************/
static
void
__devinit
dc390_initACB
(
PSH
psh
,
ULONG
io_port
,
UCHAR
Irq
,
UCHAR
index
)
static
void
__devinit
dc390_initACB
(
struct
Scsi_Host
*
psh
,
unsigned
long
io_port
,
u8
Irq
,
u8
index
)
{
{
PACB
pACB
;
struct
dc390_acb
*
pACB
;
UCHAR
i
;
u8
i
;
psh
->
can_queue
=
MAX_CMD_QUEUE
;
psh
->
can_queue
=
MAX_CMD_QUEUE
;
psh
->
cmd_per_lun
=
MAX_CMD_PER_LUN
;
psh
->
cmd_per_lun
=
MAX_CMD_PER_LUN
;
...
@@ -1605,10 +1561,10 @@ static void __devinit dc390_initACB (PSH psh, ULONG io_port, UCHAR Irq, UCHAR in
...
@@ -1605,10 +1561,10 @@ static void __devinit dc390_initACB (PSH psh, ULONG io_port, UCHAR Irq, UCHAR in
psh
->
dma_channel
=
-
1
;
psh
->
dma_channel
=
-
1
;
psh
->
last_reset
=
jiffies
;
psh
->
last_reset
=
jiffies
;
pACB
=
(
PACB
)
psh
->
hostdata
;
pACB
=
(
struct
dc390_acb
*
)
psh
->
hostdata
;
pACB
->
pScsiHost
=
psh
;
pACB
->
pScsiHost
=
psh
;
pACB
->
IOPortBase
=
(
USHORT
)
io_port
;
pACB
->
IOPortBase
=
(
u16
)
io_port
;
pACB
->
IRQLevel
=
Irq
;
pACB
->
IRQLevel
=
Irq
;
DEBUG0
(
printk
(
KERN_INFO
"DC390: Adapter index %i, ID %i, IO 0x%08x, IRQ 0x%02x
\n
"
,
\
DEBUG0
(
printk
(
KERN_INFO
"DC390: Adapter index %i, ID %i, IO 0x%08x, IRQ 0x%02x
\n
"
,
\
...
@@ -1660,13 +1616,13 @@ static void __devinit dc390_initACB (PSH psh, ULONG io_port, UCHAR Irq, UCHAR in
...
@@ -1660,13 +1616,13 @@ static void __devinit dc390_initACB (PSH psh, ULONG io_port, UCHAR Irq, UCHAR in
* Outputs: 0 on success, -1 on error
* Outputs: 0 on success, -1 on error
***********************************************************************/
***********************************************************************/
static
int
__devinit
dc390_initAdapter
(
PSH
psh
,
ULONG
io_port
,
UCHAR
Irq
,
UCHAR
index
)
static
int
__devinit
dc390_initAdapter
(
struct
Scsi_Host
*
psh
,
unsigned
long
io_port
,
u8
Irq
,
u8
index
)
{
{
PACB
pACB
,
pACB2
;
struct
dc390_acb
*
pACB
,
*
pACB2
;
UCHAR
dstate
;
u8
dstate
;
int
i
;
int
i
;
pACB
=
(
PACB
)
psh
->
hostdata
;
pACB
=
(
struct
dc390_acb
*
)
psh
->
hostdata
;
if
(
request_region
(
io_port
,
psh
->
n_io_port
,
"tmscsim"
)
==
NULL
)
{
if
(
request_region
(
io_port
,
psh
->
n_io_port
,
"tmscsim"
)
==
NULL
)
{
printk
(
KERN_ERR
"DC390: register IO ports error!
\n
"
);
printk
(
KERN_ERR
"DC390: register IO ports error!
\n
"
);
...
@@ -1731,13 +1687,14 @@ static int __devinit dc390_initAdapter (PSH psh, ULONG io_port, UCHAR Irq, UCHAR
...
@@ -1731,13 +1687,14 @@ static int __devinit dc390_initAdapter (PSH psh, ULONG io_port, UCHAR Irq, UCHAR
}
}
static
void
__devinit
dc390_set_pci_cfg
(
PDEVDECL
)
static
void
__devinit
dc390_set_pci_cfg
(
struct
pci_dev
*
pdev
)
{
{
USHORT
cmd
;
u16
cmd
;
PCI_READ_CONFIG_WORD
(
PDEV
,
PCI_COMMAND
,
&
cmd
);
pci_read_config_word
(
pdev
,
PCI_COMMAND
,
&
cmd
);
cmd
|=
PCI_COMMAND_SERR
|
PCI_COMMAND_PARITY
|
PCI_COMMAND_IO
;
cmd
|=
PCI_COMMAND_SERR
|
PCI_COMMAND_PARITY
|
PCI_COMMAND_IO
;
PCI_WRITE_CONFIG_WORD
(
PDEV
,
PCI_COMMAND
,
cmd
);
pci_write_config_word
(
pdev
,
PCI_COMMAND
,
cmd
);
PCI_WRITE_CONFIG_WORD
(
PDEV
,
PCI_STATUS
,
(
PCI_STATUS_SIG_SYSTEM_ERROR
|
PCI_STATUS_DETECTED_PARITY
));
pci_write_config_word
(
pdev
,
PCI_STATUS
,
(
PCI_STATUS_SIG_SYSTEM_ERROR
|
PCI_STATUS_DETECTED_PARITY
));
}
}
/**
/**
...
@@ -1748,15 +1705,15 @@ static void __devinit dc390_set_pci_cfg (PDEVDECL)
...
@@ -1748,15 +1705,15 @@ static void __devinit dc390_set_pci_cfg (PDEVDECL)
*/
*/
static
int
dc390_slave_alloc
(
struct
scsi_device
*
scsi_device
)
static
int
dc390_slave_alloc
(
struct
scsi_device
*
scsi_device
)
{
{
PACB
pACB
=
(
PACB
)
scsi_device
->
host
->
hostdata
;
struct
dc390_acb
*
pACB
=
(
struct
dc390_acb
*
)
scsi_device
->
host
->
hostdata
;
PDCB
pDCB
,
pDCB2
=
0
;
struct
dc390_dcb
*
pDCB
,
*
pDCB2
=
0
;
uint
id
=
scsi_device
->
id
;
uint
id
=
scsi_device
->
id
;
uint
lun
=
scsi_device
->
lun
;
uint
lun
=
scsi_device
->
lun
;
pDCB
=
kmalloc
(
sizeof
(
DC390_DCB
),
GFP_KERNEL
);
pDCB
=
kmalloc
(
sizeof
(
struct
dc390_dcb
),
GFP_KERNEL
);
if
(
!
pDCB
)
if
(
!
pDCB
)
return
-
ENOMEM
;
return
-
ENOMEM
;
memset
(
pDCB
,
0
,
sizeof
(
DC390_DCB
));
memset
(
pDCB
,
0
,
sizeof
(
struct
dc390_dcb
));
if
(
!
pACB
->
DCBCnt
++
)
{
if
(
!
pACB
->
DCBCnt
++
)
{
pACB
->
pLinkDCB
=
pDCB
;
pACB
->
pLinkDCB
=
pDCB
;
...
@@ -1816,9 +1773,9 @@ static int dc390_slave_alloc(struct scsi_device *scsi_device)
...
@@ -1816,9 +1773,9 @@ static int dc390_slave_alloc(struct scsi_device *scsi_device)
*/
*/
static
void
dc390_slave_destroy
(
struct
scsi_device
*
scsi_device
)
static
void
dc390_slave_destroy
(
struct
scsi_device
*
scsi_device
)
{
{
PACB
pACB
=
(
PACB
)
scsi_device
->
host
->
hostdata
;
struct
dc390_acb
*
pACB
=
(
struct
dc390_acb
*
)
scsi_device
->
host
->
hostdata
;
PDCB
pDCB
=
(
PDCB
)
scsi_device
->
hostdata
;
struct
dc390_dcb
*
pDCB
=
(
struct
dc390_dcb
*
)
scsi_device
->
hostdata
;
PDCB
pPrevDCB
=
pACB
->
pLinkDCB
;
struct
dc390_dcb
*
pPrevDCB
=
pACB
->
pLinkDCB
;
pACB
->
scan_devices
=
0
;
pACB
->
scan_devices
=
0
;
...
@@ -1853,12 +1810,12 @@ static void dc390_slave_destroy(struct scsi_device *scsi_device)
...
@@ -1853,12 +1810,12 @@ static void dc390_slave_destroy(struct scsi_device *scsi_device)
static
int
dc390_slave_configure
(
struct
scsi_device
*
scsi_device
)
static
int
dc390_slave_configure
(
struct
scsi_device
*
scsi_device
)
{
{
PACB
pACB
=
(
PACB
)
scsi_device
->
host
->
hostdata
;
struct
dc390_acb
*
pACB
=
(
struct
dc390_acb
*
)
scsi_device
->
host
->
hostdata
;
pACB
->
scan_devices
=
0
;
pACB
->
scan_devices
=
0
;
return
0
;
return
0
;
}
}
static
Scsi_Host_T
emplate
driver_template
=
{
static
struct
scsi_host_t
emplate
driver_template
=
{
.
module
=
THIS_MODULE
,
.
module
=
THIS_MODULE
,
.
proc_name
=
"tmscsim"
,
.
proc_name
=
"tmscsim"
,
.
proc_info
=
DC390_proc_info
,
.
proc_info
=
DC390_proc_info
,
...
@@ -1883,7 +1840,7 @@ static int __devinit dc390_init_one(struct pci_dev *dev,
...
@@ -1883,7 +1840,7 @@ static int __devinit dc390_init_one(struct pci_dev *dev,
struct
Scsi_Host
*
scsi_host
;
struct
Scsi_Host
*
scsi_host
;
unsigned
long
io_port
;
unsigned
long
io_port
;
u8
irq
;
u8
irq
;
PACB
pACB
;
struct
dc390_acb
*
pACB
;
int
ret
=
-
ENOMEM
;
int
ret
=
-
ENOMEM
;
if
(
pci_enable_device
(
dev
))
if
(
pci_enable_device
(
dev
))
...
@@ -1893,11 +1850,11 @@ static int __devinit dc390_init_one(struct pci_dev *dev,
...
@@ -1893,11 +1850,11 @@ static int __devinit dc390_init_one(struct pci_dev *dev,
irq
=
dev
->
irq
;
irq
=
dev
->
irq
;
/* allocate scsi host information (includes out adapter) */
/* allocate scsi host information (includes out adapter) */
scsi_host
=
scsi_host_alloc
(
&
driver_template
,
sizeof
(
struct
_ACB
));
scsi_host
=
scsi_host_alloc
(
&
driver_template
,
sizeof
(
struct
dc390_acb
));
if
(
!
scsi_host
)
if
(
!
scsi_host
)
goto
nomem
;
goto
nomem
;
pACB
=
(
PACB
)
scsi_host
->
hostdata
;
pACB
=
(
struct
dc390_acb
*
)
scsi_host
->
hostdata
;
if
(
dc390_CheckEEpromCheckSum
(
dev
,
dc390_adapterCnt
))
{
if
(
dc390_CheckEEpromCheckSum
(
dev
,
dc390_adapterCnt
))
{
int
speed
;
int
speed
;
...
@@ -1910,13 +1867,13 @@ static int __devinit dc390_init_one(struct pci_dev *dev,
...
@@ -1910,13 +1867,13 @@ static int __devinit dc390_init_one(struct pci_dev *dev,
printk
(
KERN_INFO
"DC390: Used defaults: AdaptID=%i, SpeedIdx=%i (%i.%i MHz),"
printk
(
KERN_INFO
"DC390: Used defaults: AdaptID=%i, SpeedIdx=%i (%i.%i MHz),"
" DevMode=0x%02x, AdaptMode=0x%02x, TaggedCmnds=%i (%i), DelayReset=%is
\n
"
,
" DevMode=0x%02x, AdaptMode=0x%02x, TaggedCmnds=%i (%i), DelayReset=%is
\n
"
,
tmscsim
[
0
],
tmscsim
[
1
],
speed
/
10
,
speed
%
10
,
tmscsim
[
0
],
tmscsim
[
1
],
speed
/
10
,
speed
%
10
,
(
UCHAR
)
tmscsim
[
2
],
(
UCHAR
)
tmscsim
[
3
],
tmscsim
[
4
],
2
<<
(
tmscsim
[
4
]),
tmscsim
[
5
]);
(
u8
)
tmscsim
[
2
],
(
u8
)
tmscsim
[
3
],
tmscsim
[
4
],
2
<<
(
tmscsim
[
4
]),
tmscsim
[
5
]);
}
else
{
}
else
{
dc390_check_for_safe_settings
();
dc390_check_for_safe_settings
();
dc390_EEprom_Override
(
dc390_adapterCnt
);
dc390_EEprom_Override
(
dc390_adapterCnt
);
}
}
DEBUG0
(
printk
(
KERN_INFO
"DC390: pSH = %8x, Index %02i
\n
"
,
(
UINT
)
scsi_host
,
dc390_adapterCnt
));
DEBUG0
(
printk
(
KERN_INFO
"DC390: pSH = %8x, Index %02i
\n
"
,
(
u32
)
scsi_host
,
dc390_adapterCnt
));
dc390_initACB
(
scsi_host
,
io_port
,
irq
,
dc390_adapterCnt
);
dc390_initACB
(
scsi_host
,
io_port
,
irq
,
dc390_adapterCnt
);
...
@@ -1959,7 +1916,7 @@ static void __devexit dc390_remove_one(struct pci_dev *dev)
...
@@ -1959,7 +1916,7 @@ static void __devexit dc390_remove_one(struct pci_dev *dev)
{
{
struct
Scsi_Host
*
scsi_host
=
pci_get_drvdata
(
dev
);
struct
Scsi_Host
*
scsi_host
=
pci_get_drvdata
(
dev
);
unsigned
long
iflags
;
unsigned
long
iflags
;
PACB
pACB
=
(
PACB
)
scsi_host
->
hostdata
;
struct
dc390_acb
*
pACB
=
(
struct
dc390_acb
*
)
scsi_host
->
hostdata
;
u8
bval
;
u8
bval
;
scsi_remove_host
(
scsi_host
);
scsi_remove_host
(
scsi_host
);
...
@@ -2014,19 +1971,19 @@ static int DC390_proc_info (struct Scsi_Host *shpnt, char *buffer, char **start,
...
@@ -2014,19 +1971,19 @@ static int DC390_proc_info (struct Scsi_Host *shpnt, char *buffer, char **start,
{
{
int
dev
,
spd
,
spd1
;
int
dev
,
spd
,
spd1
;
char
*
pos
=
buffer
;
char
*
pos
=
buffer
;
PACB
pACB
;
struct
dc390_acb
*
pACB
;
PDCB
pDCB
;
struct
dc390_dcb
*
pDCB
;
pACB
=
dc390_pACB_start
;
pACB
=
dc390_pACB_start
;
while
(
pACB
!=
(
PACB
)
-
1
)
while
(
pACB
!=
(
struct
dc390_acb
*
)
-
1
)
{
{
if
(
shpnt
==
pACB
->
pScsiHost
)
if
(
shpnt
==
pACB
->
pScsiHost
)
break
;
break
;
pACB
=
pACB
->
pNextACB
;
pACB
=
pACB
->
pNextACB
;
}
}
if
(
pACB
==
(
PACB
)
-
1
)
return
(
-
ESRCH
);
if
(
pACB
==
(
struct
dc390_acb
*
)
-
1
)
return
(
-
ESRCH
);
if
(
inout
)
/* Has data been written to the file ? */
if
(
inout
)
/* Has data been written to the file ? */
return
-
ENOSYS
;
return
-
ENOSYS
;
...
@@ -2087,7 +2044,7 @@ static int DC390_proc_info (struct Scsi_Host *shpnt, char *buffer, char **start,
...
@@ -2087,7 +2044,7 @@ static int DC390_proc_info (struct Scsi_Host *shpnt, char *buffer, char **start,
for
(
dev
=
0
;
dev
<
pACB
->
DCBCnt
;
dev
++
)
for
(
dev
=
0
;
dev
<
pACB
->
DCBCnt
;
dev
++
)
{
{
PSRB
pSRB
;
struct
dc390_srb
*
pSRB
;
if
(
pDCB
->
WaitSRBCnt
)
if
(
pDCB
->
WaitSRBCnt
)
SPRINTF
(
"DCB (%02i-%i): Waiting: %i:"
,
pDCB
->
TargetID
,
pDCB
->
TargetLUN
,
SPRINTF
(
"DCB (%02i-%i): Waiting: %i:"
,
pDCB
->
TargetID
,
pDCB
->
TargetLUN
,
pDCB
->
WaitSRBCnt
);
pDCB
->
WaitSRBCnt
);
...
...
drivers/scsi/tmscsim.h
View file @
f4e7ddb6
...
@@ -29,215 +29,167 @@ typedef u16 USHORT; /* 16 bits */
...
@@ -29,215 +29,167 @@ typedef u16 USHORT; /* 16 bits */
typedef
u32
UINT
;
/* 32 bits */
typedef
u32
UINT
;
/* 32 bits */
typedef
unsigned
long
ULONG
;
/* 32/64 bits */
typedef
unsigned
long
ULONG
;
/* 32/64 bits */
typedef
UCHAR
*
PUCHAR
;
typedef
USHORT
*
PUSHORT
;
typedef
UINT
*
PUINT
;
typedef
ULONG
*
PULONG
;
typedef
Scsi_Host_Template
*
PSHT
;
typedef
struct
Scsi_Host
*
PSH
;
typedef
Scsi_Device
*
PSCSIDEV
;
typedef
Scsi_Cmnd
*
PSCSICMD
;
typedef
void
*
PVOID
;
typedef
struct
scatterlist
*
PSGL
,
SGL
;
/*;-----------------------------------------------------------------------*/
typedef
struct
_SyncMsg
{
UCHAR
ExtendMsg
;
UCHAR
ExtMsgLen
;
UCHAR
SyncXferReq
;
UCHAR
Period
;
UCHAR
ReqOffset
;
}
SyncMsg
;
/*;-----------------------------------------------------------------------*/
typedef
struct
_Capacity
{
ULONG
BlockCount
;
ULONG
BlockLength
;
}
Capacity
;
/*;-----------------------------------------------------------------------*/
typedef
struct
_SGentry
{
ULONG
SGXferDataPtr
;
ULONG
SGXferDataLen
;
}
SGentry
;
typedef
struct
_SGentry1
{
ULONG
SGXLen
;
ULONG
SGXPtr
;
}
SGentry1
,
*
PSGE
;
/*
/*
;-----------------------------------------------------------------------
;-----------------------------------------------------------------------
; SCSI Request Block
; SCSI Request Block
;-----------------------------------------------------------------------
;-----------------------------------------------------------------------
*/
*/
struct
_SRB
struct
dc390_srb
{
{
//
UCHAR
CmdBlock[12];
//
u8
CmdBlock[12];
struct
_SRB
*
pNextSRB
;
struct
dc390_srb
*
pNextSRB
;
struct
_DCB
*
pSRBDCB
;
struct
dc390_dcb
*
pSRBDCB
;
PSCSICMD
pcmd
;
struct
scsi_cmnd
*
pcmd
;
PSGL
pSegmentList
;
struct
scatterlist
*
pSegmentList
;
/* 0x10: */
/* 0x10: */
SGL
Segmentx
;
/* make a one entry of S/G list table */
struct
scatterlist
Segmentx
;
/* make a one entry of S/G list table */
/* 0x1c: */
/* 0x1c: */
ULONG
SGBusAddr
;
/*;a segment starting address as seen by AM53C974A*/
unsigned
long
SGBusAddr
;
/*;a segment starting address as seen by AM53C974A*/
ULONG
SGToBeXferLen
;
/*; to be xfer length */
unsigned
long
SGToBeXferLen
;
/*; to be xfer length */
ULONG
TotalXferredLen
;
unsigned
long
TotalXferredLen
;
ULONG
SavedTotXLen
;
unsigned
long
SavedTotXLen
;
UINT
SRBState
;
u32
SRBState
;
/* 0x30: */
/* 0x30: */
UCHAR
SRBStatus
;
u8
SRBStatus
;
UCHAR
SRBFlag
;
/*; b0-AutoReqSense,b6-Read,b7-write */
u8
SRBFlag
;
/*; b0-AutoReqSense,b6-Read,b7-write */
/*; b4-settimeout,b5-Residual valid */
/*; b4-settimeout,b5-Residual valid */
UCHAR
AdaptStatus
;
u8
AdaptStatus
;
UCHAR
TargetStatus
;
u8
TargetStatus
;
UCHAR
ScsiPhase
;
u8
ScsiPhase
;
UCHAR
TagNumber
;
u8
TagNumber
;
UCHAR
SGIndex
;
u8
SGIndex
;
UCHAR
SGcount
;
u8
SGcount
;
/* 0x38: */
/* 0x38: */
UCHAR
MsgCnt
;
u8
MsgCnt
;
UCHAR
EndMessage
;
u8
EndMessage
;
UCHAR
RetryCnt
;
u8
RetryCnt
;
UCHAR
SavedSGCount
;
u8
SavedSGCount
;
ULONG
Saved_Ptr
;
unsigned
long
Saved_Ptr
;
/* 0x40: */
/* 0x40: */
UCHAR
MsgInBuf
[
6
];
u8
MsgInBuf
[
6
];
UCHAR
MsgOutBuf
[
6
];
u8
MsgOutBuf
[
6
];
//
UCHAR
IORBFlag; /*;81h-Reset, 2-retry */
//
u8
IORBFlag; /*;81h-Reset, 2-retry */
/* 0x4c: */
/* 0x4c: */
};
};
typedef
struct
_SRB
DC390_SRB
,
*
PSRB
;
/*
/*
;-----------------------------------------------------------------------
;-----------------------------------------------------------------------
; Device Control Block
; Device Control Block
;-----------------------------------------------------------------------
;-----------------------------------------------------------------------
*/
*/
struct
_DCB
struct
dc390_dcb
{
{
struct
_DCB
*
pNextDCB
;
struct
dc390_dcb
*
pNextDCB
;
struct
_ACB
*
pDCBACB
;
struct
dc390_acb
*
pDCBACB
;
/* Aborted Commands */
//PSCSICMD AboIORBhead;
//PSCSICMD AboIORBtail;
//ULONG AboIORBcnt;
/* 0x08: */
/* 0x08: */
/* Queued SRBs */
/* Queued SRBs */
PSRB
pWaitingSRB
;
struct
dc390_srb
*
pWaitingSRB
;
PSRB
pWaitLast
;
struct
dc390_srb
*
pWaitLast
;
PSRB
pGoingSRB
;
struct
dc390_srb
*
pGoingSRB
;
PSRB
pGoingLast
;
struct
dc390_srb
*
pGoingLast
;
PSRB
pActiveSRB
;
struct
dc390_srb
*
pActiveSRB
;
UCHAR
WaitSRBCnt
;
/* Not used */
u8
WaitSRBCnt
;
/* Not used */
UCHAR
GoingSRBCnt
;
u8
GoingSRBCnt
;
UCHAR
DevType
;
u8
DevType
;
UCHAR
MaxCommand
;
u8
MaxCommand
;
/* 0x20: */
/* 0x20: */
UINT
TagMask
;
u32
TagMask
;
UCHAR
TargetID
;
/*; SCSI Target ID (SCSI Only) */
u8
TargetID
;
/*; SCSI Target ID (SCSI Only) */
UCHAR
TargetLUN
;
/*; SCSI Log. Unit (SCSI Only) */
u8
TargetLUN
;
/*; SCSI Log. Unit (SCSI Only) */
UCHAR
DevMode
;
u8
DevMode
;
UCHAR
DCBFlag
;
u8
DCBFlag
;
UCHAR
CtrlR1
;
u8
CtrlR1
;
UCHAR
CtrlR3
;
u8
CtrlR3
;
UCHAR
CtrlR4
;
u8
CtrlR4
;
UCHAR
Inquiry7
;
u8
Inquiry7
;
/* 0x2c: */
/* 0x2c: */
UCHAR
SyncMode
;
/*; 0:async mode */
u8
SyncMode
;
/*; 0:async mode */
UCHAR
NegoPeriod
;
/*;for nego. */
u8
NegoPeriod
;
/*;for nego. */
UCHAR
SyncPeriod
;
/*;for reg. */
u8
SyncPeriod
;
/*;for reg. */
UCHAR
SyncOffset
;
/*;for reg. and nego.(low nibble) */
u8
SyncOffset
;
/*;for reg. and nego.(low nibble) */
/* 0x30:*/
/* 0x30:*/
//
UCHAR
InqDataBuf[8];
//
u8
InqDataBuf[8];
//
UCHAR
CapacityBuf[8];
//
u8
CapacityBuf[8];
///* 0x40: */
///* 0x40: */
};
};
typedef
struct
_DCB
DC390_DCB
,
*
PDCB
;
/*
/*
;-----------------------------------------------------------------------
;-----------------------------------------------------------------------
; Adapter Control Block
; Adapter Control Block
;-----------------------------------------------------------------------
;-----------------------------------------------------------------------
*/
*/
struct
_ACB
struct
dc390_acb
{
{
PSH
pScsiHost
;
struct
Scsi_Host
*
pScsiHost
;
struct
_ACB
*
pNextACB
;
struct
dc390_acb
*
pNextACB
;
USHORT
IOPortBase
;
u16
IOPortBase
;
UCHAR
IRQLevel
;
u8
IRQLevel
;
UCHAR
status
;
u8
status
;
UCHAR
SRBCount
;
u8
SRBCount
;
UCHAR
AdapterIndex
;
/*; nth Adapter this driver */
u8
AdapterIndex
;
/*; nth Adapter this driver */
UCHAR
DCBCnt
;
u8
DCBCnt
;
UCHAR
TagMaxNum
;
u8
TagMaxNum
;
UCHAR
ACBFlag
;
u8
ACBFlag
;
UCHAR
Gmode2
;
u8
Gmode2
;
UCHAR
scan_devices
;
u8
scan_devices
;
PDCB
pLinkDCB
;
struct
dc390_dcb
*
pLinkDCB
;
PDCB
pLastDCB
;
struct
dc390_dcb
*
pLastDCB
;
PDCB
pDCBRunRobin
;
struct
dc390_dcb
*
pDCBRunRobin
;
PDCB
pActiveDCB
;
struct
dc390_dcb
*
pActiveDCB
;
PSRB
pFreeSRB
;
struct
dc390_srb
*
pFreeSRB
;
PSRB
pTmpSRB
;
struct
dc390_srb
*
pTmpSRB
;
UCHAR
msgin123
[
4
];
u8
msgin123
[
4
];
UCHAR
DCBmap
[
MAX_SCSI_ID
];
u8
DCBmap
[
MAX_SCSI_ID
];
UCHAR
Connected
;
u8
Connected
;
UCHAR
pad
;
u8
pad
;
#if defined(USE_SPINLOCKS) && USE_SPINLOCKS > 1 && (defined(CONFIG_SMP) || DEBUG_SPINLOCKS > 0)
#if defined(USE_SPINLOCKS) && USE_SPINLOCKS > 1 && (defined(CONFIG_SMP) || DEBUG_SPINLOCKS > 0)
spinlock_t
lock
;
spinlock_t
lock
;
#endif
#endif
UCHAR
sel_timeout
;
u8
sel_timeout
;
UCHAR
glitch_cfg
;
u8
glitch_cfg
;
UCHAR
MsgLen
;
u8
MsgLen
;
UCHAR
Ignore_IRQ
;
/* Not used */
u8
Ignore_IRQ
;
/* Not used */
PDEVDECL1
;
/* Pointer to PCI cfg. space */
struct
pci_dev
*
pdev
;
ULONG
Cmds
;
unsigned
long
Cmds
;
UINT
SelLost
;
u32
SelLost
;
UINT
SelConn
;
u32
SelConn
;
UINT
CmdInQ
;
u32
CmdInQ
;
UINT
CmdOutOfSRB
;
u32
CmdOutOfSRB
;
struct
timer_list
Waiting_Timer
;
struct
timer_list
Waiting_Timer
;
DC390_SRB
TmpSRB
;
struct
dc390_srb
TmpSRB
;
DC390_SRB
SRB_array
[
MAX_SRB_CNT
];
/* 50 SRBs */
struct
dc390_srb
SRB_array
[
MAX_SRB_CNT
];
/* 50 SRBs */
};
};
typedef
struct
_ACB
DC390_ACB
,
*
PACB
;
/*;-----------------------------------------------------------------------*/
/*;-----------------------------------------------------------------------*/
...
@@ -402,17 +354,17 @@ typedef struct {
...
@@ -402,17 +354,17 @@ typedef struct {
typedef
struct
_SCSIInqData
{
/* INQUIRY */
typedef
struct
_SCSIInqData
{
/* INQUIRY */
UCHAR
DevType
;
/* Periph Qualifier & Periph Dev Type*/
u8
DevType
;
/* Periph Qualifier & Periph Dev Type*/
UCHAR
RMB_TypeMod
;
/* rem media bit & Dev Type Modifier */
u8
RMB_TypeMod
;
/* rem media bit & Dev Type Modifier */
UCHAR
Vers
;
/* ISO, ECMA, & ANSI versions */
u8
Vers
;
/* ISO, ECMA, & ANSI versions */
UCHAR
RDF
;
/* AEN, TRMIOP, & response data format*/
u8
RDF
;
/* AEN, TRMIOP, & response data format*/
UCHAR
AddLen
;
/* length of additional data */
u8
AddLen
;
/* length of additional data */
UCHAR
Res1
;
/* reserved */
u8
Res1
;
/* reserved */
UCHAR
Res2
;
/* reserved */
u8
Res2
;
/* reserved */
UCHAR
Flags
;
/* RelADr,Wbus32,Wbus16,Sync,etc. */
u8
Flags
;
/* RelADr,Wbus32,Wbus16,Sync,etc. */
UCHAR
VendorID
[
8
];
/* Vendor Identification */
u8
VendorID
[
8
];
/* Vendor Identification */
UCHAR
ProductID
[
16
];
/* Product Identification */
u8
ProductID
[
16
];
/* Product Identification */
UCHAR
ProductRev
[
4
];
/* Product Revision */
u8
ProductRev
[
4
];
/* Product Revision */
}
SCSI_INQDATA
,
*
PSCSI_INQDATA
;
}
SCSI_INQDATA
,
*
PSCSI_INQDATA
;
...
@@ -461,10 +413,10 @@ typedef struct _SCSIInqData { /* INQUIRY */
...
@@ -461,10 +413,10 @@ typedef struct _SCSIInqData { /* INQUIRY */
*/
*/
typedef
struct
_EEprom
typedef
struct
_EEprom
{
{
UCHAR
EE_MODE1
;
u8
EE_MODE1
;
UCHAR
EE_SPEED
;
u8
EE_SPEED
;
UCHAR
xx1
;
u8
xx1
;
UCHAR
xx2
;
u8
xx2
;
}
EEprom
,
*
PEEprom
;
}
EEprom
,
*
PEEprom
;
#define REAL_EE_ADAPT_SCSI_ID 64
#define REAL_EE_ADAPT_SCSI_ID 64
...
@@ -676,7 +628,7 @@ UCHAR xx2;
...
@@ -676,7 +628,7 @@ UCHAR xx2;
(inb (pACB->IOPortBase + (address)))
(inb (pACB->IOPortBase + (address)))
#define DC390_read8_(address, base) \
#define DC390_read8_(address, base) \
(inb ((
USHORT
)(base) + (address)))
(inb ((
u16
)(base) + (address)))
#define DC390_read16(address) \
#define DC390_read16(address) \
(inw (pACB->IOPortBase + (address)))
(inw (pACB->IOPortBase + (address)))
...
@@ -688,7 +640,7 @@ UCHAR xx2;
...
@@ -688,7 +640,7 @@ UCHAR xx2;
outb ((value), pACB->IOPortBase + (address))
outb ((value), pACB->IOPortBase + (address))
#define DC390_write8_(address,value,base) \
#define DC390_write8_(address,value,base) \
outb ((value), (
USHORT
)(base) + (address))
outb ((value), (
u16
)(base) + (address))
#define DC390_write16(address,value) \
#define DC390_write16(address,value) \
outw ((value), pACB->IOPortBase + (address))
outw ((value), pACB->IOPortBase + (address))
...
...
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