scsi.h

来自「开放源码的编译器open watcom 1.6.0版的源代码」· C头文件 代码 · 共 1,695 行 · 第 1/4 页

H
1,695
字号
/*
 * scsi.h
 *
 * SCSI port and class interface.
 *
 * This file is part of the w32api package.
 *
 * Contributors:
 *   Created by Casper S. Hornstrup <chorns@users.sourceforge.net>
 *
 * THIS SOFTWARE IS NOT COPYRIGHTED
 *
 * This source code is offered for use in the public domain. You may
 * use, modify or distribute it freely.
 *
 * This code is distributed in the hope that it will be useful but
 * WITHOUT ANY WARRANTY. ALL WARRANTIES, EXPRESS OR IMPLIED ARE HEREBY
 * DISCLAIMED. This includes but is not limited to warranties of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 *
 */

#ifndef __SCSI_H
#define __SCSI_H

#if __GNUC__ >=3
#pragma GCC system_header
#endif

#ifdef __cplusplus
extern "C" {
#endif

#include "ntddk.h"

typedef union _CDB {
  struct _CDB6GENERIC {
    UCHAR  OperationCode;
    UCHAR  Immediate : 1;
    UCHAR  CommandUniqueBits : 4;
    UCHAR  LogicalUnitNumber : 3;
    UCHAR  CommandUniqueBytes[3];
    UCHAR  Link : 1;
    UCHAR  Flag : 1;
    UCHAR  Reserved : 4;
    UCHAR  VendorUnique : 2;
  } CDB6GENERIC, *PCDB6GENERIC;
  
  struct _CDB6READWRITE {
    UCHAR  OperationCode;
    UCHAR  LogicalBlockMsb1 : 5;
    UCHAR  LogicalUnitNumber : 3;
    UCHAR  LogicalBlockMsb0;
    UCHAR  LogicalBlockLsb;
    UCHAR  TransferBlocks;
    UCHAR  Control;
  } CDB6READWRITE, *PCDB6READWRITE;
  
  struct _CDB6INQUIRY {
    UCHAR  OperationCode;
    UCHAR  Reserved1 : 5;
    UCHAR  LogicalUnitNumber : 3;
    UCHAR  PageCode;
    UCHAR  IReserved;
    UCHAR  AllocationLength;
    UCHAR  Control;
  } CDB6INQUIRY, *PCDB6INQUIRY;
  
  struct _CDB6INQUIRY3 {
    UCHAR  OperationCode;
    UCHAR  EnableVitalProductData : 1;
    UCHAR  CommandSupportData : 1;
    UCHAR  Reserved1 : 6;
    UCHAR  PageCode;
    UCHAR  Reserved2;
    UCHAR  AllocationLength;
    UCHAR  Control;
  } CDB6INQUIRY3, *PCDB6INQUIRY3;
  
  struct _CDB6VERIFY {
    UCHAR  OperationCode;
    UCHAR  Fixed : 1;
    UCHAR  ByteCompare : 1;
    UCHAR  Immediate : 1;
    UCHAR  Reserved : 2;
    UCHAR  LogicalUnitNumber : 3;
    UCHAR  VerificationLength[3];
    UCHAR  Control;
  } CDB6VERIFY, *PCDB6VERIFY;
  
  struct _CDB6FORMAT {
    UCHAR  OperationCode;
    UCHAR  FormatControl : 5;
    UCHAR  LogicalUnitNumber : 3;
    UCHAR  FReserved1;
    UCHAR  InterleaveMsb;
    UCHAR  InterleaveLsb;
    UCHAR  FReserved2;
  } CDB6FORMAT, *PCDB6FORMAT;
  
  struct _CDB10 {
    UCHAR  OperationCode;
    UCHAR  RelativeAddress : 1;
    UCHAR  Reserved1 : 2;
    UCHAR  ForceUnitAccess : 1;
    UCHAR  DisablePageOut : 1;
    UCHAR  LogicalUnitNumber : 3;
    UCHAR  LogicalBlockByte0;
    UCHAR  LogicalBlockByte1;
    UCHAR  LogicalBlockByte2;
    UCHAR  LogicalBlockByte3;
    UCHAR  Reserved2;
    UCHAR  TransferBlocksMsb;
    UCHAR  TransferBlocksLsb;
    UCHAR  Control;
  } CDB10, *PCDB10;
  
  struct _CDB12 {
    UCHAR  OperationCode;
    UCHAR  RelativeAddress : 1;
    UCHAR  Reserved1 : 2;
    UCHAR  ForceUnitAccess : 1;
    UCHAR  DisablePageOut : 1;
    UCHAR  LogicalUnitNumber : 3;
    UCHAR  LogicalBlock[4];
    UCHAR  TransferLength[4];
    UCHAR  Reserved2;
    UCHAR  Control;
  } CDB12, *PCDB12;
  
  struct _PAUSE_RESUME {
    UCHAR  OperationCode;
    UCHAR  Reserved1 : 5;
    UCHAR  LogicalUnitNumber : 3;
    UCHAR  Reserved2[6];
    UCHAR  Action;
    UCHAR  Control;
  } PAUSE_RESUME, *PPAUSE_RESUME;
  
  struct _READ_TOC {
    UCHAR  OperationCode;
    UCHAR  Reserved0 : 1;
    UCHAR  Msf : 1;
    UCHAR  Reserved1 : 3;
    UCHAR  LogicalUnitNumber : 3;
    UCHAR  Format2 : 4;
    UCHAR  Reserved2 : 4;
    UCHAR  Reserved3[3];
    UCHAR  StartingTrack;
    UCHAR  AllocationLength[2];
    UCHAR  Control : 6;
    UCHAR  Format : 2;
  } READ_TOC, *PREAD_TOC;
  
  struct _READ_DISK_INFORMATION {
    UCHAR  OperationCode;
    UCHAR  Reserved1 : 5;
    UCHAR  Lun : 3;
    UCHAR  Reserved2[5];
    UCHAR  AllocationLength[2];
    UCHAR  Control;
  } READ_DISK_INFORMATION, *PREAD_DISK_INFORMATION;
  
  struct _READ_TRACK_INFORMATION {
    UCHAR  OperationCode;
    UCHAR  Track : 1;
    UCHAR  Reserved1 : 3;
    UCHAR  Reserved2 : 1;
    UCHAR  Lun : 3;
    UCHAR  BlockAddress[4];
    UCHAR  Reserved3;
    UCHAR  AllocationLength[2];
    UCHAR  Control;
  } READ_TRACK_INFORMATION, *PREAD_TRACK_INFORMATION;
  
  struct _RESERVE_TRACK_RZONE {
    UCHAR  OperationCode;
    UCHAR  Reserved1[4];
    UCHAR  ReservationSize[4];
    UCHAR  Control;
  } RESERVE_TRACK_RZONE, *PRESERVE_TRACK_RZONE;
  
  struct _SEND_OPC_INFORMATION {
    UCHAR  OperationCode;
    UCHAR  DoOpc    : 1;
    UCHAR  Reserved : 7;
    UCHAR  Reserved1[5];
    UCHAR  ParameterListLength[2];
    UCHAR  Reserved2;
  } SEND_OPC_INFORMATION, *PSEND_OPC_INFORMATION;
  
  struct _CLOSE_TRACK {
    UCHAR  OperationCode;
    UCHAR  Immediate : 1;
    UCHAR  Reserved1 : 7;
    UCHAR  Track     : 1;
    UCHAR  Session   : 1;
    UCHAR  Reserved2 : 6;
    UCHAR  Reserved3;
    UCHAR  TrackNumber[2];
    UCHAR  Reserved4[3];
    UCHAR  Control;
  } CLOSE_TRACK, *PCLOSE_TRACK;
  
  struct _SEND_CUE_SHEET {
    UCHAR  OperationCode;
    UCHAR  Reserved[5];
    UCHAR  CueSheetSize[3];
    UCHAR  Control;
  } SEND_CUE_SHEET, *PSEND_CUE_SHEET;
  
  struct _READ_HEADER {
    UCHAR  OperationCode;
    UCHAR  Reserved1 : 1;
    UCHAR  Msf : 1;
    UCHAR  Reserved2 : 3;
    UCHAR  Lun : 3;
    UCHAR  LogicalBlockAddress[4];
    UCHAR  Reserved3;
    UCHAR  AllocationLength[2];
    UCHAR  Control;
  } READ_HEADER, *PREAD_HEADER;
  
  struct _PLAY_AUDIO {
    UCHAR  OperationCode;
    UCHAR  Reserved1 : 5;
    UCHAR  LogicalUnitNumber : 3;
    UCHAR  StartingBlockAddress[4];
    UCHAR  Reserved2;
    UCHAR  PlayLength[2];
    UCHAR  Control;
  } PLAY_AUDIO, *PPLAY_AUDIO;
  
  struct _PLAY_AUDIO_MSF { 
    UCHAR  OperationCode;
    UCHAR  Reserved1 : 5;
    UCHAR  LogicalUnitNumber : 3;
    UCHAR  Reserved2;
    UCHAR  StartingM;
    UCHAR  StartingS;
    UCHAR  StartingF;
    UCHAR  EndingM;
    UCHAR  EndingS;
    UCHAR  EndingF;
    UCHAR  Control;
  } PLAY_AUDIO_MSF, *PPLAY_AUDIO_MSF;
  
/* FIXME: Should the union be anonymous in C++ too?  If so,
   can't define named types _LBA and _MSF within anonymous union
   for C++. */ 	
  struct _PLAY_CD {
    UCHAR  OperationCode;
    UCHAR  Reserved1 : 1;
    UCHAR  CMSF : 1;
    UCHAR  ExpectedSectorType : 3;
    UCHAR  Lun : 3;
#ifndef __cplusplus
  _ANONYMOUS_UNION
#endif
  union {
      struct _LBA {
            UCHAR  StartingBlockAddress[4];
            UCHAR  PlayLength[4];
      } LBA;
  
      struct _MSF {
            UCHAR  Reserved1;
            UCHAR  StartingM;
            UCHAR  StartingS;
            UCHAR  StartingF;
            UCHAR  EndingM;
            UCHAR  EndingS;
            UCHAR  EndingF;
            UCHAR  Reserved2;
      } MSF;
  #ifndef __cplusplus
  }DUMMYUNIONNAME;
  #else
  }u;
  #endif
  
    UCHAR  Audio : 1;
    UCHAR  Composite : 1;
    UCHAR  Port1 : 1;
    UCHAR  Port2 : 1;
    UCHAR  Reserved2 : 3;
    UCHAR  Speed : 1;
    UCHAR  Control;
  } PLAY_CD, *PPLAY_CD;
  
  struct _SCAN_CD {
    UCHAR  OperationCode;
    UCHAR  RelativeAddress : 1;
    UCHAR  Reserved1 : 3;
    UCHAR  Direct : 1;
    UCHAR  Lun : 3;
    UCHAR  StartingAddress[4];
    UCHAR  Reserved2[3];
    UCHAR  Reserved3 : 6;
    UCHAR  Type : 2;
    UCHAR  Reserved4;
    UCHAR  Control;
  } SCAN_CD, *PSCAN_CD;
  
  struct _STOP_PLAY_SCAN {
    UCHAR  OperationCode;
    UCHAR  Reserved1 : 5;
    UCHAR  Lun : 3;
    UCHAR  Reserved2[7];
    UCHAR  Control;
  } STOP_PLAY_SCAN, *PSTOP_PLAY_SCAN;
  
  struct _SUBCHANNEL {
    UCHAR  OperationCode;
    UCHAR  Reserved0 : 1;
    UCHAR  Msf : 1;
    UCHAR  Reserved1 : 3;
    UCHAR  LogicalUnitNumber : 3;
    UCHAR  Reserved2 : 6;
    UCHAR  SubQ : 1;
    UCHAR  Reserved3 : 1;
    UCHAR  Format;
    UCHAR  Reserved4[2];
    UCHAR  TrackNumber;
    UCHAR  AllocationLength[2];
    UCHAR  Control;
  } SUBCHANNEL, *PSUBCHANNEL;
  
  struct _READ_CD { 
    UCHAR  OperationCode;
    UCHAR  RelativeAddress : 1;
    UCHAR  Reserved0 : 1;
    UCHAR  ExpectedSectorType : 3;
    UCHAR  Lun : 3;
    UCHAR  StartingLBA[4];
    UCHAR  TransferBlocks[3];
    UCHAR  Reserved2 : 1;
    UCHAR  ErrorFlags : 2;
    UCHAR  IncludeEDC : 1;
    UCHAR  IncludeUserData : 1;
    UCHAR  HeaderCode : 2;
    UCHAR  IncludeSyncData : 1;
    UCHAR  SubChannelSelection : 3;
    UCHAR  Reserved3 : 5;
    UCHAR  Control;
  } READ_CD, *PREAD_CD;
  
  struct _READ_CD_MSF {
    UCHAR  OperationCode;
    UCHAR  RelativeAddress : 1;
    UCHAR  Reserved1 : 1;
    UCHAR  ExpectedSectorType : 3;
    UCHAR  Lun : 3;
    UCHAR  Reserved2;
    UCHAR  StartingM;
    UCHAR  StartingS;
    UCHAR  StartingF;
    UCHAR  EndingM;
    UCHAR  EndingS;
    UCHAR  EndingF;
    UCHAR  Reserved3;
    UCHAR  Reserved4 : 1;
    UCHAR  ErrorFlags : 2;
    UCHAR  IncludeEDC : 1;
    UCHAR  IncludeUserData : 1;
    UCHAR  HeaderCode : 2;
    UCHAR  IncludeSyncData : 1;
    UCHAR  SubChannelSelection : 3;
    UCHAR  Reserved5 : 5;
    UCHAR  Control;
  } READ_CD_MSF, *PREAD_CD_MSF;
  
  struct _PLXTR_READ_CDDA {
    UCHAR  OperationCode;
    UCHAR  Reserved0 : 5;
    UCHAR  LogicalUnitNumber : 3;
    UCHAR  LogicalBlockByte0;
    UCHAR  LogicalBlockByte1;
    UCHAR  LogicalBlockByte2;
    UCHAR  LogicalBlockByte3;
    UCHAR  TransferBlockByte0;
    UCHAR  TransferBlockByte1;
    UCHAR  TransferBlockByte2;
    UCHAR  TransferBlockByte3;
    UCHAR  SubCode;
    UCHAR  Control;
  } PLXTR_READ_CDDA, *PPLXTR_READ_CDDA;
  
  struct _NEC_READ_CDDA {
    UCHAR  OperationCode;
    UCHAR  Reserved0;
    UCHAR  LogicalBlockByte0;
    UCHAR  LogicalBlockByte1;
    UCHAR  LogicalBlockByte2;
    UCHAR  LogicalBlockByte3;
    UCHAR  Reserved1;
    UCHAR  TransferBlockByte0;
    UCHAR  TransferBlockByte1;
    UCHAR  Control;
  } NEC_READ_CDDA, *PNEC_READ_CDDA;
  
  struct _MODE_SENSE {
    UCHAR  OperationCode;
    UCHAR  Reserved1 : 3;
    UCHAR  Dbd : 1;
    UCHAR  Reserved2 : 1;
    UCHAR  LogicalUnitNumber : 3;
    UCHAR  PageCode : 6;
    UCHAR  Pc : 2;
    UCHAR  Reserved3;
    UCHAR  AllocationLength;
    UCHAR  Control;
  } MODE_SENSE, *PMODE_SENSE;
  
  struct _MODE_SENSE10 {
    UCHAR  OperationCode;
    UCHAR  Reserved1 : 3;
    UCHAR  Dbd : 1;
    UCHAR  Reserved2 : 1;
    UCHAR  LogicalUnitNumber : 3;
    UCHAR  PageCode : 6;
    UCHAR  Pc : 2;
    UCHAR  Reserved3[4];
    UCHAR  AllocationLength[2];

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?