srb_os2.h
上传用户:weiliju62
上传日期:2007-01-06
资源大小:619k
文件大小:7k
源码类别:

SCSI/ASPI

开发平台:

MultiPlatform

  1. /* @(#)srb_os2.h 1.0 98/10/28 Copyright 1998 D. Dorau, C. Wohlgemuth */
  2. /*
  3.  * Definitions for ASPI-Router (ASPIROUT.SYS).
  4.  *
  5.  * Copyright (c) 1998 D. Dorau, C. Wohlgemuth
  6.  */
  7. /*
  8.  * This program is free software; you can redistribute it and/or modify
  9.  * it under the terms of the GNU General Public License as published by
  10.  * the Free Software Foundation; either version 2, or (at your option)
  11.  * any later version.
  12.  *
  13.  * This program is distributed in the hope that it will be useful,
  14.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  15.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  16.  * GNU General Public License for more details.
  17.  *
  18.  * You should have received a copy of the GNU General Public License
  19.  * along with this program; see the file COPYING.  If not, write to
  20.  * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
  21.  */
  22. #pragma pack(1)
  23.         /* SRB command */
  24. #define SRB_Inquiry     0x00
  25. #define SRB_Device      0x01
  26. #define SRB_Command     0x02
  27. #define SRB_Abort       0x03
  28. #define SRB_Reset       0x04
  29. #define SRB_Param       0x05
  30.         /* SRB status */
  31. #define SRB_Busy        0x00    /* SCSI request in progress */
  32. #define SRB_Done        0x01    /* SCSI request completed without error */
  33. #define SRB_Aborted     0x02    /* SCSI aborted by host */
  34. #define SRB_BadAbort    0x03    /* Unable to abort SCSI request */
  35. #define SRB_Error       0x04    /* SCSI request completed with error */
  36. #define SRB_BusyPost    0x10    /* SCSI request in progress with POST - Nokia */
  37. #define SRB_InvalidCmd  0x80    /* Invalid SCSI request */
  38. #define SRB_InvalidHA   0x81    /* Invalid Hhost adapter number */
  39. #define SRB_BadDevice   0x82    /* SCSI device not installed */
  40.         /* SRB flags */
  41. #define SRB_Post        0x01    /* Post vector valid */
  42. #define SRB_Link        0x02    /* Link vector valid */
  43. #define SRB_SG          0x04    /* Nokia: scatter/gather */
  44.                                 /* S/G: n * (4 bytes length, 4 bytes addr) */
  45.                                 /* No of s/g items not limited by HA spec. */
  46. #define SRB_NoCheck     0x00    /* determined by command, not checked  */
  47. #define SRB_Read        0x08    /* target to host, length checked  */
  48. #define SRB_Write       0x10    /* host to target, length checked  */
  49. #define SRB_NoTransfer  0x18    /* no data transfer  */
  50. #define SRB_DirMask     0x18    /* bit mask */
  51.         /* SRB host adapter status */
  52. #define SRB_NoError     0x00    /* No host adapter detected error */
  53. #define SRB_Timeout     0x11    /* Selection timeout */
  54. #define SRB_DataLength  0x12    /* Data over/underrun */
  55. #define SRB_BusFree     0x13    /* Unexpected bus free */
  56. #define SRB_BusSequence 0x14    /* Target bus sequence failure */
  57.         /* SRB target status field */
  58. #define SRB_NoStatus    0x00    /* No target status */
  59. #define SRB_CheckStatus 0x02    /* Check status (sense data valid) */
  60. #define SRB_LUN_Busy    0x08    /* Specified LUN is busy */
  61. #define SRB_Reserved    0x18    /* Reservation conflict */
  62. #define MaxCDBStatus    64      /* max size of CDB + status */
  63. typedef struct SRb {
  64.         unsigned char   cmd,                            /* 00 */
  65.                         status,                         /* 01 */
  66.                         ha_num,                         /* 02 */
  67.                         flags;                          /* 03 */
  68.         unsigned long   res_04_07;                      /* 04..07 */
  69.         union {                                         /* 08 */
  70.         /* SRB_Inquiry */
  71.                 struct {
  72.                         unsigned char   num_ha,         /* 08 */
  73.                                         ha_target,      /* 09 */
  74.                                         aspimgr_id[16], /* 0A..19 */
  75.                                         host_id[16],    /* 1A..29 */
  76.                                         unique_id[16];  /* 2A..39 */
  77.                 } inq;
  78.         /* SRB_Device */
  79.                 struct {
  80.                         unsigned char   target,         /* 08 */
  81.                                         lun,            /* 09 */
  82.                                         devtype;        /* 0A */
  83.                 } dev;
  84.         /* SRB_Command */
  85.                 struct {
  86.                         unsigned char   target,         /* 08 */
  87.                                         lun;            /* 09 */
  88.                         unsigned long   data_len;       /* 0A..0D */
  89.                         unsigned char   sense_len;      /* 0E */
  90. unsigned long data_ptr;       /* 0F..12 */
  91. unsigned long link_ptr;       /* 13..16 */
  92. // void * _Seg16     data_ptr;       /* 0F..12 */
  93.                   //      void * _Seg16     link_ptr;       /* 13..16 */
  94.                         unsigned char   cdb_len,        /* 17 */
  95.                                         ha_status,      /* 18 */
  96.                                         target_status;  /* 19 */
  97. unsigned char   _Seg16postSRB[4];
  98. //   void    (* _Seg16 post) (SRB *);  /* 1A..1D */
  99.                         unsigned char   res_1E_29[12];  /* 1E..29 */
  100.                         unsigned char   res_2A_3F[22];  /* 2A..3F */
  101.                         unsigned char   cdb_st[64];     /* 40..7F CDB+status */
  102.                         unsigned char   res_80_BF[64];  /* 80..BF */
  103.                 } cmd;
  104.         /* SRB_Abort */
  105.                 struct {
  106. unsigned char _Seg16srb[4];
  107. //     void * _Seg16     srb;            /* 08..0B */
  108.                 } abt;
  109.         /* SRB_Reset */
  110.                 struct {
  111.                         unsigned char   target,         /* 08 */
  112.                                         lun,            /* 09 */
  113.                                         res_0A_17[14],  /* 0A..17 */
  114.                                         ha_status,      /* 18 */
  115.                                         target_status;  /* 19 */
  116.                 } res;
  117.         /* SRB_Param - unused by ASPI4OS2 */
  118.                 struct {
  119.                         unsigned char   unique[16];     /* 08..17 */
  120.                 } par;
  121.         } u;
  122. } SRB;
  123. // SCSI sense codes
  124. // Note! This list may not be complete. I did this compilation for use with tape drives.
  125. #define Sense_Current   0x70;   // Current Error
  126. #define Sense_Deferred  0x71;   // Deferred Error
  127. #define Sense_Filemark  0x80;   // Filemark detected
  128. #define Sense_EOM       0x40;   // End of medium detected
  129. #define Sense_ILI       0x20;   // Incorrect length indicator
  130. // Sense Keys
  131. #define SK_NoSense      0x00;   // No Sense
  132. #define SK_RcvrdErr     0x01;   // Recovered Error
  133. #define SK_NotReady     0x02;   // Not ready
  134. #define SK_MedErr       0x03;   // Medium Error
  135. #define SK_HWErr        0x04;   // Hardware Error
  136. #define SK_IllReq       0x05;   // Illegal Request
  137. #define SK_UnitAtt      0x06;   // Unit attention
  138. #define SK_DataProt     0x07:   // Data Protect
  139. #define SK_BlankChk     0x08:   // Blank Check
  140. #define SK_VndSpec      0x09;   // Vendor Specific
  141. #define SK_CopyAbort    0x0A;   // Copy Aborted
  142. #define SK_AbtdCmd      0x0B;   // Aborted Command
  143. #define SK_Equal        0x0C;   // Equal
  144. #define SK_VolOvfl      0x0D;   // Volume Overflow
  145. #define SK_MisComp      0x0E;   // Miscompare
  146. #define SK_Reserved     0x0F;   // Reserved