]>
Commit | Line | Data |
---|---|---|
ce5c5d65 MCC |
1 | .. SPDX-License-Identifier: GPL-2.0 |
2 | ||
3 | ============================================= | |
4 | SCSI mid_level - lower_level driver interface | |
5 | ============================================= | |
6 | ||
7 | Introduction | |
8 | ============ | |
9 | This document outlines the interface between the Linux SCSI mid level and | |
10 | SCSI lower level drivers. Lower level drivers (LLDs) are variously called | |
11 | host bus adapter (HBA) drivers and host drivers (HD). A "host" in this | |
12 | context is a bridge between a computer IO bus (e.g. PCI or ISA) and a | |
13 | single SCSI initiator port on a SCSI transport. An "initiator" port | |
14 | (SCSI terminology, see SAM-3 at http://www.t10.org) sends SCSI commands | |
15 | to "target" SCSI ports (e.g. disks). There can be many LLDs in a running | |
16 | system, but only one per hardware type. Most LLDs can control one or more | |
17 | SCSI HBAs. Some HBAs contain multiple hosts. | |
18 | ||
19 | In some cases the SCSI transport is an external bus that already has | |
20 | its own subsystem in Linux (e.g. USB and ieee1394). In such cases the | |
21 | SCSI subsystem LLD is a software bridge to the other driver subsystem. | |
22 | Examples are the usb-storage driver (found in the drivers/usb/storage | |
23 | directory) and the ieee1394/sbp2 driver (found in the drivers/ieee1394 | |
24 | directory). | |
25 | ||
26 | For example, the aic7xxx LLD controls Adaptec SCSI parallel interface | |
27 | (SPI) controllers based on that company's 7xxx chip series. The aic7xxx | |
28 | LLD can be built into the kernel or loaded as a module. There can only be | |
29 | one aic7xxx LLD running in a Linux system but it may be controlling many | |
30 | HBAs. These HBAs might be either on PCI daughter-boards or built into | |
31 | the motherboard (or both). Some aic7xxx based HBAs are dual controllers | |
32 | and thus represent two hosts. Like most modern HBAs, each aic7xxx host | |
33 | has its own PCI device address. [The one-to-one correspondence between | |
34 | a SCSI host and a PCI device is common but not required (e.g. with | |
35 | ISA adapters).] | |
36 | ||
37 | The SCSI mid level isolates an LLD from other layers such as the SCSI | |
38 | upper layer drivers and the block layer. | |
39 | ||
40 | This version of the document roughly matches linux kernel version 2.6.8 . | |
41 | ||
42 | Documentation | |
43 | ============= | |
44 | There is a SCSI documentation directory within the kernel source tree, | |
c3bf7774 RD |
45 | typically Documentation/scsi . Most documents are in reStructuredText |
46 | format. This file is named scsi_mid_low_api.rst and can be | |
ce5c5d65 | 47 | found in that directory. A more recent copy of this document may be found |
c3bf7774 RD |
48 | at https://docs.kernel.org/scsi/scsi_mid_low_api.html. Many LLDs are |
49 | documented in Documentation/scsi (e.g. aic7xxx.rst). The SCSI mid-level is | |
50 | briefly described in scsi.rst which contains a URL to a document describing | |
51 | the SCSI subsystem in the Linux Kernel 2.4 series. Two upper level | |
52 | drivers have documents in that directory: st.rst (SCSI tape driver) and | |
53 | scsi-generic.rst (for the sg driver). | |
54 | ||
55 | Some documentation (or URLs) for LLDs may be found in the C source code | |
56 | or in the same directory as the C source code. For example to find a URL | |
ce5c5d65 MCC |
57 | about the USB mass storage driver see the |
58 | /usr/src/linux/drivers/usb/storage directory. | |
59 | ||
60 | Driver structure | |
61 | ================ | |
62 | Traditionally an LLD for the SCSI subsystem has been at least two files in | |
63 | the drivers/scsi directory. For example, a driver called "xyz" has a header | |
64 | file "xyz.h" and a source file "xyz.c". [Actually there is no good reason | |
65 | why this couldn't all be in one file; the header file is superfluous.] Some | |
66 | drivers that have been ported to several operating systems have more than | |
67 | two files. For example the aic7xxx driver has separate files for generic | |
68 | and OS-specific code (e.g. FreeBSD and Linux). Such drivers tend to have | |
69 | their own directory under the drivers/scsi directory. | |
70 | ||
71 | When a new LLD is being added to Linux, the following files (found in the | |
72 | drivers/scsi directory) will need some attention: Makefile and Kconfig . | |
73 | It is probably best to study how existing LLDs are organized. | |
74 | ||
75 | As the 2.5 series development kernels evolve into the 2.6 series | |
76 | production series, changes are being introduced into this interface. An | |
77 | example of this is driver initialization code where there are now 2 models | |
78 | available. The older one, similar to what was found in the lk 2.4 series, | |
79 | is based on hosts that are detected at HBA driver load time. This will be | |
80 | referred to the "passive" initialization model. The newer model allows HBAs | |
81 | to be hot plugged (and unplugged) during the lifetime of the LLD and will | |
82 | be referred to as the "hotplug" initialization model. The newer model is | |
83 | preferred as it can handle both traditional SCSI equipment that is | |
84 | permanently connected as well as modern "SCSI" devices (e.g. USB or | |
85 | IEEE 1394 connected digital cameras) that are hotplugged. Both | |
86 | initialization models are discussed in the following sections. | |
87 | ||
88 | An LLD interfaces to the SCSI subsystem several ways: | |
89 | ||
90 | a) directly invoking functions supplied by the mid level | |
91 | b) passing a set of function pointers to a registration function | |
92 | supplied by the mid level. The mid level will then invoke these | |
93 | functions at some point in the future. The LLD will supply | |
94 | implementations of these functions. | |
95 | c) direct access to instances of well known data structures maintained | |
96 | by the mid level | |
97 | ||
98 | Those functions in group a) are listed in a section entitled "Mid level | |
99 | supplied functions" below. | |
100 | ||
101 | Those functions in group b) are listed in a section entitled "Interface | |
102 | functions" below. Their function pointers are placed in the members of | |
103 | "struct scsi_host_template", an instance of which is passed to | |
104 | scsi_host_alloc() [#]_. Those interface functions that the LLD does not | |
105 | wish to supply should have NULL placed in the corresponding member of | |
106 | struct scsi_host_template. Defining an instance of struct | |
107 | scsi_host_template at file scope will cause NULL to be placed in function | |
108 | pointer members not explicitly initialized. | |
109 | ||
110 | Those usages in group c) should be handled with care, especially in a | |
111 | "hotplug" environment. LLDs should be aware of the lifetime of instances | |
112 | that are shared with the mid level and other layers. | |
113 | ||
114 | All functions defined within an LLD and all data defined at file scope | |
115 | should be static. For example the slave_alloc() function in an LLD | |
116 | called "xxx" could be defined as | |
117 | ``static int xxx_slave_alloc(struct scsi_device * sdev) { /* code */ }`` | |
118 | ||
119 | .. [#] the scsi_host_alloc() function is a replacement for the rather vaguely | |
120 | named scsi_register() function in most situations. | |
121 | ||
122 | ||
123 | Hotplug initialization model | |
124 | ============================ | |
125 | In this model an LLD controls when SCSI hosts are introduced and removed | |
126 | from the SCSI subsystem. Hosts can be introduced as early as driver | |
127 | initialization and removed as late as driver shutdown. Typically a driver | |
128 | will respond to a sysfs probe() callback that indicates an HBA has been | |
129 | detected. After confirming that the new device is one that the LLD wants | |
130 | to control, the LLD will initialize the HBA and then register a new host | |
131 | with the SCSI mid level. | |
132 | ||
133 | During LLD initialization the driver should register itself with the | |
134 | appropriate IO bus on which it expects to find HBA(s) (e.g. the PCI bus). | |
135 | This can probably be done via sysfs. Any driver parameters (especially | |
136 | those that are writable after the driver is loaded) could also be | |
137 | registered with sysfs at this point. The SCSI mid level first becomes | |
138 | aware of an LLD when that LLD registers its first HBA. | |
139 | ||
140 | At some later time, the LLD becomes aware of an HBA and what follows | |
141 | is a typical sequence of calls between the LLD and the mid level. | |
142 | This example shows the mid level scanning the newly introduced HBA for 3 | |
143 | scsi devices of which only the first 2 respond:: | |
144 | ||
145 | HBA PROBE: assume 2 SCSI devices found in scan | |
146 | LLD mid level LLD | |
147 | ===-------------------=========--------------------===------ | |
148 | scsi_host_alloc() --> | |
149 | scsi_add_host() ----> | |
150 | scsi_scan_host() -------+ | |
151 | | | |
152 | slave_alloc() | |
153 | slave_configure() --> scsi_change_queue_depth() | |
154 | | | |
155 | slave_alloc() | |
156 | slave_configure() | |
157 | | | |
158 | slave_alloc() *** | |
159 | slave_destroy() *** | |
160 | ||
161 | ||
162 | *** For scsi devices that the mid level tries to scan but do not | |
163 | respond, a slave_alloc(), slave_destroy() pair is called. | |
164 | ||
165 | If the LLD wants to adjust the default queue settings, it can invoke | |
166 | scsi_change_queue_depth() in its slave_configure() routine. | |
167 | ||
168 | When an HBA is being removed it could be as part of an orderly shutdown | |
169 | associated with the LLD module being unloaded (e.g. with the "rmmod" | |
170 | command) or in response to a "hot unplug" indicated by sysfs()'s | |
171 | remove() callback being invoked. In either case, the sequence is the | |
172 | same:: | |
173 | ||
174 | HBA REMOVE: assume 2 SCSI devices attached | |
175 | LLD mid level LLD | |
176 | ===----------------------=========-----------------===------ | |
177 | scsi_remove_host() ---------+ | |
178 | | | |
179 | slave_destroy() | |
180 | slave_destroy() | |
181 | scsi_host_put() | |
182 | ||
183 | It may be useful for a LLD to keep track of struct Scsi_Host instances | |
184 | (a pointer is returned by scsi_host_alloc()). Such instances are "owned" | |
185 | by the mid-level. struct Scsi_Host instances are freed from | |
186 | scsi_host_put() when the reference count hits zero. | |
187 | ||
188 | Hot unplugging an HBA that controls a disk which is processing SCSI | |
189 | commands on a mounted file system is an interesting situation. Reference | |
190 | counting logic is being introduced into the mid level to cope with many | |
191 | of the issues involved. See the section on reference counting below. | |
192 | ||
193 | ||
194 | The hotplug concept may be extended to SCSI devices. Currently, when an | |
195 | HBA is added, the scsi_scan_host() function causes a scan for SCSI devices | |
196 | attached to the HBA's SCSI transport. On newer SCSI transports the HBA | |
197 | may become aware of a new SCSI device _after_ the scan has completed. | |
198 | An LLD can use this sequence to make the mid level aware of a SCSI device:: | |
199 | ||
200 | SCSI DEVICE hotplug | |
201 | LLD mid level LLD | |
202 | ===-------------------=========--------------------===------ | |
203 | scsi_add_device() ------+ | |
204 | | | |
205 | slave_alloc() | |
206 | slave_configure() [--> scsi_change_queue_depth()] | |
207 | ||
208 | In a similar fashion, an LLD may become aware that a SCSI device has been | |
209 | removed (unplugged) or the connection to it has been interrupted. Some | |
210 | existing SCSI transports (e.g. SPI) may not become aware that a SCSI | |
211 | device has been removed until a subsequent SCSI command fails which will | |
212 | probably cause that device to be set offline by the mid level. An LLD that | |
213 | detects the removal of a SCSI device can instigate its removal from | |
214 | upper layers with this sequence:: | |
215 | ||
216 | SCSI DEVICE hot unplug | |
217 | LLD mid level LLD | |
218 | ===----------------------=========-----------------===------ | |
219 | scsi_remove_device() -------+ | |
220 | | | |
221 | slave_destroy() | |
222 | ||
223 | It may be useful for an LLD to keep track of struct scsi_device instances | |
224 | (a pointer is passed as the parameter to slave_alloc() and | |
225 | slave_configure() callbacks). Such instances are "owned" by the mid-level. | |
226 | struct scsi_device instances are freed after slave_destroy(). | |
227 | ||
228 | ||
229 | Reference Counting | |
230 | ================== | |
231 | The Scsi_Host structure has had reference counting infrastructure added. | |
232 | This effectively spreads the ownership of struct Scsi_Host instances | |
233 | across the various SCSI layers which use them. Previously such instances | |
234 | were exclusively owned by the mid level. LLDs would not usually need to | |
235 | directly manipulate these reference counts but there may be some cases | |
236 | where they do. | |
237 | ||
238 | There are 3 reference counting functions of interest associated with | |
239 | struct Scsi_Host: | |
240 | ||
241 | - scsi_host_alloc(): | |
242 | returns a pointer to new instance of struct | |
243 | Scsi_Host which has its reference count ^^ set to 1 | |
244 | ||
245 | - scsi_host_get(): | |
246 | adds 1 to the reference count of the given instance | |
247 | ||
248 | - scsi_host_put(): | |
249 | decrements 1 from the reference count of the given | |
250 | instance. If the reference count reaches 0 then the given instance | |
251 | is freed | |
252 | ||
253 | The scsi_device structure has had reference counting infrastructure added. | |
254 | This effectively spreads the ownership of struct scsi_device instances | |
255 | across the various SCSI layers which use them. Previously such instances | |
256 | were exclusively owned by the mid level. See the access functions declared | |
257 | towards the end of include/scsi/scsi_device.h . If an LLD wants to keep | |
258 | a copy of a pointer to a scsi_device instance it should use scsi_device_get() | |
259 | to bump its reference count. When it is finished with the pointer it can | |
260 | use scsi_device_put() to decrement its reference count (and potentially | |
261 | delete it). | |
262 | ||
263 | .. Note:: | |
264 | ||
265 | struct Scsi_Host actually has 2 reference counts which are manipulated | |
266 | in parallel by these functions. | |
267 | ||
268 | ||
269 | Conventions | |
270 | =========== | |
271 | First, Linus Torvalds's thoughts on C coding style can be found in the | |
272 | Documentation/process/coding-style.rst file. | |
273 | ||
ce5c5d65 MCC |
274 | Also, most C99 enhancements are encouraged to the extent they are supported |
275 | by the relevant gcc compilers. So C99 style structure and array | |
276 | initializers are encouraged where appropriate. Don't go too far, | |
277 | VLAs are not properly supported yet. An exception to this is the use of | |
278 | ``//`` style comments; ``/*...*/`` comments are still preferred in Linux. | |
279 | ||
280 | Well written, tested and documented code, need not be re-formatted to | |
281 | comply with the above conventions. For example, the aic7xxx driver | |
282 | comes to Linux from FreeBSD and Adaptec's own labs. No doubt FreeBSD | |
283 | and Adaptec have their own coding conventions. | |
284 | ||
285 | ||
286 | Mid level supplied functions | |
287 | ============================ | |
288 | These functions are supplied by the SCSI mid level for use by LLDs. | |
289 | The names (i.e. entry points) of these functions are exported | |
290 | so an LLD that is a module can access them. The kernel will | |
291 | arrange for the SCSI mid level to be loaded and initialized before any LLD | |
292 | is initialized. The functions below are listed alphabetically and their | |
293 | names all start with ``scsi_``. | |
294 | ||
295 | Summary: | |
296 | ||
297 | - scsi_add_device - creates new scsi device (lu) instance | |
298 | - scsi_add_host - perform sysfs registration and set up transport class | |
299 | - scsi_change_queue_depth - change the queue depth on a SCSI device | |
300 | - scsi_bios_ptable - return copy of block device's partition table | |
301 | - scsi_block_requests - prevent further commands being queued to given host | |
302 | - scsi_host_alloc - return a new scsi_host instance whose refcount==1 | |
303 | - scsi_host_get - increments Scsi_Host instance's refcount | |
304 | - scsi_host_put - decrements Scsi_Host instance's refcount (free if 0) | |
ce5c5d65 MCC |
305 | - scsi_register - create and register a scsi host adapter instance. |
306 | - scsi_remove_device - detach and remove a SCSI device | |
307 | - scsi_remove_host - detach and remove all SCSI devices owned by host | |
308 | - scsi_report_bus_reset - report scsi _bus_ reset observed | |
309 | - scsi_scan_host - scan SCSI bus | |
310 | - scsi_track_queue_full - track successive QUEUE_FULL events | |
311 | - scsi_unblock_requests - allow further commands to be queued to given host | |
312 | - scsi_unregister - [calls scsi_host_put()] | |
313 | ||
314 | ||
315 | Details:: | |
316 | ||
317 | /** | |
318 | * scsi_add_device - creates new scsi device (lu) instance | |
319 | * @shost: pointer to scsi host instance | |
320 | * @channel: channel number (rarely other than 0) | |
321 | * @id: target id number | |
322 | * @lun: logical unit number | |
323 | * | |
324 | * Returns pointer to new struct scsi_device instance or | |
325 | * ERR_PTR(-ENODEV) (or some other bent pointer) if something is | |
326 | * wrong (e.g. no lu responds at given address) | |
327 | * | |
328 | * Might block: yes | |
329 | * | |
330 | * Notes: This call is usually performed internally during a scsi | |
331 | * bus scan when an HBA is added (i.e. scsi_scan_host()). So it | |
332 | * should only be called if the HBA becomes aware of a new scsi | |
333 | * device (lu) after scsi_scan_host() has completed. If successful | |
334 | * this call can lead to slave_alloc() and slave_configure() callbacks | |
335 | * into the LLD. | |
336 | * | |
337 | * Defined in: drivers/scsi/scsi_scan.c | |
338 | **/ | |
339 | struct scsi_device * scsi_add_device(struct Scsi_Host *shost, | |
340 | unsigned int channel, | |
341 | unsigned int id, unsigned int lun) | |
342 | ||
343 | ||
344 | /** | |
345 | * scsi_add_host - perform sysfs registration and set up transport class | |
346 | * @shost: pointer to scsi host instance | |
347 | * @dev: pointer to struct device of type scsi class | |
348 | * | |
349 | * Returns 0 on success, negative errno of failure (e.g. -ENOMEM) | |
350 | * | |
351 | * Might block: no | |
352 | * | |
353 | * Notes: Only required in "hotplug initialization model" after a | |
354 | * successful call to scsi_host_alloc(). This function does not | |
355 | * scan the bus; this can be done by calling scsi_scan_host() or | |
356 | * in some other transport-specific way. The LLD must set up | |
357 | * the transport template before calling this function and may only | |
358 | * access the transport class data after this function has been called. | |
359 | * | |
360 | * Defined in: drivers/scsi/hosts.c | |
361 | **/ | |
362 | int scsi_add_host(struct Scsi_Host *shost, struct device * dev) | |
363 | ||
364 | ||
365 | /** | |
366 | * scsi_change_queue_depth - allow LLD to change queue depth on a SCSI device | |
367 | * @sdev: pointer to SCSI device to change queue depth on | |
368 | * @tags Number of tags allowed if tagged queuing enabled, | |
369 | * or number of commands the LLD can queue up | |
370 | * in non-tagged mode (as per cmd_per_lun). | |
371 | * | |
372 | * Returns nothing | |
373 | * | |
374 | * Might block: no | |
375 | * | |
376 | * Notes: Can be invoked any time on a SCSI device controlled by this | |
377 | * LLD. [Specifically during and after slave_configure() and prior to | |
378 | * slave_destroy().] Can safely be invoked from interrupt code. | |
379 | * | |
380 | * Defined in: drivers/scsi/scsi.c [see source code for more notes] | |
381 | * | |
382 | **/ | |
383 | int scsi_change_queue_depth(struct scsi_device *sdev, int tags) | |
384 | ||
385 | ||
386 | /** | |
387 | * scsi_bios_ptable - return copy of block device's partition table | |
388 | * @dev: pointer to block device | |
389 | * | |
390 | * Returns pointer to partition table, or NULL for failure | |
391 | * | |
392 | * Might block: yes | |
393 | * | |
394 | * Notes: Caller owns memory returned (free with kfree() ) | |
395 | * | |
396 | * Defined in: drivers/scsi/scsicam.c | |
397 | **/ | |
398 | unsigned char *scsi_bios_ptable(struct block_device *dev) | |
399 | ||
400 | ||
401 | /** | |
402 | * scsi_block_requests - prevent further commands being queued to given host | |
403 | * | |
404 | * @shost: pointer to host to block commands on | |
405 | * | |
406 | * Returns nothing | |
407 | * | |
408 | * Might block: no | |
409 | * | |
410 | * Notes: There is no timer nor any other means by which the requests | |
411 | * get unblocked other than the LLD calling scsi_unblock_requests(). | |
412 | * | |
413 | * Defined in: drivers/scsi/scsi_lib.c | |
414 | **/ | |
415 | void scsi_block_requests(struct Scsi_Host * shost) | |
416 | ||
417 | ||
418 | /** | |
419 | * scsi_host_alloc - create a scsi host adapter instance and perform basic | |
420 | * initialization. | |
421 | * @sht: pointer to scsi host template | |
422 | * @privsize: extra bytes to allocate in hostdata array (which is the | |
423 | * last member of the returned Scsi_Host instance) | |
424 | * | |
425 | * Returns pointer to new Scsi_Host instance or NULL on failure | |
426 | * | |
427 | * Might block: yes | |
428 | * | |
429 | * Notes: When this call returns to the LLD, the SCSI bus scan on | |
430 | * this host has _not_ yet been done. | |
431 | * The hostdata array (by default zero length) is a per host scratch | |
432 | * area for the LLD's exclusive use. | |
433 | * Both associated refcounting objects have their refcount set to 1. | |
434 | * Full registration (in sysfs) and a bus scan are performed later when | |
435 | * scsi_add_host() and scsi_scan_host() are called. | |
436 | * | |
437 | * Defined in: drivers/scsi/hosts.c . | |
438 | **/ | |
e0d3f2c6 | 439 | struct Scsi_Host * scsi_host_alloc(const struct scsi_host_template * sht, |
ce5c5d65 MCC |
440 | int privsize) |
441 | ||
442 | ||
443 | /** | |
444 | * scsi_host_get - increment Scsi_Host instance refcount | |
445 | * @shost: pointer to struct Scsi_Host instance | |
446 | * | |
447 | * Returns nothing | |
448 | * | |
449 | * Might block: currently may block but may be changed to not block | |
450 | * | |
451 | * Notes: Actually increments the counts in two sub-objects | |
452 | * | |
453 | * Defined in: drivers/scsi/hosts.c | |
454 | **/ | |
455 | void scsi_host_get(struct Scsi_Host *shost) | |
456 | ||
457 | ||
458 | /** | |
459 | * scsi_host_put - decrement Scsi_Host instance refcount, free if 0 | |
460 | * @shost: pointer to struct Scsi_Host instance | |
461 | * | |
462 | * Returns nothing | |
463 | * | |
464 | * Might block: currently may block but may be changed to not block | |
465 | * | |
466 | * Notes: Actually decrements the counts in two sub-objects. If the | |
467 | * latter refcount reaches 0, the Scsi_Host instance is freed. | |
468 | * The LLD need not worry exactly when the Scsi_Host instance is | |
469 | * freed, it just shouldn't access the instance after it has balanced | |
470 | * out its refcount usage. | |
471 | * | |
472 | * Defined in: drivers/scsi/hosts.c | |
473 | **/ | |
474 | void scsi_host_put(struct Scsi_Host *shost) | |
475 | ||
476 | ||
ce5c5d65 MCC |
477 | /** |
478 | * scsi_register - create and register a scsi host adapter instance. | |
479 | * @sht: pointer to scsi host template | |
480 | * @privsize: extra bytes to allocate in hostdata array (which is the | |
481 | * last member of the returned Scsi_Host instance) | |
482 | * | |
483 | * Returns pointer to new Scsi_Host instance or NULL on failure | |
484 | * | |
485 | * Might block: yes | |
486 | * | |
487 | * Notes: When this call returns to the LLD, the SCSI bus scan on | |
488 | * this host has _not_ yet been done. | |
489 | * The hostdata array (by default zero length) is a per host scratch | |
490 | * area for the LLD. | |
491 | * | |
492 | * Defined in: drivers/scsi/hosts.c . | |
493 | **/ | |
494 | struct Scsi_Host * scsi_register(struct scsi_host_template * sht, | |
495 | int privsize) | |
496 | ||
497 | ||
498 | /** | |
499 | * scsi_remove_device - detach and remove a SCSI device | |
500 | * @sdev: a pointer to a scsi device instance | |
501 | * | |
502 | * Returns value: 0 on success, -EINVAL if device not attached | |
503 | * | |
504 | * Might block: yes | |
505 | * | |
506 | * Notes: If an LLD becomes aware that a scsi device (lu) has | |
507 | * been removed but its host is still present then it can request | |
508 | * the removal of that scsi device. If successful this call will | |
509 | * lead to the slave_destroy() callback being invoked. sdev is an | |
510 | * invalid pointer after this call. | |
511 | * | |
512 | * Defined in: drivers/scsi/scsi_sysfs.c . | |
513 | **/ | |
514 | int scsi_remove_device(struct scsi_device *sdev) | |
515 | ||
516 | ||
517 | /** | |
518 | * scsi_remove_host - detach and remove all SCSI devices owned by host | |
519 | * @shost: a pointer to a scsi host instance | |
520 | * | |
521 | * Returns value: 0 on success, 1 on failure (e.g. LLD busy ??) | |
522 | * | |
523 | * Might block: yes | |
524 | * | |
525 | * Notes: Should only be invoked if the "hotplug initialization | |
526 | * model" is being used. It should be called _prior_ to | |
527 | * scsi_unregister(). | |
528 | * | |
529 | * Defined in: drivers/scsi/hosts.c . | |
530 | **/ | |
531 | int scsi_remove_host(struct Scsi_Host *shost) | |
532 | ||
533 | ||
534 | /** | |
535 | * scsi_report_bus_reset - report scsi _bus_ reset observed | |
536 | * @shost: a pointer to a scsi host involved | |
537 | * @channel: channel (within) host on which scsi bus reset occurred | |
538 | * | |
539 | * Returns nothing | |
540 | * | |
541 | * Might block: no | |
542 | * | |
543 | * Notes: This only needs to be called if the reset is one which | |
544 | * originates from an unknown location. Resets originated by the | |
545 | * mid level itself don't need to call this, but there should be | |
546 | * no harm. The main purpose of this is to make sure that a | |
547 | * CHECK_CONDITION is properly treated. | |
548 | * | |
549 | * Defined in: drivers/scsi/scsi_error.c . | |
550 | **/ | |
551 | void scsi_report_bus_reset(struct Scsi_Host * shost, int channel) | |
552 | ||
553 | ||
554 | /** | |
555 | * scsi_scan_host - scan SCSI bus | |
556 | * @shost: a pointer to a scsi host instance | |
557 | * | |
558 | * Might block: yes | |
559 | * | |
560 | * Notes: Should be called after scsi_add_host() | |
561 | * | |
562 | * Defined in: drivers/scsi/scsi_scan.c | |
563 | **/ | |
564 | void scsi_scan_host(struct Scsi_Host *shost) | |
565 | ||
566 | ||
567 | /** | |
568 | * scsi_track_queue_full - track successive QUEUE_FULL events on given | |
569 | * device to determine if and when there is a need | |
570 | * to adjust the queue depth on the device. | |
571 | * @sdev: pointer to SCSI device instance | |
572 | * @depth: Current number of outstanding SCSI commands on this device, | |
573 | * not counting the one returned as QUEUE_FULL. | |
574 | * | |
575 | * Returns 0 - no change needed | |
576 | * >0 - adjust queue depth to this new depth | |
577 | * -1 - drop back to untagged operation using host->cmd_per_lun | |
578 | * as the untagged command depth | |
579 | * | |
580 | * Might block: no | |
581 | * | |
582 | * Notes: LLDs may call this at any time and we will do "The Right | |
583 | * Thing"; interrupt context safe. | |
584 | * | |
585 | * Defined in: drivers/scsi/scsi.c . | |
586 | **/ | |
587 | int scsi_track_queue_full(struct scsi_device *sdev, int depth) | |
588 | ||
589 | ||
590 | /** | |
591 | * scsi_unblock_requests - allow further commands to be queued to given host | |
592 | * | |
593 | * @shost: pointer to host to unblock commands on | |
594 | * | |
595 | * Returns nothing | |
596 | * | |
597 | * Might block: no | |
598 | * | |
599 | * Defined in: drivers/scsi/scsi_lib.c . | |
600 | **/ | |
601 | void scsi_unblock_requests(struct Scsi_Host * shost) | |
602 | ||
603 | ||
604 | /** | |
605 | * scsi_unregister - unregister and free memory used by host instance | |
606 | * @shp: pointer to scsi host instance to unregister. | |
607 | * | |
608 | * Returns nothing | |
609 | * | |
610 | * Might block: no | |
611 | * | |
612 | * Notes: Should not be invoked if the "hotplug initialization | |
613 | * model" is being used. Called internally by exit_this_scsi_driver() | |
614 | * in the "passive initialization model". Hence a LLD has no need to | |
615 | * call this function directly. | |
616 | * | |
617 | * Defined in: drivers/scsi/hosts.c . | |
618 | **/ | |
619 | void scsi_unregister(struct Scsi_Host * shp) | |
620 | ||
621 | ||
622 | ||
623 | ||
624 | Interface Functions | |
625 | =================== | |
626 | Interface functions are supplied (defined) by LLDs and their function | |
627 | pointers are placed in an instance of struct scsi_host_template which | |
628 | is passed to scsi_host_alloc() [or scsi_register() / init_this_scsi_driver()]. | |
629 | Some are mandatory. Interface functions should be declared static. The | |
630 | accepted convention is that driver "xyz" will declare its slave_configure() | |
631 | function as:: | |
632 | ||
633 | static int xyz_slave_configure(struct scsi_device * sdev); | |
634 | ||
635 | and so forth for all interface functions listed below. | |
636 | ||
637 | A pointer to this function should be placed in the 'slave_configure' member | |
638 | of a "struct scsi_host_template" instance. A pointer to such an instance | |
639 | should be passed to the mid level's scsi_host_alloc() [or scsi_register() / | |
640 | init_this_scsi_driver()]. | |
641 | ||
642 | The interface functions are also described in the include/scsi/scsi_host.h | |
643 | file immediately above their definition point in "struct scsi_host_template". | |
644 | In some cases more detail is given in scsi_host.h than below. | |
645 | ||
646 | The interface functions are listed below in alphabetical order. | |
647 | ||
648 | Summary: | |
649 | ||
650 | - bios_param - fetch head, sector, cylinder info for a disk | |
651 | - eh_timed_out - notify the host that a command timer expired | |
652 | - eh_abort_handler - abort given command | |
653 | - eh_bus_reset_handler - issue SCSI bus reset | |
654 | - eh_device_reset_handler - issue SCSI device reset | |
655 | - eh_host_reset_handler - reset host (host bus adapter) | |
656 | - info - supply information about given host | |
657 | - ioctl - driver can respond to ioctls | |
658 | - proc_info - supports /proc/scsi/{driver_name}/{host_no} | |
659 | - queuecommand - queue scsi command, invoke 'done' on completion | |
660 | - slave_alloc - prior to any commands being sent to a new device | |
661 | - slave_configure - driver fine tuning for given device after attach | |
662 | - slave_destroy - given device is about to be shut down | |
663 | ||
664 | ||
665 | Details:: | |
666 | ||
667 | /** | |
668 | * bios_param - fetch head, sector, cylinder info for a disk | |
669 | * @sdev: pointer to scsi device context (defined in | |
670 | * include/scsi/scsi_device.h) | |
671 | * @bdev: pointer to block device context (defined in fs.h) | |
672 | * @capacity: device size (in 512 byte sectors) | |
673 | * @params: three element array to place output: | |
674 | * params[0] number of heads (max 255) | |
675 | * params[1] number of sectors (max 63) | |
676 | * params[2] number of cylinders | |
677 | * | |
678 | * Return value is ignored | |
679 | * | |
680 | * Locks: none | |
681 | * | |
682 | * Calling context: process (sd) | |
683 | * | |
684 | * Notes: an arbitrary geometry (based on READ CAPACITY) is used | |
685 | * if this function is not provided. The params array is | |
686 | * pre-initialized with made up values just in case this function | |
687 | * doesn't output anything. | |
688 | * | |
689 | * Optionally defined in: LLD | |
690 | **/ | |
691 | int bios_param(struct scsi_device * sdev, struct block_device *bdev, | |
692 | sector_t capacity, int params[3]) | |
693 | ||
694 | ||
695 | /** | |
696 | * eh_timed_out - The timer for the command has just fired | |
697 | * @scp: identifies command timing out | |
698 | * | |
699 | * Returns: | |
700 | * | |
701 | * EH_HANDLED: I fixed the error, please complete the command | |
702 | * EH_RESET_TIMER: I need more time, reset the timer and | |
703 | * begin counting again | |
704 | * EH_NOT_HANDLED Begin normal error recovery | |
705 | * | |
706 | * | |
707 | * Locks: None held | |
708 | * | |
709 | * Calling context: interrupt | |
710 | * | |
711 | * Notes: This is to give the LLD an opportunity to do local recovery. | |
712 | * This recovery is limited to determining if the outstanding command | |
713 | * will ever complete. You may not abort and restart the command from | |
714 | * this callback. | |
715 | * | |
716 | * Optionally defined in: LLD | |
717 | **/ | |
718 | int eh_timed_out(struct scsi_cmnd * scp) | |
719 | ||
720 | ||
721 | /** | |
722 | * eh_abort_handler - abort command associated with scp | |
723 | * @scp: identifies command to be aborted | |
724 | * | |
725 | * Returns SUCCESS if command aborted else FAILED | |
726 | * | |
727 | * Locks: None held | |
728 | * | |
729 | * Calling context: kernel thread | |
730 | * | |
731 | * Notes: If 'no_async_abort' is defined this callback | |
732 | * will be invoked from scsi_eh thread. No other commands | |
733 | * will then be queued on current host during eh. | |
deef1be1 | 734 | * Otherwise it will be called whenever scsi_timeout() |
ce5c5d65 MCC |
735 | * is called due to a command timeout. |
736 | * | |
737 | * Optionally defined in: LLD | |
738 | **/ | |
739 | int eh_abort_handler(struct scsi_cmnd * scp) | |
740 | ||
741 | ||
742 | /** | |
743 | * eh_bus_reset_handler - issue SCSI bus reset | |
744 | * @scp: SCSI bus that contains this device should be reset | |
745 | * | |
746 | * Returns SUCCESS if command aborted else FAILED | |
747 | * | |
748 | * Locks: None held | |
749 | * | |
750 | * Calling context: kernel thread | |
751 | * | |
752 | * Notes: Invoked from scsi_eh thread. No other commands will be | |
753 | * queued on current host during eh. | |
754 | * | |
755 | * Optionally defined in: LLD | |
756 | **/ | |
757 | int eh_bus_reset_handler(struct scsi_cmnd * scp) | |
758 | ||
759 | ||
760 | /** | |
761 | * eh_device_reset_handler - issue SCSI device reset | |
762 | * @scp: identifies SCSI device to be reset | |
763 | * | |
764 | * Returns SUCCESS if command aborted else FAILED | |
765 | * | |
766 | * Locks: None held | |
767 | * | |
768 | * Calling context: kernel thread | |
769 | * | |
770 | * Notes: Invoked from scsi_eh thread. No other commands will be | |
771 | * queued on current host during eh. | |
772 | * | |
773 | * Optionally defined in: LLD | |
774 | **/ | |
775 | int eh_device_reset_handler(struct scsi_cmnd * scp) | |
776 | ||
777 | ||
778 | /** | |
779 | * eh_host_reset_handler - reset host (host bus adapter) | |
780 | * @scp: SCSI host that contains this device should be reset | |
781 | * | |
782 | * Returns SUCCESS if command aborted else FAILED | |
783 | * | |
784 | * Locks: None held | |
785 | * | |
786 | * Calling context: kernel thread | |
787 | * | |
788 | * Notes: Invoked from scsi_eh thread. No other commands will be | |
789 | * queued on current host during eh. | |
790 | * With the default eh_strategy in place, if none of the _abort_, | |
791 | * _device_reset_, _bus_reset_ or this eh handler function are | |
792 | * defined (or they all return FAILED) then the device in question | |
793 | * will be set offline whenever eh is invoked. | |
794 | * | |
795 | * Optionally defined in: LLD | |
796 | **/ | |
797 | int eh_host_reset_handler(struct scsi_cmnd * scp) | |
798 | ||
799 | ||
800 | /** | |
801 | * info - supply information about given host: driver name plus data | |
802 | * to distinguish given host | |
803 | * @shp: host to supply information about | |
804 | * | |
805 | * Return ASCII null terminated string. [This driver is assumed to | |
806 | * manage the memory pointed to and maintain it, typically for the | |
807 | * lifetime of this host.] | |
808 | * | |
809 | * Locks: none | |
810 | * | |
811 | * Calling context: process | |
812 | * | |
813 | * Notes: Often supplies PCI or ISA information such as IO addresses | |
814 | * and interrupt numbers. If not supplied struct Scsi_Host::name used | |
815 | * instead. It is assumed the returned information fits on one line | |
816 | * (i.e. does not included embedded newlines). | |
817 | * The SCSI_IOCTL_PROBE_HOST ioctl yields the string returned by this | |
818 | * function (or struct Scsi_Host::name if this function is not | |
819 | * available). | |
820 | * In a similar manner, init_this_scsi_driver() outputs to the console | |
821 | * each host's "info" (or name) for the driver it is registering. | |
822 | * Also if proc_info() is not supplied, the output of this function | |
823 | * is used instead. | |
824 | * | |
825 | * Optionally defined in: LLD | |
826 | **/ | |
827 | const char * info(struct Scsi_Host * shp) | |
828 | ||
829 | ||
830 | /** | |
831 | * ioctl - driver can respond to ioctls | |
832 | * @sdp: device that ioctl was issued for | |
833 | * @cmd: ioctl number | |
834 | * @arg: pointer to read or write data from. Since it points to | |
835 | * user space, should use appropriate kernel functions | |
836 | * (e.g. copy_from_user() ). In the Unix style this argument | |
837 | * can also be viewed as an unsigned long. | |
838 | * | |
839 | * Returns negative "errno" value when there is a problem. 0 or a | |
840 | * positive value indicates success and is returned to the user space. | |
841 | * | |
842 | * Locks: none | |
843 | * | |
844 | * Calling context: process | |
845 | * | |
846 | * Notes: The SCSI subsystem uses a "trickle down" ioctl model. | |
847 | * The user issues an ioctl() against an upper level driver | |
848 | * (e.g. /dev/sdc) and if the upper level driver doesn't recognize | |
849 | * the 'cmd' then it is passed to the SCSI mid level. If the SCSI | |
850 | * mid level does not recognize it, then the LLD that controls | |
851 | * the device receives the ioctl. According to recent Unix standards | |
852 | * unsupported ioctl() 'cmd' numbers should return -ENOTTY. | |
853 | * | |
854 | * Optionally defined in: LLD | |
855 | **/ | |
856 | int ioctl(struct scsi_device *sdp, int cmd, void *arg) | |
857 | ||
858 | ||
859 | /** | |
860 | * proc_info - supports /proc/scsi/{driver_name}/{host_no} | |
861 | * @buffer: anchor point to output to (0==writeto1_read0) or fetch from | |
862 | * (1==writeto1_read0). | |
863 | * @start: where "interesting" data is written to. Ignored when | |
864 | * 1==writeto1_read0. | |
865 | * @offset: offset within buffer 0==writeto1_read0 is actually | |
866 | * interested in. Ignored when 1==writeto1_read0 . | |
867 | * @length: maximum (or actual) extent of buffer | |
868 | * @host_no: host number of interest (struct Scsi_Host::host_no) | |
869 | * @writeto1_read0: 1 -> data coming from user space towards driver | |
870 | * (e.g. "echo some_string > /proc/scsi/xyz/2") | |
871 | * 0 -> user what data from this driver | |
872 | * (e.g. "cat /proc/scsi/xyz/2") | |
873 | * | |
874 | * Returns length when 1==writeto1_read0. Otherwise number of chars | |
875 | * output to buffer past offset. | |
876 | * | |
877 | * Locks: none held | |
878 | * | |
879 | * Calling context: process | |
880 | * | |
881 | * Notes: Driven from scsi_proc.c which interfaces to proc_fs. proc_fs | |
882 | * support can now be configured out of the scsi subsystem. | |
883 | * | |
884 | * Optionally defined in: LLD | |
885 | **/ | |
886 | int proc_info(char * buffer, char ** start, off_t offset, | |
887 | int length, int host_no, int writeto1_read0) | |
888 | ||
889 | ||
890 | /** | |
891 | * queuecommand - queue scsi command, invoke scp->scsi_done on completion | |
892 | * @shost: pointer to the scsi host object | |
893 | * @scp: pointer to scsi command object | |
894 | * | |
895 | * Returns 0 on success. | |
896 | * | |
897 | * If there's a failure, return either: | |
898 | * | |
899 | * SCSI_MLQUEUE_DEVICE_BUSY if the device queue is full, or | |
900 | * SCSI_MLQUEUE_HOST_BUSY if the entire host queue is full | |
901 | * | |
902 | * On both of these returns, the mid-layer will requeue the I/O | |
903 | * | |
904 | * - if the return is SCSI_MLQUEUE_DEVICE_BUSY, only that particular | |
905 | * device will be paused, and it will be unpaused when a command to | |
906 | * the device returns (or after a brief delay if there are no more | |
907 | * outstanding commands to it). Commands to other devices continue | |
908 | * to be processed normally. | |
909 | * | |
910 | * - if the return is SCSI_MLQUEUE_HOST_BUSY, all I/O to the host | |
911 | * is paused and will be unpaused when any command returns from | |
912 | * the host (or after a brief delay if there are no outstanding | |
913 | * commands to the host). | |
914 | * | |
915 | * For compatibility with earlier versions of queuecommand, any | |
916 | * other return value is treated the same as | |
917 | * SCSI_MLQUEUE_HOST_BUSY. | |
918 | * | |
919 | * Other types of errors that are detected immediately may be | |
920 | * flagged by setting scp->result to an appropriate value, | |
921 | * invoking the scp->scsi_done callback, and then returning 0 | |
922 | * from this function. If the command is not performed | |
923 | * immediately (and the LLD is starting (or will start) the given | |
924 | * command) then this function should place 0 in scp->result and | |
925 | * return 0. | |
926 | * | |
927 | * Command ownership. If the driver returns zero, it owns the | |
928 | * command and must take responsibility for ensuring the | |
929 | * scp->scsi_done callback is executed. Note: the driver may | |
930 | * call scp->scsi_done before returning zero, but after it has | |
931 | * called scp->scsi_done, it may not return any value other than | |
932 | * zero. If the driver makes a non-zero return, it must not | |
933 | * execute the command's scsi_done callback at any time. | |
934 | * | |
935 | * Locks: up to and including 2.6.36, struct Scsi_Host::host_lock | |
936 | * held on entry (with "irqsave") and is expected to be | |
937 | * held on return. From 2.6.37 onwards, queuecommand is | |
938 | * called without any locks held. | |
939 | * | |
940 | * Calling context: in interrupt (soft irq) or process context | |
941 | * | |
942 | * Notes: This function should be relatively fast. Normally it | |
943 | * will not wait for IO to complete. Hence the scp->scsi_done | |
944 | * callback is invoked (often directly from an interrupt service | |
945 | * routine) some time after this function has returned. In some | |
946 | * cases (e.g. pseudo adapter drivers that manufacture the | |
947 | * response to a SCSI INQUIRY) the scp->scsi_done callback may be | |
948 | * invoked before this function returns. If the scp->scsi_done | |
949 | * callback is not invoked within a certain period the SCSI mid | |
950 | * level will commence error processing. If a status of CHECK | |
951 | * CONDITION is placed in "result" when the scp->scsi_done | |
952 | * callback is invoked, then the LLD driver should perform | |
953 | * autosense and fill in the struct scsi_cmnd::sense_buffer | |
954 | * array. The scsi_cmnd::sense_buffer array is zeroed prior to | |
955 | * the mid level queuing a command to an LLD. | |
956 | * | |
957 | * Defined in: LLD | |
958 | **/ | |
959 | int queuecommand(struct Scsi_Host *shost, struct scsi_cmnd * scp) | |
960 | ||
961 | ||
962 | /** | |
963 | * slave_alloc - prior to any commands being sent to a new device | |
964 | * (i.e. just prior to scan) this call is made | |
965 | * @sdp: pointer to new device (about to be scanned) | |
966 | * | |
967 | * Returns 0 if ok. Any other return is assumed to be an error and | |
968 | * the device is ignored. | |
969 | * | |
970 | * Locks: none | |
971 | * | |
972 | * Calling context: process | |
973 | * | |
974 | * Notes: Allows the driver to allocate any resources for a device | |
975 | * prior to its initial scan. The corresponding scsi device may not | |
976 | * exist but the mid level is just about to scan for it (i.e. send | |
977 | * and INQUIRY command plus ...). If a device is found then | |
978 | * slave_configure() will be called while if a device is not found | |
979 | * slave_destroy() is called. | |
980 | * For more details see the include/scsi/scsi_host.h file. | |
981 | * | |
982 | * Optionally defined in: LLD | |
983 | **/ | |
984 | int slave_alloc(struct scsi_device *sdp) | |
985 | ||
986 | ||
987 | /** | |
988 | * slave_configure - driver fine tuning for given device just after it | |
989 | * has been first scanned (i.e. it responded to an | |
990 | * INQUIRY) | |
991 | * @sdp: device that has just been attached | |
992 | * | |
993 | * Returns 0 if ok. Any other return is assumed to be an error and | |
994 | * the device is taken offline. [offline devices will _not_ have | |
995 | * slave_destroy() called on them so clean up resources.] | |
996 | * | |
997 | * Locks: none | |
998 | * | |
999 | * Calling context: process | |
1000 | * | |
1001 | * Notes: Allows the driver to inspect the response to the initial | |
1002 | * INQUIRY done by the scanning code and take appropriate action. | |
1003 | * For more details see the include/scsi/scsi_host.h file. | |
1004 | * | |
1005 | * Optionally defined in: LLD | |
1006 | **/ | |
1007 | int slave_configure(struct scsi_device *sdp) | |
1008 | ||
1009 | ||
1010 | /** | |
1011 | * slave_destroy - given device is about to be shut down. All | |
1012 | * activity has ceased on this device. | |
1013 | * @sdp: device that is about to be shut down | |
1014 | * | |
1015 | * Returns nothing | |
1016 | * | |
1017 | * Locks: none | |
1018 | * | |
1019 | * Calling context: process | |
1020 | * | |
1021 | * Notes: Mid level structures for given device are still in place | |
1022 | * but are about to be torn down. Any per device resources allocated | |
1023 | * by this driver for given device should be freed now. No further | |
1024 | * commands will be sent for this sdp instance. [However the device | |
1025 | * could be re-attached in the future in which case a new instance | |
1026 | * of struct scsi_device would be supplied by future slave_alloc() | |
1027 | * and slave_configure() calls.] | |
1028 | * | |
1029 | * Optionally defined in: LLD | |
1030 | **/ | |
1031 | void slave_destroy(struct scsi_device *sdp) | |
1032 | ||
1033 | ||
1034 | ||
1035 | Data Structures | |
1036 | =============== | |
1037 | struct scsi_host_template | |
1038 | ------------------------- | |
1039 | There is one "struct scsi_host_template" instance per LLD [#]_. It is | |
1040 | typically initialized as a file scope static in a driver's header file. That | |
1041 | way members that are not explicitly initialized will be set to 0 or NULL. | |
1042 | Member of interest: | |
1043 | ||
1044 | name | |
1045 | - name of driver (may contain spaces, please limit to | |
1046 | less than 80 characters) | |
1047 | ||
1048 | proc_name | |
1049 | - name used in "/proc/scsi/<proc_name>/<host_no>" and | |
1050 | by sysfs in one of its "drivers" directories. Hence | |
1051 | "proc_name" should only contain characters acceptable | |
1052 | to a Unix file name. | |
1053 | ||
1054 | ``(*queuecommand)()`` | |
1055 | - primary callback that the mid level uses to inject | |
1056 | SCSI commands into an LLD. | |
1057 | ||
1058 | The structure is defined and commented in include/scsi/scsi_host.h | |
1059 | ||
1060 | .. [#] In extreme situations a single driver may have several instances | |
1061 | if it controls several different classes of hardware (e.g. an LLD | |
1062 | that handles both ISA and PCI cards and has a separate instance of | |
1063 | struct scsi_host_template for each class). | |
1064 | ||
1065 | struct Scsi_Host | |
1066 | ---------------- | |
1067 | There is one struct Scsi_Host instance per host (HBA) that an LLD | |
1068 | controls. The struct Scsi_Host structure has many members in common | |
1069 | with "struct scsi_host_template". When a new struct Scsi_Host instance | |
1070 | is created (in scsi_host_alloc() in hosts.c) those common members are | |
1071 | initialized from the driver's struct scsi_host_template instance. Members | |
1072 | of interest: | |
1073 | ||
1074 | host_no | |
1075 | - system wide unique number that is used for identifying | |
1076 | this host. Issued in ascending order from 0. | |
1077 | can_queue | |
1078 | - must be greater than 0; do not send more than can_queue | |
1079 | commands to the adapter. | |
1080 | this_id | |
1081 | - scsi id of host (scsi initiator) or -1 if not known | |
1082 | sg_tablesize | |
1083 | - maximum scatter gather elements allowed by host. | |
1084 | Set this to SG_ALL or less to avoid chained SG lists. | |
1085 | Must be at least 1. | |
1086 | max_sectors | |
1087 | - maximum number of sectors (usually 512 bytes) allowed | |
1088 | in a single SCSI command. The default value of 0 leads | |
1089 | to a setting of SCSI_DEFAULT_MAX_SECTORS (defined in | |
1090 | scsi_host.h) which is currently set to 1024. So for a | |
1091 | disk the maximum transfer size is 512 KB when max_sectors | |
1092 | is not defined. Note that this size may not be sufficient | |
1093 | for disk firmware uploads. | |
1094 | cmd_per_lun | |
1095 | - maximum number of commands that can be queued on devices | |
1096 | controlled by the host. Overridden by LLD calls to | |
1097 | scsi_change_queue_depth(). | |
ce5c5d65 MCC |
1098 | no_async_abort |
1099 | - 1=>Asynchronous aborts are not supported | |
1100 | - 0=>Timed-out commands will be aborted asynchronously | |
1101 | hostt | |
1102 | - pointer to driver's struct scsi_host_template from which | |
1103 | this struct Scsi_Host instance was spawned | |
1104 | hostt->proc_name | |
1105 | - name of LLD. This is the driver name that sysfs uses | |
1106 | transportt | |
1107 | - pointer to driver's struct scsi_transport_template instance | |
1108 | (if any). FC and SPI transports currently supported. | |
1109 | sh_list | |
1110 | - a double linked list of pointers to all struct Scsi_Host | |
1111 | instances (currently ordered by ascending host_no) | |
1112 | my_devices | |
1113 | - a double linked list of pointers to struct scsi_device | |
1114 | instances that belong to this host. | |
1115 | hostdata[0] | |
1116 | - area reserved for LLD at end of struct Scsi_Host. Size | |
1117 | is set by the second argument (named 'xtr_bytes') to | |
1118 | scsi_host_alloc() or scsi_register(). | |
1119 | vendor_id | |
1120 | - a unique value that identifies the vendor supplying | |
1121 | the LLD for the Scsi_Host. Used most often in validating | |
1122 | vendor-specific message requests. Value consists of an | |
1123 | identifier type and a vendor-specific value. | |
1124 | See scsi_netlink.h for a description of valid formats. | |
1125 | ||
1126 | The scsi_host structure is defined in include/scsi/scsi_host.h | |
1127 | ||
1128 | struct scsi_device | |
1129 | ------------------ | |
1130 | Generally, there is one instance of this structure for each SCSI logical unit | |
1131 | on a host. Scsi devices connected to a host are uniquely identified by a | |
1132 | channel number, target id and logical unit number (lun). | |
1133 | The structure is defined in include/scsi/scsi_device.h | |
1134 | ||
1135 | struct scsi_cmnd | |
1136 | ---------------- | |
1137 | Instances of this structure convey SCSI commands to the LLD and responses | |
1138 | back to the mid level. The SCSI mid level will ensure that no more SCSI | |
1139 | commands become queued against the LLD than are indicated by | |
1140 | scsi_change_queue_depth() (or struct Scsi_Host::cmd_per_lun). There will | |
1141 | be at least one instance of struct scsi_cmnd available for each SCSI device. | |
1142 | Members of interest: | |
1143 | ||
1144 | cmnd | |
1145 | - array containing SCSI command | |
1146 | cmnd_len | |
1147 | - length (in bytes) of SCSI command | |
1148 | sc_data_direction | |
1149 | - direction of data transfer in data phase. See | |
1150 | "enum dma_data_direction" in include/linux/dma-mapping.h | |
1151 | request_bufflen | |
1152 | - number of data bytes to transfer (0 if no data phase) | |
1153 | use_sg | |
1154 | - ==0 -> no scatter gather list, hence transfer data | |
1155 | to/from request_buffer | |
1156 | - >0 -> scatter gather list (actually an array) in | |
1157 | request_buffer with use_sg elements | |
1158 | request_buffer | |
1159 | - either contains data buffer or scatter gather list | |
1160 | depending on the setting of use_sg. Scatter gather | |
1161 | elements are defined by 'struct scatterlist' found | |
1162 | in include/linux/scatterlist.h . | |
1163 | done | |
1164 | - function pointer that should be invoked by LLD when the | |
1165 | SCSI command is completed (successfully or otherwise). | |
1166 | Should only be called by an LLD if the LLD has accepted | |
1167 | the command (i.e. queuecommand() returned or will return | |
1168 | 0). The LLD may invoke 'done' prior to queuecommand() | |
1169 | finishing. | |
1170 | result | |
1171 | - should be set by LLD prior to calling 'done'. A value | |
1172 | of 0 implies a successfully completed command (and all | |
1173 | data (if any) has been transferred to or from the SCSI | |
1174 | target device). 'result' is a 32 bit unsigned integer that | |
a7479a84 HR |
1175 | can be viewed as 2 related bytes. The SCSI status value is |
1176 | in the LSB. See include/scsi/scsi.h status_byte() and | |
1177 | host_byte() macros and related constants. | |
ce5c5d65 MCC |
1178 | sense_buffer |
1179 | - an array (maximum size: SCSI_SENSE_BUFFERSIZE bytes) that | |
1180 | should be written when the SCSI status (LSB of 'result') | |
1181 | is set to CHECK_CONDITION (2). When CHECK_CONDITION is | |
1182 | set, if the top nibble of sense_buffer[0] has the value 7 | |
1183 | then the mid level will assume the sense_buffer array | |
1184 | contains a valid SCSI sense buffer; otherwise the mid | |
1185 | level will issue a REQUEST_SENSE SCSI command to | |
1186 | retrieve the sense buffer. The latter strategy is error | |
1187 | prone in the presence of command queuing so the LLD should | |
1188 | always "auto-sense". | |
1189 | device | |
1190 | - pointer to scsi_device object that this command is | |
1191 | associated with. | |
1192 | resid | |
f669b8a6 | 1193 | - an LLD should set this unsigned integer to the requested |
ce5c5d65 MCC |
1194 | transfer length (i.e. 'request_bufflen') less the number |
1195 | of bytes that are actually transferred. 'resid' is | |
1196 | preset to 0 so an LLD can ignore it if it cannot detect | |
f669b8a6 | 1197 | underruns (overruns should not be reported). An LLD |
ce5c5d65 MCC |
1198 | should set 'resid' prior to invoking 'done'. The most |
1199 | interesting case is data transfers from a SCSI target | |
1200 | device (e.g. READs) that underrun. | |
1201 | underflow | |
1202 | - LLD should place (DID_ERROR << 16) in 'result' if | |
1203 | actual number of bytes transferred is less than this | |
1204 | figure. Not many LLDs implement this check and some that | |
1205 | do just output an error message to the log rather than | |
1206 | report a DID_ERROR. Better for an LLD to implement | |
1207 | 'resid'. | |
1208 | ||
1209 | It is recommended that a LLD set 'resid' on data transfers from a SCSI | |
1210 | target device (e.g. READs). It is especially important that 'resid' is set | |
1211 | when such data transfers have sense keys of MEDIUM ERROR and HARDWARE ERROR | |
1212 | (and possibly RECOVERED ERROR). In these cases if a LLD is in doubt how much | |
1213 | data has been received then the safest approach is to indicate no bytes have | |
1214 | been received. For example: to indicate that no valid data has been received | |
1215 | a LLD might use these helpers:: | |
1216 | ||
1217 | scsi_set_resid(SCpnt, scsi_bufflen(SCpnt)); | |
1218 | ||
1219 | where 'SCpnt' is a pointer to a scsi_cmnd object. To indicate only three 512 | |
1220 | bytes blocks has been received 'resid' could be set like this:: | |
1221 | ||
1222 | scsi_set_resid(SCpnt, scsi_bufflen(SCpnt) - (3 * 512)); | |
1223 | ||
1224 | The scsi_cmnd structure is defined in include/scsi/scsi_cmnd.h | |
1225 | ||
1226 | ||
1227 | Locks | |
1228 | ===== | |
1229 | Each struct Scsi_Host instance has a spin_lock called struct | |
1230 | Scsi_Host::default_lock which is initialized in scsi_host_alloc() [found in | |
1231 | hosts.c]. Within the same function the struct Scsi_Host::host_lock pointer | |
1232 | is initialized to point at default_lock. Thereafter lock and unlock | |
1233 | operations performed by the mid level use the struct Scsi_Host::host_lock | |
1234 | pointer. Previously drivers could override the host_lock pointer but | |
1235 | this is not allowed anymore. | |
1236 | ||
1237 | ||
1238 | Autosense | |
1239 | ========= | |
1240 | Autosense (or auto-sense) is defined in the SAM-2 document as "the | |
1241 | automatic return of sense data to the application client coincident | |
1242 | with the completion of a SCSI command" when a status of CHECK CONDITION | |
1243 | occurs. LLDs should perform autosense. This should be done when the LLD | |
1244 | detects a CHECK CONDITION status by either: | |
1245 | ||
1246 | a) instructing the SCSI protocol (e.g. SCSI Parallel Interface (SPI)) | |
1247 | to perform an extra data in phase on such responses | |
1248 | b) or, the LLD issuing a REQUEST SENSE command itself | |
1249 | ||
1250 | Either way, when a status of CHECK CONDITION is detected, the mid level | |
1251 | decides whether the LLD has performed autosense by checking struct | |
1252 | scsi_cmnd::sense_buffer[0] . If this byte has an upper nibble of 7 (or 0xf) | |
1253 | then autosense is assumed to have taken place. If it has another value (and | |
1254 | this byte is initialized to 0 before each command) then the mid level will | |
1255 | issue a REQUEST SENSE command. | |
1256 | ||
1257 | In the presence of queued commands the "nexus" that maintains sense | |
1258 | buffer data from the command that failed until a following REQUEST SENSE | |
1259 | may get out of synchronization. This is why it is best for the LLD | |
1260 | to perform autosense. | |
1261 | ||
1262 | ||
1263 | Changes since lk 2.4 series | |
1264 | =========================== | |
1265 | io_request_lock has been replaced by several finer grained locks. The lock | |
1266 | relevant to LLDs is struct Scsi_Host::host_lock and there is | |
1267 | one per SCSI host. | |
1268 | ||
1269 | The older error handling mechanism has been removed. This means the | |
1270 | LLD interface functions abort() and reset() have been removed. | |
1271 | The struct scsi_host_template::use_new_eh_code flag has been removed. | |
1272 | ||
1273 | In the 2.4 series the SCSI subsystem configuration descriptions were | |
1274 | aggregated with the configuration descriptions from all other Linux | |
1275 | subsystems in the Documentation/Configure.help file. In the 2.6 series, | |
1276 | the SCSI subsystem now has its own (much smaller) drivers/scsi/Kconfig | |
1277 | file that contains both configuration and help information. | |
1278 | ||
1279 | struct SHT has been renamed to struct scsi_host_template. | |
1280 | ||
1281 | Addition of the "hotplug initialization model" and many extra functions | |
1282 | to support it. | |
1283 | ||
1284 | ||
1285 | Credits | |
1286 | ======= | |
1287 | The following people have contributed to this document: | |
1288 | ||
1289 | - Mike Anderson <andmike at us dot ibm dot com> | |
1290 | - James Bottomley <James dot Bottomley at hansenpartnership dot com> | |
1291 | - Patrick Mansfield <patmans at us dot ibm dot com> | |
1292 | - Christoph Hellwig <hch at infradead dot org> | |
1293 | - Doug Ledford <dledford at redhat dot com> | |
1294 | - Andries Brouwer <Andries dot Brouwer at cwi dot nl> | |
1295 | - Randy Dunlap <rdunlap at xenotime dot net> | |
1296 | - Alan Stern <stern at rowland dot harvard dot edu> | |
1297 | ||
1298 | ||
1299 | Douglas Gilbert | |
1300 | dgilbert at interlog dot com | |
1301 | ||
1302 | 21st September 2004 |