xref: /linux/Documentation/scsi/scsi-generic.rst (revision cdd5b5a9761fd66d17586e4f4ba6588c70e640ea)
1d4d79340SMauro Carvalho Chehab.. SPDX-License-Identifier: GPL-2.0
2d4d79340SMauro Carvalho Chehab
3*8ebddfeeSRandy Dunlap========================
4*8ebddfeeSRandy DunlapSCSI Generic (sg) driver
5*8ebddfeeSRandy Dunlap========================
6d4d79340SMauro Carvalho Chehab
7d4d79340SMauro Carvalho Chehab                                                        20020126
8d4d79340SMauro Carvalho Chehab
9d4d79340SMauro Carvalho ChehabIntroduction
10d4d79340SMauro Carvalho Chehab============
11d4d79340SMauro Carvalho ChehabThe SCSI Generic driver (sg) is one of the four "high level" SCSI device
12*8ebddfeeSRandy Dunlapdrivers along with sd, st and sr (disk, tape and CD-ROM respectively). Sg
13d4d79340SMauro Carvalho Chehabis more generalized (but lower level) than its siblings and tends to be
14d4d79340SMauro Carvalho Chehabused on SCSI devices that don't fit into the already serviced categories.
15d4d79340SMauro Carvalho ChehabThus sg is used for scanners, CD writers and reading audio CDs digitally
16d4d79340SMauro Carvalho Chehabamongst other things.
17d4d79340SMauro Carvalho Chehab
18d4d79340SMauro Carvalho ChehabRather than document the driver's interface here, version information
19d4d79340SMauro Carvalho Chehabis provided plus pointers (i.e. URLs) where to find documentation
20d4d79340SMauro Carvalho Chehaband examples.
21d4d79340SMauro Carvalho Chehab
22d4d79340SMauro Carvalho Chehab
23d4d79340SMauro Carvalho ChehabMajor versions of the sg driver
24d4d79340SMauro Carvalho Chehab===============================
25*8ebddfeeSRandy DunlapThere are three major versions of sg found in the Linux kernel (lk):
26d4d79340SMauro Carvalho Chehab      - sg version 1 (original) from 1992 to early 1999 (lk 2.2.5) .
27d4d79340SMauro Carvalho Chehab	It is based in the sg_header interface structure.
28d4d79340SMauro Carvalho Chehab      - sg version 2 from lk 2.2.6 in the 2.2 series. It is based on
29d4d79340SMauro Carvalho Chehab	an extended version of the sg_header interface structure.
30d4d79340SMauro Carvalho Chehab      - sg version 3 found in the lk 2.4 series (and the lk 2.5 series).
31d4d79340SMauro Carvalho Chehab	It adds the sg_io_hdr interface structure.
32d4d79340SMauro Carvalho Chehab
33d4d79340SMauro Carvalho Chehab
34d4d79340SMauro Carvalho ChehabSg driver documentation
35d4d79340SMauro Carvalho Chehab=======================
36*8ebddfeeSRandy DunlapThe most recent documentation of the sg driver is kept at
37d4d79340SMauro Carvalho Chehab
38*8ebddfeeSRandy Dunlap- https://sg.danny.cz/sg/
39d4d79340SMauro Carvalho Chehab
40d4d79340SMauro Carvalho ChehabThis describes the sg version 3 driver found in the lk 2.4 series.
41d4d79340SMauro Carvalho Chehab
42*8ebddfeeSRandy DunlapDocumentation (large version) for the version 2 sg driver found in the
43*8ebddfeeSRandy Dunlaplk 2.2 series can be found at
44d4d79340SMauro Carvalho Chehab
45*8ebddfeeSRandy Dunlap- https://sg.danny.cz/sg/p/scsi-generic_long.txt.
46d4d79340SMauro Carvalho Chehab
47d4d79340SMauro Carvalho ChehabThe original documentation for the sg driver (prior to lk 2.2.6) can be
48*8ebddfeeSRandy Dunlapfound in the LDP archives at
49d4d79340SMauro Carvalho Chehab
50*8ebddfeeSRandy Dunlap- https://tldp.org/HOWTO/archived/SCSI-Programming-HOWTO/index.html
51d4d79340SMauro Carvalho Chehab
52d4d79340SMauro Carvalho ChehabA more general description of the Linux SCSI subsystem of which sg is a
53*8ebddfeeSRandy Dunlappart can be found at https://www.tldp.org/HOWTO/SCSI-2.4-HOWTO .
54d4d79340SMauro Carvalho Chehab
55d4d79340SMauro Carvalho Chehab
56d4d79340SMauro Carvalho ChehabExample code and utilities
57d4d79340SMauro Carvalho Chehab==========================
58d4d79340SMauro Carvalho ChehabThere are two packages of sg utilities:
59d4d79340SMauro Carvalho Chehab
60d4d79340SMauro Carvalho Chehab    =========   ==========================================================
61d4d79340SMauro Carvalho Chehab    sg3_utils   for the sg version 3 driver found in lk 2.4
62d4d79340SMauro Carvalho Chehab    sg_utils    for the sg version 2 (and original) driver found in lk 2.2
63d4d79340SMauro Carvalho Chehab                and earlier
64d4d79340SMauro Carvalho Chehab    =========   ==========================================================
65d4d79340SMauro Carvalho Chehab
66*8ebddfeeSRandy DunlapBoth packages will work in the lk 2.4 series. However, sg3_utils offers more
67*8ebddfeeSRandy Dunlapcapabilities. They can be found at: https://sg.danny.cz/sg/sg3_utils.html and
68d4d79340SMauro Carvalho Chehabfreecode.com
69d4d79340SMauro Carvalho Chehab
70d4d79340SMauro Carvalho ChehabAnother approach is to look at the applications that use the sg driver.
71d4d79340SMauro Carvalho ChehabThese include cdrecord, cdparanoia, SANE and cdrdao.
72d4d79340SMauro Carvalho Chehab
73d4d79340SMauro Carvalho Chehab
74d4d79340SMauro Carvalho ChehabMapping of Linux kernel versions to sg driver versions
75d4d79340SMauro Carvalho Chehab======================================================
76*8ebddfeeSRandy DunlapHere is a list of Linux kernels in the 2.4 series that had the new version
77d4d79340SMauro Carvalho Chehabof the sg driver:
78d4d79340SMauro Carvalho Chehab
79d4d79340SMauro Carvalho Chehab     - lk 2.4.0 : sg version 3.1.17
80d4d79340SMauro Carvalho Chehab     - lk 2.4.7 : sg version 3.1.19
81d4d79340SMauro Carvalho Chehab     - lk 2.4.10 : sg version 3.1.20 [#]_
82d4d79340SMauro Carvalho Chehab     - lk 2.4.17 : sg version 3.1.22
83d4d79340SMauro Carvalho Chehab
84d4d79340SMauro Carvalho Chehab.. [#] There were 3 changes to sg version 3.1.20 by third parties in the
85*8ebddfeeSRandy Dunlap       next six Linux kernel versions.
86d4d79340SMauro Carvalho Chehab
87*8ebddfeeSRandy DunlapFor reference here is a list of Linux kernels in the 2.2 series that had
88*8ebddfeeSRandy Dunlapthe new version of the sg driver:
89d4d79340SMauro Carvalho Chehab
90d4d79340SMauro Carvalho Chehab     - lk 2.2.0 : original sg version [with no version number]
91d4d79340SMauro Carvalho Chehab     - lk 2.2.6 : sg version 2.1.31
92d4d79340SMauro Carvalho Chehab     - lk 2.2.8 : sg version 2.1.32
93d4d79340SMauro Carvalho Chehab     - lk 2.2.10 : sg version 2.1.34 [SG_GET_VERSION_NUM ioctl first appeared]
94d4d79340SMauro Carvalho Chehab     - lk 2.2.14 : sg version 2.1.36
95d4d79340SMauro Carvalho Chehab     - lk 2.2.16 : sg version 2.1.38
96d4d79340SMauro Carvalho Chehab     - lk 2.2.17 : sg version 2.1.39
97d4d79340SMauro Carvalho Chehab     - lk 2.2.20 : sg version 2.1.40
98d4d79340SMauro Carvalho Chehab
99*8ebddfeeSRandy DunlapThe lk 2.5 development series currently contains sg version 3.5.23
100*8ebddfeeSRandy Dunlapwhich is functionally equivalent to sg version 3.1.22 found in lk 2.4.17.
101d4d79340SMauro Carvalho Chehab
102d4d79340SMauro Carvalho Chehab
103d4d79340SMauro Carvalho ChehabDouglas Gilbert
104d4d79340SMauro Carvalho Chehab
105d4d79340SMauro Carvalho Chehab26th January 2002
106d4d79340SMauro Carvalho Chehab
107d4d79340SMauro Carvalho Chehabdgilbert@interlog.com
108