home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / cdrom.zip / DDK / BASE / SRC / DEV / DASD / CDROM / ATAPI / atapireg.h < prev    next >
Encoding:
C/C++ Source or Header  |  1998-04-10  |  9.6 KB  |  216 lines

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