The Linux SCSI programming HOWTO
 Heiko Eissfeldt [email protected]
 v1.5, 7 May 1996
 II Ryouta(��� ����) [email protected]
 �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. �ӎ�
 20. �t�^
 21. �G���[����
    21.1 �G���[�X�e�[�^�X�̉��
    21.2 �X�e�[�^�X�R�[�h
    21.3 SCSI Sense Keys
    21.4 Host codes
    21.5 Driver codes

 22. Additional sense codes  ����� additional sense code qualifiers
    22.1 ASC and ASCQ(������)
    22.2 ASC and ASCQ(�ԍ���)

 23. SCSI�R�}���h�R�[�h�̃N�C�b�N���t�@�����X
 24. �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 ( [email protected]) �ɂ��Ċ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
 ����ā[email protected] �ɓd�q���[���𑗂��Ă��������B��
 �M���� [email protected] �ɓ��e���܂��傤�B�w���v������
 "help" �̍s���� [email protected] �ɓ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

 T.  �t�^

 U.  �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

 U.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

 U.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

 U.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.                                                         |
 +=============================================================================+

 U.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

 U.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

 V.  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

 V.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.                     |
      |-----------------------------------------------------------------------------|

 V.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.                    |
 +=============================================================================+

 W.  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                                                                   |
 +=============================================================================+

 X.  �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");
   }
 }