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
6b3a8bbf
Commit
6b3a8bbf
authored
Mar 31, 2013
by
Al Viro
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
aic7xxx: switch to ->show_info()
Signed-off-by:
Al Viro
<
viro@zeniv.linux.org.uk
>
parent
f6f83a6c
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
48 additions
and
126 deletions
+48
-126
drivers/scsi/aic7xxx/aic7xxx_osm.c
drivers/scsi/aic7xxx/aic7xxx_osm.c
+2
-7
drivers/scsi/aic7xxx/aic7xxx_osm.h
drivers/scsi/aic7xxx/aic7xxx_osm.h
+2
-10
drivers/scsi/aic7xxx/aic7xxx_proc.c
drivers/scsi/aic7xxx/aic7xxx_proc.c
+44
-109
No files found.
drivers/scsi/aic7xxx/aic7xxx_osm.c
View file @
6b3a8bbf
...
@@ -803,7 +803,8 @@ struct scsi_host_template aic7xxx_driver_template = {
...
@@ -803,7 +803,8 @@ struct scsi_host_template aic7xxx_driver_template = {
.
module
=
THIS_MODULE
,
.
module
=
THIS_MODULE
,
.
name
=
"aic7xxx"
,
.
name
=
"aic7xxx"
,
.
proc_name
=
"aic7xxx"
,
.
proc_name
=
"aic7xxx"
,
.
proc_info
=
ahc_linux_proc_info
,
.
show_info
=
ahc_linux_show_info
,
.
write_info
=
ahc_proc_write_seeprom
,
.
info
=
ahc_linux_info
,
.
info
=
ahc_linux_info
,
.
queuecommand
=
ahc_linux_queue
,
.
queuecommand
=
ahc_linux_queue
,
.
eh_abort_handler
=
ahc_linux_abort
,
.
eh_abort_handler
=
ahc_linux_abort
,
...
@@ -1631,10 +1632,8 @@ ahc_send_async(struct ahc_softc *ahc, char channel,
...
@@ -1631,10 +1632,8 @@ ahc_send_async(struct ahc_softc *ahc, char channel,
switch
(
code
)
{
switch
(
code
)
{
case
AC_TRANSFER_NEG
:
case
AC_TRANSFER_NEG
:
{
{
char
buf
[
80
];
struct
scsi_target
*
starget
;
struct
scsi_target
*
starget
;
struct
ahc_linux_target
*
targ
;
struct
ahc_linux_target
*
targ
;
struct
info_str
info
;
struct
ahc_initiator_tinfo
*
tinfo
;
struct
ahc_initiator_tinfo
*
tinfo
;
struct
ahc_tmode_tstate
*
tstate
;
struct
ahc_tmode_tstate
*
tstate
;
int
target_offset
;
int
target_offset
;
...
@@ -1642,10 +1641,6 @@ ahc_send_async(struct ahc_softc *ahc, char channel,
...
@@ -1642,10 +1641,6 @@ ahc_send_async(struct ahc_softc *ahc, char channel,
BUG_ON
(
target
==
CAM_TARGET_WILDCARD
);
BUG_ON
(
target
==
CAM_TARGET_WILDCARD
);
info
.
buffer
=
buf
;
info
.
length
=
sizeof
(
buf
);
info
.
offset
=
0
;
info
.
pos
=
0
;
tinfo
=
ahc_fetch_transinfo
(
ahc
,
channel
,
tinfo
=
ahc_fetch_transinfo
(
ahc
,
channel
,
channel
==
'A'
?
ahc
->
our_id
channel
==
'A'
?
ahc
->
our_id
:
ahc
->
our_id_b
,
:
ahc
->
our_id_b
,
...
...
drivers/scsi/aic7xxx/aic7xxx_osm.h
View file @
6b3a8bbf
...
@@ -383,14 +383,6 @@ void ahc_insb(struct ahc_softc * ahc, long port,
...
@@ -383,14 +383,6 @@ void ahc_insb(struct ahc_softc * ahc, long port,
int
ahc_linux_register_host
(
struct
ahc_softc
*
,
int
ahc_linux_register_host
(
struct
ahc_softc
*
,
struct
scsi_host_template
*
);
struct
scsi_host_template
*
);
/*************************** Pretty Printing **********************************/
struct
info_str
{
char
*
buffer
;
int
length
;
off_t
offset
;
int
pos
;
};
/******************************** Locking *************************************/
/******************************** Locking *************************************/
/* Lock protecting internal data structures */
/* Lock protecting internal data structures */
...
@@ -523,8 +515,8 @@ ahc_flush_device_writes(struct ahc_softc *ahc)
...
@@ -523,8 +515,8 @@ ahc_flush_device_writes(struct ahc_softc *ahc)
}
}
/**************************** Proc FS Support *********************************/
/**************************** Proc FS Support *********************************/
int
ahc_
linux_proc_info
(
struct
Scsi_Host
*
,
char
*
,
char
**
,
int
ahc_
proc_write_seeprom
(
struct
Scsi_Host
*
,
char
*
,
int
);
off_t
,
int
,
int
);
int
ahc_linux_show_info
(
struct
seq_file
*
,
struct
Scsi_Host
*
);
/*************************** Domain Validation ********************************/
/*************************** Domain Validation ********************************/
/*********************** Transaction Access Wrappers *************************/
/*********************** Transaction Access Wrappers *************************/
...
...
drivers/scsi/aic7xxx/aic7xxx_proc.c
View file @
6b3a8bbf
...
@@ -43,16 +43,12 @@
...
@@ -43,16 +43,12 @@
#include "aic7xxx_inline.h"
#include "aic7xxx_inline.h"
#include "aic7xxx_93cx6.h"
#include "aic7xxx_93cx6.h"
static
void
copy_mem_info
(
struct
info_str
*
info
,
char
*
data
,
int
len
);
static
int
copy_info
(
struct
info_str
*
info
,
char
*
fmt
,
...);
static
void
ahc_dump_target_state
(
struct
ahc_softc
*
ahc
,
static
void
ahc_dump_target_state
(
struct
ahc_softc
*
ahc
,
struct
info_str
*
info
,
struct
seq_file
*
m
,
u_int
our_id
,
char
channel
,
u_int
our_id
,
char
channel
,
u_int
target_id
,
u_int
target_offset
);
u_int
target_id
,
u_int
target_offset
);
static
void
ahc_dump_device_state
(
struct
info_str
*
info
,
static
void
ahc_dump_device_state
(
struct
seq_file
*
m
,
struct
scsi_device
*
dev
);
struct
scsi_device
*
dev
);
static
int
ahc_proc_write_seeprom
(
struct
ahc_softc
*
ahc
,
char
*
buffer
,
int
length
);
/*
/*
* Table of syncrates that don't follow the "divisible by 4"
* Table of syncrates that don't follow the "divisible by 4"
...
@@ -94,51 +90,8 @@ ahc_calc_syncsrate(u_int period_factor)
...
@@ -94,51 +90,8 @@ ahc_calc_syncsrate(u_int period_factor)
return
(
10000000
/
(
period_factor
*
4
*
10
));
return
(
10000000
/
(
period_factor
*
4
*
10
));
}
}
static
void
copy_mem_info
(
struct
info_str
*
info
,
char
*
data
,
int
len
)
{
if
(
info
->
pos
+
len
>
info
->
offset
+
info
->
length
)
len
=
info
->
offset
+
info
->
length
-
info
->
pos
;
if
(
info
->
pos
+
len
<
info
->
offset
)
{
info
->
pos
+=
len
;
return
;
}
if
(
info
->
pos
<
info
->
offset
)
{
off_t
partial
;
partial
=
info
->
offset
-
info
->
pos
;
data
+=
partial
;
info
->
pos
+=
partial
;
len
-=
partial
;
}
if
(
len
>
0
)
{
memcpy
(
info
->
buffer
,
data
,
len
);
info
->
pos
+=
len
;
info
->
buffer
+=
len
;
}
}
static
int
copy_info
(
struct
info_str
*
info
,
char
*
fmt
,
...)
{
va_list
args
;
char
buf
[
256
];
int
len
;
va_start
(
args
,
fmt
);
len
=
vsprintf
(
buf
,
fmt
,
args
);
va_end
(
args
);
copy_mem_info
(
info
,
buf
,
len
);
return
(
len
);
}
static
void
static
void
ahc_format_transinfo
(
struct
info_str
*
info
,
struct
ahc_transinfo
*
tinfo
)
ahc_format_transinfo
(
struct
seq_file
*
m
,
struct
ahc_transinfo
*
tinfo
)
{
{
u_int
speed
;
u_int
speed
;
u_int
freq
;
u_int
freq
;
...
@@ -153,12 +106,12 @@ ahc_format_transinfo(struct info_str *info, struct ahc_transinfo *tinfo)
...
@@ -153,12 +106,12 @@ ahc_format_transinfo(struct info_str *info, struct ahc_transinfo *tinfo)
speed
*=
(
0x01
<<
tinfo
->
width
);
speed
*=
(
0x01
<<
tinfo
->
width
);
mb
=
speed
/
1000
;
mb
=
speed
/
1000
;
if
(
mb
>
0
)
if
(
mb
>
0
)
copy_info
(
info
,
"%d.%03dMB/s transfers"
,
mb
,
speed
%
1000
);
seq_printf
(
m
,
"%d.%03dMB/s transfers"
,
mb
,
speed
%
1000
);
else
else
copy_info
(
info
,
"%dKB/s transfers"
,
speed
);
seq_printf
(
m
,
"%dKB/s transfers"
,
speed
);
if
(
freq
!=
0
)
{
if
(
freq
!=
0
)
{
copy_info
(
info
,
" (%d.%03dMHz%s, offset %d"
,
seq_printf
(
m
,
" (%d.%03dMHz%s, offset %d"
,
freq
/
1000
,
freq
%
1000
,
freq
/
1000
,
freq
%
1000
,
(
tinfo
->
ppr_options
&
MSG_EXT_PPR_DT_REQ
)
!=
0
(
tinfo
->
ppr_options
&
MSG_EXT_PPR_DT_REQ
)
!=
0
?
" DT"
:
""
,
tinfo
->
offset
);
?
" DT"
:
""
,
tinfo
->
offset
);
...
@@ -166,19 +119,19 @@ ahc_format_transinfo(struct info_str *info, struct ahc_transinfo *tinfo)
...
@@ -166,19 +119,19 @@ ahc_format_transinfo(struct info_str *info, struct ahc_transinfo *tinfo)
if
(
tinfo
->
width
>
0
)
{
if
(
tinfo
->
width
>
0
)
{
if
(
freq
!=
0
)
{
if
(
freq
!=
0
)
{
copy_info
(
info
,
", "
);
seq_printf
(
m
,
", "
);
}
else
{
}
else
{
copy_info
(
info
,
" ("
);
seq_printf
(
m
,
" ("
);
}
}
copy_info
(
info
,
"%dbit)"
,
8
*
(
0x01
<<
tinfo
->
width
));
seq_printf
(
m
,
"%dbit)"
,
8
*
(
0x01
<<
tinfo
->
width
));
}
else
if
(
freq
!=
0
)
{
}
else
if
(
freq
!=
0
)
{
copy_info
(
info
,
")"
);
seq_printf
(
m
,
")"
);
}
}
copy_info
(
info
,
"
\n
"
);
seq_printf
(
m
,
"
\n
"
);
}
}
static
void
static
void
ahc_dump_target_state
(
struct
ahc_softc
*
ahc
,
struct
info_str
*
info
,
ahc_dump_target_state
(
struct
ahc_softc
*
ahc
,
struct
seq_file
*
m
,
u_int
our_id
,
char
channel
,
u_int
target_id
,
u_int
our_id
,
char
channel
,
u_int
target_id
,
u_int
target_offset
)
u_int
target_offset
)
{
{
...
@@ -190,18 +143,18 @@ ahc_dump_target_state(struct ahc_softc *ahc, struct info_str *info,
...
@@ -190,18 +143,18 @@ ahc_dump_target_state(struct ahc_softc *ahc, struct info_str *info,
tinfo
=
ahc_fetch_transinfo
(
ahc
,
channel
,
our_id
,
tinfo
=
ahc_fetch_transinfo
(
ahc
,
channel
,
our_id
,
target_id
,
&
tstate
);
target_id
,
&
tstate
);
if
((
ahc
->
features
&
AHC_TWIN
)
!=
0
)
if
((
ahc
->
features
&
AHC_TWIN
)
!=
0
)
copy_info
(
info
,
"Channel %c "
,
channel
);
seq_printf
(
m
,
"Channel %c "
,
channel
);
copy_info
(
info
,
"Target %d Negotiation Settings
\n
"
,
target_id
);
seq_printf
(
m
,
"Target %d Negotiation Settings
\n
"
,
target_id
);
copy_info
(
info
,
"
\t
User: "
);
seq_printf
(
m
,
"
\t
User: "
);
ahc_format_transinfo
(
info
,
&
tinfo
->
user
);
ahc_format_transinfo
(
m
,
&
tinfo
->
user
);
starget
=
ahc
->
platform_data
->
starget
[
target_offset
];
starget
=
ahc
->
platform_data
->
starget
[
target_offset
];
if
(
!
starget
)
if
(
!
starget
)
return
;
return
;
copy_info
(
info
,
"
\t
Goal: "
);
seq_printf
(
m
,
"
\t
Goal: "
);
ahc_format_transinfo
(
info
,
&
tinfo
->
goal
);
ahc_format_transinfo
(
m
,
&
tinfo
->
goal
);
copy_info
(
info
,
"
\t
Curr: "
);
seq_printf
(
m
,
"
\t
Curr: "
);
ahc_format_transinfo
(
info
,
&
tinfo
->
curr
);
ahc_format_transinfo
(
m
,
&
tinfo
->
curr
);
for
(
lun
=
0
;
lun
<
AHC_NUM_LUNS
;
lun
++
)
{
for
(
lun
=
0
;
lun
<
AHC_NUM_LUNS
;
lun
++
)
{
struct
scsi_device
*
sdev
;
struct
scsi_device
*
sdev
;
...
@@ -211,29 +164,30 @@ ahc_dump_target_state(struct ahc_softc *ahc, struct info_str *info,
...
@@ -211,29 +164,30 @@ ahc_dump_target_state(struct ahc_softc *ahc, struct info_str *info,
if
(
sdev
==
NULL
)
if
(
sdev
==
NULL
)
continue
;
continue
;
ahc_dump_device_state
(
info
,
sdev
);
ahc_dump_device_state
(
m
,
sdev
);
}
}
}
}
static
void
static
void
ahc_dump_device_state
(
struct
info_str
*
info
,
struct
scsi_device
*
sdev
)
ahc_dump_device_state
(
struct
seq_file
*
m
,
struct
scsi_device
*
sdev
)
{
{
struct
ahc_linux_device
*
dev
=
scsi_transport_device_data
(
sdev
);
struct
ahc_linux_device
*
dev
=
scsi_transport_device_data
(
sdev
);
copy_info
(
info
,
"
\t
Channel %c Target %d Lun %d Settings
\n
"
,
seq_printf
(
m
,
"
\t
Channel %c Target %d Lun %d Settings
\n
"
,
sdev
->
sdev_target
->
channel
+
'A'
,
sdev
->
sdev_target
->
channel
+
'A'
,
sdev
->
sdev_target
->
id
,
sdev
->
lun
);
sdev
->
sdev_target
->
id
,
sdev
->
lun
);
copy_info
(
info
,
"
\t\t
Commands Queued %ld
\n
"
,
dev
->
commands_issued
);
seq_printf
(
m
,
"
\t\t
Commands Queued %ld
\n
"
,
dev
->
commands_issued
);
copy_info
(
info
,
"
\t\t
Commands Active %d
\n
"
,
dev
->
active
);
seq_printf
(
m
,
"
\t\t
Commands Active %d
\n
"
,
dev
->
active
);
copy_info
(
info
,
"
\t\t
Command Openings %d
\n
"
,
dev
->
openings
);
seq_printf
(
m
,
"
\t\t
Command Openings %d
\n
"
,
dev
->
openings
);
copy_info
(
info
,
"
\t\t
Max Tagged Openings %d
\n
"
,
dev
->
maxtags
);
seq_printf
(
m
,
"
\t\t
Max Tagged Openings %d
\n
"
,
dev
->
maxtags
);
copy_info
(
info
,
"
\t\t
Device Queue Frozen Count %d
\n
"
,
dev
->
qfrozen
);
seq_printf
(
m
,
"
\t\t
Device Queue Frozen Count %d
\n
"
,
dev
->
qfrozen
);
}
}
static
int
int
ahc_proc_write_seeprom
(
struct
ahc_softc
*
ahc
,
char
*
buffer
,
int
length
)
ahc_proc_write_seeprom
(
struct
Scsi_Host
*
shost
,
char
*
buffer
,
int
length
)
{
{
struct
ahc_softc
*
ahc
=
*
(
struct
ahc_softc
**
)
shost
->
hostdata
;
struct
seeprom_descriptor
sd
;
struct
seeprom_descriptor
sd
;
int
have_seeprom
;
int
have_seeprom
;
u_long
s
;
u_long
s
;
...
@@ -332,53 +286,36 @@ ahc_proc_write_seeprom(struct ahc_softc *ahc, char *buffer, int length)
...
@@ -332,53 +286,36 @@ ahc_proc_write_seeprom(struct ahc_softc *ahc, char *buffer, int length)
* Return information to handle /proc support for the driver.
* Return information to handle /proc support for the driver.
*/
*/
int
int
ahc_linux_proc_info
(
struct
Scsi_Host
*
shost
,
char
*
buffer
,
char
**
start
,
ahc_linux_show_info
(
struct
seq_file
*
m
,
struct
Scsi_Host
*
shost
)
off_t
offset
,
int
length
,
int
inout
)
{
{
struct
ahc_softc
*
ahc
=
*
(
struct
ahc_softc
**
)
shost
->
hostdata
;
struct
ahc_softc
*
ahc
=
*
(
struct
ahc_softc
**
)
shost
->
hostdata
;
struct
info_str
info
;
char
ahc_info
[
256
];
char
ahc_info
[
256
];
u_int
max_targ
;
u_int
max_targ
;
u_int
i
;
u_int
i
;
int
retval
;
/* Has data been written to the file? */
seq_printf
(
m
,
"Adaptec AIC7xxx driver version: %s
\n
"
,
if
(
inout
==
TRUE
)
{
retval
=
ahc_proc_write_seeprom
(
ahc
,
buffer
,
length
);
goto
done
;
}
if
(
start
)
*
start
=
buffer
;
info
.
buffer
=
buffer
;
info
.
length
=
length
;
info
.
offset
=
offset
;
info
.
pos
=
0
;
copy_info
(
&
info
,
"Adaptec AIC7xxx driver version: %s
\n
"
,
AIC7XXX_DRIVER_VERSION
);
AIC7XXX_DRIVER_VERSION
);
copy_info
(
&
info
,
"%s
\n
"
,
ahc
->
description
);
seq_printf
(
m
,
"%s
\n
"
,
ahc
->
description
);
ahc_controller_info
(
ahc
,
ahc_info
);
ahc_controller_info
(
ahc
,
ahc_info
);
copy_info
(
&
info
,
"%s
\n
"
,
ahc_info
);
seq_printf
(
m
,
"%s
\n
"
,
ahc_info
);
copy_info
(
&
info
,
"Allocated SCBs: %d, SG List Length: %d
\n\n
"
,
seq_printf
(
m
,
"Allocated SCBs: %d, SG List Length: %d
\n\n
"
,
ahc
->
scb_data
->
numscbs
,
AHC_NSEG
);
ahc
->
scb_data
->
numscbs
,
AHC_NSEG
);
if
(
ahc
->
seep_config
==
NULL
)
if
(
ahc
->
seep_config
==
NULL
)
copy_info
(
&
info
,
"No Serial EEPROM
\n
"
);
seq_printf
(
m
,
"No Serial EEPROM
\n
"
);
else
{
else
{
copy_info
(
&
info
,
"Serial EEPROM:
\n
"
);
seq_printf
(
m
,
"Serial EEPROM:
\n
"
);
for
(
i
=
0
;
i
<
sizeof
(
*
ahc
->
seep_config
)
/
2
;
i
++
)
{
for
(
i
=
0
;
i
<
sizeof
(
*
ahc
->
seep_config
)
/
2
;
i
++
)
{
if
(((
i
%
8
)
==
0
)
&&
(
i
!=
0
))
{
if
(((
i
%
8
)
==
0
)
&&
(
i
!=
0
))
{
copy_info
(
&
info
,
"
\n
"
);
seq_printf
(
m
,
"
\n
"
);
}
}
copy_info
(
&
info
,
"0x%.4x "
,
seq_printf
(
m
,
"0x%.4x "
,
((
uint16_t
*
)
ahc
->
seep_config
)[
i
]);
((
uint16_t
*
)
ahc
->
seep_config
)[
i
]);
}
}
copy_info
(
&
info
,
"
\n
"
);
seq_printf
(
m
,
"
\n
"
);
}
}
copy_info
(
&
info
,
"
\n
"
);
seq_printf
(
m
,
"
\n
"
);
max_targ
=
16
;
max_targ
=
16
;
if
((
ahc
->
features
&
(
AHC_WIDE
|
AHC_TWIN
))
==
0
)
if
((
ahc
->
features
&
(
AHC_WIDE
|
AHC_TWIN
))
==
0
)
...
@@ -398,10 +335,8 @@ ahc_linux_proc_info(struct Scsi_Host *shost, char *buffer, char **start,
...
@@ -398,10 +335,8 @@ ahc_linux_proc_info(struct Scsi_Host *shost, char *buffer, char **start,
target_id
=
i
%
8
;
target_id
=
i
%
8
;
}
}
ahc_dump_target_state
(
ahc
,
&
info
,
our_id
,
ahc_dump_target_state
(
ahc
,
m
,
our_id
,
channel
,
target_id
,
i
);
channel
,
target_id
,
i
);
}
}
retval
=
info
.
pos
>
info
.
offset
?
info
.
pos
-
info
.
offset
:
0
;
return
0
;
done:
return
(
retval
);
}
}
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