Sophie

Sophie

distrib > Mandriva > 2010.0 > i586 > media > contrib-release > by-pkgid > e74e806c1a2640e922856d7eb69d1420 > files > 96

howto-text-ja-2006-5mdv2010.0.noarch.rpm

  The Linux SCSI programming HOWTO
  Heiko Eissfeldt heiko@colossus.escape.de
  v1.5, 7 May 1996
  II Ryouta(ˆäˆÉ —º‘¾) pessi@kmc.kyoto-u.ac.jp
  ˜a–ó 5 March 1998

  ‚±‚Ì•¶‘‚Í Linux ‚̔ėp SCSI ƒCƒ“ƒ^[ƒtƒF[ƒX‚̃vƒƒOƒ‰ƒ~ƒ“ƒO‚ðŽæˆµ‚¢
  ‚Ü‚·B
  ______________________________________________________________________

  –ÚŽŸ

  1. ÅVî•ñ
  2. ˜˜_
  3. ”Ä—p SCSI ƒCƒ“ƒ^[ƒtƒF[ƒX‚Ƃ́H
  4. Žg—p‚É‚ ‚½‚Á‚Ä•K—v‚È‚à‚̂́H
     4.1 ƒJ[ƒlƒ‹‚̃Rƒ“ƒtƒBƒMƒ…ƒŒ[ƒVƒ‡ƒ“
     4.2 ƒfƒoƒCƒXƒtƒ@ƒCƒ‹
     4.3 ƒfƒoƒCƒX‚̑Ήž•t‚¯
        4.3.1 SCSI ‘•’u‚Ì“®“I‚È‘}“ü‚ƍ폜

  5. ƒvƒƒOƒ‰ƒ}‚Ì‚½‚߂̃KƒCƒh
  6. ƒfƒoƒCƒXƒvƒƒOƒ‰ƒ~ƒ“ƒO‚ÌŠT—v
  7. ƒfƒoƒCƒX‚ðƒI[ƒvƒ“‚·‚é
  8. ƒwƒbƒ_\‘¢‘Ì
  9. Inquiry[Æ‰ï]ƒRƒ}ƒ“ƒh‚Ì—á
  10. ƒZƒ“ƒXƒoƒbƒtƒ@
  11. ƒZƒ“ƒXƒoƒbƒtƒ@‚ð—p‚¢‚é—á
  12. ioctl ŠÖ”
  13. ƒhƒ‰ƒCƒo‚̃fƒtƒHƒ‹ƒg
     13.1 Transfer Lengths “`’B’·
     13.2 ƒ^ƒCƒ€ƒAƒEƒg‹y‚эĎŽs‚Ì’l

  14. SCSI ‚ÌŽd—l‚̎擾
  15. ŠÖ˜Aî•ñŒ¹
     15.1 HOWTOs and FAQs HOWTO ‚Æ FAQ
     15.2 ƒ[ƒŠƒ“ƒOƒŠƒXƒg
     15.3 ƒR[ƒh—á

  16. ‘¼‚É–ð‚É—§‚‚à‚Ì
     16.1 ƒfƒoƒCƒXƒhƒ‰ƒCƒo‚ð‘‚­l‚̏•‚¯‚É‚È‚é‚à‚Ì
     16.2 ƒ†[ƒeƒBƒŠƒeƒB

  17. SCSI ‚ɃAƒNƒZƒX‚·‚é‚»‚Ì‘¼‚̃Cƒ“ƒ^[ƒtƒF[ƒX
  18. ‚¨‚í‚è‚É
  19. ŽÓŽ«
  A. •t˜^
  B. ƒGƒ‰[ˆ—
     B.1 ƒGƒ‰[ƒXƒe[ƒ^ƒX‚̉ð“Ç
     B.2 ƒXƒe[ƒ^ƒXƒR[ƒh
     B.3 SCSI Sense Keys
     B.4 Host codes
     B.5 Driver codes

  C. Additional sense codes  ‚¨‚æ‚Ñ additional sense code qualifiers
     C.1 ASC and ASCQ(Ž«‘‡)
     C.2 ASC and ASCQ(”ԍ†‡)

  D. SCSIƒRƒ}ƒ“ƒhƒR[ƒh‚̃NƒCƒbƒNƒŠƒtƒ@ƒŒƒ“ƒX
  E. ƒvƒƒOƒ‰ƒ€—á

  ______________________________________________________________________

  1.  ÅVî•ñ

  V‚µ‚¢ƒJ[ƒlƒ‹‚ł̓Cƒ“ƒ^[ƒtƒF[ƒX‚ª­‚µ•Ï‚í‚è‚Ü‚µ‚½B‚±‚ê‚͈ȑO‚Ɂuƒf
  ƒoƒCƒX‚̍ăXƒLƒƒƒ“v‚Ƒ肵‚Ä‚¢‚½Í‚ɉe‹¿‚ª‚ ‚è‚Ü‚·B¡‚Å‚Í SCSI ‹@Ší‚ð
  ƒVƒXƒeƒ€‰Ò“­’†‚ɒljÁ/íœ‚·‚邱‚Æ‚ª‰Â”\‚Å‚·B

  ƒJ[ƒlƒ‹ 1.3.98 ˆÈ~A‚¢‚­‚‚©‚̏d—v‚ȃwƒbƒ_ƒtƒ@ƒCƒ‹‚ªˆÚ“®/•ªŠ„‚³‚ê‚Ü
  ‚µ‚½ (sg.h ‚Æ scsi.h)B

  ‚¨‚΂©‚ȃoƒO‚Ì‚È‚©‚ɂ͐V‚µ‚¢‚à‚Ì‚ÉŽæ‚芷‚¦‚ç‚ꂽ‚à‚Ì‚à‚ ‚è‚Ü‚·B

  2.  ˜˜_

  ‚±‚Ì•¶‘‚Í Linux ‚̔ėp SCSI ƒCƒ“ƒ^[ƒtƒF[ƒX‚Ì“±“ü‚ƃvƒƒOƒ‰ƒ~ƒ“ƒO‚Ì
  ‚½‚ß‚ÌŽèˆø‚«‚Å‚·B

  ‚±‚Ì•¶‘‚̓J[ƒlƒ‹‚Å‚Ì•K—vðŒA‘•’u‚Ƃ̑ΉžA‚¨‚æ‚Ñ‘•’uŠÔ‚ÌŠî–{“I‚È‘Š
  ŒÝì—p‚ðƒJƒo[‚µ‚Ü‚·B‚¢‚­‚‚©‚Ì’Pƒ‚È C ƒvƒƒOƒ‰ƒ~ƒ“ƒO‚Ì—á‚àŠÜ‚Ü‚ê‚Ü
  ‚·BSCSI ƒRƒ}ƒ“ƒhƒZƒbƒg‚ɂ‚¢‚Ă̈ê”Ê“I‚È’mŽ¯‚ª•K—v‚Å‚·GSCSI •W€‹KŠi
  ‚ÆŠÖ˜Aî•ñ‚ÉŠÖ‚·‚éÚ‚µ‚¢î•ñ‚ɂ‚¢‚ẮA‚±‚Ì•¶‘‚Ì•t˜^‚ðŽQÆ‚µ‚Ä‚­‚¾‚³
  ‚¢B

  ‚±‚Ì•¶‘‚̃vƒŒ[ƒ“ƒeƒLƒXƒg‚̃o[ƒWƒ‡ƒ“‚ł́A‘ŠŒÝŽQÆ(``''‚ÅŽ¦‚³‚ê‚Ü‚·)
  ‚ªŒ‡—Ž‚µ‚Ä‚¢‚邱‚Æ‚É’ˆÓ‚µ‚Ä‚­‚¾‚³‚¢B

  3.  ”Ä—p SCSI ƒCƒ“ƒ^[ƒtƒF[ƒX‚Ƃ́H

  ”Ä—p(generic) SCSI ƒCƒ“ƒ^[ƒtƒF[ƒX‚Í SCSI ƒn[ƒhƒEƒFƒA‚Ì(‚Ђå‚Á‚Æ‚µ‚½
  ‚çƒGƒLƒ]ƒ`ƒbƒN‚È)•”•i‚ւ̈ê”Ê“I‚È SCSI ‚̃AƒNƒZƒX‚ð’ñ‹Ÿ‚·‚邽‚ß‚ÉŽÀ‘•
  ‚³‚ê‚Ü‚µ‚½BLawrence Foard ( entropy@world.std.com) ‚É‚æ‚Á‚ÄŠJ”­‚³‚êA
  Killy Corporation (scsi/sg.h‚É‚ ‚éƒRƒƒ“ƒg‚ðŽQÆ‚µ‚Ä‚­‚¾‚³‚¢) ‚É‚æ‚Á‚Ä
  Œã‰‡‚³‚ê‚Ü‚µ‚½B

  ‚±‚̃Cƒ“ƒ^[ƒtƒF[ƒX‚̓†[ƒUƒŒƒxƒ‹‚̃AƒvƒŠƒP[ƒVƒ‡ƒ“(‚·‚È‚í‚¿AƒJ[ƒl
  ƒ‹‚ÌŠO‘¤)‚©‚ç“Á•Ê‚È‹@Ší‘€ì‚ð‰Â”\‚É‚µ‚Ü‚·B‚¾‚©‚çAƒJ[ƒlƒ‹ƒhƒ‰ƒCƒo‚Ì
  ŠJ”­‚́A‚æ‚èŠëŒ¯‚ŃfƒoƒbƒO¢“ï‚È‚à‚Ì‚È‚Ì‚Å‚·‚ªA•K—v‚ ‚è‚Ü‚¹‚ñB

  ‚Æ‚Í‚¢‚¦A“KØ‚Ƀhƒ‰ƒCƒo‚ðì“®‚³‚¹‚È‚¢‚ƁASCSI ƒoƒX‚âƒhƒ‰ƒCƒo‚ ‚é‚¢‚Í
  ƒJ[ƒlƒ‹‚ðƒnƒ“ƒO‚·‚é‰Â”\«‚ª‚ ‚è‚Ü‚·B‚Å‚·‚©‚çA”Ä—pƒhƒ‰ƒCƒo‚𐳂µ‚­ì
  “®‚³‚¹‚邱‚ƂƁAƒf[ƒ^‚Ì‘rŽ¸‚ð”ð‚¯‚é‚½‚߂ɍŏ‰‚É‘S‚Ẵtƒ@ƒCƒ‹‚ðƒoƒbƒN
  ƒAƒbƒv‚·‚邱‚Æ‚ª‘åØ‚Å‚·B‘¼‚É‚à‚ ‚È‚½‚̃vƒƒOƒ‰ƒ€‚𑖂点‚é‘O‚É‚µ‚Ä‚¨
  ‚­‚Æ–ð‚É—§‚‚±‚Æ‚ª‚ ‚è‚Ü‚·B‘S‚Ẵoƒbƒtƒ@‚ªƒfƒBƒXƒN‚Ƀtƒ‰ƒbƒVƒ…‚³‚ê‚é
  ‚±‚Æ‚ðŠmŽÀ‚É‚·‚邽‚ß‚É sync ƒRƒ}ƒ“ƒh‚𔭍s‚·‚邱‚ƂŁA‚à‚µƒVƒXƒeƒ€‚ªƒn
  ƒ“ƒO‚µ‚Ä‚àƒf[ƒ^ƒƒX‚͍ŏ¬‚É‚È‚è‚Ü‚·B

  ”Ä—pƒhƒ‰ƒCƒo‚Ì‚à‚¤ˆê‚‚̗˜“_‚Æ‚µ‚ẮAƒCƒ“ƒ^[ƒtƒF[ƒXŽ©g‚ª•Ï‰»‚µ‚È‚¢
  ŒÀ‚èA‘S‚ẴAƒvƒŠƒP[ƒVƒ‡ƒ“‚͐V‚µ‚¢ƒJ[ƒlƒ‹‚ÌŠJ”­‚©‚ç“Æ—§‚µ‚Ä‚¢‚ç‚ê‚é
  ‚±‚Æ‚Å‚·B”äŠr‚·‚é‚È‚ç‚΁A‘¼‚̒჌ƒxƒ‹‚ȃJ[ƒlƒ‹ƒhƒ‰ƒCƒo‚Í‘¼‚̃J[ƒlƒ‹
  “à•”‚̕ω»‚Æ•à’²‚ð‡‚í‚³‚È‚¯‚ê‚΂Ȃè‚Ü‚¹‚ñB

  “TŒ^“I‚ɂ́A”Ä—pƒhƒ‰ƒCƒo‚Í‚Æ‚»‚Ì‹@”\‚Ì’·Š‚𐶂©‚·‚½‚ß‚É“ÁŽê‚ȃ†[ƒUƒA
  ƒvƒŠƒP[ƒVƒ‡ƒ“‚ª‘‚©‚ê‚é•K—v‚Ì‚ ‚éV‚µ‚¢ SCSI ƒn[ƒhƒEƒFƒA‘•’u(—á: ƒX
  ƒLƒƒƒi[AƒvƒŠƒ“ƒ^ACD-ROM ƒWƒ…[ƒNƒ{ƒbƒNƒX)‚ƒʐM‚·‚邽‚ß‚ÉŽg—p‚³‚ê‚Ü
  ‚·B”Ä—pƒCƒ“ƒ^[ƒtƒF[ƒX‚É‚æ‚Á‚Ä‚±‚ê‚ç‚̃AƒvƒŠƒP[ƒVƒ‡ƒ“‚ðv‘¬‚ɍì‚邱
  ‚Æ‚ª‚Å‚«‚Ü‚·B

  4.  Žg—p‚É‚ ‚½‚Á‚Ä•K—v‚È‚à‚̂́H

  4.1.  ƒJ[ƒlƒ‹‚̃Rƒ“ƒtƒBƒMƒ…ƒŒ[ƒVƒ‡ƒ“

  ‚ ‚È‚½‚ª Linux ‚É‚æ‚Á‚ăTƒ|[ƒg‚³‚ê‚Ä‚¢‚é SCSI ƒRƒ“ƒgƒ[ƒ‰‚ðŽ‚Á‚Ä‚¢
  ‚È‚¯‚ê‚΂Ȃç‚È‚¢‚Ì‚Í–¾‚ç‚©‚Å‚·B‰Á‚¦‚āA‚ ‚È‚½‚̃J[ƒlƒ‹‚ɔėp SCSI ƒT
  ƒ|[ƒg‚¾‚¯‚Å‚È‚­ƒRƒ“ƒgƒ[ƒ‰‚̃Tƒ|[ƒg‚à‘gž‚܂˂΂Ȃè‚Ü‚¹‚ñB Linux
  ƒJ[ƒlƒ‹‚Ì(/usr/src/linux ‚Å‚Ì make config ‚É‚æ‚é)ƒRƒ“ƒtƒBƒMƒ…ƒŒ[ƒVƒ‡
  ƒ“‚Í“TŒ^“I‚É‚ÍŽŸ‚̂悤‚É‚È‚è‚Ü‚·B

        ...
       *
       * SCSI support
       *
       SCSI support? (CONFIG_SCSI) [n] y
       *
       * SCSI support type (disk, tape, CDrom)
       *
        ...
       Scsi generic support (CONFIG_CHR_DEV_SG) [n] y
       *
       * SCSI low-level drivers
       *
        ...

  ‚à‚µ—˜—p‚Å‚«‚é‚È‚ç‚΁A‘ã‚í‚è‚Ƀ‚ƒWƒ…[ƒ‹‚ðì¬‚µ‚Ä‚à‚©‚Ü‚¢‚Ü‚¹‚ñB [–ó
  ’]

  make menuconfig

  4.2.  ƒfƒoƒCƒXƒtƒ@ƒCƒ‹

  ”Ä—p SCSI ƒhƒ‰ƒCƒo‚́A‘¼‚Ì SCSI ƒfƒoƒCƒXƒhƒ‰ƒCƒo‚É‚æ‚Á‚Ä—p‚¢‚ç‚ê‚é‚à‚Ì
  ‚Ƃ͕ʂ́AŒÅ—L‚̃fƒoƒCƒXƒtƒ@ƒCƒ‹‚ðŽg—p‚µ‚Ü‚·B‚»‚ê‚ç‚̃fƒoƒCƒXƒtƒ@ƒCƒ‹
  ‚́A’ʏí‚Í /devƒfƒBƒŒƒNƒgƒŠ‚É‚ ‚éAMAKEDEV ƒXƒNƒŠƒvƒg‚É‚æ‚Á‚ж¬‚·‚é
  ‚±‚Æ‚ª‚Å‚«‚Ü‚·BMAKEDEV sg‚𑖂点‚é‚ƈȉº‚̃tƒ@ƒCƒ‹‚ªì¬‚³‚ê‚Ü‚·F

       crw-------   1 root     system    21,   0 Aug 20 20:09 /dev/sga
       crw-------   1 root     system    21,   1 Aug 20 20:09 /dev/sgb
       crw-------   1 root     system    21,   2 Aug 20 20:09 /dev/sgc
       crw-------   1 root     system    21,   3 Aug 20 20:09 /dev/sgd
       crw-------   1 root     system    21,   4 Aug 20 20:09 /dev/sge
       crw-------   1 root     system    21,   5 Aug 20 20:09 /dev/sgf
       crw-------   1 root     system    21,   6 Aug 20 20:09 /dev/sgg
       crw-------   1 root     system    21,   7 Aug 20 20:09 /dev/sgh
                                          |    |
                                      major,   minor device numbers
                                   ƒƒWƒƒ[,   ƒ}ƒCƒi[  ƒfƒoƒCƒX”ԍ†

  ‚±‚ê‚ç‚Í’¼‚ɃAƒNƒZƒX‚·‚邽‚߂ɃLƒƒƒ‰ƒNƒ^ƒfƒoƒCƒX‚Å‚ ‚邱‚Æ‚É’ˆÓ‚µ‚Ä‚­
  ‚¾‚³‚¢BƒVƒXƒeƒ€‚É‚æ‚Á‚Ä‚Í‚±‚ê‚ç‚̃fƒoƒCƒX‚Í /dev/{sg0, sg1,...} ‚ÆŒÄ
  ‚΂ê‚Ä‚¢‚é‚©‚à‚µ‚ê‚Ü‚¹‚ñ‚ªAƒCƒ“ƒXƒg[ƒ‹‚µ‚½‚à‚Ì(–ó
  ’:Slackware,RedHat,Debian‚Ȃǂ̃pƒbƒP[ƒW)‚Ɉˑ¶‚µ‚Ü‚·‚̂ŁAˆÈ‰º‚Ì—á
  ‚Í“K“–‚É“Ç‚ÝŠ·‚¦‚Ä‚­‚¾‚³‚¢B

  4.3.  ƒfƒoƒCƒX‚̑Ήž•t‚¯

  ‚±‚ê‚ç‚̃fƒoƒCƒXƒtƒ@ƒCƒ‹‚Í SCSI ƒoƒXã‚Ì SCSI ID/LUN ‚ɑ΂µ‚Ä“®“I‚É‘Î
  ‰ž•t‚¯‚ç‚ê‚Ü‚·(LUN = ƒƒWƒJƒ‹ƒ†ƒjƒbƒg)B‚±‚̑Ήž•t‚¯‚Å‚Í’áˆÊ‚Ì LUN/ID/
  ƒoƒX ‚©‚çŽn‚Ü‚Á‚āASCSI ‚̃XƒLƒƒƒ“‚ÌŽž“_‚ɂ݂‚¯‚ç‚ꂽŠe SCSI ƒoƒXã‚Ì
  Še‘•’u‚ÌŠe LUN ‚ɑ΂µ‚ĘA‘±“I‚ɃfƒoƒCƒX(ƒtƒ@ƒCƒ‹‚̃}ƒCƒi[”ԍ†)‚ªŠ„“–
  ‚Ä‚ç‚ê‚Ü‚·B‚±‚ê‚͍ŏ‰‚Ì SCSI ƒRƒ“ƒgƒ[ƒ‰‚©‚çŽn‚Ü‚èA‘S‚Ă̈ȍ~‚̃Rƒ“
  ƒgƒ[ƒ‰‚É‚æ‚Á‚Ä’†’f‚³‚ê‚È‚¢ŒÀ‚èŒp‘±‚µ‚Ü‚·B‚±‚ê‚ÍŒ»Ý‚Ì‚Æ‚±‚ë SCSI ƒh
  ƒ‰ƒCƒo‚̏‰Šú‰»‚É‚¨‚¢‚Ä‚È‚³‚ê‚Ü‚·B

  —Ⴆ‚΁AŽO‚Â‚Ì SCSI ‘•’u‚ªÅ‰‚Ì SCSI ƒoƒXã‚Ì ID 1,3,5 ‚ɂ‚Ȃª‚Á‚Ä‚¢
  ‚é‚Æ‚µ‚Ü‚µ‚傤(‚»‚ꂼ‚ꂪˆê‚‚ÌLUN‚ðŽ‚Á‚Ä‚¢‚Ü‚·)B‚·‚é‚ƁAŒ‹‰Ê‚Æ‚µ‚Ä
  ˆÈ‰º‚̂悤‚ȑΉž•t‚¯‚ª‚È‚³‚ê‚é‚Å‚µ‚傤F

       /dev/sga -> SCSI id 1
       /dev/sgb -> SCSI id 3
       /dev/sgc -> SCSI id 5

  ‚à‚µV‚µ‚¢‘•’u‚ð ID 4 ‚ŒljÁ‚µ‚½‚È‚ç‚΁A(ŽŸ‰ñ‚̍ăXƒLƒƒƒ“Œã‚Ì)‘Ήž•t‚¯
  ‚́F

       /dev/sga -> SCSI id 1
       /dev/sgb -> SCSI id 3
       /dev/sgc -> SCSI id 4
       /dev/sgd -> SCSI id 5

  ‚Æ‚È‚è‚Ü‚·B

  ID 5 ‚ÉŠÖ‚·‚é•Ï‰»‚É’ˆÓ‚µ‚Ü‚µ‚傤B‘Ήž‚·‚éƒfƒoƒCƒX(ƒtƒ@ƒCƒ‹)‚Í‚à‚Í‚â
  /dev/sgc‚Å‚Í‚È‚­‚āA¡‚â/dev/sgd‚̉º‚ɑΉž‚³‚¹‚ç‚ê‚Ä‚¢‚Ü‚·B

  K‚¢‚É‚àAV‚µ‚¢ƒJ[ƒlƒ‹‚ł͏‡”Ô‚ð•ÏX‚·‚邱‚Æ‚ª‚Å‚«‚Ü‚·B

  4.3.1.  SCSI ‘•’u‚Ì“®“I‚È‘}“ü‚ƍ폜

  V‚µ‚¢ƒJ[ƒlƒ‹‚Æ/procƒtƒ@ƒCƒ‹ƒVƒXƒeƒ€‚ª‘–‚Á‚Ä‚¢‚é‚È‚ç‚΁AŽg—p‚³‚ê‚Ä‚¢
  ‚È‚¢‘•’u‚ðƒVƒXƒeƒ€‰Ò“­’†‚ÉŽæ‚èŠO‚µ‚½‚蓱“ü‚·‚邱‚Æ‚ª‚Å‚«‚Ü‚·B

  SCSI ‘•’u‚ðŽæ‚èŠO‚·‚ɂ́F

  echo "scsi remove-single-device a b c d" > /proc/scsi/scsi

  “¯—l‚É‚µ‚āASCSI ‘•’u‚ð’ljÁ‚·‚é‚ɂ́A

       echo "scsi add-single-device a b c d" > /proc/scsi/scsi

  ‚Æ‚µ‚Ü‚·B

  ‚±‚±‚Å

             a == ƒzƒXƒgƒAƒ_ƒvƒ^‚̔ԍ† (Å‰‚Ì‚à‚Ì‚ª 0)
             b == ƒzƒXƒgƒAƒ_ƒvƒ^ã‚Ì SCSI ƒ`ƒƒƒlƒ‹ (Å‰‚Ì‚à‚Ì‚ª 0)
             c == ID
             d == LUN (Å‰‚Ì‚à‚Ì‚ª 0)

  ‚Å‚·‚©‚ç‘Oq‚Ì—á‚É‚¨‚¯‚é /dev/sgc ‚Æ /dev/sgd ‚̑Ήž•t‚¯‚ð“ü‚ê‘Ö‚¦‚邽
  ‚߂ɂ́AŽŸ‚̂悤‚É‚·‚ê‚΂ł«‚é‚Å‚µ‚傤B [–󒍁Fcat /proc/scsi/scsi‚ð
  ŽÀs‚·‚ê‚΁A‚±‚ê‚ç‚Ì4‚‚̒l‚É‚È‚É‚ðÝ’è‚·‚ê‚΂¢‚¢‚©‚ª‚‚©‚ß‚é‚ÆŽv‚¢‚Ü
  ‚·B]

       echo "scsi remove-single-device 0 0 4 0" > /proc/scsi/scsi
       echo "scsi remove-single-device 0 0 5 0" > /proc/scsi/scsi
       echo "scsi add-single-device 0 0 5 0" > /proc/scsi/scsi
       echo "scsi add-single-device 0 0 4 0" > /proc/scsi/scsi

  ‚È‚º‚È‚çA”Ä—pƒfƒoƒCƒX‚Í‚»‚ê‚炪‘}“ü‚³‚ꂽ‡”ԂőΉž•t‚¯‚ç‚ê‚é‚©‚ç‚Å
  ‚·B

  ‚³‚ç‚É‘•’u‚ð SCSI ƒoƒX‚ɒljÁ‚·‚é‚Æ‚«‚́AV‚µ‚¢‘•’u‚É‚Í“o˜^‚Å‚«‚é—\”õ‚ª
  ŒÀ‚ç‚ê‚Ä‚¢‚邱‚Æ‚ðS‚É—¯‚ß‚Ä‚¨‚«‚Ü‚µ‚傤B‚±‚̃ƒ‚ƒŠ‚̓u[ƒgŽž‚ÉŠ„“–‚Ä
  ‚ç‚êA“ñ‚‚̑•’u‚ð‰Á‚¦‚邽‚ß‚Ì—]’n‚ª‚ ‚è‚Ü‚·B

  [–ó’]initrd‹@\‚Æ‘g‚ݍ‡‚킹‚邱‚Æ‚É‚æ‚èA‚±‚ÌŽd‘g‚Ý‚ð—p‚¢‚Ä‹@Ší\¬‚Ì
  •Ï‰»‚ɑ΂µ_“î‚ȃVƒXƒeƒ€‚ð\’z‚·‚邱‚Æ‚ª‚Å‚«‚é‚Å‚µ‚傤B

  5.  ƒvƒƒOƒ‰ƒ}‚Ì‚½‚߂̃KƒCƒh

  ˆÈ‰º‚͔̏͂ėp SCSI ƒCƒ“ƒ^[ƒtƒF[ƒX‚ðŽ©•ª‚̃AƒvƒŠƒP[ƒVƒ‡ƒ“‚Ì‚½‚ß‚ÉŽg
  —p‚µ‚½‚¢‚Æ‚¢‚¤ƒvƒƒOƒ‰ƒ}‚Ì‚½‚ß‚Ì‚à‚Ì‚Å‚·B—á‚ð—p‚¢‚āASCSI ‘•’u‚É
  INQUIRY ‚Æ TESTUNITREADY ƒRƒ}ƒ“ƒh‚É‚æ‚Á‚ăAƒNƒZƒX‚·‚é‚É‚Í‚Ç‚¤‚·‚ê‚΂æ
  ‚¢‚©‚ðŽ¦‚µ‚Ü‚·B

  ‚±‚ê‚ç‚̃R[ƒh—á‚ðŽg—p‚·‚éÛ‚́AˆÈ‰º‚Ì‚±‚Æ‚É’ˆÓ‚µ‚Ä‚­‚¾‚³‚¢F

  o  ƒwƒbƒ_ƒtƒ@ƒCƒ‹sg.h ‚¨‚æ‚Ñ scsi.h ‚̈ʒu‚̓J[ƒlƒ‹ƒo[ƒWƒ‡ƒ“ 1.3.98
     ‚ŕύX‚É‚È‚è‚Ü‚µ‚½B¡‚Å‚Í‚±‚ê‚ç‚̃tƒ@ƒCƒ‹‚Í
     /usr/src/linux/include/scsi‚Ɉʒu‚µ‚Ä‚¢‚Ü‚·B‚±‚±
     ‚Í/usr/include/scsi ‚ɑ΂µ‚ăŠƒ“ƒN‚³‚ê‚Ä‚¢‚邱‚Æ‚ªŠú‘Ò‚³‚ê‚Ü‚·BˆÈ
     ‘O‚́A‚±‚ê‚ç‚Í /usr/src/linux/drivers/scsi‚É‚ ‚è‚Ü‚µ‚½BƒeƒLƒXƒg‚Ì
     ˆÈ‰º‚ł͐V‚µ‚¢ƒJ[ƒlƒ‹‚ð‘z’肵‚Ä‚¢‚Ü‚·B

  o  ”Ä—p SCSI ƒCƒ“ƒ^[ƒtƒF[ƒX‚̓J[ƒlƒ‹ƒo[ƒWƒ‡ƒ“ 1.1.68 ‚ÅŠg’£‚³‚ê‚Ü
     ‚µ‚½GˆÈ~‚Ì—á‚ɂ͏­‚È‚­‚Æ‚à‚±‚̃o[ƒWƒ‡ƒ“‚ª•K—v‚Æ‚È‚è‚Ü‚·B‚µ‚©‚µ
     ƒJ[ƒlƒ‹ƒo[ƒWƒ‡ƒ“‚Ì1.1.77‚©‚ç1.1.89‚܂ŁA‚¨‚æ‚сA1.3.52‚©
     ‚ç1.3.56‚܂ŁA‚Í‚Ç‚¤‚¼”ð‚¯‚Ä‚­‚¾‚³‚¢B‚Æ‚¢‚¤‚̂́A‚±‚ê‚ç‚̃J[ƒlƒ‹
     ‚ł͔ėp SCSI ƒCƒ“ƒ^[ƒtƒF[ƒX‚ª–Å’ƒ‹ê’ƒ‚¾‚©‚ç‚Å‚·B

  o  ƒAƒNƒZƒX‚³‚ê‚éƒfƒoƒCƒX‚ð•\Œ»‚·‚éƒwƒbƒ_•”•ª‚̒萔 DEVICE ‚Í‚ ‚È‚½‚ª
     —˜—p‚Å‚«‚éƒfƒoƒCƒX‚ɏ]‚Á‚½‚à‚Ì‚Å‚È‚­‚Ä‚Í‚È‚è‚Ü‚¹‚ñ(``''Í‚ðŽQÆ‚µ‚Ä
     ‚­‚¾‚³‚¢)B

  6.  ƒfƒoƒCƒXƒvƒƒOƒ‰ƒ~ƒ“ƒO‚ÌŠT—v

  ƒwƒbƒ_ƒtƒ@ƒCƒ‹ include/scsi/sg.h ‚̓Cƒ“ƒ^[ƒtƒF[ƒX‚Ì‹Lq‚ðŠÜ‚ñ‚Å‚¢‚Ü
  ‚·(ƒJ[ƒlƒ‹ƒo[ƒWƒ‡ƒ“ 1.3.98 ‚ÉŠî‚¢‚Ä‚¢‚Ü‚·)F

       struct sg_header
        {
         int pack_len;    /* ‚â‚Á‚Ä‚­‚éƒpƒPƒbƒg’· (ƒwƒbƒ_ž‚Ý) */
         int reply_len;   /* Šú‘Ò‚³‚ê‚鉞“š‚̍ő咷 */
         int pack_id;     /* ƒpƒPƒbƒg‚Ì id ƒiƒ“ƒo[ */
         int result;      /* 0==ok, ‚»‚êˆÈŠO‚Í errno ƒR[ƒh‚ðŽwŽ¦ */
         unsigned int twelve_byte:1;
                      /* ƒOƒ‹[ƒv 6 & 7 ƒRƒ}ƒ“ƒh‚ɑ΂µ 12 ƒoƒCƒgƒRƒ}ƒ“ƒh’·‚ð‹­§ */
         unsigned int other_flags:31;                  /* «—ˆ—p */
         unsigned char sense_buffer[16]; /* read ‚É‚æ‚Á‚Ä‚Ì‚ÝŽg—p‚³‚ê‚é */
         /* ƒRƒ}ƒ“ƒh‚É‘±‚¢‚ăRƒ}ƒ“ƒh‚Ì‚½‚߂̃f[ƒ^(?) */
        };

  ‚±‚̍\‘¢‘̂͂ǂ̂悤‚É SCSI ƒRƒ}ƒ“ƒh‚ªˆ—‚³‚êA‚Ü‚½AƒRƒ}ƒ“ƒh‚ÌŽÀsŒ‹
  ‰Ê‚ð•ÛŽ‚·‚é‹óŠÔ‚ðŽ‚Á‚Ä‚¢‚é‚©‚ð•\‚µ‚Ä‚¢‚Ü‚·BŒÂX‚̍\‘¢‘̂̍\¬—v‘f‚É
  ‚‚¢‚Ä‚Í``''Í‚ÅŒã‚É‹c˜_‚µ‚Ü‚·B

  ”Ä—pƒfƒoƒCƒX‚ƃf[ƒ^‚ðŒðŠ·‚·‚é’ʏí‚Ì•û–@‚͈ȉº‚̂悤‚É‚È‚è‚Ü‚·FƒI[ƒv
  ƒ“‚µ‚½”Ä—pƒfƒoƒCƒX‚ɑ΂µƒRƒ}ƒ“ƒh‚𑗂邽‚ß‚ÉŽŸ‚ÌŽO‚‚̕”•ª‚ðŠÜ‚Þƒuƒƒb
  ƒN‚ðƒfƒoƒCƒX‚ɑ΂µ‚Ä write() ‚µ‚Ü‚·B

       struct sg_header
       SCSI ƒRƒ}ƒ“ƒh
       ƒRƒ}ƒ“ƒh‚ƈꏏ‚É‘—‚ç‚ê‚é‚ׂ«ƒf[ƒ^

  ƒRƒ}ƒ“ƒh‚ÌŒ‹‰Ê‚ðŠl“¾‚·‚é‚ɂ́A‚±‚ê(‚Æ“¯—l‚È)ƒuƒƒbƒN\‘¢‘Ì‚ð—p‚¢‚ău
  ƒƒbƒN‚ð read() ‚µ‚Ü‚·B

       struct sg_header
       ƒfƒoƒCƒX‚©‚ç‚â‚Á‚Ä—ˆ‚éƒf[ƒ^

  ‚±‚ꂪˆ—‰ß’ö‚̒ʏí‚ÌŠT—v‚Å‚·BˆÈ~‚̏͂ŊeƒXƒeƒbƒv‚ð‚à‚Á‚Əڂµ‚­‹Lq
  ‚µ‚Ü‚·B

  ’ˆÓFÅ‹ß‚̃J[ƒlƒ‹ƒo[ƒWƒ‡ƒ“‚ÉŽŠ‚é‚܂ŁASIGINT ƒVƒOƒiƒ‹‚ð write()‚Æ
  ‘Ήž‚·‚éread()‚̌Ăяo‚µ‚̊ԂŃuƒƒbƒN‚·‚é•K—v‚ª‚ ‚è‚Ü‚µ‚½(‚‚܂è
  sigprocmask() ‚É‚æ‚Á‚Ä)Bwrite() •”‚©‚猋‰Ê‚ðŽæ‚Á‚Ä‚­‚邽‚ß‚Ì read()
  ‚È‚µ‚Å•œ‹A‚·‚邱‚Æ‚Í‘±‚¢‚Ä‹N‚±‚éƒAƒNƒZƒX‚ðƒuƒƒbƒN‚·‚邱‚Æ‚É‚È‚è‚Ü‚·B
  ‚±‚̃VƒOƒiƒ‹‚̃uƒƒbƒN‚ÍŒ©–{‚̃R[ƒh‚É‚ÍŠÜ‚Ü‚ê‚Ä‚¢‚Ü‚¹‚ñB‚Å‚·‚©‚炱‚ê
  ‚ç‚ÌŒ©–{‚𑖂点‚éÛ‚É‚Í SIGINT (a la ‚ª–󂹂Ȃ¢^C )‚𔭍s‚·‚é‚ׂ«‚Å‚Í
  ‚ ‚è‚Ü‚¹‚ñB

  7.  ƒfƒoƒCƒX‚ðƒI[ƒvƒ“‚·‚é

  ”Ä—pƒfƒoƒCƒX‚Í read ‚¨‚æ‚Ñ write ƒAƒNƒZƒX‚ŃI[ƒvƒ“‚³‚ê‚é•K—v‚ª‚ ‚è‚Ü
  ‚·F

               int fd = open (device_name, O_RDWR);

  (‚±‚ê‚ÍCD-ROMƒhƒ‰ƒCƒu‚̂悤‚ȓǂݏo‚µê—p‚̃n[ƒhƒEƒFƒA‘•’u‚ɑ΂µ‚Ä‚à
  ‚ ‚Ä‚Í‚Ü‚è‚Ü‚·)B

  ƒRƒ}ƒ“ƒh‚𑗏o‚·‚é‚É‚Íwrite‚ðA‚È‚ñ‚ç‚©‚ÌŒ‹‰Ê‚𓾂é‚É‚Íread‚ðŽÀs‚µ‚È
  ‚¯‚ê‚΂Ȃè‚Ü‚¹‚ñBƒGƒ‰[‚̏ꍇ‚É‚Í•Ô‚è’l‚Í•‰‚Å‚·(Š®‘S‚ȃŠƒXƒg‚Í``''Í
  ‚ðŽQÆ‚µ‚Ä‚­‚¾‚³‚¢)B

  8.  ƒwƒbƒ_\‘¢‘Ì

  ƒwƒbƒ_\‘¢‘Ì struct sg_header ‚̓AƒvƒŠƒP[ƒVƒ‡ƒ“‚ƃJ[ƒlƒ‹ƒhƒ‰ƒCƒo‚ÌŠÔ
  ‚Ì’²®‘w‚ð‚‚Ƃ߂܂·B‚ł͍\¬—v‘f‚ɂ‚¢‚ďڂµ‚­˜_‚¶‚邱‚Æ‚É‚µ‚Ü‚µ‚å
  ‚¤B

     int pack_len
        ‚̓hƒ‰ƒCƒo‚ɏ‘‚©‚ê‚éƒuƒƒbƒN‚̃TƒCƒY‚ð’è‹`‚µ‚Ü‚·B‚±‚ê‚̓J[ƒlƒ‹
        ‚É‚¨‚¢‚Ä“à•”‚Å‚ÌŽg—p‚Ì‚½‚ß‚É’è‹`‚³‚ê‚Ü‚·B

     int reply_len
        ‚͉ž“š‚Ŏ󂯎æ‚ç‚ê‚éƒuƒƒbƒN‚̃TƒCƒY‚ð’è‹`‚µ‚Ü‚·B‚±‚ê‚̓AƒvƒŠƒP
        [ƒVƒ‡ƒ“‚Ì‘¤‚©‚ç’è‹`‚³‚ê‚Ü‚·B

     int pack_id
        ‚±‚̃tƒB[ƒ‹ƒh‚Í—v‹‚ɑ΂·‚é‰ñ“š‚ðŠ„“–‚Ä‚é‚̂ɖ𗧂¿‚Ü‚·BƒAƒvƒŠ
        ƒP[ƒVƒ‡ƒ“‚ÍŠe—v‹‚ɑ΂µ‚ĈêˆÓ‚Ìid‚ð—^‚¦‚邱‚Æ‚ª‚Å‚«‚Ü‚·B”ŒÂ‚Ì
        ƒRƒ}ƒ“ƒh(—Ⴆ‚Î 4‚Â)‚ðˆê‚‚̃fƒoƒCƒX‚É write ‚µ‚½‚Æ‚µ‚Ü‚µ‚傤B
        ‚»‚ê‚ç‚̃Rƒ}ƒ“ƒh‚Í•À—ñ‚É“®ì‚µA‚Ç‚ê‚©ˆê‚‚ªÅ‚à‘¬‚¢‚Å‚µ‚傤B
        4‰ñ‚Ì read ‚É‚æ‚Á‚ĉñ“š‚ðŽó‚¯Žæ‚éÛA‰ñ“š‚Í—v‹‚µ‚½’ʂ菇”Ô‚Å‚ 
        ‚é•K—v‚Í‚ ‚è‚Ü‚¹‚ñB—^‚¦‚½—v‹‚ɑ΂·‚鐳‚µ‚¢‰ñ“š‚ð“Á’è‚·‚邽‚ß‚É
        pack_id ƒtƒB[ƒ‹ƒh‚ðŽg—p‚·‚邱‚Æ‚ª‚Å‚«‚Ü‚·B“TŒ^“I‚É‚Í‚»‚Ì’l‚ÍŠe
        —v‹‚²‚ƂɉÁ‘‚³‚ê‚Ü‚·(‚»‚µ‚¢‚ɂ͈êŽü‚µ‚Ü‚·)B–¢‰ðŒˆ‚Ì—v‹‚Ì
        Å‘å—ʂ̓J[ƒlƒ‹‚É‚æ‚Á‚Ä SG_MAX_QUEUE (—Ⴆ‚Î 4)‚ɐ§ŒÀ‚³‚ê‚Ä‚¢‚Ü
        ‚·B

     int result
        read ‚ ‚é‚¢‚Í write ŒÄ‚яo‚µ‚ÌŒ‹‰ÊƒR[ƒhB‚±‚ê‚Í(‚½‚Ü‚É)”Ä—pƒhƒ‰
        ƒCƒo(ƒJ[ƒlƒ‹)‘¤‚©‚ç’è‹`‚³‚ê‚Ü‚·B write ‚ðŒÄo‚·‘O‚É‚Í NULL ‚É
        ‚µ‚Ä‚¨‚­‚Ì‚ªˆÀ‘S‚Å‚·B‚±‚ê‚ç‚̃R[ƒh‚Í errno.h ‚É‚¨‚¢‚Ä’è‹`‚³‚ê
        ‚Ä‚¢‚Ü‚·(0 ‚̓Gƒ‰[‚È‚µ‚ðˆÓ–¡)B

     unsigned int twelve_byte:1
        ‚±‚̃tƒB[ƒ‹ƒh‚Í”ñ•W€‚̃xƒ“ƒ_ŒÅ—L‚̃Rƒ}ƒ“ƒh‚ðŽg—p‚·‚鎞‚É‚¾‚¯•K
        —v‚Å‚· (0xf0 - 0xff ‚͈̔Í)B‚±‚ê‚ç‚̃Rƒ}ƒ“ƒh‚̃Rƒ}ƒ“ƒh’·‚ª 10
        ‚Å‚Í‚È‚­ 12 ‚Ì‚Æ‚«‚́A‚±‚̃tƒB[ƒ‹ƒh‚Í write ‚̌Ăяo‚µ‚Ì‘O‚É 1
        ‚ɃZƒbƒg‚³‚ê‚˂΂Ȃè‚Ü‚¹‚ñB‚»‚êˆÈŠOƒRƒ}ƒ“ƒh’·‚̓Tƒ|[ƒg‚³‚ê‚Ä‚¢
        ‚Ü‚¹‚ñB‚±‚ê‚̓AƒvƒŠƒP[ƒVƒ‡ƒ“‘¤‚©‚ç’è‹`‚³‚ê‚Ü‚·B

     unsigned char sense_buffer[16]
        ‚±‚̃oƒbƒtƒ@‚̓Rƒ}ƒ“ƒh‚ªŠ®‹‚µ‚½Œã(read() ‚̌Ăяo‚µ‚ÌŒã)‚ŃZƒb
        ƒg‚³‚ê SCSI ‚̃Zƒ“ƒXƒR[ƒh‚ðŠÜ‚ñ‚Å‚¢‚Ü‚·BƒRƒ}ƒ“ƒh‚ÌŒ‹‰Ê‚É‚æ‚Á‚Ä
        ‚Í‚±‚±‚©‚ç“ǂݏo‚³‚˂΂Ȃç‚È‚¢‚à‚Ì‚à‚ ‚è‚Ü‚·(—Ⴆ‚Î
        TESTUNITREADY)B’ʏí‚Í 0 ƒoƒCƒg‚µ‚©‚ ‚è‚Ü‚¹‚ñB‚±‚̃tƒB[ƒ‹ƒh‚Ì
        ’l‚͔ėpƒhƒ‰ƒCƒo (ƒJ[ƒlƒ‹)‘¤‚©‚çƒZƒbƒg‚³‚ê‚Ü‚·B

  ŽŸ‚ÌŒ©–{‚̊֐”‚Í’¼Ú”Ä—pƒJ[ƒlƒ‹ƒhƒ‰ƒCƒo‚ɍì—p‚µ‚Ü‚·Bƒwƒbƒ_\‘¢‘Ì‚ð’è
  ‹`‚µA write ‚ð—p‚¢‚ăRƒ}ƒ“ƒh‚𑗏o‚µAread ‚É‚æ‚Á‚ÄŒ‹‰Ê‚ðŽó‚¯Žæ‚èA‘½
  ­‚Ì(ŒÀ‚ç‚ꂽ)ƒGƒ‰[ƒ`ƒFƒbƒN‚ðs‚¢‚Ü‚·BƒZƒ“ƒXƒoƒbƒtƒ@ƒf[ƒ^‚͏o—̓oƒb
  ƒtƒ@‚Ì’†‚ÅŽè‚É“ü‚ê‚邱‚Æ‚ª‚Å‚«‚Ü‚·(ƒkƒ‹ƒ|ƒCƒ“ƒ^‚ª—^‚¦‚ç‚ê‚Ä‚¢‚È‚¢ŒÀ
  ‚èA‚»‚̏ꍇ‚Í“ü—̓oƒbƒtƒ@“à‚É‚ ‚è‚Ü‚·)B‚±‚ê‚ðˆÈ‰º‚Ì—á‚Ì’†‚Å—p‚¢‚邱
  ‚Æ‚É‚µ‚Ü‚·B

  ’ˆÓFDEVICE‚Ì’l‚ð‚ ‚È‚½‚̃fƒoƒCƒX‚ð‹Lq‚·‚é‚à‚̂ɐݒ肵‚Ä‚­‚¾‚³‚¢B

  #define DEVICE "/dev/sgc"

  /* ”Ä—p SCSI ƒCƒ“ƒ^[ƒtƒF[ƒX‚ðŽÀÛ‚É“®‚©‚µ‚Ă݂錩–{ƒvƒƒOƒ‰ƒ€ */
  #include <stdio.h>
  #include <unistd.h>
  #include <string.h>
  #include <fcntl.h>
  #include <errno.h>
  #include <scsi/sg.h>

  #define SCSI_OFF sizeof(struct sg_header)
  static unsigned char cmd[SCSI_OFF + 18];      /* SCSI ƒRƒ}ƒ“ƒh ƒoƒbƒtƒ@ */
  int fd;                               /* SCSI ƒfƒoƒCƒX/ƒtƒ@ƒCƒ‹ ƒfƒBƒXƒNƒŠƒvƒ^ */

  /* Š®Œ‹‚µ‚½ SCSI ƒRƒ}ƒ“ƒh‚ðˆ—B ”Ä—p SCSI ƒCƒ“ƒ^[ƒtƒF[ƒX‚ðŽg—p */
  static int handle_SCSI_cmd(unsigned cmd_len,         /* ƒRƒ}ƒ“ƒh’· */
                             unsigned in_size,         /* “ü—̓f[ƒ^ƒTƒCƒY */
                             unsigned char *i_buff,    /* “ü—̓oƒbƒtƒ@ */
                             unsigned out_size,        /* o—̓f[ƒ^ƒTƒCƒY */
                             unsigned char *o_buff     /* o—̓oƒbƒtƒ@ */
                             )
  {
      int status = 0;
      struct sg_header *sg_hd;

      /* ˆÀ‘S«ŒŸ¸ */
      if (!cmd_len) return -1;            /* cmd_len != 0 ‚ª•K—v */
      if (!i_buff) return -1;             /* “ü—̓oƒbƒtƒ@‚ª NULL ‚Å‚È‚¢‚±‚Æ */
  #ifdef SG_BIG_BUFF
      if (SCSI_OFF + cmd_len + in_size > SG_BIG_BUFF) return -1;
      if (SCSI_OFF + out_size > SG_BIG_BUFF) return -1;
  #else
      if (SCSI_OFF + cmd_len + in_size > 4096) return -1;
      if (SCSI_OFF + out_size > 4096) return -1;
  #endif

      if (!o_buff) out_size = 0;      /* o—̓oƒbƒtƒ@‚È‚µAo—̓TƒCƒY‚È‚µ */

      /* ”Ä—p SCSI ƒfƒoƒCƒXƒwƒbƒ_‚̍\’z */
      sg_hd = (struct sg_header *) i_buff;
      sg_hd->reply_len   = SCSI_OFF + out_size;
      sg_hd->twelve_byte = cmd_len == 12;
      sg_hd->result = 0;
  #if     0
      sg_hd->pack_len    = SCSI_OFF + cmd_len + in_size; /* •s—v */
      sg_hd->pack_id;     /* –¢Žg—p */
      sg_hd->other_flags; /* –¢Žg—p */
  #endif

      /* ƒRƒ}ƒ“ƒh‘—o */
      status = write( fd, i_buff, SCSI_OFF + cmd_len + in_size );
      if ( status < 0 || status != SCSI_OFF + cmd_len + in_size ||
                         sg_hd->result ) {
          /* ‚È‚ñ‚ç‚©‚̃Gƒ‰[‚ª”­¶ */
          fprintf( stderr, "write(generic) result = 0x%x cmd = 0x%x\n",
                      sg_hd->result, i_buff[SCSI_OFF] );
          perror("");
          return status;
      }

      if (!o_buff) o_buff = i_buff;       /* ƒoƒbƒtƒ@‚̃|ƒCƒ“ƒ^‚ðƒ`ƒFƒbƒN */

      /* Œ‹‰Ê‚ð‰ñŽû */
      status = read( fd, o_buff, SCSI_OFF + out_size);
      if ( status < 0 || status != SCSI_OFF + out_size || sg_hd->result ) {
          /* ‚È‚ñ‚ç‚©‚̃Gƒ‰[‚ª”­¶ */
          fprintf( stderr, "read(generic) status = 0x%x, result = 0x%x, "
                           "cmd = 0x%x\n",
                           status, sg_hd->result, o_buff[SCSI_OFF] );
          fprintf( stderr, "read(generic) sense "
                  "%x %x %x %x %x %x %x %x %x %x %x %x %x %x %x %x\n",
                  sg_hd->sense_buffer[0],         sg_hd->sense_buffer[1],
                  sg_hd->sense_buffer[2],         sg_hd->sense_buffer[3],
                  sg_hd->sense_buffer[4],         sg_hd->sense_buffer[5],
                  sg_hd->sense_buffer[6],         sg_hd->sense_buffer[7],
                  sg_hd->sense_buffer[8],         sg_hd->sense_buffer[9],
                  sg_hd->sense_buffer[10],        sg_hd->sense_buffer[11],
                  sg_hd->sense_buffer[12],        sg_hd->sense_buffer[13],
                  sg_hd->sense_buffer[14],        sg_hd->sense_buffer[15]);
          if (status < 0)
              perror("");
      }
      /* Žó‚¯Žæ‚é‚ׂ«‚à‚Ì‚ðŽó‚¯Žæ‚Á‚½‚©‚Ç‚¤‚©‚ð‚Ý‚é */
      if (status == SCSI_OFF + out_size) status = 0; /* ‘S•”‚à‚ç‚Á‚½ */

      return status;  /* 0 ‚̓Gƒ‰[‚È‚µ‚ðˆÓ–¡ */
  }

  ‚±‚ê‚͍ŏ‰‚Í‚¢‚­‚Ô‚ñ‚©•¡ŽG‚É‚Ý‚¦‚é‚©‚à‚µ‚ê‚Ü‚¹‚ñ‚ªAƒR[ƒh‚Ì‚Ù‚Æ‚ñ‚Ç‚Í
  ƒGƒ‰[‚̃`ƒFƒbƒN‚Æ•ñ‚Å‚·(‚±‚ê‚̓R[ƒh‚ª“®ì‚·‚é‚悤‚É‚È‚Á‚½‚ ‚Æ‚Å‚à
  –ð‚É—§‚¿‚Ü‚·)B

  Handle_SCSI_cmd ‚Í‘S‚Ä‚Ì SCSI ƒRƒ}ƒ“ƒh‚ÌŽí—ނɑ΂µ‚Ă̈ê”Ê“I‚ÈŒ`Ž®‚ð”õ
  ‚¦‚Ä‚¢‚āAˆÈ‰º‚̂悤‚É•ª—Þ‚³‚ê‚Ü‚·F

           ƒf[ƒ^ƒ‚[ƒh     | ƒRƒ}ƒ“ƒh‚Ì—á
       ===============================================
        “ü—́Eo—̓f[ƒ^‚Æ‚à‚É‚È‚µ | test unit ready
       “ü—̓f[ƒ^‚È‚µAo—̓f[ƒ^‚ ‚è| inquiry, read
       “ü—̓f[ƒ^‚ ‚èAo—̓f[ƒ^‚È‚µ| mode select, write
        “ü—́Eo—̓f[ƒ^‚Æ‚à‚É‚ ‚è | mode sense

  9.  Inquiry[Æ‰ï]ƒRƒ}ƒ“ƒh‚Ì—á

  ‚à‚Á‚Æ‚àŠî–{“I‚È SCSI ƒRƒ}ƒ“ƒh‚̈ê‚‚ª INQUIRY ƒRƒ}ƒ“ƒh‚ŁA‘•’u‚ÌŽí—Þ
  ‚ƍ\¬‚𖾂炩‚É‚·‚邽‚ß‚ÉŽg—p‚³‚ê‚Ü‚·BˆÈ‰º‚ÍSCSI-2 Žd—l‘‚©‚ç‚Ì’è‹`
  ‚Å‚·(Ú×‚Í SCSI-2 •W€‹KŠi‚ðŽQÆ‚Ì‚±‚Æ)B

                              Table 44: INQUIRY Command
  +=====-========-========-========-========-========-========-========-========+
  |  Bit|   7    |   6    |   5    |   4    |   3    |   2    |   1    |   0    |
  |Byte |        |        |        |        |        |        |        |        |
  |=====+=======================================================================|
  | 0   |                           Operation Code (12h)                        |
  |-----+-----------------------------------------------------------------------|
  | 1   | Logical Unit Number      |                  Reserved         |  EVPD  |
  |-----+-----------------------------------------------------------------------|
  | 2   |                           Page Code                                   |
  |-----+-----------------------------------------------------------------------|
  | 3   |                           Reserved                                    |
  |-----+-----------------------------------------------------------------------|
  | 4   |                           Allocation Length                           |
  |-----+-----------------------------------------------------------------------|
  | 5   |                           Control                                     |
  +=============================================================================+

  o—̓f[ƒ^‚͈ȉº‚Ì’Ê‚èF

                       Table 45: Standard INQUIRY Data Format
  +=====-========-========-========-========-========-========-========-========+
  |  Bit|   7    |   6    |   5    |   4    |   3    |   2    |   1    |   0    |
  |Byte |        |        |        |        |        |        |        |        |
  |=====+==========================+============================================|
  | 0   | Peripheral Qualifier     |           Peripheral Device Type           |
  |-----+-----------------------------------------------------------------------|
  | 1   |  RMB   |                  Device-Type Modifier                        |
  |-----+-----------------------------------------------------------------------|
  | 2   |   ISO Version   |       ECMA Version       |  ANSI-Approved Version   |
  |-----+-----------------+-----------------------------------------------------|
  | 3   |  AENC  | TrmIOP |     Reserved    |         Response Data Format      |
  |-----+-----------------------------------------------------------------------|
  | 4   |                           Additional Length (n-4)                     |
  |-----+-----------------------------------------------------------------------|
  | 5   |                           Reserved                                    |
  |-----+-----------------------------------------------------------------------|
  | 6   |                           Reserved                                    |
  |-----+-----------------------------------------------------------------------|
  | 7   | RelAdr | WBus32 | WBus16 |  Sync  | Linked |Reserved| CmdQue | SftRe  |
  |-----+-----------------------------------------------------------------------|
  | 8   | (MSB)                                                                 |
  |- - -+---                        Vendor Identification                    ---|
  | 15  |                                                                 (LSB) |
  |-----+-----------------------------------------------------------------------|
  | 16  | (MSB)                                                                 |
  |- - -+---                        Product Identification                   ---|
  | 31  |                                                                 (LSB) |
  |-----+-----------------------------------------------------------------------|
  | 32  | (MSB)                                                                 |
  |- - -+---                        Product Revision Level                   ---|
  | 35  |                                                                 (LSB) |
  |-----+-----------------------------------------------------------------------|
  | 36  |                                                                       |
  |- - -+---                        Vendor Specific                          ---|
  | 55  |                                                                       |
  |-----+-----------------------------------------------------------------------|
  | 56  |                                                                       |
  |- - -+---                        Reserved                                 ---|
  | 95  |                                                                       |
  |=====+=======================================================================|
  |     |                       Vendor-Specific Parameters                      |
  |=====+=======================================================================|
  | 96  |                                                                       |
  |- - -+---                        Vendor Specific                          ---|
  | n   |                                                                       |
  +=============================================================================+

  ŽŸ‚Ì—á‚͒჌ƒxƒ‹ŠÖ” handle_SCSI_cmd ‚ð Inquiry SCSI ƒRƒ}ƒ“ƒh‚ðŽÀs‚·
  ‚邽‚ß‚ÉŽg—p‚µ‚Ü‚·B

  Å‰‚É‹¤’ʃwƒbƒ_‚ɃRƒ}ƒ“ƒh•”‚ð’ljÁ‚µA‚»‚ê‚©‚ç handle_SCSI_cmd ‚ðŒÄ‚Ñ
  o‚µ‚Ü‚·Bhandle_SCSI_cmd ‚̌Ăяo‚µ‚ɑ΂·‚éo—̓oƒbƒtƒ@ƒTƒCƒY‚̈ø”‚Í
  ‹¤’ʃwƒbƒ_‚̃TƒCƒY‚ðœŠO‚µ‚Ä‚¢‚邱‚Æ‚É’ˆÓ‚µ‚Ä‚­‚¾‚³‚¢BƒGƒ‰[‚ª”­¶‚µ
  ‚È‚©‚Á‚½‚È‚ç‚΁AƒRƒ}ƒ“ƒh‚ªŠ®Œ‹‚µ‚½Œã‚ɏo—̓oƒbƒtƒ@‚Í—v‹‚³‚ꂽƒf[ƒ^‚ð
  •Û—L‚·‚邱‚Æ‚É‚È‚è‚Ü‚·B

  #define INQUIRY_CMD     0x12
  #define INQUIRY_CMDLEN  6
  #define INQUIRY_REPLY_LEN 96
  #define INQUIRY_VENDOR  8       /* •Ô“šƒf[ƒ^“à‚̃xƒ“ƒ_–¼‚̃IƒtƒZƒbƒg */

  /* ƒxƒ“ƒ_‚̃uƒ‰ƒ“ƒh‚ƃ‚ƒfƒ‹‚ð—v‹ */
  static unsigned char *Inquiry ( void )
  {
    static unsigned char Inqbuffer[ SCSI_OFF + INQUIRY_REPLY_LEN ];
    unsigned char cmdblk [ INQUIRY_CMDLEN ] =
        { INQUIRY_CMD,  /* command */
                    0,  /* lun/reserved */
                    0,  /* page code */
                    0,  /* reserved */
    INQUIRY_REPLY_LEN,  /* allocation length */
                    0 };/* reserved/flag/link */

    memcpy( cmd + SCSI_OFF, cmdblk, sizeof(cmdblk) );

    /*
     * +------------------+
     * | struct sg_header | <- cmd
     * +------------------+
     * | copy of cmdblk   | <- cmd + SCSI_OFF
     * +------------------+
     */

    if (handle_SCSI_cmd(sizeof(cmdblk), 0, cmd,
                        sizeof(Inqbuffer) - SCSI_OFF, Inqbuffer )) {
        fprintf( stderr, "Inquiry failed\n" );
        exit(2);
    }
    return (Inqbuffer + SCSI_OFF);
  }

  ã‚Ì—á‚ÍŽŸ‚̂悤‚ȍ\‘¢‚É‚È‚Á‚Ä‚¢‚Ü‚·BInquiry ŠÖ”‚Í‚»‚̃Rƒ}ƒ“ƒh•”‚ð‹¤
  ’ʃwƒbƒ_‚Ì‚ ‚Æ(SCSI_OFF‚É‚æ‚Á‚Ä—^‚¦‚ç‚ê‚Ü‚·)‚ɃRƒs[‚µ‚Ü‚·B“ü—̓f[ƒ^
  ‚Í‚±‚̃Rƒ}ƒ“ƒh‚ɑ΂µ‚Ä‚Í‘¶Ý‚µ‚Ü‚¹‚ñB Handle_SCSI_cmd ‚ªƒwƒbƒ_\‘¢‘Ì
  ‚ð’è‹`‚µ‚Ü‚·B¡‚âŠÖ” main ‚ðŽÀ‘•‚µA‚±‚̍ì‹Æ’†‚ÌŒ©–{ƒvƒƒOƒ‰ƒ€‚ðŠ®¬
  ‚Å‚«‚Ü‚·B

       void main( void )
       {
         fd = open(DEVICE, O_RDWR);
         if (fd < 0) {
           fprintf( stderr, "Need read/write permissions for "DEVICE".\n" );
           exit(1);
         }

         /* Inquiry ‚ÌŒ‹‰Ê‚̈ꕔ‚̃tƒB[ƒ‹ƒh‚ð•\Ž¦ */
         printf( "%s\n", Inquiry() + INQUIRY_VENDOR );
       }

  Å‰‚ɃfƒoƒCƒXƒI[ƒvƒ“‚µAƒGƒ‰[‚ðƒ`ƒFƒbƒN‚µ‚Ä‚©‚çA‚ˆÊ‚̃Tƒuƒ‹[ƒ`ƒ“
  ‚ðŒÄ‚яo‚µ‚Ü‚·B‚»‚ÌŒãAƒxƒ“ƒ_A»•i‹y‚уŠƒrƒWƒ‡ƒ“‚È‚Ç‚ÌŒ‹‰Ê‚ðlŠÔ‚ª“Ç
  ‚ß‚éŒ`Ž®‚Å•\Ž¦‚µ‚Ü‚·B
  ’ˆÓ: Inquiry ‚ÌŒ‹‰Ê‚É‚Í‚±‚̏¬‚³‚ȃvƒƒOƒ‰ƒ€‚ª‹Ÿ‚·‚é‚æ‚è‚à‚à‚Á‚Æ‘½‚­‚Ì
  î•ñ‚ª‚ ‚è‚Ü‚·B‚±‚̃vƒƒOƒ‰ƒ€‚ðƒfƒoƒCƒX‚ÌŽí—Þ‚â ANSI ‚̃o[ƒWƒ‡ƒ“‚È‚Ç
  ‚ðo‚·‚悤‚ÉŠg’£‚µ‚½‚­‚È‚é‚©‚à‚µ‚ê‚Ü‚¹‚ñBƒfƒoƒCƒX‚ÌŽí—Þ‚É‚Í“Á•Ê‚ȏd—v
  «‚ª‚ ‚è‚Ü‚·B‚Æ‚¢‚¤‚Ì‚Í‚±‚ꂪ‚»‚Ì‘•’u‚ɑ΂·‚é•K{‚¨‚æ‚уIƒvƒVƒ‡ƒ“‚̃R
  ƒ}ƒ“ƒhƒZƒbƒg‚ðŒˆ’è‚·‚é‚©‚ç‚Å‚·BŽ©•ª‚Å‚±‚ê‚ðƒvƒƒOƒ‰ƒ€‚µ‚½‚­‚È‚¢‚Ì‚Å‚ 
  ‚ê‚΁AEric Youngdale ‚É‚æ‚é scsiinfo ƒvƒƒOƒ‰ƒ€‚ðŽg—p‚·‚邱‚Æ‚à‚Å‚«‚Ü
  ‚·Bscsiinfo ‚Í SCSI ‘•’u‚ɂ‚¢‚Ä‚Ì‚Ù‚Æ‚ñ‚Ç‘S‚Ă̏î•ñ‚ð—v‹‚·‚é‚à‚Ì‚Å
  ‚·Btsx-11.mit.edu ‚Ì pub/Linux/ALPHA/scsi ‚ðŒ©‚Ä‚­‚¾‚³‚¢B

  10.  ƒZƒ“ƒXƒoƒbƒtƒ@

  o—̓f[ƒ^‚Ì‚È‚¢ƒRƒ}ƒ“ƒh‚̓Zƒ“ƒXƒoƒbƒtƒ@(ƒwƒbƒ_\‘¢‘̂̈ꕔ‚Å‚·)‚É‚æ‚Á
  ‚ăXƒe[ƒ^ƒXî•ñ‚ð’ñ‹Ÿ‚Å‚«‚Ü‚·BƒZƒ“ƒXƒf[ƒ^‚Í’¼‘O‚̃Rƒ}ƒ“ƒh‚ª CHECK
  CONDITION ƒXƒe[ƒ^ƒX‚𔺂ȂÁ‚ďI—¹‚µ‚½‚Æ‚«‚É—˜—p‚·‚邱‚Æ‚ª‚Å‚«‚Ü‚·B‚±
  ‚̏ꍇ‚̓J[ƒlƒ‹‚ªŽ©“®“I‚ɃZƒ“ƒXƒf[ƒ^‚ð REQUEST SENSE ƒRƒ}ƒ“ƒh‚É‚æ‚Á
  ‚ĉñŽû‚µ‚Ü‚·B‚»‚̍\‘¢‚͈ȉº‚Ì’Ê‚è‚Å‚·F

       +=====-========-========-========-========-========-========-========-========+
       |  Bit|   7    |   6    |   5    |   4    |   3    |   2    |   1    |   0    |
       |Byte |        |        |        |        |        |        |        |        |
       |=====+========+==============================================================|
       | 0   | Valid  |                  Error Code (70h or 71h)                     |
       |-----+-----------------------------------------------------------------------|
       | 1   |                           Segment Number                              |
       |-----+-----------------------------------------------------------------------|
       | 2   |Filemark|  EOM   |  ILI   |Reserved|         Sense Key                 |
       |-----+-----------------------------------------------------------------------|
       | 3   | (MSB)                                                                 |
       |- - -+---                        Information                              ---|
       | 6   |                                                                 (LSB) |
       |-----+-----------------------------------------------------------------------|
       | 7   |                           Additional Sense Length (n-7)               |
       |-----+-----------------------------------------------------------------------|
       | 8   | (MSB)                                                                 |
       |- - -+---                        Command-Specific Information             ---|
       | 11  |                                                                 (LSB) |
       |-----+-----------------------------------------------------------------------|
       | 12  |                           Additional Sense Code                       |
       |-----+-----------------------------------------------------------------------|
       | 13  |                           Additional Sense Code Qualifier             |
       |-----+-----------------------------------------------------------------------|
       | 14  |                           Field Replaceable Unit Code                 |
       |-----+-----------------------------------------------------------------------|
       | 15  |  SKSV  |                                                              |
       |- - -+------------               Sense-Key Specific                       ---|
       | 17  |                                                                       |
       |-----+-----------------------------------------------------------------------|
       | 18  |                                                                       |
       |- - -+---                        Additional Sense Bytes                   ---|
       | n   |                                                                       |
       +=============================================================================+

  ’ˆÓFÅ‚à–ð‚É—§‚ƒtƒB[ƒ‹ƒh‚Í Sense Key(``''Í‚ð‚Ý‚Ä‚­‚¾‚³
  ‚¢)AAdditional Sense Code ‚¨‚æ‚Ñ Additional Sense Code
  Qualifier(``''Í‚ð‚Ý‚Ä‚­‚¾‚³‚¢)‚Å‚·B

  11.  ƒZƒ“ƒXƒoƒbƒtƒ@‚ð—p‚¢‚é—á

  ‚±‚±‚ł̓ƒfƒBƒA‚ª‘•’u‚É“ƒÚ‚³‚ê‚Ä‚¢‚é‚©‚Ç‚¤‚©‚ðŒŸ¸‚·‚邽‚ß‚É TEST
  UNIT READY ƒRƒ}ƒ“ƒh‚ðŽg—p‚µ‚Ü‚·Binquiry ‚Ì—á‚É‚ ‚éƒwƒbƒ_‚̐錾‚Ɗ֐”
  handle_SCSI_cmd ‚ª“¯—l‚É•K—v‚Å‚·B

                               Table 73: TEST UNIT READY Command
       +=====-========-========-========-========-========-========-========-========+
       |  Bit|   7    |   6    |   5    |   4    |   3    |   2    |   1    |   0    |
       |Byte |        |        |        |        |        |        |        |        |
       |=====+=======================================================================|
       | 0   |                           Operation Code (00h)                        |
       |-----+-----------------------------------------------------------------------|
       | 1   | Logical Unit Number      |                  Reserved                  |
       |-----+-----------------------------------------------------------------------|
       | 2   |                           Reserved                                    |
       |-----+-----------------------------------------------------------------------|
       | 3   |                           Reserved                                    |
       |-----+-----------------------------------------------------------------------|
       | 4   |                           Reserved                                    |
       |-----+-----------------------------------------------------------------------|
       | 5   |                           Control                                     |
       +=============================================================================+

  ˆÈ‰º‚ª‚±‚ê‚ðŽÀ‘•‚µ‚½ŠÖ”‚Å‚·F

  #define TESTUNITREADY_CMD 0
  #define TESTUNITREADY_CMDLEN 6

  #define ADD_SENSECODE 12
  #define ADD_SC_QUALIFIER 13
  #define NO_MEDIA_SC 0x3a
  #define NO_MEDIA_SCQ 0x00

  int TestForMedium ( void )
  {
    /* request READY status */
    static unsigned char cmdblk [TESTUNITREADY_CMDLEN] = {
        TESTUNITREADY_CMD, /* command */
                        0, /* lun/reserved */
                        0, /* reserved */
                        0, /* reserved */
                        0, /* reserved */
                        0};/* control */

    memcpy( cmd + SCSI_OFF, cmdblk, sizeof(cmdblk) );

    /*
     * +------------------+
     * | struct sg_header | <- cmd
     * +------------------+
     * | copy of cmdblk   | <- cmd + SCSI_OFF
     * +------------------+
     */

    if (handle_SCSI_cmd(sizeof(cmdblk), 0, cmd,
                              0, NULL)) {
        fprintf (stderr, "Test unit ready failed\n");
        exit(2);
    }

    return
     *(((struct sg_header*)cmd)->sense_buffer +ADD_SENSECODE) !=
                                                          NO_MEDIA_SC ||
     *(((struct sg_header*)cmd)->sense_buffer +ADD_SC_QUALIFIER) !=
                                                          NO_MEDIA_SCQ;
  }

  ‚±‚ÌmainŠÖ”‚Æ‘g‚ݍ‡‚킹‚é‚ƁAƒ`ƒFƒbƒN‚ðs‚¤‚±‚Æ‚ª‚Å‚«‚Ü‚·B

       void main( void )
       {
         fd = open(DEVICE, O_RDWR);
         if (fd < 0) {
           fprintf( stderr, "Need read/write permissions for "DEVICE".\n" );
           exit(1);
         }

         /* look if medium is loaded */

         if (!TestForMedium()) {
           printf("device is unloaded\n");
         } else {
           printf("device is loaded\n");
         }
       }

  •t˜^‚̃tƒ@ƒCƒ‹ generic_demo.c ‚É‚Í—¼•û‚̗ႪŠÜ‚Ü‚ê‚Ü‚·B

  12.  ioctl ŠÖ”

  “ñ‚Â‚Ì ioctl ŠÖ”‚ð—p‚¢‚邱‚Æ‚ª‚Å‚«‚Ü‚·F

  o  ioctl(fd, SG_SET_TIMEOUT, &Timeout); ‚̓^ƒCƒ€ƒAƒEƒg’l‚ð Timeout *
     10 ƒ~ƒŠ•b‚ɐݒ肵‚Ü‚·B Timeout ‚Í int ‚Æ‚µ‚Đ錾‚³‚ê‚˂΂Ȃè‚Ü‚¹
     ‚ñB

  o  ioctl(fd, SG_GET_TIMEOUT, &Timeout); ‚ÍŒ»Ý‚̃^ƒCƒ€ƒAƒEƒg’l‚𓾂Ü
     ‚·BTimeout ‚Í int ‚Æ‚µ‚Đ錾‚³‚ê‚˂΂Ȃè‚Ü‚¹‚ñB

  13.  ƒhƒ‰ƒCƒo‚̃fƒtƒHƒ‹ƒg

  13.1.  Transfer Lengths “`’B’·

  Œ»Ý(­‚È‚­‚Æ‚àƒJ[ƒlƒ‹ƒo[ƒWƒ‡ƒ“ 1.1.68 ‚Ü‚Å)‚Í“ü—Í‚¨‚æ‚яo—Í‚Ì‘å‚«‚³
  ‚̓J[ƒlƒ‹‚ª SG_BIG_BUFF ‚ð’è‹`‚µ‚ăRƒ“ƒpƒCƒ‹‚³‚ê‚Ä‚¢‚È‚¢ŒÀ‚è4096 ƒoƒC
  ƒgˆÈ‰º‚Å‚È‚¯‚ê‚΂Ȃè‚Ü‚¹‚ñB’è‹`‚µ‚½ê‡‚Í SG_BIG_BUFF (—á: 32768)ƒoƒC
  ƒg‚ɐ§ŒÀ‚³‚ê‚Ü‚·B‚±‚ê‚ç‚Ì‘å‚«‚³‚Í“ü—͂̃Rƒ}ƒ“ƒhƒuƒƒbƒN‚¾‚¯‚Å‚È‚­‹¤’Ê
  ƒwƒbƒ_‚àŠÜ‚Ý‚Ü‚·B SG_BIG_BUFF ‚Í (131072-512) ‚܂ňÀ‘S‚É‘‚₹‚Ü‚·B
  ‚à‚¿‚ë‚ñ‚±‚Ì—˜“_‚ð‹œŽó‚·‚é‚½‚߂ɂ́A–³˜_AV‚µ‚¢ƒJ[ƒlƒ‹‚ðƒRƒ“ƒpƒCƒ‹‚µ
  ‹N“®‚³‚ê‚é•K—v‚ª‚ ‚è‚Ü‚·B

  13.2.  ƒ^ƒCƒ€ƒAƒEƒg‹y‚эĎŽs‚Ì’l

  ƒfƒtƒHƒ‹ƒg‚̃^ƒCƒ€ƒAƒEƒg’l‚͈ꕪŠÔ(Timeout = 6000)‚ɃZƒbƒg‚³‚ê‚Ä‚¢‚Ü
  ‚·B ioctl ‚ðŒÄ‚яo‚·(``''Í‚ð‚Ý‚Ä‚­‚¾‚³‚¢)‚±‚ƂŕύX‚Å‚«‚Ü‚·BÄŽŽs
  ‚̃fƒtƒHƒ‹ƒg‚Ì’l‚Í 1 ‚Å‚·B

  14.  SCSI ‚ÌŽd—l‚̎擾

  SCSI-1 ‚¨‚æ‚Ñ SCSI-2 (‚»‚µ‚ĂЂå‚Á‚Æ‚·‚é‚Æ‚Ü‚à‚È‚­ SCSI-3) ‚Æ–½–¼‚³‚ê
  ‚½•W€‹KŠi‚ª‘¶Ý‚µ‚Ü‚·B•W€‹KŠi‚Í‘å•”•ªãˆÊŒÝŠ·‚Å‚·B

  SCSI-1 •W€‹KŠi‚Í(•MŽÒ‚̈ӌ©‚Å‚Í)‚Ù‚Æ‚ñ‚ÇŽž‘ã’x‚ê‚ŁASCSI-2 ‚ªÅ‚àL”Í
  ˆÍ‚ɂ킽‚Á‚ÄŽg‚í‚ê‚Ä‚¢‚Ü‚·BSCSI-3 ‚Í‚½‚¢‚Ö‚ñV‚µ‚­‚Ä‚Æ‚Ä‚à‚‰¿‚Å‚·B
  ‚±‚ê‚ç‚Ì•W€‰»‚³‚ꂽƒRƒ}ƒ“ƒhƒZƒbƒg‚Í SCSI »‘¢‹ÆŽÒ‚ɑ΂µ‚Ä•K{‚Ì‚¨‚æ‚Ñ
  ƒIƒvƒVƒ‡ƒ“‚̃Rƒ}ƒ“ƒh‚ðŽw’肵‚Ä‚¨‚èA•W€‰»‚³‚ê‚Ä‚¨‚炸ƒvƒƒOƒ‰ƒ€ƒ~ƒ“ƒO
  ‚Ì‚½‚߂̏î•ñ‚ð–Å‘½‚É—˜—p‚Å‚«‚È‚¢ƒxƒ“ƒ_“ÆŽ©‚ÌŠg’£ƒRƒ}ƒ“ƒh‚É—Dæ‚µ‚Ä‘I‚Î
  ‚ê‚é‚ׂ«‚Å‚·B

  ÅV‚Ì‘ˆÄ‚Ì“dŽq“I‚È•¡ŽÊ‚͈ȉº‚Ì anonymous ftp ‚æ‚è“üŽè‚Å‚«‚Ü‚·F

  o  ftp.cs.tulane.edu:pub/scsi

  o  ftp.symbios.com:/pub/standards

  o  ftp.cs.uni-sb.de:/pub/misc/doc/scsi

  (Ž„‚Í Yggdrasil Linux CD-ROM ‚̃fƒBƒŒƒNƒgƒŠ /usr/doc/scsi-2 ‚¨‚æ‚Ñ
  /usr/doc/scsi-1 Ž©•ª‚Ì SCSI Žd—l‘‚ðŽè‚É“ü‚ê‚Ü‚µ‚½B)

  SCSI FAQ ‚Å‚àˆÈ‰º‚̈óü•¨‚̏î•ñŒ¹‚ð‹“‚°‚Ä‚¢‚Ü‚·F

  The SCSI specification: Available from: SCSI Žd—l‘FˆÈ‰º‚©‚ç“üŽè‰Â
  ”\F

             Global Engineering Documents
             15 Inverness Way East
             Englewood Co  80112-5704
             (800) 854-7179
               SCSI-1: X3.131-1986
               SCSI-2: X3.131-199x
               SCSI-3 X3T9.2/91-010R4 Working Draft

       (Global Engineering Documentation in Irvine, CA (714)261-1455??)

       SCSI-1: Doc \# X3.131-1986 from ANSI, 1430 Broadway, NY, NY 10018

       IN-DEPTH EXPLORATION OF SCSI can be obtained from
       Solution Technology, Attn: SCSI Publications, POB 104, Boulder Creek,
       CA 95006, (408)338-4285, FAX (408)338-4374

       THE SCSI ENCYLOPEDIA and the SCSI BENCH REFERENCE can be obtained from
       ENDL Publishing, 14426 Black Walnut Ct., Saratoga, CA 95090,
       (408)867-6642, FAX (408)867-2115

       SCSI: UNDERSTANDING THE SMALL COMPUTER SYSTEM INTERFACE was published
       by Prentice-Hall, ISBN 0-13-796855-8

       [–ó’]“ú–{Œê‚̏‘Ð
       (‚½‚­‚³‚ñ‚ ‚é‚Ì‚Å‚Å‚·‚ªA‚Æ‚è‚ ‚¦‚¸¡A–óŽÒ‚ÌŽè‹–‚É‚ ‚é‚à‚Ì‚¾‚¯‹“‚°‚Ü‚·B
       ƒRƒƒ“ƒg‚¨‘Ò‚¿‚µ‚Ä‚¢‚Ü‚·B)

       (1)SCSI-2Ú×‰ðàFÅVSCSI‹KŠi‚ƃRƒ}ƒ“ƒhEƒŠƒtƒ@ƒŒƒ“ƒX. ›’J ½ˆê ’˜.
       CQo”ÅŽÐ. 1994 ‰”Å. ISBN 4-7898-3523-5

       (2)SCSIƒCƒ“ƒ^[ƒtƒF[ƒXƒeƒNƒjƒJƒ‹ƒuƒbƒN NEC PC-9800ƒVƒŠ[ƒY‘Ήž ŽÀ—á‚ÅŠw‚ÔSCSIƒCƒ“ƒ^[ƒtƒF[ƒX NEC PC-9800ƒVƒŠ[ƒYƒvƒƒOƒ‰ƒ}•KŒg
       1989.8.1 ‰”Å”­s
       (Š”)ƒR[ƒ‰ƒ‹ (C)NEC Corporation

       SCSIƒCƒ“ƒ^[ƒtƒF[ƒXƒ{[ƒh(PC-9801-55‚É“ƒÚ‚³‚ê‚Ä‚¢‚éWD33C93‚ւ̃AƒNƒZƒX•û–@)ASCSIƒCƒ“ƒ^[ƒtƒF[ƒX‹¤’ÊBIOS(SCSI‹@Ší‚ð”Ä—p“I‚ɐ§Œä‚Å‚«‚郌ƒxƒ‹)ASCSIƒCƒ“ƒ^[ƒtƒF[ƒX‘ΉžŒÅ’èBIOS‚ÌŽO•”\¬‚©‚ç‚È‚éB

  15.  ŠÖ˜Aî•ñŒ¹

  15.1.  HOWTOs and FAQs HOWTO ‚Æ FAQ

  Drew Eckhardt ‚É‚æ‚é Linux SCSI-HOWTO ‚Í‘•’uŒÅ—L‚ÌŽ¿–₾‚¯‚Å‚È‚­‘S‚Ä‚Ì
  ƒTƒ|[ƒg‚³‚ê‚é SCSI ƒRƒ“ƒgƒ[ƒ‰‚ð–Ô—…‚µ‚Ä‚¢‚Ü‚·B

  SCSI ‚ɂ‚¢‚Ă̈ê”Ê“I‚ÈŽ¿–â‚̓jƒ…[ƒXƒOƒ‹[ƒv Comp.Periphs.Scsi ‚Å‚Ì
  SCSI-FAQ ‚Ì’†‚ʼnñ“š‚³‚ê‚Ä‚¢‚Ü‚·( tsx-11 ‚Ì pub/linux/ALPHA/scsi ‚¨‚æ‚Ñ
  ƒ~ƒ‰[ƒTƒCƒg‚æ‚è“üŽè‰Â”\)

  15.2.  ƒ[ƒŠƒ“ƒOƒŠƒXƒg

  Linux ‚Å‚Ì SCSI ‚ÌŠJ”­‚ÉŠÖŒW‚µ‚½ƒoƒO•ñ‚ÆŽ¿–â‚ɂ‚¢‚Ä‚Ì mailing list
  ‚ª‚ ‚è‚Ü‚·BŽQ‰Á‚·‚邽‚߂ɂ́A’ʐM•¶‚Ì–{‘Ì‚É subscribe linux-scsi ‚̍s
  ‚ð‚»‚¦‚āAmajordomo@vger.rutgers.edu ‚É“dŽqƒ[ƒ‹‚ð‘—‚Á‚Ä‚­‚¾‚³‚¢B’Ê
  M•¶‚Í linux-scsi@vger.rutgers.edu ‚É“Še‚µ‚Ü‚µ‚傤Bƒwƒ‹ƒv•¶‘‚Í
  "help" ‚̍s‚ð“ü‚ê‚Ä majordomo@vger.rutgers.edu ‚É“dŽqƒ[ƒ‹‚ð‘—‚ê‚Ηv
  ‹‚Å‚«‚Ü‚·B

  15.3.  ƒR[ƒh—á

     sunsite.unc.edu: apps/graphics/hpscanpbm-0.3a.tar.gz
        ‚±‚̃pƒbƒP[ƒW‚Í HP ƒXƒLƒƒƒ“ƒWƒFƒbƒgƒXƒLƒƒƒi[‚ð”Ä—pƒCƒ“ƒ^[ƒtƒF
        [ƒX‚ð’Ê‚¶‚Ä‘€c‚µ‚Ü‚·B

     tsx-11.mit.edu: BETA/cdrom/private/mkisofs/cdwrite-1.3.tar.gz
        cdwrite ƒpƒbƒP[ƒW‚͔ėpƒCƒ“ƒ^[ƒtƒF[ƒX‚ð CD ‚̃Cƒ[ƒW‚ð CD ƒ‰
        ƒCƒ^[‚ɏ‘‚­‚Ì‚ÉŽg‚¢‚Ü‚·B

     sunsite.unc.edu: apps/sound/cds/cdda2wav*.src.tar.gz
        ’p’m‚炸‚É‚àŽ©•ª‚̃AƒvƒŠƒP[ƒVƒ‡ƒ“‚̐é“`‚ŁAƒI[ƒfƒBƒI CD ƒgƒ‰ƒb
        ƒN‚ð wav ƒtƒ@ƒCƒ‹‚ւƃRƒs[‚µ‚Ü‚·B[–ó’]Å‹ßAcdda2wav‚æ‚荂ˆÀ
        ’è‚ð‚¤‚½‚Á‚½ƒ\ƒtƒg‚ªƒŠƒŠ[ƒX‚³‚ê‚Ü‚µ‚½B‚È‚ñ‚Ä‚¢‚Á‚½‚Á‚¯H

  16.  ‘¼‚É–ð‚É—§‚‚à‚Ì

  ‚È‚É‚©‚Æ’²–@‚·‚é‚à‚̂ɂ‚¢‚āB‚à‚Á‚ƐV‚µ‚¢‚Æ‚©—D‚ê‚Ä‚¢‚é‚à‚Ì‚ª‚ ‚é‚©‚Ç
  ‚¤‚©‚È‚Ç‚Í‚æ‚­‚í‚©‚è‚Ü‚¹‚ñB‚º‚Ђ²ˆÓŒ©‚ðB

  16.1.  ƒfƒoƒCƒXƒhƒ‰ƒCƒo‚ð‘‚­l‚̏•‚¯‚É‚È‚é‚à‚Ì

  ‚±‚ê‚ç‚Ì•¶‘‚Í sunsite.unc.edu ftp ƒT[ƒo‚¨‚æ‚Ñ‚»‚̃~ƒ‰[‚ł݂‚¯‚邱
  ‚Æ‚ª‚Å‚«‚Ü‚·B

     /pub/Linux/docs/kernel/kernel-hackers-guide
        LDP (Linux Documentation Project) ‚̃J[ƒlƒ‹ƒnƒbƒJ[ƒYƒKƒCƒhB
        ‚¿‚å‚Á‚ÆŽž‘ã’x‚ê‚©‚à‚µ‚ê‚Ü‚¹‚ñ‚ªA‚à‚Á‚Æ‚àŠî‘b“I‚ÈŽ–€‚ðƒJƒo[‚µ
        ‚Ä‚¢‚Ü‚·B

     /pub/Linux/docs/kernel/drivers.doc.z
        ‚±‚Ì•¶‘‚̓Lƒƒƒ‰ƒNƒ^ƒhƒ‰ƒCƒo‚̏‘‚«•û‚ðˆµ‚Á‚Ä‚¢‚Ü‚·B

     /pub/Linux/docs/kernel/tutorial.doc.z
        ƒLƒƒƒ‰ƒNƒ^ƒfƒoƒCƒX‚̍쐬‚ɂ‚¢‚ăR[ƒh•t‚«‚ł̃`ƒ…[ƒgƒŠƒAƒ‹B

     /pub/Linux/docs/kernel/scsi.paper.tar.gz
        SCSI ƒhƒ‰ƒCƒo‚̏‘‚«•û‚ð‹Lq‚µ‚½‚ðLaTeX •¶‘B

     /pub/Linux/docs/hardware/DEVICES
        Linux ‚ÅŽg—p‚³‚ê‚郁ƒWƒƒ[ƒfƒoƒCƒX‚ƃ}ƒCƒi[ƒfƒoƒCƒX‚̃ŠƒXƒg

      The Linux Kernel
        –󕶂ŏŸŽè‚ɒljÁ‚µ‚Ü‚µ‚½B‘½•ªLDP‚Ì•¶‘B David A Rusling ‚³‚ñ‚É
        ‚æ‚é‚à‚́BŒ‹\‚¢‚¢‚ÆŽv‚¢‚Ü‚·BŠ´‚¶‚Æ‚µ‚Ä‚Í LINUX Kernel
        Internals (Addison Wesley)‚ÉŽ—‚Ä‚Ü‚·‚ªAƒR[ƒh—á‚Í‚ ‚Ü‚è‚ ‚è‚Ü‚¹
        ‚ñB

  16.2.  ƒ†[ƒeƒBƒŠƒeƒB

     tsx-11.mit.edu: ALPHA/scsi/scsiinfo*.tar.gz
        SCSI ‘•’u‚ɑ΂µ‚Ä‘€ìƒpƒ‰ƒ[ƒ^AŒ‡Š×ƒŠƒXƒg‚È‚Ç‚ð–â‚¢‡‚킹‚邽
        ‚߂̃vƒƒOƒ‰ƒ€BX ƒEƒBƒ“ƒhƒEƒVƒXƒeƒ€ƒx[ƒX‚̃Cƒ“ƒ^[ƒtƒF[ƒX‚ð—˜
        —p‚·‚邱‚Æ‚ª‚Å‚«‚Ü‚·B‚½‚¾‚µ Tk/Tcl/wish ‚̃Cƒ“ƒXƒg[ƒ‹‚ª•K—v‚Å
        ‚·B X ƒx[ƒX‚̃Cƒ“ƒ^[ƒtƒF[ƒX‚ð—p‚¢‚ê‚ΗeˆÕ‚Ƀhƒ‰ƒCƒu‚̐ݒè‚ð
        •ÏX‚·‚邱‚Æ‚ª‚Å‚«‚Ü‚·B

     tsx-11.mit.edu: ALPHA/kdebug
        ƒJ[ƒlƒ‹‚ðƒfƒoƒbƒO‚·‚邽‚ß‚Ì gdb ‚ÌŠg’£

  17.  SCSI ‚ɃAƒNƒZƒX‚·‚é‚»‚Ì‘¼‚̃Cƒ“ƒ^[ƒtƒF[ƒX

  Linux ‚Å‚Í  SCSI_IOCTL_SEND_COMMAND ioctl ‚̌Ăяo‚µ‚ð—p‚¢‚Ä SCSI ‚ɃA
  ƒNƒZƒX‚·‚é‚Æ‚¢‚¤•sš¾‚ÈŽè’i‚à‚ ‚è‚Ü‚·‚ªA‚·‚·‚ß‚ç‚ê‚Ü‚¹‚ñB

  un*x ŠE‚ł͈ê”Ê‚É—p‚¢‚ç‚ê‚Ä‚¢‚鑼‚Ì—ÞŽ—‚̃Cƒ“ƒ^[ƒtƒF[ƒX‚à‚¢‚­‚‚©‘¶
  Ý‚µ‚Ü‚·‚ªALinux ‚ÅŽg‚¤‚±‚Æ‚Í‚Å‚«‚Ü‚¹‚ñB

  1. CAM (Common Access Method‹¤’ʃAƒNƒZƒX–@])BFuture Domain ‹y‚Ñ‘¼
     ‚ÌSCSI ƒxƒ“ƒ_‚ªŠJ”­BLinux ‚Í SCSI CAM ƒVƒXƒeƒ€‚ð‚Ü‚½‚Ù‚Æ‚ñ‚ǃTƒ|[
     ƒg‚µ‚Ä‚¢‚Ü‚¹‚ñ(Žå‚Ƀn[ƒhƒfƒBƒXƒN‚©‚ç‚̃u[ƒg‚ÉŠÖ‚µ‚Ä)B CAM ‚̓^[
     ƒQƒbƒgƒ‚[ƒh‚ð‚àƒTƒ|[ƒg‚µ‚Ü‚·‚©‚çAŽ©•ª‚̃Rƒ“ƒsƒ…[ƒ^‚ðŽü•Ó‹@Ší‚Å
     ‚ ‚é‚©‚̂悤‚É‹U‘•‚·‚邱‚Æ‚à‚ ‚肦‚Ü‚·(‚‚܂菬‚³‚È SCSI ƒlƒbƒgƒ[
     ƒN)B

  2. ASPI (Advanced SCSI Programming Interface)BAdaptec‚ªŠJ”­B‚±‚ê‚Í
     MS-DOS ƒ}ƒV[ƒ“‚É‚Æ‚Á‚Ä‚ÌŽ–ŽÀã‚Ì•W€‚Å‚·B

  ‘¼‚É“¯—l‚É‚µ‚Ä SCO(TM), NeXT(TM), Silicon Graphics(TM) ‚¨‚æ‚Ñ SUN(TM)
  ‚ł̃AƒvƒŠƒP[ƒVƒ‡ƒ“ƒCƒ“ƒ^[ƒtƒF[ƒX‚ª‚ ‚è‚Ü‚·B

  18.  ‚¨‚í‚è‚É

  ”Ä—p SCSI ƒCƒ“ƒ^[ƒtƒF[ƒX‚̓†[ƒUƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚Æ“Á’è‚̃fƒoƒCƒX‚ÌŠÔ
  ‚̍a‚ð‹´“n‚µ‚µ‚Ü‚·B‚µ‚©‚µ—ÞŽ—‚µ‚½’ᐅ€‚̊֐”ŒQ‚ð”õ‚¦‚½ƒvƒƒOƒ‰ƒ€‚ð‚¨
  ‚Ñ‚½‚¾‚µ‚­‚¤‚Ý‚¾‚·‚æ‚è‚́A“Á•Ê‚Ì–Ú“I‚ɑ΂·‚éˆê”ʉ»‚³‚ꂽ’ᐅ€ŠÖ”ŒQ‚ð
  ‚à‚‹¤—Lƒ‰ƒCƒuƒ‰ƒŠ‚ðŽè‚É“ü‚ê‚é•û‚ª‚æ‚è–]‚Ü‚µ‚¢‚Æ‚¢‚¦‚Ü‚·BŽå—v‚È–Ú•W‚Í
  ƒCƒ“ƒ^[ƒtƒF[ƒX‚©‚ç“Æ—§‚µ‚½‘w‚ðŽè‚É“ü‚ê‚邱‚Æ‚Å‚ ‚é‚ׂ«‚Å‚·BƒAƒvƒŠƒP
  [ƒVƒ‡ƒ“‚ð’჌ƒxƒ‹‚ȃ‹[ƒ`ƒ“‚ƃn[ƒhƒEƒFƒA‚Ɉˑ¶‚·‚郋[ƒ`ƒ“‚Æ‚É•ª—£‚·
  ‚é‚Ì‚ª‚æ‚¢ÝŒv‚Å‚µ‚傤B’ᐅ€ƒ‹[ƒ`ƒ“‚Í‹¤—Lƒ‰ƒCƒuƒ‰ƒŠ‚É“ü‚ê‚邱‚Æ‚ª‚Å
  ‚«‚é‚Å‚µ‚傤‚µA‘S‚ẴAƒvƒŠƒP[ƒVƒ‡ƒ“‚©‚ç—˜—p‚Å‚«‚é‚悤‚É‚È‚é‚Å‚µ‚å
  ‚¤B‚±‚±‚ŁA•W€‰»‚³‚ꂽƒCƒ“ƒ^[ƒtƒF[ƒX‚ª‚Å‚«‚éŒÀ‚èV‚µ‚¢‚à‚Ì‚ðì‚é‚Ü
  ‚¦‚É‘±‚­‚ׂ«‚Å‚·B

  ¡‚Å‚Í‚Ý‚È‚³‚ñ‚ÍŽ„‚æ‚è‚à‚¸‚Á‚Æ Linux ”Ä—p SCSI ƒCƒ“ƒ^[ƒtƒF[ƒX‚ɂ‚¢
  ‚ďڂµ‚¢‚Í‚¸‚Å‚·B‚Å‚·‚©‚ç‚¢‚Ü‚â‘S¢ŠE‚Ì Linux ƒRƒ~ƒ…ƒjƒeƒB‚Ì—˜‰v‚Ì‚½
  ‚߂ɁA‹­—͂ȃAƒvƒŠƒP[ƒVƒ‡ƒ“‚ÌŠJ”­‚É’…Žè‚Å‚«‚Ü‚·B

  19.  ŽÓŽ«

  Jeff Tranter ‚É‚Í‚±‚Ì•¶‘‚ð“ü”O‚ɍZ³‚µ‰ü—Ç‚µ‚Ä‚­‚ꂽ‚±‚Æ‚É‚Ù‚ñ‚Æ‚¤‚É
  Š´ŽÓ‚µ‚Ü‚·B–ð‚É—§‚”á•]‚ð‚­‚ê Carlos Phchol ‚É‚àBŽ„‚ª‚±‚̃Cƒ“ƒ^[
  ƒtƒF[ƒX‚ÌŽg—p‚ɂ‚¢‚čŏ‰‚É(‚΂©‚È)Ž¿–₵‚½‚Æ‚«‚É Drew Eckhardt ‚Æ
  Eric Youngdale ‚ª•‚¯‚Ä‚­‚ꂽ‚±‚Æ‚à‚ ‚肪‚½‚­Žv‚Á‚Ä‚¢‚Ü‚·B

  A.  •t˜^

  B.  ƒGƒ‰[ˆ—

  ŠÖ” open, ioctl, write ‚¨‚æ‚Ñ read ‚̓Gƒ‰[‚ð•ñ‚·‚é‰Â”\«‚ª‚ ‚è‚Ü
  ‚·B‚±‚̏ꍇAŠÖ”‚Ì•Ô‚è’l‚Í -1 ‚Å‘åˆæ•Ï” errno ‚ɃGƒ‰[”ԍ†‚ª—^‚¦‚ç
  ‚ê‚Ü‚·B errno ‚Ì’l‚Í /usr/include/errno.h ‚É‚¨‚¢‚Ä’è‹`‚³‚ê‚Ä‚¢‚Ü‚·B
  ˆÈ‰º‚̂悤‚È’l‚ð‚Ƃ肦‚Ü‚·F

       ŠÖ”     | ƒGƒ‰[       | ‰ðà
       =========|==============|=============================================
       open     | ENXIO        | ƒfƒoƒCƒX‚ª–³Œø
                | EACCES       | ƒAƒNƒZƒXƒ‚[ƒh‚ªread/write(O_RDWR)‚Å‚È‚¢
                | EBUSY        | ƒfƒoƒCƒX‚ɑ΂µƒuƒƒbƒN‚µ‚È‚¢ƒAƒNƒZƒX‚ª—v‹
                |              | ‚³‚ꂽ‚ªAŒ»Ý‚̓rƒW[ó‘ԁB
                | ERESTARTSYS  | ‚±‚ê‚Í“à•”‚̃Gƒ‰[‚ðŽ¦‚·BÄŒ»‰Â”\‚É‚µ‚Ä
                |              | SCSI ƒ`ƒƒƒ“ƒlƒ‹‚É•ñ‚¹‚ç‚ꂽ‚¢(ƒoƒO•ñ‚̏ڍ×
                |              | ‚Í Drew Eckhardts ‚É‚æ‚é SCSI-HOWTO ‚ð‚Ý‚æ)
       ioctl    | ENXIO        | ƒfƒoƒCƒX‚ª–³Œø
       read     | EAGAIN       | ƒfƒoƒCƒX‚ªƒuƒƒbƒN‚µ‚悤‚Æ‚·‚éBŒã‚ōĎŽs‚ðB
                | ERESTARTSYS  | ‚±‚ꂪ“à•”‚̃Gƒ‰[‚ðŽ¦‚·BÄŒ»‰Â”\‚É‚µ‚Ä
                |              | SCSI ƒ`ƒƒƒ“ƒlƒ‹‚É•ñ‚¹‚ç‚ꂽ‚¢(ƒoƒO•ñ‚̏ڍ×
                |              | ‚Í Drew Eckhardts ‚É‚æ‚é SCSI-HOWTO ‚ð‚Ý‚æ)
       write    | EIO          | ’·‚³‚ª’Z‚©‚·‚¬ (‹¤’ʃwƒbƒ_\‘¢‘Ì‚æ‚菬‚³‚¢)B
                |              | Œx: Œ»Ý‚̏ŠA’·‚³’´‰ß‚ÌŠm”F‚Í‚È‚¢B
                | EAGAIN       | ƒfƒoƒCƒX‚ªƒuƒƒbƒN‚µ‚悤‚Æ‚·‚éBŒã‚ōĎŽs‚ðB
                | ENOMEM       | ‚±‚Ì—v‹‚É•K—v‚ȃƒ‚ƒŠ‚ðŠ„“–‚Ä‚Å‚«‚È‚©‚Á‚½B
                |              | Å‘å“`‘—ƒTƒCƒY‚ð’´‚¦‚Ä‚¢‚È‚¢‚È‚ç‚ÎŒã‚ōĎŽs
                |              | ‚ð(ã‚ð‚Ý‚æ)B
       select   |              | ‚È‚µ
       close    |              | ‚È‚µ

  read/write ‚̐³‚Ì•Ô‚è’l‚Í—á‚É‚æ‚Á‚Ä“`‘—‚ɐ¬Œ÷‚µ‚½ƒoƒCƒg”‚ðŽ¦‚µ‚Ä‚¢‚Ü
  ‚·B‚±‚ê‚Í—v‹‚µ‚½ƒoƒCƒg”‚Æ“™‚µ‚¢‚ׂ«‚Å‚·B

  B.1.  ƒGƒ‰[ƒXƒe[ƒ^ƒX‚̉ð“Ç

  ‚³‚ç‚É‚æ‚èÚ×‚È•ñ‚ªƒJ[ƒlƒ‹‚Ì hd_status ‚Æ ƒfƒoƒCƒX‚Ì sense_buffer
  ‚É‚æ‚Á‚Ä‚È‚³‚ê‚Ü‚·(``''Í‚ð‚Ý‚Ä‚­‚¾‚³‚¢)B‚¢‚¸‚ê‚à‹¤’ʃwƒbƒ_\‘¢‘Ì‚É‚ 
  ‚è‚Ü‚·B

  hd_status ‚̈Ӗ¡‚Í drivers/scsi/scsi.h ‚Å’ñ‹Ÿ‚³‚ê‚Ü‚·F‚±‚Ì unsigned
  int ‚͈قȂ镔•ª‚©‚ç\¬‚³‚ê‚Ä‚¢‚Ü‚·B

         lsb  |    ...    |    ...    | msb
       =======|===========|===========|============
       status | sense key | host code | driver byte

  drivers/scsi/scsi.h‚Å‚±‚ê‚ç‚̃}ƒNƒ‚ðŽè‚É“ü‚ê‚邱‚Æ‚ª‚Å‚«‚é‚Ì‚Å‚·‚ªA
  •sK‚É‚µ‚Ä–€‰Â•sŽv‹c‚ȃwƒbƒ_ƒtƒ@ƒCƒ‹‚Ì‘ŠŒÝˆË‘¶‚Ì‚½‚ß‚ÉŠÈ’P‚É‚ÍŽg‚¦‚Ü‚¹
  ‚ñB‚±‚±‚ð‚«‚ê‚¢‚É‚µ‚È‚¢‚Æ‚¢‚¯‚Ü‚¹‚ñB

         ƒ}ƒNƒ          | ‰ðà
  =======================|====================================================
  status_byte(hd_status) | SCSI ‘•’u‚̏ó‘ԁBƒXƒe[ƒ^ƒXƒR[ƒh‚̏͂ð‚Ý‚æB
  msg_byte(hd_status)    | ‘•’u‚æ‚èBSCSI sense keys ‚̏͂ð‚Ý‚æB
  host_byte(hd_status)   | ƒJ[ƒlƒ‹‚æ‚èB Hostcodes ‚̏͂ð‚Ý‚æB
  driver_byte(hd_status) | ƒJ[ƒlƒ‹‚æ‚èB. midlevel codes ‚̏͂ð‚Ý‚æB

  B.2.  ƒXƒe[ƒ^ƒXƒR[ƒh

  ˆÈ‰º‚ÌSCSI ‘•’u‚©‚ç•Ô‚³‚ê‚éƒXƒe[ƒ^ƒXƒR[ƒh‚ª(scsi/scsi.h‚Å’è‹`‚³‚ê‚Ä
  ‚¢‚Ü‚·)—˜—p‰Â”\‚Å‚·B

        ’l   | ƒVƒ“ƒ{ƒ‹
       ======|=====================
       0x00  | GOOD
       0x01  | CHECK_CONDITION
       0x02  | CONDITION_GOOD
       0x04  | BUSY
       0x08  | INTERMEDIATE_GOOD
       0x0a  | INTERMEDIATE_C_GOOD
       0x0c  | RESERVATION_CONFLICT

  ‚±‚ê‚ç‚̃Vƒ“ƒ{ƒ‹‚Ì’l‚͉E‚ɈꂃVƒtƒg‚³‚ê‚Ä‚¢‚邱‚Æ‚É’ˆÓ‚µ‚Ä‚­‚¾‚³‚¢B
  ƒXƒe[ƒ^ƒX‚ª CHECK_CONDITION ‚Ì‚Æ‚«‚È‚ç‚΁AƒZƒ“ƒXƒoƒbƒtƒ@“à‚̃Zƒ“ƒXƒf
  [ƒ^‚Í—LŒø‚Å‚·(“Á‚ɒljÁ“I‚ȃZƒ“ƒXƒR[ƒh‚ƒljÁ“I‚ȃZƒ“ƒXƒR[ƒhƒNƒIƒŠ
  ƒtƒ@ƒCƒA‚ðŠm”F‚µ‚Ä‚­‚¾‚³‚¢)B

  ‚±‚ê‚ç‚Ì’l‚É‚Í SCSI-2 Žd—l‘‚É‚æ‚é‚ÆŽŸ‚̂悤‚ȈӖ¡‚ª‚ ‚è‚Ü‚·B

                                  Table 27: Status Byte Code
       +=================================-==============================+
       |       Bits of Status Byte       |  Status                      |
       |  7   6   5   4   3   2   1   0  |                              |
       |---------------------------------+------------------------------|
       |  R   R   0   0   0   0   0   R  |  GOOD                        |
       |  R   R   0   0   0   0   1   R  |  CHECK CONDITION             |
       |  R   R   0   0   0   1   0   R  |  CONDITION MET               |
       |  R   R   0   0   1   0   0   R  |  BUSY                        |
       |  R   R   0   1   0   0   0   R  |  INTERMEDIATE                |
       |  R   R   0   1   0   1   0   R  |  INTERMEDIATE-CONDITION MET  |
       |  R   R   0   1   1   0   0   R  |  RESERVATION CONFLICT        |
       |  R   R   1   0   0   0   1   R  |  COMMAND TERMINATED          |
       |  R   R   1   0   1   0   0   R  |  QUEUE FULL                  |
       |                                 |                              |
       |       All Other Codes           |  Reserved                    |
       |----------------------------------------------------------------|
       |  Key: R = Reserved bit                                         |
       +================================================================+

  ƒXƒe[ƒ^ƒXƒoƒCƒgƒR[ƒh‚Ì’è‹`‚ðˆÈ‰º‚É—^‚¦‚éB
       GOOD.  ‚±‚̏ó‘Ԃ̓^[ƒQƒbƒg‚ªƒRƒ}ƒ“ƒh‚ÌŽÀs‚ɐ¬Œ÷‚µ‚½‚±‚Æ‚ðŽ¦‚·B

       CHECK CONDITION.  ‚±‚̏ó‘Ô‚Í contingent allegiance condition ‚ª”­¶‚µ‚½
       ‚±‚Æ‚ðŽ¦‚·B(6.6‚ð‚Ý‚æ)B

       CONDITION MET.  ‚±‚̏ó‘Ô‚à‚µ‚­‚Í INTERMEDIATE-CONDITION MET ‚Í—v‹‚µ‚½
       ‘€ì‚ª’B¬‚³‚ꂽ‚Æ‚«‚É‚Í‚¢‚‚łà•Ô‚³‚ê‚éB(SEARCH DATA ‹y‚Ñ PRE-FETCH
       ƒRƒ}ƒ“ƒh‚ð‚Ý‚æ)B

       BUSY.  ‚±‚̏ó‘Ԃ̓^[ƒQƒbƒg‚ªƒrƒW[‚Å‚ ‚邱‚Æ‚ðŽ¦‚·B‚±‚̏ó‘Ԃ̓^[ƒQƒbƒg
       ‚ªƒRƒ}ƒ“ƒh‚ð‚»‚Ì‘¼‚ÌŽó•t‰Â”\‚ȃCƒjƒVƒG[ƒ^(‚·‚È‚í‚¿•Û—¯‚Å‚«‚È‚¢Õ“Ë)‚©‚ç‚Ì
       ƒRƒ}ƒ“ƒh‚ðŽó‚¯•t‚¯‚邱‚Æ‚ª‚Å‚«‚È‚¢‚Æ‚«‚Í‚¢‚‚łà•Ô‚³‚ê‚é‚Å‚ ‚낤B„§‚³‚ê
       ‚éƒCƒjƒVƒG[ƒ^‚̉ñ•œ“®ì‚ÍŒã‚ÌŽž“_‚ōĂуRƒ}ƒ“ƒh‚𔭍s‚·‚邱‚Æ‚Å‚ ‚éB

       INTERMEDIATE. ‚±‚̏ó‘Ô‚à‚µ‚­‚Í INTERMEDIATE-CONDITION MET ‚́AƒRƒ}ƒ“ƒh‚ª
       CHECK CONDITION, RESERVATION CONFLICT ‚à‚µ‚­‚Í COMMAND TERMINATED ƒXƒe[ƒ^ƒX
       ‚É‚æ‚Á‚Ă͏I—¹‚µ‚È‚©‚Á‚½ê‡‚ɁAˆê‚‚Ȃª‚è‚̘AŒ‹‚µ‚½ƒRƒ}ƒ“ƒhŒQ(ÅŒã‚̃Rƒ}ƒ“
       ƒh‚ðœ‚­)‚É‚¨‚¢‚ÄŠeƒRƒ}ƒ“ƒh‚ÌŽÀs‚ɐ¬Œ÷‚µ‚½‚Æ‚«‚É•Ô‚³‚ê‚éB‚à‚µ INTERMEDIATE
       ‚ ‚é‚¢‚Í INTERMEDIATE-CONDITION MET ƒXƒe[ƒ^ƒX‚ª•Ô‚³‚ê‚È‚¢‚È‚ç‚΁A‚»‚̘AŒ‹‚µ
       ‚½ƒRƒ}ƒ“ƒh—ñ‚͏I—¹‚µ‚Ä“üo—Í‘€ì‚͏I‚¦‚ç‚ê‚Ä‚¢‚éB

       INTERMEDIATE-CONDITION MET.  ‚±‚̏ó‘Ô‚Í CONDITON MET ‚Æ INTERMEDIATE ƒXƒe[ƒ^
       ƒX‚ª‘g‡‚³‚Á‚½‚à‚Ì‚Å‚ ‚éB

       RESERVATION CONFLICT.  ‚±‚̏ó‘Ԃ̓CƒjƒVƒG[ƒ^‚ª•Ê‚Ì SCSI ‘•’u‚ɑ΂µ‚ďՓ˕ۗ¯
       —\–ñŒ^‚Æ‚µ‚ÄŽw’肳‚ê‚Ä‚¢‚郍ƒWƒJƒ‹ƒ†ƒjƒbƒg‚à‚µ‚­‚̓ƒWƒJƒ‹ƒ†ƒjƒbƒg“à•”‚Ì’ö“x
       [?? extent ??]‚ɃAƒNƒZƒX‚ðŽŽ‚Ý‚½ê‡‚É•K‚¸•Ô‚³‚ê‚éB„§‚³‚ê‚éƒCƒjƒVƒG[ƒ^‚̉ñ•œ
       “®ì‚ÍŒã‚ÌŽž“_‚ōēxƒRƒ}ƒ“ƒh‚𔭍s‚·‚邱‚Æ‚Å‚ ‚éB

       COMMAND TERMINATED.  ‚±‚̏ó‘Ô‚Í TERMINATE I/O PROCESS ƒƒbƒZ[ƒW(5.6.22 ‚ð‚Ý‚æ)
       ‚ðŽó‚¯Žæ‚Á‚½‚ ‚ƂŃ^[ƒQƒbƒg‚ªŒ»Ý‚Ì“üo—Í‘€ì‚ðI—¹‚³‚¹‚éê‡‚É•Ô‚³‚ê‚éB‚±‚Ì
       ó‘Ô‚Í‚Ü‚½ contingent allegiance condition ‚ª”­¶‚µ‚½‚±‚Æ‚àŽ¦‚µ‚Ä‚¢‚é(6.6 ‚ð‚Ý‚æ)B

       QUEUE FULL.  ‚±‚̏ó‘Ԃ̓^ƒO•t‚¯‚³‚ꂽƒLƒ…[‘€ì‚ªŽÀ‘•‚³‚ê‚Ä‚¢‚éê‡‚ÉŽÀ‘•‚³‚ê‚é
       ‚Æ‚·‚éB‚±‚̏ó‘Ô‚Í SIMPLE QUEUE TAG, ORDERED QUEUE TAG ‚à‚µ‚­‚Í HEAD OF QUEUE TAG
       ƒƒbƒZ[ƒW‚ªŽó‚¯Žæ‚ç‚êƒRƒ}ƒ“ƒhƒLƒ…[‚ª‚¢‚Á‚Ï‚¢‚Å‚ ‚é‚Æ‚«‚É•Ô‚³‚ê‚éB“üo—Í‘€ì
       ‚̓Rƒ}ƒ“ƒhƒLƒ…[“à‚É”z’u‚³‚ê‚È‚¢B

  B.3.  SCSI Sense Keys

  ‚±‚ê‚ç‚̃J[ƒlƒ‹ƒVƒ“ƒ{ƒ‹(scsi/scsi.h‚æ‚è)‚ª‚ ‚ç‚©‚¶‚ß’è‹`‚³‚ê‚Ä‚¢‚Ü
  ‚·B

  Value | Symbol
  ======|================
  0x00  | NO_SENSE
  0x01  | RECOVERED_ERROR
  0x02  | NOT_READY
  0x03  | MEDIUM_ERROR
  0x04  | HARDWARE_ERROR
  0x05  | ILLEGAL_REQUEST
  0x06  | UNIT_ATTENTION
  0x07  | DATA_PROTECT
  0x08  | BLANK_CHECK
  0x0a  | COPY_ABORTED
  0x0b  | ABORTED_COMMAND
  0x0d  | VOLUME_OVERFLOW
  0x0e  | MISCOMPARE

  SCSI-2 •¶‘‚É‚ ‚郊ƒXƒg‚»‚̂܂܂͈ȉº‚Ì’Ê‚è‚Å‚·(7.2.14.3 Í‚æ‚è)B

                      Table 69: Sense Key (0h-7h) Descriptions
  +========-====================================================================+
  | Sense  |  Description                                                       |
  |  Key   |                                                                    |
  |--------+--------------------------------------------------------------------|
  |   0h   |  NO SENSE.  Indicates that there is no specific sense key          |
  |        |  information to be reported for the designated logical unit.  This |
  |        |  would be the case for a successful command or a command that      |
  |        |  received CHECK CONDITION or COMMAND TERMINATED status because one |
  |        |  of the filemark, EOM, or ILI bits is set to one.                  |
  |--------+--------------------------------------------------------------------|
  |   1h   |  RECOVERED ERROR.  Indicates that the last command completed       |
  |        |  successfully with some recovery action performed by the target.   |
  |        |  Details may be determinable by examining the additional sense     |
  |        |  bytes and the information field.  When multiple recovered errors  |
  |        |  occur during one command, the choice of which error to report     |
  |        |  (first, last, most severe, etc.) is device specific.              |
  |--------+--------------------------------------------------------------------|
  |   2h   |  NOT READY.  Indicates that the logical unit addressed cannot be   |
  |        |  accessed.  Operator intervention may be required to correct this  |
  |        |  condition.                                                        |
  |--------+--------------------------------------------------------------------|
  |   3h   |  MEDIUM ERROR.  Indicates that the command terminated with a non-  |
  |        |  recovered error condition that was probably caused by a flaw in   |
  |        |  the medium or an error in the recorded data.  This sense key may  |
  |        |  also be returned if the target is unable to distinguish between a |
  |        |  flaw in the medium and a specific hardware failure (sense key 4h).|
  |--------+--------------------------------------------------------------------|
  |   4h   |  HARDWARE ERROR.  Indicates that the target detected a non-        |
  |        |  recoverable hardware failure (for example, controller failure,    |
  |        |  device failure, parity error, etc.) while performing the command  |
  |        |  or during a self test.                                            |
  |--------+--------------------------------------------------------------------|
  |   5h   |  ILLEGAL REQUEST.  Indicates that there was an illegal parameter in|
  |        |  the command descriptor block or in the additional parameters      |
  |        |  supplied as data for some commands (FORMAT UNIT, SEARCH DATA,     |
  |        |  etc.).  If the target detects an invalid parameter in the command |
  |        |  descriptor block, then it shall terminate the command without     |
  |        |  altering the medium.  If the target detects an invalid parameter  |
  |        |  in the additional parameters supplied as data, then the target may|
  |        |  have already altered the medium.  This sense key may also indicate|
  |        |  that an invalid IDENTIFY message was received (5.6.7).            |
  |--------+--------------------------------------------------------------------|
  |   6h   |  UNIT ATTENTION.  Indicates that the removable medium may have been|
  |        |  changed or the target has been reset.  See 6.9 for more detailed  |
  |        |  information about the unit attention condition.                   |
  |--------+--------------------------------------------------------------------|
  |   7h   |  DATA PROTECT.  Indicates that a command that reads or writes the  |
  |        |  medium was attempted on a block that is protected from this       |
  |        |  operation.  The read or write operation is not performed.         |
  +=============================================================================+

                      Table 70: Sense Key (8h-Fh) Descriptions
  +========-====================================================================+
  | Sense  |  Description                                                       |
  |  Key   |                                                                    |
  |--------+--------------------------------------------------------------------|
  |   8h   |  BLANK CHECK.  Indicates that a write-once device or a sequential- |
  |        |  access device encountered blank medium or format-defined end-of-  |
  |        |  data indication while reading or a write-once device encountered a|
  |        |  non-blank medium while writing.                                   |
  |--------+--------------------------------------------------------------------|
  |   9h   |  Vendor Specific.  This sense key is available for reporting vendor|
  |        |  specific conditions.                                              |
  |--------+--------------------------------------------------------------------|
  |   Ah   |  COPY ABORTED.  Indicates a COPY, COMPARE, or COPY AND VERIFY      |
  |        |  command was aborted due to an error condition on the source       |
  |        |  device, the destination device, or both.  (See 7.2.3.2 for        |
  |        |  additional information about this sense key.)                     |
  |--------+--------------------------------------------------------------------|
  |   Bh   |  ABORTED COMMAND.  Indicates that the target aborted the command.  |
  |        |  The initiator may be able to recover by trying the command again. |
  |--------+--------------------------------------------------------------------|
  |   Ch   |  EQUAL.  Indicates a SEARCH DATA command has satisfied an equal    |
  |        |  comparison.                                                       |
  |--------+--------------------------------------------------------------------|
  |   Dh   |  VOLUME OVERFLOW.  Indicates that a buffered peripheral device has |
  |        |  reached the end-of-partition and data may remain in the buffer    |
  |        |  that has not been written to the medium.  A RECOVER BUFFERED DATA |
  |        |  command(s) may be issued to read the unwritten data from the      |
  |        |  buffer.                                                           |
  |--------+--------------------------------------------------------------------|
  |   Eh   |  MISCOMPARE.  Indicates that the source data did not match the data|
  |        |  read from the medium.                                             |
  |--------+--------------------------------------------------------------------|
  |   Fh   |  RESERVED.                                                         |
  +=============================================================================+

  B.4.  Host codes

  ˆÈ‰º‚Ì host code ‚Í drivers/scsi/scsi.h ‚É‚¨‚¢‚Ä’è‹`‚³‚ê‚Ä‚¢‚Ü‚·B‚±‚ê
  ‚ç‚̓J[ƒlƒ‹ƒhƒ‰ƒCƒo‚É‚æ‚èƒZƒbƒg‚³‚ê‚Ü‚·B

       Value | Symbol         | Description
       ======|================|========================================
       0x00  | DID_OK         | No error
       0x01  | DID_NO_CONNECT | Couldn't connect before timeout period
       0x02  | DID_BUS_BUSY   | BUS stayed busy through time out period
       0x03  | DID_TIME_OUT   | TIMED OUT for other reason
       0x04  | DID_BAD_TARGET | BAD target
       0x05  | DID_ABORT      | Told to abort for some other reason
       0x06  | DID_PARITY     | Parity error
       0x07  | DID_ERROR      | internal error
       0x08  | DID_RESET      | Reset by somebody
       0x09  | DID_BAD_INTR   | Got an interrupt we weren't expecting

  B.5.  Driver codes

  ’†ŠÔ‘w‚̃hƒ‰ƒCƒo‚Í‘•’u‚©‚ç‚̃Zƒ“ƒXƒL[‚ÉŠî‚¢‚Ēᐅ€ƒhƒ‰ƒCƒo‚©‚ç•Ô‚³
  ‚ꂽó‘Ô‚ð—Þ•Ê‚µ‚Ü‚·B‚³‚ç‚ɍĎŽsA’†Ž~‚ ‚é‚¢‚͍ă}ƒbƒv‚Æ‚¢‚Á‚½‚Æ‚é‚×
  ‚«‚¢‚­‚‚©‚Ì“®ì‚ðŽ¦´‚µ‚Ü‚·B

  Value | Symbol         | Description of Driver status
  ======|================|========================================
  0x00  | DRIVER_OK      | No error
  0x01  | DRIVER_BUSY    | not used
  0x02  | DRIVER_SOFT    | not used
  0x03  | DRIVER_MEDIA   | not used
  0x04  | DRIVER_ERROR   | internal driver error
  0x05  | DRIVER_INVALID | finished (DID_BAD_TARGET or DID_ABORT)
  0x06  | DRIVER_TIMEOUT | finished with timeout
  0x07  | DRIVER_HARD    | finished with fatal error
  0x08  | DRIVER_SENSE   | had sense information available

       Value | Symbol         | Description of suggestion
       ======|================|========================================
       0x10  | SUGGEST_RETRY  | retry the SCSI request
       0x20  | SUGGEST_ABORT  | abort the request
       0x30  | SUGGEST_REMAP  | remap the block (not yet implemented)
       0x40  | SUGGEST_DIE    | let the kernel panic
       0x80  | SUGGEST_SENSE  | get sense information from the device
       0xff  | SUGGEST_IS_OK  | nothing to be done

  C.  Additional sense codes  ‚¨‚æ‚Ñ additional sense code qualifiers

  ŽÀs‚³‚ꂽ SCSI ƒRƒ}ƒ“ƒh‚̏ó‘Ô‚ª CHECK_CONDItiON ‚ÌŽž‚ɂ́AƒZƒ“ƒXƒoƒb
  ƒtƒ@“à‚̃Zƒ“ƒXƒf[ƒ^‚ª—˜—p‰Â”\‚Å‚·Badditional sense code ‚Æ
  additional sense code qualifier ‚ª‚»‚̃oƒbƒtƒ@‚Ì’†‚ÉŠÜ‚Ü‚ê‚Ä‚¢‚Ü‚·B

  SCSI-2 ‚ÌŽd—l‘‚æ‚è“ñ‚‚̕\‚ðŽZ“ü‚µ‚Ü‚·BÅ‰‚Ì‚à‚Ì‚ÍŽ«‘•—‚ŁA“ñ”Ô–Ú
  ‚Ì‚à‚͔̂ԍ†‡‚Å‚·B

  C.1.  ASC and ASCQ(Ž«‘‡)

  ŽŸ‚Ì•\‚̃ŠƒXƒg‚͉ðà‚̃ŠƒXƒg‚Æ‚»‚ꂪ“K—p‚³‚ê‚éƒfƒoƒCƒX‚ÌŽí—Þ‚Æ‚ðŽ¦‚µ‚Ü
  ‚·B

  +=============================================================================+
  |           D - DIRECT ACCESS DEVICE                                          |
  |           .T - SEQUENTIAL ACCESS DEVICE                                     |
  |           . L - PRINTER DEVICE                                              |
  |           .  P - PROCESSOR DEVICE                                           |
  |           .  .W - WRITE ONCE READ MULTIPLE DEVICE                           |
  |           .  . R - READ ONLY (CD-ROM) DEVICE                                |
  |           .  .  S - SCANNER DEVICE                                          |
  |           .  .  .O - OPTICAL MEMORY DEVICE                                  |
  |           .  .  . M - MEDIA CHANGER DEVICE                                  |
  |           .  .  .  C - COMMUNICATION DEVICE                                 |
  |           .  .  .  .                                                        |
  | ASC ASCQ  DTLPWRSOMC  DESCRIPTION                                           |
  | --- ----              ----------------------------------------------------- |
  | 13h  00h  D   W  O    ADDRESS MARK NOT FOUND FOR DATA FIELD                 |
  | 12h  00h  D   W  O    ADDRESS MARK NOT FOUND FOR ID FIELD                   |
  | 00h  11h       R      AUDIO PLAY OPERATION IN PROGRESS                      |
  | 00h  12h       R      AUDIO PLAY OPERATION PAUSED                           |
  | 00h  14h       R      AUDIO PLAY OPERATION STOPPED DUE TO ERROR             |
  | 00h  13h       R      AUDIO PLAY OPERATION SUCCESSFULLY COMPLETED           |
  | 00h  04h   T    S     BEGINNING-OF-PARTITION/MEDIUM DETECTED                |
  | 14h  04h   T          BLOCK SEQUENCE ERROR                                  |
  | 30h  02h  DT  WR O    CANNOT READ MEDIUM - INCOMPATIBLE FORMAT              |
  | 30h  01h  DT  WR O    CANNOT READ MEDIUM - UNKNOWN FORMAT                   |
  | 52h  00h   T          CARTRIDGE FAULT                                       |
  | 3Fh  02h  DTLPWRSOMC  CHANGED OPERATING DEFINITION                          |
  | 11h  06h      WR O    CIRC UNRECOVERED ERROR                                |
  | 30h  03h  DT          CLEANING CARTRIDGE INSTALLED                          |
  | 4Ah  00h  DTLPWRSOMC  COMMAND PHASE ERROR                                   |
  | 2Ch  00h  DTLPWRSOMC  COMMAND SEQUENCE ERROR                                |
  | 2Fh  00h  DTLPWRSOMC  COMMANDS CLEARED BY ANOTHER INITIATOR                 |
  | 2Bh  00h  DTLPWRSO C  COPY CANNOT EXECUTE SINCE HOST CANNOT DISCONNECT      |
  | 41h  00h  D           DATA PATH FAILURE (SHOULD USE 40 NN)                  |
  | 4Bh  00h  DTLPWRSOMC  DATA PHASE ERROR                                      |
  | 11h  07h      W  O    DATA RESYCHRONIZATION ERROR                           |
  | 16h  00h  D   W  O    DATA SYNCHRONIZATION MARK ERROR                       |
  | 19h  00h  D      O    DEFECT LIST ERROR                                     |
  | 19h  03h  D      O    DEFECT LIST ERROR IN GROWN LIST                       |
  | 19h  02h  D      O    DEFECT LIST ERROR IN PRIMARY LIST                     |
  | 19h  01h  D      O    DEFECT LIST NOT AVAILABLE                             |
  | 1Ch  00h  D      O    DEFECT LIST NOT FOUND                                 |
  | 32h  01h  D   W  O    DEFECT LIST UPDATE FAILURE                            |
  | 40h  NNh  DTLPWRSOMC  DIAGNOSTIC FAILURE ON COMPONENT NN (80H-FFH)          |
  | 63h  00h       R      END OF USER AREA ENCOUNTERED ON THIS TRACK            |
  | 00h  05h   T    S     END-OF-DATA DETECTED                                  |
  | 14h  03h   T          END-OF-DATA NOT FOUND                                 |
  | 00h  02h   T    S     END-OF-PARTITION/MEDIUM DETECTED                      |
  | 51h  00h   T     O    ERASE FAILURE                                         |
  | 0Ah  00h  DTLPWRSOMC  ERROR LOG OVERFLOW                                    |
  | 11h  02h  DT  W SO    ERROR TOO LONG TO CORRECT                             |
  | 03h  02h   T          EXCESSIVE WRITE ERRORS                                |
  | 3Bh  07h    L         FAILED TO SENSE BOTTOM-OF-FORM                        |
  | 3Bh  06h    L         FAILED TO SENSE TOP-OF-FORM                           |
  | 00h  01h   T          FILEMARK DETECTED                                     |
  | 14h  02h   T          FILEMARK OR SETMARK NOT FOUND                         |
  | 09h  02h      WR O    FOCUS SERVO FAILURE                                   |
  | 31h  01h  D L    O    FORMAT COMMAND FAILED                                 |
  | 58h  00h         O    GENERATION DOES NOT EXIST                             |
  +=============================================================================+

  Table 71: (continued)
  +=============================================================================+
  | ASC ASCQ  DTLPWRSOMC  DESCRIPTION                                           |
  | --- ----              ----------------------------------------------------- |
  | 1Ch  02h  D      O    GROWN DEFECT LIST NOT FOUND                           |
  | 00h  06h  DTLPWRSOMC  I/O PROCESS TERMINATED                                |
  | 10h  00h  D   W  O    ID CRC OR ECC ERROR                                   |
  | 22h  00h  D           ILLEGAL FUNCTION (SHOULD USE 20 00, 24 00, OR 26 00)  |
  | 64h  00h       R      ILLEGAL MODE FOR THIS TRACK                           |
  | 28h  01h          M   IMPORT OR EXPORT ELEMENT ACCESSED                     |
  | 30h  00h  DT  WR OM   INCOMPATIBLE MEDIUM INSTALLED                         |
  | 11h  08h   T          INCOMPLETE BLOCK READ                                 |
  | 48h  00h  DTLPWRSOMC  INITIATOR DETECTED ERROR MESSAGE RECEIVED             |
  | 3Fh  03h  DTLPWRSOMC  INQUIRY DATA HAS CHANGED                              |
  | 44h  00h  DTLPWRSOMC  INTERNAL TARGET FAILURE                               |
  | 3Dh  00h  DTLPWRSOMC  INVALID BITS IN IDENTIFY MESSAGE                      |
  | 2Ch  02h        S     INVALID COMBINATION OF WINDOWS SPECIFIED              |
  | 20h  00h  DTLPWRSOMC  INVALID COMMAND OPERATION CODE                        |
  | 21h  01h          M   INVALID ELEMENT ADDRESS                               |
  | 24h  00h  DTLPWRSOMC  INVALID FIELD IN CDB                                  |
  | 26h  00h  DTLPWRSOMC  INVALID FIELD IN PARAMETER LIST                       |
  | 49h  00h  DTLPWRSOMC  INVALID MESSAGE ERROR                                 |
  | 11h  05h      WR O    L-EC UNCORRECTABLE ERROR                              |
  | 60h  00h        S     LAMP FAILURE                                          |
  | 5Bh  02h  DTLPWRSOM   LOG COUNTER AT MAXIMUM                                |
  | 5Bh  00h  DTLPWRSOM   LOG EXCEPTION                                         |
  | 5Bh  03h  DTLPWRSOM   LOG LIST CODES EXHAUSTED                              |
  | 2Ah  02h  DTL WRSOMC  LOG PARAMETERS CHANGED                                |
  | 21h  00h  DT  WR OM   LOGICAL BLOCK ADDRESS OUT OF RANGE                    |
  | 08h  00h  DTL WRSOMC  LOGICAL UNIT COMMUNICATION FAILURE                    |
  | 08h  02h  DTL WRSOMC  LOGICAL UNIT COMMUNICATION PARITY ERROR               |
  | 08h  01h  DTL WRSOMC  LOGICAL UNIT COMMUNICATION TIME-OUT                   |
  | 4Ch  00h  DTLPWRSOMC  LOGICAL UNIT FAILED SELF-CONFIGURATION                |
  | 3Eh  00h  DTLPWRSOMC  LOGICAL UNIT HAS NOT SELF-CONFIGURED YET              |
  | 04h  01h  DTLPWRSOMC  LOGICAL UNIT IS IN PROCESS OF BECOMING READY          |
  | 04h  00h  DTLPWRSOMC  LOGICAL UNIT NOT READY, CAUSE NOT REPORTABLE          |
  | 04h  04h  DTL    O    LOGICAL UNIT NOT READY, FORMAT IN PROGRESS            |
  | 04h  02h  DTLPWRSOMC  LOGICAL UNIT NOT READY, INITIALIZING COMMAND REQUIRED |
  | 04h  03h  DTLPWRSOMC  LOGICAL UNIT NOT READY, MANUAL INTERVENTION REQUIRED  |
  | 25h  00h  DTLPWRSOMC  LOGICAL UNIT NOT SUPPORTED                            |
  | 15h  01h  DTL WRSOM   MECHANICAL POSITIONING ERROR                          |
  | 53h  00h  DTL WRSOM   MEDIA LOAD OR EJECT FAILED                            |
  | 3Bh  0Dh          M   MEDIUM DESTINATION ELEMENT FULL                       |
  | 31h  00h  DT  W  O    MEDIUM FORMAT CORRUPTED                               |
  | 3Ah  00h  DTL WRSOM   MEDIUM NOT PRESENT                                    |
  | 53h  02h  DT  WR OM   MEDIUM REMOVAL PREVENTED                              |
  | 3Bh  0Eh          M   MEDIUM SOURCE ELEMENT EMPTY                           |
  | 43h  00h  DTLPWRSOMC  MESSAGE ERROR                                         |
  | 3Fh  01h  DTLPWRSOMC  MICROCODE HAS BEEN CHANGED                            |
  | 1Dh  00h  D   W  O    MISCOMPARE DURING VERIFY OPERATION                    |
  | 11h  0Ah  DT     O    MISCORRECTED ERROR                                    |
  | 2Ah  01h  DTL WRSOMC  MODE PARAMETERS CHANGED                               |
  | 07h  00h  DTL WRSOM   MULTIPLE PERIPHERAL DEVICES SELECTED                  |
  | 11h  03h  DT  W SO    MULTIPLE READ ERRORS                                  |
  | 00h  00h  DTLPWRSOMC  NO ADDITIONAL SENSE INFORMATION                       |
  | 00h  15h       R      NO CURRENT AUDIO STATUS TO RETURN                     |
  | 32h  00h  D   W  O    NO DEFECT SPARE LOCATION AVAILABLE                    |
  | 11h  09h   T          NO GAP FOUND                                          |
  | 01h  00h  D   W  O    NO INDEX/SECTOR SIGNAL                                |
  | 06h  00h  D   WR OM   NO REFERENCE POSITION FOUND                           |
  +=============================================================================+

       Table 71: (continued)
       +=============================================================================+
       | ASC ASCQ  DTLPWRSOMC  DESCRIPTION                                           |
       | --- ----              ----------------------------------------------------- |
       | 02h  00h  D   WR OM   NO SEEK COMPLETE                                      |
       | 03h  01h   T          NO WRITE CURRENT                                      |
       | 28h  00h  DTLPWRSOMC  NOT READY TO READY TRANSITION, MEDIUM MAY HAVE CHANGED|
       | 5Ah  01h  DT  WR OM   OPERATOR MEDIUM REMOVAL REQUEST                       |
       | 5Ah  00h  DTLPWRSOM   OPERATOR REQUEST OR STATE CHANGE INPUT (UNSPECIFIED)  |
       | 5Ah  03h  DT  W  O    OPERATOR SELECTED WRITE PERMIT                        |
       | 5Ah  02h  DT  W  O    OPERATOR SELECTED WRITE PROTECT                       |
       | 61h  02h        S     OUT OF FOCUS                                          |
       | 4Eh  00h  DTLPWRSOMC  OVERLAPPED COMMANDS ATTEMPTED                         |
       | 2Dh  00h   T          OVERWRITE ERROR ON UPDATE IN PLACE                    |
       | 3Bh  05h    L         PAPER JAM                                             |
       | 1Ah  00h  DTLPWRSOMC  PARAMETER LIST LENGTH ERROR                           |
       | 26h  01h  DTLPWRSOMC  PARAMETER NOT SUPPORTED                               |
       | 26h  02h  DTLPWRSOMC  PARAMETER VALUE INVALID                               |
       | 2Ah  00h  DTL WRSOMC  PARAMETERS CHANGED                                    |
       | 03h  00h  DTL W SO    PERIPHERAL DEVICE WRITE FAULT                         |
       | 50h  02h   T          POSITION ERROR RELATED TO TIMING                      |
       | 3Bh  0Ch        S     POSITION PAST BEGINNING OF MEDIUM                     |
       | 3Bh  0Bh        S     POSITION PAST END OF MEDIUM                           |
       | 15h  02h  DT  WR O    POSITIONING ERROR DETECTED BY READ OF MEDIUM          |
       | 29h  00h  DTLPWRSOMC  POWER ON, RESET, OR BUS DEVICE RESET OCCURRED         |
       | 42h  00h  D           POWER-ON OR SELF-TEST FAILURE (SHOULD USE 40 NN)      |
       | 1Ch  01h  D      O    PRIMARY DEFECT LIST NOT FOUND                         |
       | 40h  00h  D           RAM FAILURE (SHOULD USE 40 NN)                        |
       | 15h  00h  DTL WRSOM   RANDOM POSITIONING ERROR                              |
       | 3Bh  0Ah        S     READ PAST BEGINNING OF MEDIUM                         |
       | 3Bh  09h        S     READ PAST END OF MEDIUM                               |
       | 11h  01h  DT  W SO    READ RETRIES EXHAUSTED                                |
       | 14h  01h  DT  WR O    RECORD NOT FOUND                                      |
       | 14h  00h  DTL WRSO    RECORDED ENTITY NOT FOUND                             |
       | 18h  02h  D   WR O    RECOVERED DATA - DATA AUTO-REALLOCATED                |
       | 18h  05h  D   WR O    RECOVERED DATA - RECOMMEND REASSIGNMENT               |
       | 18h  06h  D   WR O    RECOVERED DATA - RECOMMEND REWRITE                    |
       | 17h  05h  D   WR O    RECOVERED DATA USING PREVIOUS SECTOR ID               |
       | 18h  03h       R      RECOVERED DATA WITH CIRC                              |
       | 18h  01h  D   WR O    RECOVERED DATA WITH ERROR CORRECTION & RETRIES APPLIED|
       | 18h  00h  DT  WR O    RECOVERED DATA WITH ERROR CORRECTION APPLIED          |
       | 18h  04h       R      RECOVERED DATA WITH L-EC                              |
       | 17h  03h  DT  WR O    RECOVERED DATA WITH NEGATIVE HEAD OFFSET              |
       | 17h  00h  DT  WRSO    RECOVERED DATA WITH NO ERROR CORRECTION APPLIED       |
       | 17h  02h  DT  WR O    RECOVERED DATA WITH POSITIVE HEAD OFFSET              |
       | 17h  01h  DT  WRSO    RECOVERED DATA WITH RETRIES                           |
       | 17h  04h      WR O    RECOVERED DATA WITH RETRIES AND/OR CIRC APPLIED       |
       | 17h  06h  D   W  O    RECOVERED DATA WITHOUT ECC - DATA AUTO-REALLOCATED    |
       | 17h  07h  D   W  O    RECOVERED DATA WITHOUT ECC - RECOMMEND REASSIGNMENT   |
       | 17h  08h  D   W  O    RECOVERED DATA WITHOUT ECC - RECOMMEND REWRITE        |
       | 1Eh  00h  D   W  O    RECOVERED ID WITH ECC CORRECTION                      |
       | 3Bh  08h   T          REPOSITION ERROR                                      |
       | 36h  00h    L         RIBBON, INK, OR TONER FAILURE                         |
       | 37h  00h  DTL WRSOMC  ROUNDED PARAMETER                                     |
       | 5Ch  00h  D      O    RPL STATUS CHANGE                                     |
       | 39h  00h  DTL WRSOMC  SAVING PARAMETERS NOT SUPPORTED                       |
       | 62h  00h        S     SCAN HEAD POSITIONING ERROR                           |
       | 47h  00h  DTLPWRSOMC  SCSI PARITY ERROR                                     |
       | 54h  00h     P        SCSI TO HOST SYSTEM INTERFACE FAILURE                 |
       | 45h  00h  DTLPWRSOMC  SELECT OR RESELECT FAILURE                            |
       +=============================================================================+

       Table 71: (concluded)
       +=============================================================================+
       | ASC ASCQ  DTLPWRSOMC  DESCRIPTION                                           |
       | --- ----              ----------------------------------------------------- |
       | 3Bh  00h   TL         SEQUENTIAL POSITIONING ERROR                          |
       | 00h  03h   T          SETMARK DETECTED                                      |
       | 3Bh  04h    L         SLEW FAILURE                                          |
       | 09h  03h      WR O    SPINDLE SERVO FAILURE                                 |
       | 5Ch  02h  D      O    SPINDLES NOT SYNCHRONIZED                             |
       | 5Ch  01h  D      O    SPINDLES SYNCHRONIZED                                 |
       | 1Bh  00h  DTLPWRSOMC  SYNCHRONOUS DATA TRANSFER ERROR                       |
       | 55h  00h     P        SYSTEM RESOURCE FAILURE                               |
       | 33h  00h   T          TAPE LENGTH ERROR                                     |
       | 3Bh  03h    L         TAPE OR ELECTRONIC VERTICAL FORMS UNIT NOT READY      |
       | 3Bh  01h   T          TAPE POSITION ERROR AT BEGINNING-OF-MEDIUM            |
       | 3Bh  02h   T          TAPE POSITION ERROR AT END-OF-MEDIUM                  |
       | 3Fh  00h  DTLPWRSOMC  TARGET OPERATING CONDITIONS HAVE CHANGED              |
       | 5Bh  01h  DTLPWRSOM   THRESHOLD CONDITION MET                               |
       | 26h  03h  DTLPWRSOMC  THRESHOLD PARAMETERS NOT SUPPORTED                    |
       | 2Ch  01h        S     TOO MANY WINDOWS SPECIFIED                            |
       | 09h  00h  DT  WR O    TRACK FOLLOWING ERROR                                 |
       | 09h  01h      WR O    TRACKING SERVO FAILURE                                |
       | 61h  01h        S     UNABLE TO ACQUIRE VIDEO                               |
       | 57h  00h       R      UNABLE TO RECOVER TABLE-OF-CONTENTS                   |
       | 53h  01h   T          UNLOAD TAPE FAILURE                                   |
       | 11h  00h  DT  WRSO    UNRECOVERED READ ERROR                                |
       | 11h  04h  D   W  O    UNRECOVERED READ ERROR - AUTO REALLOCATE FAILED       |
       | 11h  0Bh  D   W  O    UNRECOVERED READ ERROR - RECOMMEND REASSIGNMENT       |
       | 11h  0Ch  D   W  O    UNRECOVERED READ ERROR - RECOMMEND REWRITE THE DATA   |
       | 46h  00h  DTLPWRSOMC  UNSUCCESSFUL SOFT RESET                               |
       | 59h  00h         O    UPDATED BLOCK READ                                    |
       | 61h  00h        S     VIDEO ACQUISITION ERROR                               |
       | 50h  00h   T          WRITE APPEND ERROR                                    |
       | 50h  01h   T          WRITE APPEND POSITION ERROR                           |
       | 0Ch  00h   T    S     WRITE ERROR                                           |
       | 0Ch  02h  D   W  O    WRITE ERROR - AUTO REALLOCATION FAILED                |
       | 0Ch  01h  D   W  O    WRITE ERROR RECOVERED WITH AUTO REALLOCATION          |
       | 27h  00h  DT  W  O    WRITE PROTECTED                                       |
       |                                                                             |
       | 80h  XXh     \                                                              |
       | THROUGH       >       VENDOR SPECIFIC.                                      |
       | FFh  XX      /                                                              |
       |                                                                             |
       | XXh  80h     \                                                              |
       | THROUGH       >       VENDOR SPECIFIC QUALIFICATION OF STANDARD ASC.        |
       | XXh  FFh     /                                                              |
       |                       ALL CODES NOT SHOWN ARE RESERVED.                     |
       |-----------------------------------------------------------------------------|

  C.2.  ASC and ASCQ(”ԍ†‡)

                         Table 364: ASC and ASCQ Assignments

  +=============================================================================+
  |           D - DIRECT ACCESS DEVICE                                          |
  |           .T - SEQUENTIAL ACCESS DEVICE                                     |
  |           . L - PRINTER DEVICE                                              |
  |           .  P - PROCESSOR DEVICE                                           |
  |           .  .W - WRITE ONCE READ MULTIPLE DEVICE                           |
  |           .  . R - READ ONLY (CD-ROM) DEVICE                                |
  |           .  .  S - SCANNER DEVICE                                          |
  |           .  .  .O - OPTICAL MEMORY DEVICE                                  |
  |           .  .  . M - MEDIA CHANGER DEVICE                                  |
  |           .  .  .  C - COMMUNICATION DEVICE                                 |
  |           .  .  .  .                                                        |
  | ASC ASCQ  DTLPWRSOMC  DESCRIPTION                                           |
  | --- ----              ----------------------------------------------------- |
  |  00  00   DTLPWRSOMC  NO ADDITIONAL SENSE INFORMATION                       |
  |  00  01    T          FILEMARK DETECTED                                     |
  |  00  02    T    S     END-OF-PARTITION/MEDIUM DETECTED                      |
  |  00  03    T          SETMARK DETECTED                                      |
  |  00  04    T    S     BEGINNING-OF-PARTITION/MEDIUM DETECTED                |
  |  00  05    T    S     END-OF-DATA DETECTED                                  |
  |  00  06   DTLPWRSOMC  I/O PROCESS TERMINATED                                |
  |  00  11   R           AUDIO PLAY OPERATION IN PROGRESS                      |
  |  00  12   R           AUDIO PLAY OPERATION PAUSED                           |
  |  00  13   R           AUDIO PLAY OPERATION SUCCESSFULLY COMPLETED           |
  |  00  14   R           AUDIO PLAY OPERATION STOPPED DUE TO ERROR             |
  |  00  15   R           NO CURRENT AUDIO STATUS TO RETURN                     |
  |  01  00   DW  O       NO INDEX/SECTOR SIGNAL                                |
  |  02  00   DWR OM      NO SEEK COMPLETE                                      |
  |  03  00   DTL W SO    PERIPHERAL DEVICE WRITE FAULT                         |
  |  03  01    T          NO WRITE CURRENT                                      |
  |  03  02    T          EXCESSIVE WRITE ERRORS                                |
  |  04  00   DTLPWRSOMC  LOGICAL UNIT NOT READY, CAUSE NOT REPORTABLE          |
  |  04  01   DTLPWRSOMC  LOGICAL UNIT IS IN PROCESS OF BECOMING READY          |
  |  04  02   DTLPWRSOMC  LOGICAL UNIT NOT READY, INITIALIZING COMMAND REQUIRED |
  |  04  03   DTLPWRSOMC  LOGICAL UNIT NOT READY, MANUAL INTERVENTION REQUIRED  |
  |  04  04   DTL    O    LOGICAL UNIT NOT READY, FORMAT IN PROGRESS            |
  |  05  00   DTL WRSOMC  LOGICAL UNIT DOES NOT RESPOND TO SELECTION            |
  |  06  00   DWR OM  NO  REFERENCE POSITION FOUND                              |
  |  07  00   DTL WRSOM   MULTIPLE PERIPHERAL DEVICES SELECTED                  |
  |  08  00   DTL WRSOMC  LOGICAL UNIT COMMUNICATION FAILURE                    |
  |  08  01   DTL WRSOMC  LOGICAL UNIT COMMUNICATION TIME-OUT                   |
  |  08  02   DTL WRSOMC  LOGICAL UNIT COMMUNICATION PARITY ERROR               |
  |  09  00   DT  WR O    TRACK FOLLOWING ERROR                                 |
  |  09  01       WR O    TRA CKING SERVO FAILURE                               |
  |  09  02       WR O    FOC US SERVO FAILURE                                  |
  |  09  03       WR O    SPI NDLE SERVO FAILURE                                |
  +=============================================================================+

  Table 364: (continued)
  +=============================================================================+
  |           D - DIRECT ACCESS DEVICE                                          |
  |           .T - SEQUENTIAL ACCESS DEVICE                                     |
  |           . L - PRINTER DEVICE                                              |
  |           .  P - PROCESSOR DEVICE                                           |
  |           .  .W - WRITE ONCE READ MULTIPLE DEVICE                           |
  |           .  . R - READ ONLY (CD-ROM) DEVICE                                |
  |           .  .  S - SCANNER DEVICE                                          |
  |           .  .  .O - OPTICAL MEMORY DEVICE                                  |
  |           .  .  . M - MEDIA CHANGER DEVICE                                  |
  |           .  .  .  C - COMMUNICATION DEVICE                                 |
  |           .  .  .  .                                                        |
  | ASC ASCQ  DTLPWRSOMC  DESCRIPTION                                           |
  | --- ----              ----------------------------------------------------- |
  |  0A  00   DTLPWRSOMC  ERROR LOG OVERFLOW                                    |
  |  0B  00                                                                     |
  |  0C  00    T     S    WRITE ERROR                                           |
  |  0C  01   D   W  O    WRITE ERROR RECOVERED WITH AUTO REALLOCATION          |
  |  0C  02   D   W  O    WRITE ERROR - AUTO REALLOCATION FAILED                |
  |  0D  00                                                                     |
  |  0E  00                                                                     |
  |  0F  00                                                                     |
  |  10  00   D   W  O    ID CRC OR ECC ERROR                                   |
  |  11  00   DT  WRSO    UNRECOVERED READ ERROR                                |
  |  11  01   DT  W SO    READ RETRIES EXHAUSTED                                |
  |  11  02   DT  W SO    ERROR TOO LONG TO CORRECT                             |
  |  11  03   DT  W SO    MULTIPLE READ ERRORS                                  |
  |  11  04   D   W  O    UNRECOVERED READ ERROR - AUTO REALLOCATE FAILED       |
  |  11  05       WR O    L-EC UNCORRECTABLE ERROR                              |
  |  11  06       WR O    CIRC UNRECOVERED ERROR                                |
  |  11  07       W  O    DATA RESYCHRONIZATION ERROR                           |
  |  11  08    T          INCOMPLETE BLOCK READ                                 |
  |  11  09    T          NO GAP FOUND                                          |
  |  11  0A   DT     O    MISCORRECTED ERROR                                    |
  |  11  0B   D   W  O    UNRECOVERED READ ERROR - RECOMMEND REASSIGNMENT       |
  |  11  0C   D   W  O    UNRECOVERED READ ERROR - RECOMMEND REWRITE THE DATA   |
  |  12  00   D   W  O    ADDRESS MARK NOT FOUND FOR ID FIELD                   |
  |  13  00   D   W  O    ADDRESS MARK NOT FOUND FOR DATA FIELD                 |
  |  14  00   DTL WRSO    RECORDED ENTITY NOT FOUND                             |
  |  14  01   DT  WR O    RECORD NOT FOUND                                      |
  |  14  02    T          FILEMARK OR SETMARK NOT FOUND                         |
  |  14  03    T          END-OF-DATA NOT FOUND                                 |
  |  14  04    T          BLOCK SEQUENCE ERROR                                  |
  |  15  00   DTL WRSOM   RANDOM POSITIONING ERROR                              |
  |  15  01   DTL WRSOM   MECHANICAL POSITIONING ERROR                          |
  |  15  02   DT  WR O    POSITIONING ERROR DETECTED BY READ OF MEDIUM          |
  |  16  00   DW     O    DATA SYNCHRONIZATION MARK ERROR                       |
  |  17  00   DT  WRSO    RECOVERED DATA WITH NO ERROR CORRECTION APPLIED       |
  |  17  01   DT  WRSO    RECOVERED DATA WITH RETRIES                           |
  |  17  02   DT  WR O    RECOVERED DATA WITH POSITIVE HEAD OFFSET              |
  |  17  03   DT  WR O    RECOVERED DATA WITH NEGATIVE HEAD OFFSET              |
  |  17  04       WR O    RECOVERED DATA WITH RETRIES AND/OR CIRC APPLIED       |
  |  17  05   D   WR O    RECOVERED DATA USING PREVIOUS SECTOR ID               |
  |  17  06   D   W  O    RECOVERED DATA WITHOUT ECC - DATA AUTO-REALLOCATED    |
  |  17  07   D   W  O    RECOVERED DATA WITHOUT ECC - RECOMMEND REASSIGNMENT   |
  |  17  08   D   W  O    RECOVERED DATA WITHOUT ECC - RECOMMEND REWRITE        |
  |  18  00   DT  WR O    RECOVERED DATA WITH ERROR CORRECTION APPLIED          |
  |  18  01   D   WR O    RECOVERED DATA WITH ERROR CORRECTION & RETRIES APPLIED|
  |  18  02   D   WR O    RECOVERED DATA - DATA AUTO-REALLOCATED                |
  |  18  03        R      RECOVERED DATA WITH CIRC                              |
  |  18  04        R      RECOVERED DATA WITH LEC                               |
  |  18  05   D   WR O    RECOVERED DATA - RECOMMEND REASSIGNMENT               |
  |  18  06   D   WR O    RECOVERED DATA - RECOMMEND REWRITE                    |
  +=============================================================================+

       Table 364: (continued)
       +=============================================================================+
       |           D - DIRECT ACCESS DEVICE                                          |
       |           .T - SEQUENTIAL ACCESS DEVICE                                     |
       |           . L - PRINTER DEVICE                                              |
       |           .  P - PROCESSOR DEVICE                                           |
       |           .  .W - WRITE ONCE READ MULTIPLE DEVICE                           |
       |           .  . R - READ ONLY (CD-ROM) DEVICE                                |
       |           .  .  S - SCANNER DEVICE                                          |
       |           .  .  .O - OPTICAL MEMORY DEVICE                                  |
       |           .  .  . M - MEDIA CHANGER DEVICE                                  |
       |           .  .  .  C - COMMUNICATION DEVICE                                 |
       |           .  .  .  .                                                        |
       | ASC ASCQ  DTLPWRSOMC  DESCRIPTION                                           |
       | --- ----              ----------------------------------------------------- |
       |  19  00   D      O    DEFECT LIST ERROR                                     |
       |  19  01   D      O    DEFECT LIST NOT AVAILABLE                             |
       |  19  02   D      O    DEFECT LIST ERROR IN PRIMARY LIST                     |
       |  19  03   D      O    DEFECT LIST ERROR IN GROWN LIST                       |
       |  1A  00   DTLPWRSOMC  PARAMETER LIST LENGTH ERROR                           |
       |  1B  00   DTLPWRSOMC  SYNCHRONOUS DATA TRANSFER ERROR                       |
       |  1C  00   D      O    DEFECT LIST NOT FOUND                                 |
       |  1C  01   D      O    PRIMARY DEFECT LIST NOT FOUND                         |
       |  1C  02   D      O    GROWN DEFECT LIST NOT FOUND                           |
       |  1D  00   D   W  O    MISCOMPARE DURING VERIFY OPERATION                    |
       |  1E  00   D   W  O    RECOVERED ID WITH ECC                                 |
       |  1F  00                                                                     |
       |  20  00   DTLPWRSOMC  INVALID COMMAND OPERATION CODE                        |
       |  21  00   DT  WR OM   LOGICAL BLOCK ADDRESS OUT OF RANGE                    |
       |  21  01           M   INVALID ELEMENT ADDRESS                               |
       |  22  00   D           ILLEGAL FUNCTION (SHOULD USE 20 00, 24 00, OR 26 00)  |
       |  23  00                                                                     |
       |  24  00   DTLPWRSOMC  INVALID FIELD IN CDB                                  |
       |  25  00   DTLPWRSOMC  LOGICAL UNIT NOT SUPPORTED                            |
       |  26  00   DTLPWRSOMC  INVALID FIELD IN PARAMETER LIST                       |
       |  26  01   DTLPWRSOMC  PARAMETER NOT SUPPORTED                               |
       |  26  02   DTLPWRSOMC  PARAMETER VALUE INVALID                               |
       |  26  03   DTLPWRSOMC  THRESHOLD PARAMETERS NOT SUPPORTED                    |
       |  27  00   DT  W  O    WRITE PROTECTED                                       |
       |  28  00   DTLPWRSOMC  NOT READY TO READY TRANSITION(MEDIUM MAY HAVE CHANGED)|
       |  28  01           M   IMPORT OR EXPORT ELEMENT ACCESSED                     |
       |  29  00   DTLPWRSOMC  POWER ON, RESET, OR BUS DEVICE RESET OCCURRED         |
       |  2A  00   DTL WRSOMC  PARAMETERS CHANGED                                    |
       |  2A  01   DTL WRSOMC  MODE PARAMETERS CHANGED                               |
       |  2A  02   DTL WRSOMC  LOG PARAMETERS CHANGED                                |
       |  2B  00   DTLPWRSO C  COPY CANNOT EXECUTE SINCE HOST CANNOT DISCONNECT      |
       |  2C  00   DTLPWRSOMC  COMMAND SEQUENCE ERROR                                |
       |  2C  01         S     TOO MANY WINDOWS SPECIFIED                            |
       |  2C  02         S     INVALID COMBINATION OF WINDOWS SPECIFIED              |
       |  2D  00    T          OVERWRITE ERROR ON UPDATE IN PLACE                    |
       |  2E  00                                                                     |
       |  2F  00   DTLPWRSOMC  COMMANDS CLEARED BY ANOTHER INITIATOR                 |
       |  30  00   DT  WR OM   INCOMPATIBLE MEDIUM INSTALLED                         |
       |  30  01   DT  WR O    CANNOT READ MEDIUM - UNKNOWN FORMAT                   |
       |  30  02   DT  WR O    CANNOT READ MEDIUM - INCOMPATIBLE FORMAT              |
       |  30  03   DT          CLEANING CARTRIDGE INSTALLED                          |
       |  31  00   DT  W  O    MEDIUM FORMAT CORRUPTED                               |
       |  31  01   D L    O    FORMAT COMMAND FAILED                                 |
       |  32  00   D   W  O    NO DEFECT SPARE LOCATION AVAILABLE                    |
       |  32  01   D   W  O    DEFECT LIST UPDATE FAILURE                            |
       |  33  00    T          TAPE LENGTH ERROR                                     |
       |  34  00                                                                     |
       |  35  00                                                                     |
       |  36  00     L         RIBBON, INK, OR TONER FAILURE                         |
       +=============================================================================+

       Table 364: (continued)
       +=============================================================================+
       |           D - DIRECT ACCESS DEVICE                                          |
       |           .T - SEQUENTIAL ACCESS DEVICE                                     |
       |           . L - PRINTER DEVICE                                              |
       |           .  P - PROCESSOR DEVICE                                           |
       |           .  .W - WRITE ONCE READ MULTIPLE DEVICE                           |
       |           .  . R - READ ONLY (CD-ROM) DEVICE                                |
       |           .  .  S - SCANNER DEVICE                                          |
       |           .  .  .O - OPTICAL MEMORY DEVICE                                  |
       |           .  .  . M - MEDIA CHANGER DEVICE                                  |
       |           .  .  .  C - COMMUNICATION DEVICE                                 |
       |           .  .  .  .                                                        |
       | ASC ASCQ  DTLPWRSOMC  DESCRIPTION                                           |
       | --- ----              ----------------------------------------------------- |
       |  37  00   DTL WRSOMC  ROUNDED PARAMETER                                     |
       |  38  00                                                                     |
       |  39  00   DTL WRSOMC  SAVING PARAMETERS NOT SUPPORTED                       |
       |  3A  00   DTL WRSOM   MEDIUM NOT PRESENT                                    |
       |  3B  00    TL         SEQUENTIAL POSITIONING ERROR                          |
       |  3B  01    T          TAPE POSITION ERROR AT BEGINNING-OF-MEDIUM            |
       |  3B  02    T          TAPE POSITION ERROR AT END-OF-MEDIUM                  |
       |  3B  03     L         TAPE OR ELECTRONIC VERTICAL FORMS UNIT NOT READY      |
       |  3B  04     L         SLEW FAILURE                                          |
       |  3B  05     L         PAPER JAM                                             |
       |  3B  06     L         FAILED TO SENSE TOP-OF-FORM                           |
       |  3B  07     L         FAILED TO SENSE BOTTOM-OF-FORM                        |
       |  3B  08    T          REPOSITION ERROR                                      |
       |  3B  09         S     READ PAST END OF MEDIUM                               |
       |  3B  0A         S     READ PAST BEGINNING OF MEDIUM                         |
       |  3B  0B         S     POSITION PAST END OF MEDIUM                           |
       |  3B  0C         S     POSITION PAST BEGINNING OF MEDIUM                     |
       |  3B  0D           M   MEDIUM DESTINATION ELEMENT FULL                       |
       |  3B  0E           M   MEDIUM SOURCE ELEMENT EMPTY                           |
       |  3C  00                                                                     |
       |  3D  00   DTLPWRSOMC  INVALID BITS IN IDENTIFY MESSAGE                      |
       |  3E  00   DTLPWRSOMC  LOGICAL UNIT HAS NOT SELF-CONFIGURED YET              |
       |  3F  00   DTLPWRSOMC  TARGET OPERATING CONDITIONS HAVE CHANGED              |
       |  3F  01   DTLPWRSOMC  MICROCODE HAS BEEN CHANGED                            |
       |  3F  02   DTLPWRSOMC  CHANGED OPERATING DEFINITION                          |
       |  3F  03   DTLPWRSOMC  INQUIRY DATA HAS CHANGED                              |
       |  40  00   D           RAM FAILURE (SHOULD USE 40 NN)                        |
       |  40  NN   DTLPWRSOMC  DIAGNOSTIC FAILURE ON COMPONENT NN (80H-FFH)          |
       |  41  00   D           DATA PATH FAILURE (SHOULD USE 40 NN)                  |
       |  42  00   D           POWER-ON OR SELF-TEST FAILURE (SHOULD USE 40 NN)      |
       |  43  00   DTLPWRSOMC  MESSAGE ERROR                                         |
       |  44  00   DTLPWRSOMC  INTERNAL TARGET FAILURE                               |
       |  45  00   DTLPWRSOMC  SELECT OR RESELECT FAILURE                            |
       |  46  00   DTLPWRSOMC  UNSUCCESSFUL SOFT RESET                               |
       |  47  00   DTLPWRSOMC  SCSI PARITY ERROR                                     |
       |  48  00   DTLPWRSOMC  INITIATOR DETECTED ERROR MESSAGE RECEIVED             |
       |  49  00   DTLPWRSOMC  INVALID MESSAGE ERROR                                 |
       |  4A  00   DTLPWRSOMC  COMMAND PHASE ERROR                                   |
       |  4B  00   DTLPWRSOMC  DATA PHASE ERROR                                      |
       |  4C  00   DTLPWRSOMC  LOGICAL UNIT FAILED SELF-CONFIGURATION                |
       |  4D  00                                                                     |
       |  4E  00   DTLPWRSOMC  OVERLAPPED COMMANDS ATTEMPTED                         |
       |  4F  00                                                                     |
       |  50  00    T          WRITE APPEND ERROR                                    |
       |  50  01    T          WRITE APPEND POSITION ERROR                           |
       |  50  02    T          POSITION ERROR RELATED TO TIMING                      |
       |  51  00    T     O    ERASE FAILURE                                         |
       |  52  00    T          CARTRIDGE FAULT                                       |
       +=============================================================================+

       Table 364: (continued)
       +=============================================================================+
       |           D - DIRECT ACCESS DEVICE                                          |
       |           .T - SEQUENTIAL ACCESS DEVICE                                     |
       |           . L - PRINTER DEVICE                                              |
       |           .  P - PROCESSOR DEVICE                                           |
       |           .  .W - WRITE ONCE READ MULTIPLE DEVICE                           |
       |           .  . R - READ ONLY (CD-ROM) DEVICE                                |
       |           .  .  S - SCANNER DEVICE                                          |
       |           .  .  .O - OPTICAL MEMORY DEVICE                                  |
       |           .  .  . M - MEDIA CHANGER DEVICE                                  |
       |           .  .  .  C - COMMUNICATION DEVICE                                 |
       |           .  .  .  .                                                        |
       | ASC ASCQ  DTLPWRSOMC  DESCRIPTION                                           |
       | --- ----              ----------------------------------------------------- |
       |  53  00   DTL WRSOM   MEDIA LOAD OR EJECT FAILED                            |
       |  53  01    T          UNLOAD TAPE FAILURE                                   |
       |  53  02   DT  WR OM   MEDIUM REMOVAL PREVENTED                              |
       |  54  00      P        SCSI TO HOST SYSTEM INTERFACE FAILURE                 |
       |  55  00      P        SYSTEM RESOURCE FAILURE                               |
       |  56  00                                                                     |
       |  57  00        R      UNABLE TO RECOVER TABLE-OF-CONTENTS                   |
       |  58  00     O         GENERATION DOES NOT EXIST                             |
       |  59  00     O         UPDATED BLOCK READ                                    |
       |  5A  00   DTLPWRSOM   OPERATOR REQUEST OR STATE CHANGE INPUT (UNSPECIFIED)  |
       |  5A  01   DT  WR OM   OPERATOR MEDIUM REMOVAL REQUEST                       |
       |  5A  02   DT  W  O    OPERATOR SELECTED WRITE PROTECT                       |
       |  5A  03   DT  W  O    OPERATOR SELECTED WRITE PERMIT                        |
       |  5B  00   DTLPWRSOM   LOG EXCEPTION                                         |
       |  5B  01   DTLPWRSOM   THRESHOLD CONDITION MET                               |
       |  5B  02   DTLPWRSOM   LOG COUNTER AT MAXIMUM                                |
       |  5B  03   DTLPWRSOM   LOG LIST CODES EXHAUSTED                              |
       |  5C  00   D   O       RPL STATUS CHANGE                                     |
       |  5C  01   D   O       SPINDLES SYNCHRONIZED                                 |
       |  5C  02   D   O       SPINDLES NOT SYNCHRONIZED                             |
       |  5D  00                                                                     |
       |  5E  00                                                                     |
       |  5F  00                                                                     |
       |  60  00         S     LAMP FAILURE                                          |
       |  61  00         S     VIDEO ACQUISITION ERROR                               |
       |  61  01         S     UNABLE TO ACQUIRE VIDEO                               |
       |  61  02         S     OUT OF FOCUS                                          |
       |  62  00         S     SCAN HEAD POSITIONING ERROR                           |
       |  63  00        R      END OF USER AREA ENCOUNTERED ON THIS TRACK            |
       |  64  00        R      ILLEGAL MODE FOR THIS TRACK                           |
       |  65  00                                                                     |
       |  66  00                                                                     |
       |  67  00                                                                     |
       |  68  00                                                                     |
       |  69  00                                                                     |
       |  6A  00                                                                     |
       |  6B  00                                                                     |
       |  6C  00                                                                     |
       |  6D  00                                                                     |
       |  6E  00                                                                     |
       |  6F  00                                                                     |
       +=============================================================================+

  Table 364: (concluded)
  +=============================================================================+
  |           D - DIRECT ACCESS DEVICE                                          |
  |           .T - SEQUENTIAL ACCESS DEVICE                                     |
  |           . L - PRINTER DEVICE                                              |
  |           .  P - PROCESSOR DEVICE                                           |
  |           .  .W - WRITE ONCE READ MULTIPLE DEVICE                           |
  |           .  . R - READ ONLY (CD-ROM) DEVICE                                |
  |           .  .  S - SCANNER DEVICE                                          |
  |           .  .  .O - OPTICAL MEMORY DEVICE                                  |
  |           .  .  . M - MEDIA CHANGER DEVICE                                  |
  |           .  .  .  C - COMMUNICATION DEVICE                                 |
  |           .  .  .  .                                                        |
  | ASC ASCQ  DTLPWRSOMC  DESCRIPTION                                           |
  | --- ----              ----------------------------------------------------- |
  |  70  00                                                                     |
  |  71  00                                                                     |
  |  72  00                                                                     |
  |  73  00                                                                     |
  |  74  00                                                                     |
  |  75  00                                                                     |
  |  76  00                                                                     |
  |  77  00                                                                     |
  |  78  00                                                                     |
  |  79  00                                                                     |
  |  7A  00                                                                     |
  |  7B  00                                                                     |
  |  7C  00                                                                     |
  |  7D  00                                                                     |
  |  7E  00                                                                     |
  |  7F  00                                                                     |
  |                                                                             |
  |  80  xxh \                                                                  |
  |   THROUGH >  VENDOR SPECIFIC.                                               |
  |  FF  xxh /                                                                  |
  |                                                                             |
  |  xxh 80 \                                                                   |
  |  THROUGH >  VENDOR SPECIFIC QUALIFICATION OF STANDARD ASC.                  |
  |  xxh FF /                                                                   |
  |               ALL CODES NOT SHOWN OR BLANK ARE RESERVED.                    |
  +=============================================================================+

  D.  SCSIƒRƒ}ƒ“ƒhƒR[ƒh‚̃NƒCƒbƒNƒŠƒtƒ@ƒŒƒ“ƒX

  •\365‚̓Rƒ}ƒ“ƒh‘€ìƒR[ƒh‚̔ԍ†‡‚Ì–Ú˜^‚Å‚·B

                          Table 365: SCSI-2 Operation Codes

  +=============================================================================+
  |           D - DIRECT ACCESS DEVICE                       Device Column Key  |
  |           .T - SEQUENTIAL ACCESS DEVICE                  M = Mandatory      |
  |           . L - PRINTER DEVICE                           O = Optional       |
  |           .  P - PROCESSOR DEVICE                        V = Vendor Specific|
  |           .  .W - WRITE ONCE READ MULTIPLE DEVICE        R = Reserved       |
  |           .  . R - READ ONLY (CD-ROM) DEVICE                                |
  |           .  .  S - SCANNER DEVICE                                          |
  |           .  .  .O - OPTICAL MEMORY DEVICE                                  |
  |           .  .  . M - MEDIA CHANGER DEVICE                                  |
  |           .  .  .  C - COMMUNICATION DEVICE                                 |
  |           .  .  .  .                                                        |
  |        OP DTLPWRSOMC Description                                            |
  |----------+----------+-------------------------------------------------------|
  |        00 MMMMMMMMMM TEST UNIT READY                                        |
  |        01  M         REWIND                                                 |
  |        01 O V OO OO  REZERO UNIT                                            |
  |        02 VVVVVV  V                                                         |
  |        03 MMMMMMMMMM REQUEST SENSE                                          |
  |        04   O        FORMAT                                                 |
  |        04 M      O   FORMAT UNIT                                            |
  |        05 VMVVVV  V  READ BLOCK LIMITS                                      |
  |        06 VVVVVV  V                                                         |
  |        07         O  INITIALIZE ELEMENT STATUS                              |
  |        07 OVV O  OV  REASSIGN BLOCKS                                        |
  |        08          M GET MESSAGE(06)                                        |
  |        08 OMV OO OV  READ(06)                                               |
  |        08    O       RECEIVE                                                |
  |        09 VVVVVV  V                                                         |
  |        0A   M        PRINT                                                  |
  |        0A          M SEND MESSAGE(06)                                       |
  |        0A    M       SEND(06)                                               |
  |        0A OM  O  OV  WRITE(06)                                              |
  |        0B O   OO OV  SEEK(06)                                               |
  |        0B   O        SLEW AND PRINT                                         |
  |        0C VVVVVV  V                                                         |
  |        0D VVVVVV  V                                                         |
  |        0E VVVVVV  V                                                         |
  |        0F VOVVVV  V  READ REVERSE                                           |
  |        10   O O      SYNCHRONIZE BUFFER                                     |
  |        10 VM VVV     WRITE FILEMARKS                                        |
  |        11 VMVVVV     SPACE                                                  |
  |        12 MMMMMMMMMM INQUIRY                                                |
  |        13 VOVVVV     VERIFY(06)                                             |
  |        14 VOOVVV     RECOVER BUFFERED DATA                                  |
  |        15 OMO OOOOOO MODE SELECT(06)                                        |
  |        16 M   MM MO  RESERVE                                                |
  |        16  MM   M    RESERVE UNIT                                           |
  |        17 M   MM MO  RELEASE                                                |
  |        17  MM   M    RELEASE UNIT                                           |
  |        18 OOOOOOOO   COPY                                                   |
  |        19 VMVVVV     ERASE                                                  |
  |        1A OMO OOOOOO MODE SENSE(06)                                         |
  |        1B  O         LOAD UNLOAD                                            |
  |        1B       O    SCAN                                                   |
  |        1B   O        STOP PRINT                                             |
  |        1B O   OO O   STOP START UNIT                                        |
  +=============================================================================+

  Table 365: (continued)
  +=============================================================================+
  |           D - DIRECT ACCESS DEVICE                       Device Column Key  |
  |           .T - SEQUENTIAL ACCESS DEVICE                  M = Mandatory      |
  |           . L - PRINTER DEVICE                           O = Optional       |
  |           .  P - PROCESSOR DEVICE                        V = Vendor Specific|
  |           .  .W - WRITE ONCE READ MULTIPLE DEVICE        R = Reserved       |
  |           .  . R - READ ONLY (CD-ROM) DEVICE                                |
  |           .  .  S - SCANNER DEVICE                                          |
  |           .  .  .O - OPTICAL MEMORY DEVICE                                  |
  |           .  .  . M - MEDIA CHANGER DEVICE                                  |
  |           .  .  .  C - COMMUNICATION DEVICE                                 |
  |           .  .  .  .                                                        |
  |        OP DTLPWRSOMC Description                                            |
  |----------+----------+-------------------------------------------------------|
  |        1C OOOOOOOOOO RECEIVE DIAGNOSTIC RESULTS                             |
  |        1D MMMMMMMMMM SEND DIAGNOSTIC                                        |
  |        1E OO  OO OO  PREVENT ALLOW MEDIUM REMOVAL                           |
  |        1F                                                                   |
  |        20 V   VV V                                                          |
  |        21 V   VV V                                                          |
  |        22 V   VV V                                                          |
  |        23 V   VV V                                                          |
  |        24 V   VVM    SET WINDOW                                             |
  |        25       O    GET WINDOW                                             |
  |        25 M   M  M   READ CAPACITY                                          |
  |        25      M     READ CD-ROM CAPACITY                                   |
  |        26 V   VV                                                            |
  |        27 V   VV                                                            |
  |        28          O GET MESSAGE(10)                                        |
  |        28 M   MMMM   READ(10)                                               |
  |        29 V   VV O   READ GENERATION                                        |
  |        2A          O SEND MESSAGE(10)                                       |
  |        2A       O    SEND(10)                                               |
  |        2A M   M  M   WRITE(10)                                              |
  |        2B  O         LOCATE                                                 |
  |        2B         O  POSITION TO ELEMENT                                    |
  |        2B O   OO O   SEEK(10)                                               |
  |        2C V      O   ERASE(10)                                              |
  |        2D V   O  O   READ UPDATED BLOCK                                     |
  |        2E O   O  O   WRITE AND VERIFY(10)                                   |
  |        2F O   OO O   VERIFY(10)                                             |
  |        30 O   OO O   SEARCH DATA HIGH(10)                                   |
  |        31       O    OBJECT POSITION                                        |
  |        31 O   OO O   SEARCH DATA EQUAL(10)                                  |
  |        32 O   OO O   SEARCH DATA LOW(10)                                    |
  |        33 O   OO O   SET LIMITS(10)                                         |
  |        34       O    GET DATA BUFFER STATUS                                 |
  |        34 O   OO O   PRE-FETCH                                              |
  |        34  O         READ POSITION                                          |
  |        35 O   OO O   SYNCHRONIZE CACHE                                      |
  |        36 O   OO O   LOCK UNLOCK CACHE                                      |
  |        37 O      O   READ DEFECT DATA(10)                                   |
  |        38     O  O   MEDIUM SCAN                                            |
  |        39 OOOOOOOO   COMPARE                                                |
  |        3A OOOOOOOO   COPY AND VERIFY                                        |
  |        3B OOOOOOOOOO WRITE BUFFER                                           |
  |        3C OOOOOOOOOO READ BUFFER                                            |
  |        3D     O  O   UPDATE BLOCK                                           |
  |        3E O   OO O   READ LONG                                              |
  |        3F O   O  O   WRITE LONG                                             |
  +=============================================================================+

       Table 365: (continued)
       +=============================================================================+
       |           D - DIRECT ACCESS DEVICE                       Device Column Key  |
       |           .T - SEQUENTIAL ACCESS DEVICE                  M = Mandatory      |
       |           . L - PRINTER DEVICE                           O = Optional       |
       |           .  P - PROCESSOR DEVICE                        V = Vendor Specific|
       |           .  .W - WRITE ONCE READ MULTIPLE DEVICE        R = Reserved       |
       |           .  . R - READ ONLY (CD-ROM) DEVICE                                |
       |           .  .  S - SCANNER DEVICE                                          |
       |           .  .  .O - OPTICAL MEMORY DEVICE                                  |
       |           .  .  . M - MEDIA CHANGER DEVICE                                  |
       |           .  .  .  C - COMMUNICATION DEVICE                                 |
       |           .  .  .  .                                                        |
       |        OP DTLPWRSOMC Description                                            |
       |----------+----------+-------------------------------------------------------|
       |        40 OOOOOOOOOO CHANGE DEFINITION                                      |
       |        41 O          WRITE SAME                                             |
       |        42      O     READ SUB-CHANNEL                                       |
       |        43      O     READ TOC                                               |
       |        44      O     READ HEADER                                            |
       |        45      O     PLAY AUDIO(10)                                         |
       |        46                                                                   |
       |        47      O     PLAY AUDIO MSF                                         |
       |        48      O     PLAY AUDIO TRACK INDEX                                 |
       |        49      O     PLAY TRACK RELATIVE(10)                                |
       |        4A                                                                   |
       |        4B      O     PAUSE RESUME                                           |
       |        4C OOOOOOOOOO LOG SELECT                                             |
       |        4D OOOOOOOOOO LOG SENSE                                              |
       |        4E                                                                   |
       |        4F                                                                   |
       |        50                                                                   |
       |        51                                                                   |
       |        52                                                                   |
       |        53                                                                   |
       |        54                                                                   |
       |        55 OOO OOOOOO MODE SELECT(10)                                        |
       |        56                                                                   |
       |        57                                                                   |
       |        58                                                                   |
       |        59                                                                   |
       |        5A OOO OOOOOO MODE SENSE(10)                                         |
       |        5B                                                                   |
       |        5C                                                                   |
       |        5D                                                                   |
       |        5E                                                                   |
       |        5F                                                                   |
       +=============================================================================+

  Table 365: (concluded)
  +=============================================================================+
  |           D - DIRECT ACCESS DEVICE                       Device Column Key  |
  |           .T - SEQUENTIAL ACCESS DEVICE                  M = Mandatory      |
  |           . L - PRINTER DEVICE                           O = Optional       |
  |           .  P - PROCESSOR DEVICE                        V = Vendor Specific|
  |           .  .W - WRITE ONCE READ MULTIPLE DEVICE        R = Reserved       |
  |           .  . R - READ ONLY (CD-ROM) DEVICE                                |
  |           .  .  S - SCANNER DEVICE                                          |
  |           .  .  .O - OPTICAL MEMORY DEVICE                                  |
  |           .  .  . M - MEDIA CHANGER DEVICE                                  |
  |           .  .  .  C - COMMUNICATION DEVICE                                 |
  |           .  .  .  .                                                        |
  |        OP DTLPWRSOMC Description                                            |
  |----------+----------+-------------------------------------------------------|
  |        A0                                                                   |
  |        A1                                                                   |
  |        A2                                                                   |
  |        A3                                                                   |
  |        A4                                                                   |
  |        A5         M  MOVE MEDIUM                                            |
  |        A5      O     PLAY AUDIO(12)                                         |
  |        A6         O  EXCHANGE MEDIUM                                        |
  |        A7                                                                   |
  |        A8          O GET MESSAGE(12)                                        |
  |        A8     OO O   READ(12)                                               |
  |        A9      O     PLAY TRACK RELATIVE(12)                                |
  |        AA          O SEND MESSAGE(12)                                       |
  |        AA     O  O   WRITE(12)                                              |
  |        AB                                                                   |
  |        AC        O   ERASE(12)                                              |
  |        AD                                                                   |
  |        AE     O  O   WRITE AND VERIFY(12)                                   |
  |        AF     OO O   VERIFY(12)                                             |
  |        B0     OO O   SEARCH DATA HIGH(12)                                   |
  |        B1     OO O   SEARCH DATA EQUAL(12)                                  |
  |        B2     OO O   SEARCH DATA LOW(12)                                    |
  |        B3     OO O   SET LIMITS(12)                                         |
  |        B4                                                                   |
  |        B5                                                                   |
  |        B5         O  REQUEST VOLUME ELEMENT ADDRESS                         |
  |        B6                                                                   |
  |        B6         O  SEND VOLUME TAG                                        |
  |        B7        O   READ DEFECT DATA(12)                                   |
  |        B8                                                                   |
  |        B8         O  READ ELEMENT STATUS                                    |
  |        B9                                                                   |
  |        BA                                                                   |
  |        BB                                                                   |
  |        BC                                                                   |
  |        BD                                                                   |
  |        BE                                                                   |
  |        BF                                                                   |
  +=============================================================================+

  E.  ƒvƒƒOƒ‰ƒ€—á

  ‚±‚ꂪ C Œ¾Œê‚É‚æ‚éƒvƒƒOƒ‰ƒ€—á‚Å‚·B‚±‚ê‚͐»‘¢ŽÒ/ƒ‚ƒfƒ‹‚ð—v‹‚µAƒ
  ƒfƒBƒA‚ª‘•’u‚É“ƒÚ‚³‚ê‚Ä‚¢‚é‚©‚Ç‚¤‚©‚ð•ñ‚µ‚Ü‚·B

       #define DEVICE "/dev/sgc"
       /* ”Ä—p SCSI ƒCƒ“ƒ^[ƒtƒF[ƒX‚ðŽÀÛ‚É“®‚©‚µ‚Ă݂錩–{ƒvƒƒOƒ‰ƒ€ */
       #include <stdio.h>
       #include <unistd.h>
       #include <string.h>
       #include <fcntl.h>
       #include <errno.h>
       #include <scsi/sg.h>

       #define SCSI_OFF sizeof(struct sg_header)
       static unsigned char cmd[SCSI_OFF + 18];      /* SCSI ƒRƒ}ƒ“ƒh ƒoƒbƒtƒ@ */
       int fd;                               /* SCSI ƒfƒoƒCƒX/ƒtƒ@ƒCƒ‹ ƒfƒBƒXƒNƒŠƒvƒ^ */

       /* Š®Œ‹‚µ‚½ SCSI ƒRƒ}ƒ“ƒh‚ðˆ—B ”Ä—p SCSI ƒCƒ“ƒ^[ƒtƒF[ƒX‚ðŽg—p */
       static int handle_scsi_cmd(unsigned cmd_len,         /* ƒRƒ}ƒ“ƒh’· */
                                  unsigned in_size,         /* “ü—̓f[ƒ^ƒTƒCƒY */
                                  unsigned char *i_buff,    /* “ü—̓oƒbƒtƒ@ */
                                  unsigned out_size,        /* o—̓f[ƒ^ƒTƒCƒY */
                                  unsigned char *o_buff     /* o—̓oƒbƒtƒ@ */
                                  )
       {
           int status = 0;
           struct sg_header *sg_hd;

           /* ˆÀ‘S«ŒŸ¸ */
           if (!cmd_len) return -1;            /* cmd_len != 0 ‚ª•K—v */
           if (!i_buff) return -1;             /* “ü—̓oƒbƒtƒ@‚ª NULL ‚Å‚È‚¢‚±‚Æ */
       #ifdef SG_BIG_BUFF
           if (SCSI_OFF + cmd_len + in_size > SG_BIG_BUFF) return -1;
           if (SCSI_OFF + out_size > SG_BIG_BUFF) return -1;
       #else
           if (SCSI_OFF + cmd_len + in_size > 4096) return -1;
           if (SCSI_OFF + out_size > 4096) return -1;
       #endif

           if (!o_buff) out_size = 0;

           /* ”Ä—p SCSI ƒfƒoƒCƒXƒwƒbƒ_‚̍\’z */
           sg_hd = (struct sg_header *) i_buff;
           sg_hd->reply_len   = SCSI_OFF + out_size;
           sg_hd->twelve_byte = cmd_len == 12;
           sg_hd->result = 0;
       #if     0
           sg_hd->pack_len    = SCSI_OFF + cmd_len + in_size; /* •s—v */
           sg_hd->pack_id;     /* –¢Žg—p */
           sg_hd->other_flags; /* –¢Žg—p */
       #endif

           /* ƒRƒ}ƒ“ƒh‘—o */
           status = write( fd, i_buff, SCSI_OFF + cmd_len + in_size );
           if ( status < 0 || status != SCSI_OFF + cmd_len + in_size ||
                              sg_hd->result ) {
               /* ‚È‚ñ‚ç‚©‚̃Gƒ‰[‚ª”­¶ */
               fprintf( stderr, "write(generic) result = 0x%x cmd = 0x%x\n",
                           sg_hd->result, i_buff[SCSI_OFF] );
               perror("");
               return status;
           }

           if (!o_buff) o_buff = i_buff;       /* ƒoƒbƒtƒ@‚̃|ƒCƒ“ƒ^‚ðƒ`ƒFƒbƒN */

           /* Œ‹‰Ê‚ð‰ñŽû */
           status = read( fd, o_buff, SCSI_OFF + out_size);
           if ( status < 0 || status != SCSI_OFF + out_size || sg_hd->result ) {
               /* ‚È‚ñ‚ç‚©‚̃Gƒ‰[‚ª”­¶ */
               fprintf( stderr, "read(generic) result = 0x%x cmd = 0x%x\n",
                  sg_hd->result, o_buff[SCSI_OFF] );
          fprintf( stderr, "read(generic) sense "
                  "%x %x %x %x %x %x %x %x %x %x %x %x %x %x %x %x\n",
                  sg_hd->sense_buffer[0],         sg_hd->sense_buffer[1],
                  sg_hd->sense_buffer[2],         sg_hd->sense_buffer[3],
                  sg_hd->sense_buffer[4],         sg_hd->sense_buffer[5],
                  sg_hd->sense_buffer[6],         sg_hd->sense_buffer[7],
                  sg_hd->sense_buffer[8],         sg_hd->sense_buffer[9],
                  sg_hd->sense_buffer[10],        sg_hd->sense_buffer[11],
                  sg_hd->sense_buffer[12],        sg_hd->sense_buffer[13],
                  sg_hd->sense_buffer[14],        sg_hd->sense_buffer[15]);
          if (status < 0)
              perror("");
      }
      /* Žó‚¯Žæ‚é‚ׂ«‚à‚Ì‚ðŽó‚¯Žæ‚Á‚½‚©‚Ç‚¤‚©‚ð‚Ý‚é */
      if (status == SCSI_OFF + out_size) status = 0; /* ‘S•”‚à‚ç‚Á‚½ */

      return status;  /* 0 ‚̓Gƒ‰[‚È‚µ‚ðˆÓ–¡ */
  }

  #define INQUIRY_CMD     0x12
  #define INQUIRY_CMDLEN  6
  #define INQUIRY_REPLY_LEN 96
  #define INQUIRY_VENDOR  8       /* •Ô“šƒf[ƒ^“à‚̃xƒ“ƒ_–¼‚̃IƒtƒZƒbƒg */

  /* ƒxƒ“ƒ_‚̃uƒ‰ƒ“ƒh‚ƃ‚ƒfƒ‹‚ð—v‹ */
  static unsigned char *Inquiry ( void )
  {
    static unsigned char Inqbuffer[ SCSI_OFF + INQUIRY_REPLY_LEN ];
    unsigned char cmdblk [ INQUIRY_CMDLEN ] =
        { INQUIRY_CMD,  /* command */
                    0,  /* lun/reserved */
                    0,  /* page code */
                    0,  /* reserved */
    INQUIRY_REPLY_LEN,  /* allocation length */
                    0 };/* reserved/flag/link */

    memcpy( cmd + SCSI_OFF, cmdblk, sizeof(cmdblk) );

    /*
     * +------------------+
     * | struct sg_header | <- cmd
     * +------------------+
     * | copy of cmdblk   | <- cmd + SCSI_OFF
     * +------------------+
     */

    if (handle_scsi_cmd(sizeof(cmdblk), 0, cmd,
                        sizeof(Inqbuffer) - SCSI_OFF, Inqbuffer )) {
        fprintf( stderr, "Inquiry failed\n" );
        exit(2);
    }
    return (Inqbuffer + SCSI_OFF);
  }

  #define TESTUNITREADY_CMD 0
  #define TESTUNITREADY_CMDLEN 6

  #define ADD_SENSECODE 12
  #define ADD_SC_QUALIFIER 13
  #define NO_MEDIA_SC 0x3a
  #define NO_MEDIA_SCQ 0x00
  int TestForMedium ( void )
  {
    /* READY ó‘Ô‚ð—v‹ */
    static unsigned char cmdblk [TESTUNITREADY_CMDLEN] = {
        TESTUNITREADY_CMD, /* command */
                        0, /* lun/reserved */
                        0, /* reserved */
                        0, /* reserved */
                        0, /* reserved */
                        0};/* reserved */

    memcpy( cmd + SCSI_OFF, cmdblk, sizeof(cmdblk) );

    /*
     * +------------------+
     * | struct sg_header | <- cmd
     * +------------------+
     * | copy of cmdblk   | <- cmd + SCSI_OFF
     * +------------------+
     */

    if (handle_scsi_cmd(sizeof(cmdblk), 0, cmd,
                              0, NULL)) {
        fprintf (stderr, "Test unit ready failed\n");
        exit(2);
    }

    return
     *(((struct sg_header*)cmd)->sense_buffer +ADD_SENSECODE) !=
                                                          NO_MEDIA_SC ||
     *(((struct sg_header*)cmd)->sense_buffer +ADD_SC_QUALIFIER) !=
                                                          NO_MEDIA_SCQ;
  }

  void main( void )
  {
    fd = open(DEVICE, O_RDWR);
    if (fd < 0) {
      fprintf( stderr, "Need read/write permissions for "DEVICE".\n" );
      exit(1);
    }

    /* Inquiry ‚ÌŒ‹‰Ê‚̈ꕔ‚̃tƒB[ƒ‹ƒh‚ð•\Ž¦ */
    printf( "%s\n", Inquiry() + INQUIRY_VENDOR );

    /* ƒƒfƒBƒA‚ª“ƒÚ‚³‚ê‚Ä‚¢‚é‚©‚Ç‚¤‚©‚ð‚Ý‚é */
    if (!TestForMedium()) {
      printf("device is unloaded\n");
    } else {
      printf("device is loaded\n");
    }
  }