ataDrv.h
上传用户:luoyougen
上传日期:2008-05-12
资源大小:23136k
文件大小:20k
源码类别:

VxWorks

开发平台:

C/C++

  1. /* ataDrv.h - ATA/IDE (LOCAL and PCMCIA) disk controller header */
  2. /* Copyright 1984-2002 Wind River Systems, Inc. */
  3. /*
  4. modification history
  5. --------------------
  6. 01h,29apr02,pmr  SPR 76487: changed ataDrv() arg configType from BOOL to int.
  7. 01g,09nov01,jac  SPR#67795, added definitions for ATAPI CDROM extensions.
  8. 01f,30oct97,db   added macro ATA_SWAP for big endian targets. changed some 
  9.                  elements in ATA_CTRL from short to UINT32.
  10. 01e,10dec97,ms   added usrAtaConfig prototype and ataResources import
  11. 01e,01nov96,hdn  added support for PCMCIA
  12. 01d,25sep96,hdn  added support for ATA-2
  13. 01c,18mar96,hdn  added ataShowInit().
  14. 01b,01mar96,hdn  cleaned up.
  15. 01a,02mar95,hdn  written based on ideDrv.h.
  16. */
  17. #ifndef __INCpcataDrvh
  18. #define __INCpcataDrvh
  19. #ifdef __cplusplus
  20. extern "C" {
  21. #endif
  22. #ifndef _ASMLANGUAGE
  23. #include "dosFsLib.h"
  24. #include "blkIo.h"
  25. #include "wdLib.h"
  26. #include "private/semLibP.h"
  27. #include "drv/pcmcia/pccardLib.h"
  28. IMPORT ATA_RESOURCE ataResources[];
  29. /* define swap macro for little/big endian machines */
  30. #if _BYTE_ORDER == _BIG_ENDIAN
  31. #   define ATA_SWAP(x) LONGSWAP(x)
  32. #else
  33. #   define ATA_SWAP(x) (x)
  34. #endif
  35. #define IDE_LOCAL 0  /* ctrl type: LOCAL(IDE) */
  36. #define ATA_PCMCIA 1 /* ctrl type: PCMCIA */
  37. #define ATA_MAX_CTRLS 2 /* max number of ATA controller */
  38. #define ATA_MAX_DRIVES 2 /* max number of ATA drives */
  39. typedef struct ataParams 
  40.     {
  41.     short config; /* general configuration */
  42.     short cylinders; /* number of cylinders */
  43.     short removcyl; /* number of removable cylinders */
  44.     short heads; /* number of heads */
  45.     short bytesTrack; /* number of unformatted bytes/track */
  46.     short bytesSec; /* number of unformatted bytes/sector */
  47.     short sectors; /* number of sectors/track */
  48.     short bytesGap; /* minimum bytes in intersector gap */
  49.     short bytesSync; /* minimum bytes in sync field */
  50.     short vendstat; /* number of words of vendor status */
  51.     char  serial[20]; /* controller serial number */
  52.     short type; /* controller type */
  53.     short size; /* sector buffer size, in sectors */
  54.     short bytesEcc; /* ecc bytes appended */
  55.     char  rev[8]; /* firmware revision */
  56.     char  model[40]; /* model name */
  57.     short multiSecs; /* RW multiple support. bits 7-0 ia max secs */
  58.     short reserved48; /* reserved */
  59.     short capabilities; /* capabilities */
  60.     short reserved50; /* reserved */
  61.     short pioMode; /* PIO data transfer cycle timing mode */
  62.     short dmaMode; /* single word DMA data transfer cycle timing */
  63.     short valid; /* field validity */
  64.     short currentCylinders; /* number of current logical cylinders */
  65.     short currentHeads; /* number of current logical heads */
  66.     short currentSectors; /* number of current logical sectors / track */
  67.     short capacity0; /* current capacity in sectors */
  68.     short capacity1; /* current capacity in sectors */
  69.     short multiSet; /* multiple sector setting */
  70.     short sectors0; /* total number of user addressable sectors */
  71.     short sectors1; /* total number of user addressable sectors */
  72.     short singleDma; /* single word DMA transfer */
  73.     short multiDma; /* multi word DMA transfer */
  74.     short advancedPio; /* flow control PIO transfer modes supported */
  75.     short cycletimeDma; /* minimum multiword DMA transfer cycle time */
  76.     short cycletimeMulti; /* recommended multiword DMA cycle time */
  77.     short cycletimePioNoIordy; /* min PIO transfer cycle time wo flow ctl */
  78.     short cycletimePioIordy; /* min PIO transfer cycle time w IORDY */
  79.     short reserved69; /* reserved */
  80.     short reserved70; /* reserved */
  81.     /* ATAPI */
  82.     short pktCmdRelTime; /* [71]Typical Time for Release after Packet */
  83.     short servCmdRelTime; /* [72]Typical Time for Release after SERVICE */
  84.     short majorRevNum; /* [73] Major Revision Number (0|FFFF if no) */
  85.     short minorVersNum; /* [74] Minor  Version Number (0|FFFF if no) */
  86.     short reserved75[53]; /* reserved */
  87.     short vendor[32]; /* vendor specific */
  88.     short reserved160[96]; /* reserved */
  89.     } ATA_PARAM;
  90. typedef enum /* ATAPI */
  91.     {
  92.     NON_DATA, /* non data command */
  93.     OUT_DATA,
  94.     IN_DATA
  95.     } t_data_dir;
  96. /* Device types */
  97. #define ATA_TYPE_NONE 0x00 /* device is faulty or not present */
  98. #define ATA_TYPE_ATA 0x01 /* ATA device */
  99. #define ATA_TYPE_ATAPI 0x02 /* ATAPI device */
  100. #define ATA_TYPE_INIT 255 /* device must be identified */
  101. /* Device  states */
  102. #define ATA_DEV_OK 0 /* device is OK */
  103. #define ATA_DEV_NONE 1 /* device absent or does not respond */
  104. #define ATA_DEV_DIAG_F 2 /* device diagnostic failed */
  105. #define ATA_DEV_PREAD_F 3 /* read device parameters failed */
  106. #define ATA_DEV_MED_CH 4 /* medium have been changed */
  107. #define ATA_DEV_NO_BLKDEV 5 /* No block device available */
  108. #define ATA_DEV_INIT 255 /* uninitialized device */
  109. typedef struct ataDev
  110.     {
  111.     BLK_DEV     blkDev; /* must be here */
  112.     int         ctrl; /* ctrl no.  0 - 1 */
  113.     int         drive; /* drive no. 0 - 1 */
  114.     int         blkOffset; /* sector offset */
  115.     int nBlocks; /* number of sectors */
  116.     char * pBuf; /* Current position in an user buffer */
  117.     char * pBufEnd; /* End of user buffer */
  118.     t_data_dir direction; /* Transfer direction */
  119.     int transCount; /* Number of transfer cycles */
  120.     int errNum; /* Error description message number */
  121.     /* ATAPI Registers contents */
  122.     uint8_t intReason; /* Interrupt Reason Register */
  123.     uint8_t status; /* Status Register */
  124.     uint16_t transSize; /* Byte Count Register */
  125.     } ATA_DEV;
  126. typedef struct ataDrive
  127.     {
  128.     ATA_PARAM param; /* geometry parameter */
  129.     short okMulti; /* MULTI: TRUE if supported */
  130.     short okIordy; /* IORDY: TRUE if supported */
  131.     short okDma; /* DMA:   TRUE if supported */
  132.     short okLba; /* LBA:   TRUE if supported */
  133.     short multiSecs; /* supported max sectors for multiple RW */
  134.     short pioMode; /* supported max PIO mode */
  135.     short singleDmaMode; /* supported max single word DMA mode */
  136.     short multiDmaMode; /* supported max multi word DMA mode */
  137.     short rwMode; /* RW mode: PIO[0,1,2,3,4] or DMA[0,1,2] */
  138.     short rwBits; /* RW bits: 16 or 32 */
  139.     short rwPio; /* RW PIO unit: single or multi sector */
  140.     short rwDma; /* RW DMA unit: single or multi word */
  141.     uint8_t state; /* device state */
  142.     uint8_t diagCode; /* diagnostic code */
  143.     uint8_t type; /* device type */
  144.     STATUS      (*Reset) /* pointer to reset function */
  145.         (
  146.         int ctrl,
  147.         int dev
  148.         );
  149.     ATA_DEV     *pAtaDev; /* pointer to ATA block device structure */
  150.     } ATA_DRIVE;
  151. typedef struct ataCtrl
  152.     {
  153.     ATA_DRIVE drive[ATA_MAX_DRIVES]; /* drives per controller */
  154.     SEMAPHORE syncSem; /* binary sem for syncronization */
  155.     SEMAPHORE muteSem; /* mutex  sem for mutual-exclusion */
  156.     WDOG_ID wdgId; /* watch dog */
  157.     BOOL wdgOkay; /* watch dog status */
  158.     int semTimeout; /* timeout seconds for sync semaphore */
  159.     int wdgTimeout; /* timeout seconds for watch dog */
  160.     int ctrlType; /* type of controller */
  161.     BOOL installed; /* TRUE if a driver is installed */
  162.     BOOL changed; /* TRUE if a card is installed */
  163.     int intLevel; /* interrupt level */
  164.     int intCount; /* interrupt count */
  165.     int intStatus; /* interrupt status */
  166.     int drives; /* number of drives in the controller */
  167.     UINT32 data; /* (RW) data register (16 bits) */
  168.     UINT32 error; /* (R)  error register */
  169.     UINT32 feature; /* (W)  feature or write-precompensation */
  170.     UINT32 seccnt; /* (RW) sector count */
  171.     UINT32 sector; /* (RW) first sector number */
  172.     UINT32 cylLo; /* (RW) cylinder low byte */
  173.     UINT32 cylHi; /* (RW) cylinder high byte */
  174.     UINT32 sdh; /* (RW) sector size/drive/head */
  175.     UINT32 command; /* (W)  command register */
  176.     UINT32 status; /* (R)  immediate status */
  177.     UINT32 aStatus; /* (R)  alternate status */
  178.     UINT32 dControl; /* (W)  disk controller control */
  179.     UINT32 dAddress; /* (R)  disk controller address */
  180.     int configType; /* or'd configuration flags     */
  181.     } ATA_CTRL;
  182. typedef struct ataType
  183.     {
  184.     int cylinders; /* number of cylinders */
  185.     int heads; /* number of heads */
  186.     int sectors; /* number of sectors per track */
  187.     int bytes; /* number of bytes per sector */
  188.     int precomp; /* precompensation cylinder */
  189.     } ATA_TYPE;
  190. typedef struct ataRaw
  191.     { /* this is for ATARAWACCESS ioctl */
  192.     UINT cylinder; /* cylinder (0 -> (cylindres-1)) */
  193.     UINT head; /* head (0 -> (heads-1)) */
  194.     UINT sector; /* sector (1 -> sectorsTrack) */
  195.     char *pBuf; /* pointer to buffer (bytesSector * nSecs) */
  196.     UINT nSecs; /* number of sectors (1 -> sectorsTrack) */
  197.     UINT direction; /* read=0, write=1 */
  198.     } ATA_RAW;
  199. #define ATA_SEM_TIMEOUT_DEF 5       /* default timeout for ATA sync sem */
  200. #define ATA_WDG_TIMEOUT_DEF 5       /* default timeout for ATA watch dog */
  201. /* ATA registers */
  202. #define ATA_DATA(base0) (base0 + 0) /* (RW) data register (16 bits) */
  203. #define ATA_ERROR(base0) (base0 + 1) /* (R)  error register     */
  204. #define ATA_FEATURE(base0) (base0 + 1) /* (W)  feature/precompensation */
  205. #define ATA_SECCNT(base0) (base0 + 2) /* (RW) sector count     */
  206. #define ATA_SECTOR(base0) (base0 + 3) /* (RW) first sector number     */
  207. #define ATA_CYL_LO(base0) (base0 + 4) /* (RW) cylinder low byte     */
  208. #define ATA_CYL_HI(base0) (base0 + 5) /* (RW) cylinder high byte     */
  209. #define ATA_SDH(base0) (base0 + 6) /* (RW) sector size/drive/head  */
  210. #define ATA_COMMAND(base0) (base0 + 7) /* (W)  command register     */
  211. #define ATA_STATUS(base0)  (base0 + 7) /* (R)  immediate status     */
  212. #define ATA_A_STATUS(base1) (base1 + 0) /* (R)  alternate status     */
  213. #define ATA_D_CONTROL(base1) (base1 + 0) /* (W)  disk controller control */
  214. #define ATA_D_ADDRESS(base1) (base1 + 1) /* (R)  disk controller address */
  215. /* diagnostic code */
  216. #define ATA_DIAG_OK 0x01
  217. /* control register */
  218. #define ATA_CTL_4BIT   0x8 /* use 4 head bits (wd1003) */
  219. #define ATA_CTL_RST  0x4 /* reset controller */
  220. #define ATA_CTL_IDS  0x2 /* disable interrupts */
  221. /* status register */
  222. #define ATA_STAT_ACCESS (ATA_STAT_BUSY | ATA_STAT_DRQ)
  223. /* device accessible */
  224. #define ATA_STAT_BUSY 0x80 /* controller busy */
  225. #define ATA_STAT_READY 0x40 /* selected drive ready */
  226. #define ATA_STAT_WRTFLT 0x20 /* write fault */
  227. #define ATA_STAT_SEEKCMPLT 0x10 /* seek complete */
  228. #define ATA_STAT_DRQ 0x08 /* data request */
  229. #define ATA_STAT_ECCCOR 0x04 /* ECC correction made in data */
  230. #define ATA_STAT_INDEX 0x02 /* index pulse from selected drive */
  231. #define ATA_STAT_ERR 0x01 /* error detect */
  232. /* size/drive/head register: addressing mode CHS or LBA */
  233. #define ATA_SDH_IBM 0xa0 /* chs, 512 bytes sector, ecc */
  234. #define ATA_SDH_LBA 0xe0 /* lba, 512 bytes sector, ecc */
  235. /* commands */
  236. #define ATA_CMD_RECALIB 0x10 /* recalibrate */
  237. #define ATA_CMD_SEEK 0x70 /* seek */
  238. #define ATA_CMD_READ 0x20 /* read sectors with retries */
  239. #define ATA_CMD_WRITE 0x30 /* write sectors with retries */
  240. #define ATA_CMD_FORMAT 0x50 /* format track */
  241. #define ATA_CMD_DIAGNOSE 0x90 /* execute controller diagnostic */
  242. #define ATA_CMD_INITP 0x91 /* initialize drive parameters */
  243. #define ATA_CMD_READP 0xEC /* identify */
  244. #define ATA_CMD_SET_FEATURE  0xEF /* set features */
  245. #define ATA_CMD_SET_MULTI 0xC6 /* set multi */
  246. #define ATA_CMD_READ_MULTI 0xC4 /* read multi */
  247. #define ATA_CMD_WRITE_MULTI 0xC5 /* write multi */
  248. /* ATAPI commands */
  249. #define ATA_PI_CMD_SRST 0x08 /* ATAPI Soft Reset */
  250. #define ATA_PI_CMD_PKTCMD 0xA0 /* ATAPI Pakcet Command */
  251. #define ATA_PI_CMD_IDENTD 0xA1 /* ATAPI Identify Device */
  252. #define ATA_PI_CMD_SERVICE 0xA2 /* Service */
  253. /* CDROM commands */
  254. #define CDROM_CMD_TEST_UNIT_READY  0x00     /* CDROM Test Unit Ready      */
  255. #define CDROM_CMD_REQUEST_SENSE    0x03     /* CDROM Request Sense        */
  256. #define CDROM_CMD_INQUIRY          0x12     /* CDROM Inquiry              */
  257. #define CDROM_CMD_READ_CDROM_CAP   0x25     /* CDROM Read CD-ROM Capacity */
  258. #define CDROM_CMD_READ_12          0xA8     /* CDROM Read (12)            */
  259. /* sub command of ATA_CMD_SET_FEATURE */
  260. #define ATA_SUB_ENABLE_8BIT 0x01 /* enable 8bit data transfer */
  261. #define ATA_SUB_ENABLE_WCACHE 0x02 /* enable write cache */
  262. #define ATA_SUB_SET_RWMODE 0x03 /* set transfer mode */
  263. #define ATA_SUB_DISABLE_RETRY 0x33 /* disable retry */
  264. #define ATA_SUB_SET_LENGTH 0x44 /* length of vendor specific bytes */
  265. #define ATA_SUB_SET_CACHE 0x54 /* set cache segments */
  266. #define ATA_SUB_DISABLE_LOOK 0x55 /* disable read look-ahead feature */
  267. #define ATA_SUB_DISABLE_REVE 0x66 /* disable reverting to power on def */
  268. #define ATA_SUB_DISABLE_ECC 0x77 /* disable ECC */
  269. #define ATA_SUB_DISABLE_8BIT 0x81 /* disable 8bit data transfer */
  270. #define ATA_SUB_DISABLE_WCACHE 0x82 /* disable write cache */
  271. #define ATA_SUB_ENABLE_ECC 0x88 /* enable ECC */
  272. #define ATA_SUB_ENABLE_RETRY 0x99 /* enable retries */
  273. #define ATA_SUB_ENABLE_LOOK 0xaa /* enable read look-ahead feature */
  274. #define ATA_SUB_SET_PREFETCH 0xab /* set maximum prefetch */
  275. #define ATA_SUB_SET_4BYTES 0xbb /* 4 bytes of vendor specific bytes */
  276. #define ATA_SUB_ENABLE_REVE 0xcc /* enable reverting to power on def */
  277. /* transfer modes of ATA_SUB_SET_RWMODE */
  278. #define ATA_PIO_DEF_W 0x00 /* PIO default trans. mode */
  279. #define ATA_PIO_DEF_WO 0x01 /* PIO default trans. mode, no IORDY */
  280. #define ATA_PIO_W_0 0x08 /* PIO flow control trans. mode 0 */
  281. #define ATA_PIO_W_1 0x09 /* PIO flow control trans. mode 1 */
  282. #define ATA_PIO_W_2 0x0a /* PIO flow control trans. mode 2 */
  283. #define ATA_PIO_W_3 0x0b /* PIO flow control trans. mode 3 */
  284. #define ATA_PIO_W_4 0x0c /* PIO flow control trans. mode 4 */
  285. #define ATA_DMA_SINGLE_0 0x10 /* singleword DMA mode 0 */
  286. #define ATA_DMA_SINGLE_1 0x11 /* singleword DMA mode 1 */
  287. #define ATA_DMA_SINGLE_2 0x12 /* singleword DMA mode 2 */
  288. #define ATA_DMA_MULTI_0 0x20 /* multiword DMA mode 0 */
  289. #define ATA_DMA_MULTI_1 0x21 /* multiword DMA mode 1 */
  290. #define ATA_DMA_MULTI_2 0x22 /* multiword DMA mode 2 */
  291. #define ATA_MAX_RW_SECTORS 0x100 /* max sectors per transfer */
  292. /* configuration flags: transfer mode, bits, unit, geometry */
  293. #define ATA_PIO_DEF_0 ATA_PIO_DEF_W /* PIO default mode */
  294. #define ATA_PIO_DEF_1 ATA_PIO_DEF_WO /* PIO default mode, no IORDY */
  295. #define ATA_PIO_0 ATA_PIO_W_0 /* PIO mode 0 */
  296. #define ATA_PIO_1 ATA_PIO_W_1 /* PIO mode 1 */
  297. #define ATA_PIO_2 ATA_PIO_W_2 /* PIO mode 2 */
  298. #define ATA_PIO_3 ATA_PIO_W_3 /* PIO mode 3 */
  299. #define ATA_PIO_4 ATA_PIO_W_4 /* PIO mode 4 */
  300. #define ATA_PIO_AUTO 0x000d /* PIO max supported mode */
  301. #define ATA_DMA_0 0x0002 /* DMA mode 0 */
  302. #define ATA_DMA_1 0x0003 /* DMA mode 1 */
  303. #define ATA_DMA_2 0x0004 /* DMA mode 2 */
  304. #define ATA_DMA_AUTO 0x0005 /* DMA max supported mode */
  305. #define ATA_MODE_MASK 0x000F /* transfer mode mask */
  306. #define ATA_BITS_16 0x0040 /* RW bits size, 16 bits */
  307. #define ATA_BITS_32 0x0080 /* RW bits size, 32 bits */
  308. #define ATA_BITS_MASK 0x00c0 /* RW bits size mask */
  309. #define ATA_PIO_SINGLE 0x0010 /* RW PIO single sector */
  310. #define ATA_PIO_MULTI 0x0020 /* RW PIO multi sector */
  311. #define ATA_PIO_MASK 0x0030 /* RW PIO mask */
  312. #define ATA_DMA_SINGLE 0x0400 /* RW DMA single word */
  313. #define ATA_DMA_MULTI 0x0800 /* RW DMA multi word */
  314. #define ATA_DMA_MASK 0x0c00 /* RW DMA mask */
  315. #define ATA_GEO_FORCE 0x0100 /* set geometry in the table */
  316. #define ATA_GEO_PHYSICAL 0x0200 /* set physical geometry */
  317. #define ATA_GEO_CURRENT 0x0300 /* set current geometry */
  318. #define ATA_GEO_MASK 0x0300 /* geometry mask */
  319. /****************************** ATAPI Devices ******************************/
  320. /* config */
  321. #define CONFIG_PROT_TYPE 0xc000 /* Protocol Type */
  322. #define CONFIG_PROT_TYPE_ATAPI 0x8000 /* ATAPI */
  323. #define CONFIG_DEV_TYPE 0x1f00 /* Device Type */
  324. #define CONFIG_DEV_TYPE_CD_ROM 0x0500
  325. #define CONFIG_REMOVABLE 0x0080 /* Removable */
  326. #define CONFIG_PKT_TYPE 0x0060 /* CMD DRQ Type */
  327. #define CONFIG_PKT_TYPE_MICRO 0x0000 /* Microprocessor DRQ */
  328. #define CONFIG_PKT_TYPE_INTER 0x0020 /* Interrupt DRQ */
  329. #define CONFIG_PKT_TYPE_ACCEL 0x0040 /* Accelerated DRQ */
  330. #define CONFIG_PKT_SIZE 0x0003 /* Command Packet Size */
  331. #define CONFIG_PKT_SIZE_12 0x0000 /* 12 bytes */
  332. /* capabilities */
  333. #define CAPABIL_DMA 0x0100 /* DMA Supported */
  334. #define CAPABIL_LBA 0x0200 /* LBA Supported */
  335. #define CAPABIL_IORDY_CTRL 0x0400 /* IORDY can be disabled */
  336. #define CAPABIL_IORDY 0x0800 /* IORDY Supported */
  337. #define CAPABIL_OVERLAP 0x2000 /* Overlap Operation Supported */
  338. /* valid */
  339. #define FIELDS_VALID 0x0002
  340. /* singleDma */
  341.  
  342. #define SINGLEDMA_MODE 0xff00 /* 15-8: mode active */
  343. #define SINGLEDMA_SUPPORT 0x00ff /* 7-0: modes supported */
  344. /* multiDma */
  345.  
  346. #define MULTIDMA_MODE 0xff00 /* 15-8: mode active */
  347. #define MULTIDMA_SUPPORT 0x00ff /* 7-0: modes supported */
  348. /* advPio */
  349. #define ADVPIO_MODE3 0x0001 /* The Device supports PIO Mode 3 */
  350. /* ATAPI registers */
  351. #define ATAPI_DATA pCtrl->data /* ATA_DATA (RW) data reg. (16 bits) */
  352. #define ATAPI_ERROR pCtrl->error /* ATA_ERROR (R) error reg. */
  353. #define ATAPI_FEATURE pCtrl->feature /* ATA_FEATURE (W) feature reg. */
  354. #define ATAPI_INTREASON pCtrl->seccnt /* ATA_SECCNT (R) interrupt reason */
  355. #define ATAPI_BCOUNT_LO pCtrl->cylLo /* ATA_CYL_LO (RW) byte count (low) */
  356. #define ATAPI_BCOUNT_HI pCtrl->cylHi /* ATA_CYL_HI (RW) byte count (high) */
  357. #define ATAPI_D_SELECT pCtrl->sdh /* ATA_SDH (RW) drive select reg. */
  358. #define ATAPI_STATUS pCtrl->status  /* ATA_STATUS (R) status reg. */
  359. #define ATAPI_COMMAND pCtrl->command /* ATA_COMMAND (W) command reg. */
  360. #define ATAPI_D_CONTROL pCtrl->dControl /* ATA_D_CONTROL (W) device control */
  361. /* Error Register */
  362. #define ERR_SENSE_KEY 0xf0 /* Sense Key mask */
  363. #define SENSE_NO_SENSE 0x00 /* no sense sense key */
  364. #define SENSE_RECOVERED_ERROR 0x10 /* recovered error sense key */
  365. #define SENSE_NOT_READY 0x20 /* not ready sense key */
  366. #define SENSE_MEDIUM_ERROR 0x30 /* medium error sense key */
  367. #define SENSE_HARDWARE_ERROR 0x40 /* hardware error sense key */
  368. #define SENSE_ILLEGAL_REQUEST 0x50 /* illegal request sense key */
  369. #define SENSE_UNIT_ATTENTION 0x60 /* unit attention sense key */
  370. #define SENSE_DATA_PROTECT 0x70 /* data protect sense key */
  371. #define SENSE_ABBORTED_COMMAND 0xb0 /* aborted command sense key */
  372. #define SENSE_MISCOMPARE 0xe0 /* miscompare sense key */
  373. #define ERR_MCR 0x08 /* Media Change Requested */
  374. #define ERR_ABRT 0x04 /* Aborted command */
  375. #define ERR_EOM  0x02 /* End Of Media */
  376. #define ERR_ILI  0x01 /* Illegal Length Indication */
  377. /* Feature Register */
  378. #define FEAT_OVERLAP 0x02 /* command may be overlapped */
  379. #define FEAT_DMA 0x01 /* data will be transferred via DMA */
  380. /* Interrupt Reason Register */
  381. #define INTR_RELEASE 0x04 /* Bus released before completing the command */
  382. #define INTR_IO 0x02 /* 1 - In to the Host; 0 - Out to the device */
  383. #define INTR_COD 0x01 /* 1 - Command; 0 - user Data */
  384. /* Drive Select Register */
  385. #define DSEL_FILLER 0xa0 /* to fill static fields */
  386. #define DSEL_DRV 0x10 /* Device 0 (DRV=0) or 1 (DRV=1) */
  387. /* Status Register */
  388. #define STAT_BUSY 0x80 /* controller busy */
  389. #define STAT_READY 0x40 /* selected drive ready */
  390. #define STAT_DMA_READY 0x20 /* ready to a DMA data transfer */
  391. #define STAT_WRTFLT 0x20 /* write fault */
  392. #define STAT_SERVICE 0x10 /* service or interrupt request */
  393. #define STAT_SEEKCMPLT 0x10 /* seek complete */
  394. #define STAT_DRQ 0x08 /* data request */
  395. #define STAT_ECCCOR 0x04 /* ECC correction made in data */
  396. #define STAT_ERR 0x01 /* error detect */
  397. /* Device Control Register */
  398. #define CTL_FILLER 0x8 /* bit 3 must be always set */
  399. #define CTL_RST 0x4 /* reset controller */
  400. #define CTL_IDS 0x2 /* disable interrupts */
  401. /**********************************************************************/
  402. /* function declarations */
  403. #if defined(__STDC__) || defined(__cplusplus)
  404. extern STATUS ataDrv (int ctrl, int drives, int vector, int level,
  405.  int configType, int semTimeout,
  406.  int wdgTimeout);
  407. extern BLK_DEV *ataDevCreate (int ctrl, int drive, int nBlks, int offset);
  408. extern STATUS ataRawio (int ctrl, int drive, ATA_RAW *pAtaRaw);
  409. extern void ataShowInit (void);
  410. extern STATUS ataShow (int ctrl, int drive);
  411. extern int usrAtaPartition (int ctrl, int drive, DOS_PART_TBL *pPart);
  412. extern STATUS   usrAtaConfig (int ctrl, int drive, char *fileName);
  413. extern void     usrAtaInit (void);
  414. #else
  415. extern STATUS ataDrv ();
  416. extern BLK_DEV *ataDevCreate ();
  417. extern STATUS ataRawio ();
  418. extern void ataShowInit ();
  419. extern STATUS ataShow ();
  420. extern int usrAtaPartition ();
  421. extern STATUS   usrAtaConfig ();
  422. extern void     usrAtaInit ();
  423. #endif  /* __STDC__ */
  424. #endif  /* _ASMLANGUAGE */
  425. #ifdef __cplusplus
  426. }
  427. #endif
  428. #endif /* __INCpcataDrvh */