% Registration Block Devices and Transport Classes: Where are we % going? % Proposal James Bottomley (jejb@steeleye.com) A transport class is quite simply a device driver helper library with an associated sysfs component. Although this sounds deceptively simple, in practise it allows fairly large simplifications in device driver code. Up until recently, transport classes were restricted to be SCSI only, but now they can be made to apply to any device driver at all (including ones with no actual transports). The need for a transport class comes into most device driver subsystems that drive a class of devices. SCSI is a really good example of this: We have a core set of APIs which are needed by every SCSI driver (whether Parallel SCSI, Fibre Channel or something even more exotic) to do with queueing commands and interpreting status codes. However, there were a large number of ancillary services which don't apply to the whole of SCSI, like Domain Validation for Parallel SCSI or target disconnection/reconnection for Fibre Channel. The sysfs exposure gives the user a well known way to control device parameters (like period and offset, for parallel SCSI) without having to develop a core SCSI API. Since a transport class has only a sysfs interface and a driver API, it is completely independent of the SCSI core. This makes the classes arbitrarily extensible and imposes no limit on how many may be simultaneously present. This talk will examine the evolution of the transport class in SCSI, covering its current uses in Parallel SCSI (SPI), Fibre Channel (FC) and other transports (iSCSI and SAS), contrasting it with previous approaches, like CAM, and follow with a description of how the concept was freed from the SCSI subsystem and how it could be applied in other aspects of kernel development, particularly block devices.