scsi_cmd.h
上传用户:sourcesun
上传日期:2013-09-23
资源大小:362k
文件大小:7k
源码类别:

DNA

开发平台:

Asm

  1. /*************************************************************************
  2.  *
  3.  *    Used with ICCARM and AARM.
  4.  *
  5.  *    (c) Copyright IAR Systems 2005
  6.  *
  7.  *    File name   : scsi_cmd.h
  8.  *    Description : Definition of SCSI commands (SPC, SBP, MMC command set)
  9.  *
  10.  *    History :
  11.  *    1. Data        : September 27, 2005
  12.  *       Author      : Stanimir Bonev
  13.  *       Description : Create
  14.  *    2. Data        : January 27, 2006
  15.  *       Author      : Stanimir Bonev
  16.  *       Description : Modify
  17.  *        Add Unit Start/Stop command definitions
  18.  *
  19.  *    $Revision: 1.3.2.1 $
  20. **************************************************************************/
  21. #include <includes.h>
  22. #ifndef __SCSI_CMD_H
  23. #define __SCSI_CMD_H
  24. // Data Command block defenition
  25. typedef enum
  26. {
  27.   ScsiTestUnitReady     = 0x00,
  28.   ScsiRequestSense      = 0x03,
  29.   ScsiInquiry           = 0x12,
  30.   ScsiModeSelect6       = 0x15,
  31.   ScsiModeSense6        = 0x1A,
  32.   ScsiMediaStartStop    = 0x1B,
  33.   ScsiMediaRemoval      = 0x1E,
  34.   ScsiReadFormatCapcity = 0x23,
  35.   ScsiReadCapacity10    = 0x25,
  36.   ScsiRead10            = 0x28,
  37.   ScsiWrite10           = 0x2A,
  38.   ScsiFerify10          = 0x2F,
  39. } ScsiCommands_t;
  40. typedef enum
  41. {
  42.   UnformattedMedia = 1, FormattedMedia, NoMediaPresent,
  43. } FormatCapacityDescType_t;
  44. typedef union
  45. {
  46.   Int8U Cmd;
  47.   struct
  48.   {
  49.     Int8U CommandCode : 5;
  50.     Int8U GroupCode   : 3;
  51.   };
  52. } ScsiCmdField_t;
  53. typedef union
  54. {
  55.   Int8U Control;
  56.   struct
  57.   {
  58.     Int8U Link        : 1;
  59.     Int8U             : 1;
  60.     Int8U NACA        : 1;
  61.     Int8U             : 3;
  62.     Int8U VendorSpec  : 2;
  63.   };
  64. } SpcControl_t;
  65. #pragma pack(1)
  66. // Commands definitions
  67. typedef struct
  68. {
  69.   Int8U  OperationCode;
  70.   Int8U  Reserved0;
  71.   Int8U  Reserved1;
  72.   Int8U  Reserved2;
  73.   Int8U  Reserved3;
  74.   SpcControl_t  Control;
  75. } Spc3TestUnitReady_t, *pSpc3TestUnitReady_t;
  76. typedef struct
  77. {
  78.   Int8U OperationCode;
  79.   struct
  80.   {
  81.     Int8U DESC : 1;
  82.     Int8U      : 7;
  83.   };
  84.   Int8U Reserved0;
  85.   Int8U Reserved1;
  86.   Int8U AllocationLenght;
  87.   SpcControl_t Control;
  88. } Spc3RequestSense_t, * pSpc3RequestSense_t;
  89. typedef struct
  90. {
  91.   Int8U OperationCode;
  92.   struct
  93.   {
  94.     Int8U EVPD : 1;
  95.     Int8U      : 7;
  96.   };
  97.   Int8U PageCode;
  98.   Int8U AllocationLenght[2];
  99.   SpcControl_t Control;
  100. } Spc3Inquiry_t, * pSpc3Inquiry_t;
  101. typedef struct
  102. {
  103.   Int8U OperationCode;
  104.   struct
  105.   {
  106.     Int8U SP   : 1;
  107.     Int8U      : 3;
  108.     Int8U PF   : 1;
  109.     Int8U      : 3;
  110.   };
  111.   Int8U Reserved0;
  112.   Int8U Reserved1;
  113.   Int8U Reserved2;
  114.   Int8U ParameterListLenght;
  115.   SpcControl_t Control;
  116. } Spc3ModeSelect6_t, * pSpc3ModeSelect6_t;
  117. typedef struct
  118. {
  119.   Int8U OperationCode;
  120.   struct
  121.   {
  122.     Int8U      : 3;
  123.     Int8U DBD  : 1;
  124.     Int8U      : 4;
  125.   };
  126.   struct
  127.   {
  128.     Int8U PageCode : 6;
  129.     Int8U PC       : 2;
  130.   };
  131.   Int8U SubPageCode;
  132.   Int8U AllocationLenght;
  133.   SpcControl_t Control;
  134. } Spc3ModeSense6_t, * pSpc3ModeSense6_t;
  135. typedef struct
  136. {
  137.   Int8U OperationCode;
  138.   Int8U Reserved0;
  139.   Int8U Reserved1;
  140.   Int8U Reserved2;
  141.   struct
  142.   {
  143.     Int8U Prevent : 2;
  144.     Int8U         : 6;
  145.   };
  146.   SpcControl_t Control;
  147. } Spc3MediaRemoval_t, * pSpc3MediaRemoval_t;
  148. typedef struct
  149. {
  150.   Int8U OperationCode;
  151.   Int8U Reserved0;
  152.   Int8U LogicalBockAddress[4];
  153.   Int8U Reserved1;
  154.   Int8U Reserved2;
  155.   struct
  156.   {
  157.     Int8U PMI     : 1;
  158.     Int8U         : 7;
  159.   };
  160.   SpcControl_t Control;
  161. } Sbc2ReadCapacity10_t, * pSbc2ReadCapacity10_t;
  162. typedef struct
  163. {
  164.   Int8U OperationCode;
  165.   struct
  166.   {
  167.     Int8U Obsolete  : 1;
  168.     Int8U FUA_NV    : 1;
  169.     Int8U Reserved  : 1;
  170.     Int8U FUA       : 1;
  171.     Int8U DPO       : 1;
  172.     Int8U RDPROTECT : 3;
  173.   };
  174.   Int8U LogicalBockAddress[4];
  175.   struct
  176.   {
  177.     Int8U CroupNumb : 5;
  178.     Int8U           : 3;
  179.   };
  180.   Int8U TransferLength[2];
  181.   SpcControl_t Control;
  182. } Sbc2Read10_t, * pSbc2Read10_t;
  183. typedef struct
  184. {
  185.   Int8U OperationCode;
  186.   struct
  187.   {
  188.     Int8U Obsolete  : 1;
  189.     Int8U FUA_NV    : 1;
  190.     Int8U Reserved  : 1;
  191.     Int8U FUA       : 1;
  192.     Int8U DPO       : 1;
  193.     Int8U WRPROTECT : 3;
  194.   };
  195.   Int8U LogicalBockAddress[4];
  196.   struct
  197.   {
  198.     Int8U CroupNumb : 5;
  199.     Int8U           : 3;
  200.   };
  201.   Int8U TransferLength[2];
  202.   SpcControl_t Control;
  203. } Sbc2Write10_t, * pSbc2Write10_t;
  204. typedef struct
  205. {
  206.   Int8U OperationCode;
  207.   struct
  208.   {
  209.     Int8U Obsolete  : 1;
  210.     Int8U BYTCHK    : 1;
  211.     Int8U Reserved  : 2;
  212.     Int8U DPO       : 1;
  213.     Int8U VRPROTECT : 3;
  214.   };
  215.   Int8U LogicalBockAddress[4];
  216.   struct
  217.   {
  218.     Int8U CroupNumb : 5;
  219.     Int8U           : 3;
  220.   };
  221.   Int8U TransferLength[2];
  222.   SpcControl_t Control;
  223. } Sbc2Verify10_t, * pSbc2Verify10_t;
  224. typedef struct
  225. {
  226.   Int8U OperationCode;
  227.   Int8U Reserved0;
  228.   Int8U Reserved1;
  229.   Int8U Reserved2;
  230.   Int8U Reserved3;
  231.   Int8U Reserved4;
  232.   Int8U Reserved5;
  233.   Int8U AllocationLenght[2];
  234.   SpcControl_t Control;
  235. } Mmc3ReadFormatCapacity_t, * pMmc3ReadFormatCapacity_t;
  236. // Command responses definitions
  237. typedef struct
  238. {
  239.   struct
  240.   {
  241.     Int8U ResponceCode : 7;
  242.     Int8U Valid        : 1;
  243.   };
  244.   Int8U Obsolete;
  245.   struct
  246.   {
  247.     Int8U SenseKey : 4;
  248.     Int8U Reserved : 1;
  249.     Int8U ILI      : 1;
  250.     Int8U EOM      : 1;
  251.     Int8U FILEMARK : 1;
  252.   };
  253.   Int8U Information[4];
  254.   Int8U AddSenseKeyLength;
  255.   Int8U CommSpecInfo[4];
  256.   Int8U Asc;
  257.   Int8U Ascq;
  258.   Int8U Fruc;
  259.   Int8U Sks[3];
  260. } Spc3RequestSenseResponse_t, *pSpc3RequestSenseResponse_t;
  261. typedef struct
  262. {
  263.   Int8U ModeDataLength;
  264.   Int8U MediumType;
  265.   struct
  266.   {
  267.     Int8U         : 4;
  268.     Int8U DPOFUA  : 1;
  269.     Int8U         : 2;
  270.     Int8U WP      : 1;
  271.   };
  272.   Int8U BlockDeskLength;
  273. } Spc3ModeSense6Response_t, * pSpc3ModeSense6Response_t;
  274. typedef struct
  275. {
  276.   Int8U LogicalBlockAddress[4];
  277.   Int8U BlockLength[4];
  278. } Sbc2ReadCapacity10Response_t, * pSbc2ReadCapacity10Response_t;
  279. typedef struct
  280. {
  281.   Int8U NumberofBlocks[4];
  282.   struct
  283.   {
  284.     Int8U DescriptorType : 2;
  285.     Int8U FormatType     : 6;
  286.   };
  287.   Int8U BlockLength[3];
  288. } Mmc3FormatCapDescriptor_t, *pMmc3FormatCapDescriptor_t;
  289. typedef struct
  290. {
  291.   Int8U Reserved0;
  292.   Int8U Reserved1;
  293.   Int8U Reserved2;
  294.   Int8U CapacityListLength;
  295.   Mmc3FormatCapDescriptor_t MaximumDescriptor;
  296. } Mmc3FormatCapResponse_t, * pMmc3FormatCapResponse_t;
  297. typedef struct
  298. {
  299.   Int8U OperationCode;
  300.   struct
  301.   {
  302.     Int8U IMMED : 1;
  303.     Int8U       : 7;
  304.   };
  305.   Int8U Reserved0;
  306.   Int8U Reserved1;
  307.   struct
  308.   {
  309.     Int8U START : 1;
  310.     Int8U LOEJ  : 1;
  311.     Int8U       : 2;
  312.     Int8U PC    : 4;
  313.   };
  314.   SpcControl_t Control;
  315. } Spc3UnitStartStop_t, *pSpc3UnitStartStop_t;
  316. #pragma pack()
  317. #endif // __SCSI_CMD_H