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