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
b59fb6fd
Commit
b59fb6fd
authored
Mar 31, 2013
by
Al Viro
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
advansys: switch to ->show_info()
Signed-off-by:
Al Viro
<
viro@zeniv.linux.org.uk
>
parent
63fd57cb
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
327 additions
and
837 deletions
+327
-837
drivers/scsi/advansys.c
drivers/scsi/advansys.c
+327
-837
No files found.
drivers/scsi/advansys.c
View file @
b59fb6fd
...
...
@@ -2178,22 +2178,6 @@ do { \
#define ASC_INFO_SIZE 128
/* advansys_info() line size */
#ifdef CONFIG_PROC_FS
/* /proc/scsi/advansys/[0...] related definitions */
#define ASC_PRTBUF_SIZE 2048
#define ASC_PRTLINE_SIZE 160
#define ASC_PRT_NEXT() \
if (cp) { \
totlen += len; \
leftlen -= len; \
if (leftlen == 0) { \
return totlen; \
} \
cp += len; \
}
#endif
/* CONFIG_PROC_FS */
/* Asc Library return codes */
#define ASC_TRUE 1
#define ASC_FALSE 0
...
...
@@ -2384,7 +2368,6 @@ struct asc_board {
}
eep_config
;
ulong
last_reset
;
/* Saved last reset time */
/* /proc/scsi/advansys/[0...] */
char
*
prtbuf
;
/* /proc print buffer */
#ifdef ADVANSYS_STATS
struct
asc_stats
asc_stats
;
/* Board statistics */
#endif
/* ADVANSYS_STATS */
...
...
@@ -2875,64 +2858,21 @@ static const char *advansys_info(struct Scsi_Host *shost)
}
#ifdef CONFIG_PROC_FS
/*
* asc_prt_line()
*
* If 'cp' is NULL print to the console, otherwise print to a buffer.
*
* Return 0 if printing to the console, otherwise return the number of
* bytes written to the buffer.
*
* Note: If any single line is greater than ASC_PRTLINE_SIZE bytes the stack
* will be corrupted. 's[]' is defined to be ASC_PRTLINE_SIZE bytes.
*/
static
int
asc_prt_line
(
char
*
buf
,
int
buflen
,
char
*
fmt
,
...)
{
va_list
args
;
int
ret
;
char
s
[
ASC_PRTLINE_SIZE
];
va_start
(
args
,
fmt
);
ret
=
vsprintf
(
s
,
fmt
,
args
);
BUG_ON
(
ret
>=
ASC_PRTLINE_SIZE
);
if
(
buf
==
NULL
)
{
(
void
)
printk
(
s
);
ret
=
0
;
}
else
{
ret
=
min
(
buflen
,
ret
);
memcpy
(
buf
,
s
,
ret
);
}
va_end
(
args
);
return
ret
;
}
/*
* asc_prt_board_devices()
*
* Print driver information for devices attached to the board.
*
* Note: no single line should be greater than ASC_PRTLINE_SIZE,
* cf. asc_prt_line().
*
* Return the number of characters copied into 'cp'. No more than
* 'cplen' characters will be copied to 'cp'.
*/
static
int
asc_prt_board_devices
(
struct
Scsi_Host
*
shost
,
char
*
cp
,
int
cplen
)
static
void
asc_prt_board_devices
(
struct
seq_file
*
m
,
struct
Scsi_Host
*
shost
)
{
struct
asc_board
*
boardp
=
shost_priv
(
shost
);
int
leftlen
;
int
totlen
;
int
len
;
int
chip_scsi_id
;
int
i
;
leftlen
=
cplen
;
totlen
=
len
=
0
;
len
=
asc_prt_line
(
cp
,
leftlen
,
seq_printf
(
m
,
"
\n
Device Information for AdvanSys SCSI Host %d:
\n
"
,
shost
->
host_no
);
ASC_PRT_NEXT
();
if
(
ASC_NARROW_BOARD
(
boardp
))
{
chip_scsi_id
=
boardp
->
dvc_cfg
.
asc_dvc_cfg
.
chip_scsi_id
;
...
...
@@ -2940,60 +2880,42 @@ static int asc_prt_board_devices(struct Scsi_Host *shost, char *cp, int cplen)
chip_scsi_id
=
boardp
->
dvc_var
.
adv_dvc_var
.
chip_scsi_id
;
}
len
=
asc_prt_line
(
cp
,
leftlen
,
"Target IDs Detected:"
);
ASC_PRT_NEXT
();
seq_printf
(
m
,
"Target IDs Detected:"
);
for
(
i
=
0
;
i
<=
ADV_MAX_TID
;
i
++
)
{
if
(
boardp
->
init_tidmask
&
ADV_TID_TO_TIDMASK
(
i
))
{
len
=
asc_prt_line
(
cp
,
leftlen
,
" %X,"
,
i
);
ASC_PRT_NEXT
();
}
if
(
boardp
->
init_tidmask
&
ADV_TID_TO_TIDMASK
(
i
))
seq_printf
(
m
,
" %X,"
,
i
);
}
len
=
asc_prt_line
(
cp
,
leftlen
,
" (%X=Host Adapter)
\n
"
,
chip_scsi_id
);
ASC_PRT_NEXT
();
return
totlen
;
seq_printf
(
m
,
" (%X=Host Adapter)
\n
"
,
chip_scsi_id
);
}
/*
* Display Wide Board BIOS Information.
*/
static
int
asc_prt_adv_bios
(
struct
Scsi_Host
*
shost
,
char
*
cp
,
int
cplen
)
static
void
asc_prt_adv_bios
(
struct
seq_file
*
m
,
struct
Scsi_Host
*
shost
)
{
struct
asc_board
*
boardp
=
shost_priv
(
shost
);
int
leftlen
;
int
totlen
;
int
len
;
ushort
major
,
minor
,
letter
;
leftlen
=
cplen
;
totlen
=
len
=
0
;
len
=
asc_prt_line
(
cp
,
leftlen
,
"
\n
ROM BIOS Version: "
);
ASC_PRT_NEXT
();
seq_printf
(
m
,
"
\n
ROM BIOS Version: "
);
/*
* If the BIOS saved a valid signature, then fill in
* the BIOS code segment base address.
*/
if
(
boardp
->
bios_signature
!=
0x55AA
)
{
len
=
asc_prt_line
(
cp
,
leftlen
,
"Disabled or Pre-3.1
\n
"
);
ASC_PRT_NEXT
();
len
=
asc_prt_line
(
cp
,
leftlen
,
seq_printf
(
m
,
"Disabled or Pre-3.1
\n
"
);
seq_printf
(
m
,
"BIOS either disabled or Pre-3.1. If it is pre-3.1, then a newer version
\n
"
);
ASC_PRT_NEXT
();
len
=
asc_prt_line
(
cp
,
leftlen
,
seq_printf
(
m
,
"can be found at the ConnectCom FTP site: ftp://ftp.connectcom.net/pub
\n
"
);
ASC_PRT_NEXT
();
}
else
{
major
=
(
boardp
->
bios_version
>>
12
)
&
0xF
;
minor
=
(
boardp
->
bios_version
>>
8
)
&
0xF
;
letter
=
(
boardp
->
bios_version
&
0xFF
);
len
=
asc_prt_line
(
cp
,
leftlen
,
"%d.%d%c
\n
"
,
seq_printf
(
m
,
"%d.%d%c
\n
"
,
major
,
minor
,
letter
>=
26
?
'?'
:
letter
+
'A'
);
ASC_PRT_NEXT
();
/*
* Current available ROM BIOS release is 3.1I for UW
* and 3.2I for U2W. This code doesn't differentiate
...
...
@@ -3001,16 +2923,12 @@ static int asc_prt_adv_bios(struct Scsi_Host *shost, char *cp, int cplen)
*/
if
(
major
<
3
||
(
major
<=
3
&&
minor
<
1
)
||
(
major
<=
3
&&
minor
<=
1
&&
letter
<
(
'I'
-
'A'
)))
{
len
=
asc_prt_line
(
cp
,
leftlen
,
seq_printf
(
m
,
"Newer version of ROM BIOS is available at the ConnectCom FTP site:
\n
"
);
ASC_PRT_NEXT
();
len
=
asc_prt_line
(
cp
,
leftlen
,
seq_printf
(
m
,
"ftp://ftp.connectcom.net/pub
\n
"
);
ASC_PRT_NEXT
();
}
}
return
totlen
;
}
/*
...
...
@@ -3115,20 +3033,11 @@ static int asc_get_eeprom_string(ushort *serialnum, uchar *cp)
* asc_prt_asc_board_eeprom()
*
* Print board EEPROM configuration.
*
* Note: no single line should be greater than ASC_PRTLINE_SIZE,
* cf. asc_prt_line().
*
* Return the number of characters copied into 'cp'. No more than
* 'cplen' characters will be copied to 'cp'.
*/
static
int
asc_prt_asc_board_eeprom
(
struct
Scsi_Host
*
shost
,
char
*
cp
,
int
cplen
)
static
void
asc_prt_asc_board_eeprom
(
struct
seq_file
*
m
,
struct
Scsi_Host
*
shost
)
{
struct
asc_board
*
boardp
=
shost_priv
(
shost
);
ASC_DVC_VAR
*
asc_dvc_varp
;
int
leftlen
;
int
totlen
;
int
len
;
ASCEEP_CONFIG
*
ep
;
int
i
;
#ifdef CONFIG_ISA
...
...
@@ -3139,129 +3048,75 @@ static int asc_prt_asc_board_eeprom(struct Scsi_Host *shost, char *cp, int cplen
asc_dvc_varp
=
&
boardp
->
dvc_var
.
asc_dvc_var
;
ep
=
&
boardp
->
eep_config
.
asc_eep
;
leftlen
=
cplen
;
totlen
=
len
=
0
;
len
=
asc_prt_line
(
cp
,
leftlen
,
seq_printf
(
m
,
"
\n
EEPROM Settings for AdvanSys SCSI Host %d:
\n
"
,
shost
->
host_no
);
ASC_PRT_NEXT
();
if
(
asc_get_eeprom_string
((
ushort
*
)
&
ep
->
adapter_info
[
0
],
serialstr
)
==
ASC_TRUE
)
{
len
=
asc_prt_line
(
cp
,
leftlen
,
" Serial Number: %s
\n
"
,
serialstr
);
ASC_PRT_NEXT
();
}
else
{
if
(
ep
->
adapter_info
[
5
]
==
0xBB
)
{
len
=
asc_prt_line
(
cp
,
leftlen
,
==
ASC_TRUE
)
seq_printf
(
m
,
" Serial Number: %s
\n
"
,
serialstr
);
else
if
(
ep
->
adapter_info
[
5
]
==
0xBB
)
seq_printf
(
m
,
" Default Settings Used for EEPROM-less Adapter.
\n
"
);
ASC_PRT_NEXT
();
}
else
{
len
=
asc_prt_line
(
cp
,
leftlen
,
else
seq_printf
(
m
,
" Serial Number Signature Not Present.
\n
"
);
ASC_PRT_NEXT
();
}
}
len
=
asc_prt_line
(
cp
,
leftlen
,
seq_printf
(
m
,
" Host SCSI ID: %u, Host Queue Size: %u, Device Queue Size: %u
\n
"
,
ASC_EEP_GET_CHIP_ID
(
ep
),
ep
->
max_total_qng
,
ep
->
max_tag_qng
);
ASC_PRT_NEXT
();
len
=
asc_prt_line
(
cp
,
leftlen
,
seq_printf
(
m
,
" cntl 0x%x, no_scam 0x%x
\n
"
,
ep
->
cntl
,
ep
->
no_scam
);
ASC_PRT_NEXT
();
len
=
asc_prt_line
(
cp
,
leftlen
,
" Target ID: "
);
ASC_PRT_NEXT
();
for
(
i
=
0
;
i
<=
ASC_MAX_TID
;
i
++
)
{
len
=
asc_prt_line
(
cp
,
leftlen
,
" %d"
,
i
);
ASC_PRT_NEXT
();
}
len
=
asc_prt_line
(
cp
,
leftlen
,
"
\n
"
);
ASC_PRT_NEXT
();
len
=
asc_prt_line
(
cp
,
leftlen
,
" Disconnects: "
);
ASC_PRT_NEXT
();
for
(
i
=
0
;
i
<=
ASC_MAX_TID
;
i
++
)
{
len
=
asc_prt_line
(
cp
,
leftlen
,
" %c"
,
(
ep
->
disc_enable
&
ADV_TID_TO_TIDMASK
(
i
))
?
'Y'
:
'N'
);
ASC_PRT_NEXT
();
}
len
=
asc_prt_line
(
cp
,
leftlen
,
"
\n
"
);
ASC_PRT_NEXT
();
len
=
asc_prt_line
(
cp
,
leftlen
,
" Command Queuing: "
);
ASC_PRT_NEXT
();
for
(
i
=
0
;
i
<=
ASC_MAX_TID
;
i
++
)
{
len
=
asc_prt_line
(
cp
,
leftlen
,
" %c"
,
(
ep
->
use_cmd_qng
&
ADV_TID_TO_TIDMASK
(
i
))
?
'Y'
:
'N'
);
ASC_PRT_NEXT
();
}
len
=
asc_prt_line
(
cp
,
leftlen
,
"
\n
"
);
ASC_PRT_NEXT
();
len
=
asc_prt_line
(
cp
,
leftlen
,
" Start Motor: "
);
ASC_PRT_NEXT
();
for
(
i
=
0
;
i
<=
ASC_MAX_TID
;
i
++
)
{
len
=
asc_prt_line
(
cp
,
leftlen
,
" %c"
,
(
ep
->
start_motor
&
ADV_TID_TO_TIDMASK
(
i
))
?
'Y'
:
'N'
);
ASC_PRT_NEXT
();
}
len
=
asc_prt_line
(
cp
,
leftlen
,
"
\n
"
);
ASC_PRT_NEXT
();
len
=
asc_prt_line
(
cp
,
leftlen
,
" Synchronous Transfer:"
);
ASC_PRT_NEXT
();
for
(
i
=
0
;
i
<=
ASC_MAX_TID
;
i
++
)
{
len
=
asc_prt_line
(
cp
,
leftlen
,
" %c"
,
(
ep
->
init_sdtr
&
ADV_TID_TO_TIDMASK
(
i
))
?
'Y'
:
'N'
);
ASC_PRT_NEXT
();
}
len
=
asc_prt_line
(
cp
,
leftlen
,
"
\n
"
);
ASC_PRT_NEXT
();
seq_printf
(
m
,
" Target ID: "
);
for
(
i
=
0
;
i
<=
ASC_MAX_TID
;
i
++
)
seq_printf
(
m
,
" %d"
,
i
);
seq_printf
(
m
,
"
\n
"
);
seq_printf
(
m
,
" Disconnects: "
);
for
(
i
=
0
;
i
<=
ASC_MAX_TID
;
i
++
)
seq_printf
(
m
,
" %c"
,
(
ep
->
disc_enable
&
ADV_TID_TO_TIDMASK
(
i
))
?
'Y'
:
'N'
);
seq_printf
(
m
,
"
\n
"
);
seq_printf
(
m
,
" Command Queuing: "
);
for
(
i
=
0
;
i
<=
ASC_MAX_TID
;
i
++
)
seq_printf
(
m
,
" %c"
,
(
ep
->
use_cmd_qng
&
ADV_TID_TO_TIDMASK
(
i
))
?
'Y'
:
'N'
);
seq_printf
(
m
,
"
\n
"
);
seq_printf
(
m
,
" Start Motor: "
);
for
(
i
=
0
;
i
<=
ASC_MAX_TID
;
i
++
)
seq_printf
(
m
,
" %c"
,
(
ep
->
start_motor
&
ADV_TID_TO_TIDMASK
(
i
))
?
'Y'
:
'N'
);
seq_printf
(
m
,
"
\n
"
);
seq_printf
(
m
,
" Synchronous Transfer:"
);
for
(
i
=
0
;
i
<=
ASC_MAX_TID
;
i
++
)
seq_printf
(
m
,
" %c"
,
(
ep
->
init_sdtr
&
ADV_TID_TO_TIDMASK
(
i
))
?
'Y'
:
'N'
);
seq_printf
(
m
,
"
\n
"
);
#ifdef CONFIG_ISA
if
(
asc_dvc_varp
->
bus_type
&
ASC_IS_ISA
)
{
len
=
asc_prt_line
(
cp
,
leftlen
,
seq_printf
(
m
,
" Host ISA DMA speed: %d MB/S
\n
"
,
isa_dma_speed
[
ASC_EEP_GET_DMA_SPD
(
ep
)]);
ASC_PRT_NEXT
();
}
#endif
/* CONFIG_ISA */
return
totlen
;
}
/*
* asc_prt_adv_board_eeprom()
*
* Print board EEPROM configuration.
*
* Note: no single line should be greater than ASC_PRTLINE_SIZE,
* cf. asc_prt_line().
*
* Return the number of characters copied into 'cp'. No more than
* 'cplen' characters will be copied to 'cp'.
*/
static
int
asc_prt_adv_board_eeprom
(
struct
Scsi_Host
*
shost
,
char
*
cp
,
int
cplen
)
static
void
asc_prt_adv_board_eeprom
(
struct
seq_file
*
m
,
struct
Scsi_Host
*
shost
)
{
struct
asc_board
*
boardp
=
shost_priv
(
shost
);
ADV_DVC_VAR
*
adv_dvc_varp
;
int
leftlen
;
int
totlen
;
int
len
;
int
i
;
char
*
termstr
;
uchar
serialstr
[
13
];
...
...
@@ -3281,13 +3136,9 @@ static int asc_prt_adv_board_eeprom(struct Scsi_Host *shost, char *cp, int cplen
ep_38C1600
=
&
boardp
->
eep_config
.
adv_38C1600_eep
;
}
leftlen
=
cplen
;
totlen
=
len
=
0
;
len
=
asc_prt_line
(
cp
,
leftlen
,
seq_printf
(
m
,
"
\n
EEPROM Settings for AdvanSys SCSI Host %d:
\n
"
,
shost
->
host_no
);
ASC_PRT_NEXT
();
if
(
adv_dvc_varp
->
chip_type
==
ADV_CHIP_ASC3550
)
{
wordp
=
&
ep_3550
->
serial_number_word1
;
...
...
@@ -3297,38 +3148,28 @@ static int asc_prt_adv_board_eeprom(struct Scsi_Host *shost, char *cp, int cplen
wordp
=
&
ep_38C1600
->
serial_number_word1
;
}
if
(
asc_get_eeprom_string
(
wordp
,
serialstr
)
==
ASC_TRUE
)
{
len
=
asc_prt_line
(
cp
,
leftlen
,
" Serial Number: %s
\n
"
,
serialstr
);
ASC_PRT_NEXT
();
}
else
{
len
=
asc_prt_line
(
cp
,
leftlen
,
" Serial Number Signature Not Present.
\n
"
);
ASC_PRT_NEXT
();
}
if
(
asc_get_eeprom_string
(
wordp
,
serialstr
)
==
ASC_TRUE
)
seq_printf
(
m
,
" Serial Number: %s
\n
"
,
serialstr
);
else
seq_printf
(
m
,
" Serial Number Signature Not Present.
\n
"
);
if
(
adv_dvc_varp
->
chip_type
==
ADV_CHIP_ASC3550
)
{
len
=
asc_prt_line
(
cp
,
leftlen
,
if
(
adv_dvc_varp
->
chip_type
==
ADV_CHIP_ASC3550
)
seq_printf
(
m
,
" Host SCSI ID: %u, Host Queue Size: %u, Device Queue Size: %u
\n
"
,
ep_3550
->
adapter_scsi_id
,
ep_3550
->
max_host_qng
,
ep_3550
->
max_dvc_qng
);
ASC_PRT_NEXT
();
}
else
if
(
adv_dvc_varp
->
chip_type
==
ADV_CHIP_ASC38C0800
)
{
len
=
asc_prt_line
(
cp
,
leftlen
,
else
if
(
adv_dvc_varp
->
chip_type
==
ADV_CHIP_ASC38C0800
)
seq_printf
(
m
,
" Host SCSI ID: %u, Host Queue Size: %u, Device Queue Size: %u
\n
"
,
ep_38C0800
->
adapter_scsi_id
,
ep_38C0800
->
max_host_qng
,
ep_38C0800
->
max_dvc_qng
);
ASC_PRT_NEXT
();
}
else
{
len
=
asc_prt_line
(
cp
,
leftlen
,
else
seq_printf
(
m
,
" Host SCSI ID: %u, Host Queue Size: %u, Device Queue Size: %u
\n
"
,
ep_38C1600
->
adapter_scsi_id
,
ep_38C1600
->
max_host_qng
,
ep_38C1600
->
max_dvc_qng
);
ASC_PRT_NEXT
();
}
if
(
adv_dvc_varp
->
chip_type
==
ADV_CHIP_ASC3550
)
{
word
=
ep_3550
->
termination
;
}
else
if
(
adv_dvc_varp
->
chip_type
==
ADV_CHIP_ASC38C0800
)
{
...
...
@@ -3352,34 +3193,26 @@ static int asc_prt_adv_board_eeprom(struct Scsi_Host *shost, char *cp, int cplen
break
;
}
if
(
adv_dvc_varp
->
chip_type
==
ADV_CHIP_ASC3550
)
{
len
=
asc_prt_line
(
cp
,
leftlen
,
if
(
adv_dvc_varp
->
chip_type
==
ADV_CHIP_ASC3550
)
seq_printf
(
m
,
" termination: %u (%s), bios_ctrl: 0x%x
\n
"
,
ep_3550
->
termination
,
termstr
,
ep_3550
->
bios_ctrl
);
ASC_PRT_NEXT
();
}
else
if
(
adv_dvc_varp
->
chip_type
==
ADV_CHIP_ASC38C0800
)
{
len
=
asc_prt_line
(
cp
,
leftlen
,
else
if
(
adv_dvc_varp
->
chip_type
==
ADV_CHIP_ASC38C0800
)
seq_printf
(
m
,
" termination: %u (%s), bios_ctrl: 0x%x
\n
"
,
ep_38C0800
->
termination_lvd
,
termstr
,
ep_38C0800
->
bios_ctrl
);
ASC_PRT_NEXT
();
}
else
{
len
=
asc_prt_line
(
cp
,
leftlen
,
else
seq_printf
(
m
,
" termination: %u (%s), bios_ctrl: 0x%x
\n
"
,
ep_38C1600
->
termination_lvd
,
termstr
,
ep_38C1600
->
bios_ctrl
);
ASC_PRT_NEXT
();
}
len
=
asc_prt_line
(
cp
,
leftlen
,
" Target ID: "
);
ASC_PRT_NEXT
();
for
(
i
=
0
;
i
<=
ADV_MAX_TID
;
i
++
)
{
len
=
asc_prt_line
(
cp
,
leftlen
,
" %X"
,
i
);
ASC_PRT_NEXT
();
}
len
=
asc_prt_line
(
cp
,
leftlen
,
"
\n
"
);
ASC_PRT_NEXT
();
seq_printf
(
m
,
" Target ID: "
);
for
(
i
=
0
;
i
<=
ADV_MAX_TID
;
i
++
)
seq_printf
(
m
,
" %X"
,
i
);
seq_printf
(
m
,
"
\n
"
);
if
(
adv_dvc_varp
->
chip_type
==
ADV_CHIP_ASC3550
)
{
word
=
ep_3550
->
disc_enable
;
...
...
@@ -3388,15 +3221,11 @@ static int asc_prt_adv_board_eeprom(struct Scsi_Host *shost, char *cp, int cplen
}
else
{
word
=
ep_38C1600
->
disc_enable
;
}
len
=
asc_prt_line
(
cp
,
leftlen
,
" Disconnects: "
);
ASC_PRT_NEXT
();
for
(
i
=
0
;
i
<=
ADV_MAX_TID
;
i
++
)
{
len
=
asc_prt_line
(
cp
,
leftlen
,
" %c"
,
seq_printf
(
m
,
" Disconnects: "
);
for
(
i
=
0
;
i
<=
ADV_MAX_TID
;
i
++
)
seq_printf
(
m
,
" %c"
,
(
word
&
ADV_TID_TO_TIDMASK
(
i
))
?
'Y'
:
'N'
);
ASC_PRT_NEXT
();
}
len
=
asc_prt_line
(
cp
,
leftlen
,
"
\n
"
);
ASC_PRT_NEXT
();
seq_printf
(
m
,
"
\n
"
);
if
(
adv_dvc_varp
->
chip_type
==
ADV_CHIP_ASC3550
)
{
word
=
ep_3550
->
tagqng_able
;
...
...
@@ -3405,15 +3234,11 @@ static int asc_prt_adv_board_eeprom(struct Scsi_Host *shost, char *cp, int cplen
}
else
{
word
=
ep_38C1600
->
tagqng_able
;
}
len
=
asc_prt_line
(
cp
,
leftlen
,
" Command Queuing: "
);
ASC_PRT_NEXT
();
for
(
i
=
0
;
i
<=
ADV_MAX_TID
;
i
++
)
{
len
=
asc_prt_line
(
cp
,
leftlen
,
" %c"
,
seq_printf
(
m
,
" Command Queuing: "
);
for
(
i
=
0
;
i
<=
ADV_MAX_TID
;
i
++
)
seq_printf
(
m
,
" %c"
,
(
word
&
ADV_TID_TO_TIDMASK
(
i
))
?
'Y'
:
'N'
);
ASC_PRT_NEXT
();
}
len
=
asc_prt_line
(
cp
,
leftlen
,
"
\n
"
);
ASC_PRT_NEXT
();
seq_printf
(
m
,
"
\n
"
);
if
(
adv_dvc_varp
->
chip_type
==
ADV_CHIP_ASC3550
)
{
word
=
ep_3550
->
start_motor
;
...
...
@@ -3422,42 +3247,28 @@ static int asc_prt_adv_board_eeprom(struct Scsi_Host *shost, char *cp, int cplen
}
else
{
word
=
ep_38C1600
->
start_motor
;
}
len
=
asc_prt_line
(
cp
,
leftlen
,
" Start Motor: "
);
ASC_PRT_NEXT
();
for
(
i
=
0
;
i
<=
ADV_MAX_TID
;
i
++
)
{
len
=
asc_prt_line
(
cp
,
leftlen
,
" %c"
,
seq_printf
(
m
,
" Start Motor: "
);
for
(
i
=
0
;
i
<=
ADV_MAX_TID
;
i
++
)
seq_printf
(
m
,
" %c"
,
(
word
&
ADV_TID_TO_TIDMASK
(
i
))
?
'Y'
:
'N'
);
ASC_PRT_NEXT
();
}
len
=
asc_prt_line
(
cp
,
leftlen
,
"
\n
"
);
ASC_PRT_NEXT
();
seq_printf
(
m
,
"
\n
"
);
if
(
adv_dvc_varp
->
chip_type
==
ADV_CHIP_ASC3550
)
{
len
=
asc_prt_line
(
cp
,
leftlen
,
" Synchronous Transfer:"
);
ASC_PRT_NEXT
();
for
(
i
=
0
;
i
<=
ADV_MAX_TID
;
i
++
)
{
len
=
asc_prt_line
(
cp
,
leftlen
,
" %c"
,
(
ep_3550
->
sdtr_able
&
ADV_TID_TO_TIDMASK
(
i
))
?
seq_printf
(
m
,
" Synchronous Transfer:"
);
for
(
i
=
0
;
i
<=
ADV_MAX_TID
;
i
++
)
seq_printf
(
m
,
" %c"
,
(
ep_3550
->
sdtr_able
&
ADV_TID_TO_TIDMASK
(
i
))
?
'Y'
:
'N'
);
ASC_PRT_NEXT
();
}
len
=
asc_prt_line
(
cp
,
leftlen
,
"
\n
"
);
ASC_PRT_NEXT
();
seq_printf
(
m
,
"
\n
"
);
}
if
(
adv_dvc_varp
->
chip_type
==
ADV_CHIP_ASC3550
)
{
len
=
asc_prt_line
(
cp
,
leftlen
,
" Ultra Transfer: "
);
ASC_PRT_NEXT
();
for
(
i
=
0
;
i
<=
ADV_MAX_TID
;
i
++
)
{
len
=
asc_prt_line
(
cp
,
leftlen
,
" %c"
,
(
ep_3550
->
ultra_able
&
ADV_TID_TO_TIDMASK
(
i
))
seq_printf
(
m
,
" Ultra Transfer: "
);
for
(
i
=
0
;
i
<=
ADV_MAX_TID
;
i
++
)
seq_printf
(
m
,
" %c"
,
(
ep_3550
->
ultra_able
&
ADV_TID_TO_TIDMASK
(
i
))
?
'Y'
:
'N'
);
ASC_PRT_NEXT
();
}
len
=
asc_prt_line
(
cp
,
leftlen
,
"
\n
"
);
ASC_PRT_NEXT
();
seq_printf
(
m
,
"
\n
"
);
}
if
(
adv_dvc_varp
->
chip_type
==
ADV_CHIP_ASC3550
)
{
...
...
@@ -3467,21 +3278,16 @@ static int asc_prt_adv_board_eeprom(struct Scsi_Host *shost, char *cp, int cplen
}
else
{
word
=
ep_38C1600
->
wdtr_able
;
}
len
=
asc_prt_line
(
cp
,
leftlen
,
" Wide Transfer: "
);
ASC_PRT_NEXT
();
for
(
i
=
0
;
i
<=
ADV_MAX_TID
;
i
++
)
{
len
=
asc_prt_line
(
cp
,
leftlen
,
" %c"
,
seq_printf
(
m
,
" Wide Transfer: "
);
for
(
i
=
0
;
i
<=
ADV_MAX_TID
;
i
++
)
seq_printf
(
m
,
" %c"
,
(
word
&
ADV_TID_TO_TIDMASK
(
i
))
?
'Y'
:
'N'
);
ASC_PRT_NEXT
();
}
len
=
asc_prt_line
(
cp
,
leftlen
,
"
\n
"
);
ASC_PRT_NEXT
();
seq_printf
(
m
,
"
\n
"
);
if
(
adv_dvc_varp
->
chip_type
==
ADV_CHIP_ASC38C0800
||
adv_dvc_varp
->
chip_type
==
ADV_CHIP_ASC38C1600
)
{
len
=
asc_prt_line
(
cp
,
leftlen
,
seq_printf
(
m
,
" Synchronous Transfer Speed (Mhz):
\n
"
);
ASC_PRT_NEXT
();
for
(
i
=
0
;
i
<=
ADV_MAX_TID
;
i
++
)
{
char
*
speed_str
;
...
...
@@ -3517,99 +3323,64 @@ static int asc_prt_adv_board_eeprom(struct Scsi_Host *shost, char *cp, int cplen
speed_str
=
"Unk"
;
break
;
}
len
=
asc_prt_line
(
cp
,
leftlen
,
"%X:%s "
,
i
,
speed_str
);
ASC_PRT_NEXT
();
if
(
i
==
7
)
{
len
=
asc_prt_line
(
cp
,
leftlen
,
"
\n
"
);
ASC_PRT_NEXT
();
}
seq_printf
(
m
,
"%X:%s "
,
i
,
speed_str
);
if
(
i
==
7
)
seq_printf
(
m
,
"
\n
"
);
sdtr_speed
>>=
4
;
}
len
=
asc_prt_line
(
cp
,
leftlen
,
"
\n
"
);
ASC_PRT_NEXT
();
seq_printf
(
m
,
"
\n
"
);
}
return
totlen
;
}
/*
* asc_prt_driver_conf()
*
* Note: no single line should be greater than ASC_PRTLINE_SIZE,
* cf. asc_prt_line().
*
* Return the number of characters copied into 'cp'. No more than
* 'cplen' characters will be copied to 'cp'.
*/
static
int
asc_prt_driver_conf
(
struct
Scsi_Host
*
shost
,
char
*
cp
,
int
cplen
)
static
void
asc_prt_driver_conf
(
struct
seq_file
*
m
,
struct
Scsi_Host
*
shost
)
{
struct
asc_board
*
boardp
=
shost_priv
(
shost
);
int
leftlen
;
int
totlen
;
int
len
;
int
chip_scsi_id
;
leftlen
=
cplen
;
totlen
=
len
=
0
;
len
=
asc_prt_line
(
cp
,
leftlen
,
seq_printf
(
m
,
"
\n
Linux Driver Configuration and Information for AdvanSys SCSI Host %d:
\n
"
,
shost
->
host_no
);
ASC_PRT_NEXT
();
len
=
asc_prt_line
(
cp
,
leftlen
,
seq_printf
(
m
,
" host_busy %u, last_reset %u, max_id %u, max_lun %u, max_channel %u
\n
"
,
shost
->
host_busy
,
shost
->
last_reset
,
shost
->
max_id
,
shost
->
max_lun
,
shost
->
max_channel
);
ASC_PRT_NEXT
();
len
=
asc_prt_line
(
cp
,
leftlen
,
seq_printf
(
m
,
" unique_id %d, can_queue %d, this_id %d, sg_tablesize %u, cmd_per_lun %u
\n
"
,
shost
->
unique_id
,
shost
->
can_queue
,
shost
->
this_id
,
shost
->
sg_tablesize
,
shost
->
cmd_per_lun
);
ASC_PRT_NEXT
();
len
=
asc_prt_line
(
cp
,
leftlen
,
seq_printf
(
m
,
" unchecked_isa_dma %d, use_clustering %d
\n
"
,
shost
->
unchecked_isa_dma
,
shost
->
use_clustering
);
ASC_PRT_NEXT
();
len
=
asc_prt_line
(
cp
,
leftlen
,
seq_printf
(
m
,
" flags 0x%x, last_reset 0x%x, jiffies 0x%x, asc_n_io_port 0x%x
\n
"
,
boardp
->
flags
,
boardp
->
last_reset
,
jiffies
,
boardp
->
asc_n_io_port
);
ASC_PRT_NEXT
();
len
=
asc_prt_line
(
cp
,
leftlen
,
" io_port 0x%x
\n
"
,
shost
->
io_port
);
ASC_PRT_NEXT
();
seq_printf
(
m
,
" io_port 0x%x
\n
"
,
shost
->
io_port
);
if
(
ASC_NARROW_BOARD
(
boardp
))
{
chip_scsi_id
=
boardp
->
dvc_cfg
.
asc_dvc_cfg
.
chip_scsi_id
;
}
else
{
chip_scsi_id
=
boardp
->
dvc_var
.
adv_dvc_var
.
chip_scsi_id
;
}
return
totlen
;
}
/*
* asc_prt_asc_board_info()
*
* Print dynamic board configuration information.
*
* Note: no single line should be greater than ASC_PRTLINE_SIZE,
* cf. asc_prt_line().
*
* Return the number of characters copied into 'cp'. No more than
* 'cplen' characters will be copied to 'cp'.
*/
static
int
asc_prt_asc_board_info
(
struct
Scsi_Host
*
shost
,
char
*
cp
,
int
cplen
)
static
void
asc_prt_asc_board_info
(
struct
seq_file
*
m
,
struct
Scsi_Host
*
shost
)
{
struct
asc_board
*
boardp
=
shost_priv
(
shost
);
int
chip_scsi_id
;
int
leftlen
;
int
totlen
;
int
len
;
ASC_DVC_VAR
*
v
;
ASC_DVC_CFG
*
c
;
int
i
;
...
...
@@ -3619,105 +3390,79 @@ static int asc_prt_asc_board_info(struct Scsi_Host *shost, char *cp, int cplen)
c
=
&
boardp
->
dvc_cfg
.
asc_dvc_cfg
;
chip_scsi_id
=
c
->
chip_scsi_id
;
leftlen
=
cplen
;
totlen
=
len
=
0
;
len
=
asc_prt_line
(
cp
,
leftlen
,
seq_printf
(
m
,
"
\n
Asc Library Configuration and Statistics for AdvanSys SCSI Host %d:
\n
"
,
shost
->
host_no
);
ASC_PRT_NEXT
();
len
=
asc_prt_line
(
cp
,
leftlen
,
" chip_version %u, mcode_date 0x%x, "
seq_printf
(
m
,
" chip_version %u, mcode_date 0x%x, "
"mcode_version 0x%x, err_code %u
\n
"
,
c
->
chip_version
,
c
->
mcode_date
,
c
->
mcode_version
,
v
->
err_code
);
ASC_PRT_NEXT
();
/* Current number of commands waiting for the host. */
len
=
asc_prt_line
(
cp
,
leftlen
,
seq_printf
(
m
,
" Total Command Pending: %d
\n
"
,
v
->
cur_total_qng
);
ASC_PRT_NEXT
();
len
=
asc_prt_line
(
cp
,
leftlen
,
" Command Queuing:"
);
ASC_PRT_NEXT
();
seq_printf
(
m
,
" Command Queuing:"
);
for
(
i
=
0
;
i
<=
ASC_MAX_TID
;
i
++
)
{
if
((
chip_scsi_id
==
i
)
||
((
boardp
->
init_tidmask
&
ADV_TID_TO_TIDMASK
(
i
))
==
0
))
{
continue
;
}
len
=
asc_prt_line
(
cp
,
leftlen
,
" %X:%c"
,
seq_printf
(
m
,
" %X:%c"
,
i
,
(
v
->
use_tagged_qng
&
ADV_TID_TO_TIDMASK
(
i
))
?
'Y'
:
'N'
);
ASC_PRT_NEXT
();
(
v
->
use_tagged_qng
&
ADV_TID_TO_TIDMASK
(
i
))
?
'Y'
:
'N'
);
}
len
=
asc_prt_line
(
cp
,
leftlen
,
"
\n
"
);
ASC_PRT_NEXT
();
seq_printf
(
m
,
"
\n
"
);
/* Current number of commands waiting for a device. */
len
=
asc_prt_line
(
cp
,
leftlen
,
" Command Queue Pending:"
);
ASC_PRT_NEXT
();
seq_printf
(
m
,
" Command Queue Pending:"
);
for
(
i
=
0
;
i
<=
ASC_MAX_TID
;
i
++
)
{
if
((
chip_scsi_id
==
i
)
||
((
boardp
->
init_tidmask
&
ADV_TID_TO_TIDMASK
(
i
))
==
0
))
{
continue
;
}
len
=
asc_prt_line
(
cp
,
leftlen
,
" %X:%u"
,
i
,
v
->
cur_dvc_qng
[
i
]);
ASC_PRT_NEXT
();
seq_printf
(
m
,
" %X:%u"
,
i
,
v
->
cur_dvc_qng
[
i
]);
}
len
=
asc_prt_line
(
cp
,
leftlen
,
"
\n
"
);
ASC_PRT_NEXT
();
seq_printf
(
m
,
"
\n
"
);
/* Current limit on number of commands that can be sent to a device. */
len
=
asc_prt_line
(
cp
,
leftlen
,
" Command Queue Limit:"
);
ASC_PRT_NEXT
();
seq_printf
(
m
,
" Command Queue Limit:"
);
for
(
i
=
0
;
i
<=
ASC_MAX_TID
;
i
++
)
{
if
((
chip_scsi_id
==
i
)
||
((
boardp
->
init_tidmask
&
ADV_TID_TO_TIDMASK
(
i
))
==
0
))
{
continue
;
}
len
=
asc_prt_line
(
cp
,
leftlen
,
" %X:%u"
,
i
,
v
->
max_dvc_qng
[
i
]);
ASC_PRT_NEXT
();
seq_printf
(
m
,
" %X:%u"
,
i
,
v
->
max_dvc_qng
[
i
]);
}
len
=
asc_prt_line
(
cp
,
leftlen
,
"
\n
"
);
ASC_PRT_NEXT
();
seq_printf
(
m
,
"
\n
"
);
/* Indicate whether the device has returned queue full status. */
len
=
asc_prt_line
(
cp
,
leftlen
,
" Command Queue Full:"
);
ASC_PRT_NEXT
();
seq_printf
(
m
,
" Command Queue Full:"
);
for
(
i
=
0
;
i
<=
ASC_MAX_TID
;
i
++
)
{
if
((
chip_scsi_id
==
i
)
||
((
boardp
->
init_tidmask
&
ADV_TID_TO_TIDMASK
(
i
))
==
0
))
{
continue
;
}
if
(
boardp
->
queue_full
&
ADV_TID_TO_TIDMASK
(
i
))
{
len
=
asc_prt_line
(
cp
,
leftlen
,
" %X:Y-%d"
,
if
(
boardp
->
queue_full
&
ADV_TID_TO_TIDMASK
(
i
))
seq_printf
(
m
,
" %X:Y-%d"
,
i
,
boardp
->
queue_full_cnt
[
i
]);
}
else
{
len
=
asc_prt_line
(
cp
,
leftlen
,
" %X:N"
,
i
);
}
ASC_PRT_NEXT
();
else
seq_printf
(
m
,
" %X:N"
,
i
);
}
len
=
asc_prt_line
(
cp
,
leftlen
,
"
\n
"
);
ASC_PRT_NEXT
();
seq_printf
(
m
,
"
\n
"
);
len
=
asc_prt_line
(
cp
,
leftlen
,
" Synchronous Transfer:"
);
ASC_PRT_NEXT
();
seq_printf
(
m
,
" Synchronous Transfer:"
);
for
(
i
=
0
;
i
<=
ASC_MAX_TID
;
i
++
)
{
if
((
chip_scsi_id
==
i
)
||
((
boardp
->
init_tidmask
&
ADV_TID_TO_TIDMASK
(
i
))
==
0
))
{
continue
;
}
len
=
asc_prt_line
(
cp
,
leftlen
,
" %X:%c"
,
seq_printf
(
m
,
" %X:%c"
,
i
,
(
v
->
sdtr_done
&
ADV_TID_TO_TIDMASK
(
i
))
?
'Y'
:
'N'
);
ASC_PRT_NEXT
();
(
v
->
sdtr_done
&
ADV_TID_TO_TIDMASK
(
i
))
?
'Y'
:
'N'
);
}
len
=
asc_prt_line
(
cp
,
leftlen
,
"
\n
"
);
ASC_PRT_NEXT
();
seq_printf
(
m
,
"
\n
"
);
for
(
i
=
0
;
i
<=
ASC_MAX_TID
;
i
++
)
{
uchar
syn_period_ix
;
...
...
@@ -3728,69 +3473,48 @@ static int asc_prt_asc_board_info(struct Scsi_Host *shost, char *cp, int cplen)
continue
;
}
len
=
asc_prt_line
(
cp
,
leftlen
,
" %X:"
,
i
);
ASC_PRT_NEXT
();
seq_printf
(
m
,
" %X:"
,
i
);
if
((
boardp
->
sdtr_data
[
i
]
&
ASC_SYN_MAX_OFFSET
)
==
0
)
{
len
=
asc_prt_line
(
cp
,
leftlen
,
" Asynchronous"
);
ASC_PRT_NEXT
();
seq_printf
(
m
,
" Asynchronous"
);
}
else
{
syn_period_ix
=
(
boardp
->
sdtr_data
[
i
]
>>
4
)
&
(
v
->
max_sdtr_index
-
1
);
len
=
asc_prt_line
(
cp
,
leftlen
,
seq_printf
(
m
,
" Transfer Period Factor: %d (%d.%d Mhz),"
,
v
->
sdtr_period_tbl
[
syn_period_ix
],
250
/
v
->
sdtr_period_tbl
[
syn_period_ix
],
250
/
v
->
sdtr_period_tbl
[
syn_period_ix
],
ASC_TENTHS
(
250
,
v
->
sdtr_period_tbl
[
syn_period_ix
]));
ASC_PRT_NEXT
();
v
->
sdtr_period_tbl
[
syn_period_ix
]));
len
=
asc_prt_line
(
cp
,
leftlen
,
" REQ/ACK Offset: %d"
,
boardp
->
sdtr_data
[
i
]
&
ASC_SYN_MAX_OFFSET
);
ASC_PRT_NEXT
();
seq_printf
(
m
,
" REQ/ACK Offset: %d"
,
boardp
->
sdtr_data
[
i
]
&
ASC_SYN_MAX_OFFSET
);
}
if
((
v
->
sdtr_done
&
ADV_TID_TO_TIDMASK
(
i
))
==
0
)
{
len
=
asc_prt_line
(
cp
,
leftlen
,
"*
\n
"
);
seq_printf
(
m
,
"*
\n
"
);
renegotiate
=
1
;
}
else
{
len
=
asc_prt_line
(
cp
,
leftlen
,
"
\n
"
);
seq_printf
(
m
,
"
\n
"
);
}
ASC_PRT_NEXT
();
}
if
(
renegotiate
)
{
len
=
asc_prt_line
(
cp
,
leftlen
,
seq_printf
(
m
,
" * = Re-negotiation pending before next command.
\n
"
);
ASC_PRT_NEXT
();
}
return
totlen
;
}
/*
* asc_prt_adv_board_info()
*
* Print dynamic board configuration information.
*
* Note: no single line should be greater than ASC_PRTLINE_SIZE,
* cf. asc_prt_line().
*
* Return the number of characters copied into 'cp'. No more than
* 'cplen' characters will be copied to 'cp'.
*/
static
int
asc_prt_adv_board_info
(
struct
Scsi_Host
*
shost
,
char
*
cp
,
int
cplen
)
static
void
asc_prt_adv_board_info
(
struct
seq_file
*
m
,
struct
Scsi_Host
*
shost
)
{
struct
asc_board
*
boardp
=
shost_priv
(
shost
);
int
leftlen
;
int
totlen
;
int
len
;
int
i
;
ADV_DVC_VAR
*
v
;
ADV_DVC_CFG
*
c
;
...
...
@@ -3809,47 +3533,35 @@ static int asc_prt_adv_board_info(struct Scsi_Host *shost, char *cp, int cplen)
iop_base
=
v
->
iop_base
;
chip_scsi_id
=
v
->
chip_scsi_id
;
leftlen
=
cplen
;
totlen
=
len
=
0
;
len
=
asc_prt_line
(
cp
,
leftlen
,
seq_printf
(
m
,
"
\n
Adv Library Configuration and Statistics for AdvanSys SCSI Host %d:
\n
"
,
shost
->
host_no
);
ASC_PRT_NEXT
();
len
=
asc_prt_line
(
cp
,
leftlen
,
seq_printf
(
m
,
" iop_base 0x%lx, cable_detect: %X, err_code %u
\n
"
,
v
->
iop_base
,
AdvReadWordRegister
(
iop_base
,
IOPW_SCSI_CFG1
)
&
CABLE_DETECT
,
AdvReadWordRegister
(
iop_base
,
IOPW_SCSI_CFG1
)
&
CABLE_DETECT
,
v
->
err_code
);
ASC_PRT_NEXT
();
len
=
asc_prt_line
(
cp
,
leftlen
,
" chip_version %u, mcode_date 0x%x, "
seq_printf
(
m
,
" chip_version %u, mcode_date 0x%x, "
"mcode_version 0x%x
\n
"
,
c
->
chip_version
,
c
->
mcode_date
,
c
->
mcode_version
);
ASC_PRT_NEXT
();
AdvReadWordLram
(
iop_base
,
ASC_MC_TAGQNG_ABLE
,
tagqng_able
);
len
=
asc_prt_line
(
cp
,
leftlen
,
" Queuing Enabled:"
);
ASC_PRT_NEXT
();
seq_printf
(
m
,
" Queuing Enabled:"
);
for
(
i
=
0
;
i
<=
ADV_MAX_TID
;
i
++
)
{
if
((
chip_scsi_id
==
i
)
||
((
boardp
->
init_tidmask
&
ADV_TID_TO_TIDMASK
(
i
))
==
0
))
{
continue
;
}
len
=
asc_prt_line
(
cp
,
leftlen
,
" %X:%c"
,
seq_printf
(
m
,
" %X:%c"
,
i
,
(
tagqng_able
&
ADV_TID_TO_TIDMASK
(
i
))
?
'Y'
:
'N'
);
ASC_PRT_NEXT
();
(
tagqng_able
&
ADV_TID_TO_TIDMASK
(
i
))
?
'Y'
:
'N'
);
}
len
=
asc_prt_line
(
cp
,
leftlen
,
"
\n
"
);
ASC_PRT_NEXT
();
seq_printf
(
m
,
"
\n
"
);
len
=
asc_prt_line
(
cp
,
leftlen
,
" Queue Limit:"
);
ASC_PRT_NEXT
();
seq_printf
(
m
,
" Queue Limit:"
);
for
(
i
=
0
;
i
<=
ADV_MAX_TID
;
i
++
)
{
if
((
chip_scsi_id
==
i
)
||
((
boardp
->
init_tidmask
&
ADV_TID_TO_TIDMASK
(
i
))
==
0
))
{
...
...
@@ -3859,14 +3571,11 @@ static int asc_prt_adv_board_info(struct Scsi_Host *shost, char *cp, int cplen)
AdvReadByteLram
(
iop_base
,
ASC_MC_NUMBER_OF_MAX_CMD
+
i
,
lrambyte
);
len
=
asc_prt_line
(
cp
,
leftlen
,
" %X:%d"
,
i
,
lrambyte
);
ASC_PRT_NEXT
();
seq_printf
(
m
,
" %X:%d"
,
i
,
lrambyte
);
}
len
=
asc_prt_line
(
cp
,
leftlen
,
"
\n
"
);
ASC_PRT_NEXT
();
seq_printf
(
m
,
"
\n
"
);
len
=
asc_prt_line
(
cp
,
leftlen
,
" Command Pending:"
);
ASC_PRT_NEXT
();
seq_printf
(
m
,
" Command Pending:"
);
for
(
i
=
0
;
i
<=
ADV_MAX_TID
;
i
++
)
{
if
((
chip_scsi_id
==
i
)
||
((
boardp
->
init_tidmask
&
ADV_TID_TO_TIDMASK
(
i
))
==
0
))
{
...
...
@@ -3876,33 +3585,26 @@ static int asc_prt_adv_board_info(struct Scsi_Host *shost, char *cp, int cplen)
AdvReadByteLram
(
iop_base
,
ASC_MC_NUMBER_OF_QUEUED_CMD
+
i
,
lrambyte
);
len
=
asc_prt_line
(
cp
,
leftlen
,
" %X:%d"
,
i
,
lrambyte
);
ASC_PRT_NEXT
();
seq_printf
(
m
,
" %X:%d"
,
i
,
lrambyte
);
}
len
=
asc_prt_line
(
cp
,
leftlen
,
"
\n
"
);
ASC_PRT_NEXT
();
seq_printf
(
m
,
"
\n
"
);
AdvReadWordLram
(
iop_base
,
ASC_MC_WDTR_ABLE
,
wdtr_able
);
len
=
asc_prt_line
(
cp
,
leftlen
,
" Wide Enabled:"
);
ASC_PRT_NEXT
();
seq_printf
(
m
,
" Wide Enabled:"
);
for
(
i
=
0
;
i
<=
ADV_MAX_TID
;
i
++
)
{
if
((
chip_scsi_id
==
i
)
||
((
boardp
->
init_tidmask
&
ADV_TID_TO_TIDMASK
(
i
))
==
0
))
{
continue
;
}
len
=
asc_prt_line
(
cp
,
leftlen
,
" %X:%c"
,
seq_printf
(
m
,
" %X:%c"
,
i
,
(
wdtr_able
&
ADV_TID_TO_TIDMASK
(
i
))
?
'Y'
:
'N'
);
ASC_PRT_NEXT
();
(
wdtr_able
&
ADV_TID_TO_TIDMASK
(
i
))
?
'Y'
:
'N'
);
}
len
=
asc_prt_line
(
cp
,
leftlen
,
"
\n
"
);
ASC_PRT_NEXT
();
seq_printf
(
m
,
"
\n
"
);
AdvReadWordLram
(
iop_base
,
ASC_MC_WDTR_DONE
,
wdtr_done
);
len
=
asc_prt_line
(
cp
,
leftlen
,
" Transfer Bit Width:"
);
ASC_PRT_NEXT
();
seq_printf
(
m
,
" Transfer Bit Width:"
);
for
(
i
=
0
;
i
<=
ADV_MAX_TID
;
i
++
)
{
if
((
chip_scsi_id
==
i
)
||
((
boardp
->
init_tidmask
&
ADV_TID_TO_TIDMASK
(
i
))
==
0
))
{
...
...
@@ -3913,37 +3615,30 @@ static int asc_prt_adv_board_info(struct Scsi_Host *shost, char *cp, int cplen)
ASC_MC_DEVICE_HSHK_CFG_TABLE
+
(
2
*
i
),
lramword
);
len
=
asc_prt_line
(
cp
,
leftlen
,
" %X:%d"
,
seq_printf
(
m
,
" %X:%d"
,
i
,
(
lramword
&
0x8000
)
?
16
:
8
);
ASC_PRT_NEXT
();
if
((
wdtr_able
&
ADV_TID_TO_TIDMASK
(
i
))
&&
(
wdtr_done
&
ADV_TID_TO_TIDMASK
(
i
))
==
0
)
{
len
=
asc_prt_line
(
cp
,
leftlen
,
"*"
);
ASC_PRT_NEXT
();
seq_printf
(
m
,
"*"
);
renegotiate
=
1
;
}
}
len
=
asc_prt_line
(
cp
,
leftlen
,
"
\n
"
);
ASC_PRT_NEXT
();
seq_printf
(
m
,
"
\n
"
);
AdvReadWordLram
(
iop_base
,
ASC_MC_SDTR_ABLE
,
sdtr_able
);
len
=
asc_prt_line
(
cp
,
leftlen
,
" Synchronous Enabled:"
);
ASC_PRT_NEXT
();
seq_printf
(
m
,
" Synchronous Enabled:"
);
for
(
i
=
0
;
i
<=
ADV_MAX_TID
;
i
++
)
{
if
((
chip_scsi_id
==
i
)
||
((
boardp
->
init_tidmask
&
ADV_TID_TO_TIDMASK
(
i
))
==
0
))
{
continue
;
}
len
=
asc_prt_line
(
cp
,
leftlen
,
" %X:%c"
,
seq_printf
(
m
,
" %X:%c"
,
i
,
(
sdtr_able
&
ADV_TID_TO_TIDMASK
(
i
))
?
'Y'
:
'N'
);
ASC_PRT_NEXT
();
(
sdtr_able
&
ADV_TID_TO_TIDMASK
(
i
))
?
'Y'
:
'N'
);
}
len
=
asc_prt_line
(
cp
,
leftlen
,
"
\n
"
);
ASC_PRT_NEXT
();
seq_printf
(
m
,
"
\n
"
);
AdvReadWordLram
(
iop_base
,
ASC_MC_SDTR_DONE
,
sdtr_done
);
for
(
i
=
0
;
i
<=
ADV_MAX_TID
;
i
++
)
{
...
...
@@ -3959,358 +3654,170 @@ static int asc_prt_adv_board_info(struct Scsi_Host *shost, char *cp, int cplen)
continue
;
}
len
=
asc_prt_line
(
cp
,
leftlen
,
" %X:"
,
i
);
ASC_PRT_NEXT
();
seq_printf
(
m
,
" %X:"
,
i
);
if
((
lramword
&
0x1F
)
==
0
)
{
/* Check for REQ/ACK Offset 0. */
len
=
asc_prt_line
(
cp
,
leftlen
,
" Asynchronous"
);
ASC_PRT_NEXT
();
seq_printf
(
m
,
" Asynchronous"
);
}
else
{
len
=
asc_prt_line
(
cp
,
leftlen
,
" Transfer Period Factor: "
);
ASC_PRT_NEXT
();
seq_printf
(
m
,
" Transfer Period Factor: "
);
if
((
lramword
&
0x1F00
)
==
0x1100
)
{
/* 80 Mhz */
len
=
asc_prt_line
(
cp
,
leftlen
,
"9 (80.0 Mhz),"
);
ASC_PRT_NEXT
();
seq_printf
(
m
,
"9 (80.0 Mhz),"
);
}
else
if
((
lramword
&
0x1F00
)
==
0x1000
)
{
/* 40 Mhz */
len
=
asc_prt_line
(
cp
,
leftlen
,
"10 (40.0 Mhz),"
);
ASC_PRT_NEXT
();
seq_printf
(
m
,
"10 (40.0 Mhz),"
);
}
else
{
/* 20 Mhz or below. */
period
=
(((
lramword
>>
8
)
*
25
)
+
50
)
/
4
;
if
(
period
==
0
)
{
/* Should never happen. */
len
=
asc_prt_line
(
cp
,
leftlen
,
"%d (? Mhz), "
);
ASC_PRT_NEXT
();
seq_printf
(
m
,
"%d (? Mhz), "
);
}
else
{
len
=
asc_prt_line
(
cp
,
leftlen
,
seq_printf
(
m
,
"%d (%d.%d Mhz),"
,
period
,
250
/
period
,
ASC_TENTHS
(
250
,
period
));
ASC_PRT_NEXT
();
ASC_TENTHS
(
250
,
period
));
}
}
len
=
asc_prt_line
(
cp
,
leftlen
,
" REQ/ACK Offset: %d"
,
seq_printf
(
m
,
" REQ/ACK Offset: %d"
,
lramword
&
0x1F
);
ASC_PRT_NEXT
();
}
if
((
sdtr_done
&
ADV_TID_TO_TIDMASK
(
i
))
==
0
)
{
len
=
asc_prt_line
(
cp
,
leftlen
,
"*
\n
"
);
seq_printf
(
m
,
"*
\n
"
);
renegotiate
=
1
;
}
else
{
len
=
asc_prt_line
(
cp
,
leftlen
,
"
\n
"
);
seq_printf
(
m
,
"
\n
"
);
}
ASC_PRT_NEXT
();
}
if
(
renegotiate
)
{
len
=
asc_prt_line
(
cp
,
leftlen
,
seq_printf
(
m
,
" * = Re-negotiation pending before next command.
\n
"
);
ASC_PRT_NEXT
();
}
return
totlen
;
}
/*
* asc_proc_copy()
*
* Copy proc information to a read buffer taking into account the current
* read offset in the file and the remaining space in the read buffer.
*/
static
int
asc_proc_copy
(
off_t
advoffset
,
off_t
offset
,
char
*
curbuf
,
int
leftlen
,
char
*
cp
,
int
cplen
)
{
int
cnt
=
0
;
ASC_DBG
(
2
,
"offset %d, advoffset %d, cplen %d
\n
"
,
(
unsigned
)
offset
,
(
unsigned
)
advoffset
,
cplen
);
if
(
offset
<=
advoffset
)
{
/* Read offset below current offset, copy everything. */
cnt
=
min
(
cplen
,
leftlen
);
ASC_DBG
(
2
,
"curbuf 0x%lx, cp 0x%lx, cnt %d
\n
"
,
(
ulong
)
curbuf
,
(
ulong
)
cp
,
cnt
);
memcpy
(
curbuf
,
cp
,
cnt
);
}
else
if
(
offset
<
advoffset
+
cplen
)
{
/* Read offset within current range, partial copy. */
cnt
=
(
advoffset
+
cplen
)
-
offset
;
cp
=
(
cp
+
cplen
)
-
cnt
;
cnt
=
min
(
cnt
,
leftlen
);
ASC_DBG
(
2
,
"curbuf 0x%lx, cp 0x%lx, cnt %d
\n
"
,
(
ulong
)
curbuf
,
(
ulong
)
cp
,
cnt
);
memcpy
(
curbuf
,
cp
,
cnt
);
}
return
cnt
;
}
#ifdef ADVANSYS_STATS
/*
* asc_prt_board_stats()
*
* Note: no single line should be greater than ASC_PRTLINE_SIZE,
* cf. asc_prt_line().
*
* Return the number of characters copied into 'cp'. No more than
* 'cplen' characters will be copied to 'cp'.
*/
static
int
asc_prt_board_stats
(
struct
Scsi_Host
*
shost
,
char
*
cp
,
int
cplen
)
static
void
asc_prt_board_stats
(
struct
seq_file
*
m
,
struct
Scsi_Host
*
shost
)
{
struct
asc_board
*
boardp
=
shost_priv
(
shost
);
struct
asc_stats
*
s
=
&
boardp
->
asc_stats
;
int
leftlen
=
cplen
;
int
len
,
totlen
=
0
;
len
=
asc_prt_line
(
cp
,
leftlen
,
seq_printf
(
m
,
"
\n
Linux Driver Statistics for AdvanSys SCSI Host %d:
\n
"
,
shost
->
host_no
);
ASC_PRT_NEXT
();
len
=
asc_prt_line
(
cp
,
leftlen
,
seq_printf
(
m
,
" queuecommand %lu, reset %lu, biosparam %lu, interrupt %lu
\n
"
,
s
->
queuecommand
,
s
->
reset
,
s
->
biosparam
,
s
->
interrupt
);
ASC_PRT_NEXT
();
len
=
asc_prt_line
(
cp
,
leftlen
,
seq_printf
(
m
,
" callback %lu, done %lu, build_error %lu, build_noreq %lu, build_nosg %lu
\n
"
,
s
->
callback
,
s
->
done
,
s
->
build_error
,
s
->
adv_build_noreq
,
s
->
adv_build_nosg
);
ASC_PRT_NEXT
();
len
=
asc_prt_line
(
cp
,
leftlen
,
seq_printf
(
m
,
" exe_noerror %lu, exe_busy %lu, exe_error %lu, exe_unknown %lu
\n
"
,
s
->
exe_noerror
,
s
->
exe_busy
,
s
->
exe_error
,
s
->
exe_unknown
);
ASC_PRT_NEXT
();
/*
* Display data transfer statistics.
*/
if
(
s
->
xfer_cnt
>
0
)
{
len
=
asc_prt_line
(
cp
,
leftlen
,
" xfer_cnt %lu, xfer_elem %lu, "
,
seq_printf
(
m
,
" xfer_cnt %lu, xfer_elem %lu, "
,
s
->
xfer_cnt
,
s
->
xfer_elem
);
ASC_PRT_NEXT
();
len
=
asc_prt_line
(
cp
,
leftlen
,
"xfer_bytes %lu.%01lu kb
\n
"
,
seq_printf
(
m
,
"xfer_bytes %lu.%01lu kb
\n
"
,
s
->
xfer_sect
/
2
,
ASC_TENTHS
(
s
->
xfer_sect
,
2
));
ASC_PRT_NEXT
();
/* Scatter gather transfer statistics */
len
=
asc_prt_line
(
cp
,
leftlen
,
" avg_num_elem %lu.%01lu, "
,
seq_printf
(
m
,
" avg_num_elem %lu.%01lu, "
,
s
->
xfer_elem
/
s
->
xfer_cnt
,
ASC_TENTHS
(
s
->
xfer_elem
,
s
->
xfer_cnt
));
ASC_PRT_NEXT
();
len
=
asc_prt_line
(
cp
,
leftlen
,
"avg_elem_size %lu.%01lu kb, "
,
seq_printf
(
m
,
"avg_elem_size %lu.%01lu kb, "
,
(
s
->
xfer_sect
/
2
)
/
s
->
xfer_elem
,
ASC_TENTHS
((
s
->
xfer_sect
/
2
),
s
->
xfer_elem
));
ASC_PRT_NEXT
();
len
=
asc_prt_line
(
cp
,
leftlen
,
"avg_xfer_size %lu.%01lu kb
\n
"
,
seq_printf
(
m
,
"avg_xfer_size %lu.%01lu kb
\n
"
,
(
s
->
xfer_sect
/
2
)
/
s
->
xfer_cnt
,
ASC_TENTHS
((
s
->
xfer_sect
/
2
),
s
->
xfer_cnt
));
ASC_PRT_NEXT
();
}
return
totlen
;
}
#endif
/* ADVANSYS_STATS */
/*
* advansys_
proc
_info() - /proc/scsi/advansys/{0,1,2,3,...}
* advansys_
show
_info() - /proc/scsi/advansys/{0,1,2,3,...}
*
* *buffer: I/O buffer
* **start: if inout == FALSE pointer into buffer where user read should start
* offset: current offset into a /proc/scsi/advansys/[0...] file
* length: length of buffer
* hostno: Scsi_Host host_no
* inout: TRUE - user is writing; FALSE - user is reading
* m: seq_file to print into
* shost: Scsi_Host
*
* Return the number of bytes read from or written to a
* /proc/scsi/advansys/[0...] file.
*
* Note: This function uses the per board buffer 'prtbuf' which is
* allocated when the board is initialized in advansys_detect(). The
* buffer is ASC_PRTBUF_SIZE bytes. The function asc_proc_copy() is
* used to write to the buffer. The way asc_proc_copy() is written
* if 'prtbuf' is too small it will not be overwritten. Instead the
* user just won't get all the available statistics.
*/
static
int
advansys_proc_info
(
struct
Scsi_Host
*
shost
,
char
*
buffer
,
char
**
start
,
off_t
offset
,
int
length
,
int
inout
)
advansys_show_info
(
struct
seq_file
*
m
,
struct
Scsi_Host
*
shost
)
{
struct
asc_board
*
boardp
=
shost_priv
(
shost
);
char
*
cp
;
int
cplen
;
int
cnt
;
int
totcnt
;
int
leftlen
;
char
*
curbuf
;
off_t
advoffset
;
ASC_DBG
(
1
,
"begin
\n
"
);
/*
* User write not supported.
*/
if
(
inout
==
TRUE
)
return
-
ENOSYS
;
/*
* User read of /proc/scsi/advansys/[0...] file.
*/
/* Copy read data starting at the beginning of the buffer. */
*
start
=
buffer
;
curbuf
=
buffer
;
advoffset
=
0
;
totcnt
=
0
;
leftlen
=
length
;
/*
* Get board configuration information.
*
* advansys_info() returns the board string from its own static buffer.
*/
cp
=
(
char
*
)
advansys_info
(
shost
);
strcat
(
cp
,
"
\n
"
);
cplen
=
strlen
(
cp
);
/* Copy board information. */
cnt
=
asc_proc_copy
(
advoffset
,
offset
,
curbuf
,
leftlen
,
cp
,
cplen
);
totcnt
+=
cnt
;
leftlen
-=
cnt
;
if
(
leftlen
==
0
)
{
ASC_DBG
(
1
,
"totcnt %d
\n
"
,
totcnt
);
return
totcnt
;
}
advoffset
+=
cplen
;
curbuf
+=
cnt
;
seq_printf
(
m
,
"%s
\n
"
,
(
char
*
)
advansys_info
(
shost
));
/*
* Display Wide Board BIOS Information.
*/
if
(
!
ASC_NARROW_BOARD
(
boardp
))
{
cp
=
boardp
->
prtbuf
;
cplen
=
asc_prt_adv_bios
(
shost
,
cp
,
ASC_PRTBUF_SIZE
);
BUG_ON
(
cplen
>=
ASC_PRTBUF_SIZE
);
cnt
=
asc_proc_copy
(
advoffset
,
offset
,
curbuf
,
leftlen
,
cp
,
cplen
);
totcnt
+=
cnt
;
leftlen
-=
cnt
;
if
(
leftlen
==
0
)
{
ASC_DBG
(
1
,
"totcnt %d
\n
"
,
totcnt
);
return
totcnt
;
}
advoffset
+=
cplen
;
curbuf
+=
cnt
;
}
if
(
!
ASC_NARROW_BOARD
(
boardp
))
asc_prt_adv_bios
(
m
,
shost
);
/*
* Display driver information for each device attached to the board.
*/
cp
=
boardp
->
prtbuf
;
cplen
=
asc_prt_board_devices
(
shost
,
cp
,
ASC_PRTBUF_SIZE
);
BUG_ON
(
cplen
>=
ASC_PRTBUF_SIZE
);
cnt
=
asc_proc_copy
(
advoffset
,
offset
,
curbuf
,
leftlen
,
cp
,
cplen
);
totcnt
+=
cnt
;
leftlen
-=
cnt
;
if
(
leftlen
==
0
)
{
ASC_DBG
(
1
,
"totcnt %d
\n
"
,
totcnt
);
return
totcnt
;
}
advoffset
+=
cplen
;
curbuf
+=
cnt
;
asc_prt_board_devices
(
m
,
shost
);
/*
* Display EEPROM configuration for the board.
*/
cp
=
boardp
->
prtbuf
;
if
(
ASC_NARROW_BOARD
(
boardp
))
{
cplen
=
asc_prt_asc_board_eeprom
(
shost
,
cp
,
ASC_PRTBUF_SIZE
);
}
else
{
cplen
=
asc_prt_adv_board_eeprom
(
shost
,
cp
,
ASC_PRTBUF_SIZE
);
}
BUG_ON
(
cplen
>=
ASC_PRTBUF_SIZE
);
cnt
=
asc_proc_copy
(
advoffset
,
offset
,
curbuf
,
leftlen
,
cp
,
cplen
);
totcnt
+=
cnt
;
leftlen
-=
cnt
;
if
(
leftlen
==
0
)
{
ASC_DBG
(
1
,
"totcnt %d
\n
"
,
totcnt
);
return
totcnt
;
}
advoffset
+=
cplen
;
curbuf
+=
cnt
;
if
(
ASC_NARROW_BOARD
(
boardp
))
asc_prt_asc_board_eeprom
(
m
,
shost
);
else
asc_prt_adv_board_eeprom
(
m
,
shost
);
/*
* Display driver configuration and information for the board.
*/
cp
=
boardp
->
prtbuf
;
cplen
=
asc_prt_driver_conf
(
shost
,
cp
,
ASC_PRTBUF_SIZE
);
BUG_ON
(
cplen
>=
ASC_PRTBUF_SIZE
);
cnt
=
asc_proc_copy
(
advoffset
,
offset
,
curbuf
,
leftlen
,
cp
,
cplen
);
totcnt
+=
cnt
;
leftlen
-=
cnt
;
if
(
leftlen
==
0
)
{
ASC_DBG
(
1
,
"totcnt %d
\n
"
,
totcnt
);
return
totcnt
;
}
advoffset
+=
cplen
;
curbuf
+=
cnt
;
asc_prt_driver_conf
(
m
,
shost
);
#ifdef ADVANSYS_STATS
/*
* Display driver statistics for the board.
*/
cp
=
boardp
->
prtbuf
;
cplen
=
asc_prt_board_stats
(
shost
,
cp
,
ASC_PRTBUF_SIZE
);
BUG_ON
(
cplen
>=
ASC_PRTBUF_SIZE
);
cnt
=
asc_proc_copy
(
advoffset
,
offset
,
curbuf
,
leftlen
,
cp
,
cplen
);
totcnt
+=
cnt
;
leftlen
-=
cnt
;
if
(
leftlen
==
0
)
{
ASC_DBG
(
1
,
"totcnt %d
\n
"
,
totcnt
);
return
totcnt
;
}
advoffset
+=
cplen
;
curbuf
+=
cnt
;
asc_prt_board_stats
(
m
,
shost
);
#endif
/* ADVANSYS_STATS */
/*
* Display Asc Library dynamic configuration information
* for the board.
*/
cp
=
boardp
->
prtbuf
;
if
(
ASC_NARROW_BOARD
(
boardp
))
{
cplen
=
asc_prt_asc_board_info
(
shost
,
cp
,
ASC_PRTBUF_SIZE
);
}
else
{
cplen
=
asc_prt_adv_board_info
(
shost
,
cp
,
ASC_PRTBUF_SIZE
);
}
BUG_ON
(
cplen
>=
ASC_PRTBUF_SIZE
);
cnt
=
asc_proc_copy
(
advoffset
,
offset
,
curbuf
,
leftlen
,
cp
,
cplen
);
totcnt
+=
cnt
;
leftlen
-=
cnt
;
if
(
leftlen
==
0
)
{
ASC_DBG
(
1
,
"totcnt %d
\n
"
,
totcnt
);
return
totcnt
;
}
advoffset
+=
cplen
;
curbuf
+=
cnt
;
ASC_DBG
(
1
,
"totcnt %d
\n
"
,
totcnt
);
return
totcnt
;
if
(
ASC_NARROW_BOARD
(
boardp
))
asc_prt_asc_board_info
(
m
,
shost
);
else
asc_prt_adv_board_info
(
m
,
shost
);
return
0
;
}
#endif
/* CONFIG_PROC_FS */
...
...
@@ -11743,7 +11250,7 @@ static int AdvInitGetConfig(struct pci_dev *pdev, struct Scsi_Host *shost)
static
struct
scsi_host_template
advansys_template
=
{
.
proc_name
=
DRV_NAME
,
#ifdef CONFIG_PROC_FS
.
proc_info
=
advansys_proc
_info
,
.
show_info
=
advansys_show
_info
,
#endif
.
name
=
DRV_NAME
,
.
info
=
advansys_info
,
...
...
@@ -11939,20 +11446,6 @@ static int advansys_board_found(struct Scsi_Host *shost, unsigned int iop,
#endif
/* CONFIG_PCI */
}
#ifdef CONFIG_PROC_FS
/*
* Allocate buffer for printing information from
* /proc/scsi/advansys/[0...].
*/
boardp
->
prtbuf
=
kmalloc
(
ASC_PRTBUF_SIZE
,
GFP_KERNEL
);
if
(
!
boardp
->
prtbuf
)
{
shost_printk
(
KERN_ERR
,
shost
,
"kmalloc(%d) returned NULL
\n
"
,
ASC_PRTBUF_SIZE
);
ret
=
-
ENOMEM
;
goto
err_unmap
;
}
#endif
/* CONFIG_PROC_FS */
if
(
ASC_NARROW_BOARD
(
boardp
))
{
/*
* Set the board bus type and PCI IRQ before
...
...
@@ -12010,7 +11503,7 @@ static int advansys_board_found(struct Scsi_Host *shost, unsigned int iop,
}
if
(
ret
)
goto
err_
free_proc
;
goto
err_
unmap
;
/*
* Save the EEPROM configuration so that it can be displayed
...
...
@@ -12055,7 +11548,7 @@ static int advansys_board_found(struct Scsi_Host *shost, unsigned int iop,
ASC_DBG
(
2
,
"AscInitSetConfig()
\n
"
);
ret
=
AscInitSetConfig
(
pdev
,
shost
)
?
-
ENODEV
:
0
;
if
(
ret
)
goto
err_
free_proc
;
goto
err_
unmap
;
}
else
{
ADVEEP_3550_CONFIG
*
ep_3550
;
ADVEEP_38C0800_CONFIG
*
ep_38C0800
;
...
...
@@ -12290,7 +11783,7 @@ static int advansys_board_found(struct Scsi_Host *shost, unsigned int iop,
shost_printk
(
KERN_ERR
,
shost
,
"request_dma() "
"%d failed %d
\n
"
,
shost
->
dma_channel
,
ret
);
goto
err_
free_proc
;
goto
err_
unmap
;
}
AscEnableIsaDma
(
shost
->
dma_channel
);
}
...
...
@@ -12371,8 +11864,6 @@ static int advansys_board_found(struct Scsi_Host *shost, unsigned int iop,
if
(
shost
->
dma_channel
!=
NO_ISA_DMA
)
free_dma
(
shost
->
dma_channel
);
#endif
err_free_proc:
kfree
(
boardp
->
prtbuf
);
err_unmap:
if
(
boardp
->
ioremap_addr
)
iounmap
(
boardp
->
ioremap_addr
);
...
...
@@ -12406,7 +11897,6 @@ static int advansys_release(struct Scsi_Host *shost)
iounmap
(
board
->
ioremap_addr
);
advansys_wide_free_mem
(
board
);
}
kfree
(
board
->
prtbuf
);
scsi_host_put
(
shost
);
ASC_DBG
(
1
,
"end
\n
"
);
return
0
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment