Date: Thu, 6 Feb 1997 09:39:32 -0500 (EST) From: Peter Dufault <dufault@hda.com> To: scsi@freebsd.org Subject: new scsi(8) Message-ID: <199702061439.JAA00390@hda.hda.com>
next in thread | raw e-mail | index | archive | help
All the talk about defects, etc, convinced me to dust off something
I started way back and release it for comments. I've put a
new scsi(8) and scsi(3) on freefall in ~ftp/incoming for review
and feedback:
> scsinew.tgz
Here is the README:
This is a feedback release of a rewrite of scsi(8) to add commands
to the equivalent of the modes data base and to be better suited
for being driven by external programs. It includes a sample Tk
application that attempts to display the cylinder zones and defects
on a disk drive. Note that Joerg reports the defect reading hangs
one of his drives, so be careful.
The new scsi(8) program adds these switches:
> scsi [-S style] -I # To enter commands interactively
> "style" can be "tcl" for tcl list oriented output
> scsi -C capfile # To load a cap file
> "-C capfile" can occur as often as you want.
The program now tries to load both scsi_modes and scsi_caps. These
files can have entries such as:
> # ndefects plist glist
> ndefects "37 0 0:3 {plist} v:1 {vlist} v:1 5:3 0 0 0 0 4:i2 0" \
> -i 4 "*i2 {Defect list length} i2"
>
> # defects plist glist size
> defects "37 0 0:3 {plist} v:1 {vlist} v:1 5:3 0 0 0 0 {xfer} v:i2 0" \
> -i v "s4 ( {Cylinder} i3 {Head} i1 {Sector} i4)"
(Note: infinite loops are added in formats with parenthesis that will loop
until data is exhausted)
Using the TCL style these will work like this:
> rt# ./scsinew -f sd0 -S tcl -C caps -I
> scsi> ndefects 1 1
> 80
> scsi> defects 80 1 1 80
> {771 0 18} {771 0 19} {1671 4 87} {1703 3 80} {1704 3 80} {1704 3 81}
{1866 1 95} {1922 0 47} {1932 3 33} {2184 3 0}
> scsi>
and the verbose TCL style:
> rt# !! -v
> ./scsinew -f sd0 -S tcl -C caps -I -v
> scsi> ndefects 1 1
> { {Defect list length} 80}
> scsi> defects 80 1 1 80
> {{ {Cylinder} 771} { {Head} 0} { {Sector} 18} } {{ {Cylinder} 771}
{ {Head} 0} { {Sector} 19} } {{ {Cylinder} 1671} { {Head} 4}
{ {Sector} 87} } {{ {Cylinder} 1703} { {Head} 3} { {Sector} 80} }
{{ {Cylinder} 1704} { {Head} 3} { {Sector} 80} } {{ {Cylinder} 1704}
{ {Head} 3} { {Sector} 81} } {{ {Cylinder} 1866} { {Head} 1}
{ {Sector} 95} } {{ {Cylinder} 1922} { {Head} 0} { {Sector} 47} }
{{ {Cylinder} 1932} { {Head} 3} { {Sector} 33} } {{ {Cylinder} 2184}
{ {Head} 3} { {Sector} 0} }
> scsi>
(the line wrap is artificial)
Some things to look at:
1. In cmd.c I turned off the noise that echoed arguments back in verbose
mode. I don't think this is needed. Look for "if 0"
2. Loops shouldn't have to be infinite.
3. I should decide how to handle errors in non-default style.
The current setup is not appropriate for begin driven by another
program. For example, for a TCL style output we may want to go to:
0 { ... }
Where the 0 is the error result and the { ... } is the current decoded
output. Then on error you may have:
64 { sense }
or something
--
Peter Dufault (dufault@hda.com) Realtime Machine Control and Simulation
HD Associates, Inc. Voice: 508 433 6936
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?199702061439.JAA00390>
