home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / ddkx86v5.zip / DDKX86 / SRC / DEV / DASD / CDROM / ATAPI / ATAPIREG.H < prev    next >
Encoding:
C/C++ Source or Header  |  1995-04-14  |  9.7 KB  |  215 lines

  1. /*DDK*************************************************************************/
  2. /*                                                                           */
  3. /* COPYRIGHT    Copyright (C) 1995 IBM Corporation                           */
  4. /*                                                                           */
  5. /*    The following IBM OS/2 WARP source code is provided to you solely for  */
  6. /*    the purpose of assisting you in your development of OS/2 WARP device   */
  7. /*    drivers. You may use this code in accordance with the IBM License      */
  8. /*    Agreement provided in the IBM Device Driver Source Kit for OS/2. This  */
  9. /*    Copyright statement may not be removed.                                */
  10. /*                                                                           */
  11. /*****************************************************************************/
  12. /**************************************************************************
  13.  *
  14.  * SOURCE FILE NAME =    ATAPIreg.h
  15.  *
  16.  * DESCRIPTIVE NAME = ATAPI.ADD - Adapter Driver for ATAPI/IDE-CD ROMs
  17.  *
  18.  *
  19.  * VERSION = V1.0
  20.  *
  21.  * DATE 1/1/94
  22.  *
  23.  * DESCRIPTION : Register equates for ATAPI devices.
  24.  *
  25.  * FUNCTIONS
  26.  *
  27.  * ENTRY POINTS:
  28.  *
  29.  * DEPENDENCIES:
  30.  *
  31.  * NOTES:
  32.  *
  33.  *
  34.  * STRUCTURES
  35.  *
  36.  * EXTERNAL REFERENCES
  37.  *
  38.  * EXTERNAL FUNCTIONS
  39.  *
  40. */
  41.  
  42. /* drives */
  43.  
  44. #define UNIT0  0x00
  45. #define UNIT1  0x10
  46.  
  47. /* Status bits */
  48.  
  49. #define FX_BUSY      0x0080        /* Status port busy bit                    */
  50. #define FX_READY     0x0040        /* Status port ready bit                   */
  51. #define FX_WRTFLT    0x0020        /* Write Fault                             */
  52. #define FX_DRQ       0x0008        /* Data Request bit                        */
  53. #define FX_ERROR     0x0001        /* Error status                            */
  54.  
  55.  
  56. /* I/O ports for AT hard drives */
  57.  
  58. #define FX_PRIMARY   0x01F0        /* Default primary   ports                 */
  59. #define FX_SECONDARY 0x0170        /* Default secondary ports                 */
  60.  
  61. /* Default address for the io ports
  62. ┌──────────────────────────────────────────────────────────────────────────────┐
  63. │ SIZE   NAME       ADDRESS   Description                                      │
  64. │ ─────┼──────────┼─────────┼────────────                                      │
  65. │ WORD   DATA       0x01F0    data register                                    │
  66. │ BYTE   FEATURE    0x01F1    feature register                                 │
  67. │ BYTE   ERROR      0x01F1    error register                                   │
  68. │ BYTE   INTREASON  0x01F2    interrupt reason register                        │
  69. │ BYTE   SAMTAG     0x01F3    reserved for SAM TAG Byte                        │
  70. │ BYTE   BYTECTL    0x01F4    byte Count (Low order) register                  │
  71. │ BYTE   BYTECTH    0x01F5    byte Count (high order) register                 │
  72. │ BYTE   DRVSLCT    0x01F6    drive select register                            │
  73. │ BYTE   CMD        0x01F7    command register                                 │
  74. │ BYTE   STATUS     0x01F7    status register                                  │
  75. │ BYTE   DEVCON     0x03F6    device control register                          │
  76. └──────────────────────────────────────────────────────────────────────────────┘
  77. */
  78.  
  79. /* Array indices (IOPorts[] and IORegs[]) for I/O port address and contents   */
  80.  
  81. /* Output Regs */
  82.  
  83. #define FI_PDATA      0                   /* data register                    */
  84. #define FI_PFEATURE   1                   /* feature register                 */
  85. #define FI_PINTREASON 2                   /* interrupt reason register        */
  86. #define FI_PSECCOUNT  2                   /* ATA sector count register        */
  87. #define FI_PSAMTAG    3                   /* reserved for SAM TAG Byte        */
  88. #define FI_PBYTECTL   4                   /* byte Count (Low order) register  */
  89. #define FI_PBYTECTH   5                   /* byte Count (high order) register */
  90. #define FI_PDRVSLCT   6                   /* drive select register            */
  91. #define FI_PCMD       7                   /* command register                 */
  92. #define FI_PDEVCON    8                   /* device control register          */
  93.  
  94. /* Input Regs */
  95.  
  96. #define FI_PERROR    9                    /* error register                   */
  97. #define FI_PSTATUS  10                    /* status register                  */
  98.  
  99. /* Bit Masks to determine if a register is desired to be written/read         */
  100.  
  101. #define FM_PDATA      (1<< FI_PDATA     ) /* data register                    */
  102. #define FM_PFEATURE   (1<< FI_PFEATURE  ) /* feature register                 */
  103. #define FM_PERROR     (1<< FI_PERROR    ) /* error register                   */
  104. #define FM_PINTREASON (1<< FI_PINTREASON) /* interrupt reason register        */
  105. #define FM_PSAMTAG    (1<< FI_PSAMTAG   ) /* reserved for SAM TAG Byte        */
  106. #define FM_PBYTECTL   (1<< FI_PBYTECTL  ) /* byte Count (Low order) register  */
  107. #define FM_PBYTECTH   (1<< FI_PBYTECTH  ) /* byte Count (high order) register */
  108. #define FM_PDRVSLCT   (1<< FI_PDRVSLCT  ) /* drive select register            */
  109. #define FM_PCMD       (1<< FI_PCMD      ) /* command register                 */
  110. #define FM_PDEVCON    (1<< FI_PDEVCON   ) /* device control register          */
  111.  
  112. #define FM_PATAPI_CMD (FM_PFEATURE | FM_PBYTECTL | FM_PBYTECTH | \
  113.                        FM_PDRVSLCT | FM_PCMD)
  114.  
  115. #define FM_PATA_CMD   (FM_PDRVSLCT | FM_PCMD)
  116.  
  117. /* Default Register Values */
  118.  
  119. #define DEFAULT_ATAPI_FEATURE_REG     0x00
  120. #define DMA_ON                        0x01
  121.  
  122. #define DEFAULT_ATAPI_DRV_SLCT_REG    0xA0
  123. #define REV_17B_SET_LBA               0x40
  124.  
  125. #define DEFAULT_ATAPI_DEVCON_REG      0x08
  126. #define INTERRUPT_DISABLE             0x02
  127.  
  128. /*
  129. ┌──────────────────────────────────────────────────────────────────────────────┐
  130. │Interrupt Reason                defined value                                 │
  131. │                                                                              │
  132. │ IO    DRQ   COD                                                              │
  133. │  0     1     1           IR_PKTREADY - Device is ready to accept             │
  134. │                                        Packet Commands                       │
  135. │  1     1     1            IR_MESSAGE - Ready to send message data to host    │
  136. │  1     1     0   IR_XFER_FROM_DEVICE - Data is ready to be transfered to Host│
  137. │  0     1     0     IR_XFER_TO_DEVICE - Device is ready to receive data       │
  138. │  1     0     1           IR_COMPLETE - Status Register contains              │
  139. │                                        completion status                     │
  140. │                                                                              │
  141. └──────────────────────────────────────────────────────────────────────────────┘
  142. */
  143.  
  144. /* Interrupt Reason Register */
  145.  
  146. #define IRR_COD               0x01
  147. #define IRR_IO                0x02
  148.  
  149. /* Interrupt Reson Register to Reason code masks */
  150.  
  151. #define IRM_IO                0x04
  152. #define IRM_DRQ               0x02
  153. #define IRM_COD               0x01
  154.  
  155. /* Interrupt Reason Codes */
  156.  
  157. #define IR_PKTREADY           0x03
  158. #define IR_MESSAGE            0x07
  159. #define IR_XFER_FROM_DEVICE   0x06
  160. #define IR_XFER_TO_DEVICE     0x02
  161. #define IR_COMPLETE           0x05
  162.  
  163. #define SENSEKEY_MASK         0XFF00
  164.  
  165. /* Interrupt control */
  166.  
  167. #define IRQ_FIXED_PRIMARY  0x000E  /* Fixed interrupt IRQ #                 */
  168.  
  169. /* ATA commands */
  170. #define FX_CKPWRMODE 0x00E5        /* Check Power Mode                      */
  171. #define FX_EXDRVDIAG 0x0090        /* Execute Drive Diagnostics             */
  172. #define FX_IDLEIMM   0x00E1        /* Idle Immediate                        */
  173. #define FX_NOP       0x0000        /* NOP                                   */
  174. #define FX_SEEK      0x0070        /* Seek                                  */
  175. #define FX_SETFTURE  0x00EF        /* Set Features                          */
  176. #define FX_SLEEP     0x00E6        /* Sleep                                 */
  177. #define FX_STDBYIMM  0x00E0        /* Stand By Immediate                    */
  178.  
  179. /* ATA Atapi Commands */
  180. #define FX_SOFTRESET     0x0008    /* ATAPI Soft Reset                      */
  181. #define FX_PKTCMD        0x00A0    /* ATAPI Packet Command                  */
  182. #define FX_IDENTIFYDRIVE 0x00A1    /* ATAPI Identify Drive                  */
  183.  
  184. /* Spec Revision 1.7 B */
  185. #define REV_17B_ATAPI_AUDIO_SCAN       0xD8
  186. #define REV_17B_ATAPI_SET_CDROM_SPEED  0xDA
  187. #define REV_17B_ATAPI_READ_CD          0xD4
  188. #define REV_17B_ATAPI_READ_CD_MSF      0xD5
  189.  
  190. /* Mode Sense Page Codes  Capabilities Page */
  191. #define REV_17B_PAGE_CAPABILITIES      0x0F
  192.  
  193. /* Page code Mask for mode sense */
  194. #define REV_17B_PAGE_CODE_MASK         0x38
  195.  
  196. /* REV 1.7B Capabilities bit field definitions */
  197.  
  198. #define REV_17B_CP_MODE2_FORM1                 0x00000002
  199. #define REV_17B_CP_MODE2_FORM2                 0x00000004
  200. #define REV_17B_CP_READ_CDDA                   0x00000008
  201. #define REV_17B_CP_PHOTO_CD                    0x00000020
  202. #define REV_17B_CP_EJECT                       0x00000040
  203. #define REV_17B_CP_LOCK                        0x00000080
  204. #define REV_17B_CP_UPC                         0x00000200
  205. #define REV_17B_CP_ISRC                        0x00000400
  206. #define REV_17B_CP_INDEPENDENT_VOL_LEV         0x00000800
  207. #define REV_17B_CP_SEPARATE_CH_MUTE            0x00001000
  208. #define REV_17B_CP_TRAY_LOADER                 0x00002000
  209. #define REV_17B_CP_POPUP_LOADER                0x00004000
  210. #define REV_17B_CP_RESERVED_LOADER             0x00008000
  211. #define REV_17B_CP_PREVENT_JUMPER              0x00010000
  212. #define REV_17B_CP_LOCK_STATE                  0x00020000
  213. #define REV_17B_CP_CDDA_ACCURATE               0x00040000
  214. #define REV_17B_CP_C2_POINTERS                 0x00080000
  215.