Blame


1 058b0118 2005-01-03 devnull .TH SCSI 3
2 058b0118 2005-01-03 devnull .SH NAME
3 058b0118 2005-01-03 devnull openscsi, scsiready, scsi, scsicmd, scsierror \- SCSI device operations
4 058b0118 2005-01-03 devnull .SH SYNOPSIS
5 058b0118 2005-01-03 devnull .nf
6 058b0118 2005-01-03 devnull .ft L
7 058b0118 2005-01-03 devnull #include <u.h>
8 058b0118 2005-01-03 devnull #include <libc.h>
9 058b0118 2005-01-03 devnull #include <disk.h>
10 058b0118 2005-01-03 devnull .ft
11 058b0118 2005-01-03 devnull .PP
12 058b0118 2005-01-03 devnull .ft L
13 058b0118 2005-01-03 devnull typedef struct Scsi {
14 058b0118 2005-01-03 devnull char *inquire;
15 058b0118 2005-01-03 devnull int rawfd;
16 058b0118 2005-01-03 devnull int nchange;
17 058b0118 2005-01-03 devnull ulong changetime;
18 058b0118 2005-01-03 devnull };
19 058b0118 2005-01-03 devnull .ft
20 058b0118 2005-01-03 devnull .PP
21 058b0118 2005-01-03 devnull .B
22 058b0118 2005-01-03 devnull Scsi* openscsi(char *devdir)
23 058b0118 2005-01-03 devnull .PP
24 058b0118 2005-01-03 devnull .B
25 058b0118 2005-01-03 devnull void closescsi(Scsi *s)
26 058b0118 2005-01-03 devnull .PP
27 058b0118 2005-01-03 devnull .B
28 058b0118 2005-01-03 devnull int scsiready(Scsi *s)
29 058b0118 2005-01-03 devnull .PP
30 058b0118 2005-01-03 devnull .B
31 058b0118 2005-01-03 devnull int scsi(Scsi *s, uchar *cmd, int ncmd,
32 058b0118 2005-01-03 devnull .br
33 058b0118 2005-01-03 devnull void *data, int ndata, int dir)
34 058b0118 2005-01-03 devnull .PP
35 058b0118 2005-01-03 devnull .B
36 058b0118 2005-01-03 devnull int scsicmd(Scsi *s, uchar *cmd, int ncmd,
37 058b0118 2005-01-03 devnull .br
38 058b0118 2005-01-03 devnull void *data, int ndata, int dir)
39 058b0118 2005-01-03 devnull .PP
40 058b0118 2005-01-03 devnull .B
41 058b0118 2005-01-03 devnull char* scsierror(int asc, int ascq)
42 058b0118 2005-01-03 devnull .PP
43 058b0118 2005-01-03 devnull .B
44 058b0118 2005-01-03 devnull int scsiverbose;
45 058b0118 2005-01-03 devnull .SH DESCRIPTION
46 058b0118 2005-01-03 devnull These routines provide an interface
47 058b0118 2005-01-03 devnull to a SCSI or ATAPI device via Plan 9's
48 058b0118 2005-01-03 devnull \fIsd\fR(3).
49 058b0118 2005-01-03 devnull .PP
50 058b0118 2005-01-03 devnull .I Openscsi
51 058b0118 2005-01-03 devnull attempts to open the file
52 058b0118 2005-01-03 devnull .IB devdir /raw
53 058b0118 2005-01-03 devnull and use it to send raw SCSI commands.
54 058b0118 2005-01-03 devnull On success, it reads the device's inquiry
55 058b0118 2005-01-03 devnull string and stores it in in returned
56 058b0118 2005-01-03 devnull .B Scsi
57 058b0118 2005-01-03 devnull structure.
58 058b0118 2005-01-03 devnull .I Closescsi
59 058b0118 2005-01-03 devnull closes the connection and frees the
60 058b0118 2005-01-03 devnull .B Scsi
61 058b0118 2005-01-03 devnull structure.
62 058b0118 2005-01-03 devnull .PP
63 058b0118 2005-01-03 devnull .I Scsiready
64 058b0118 2005-01-03 devnull sends the ``unit ready'' command up to three times,
65 058b0118 2005-01-03 devnull returning zero if the unit responds that it is ready,
66 058b0118 2005-01-03 devnull or \-1 on error.
67 058b0118 2005-01-03 devnull .PP
68 058b0118 2005-01-03 devnull .I Scsierror
69 058b0118 2005-01-03 devnull returns a textual description of the SCSI status
70 058b0118 2005-01-03 devnull denoted by the ASC and ASCQ sense codes.
71 058b0118 2005-01-03 devnull The description is found by consulting
72 058b0118 2005-01-03 devnull .BR /sys/lib/scsicodes .
73 058b0118 2005-01-03 devnull The returned string will be overwritten by
74 058b0118 2005-01-03 devnull the next call to
75 058b0118 2005-01-03 devnull .IR scsierror .
76 058b0118 2005-01-03 devnull .PP
77 058b0118 2005-01-03 devnull .I Scsi
78 058b0118 2005-01-03 devnull and
79 058b0118 2005-01-03 devnull .I scsicmd
80 058b0118 2005-01-03 devnull execute a single SCSI command on the named device.
81 058b0118 2005-01-03 devnull There should be
82 058b0118 2005-01-03 devnull .I ncmd
83 058b0118 2005-01-03 devnull bytes of
84 058b0118 2005-01-03 devnull command data in
85 058b0118 2005-01-03 devnull .IR cmd ;
86 058b0118 2005-01-03 devnull if
87 058b0118 2005-01-03 devnull .I dir
88 058b0118 2005-01-03 devnull is
89 058b0118 2005-01-03 devnull .BR Sread ,
90 058b0118 2005-01-03 devnull a successful operation
91 058b0118 2005-01-03 devnull will store up to
92 058b0118 2005-01-03 devnull .I ndata
93 058b0118 2005-01-03 devnull bytes into
94 058b0118 2005-01-03 devnull .IR data ,
95 058b0118 2005-01-03 devnull returning the number of bytes stored.
96 058b0118 2005-01-03 devnull If
97 058b0118 2005-01-03 devnull .I dir
98 058b0118 2005-01-03 devnull is
99 058b0118 2005-01-03 devnull .BR Swrite ,
100 058b0118 2005-01-03 devnull the
101 058b0118 2005-01-03 devnull .I ndata
102 058b0118 2005-01-03 devnull bytes beginning at
103 058b0118 2005-01-03 devnull .I data
104 058b0118 2005-01-03 devnull are transmitted as the data argument to
105 058b0118 2005-01-03 devnull the command, and the
106 058b0118 2005-01-03 devnull number of bytes written is returned.
107 058b0118 2005-01-03 devnull If
108 058b0118 2005-01-03 devnull .I dir
109 058b0118 2005-01-03 devnull is
110 058b0118 2005-01-03 devnull .BR Snone ,
111 058b0118 2005-01-03 devnull .I data
112 058b0118 2005-01-03 devnull and
113 058b0118 2005-01-03 devnull .I ndata
114 058b0118 2005-01-03 devnull are ignored.
115 058b0118 2005-01-03 devnull On error,
116 058b0118 2005-01-03 devnull .I scsi
117 058b0118 2005-01-03 devnull and
118 058b0118 2005-01-03 devnull .I scsicmd
119 058b0118 2005-01-03 devnull return \-1.
120 058b0118 2005-01-03 devnull .I Scsicmd
121 058b0118 2005-01-03 devnull simply issues the command and
122 058b0118 2005-01-03 devnull returns the result;
123 058b0118 2005-01-03 devnull .I scsi
124 058b0118 2005-01-03 devnull works a bit harder and
125 058b0118 2005-01-03 devnull is the more commonly used routine.
126 058b0118 2005-01-03 devnull .I Scsi
127 058b0118 2005-01-03 devnull attempts to send the command;
128 058b0118 2005-01-03 devnull if it is successful,
129 058b0118 2005-01-03 devnull .I scsi
130 058b0118 2005-01-03 devnull returns what
131 058b0118 2005-01-03 devnull .I scsicmd
132 058b0118 2005-01-03 devnull returned.
133 058b0118 2005-01-03 devnull Otherwise,
134 058b0118 2005-01-03 devnull .I scsi
135 058b0118 2005-01-03 devnull sends a request sense command to
136 058b0118 2005-01-03 devnull obtain the reason for the failure,
137 058b0118 2005-01-03 devnull sends a unit ready command in
138 058b0118 2005-01-03 devnull an attempt to bring the unit out of any
139 058b0118 2005-01-03 devnull inconsistent states, and tries again.
140 058b0118 2005-01-03 devnull If the second try fails,
141 058b0118 2005-01-03 devnull .I scsi
142 058b0118 2005-01-03 devnull sends the request
143 058b0118 2005-01-03 devnull sense and unit ready commands
144 058b0118 2005-01-03 devnull again
145 058b0118 2005-01-03 devnull and then uses
146 058b0118 2005-01-03 devnull .I scsierror
147 058b0118 2005-01-03 devnull to set
148 058b0118 2005-01-03 devnull .I errstr
149 058b0118 2005-01-03 devnull with a reason for failure.
150 058b0118 2005-01-03 devnull .PP
151 058b0118 2005-01-03 devnull The
152 058b0118 2005-01-03 devnull .B nchange
153 058b0118 2005-01-03 devnull and
154 058b0118 2005-01-03 devnull .B changetime
155 058b0118 2005-01-03 devnull fields
156 058b0118 2005-01-03 devnull in the
157 058b0118 2005-01-03 devnull .B Scsi
158 058b0118 2005-01-03 devnull structure
159 058b0118 2005-01-03 devnull record the number of times a media
160 058b0118 2005-01-03 devnull change has been detected, and the
161 058b0118 2005-01-03 devnull time when the current media was
162 058b0118 2005-01-03 devnull inserted into the drive (really the
163 058b0118 2005-01-03 devnull first time a SCSI command was issued
164 058b0118 2005-01-03 devnull after it was inserted).
165 058b0118 2005-01-03 devnull They are maintained by
166 058b0118 2005-01-03 devnull .IR scsi .
167 058b0118 2005-01-03 devnull .PP
168 058b0118 2005-01-03 devnull If
169 058b0118 2005-01-03 devnull .I scsiverbose
170 058b0118 2005-01-03 devnull is set,
171 058b0118 2005-01-03 devnull these commands will produce a fair
172 058b0118 2005-01-03 devnull amount of debugging output on file descriptor 2
173 058b0118 2005-01-03 devnull when SCSI commands fail.
174 058b0118 2005-01-03 devnull .SH FILES
175 058b0118 2005-01-03 devnull .TP
176 058b0118 2005-01-03 devnull .B /sys/lib/scsicodes
177 058b0118 2005-01-03 devnull List of textual messages corresponding to SCSI error codes;
178 058b0118 2005-01-03 devnull consulted by
179 058b0118 2005-01-03 devnull .BR scsierror .
180 058b0118 2005-01-03 devnull .SH SOURCE
181 c3674de4 2005-01-11 devnull .B \*9/src/libdisk/scsi.c
182 058b0118 2005-01-03 devnull .SH SEE ALSO
183 058b0118 2005-01-03 devnull Plan 9's
184 058b0118 2005-01-03 devnull \fIsd\fR(3) and
185 058b0118 2005-01-03 devnull \fIscuzz\fR(8)
186 058b0118 2005-01-03 devnull .SH BUGS
187 058b0118 2005-01-03 devnull SCSI devices on Unix do not present the interface expected by
188 058b0118 2005-01-03 devnull these routines.