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

VxWorks

开发平台:

C/C++

  1. /* ataShow.c - ATA/IDE (LOCAL and PCMCIA) disk device driver show routine */
  2. /* Copyright 1989-2002 Wind River Systems, Inc. */
  3. #include "copyright_wrs.h"
  4. /*
  5. modification history
  6. --------------------
  7. 01k,09dec01,jkf  changed copyright to 2002
  8. 01j,09nov01,jac  SPR#67795, added support to display ATAPI CDROM device info.
  9. 01i,18mar99,jdi  doc: updated w/ info about proj facility (SPR 25727).
  10. 01h,15jan99,jkf  added endian ifdef to properly display revision
  11.                  and model strings on big endian arches.
  12. 01g,11nov96,dgp  doc: final formatting
  13. 01f,11nov96,hdn  removed NOMANUAL from ataShowInit() and ataShow().
  14. 01e,01nov96,hdn  added support for PCMCIA.
  15. 01d,25sep96,hdn  added support for ATA-2.
  16. 01c,18mar96,hdn  added ataShowInit().
  17. 01b,01mar96,hdn  cleaned up.
  18. 01a,02mar95,hdn  written based on ideDrv.c.
  19. */
  20. /*
  21. DESCRIPTION
  22. This library contains a driver show routine for the ATA/IDE (PCMCIA and LOCAL) 
  23. devices supported on the IBM PC.
  24. */
  25. #include "vxWorks.h"
  26. #include "taskLib.h"
  27. #include "ioLib.h"
  28. #include "memLib.h"
  29. #include "stdlib.h"
  30. #include "errnoLib.h"
  31. #include "stdio.h"
  32. #include "string.h"
  33. #include "private/semLibP.h"
  34. #include "intLib.h"
  35. #include "iv.h"
  36. #include "wdLib.h"
  37. #include "sysLib.h"
  38. #include "sys/fcntlcom.h"
  39. #include "drv/pcmcia/pcmciaLib.h"
  40. #include "drv/hdisk/ataDrv.h"
  41. /* imports */
  42. IMPORT ATA_CTRL ataCtrl [ATA_MAX_CTRLS];
  43. IMPORT ATA_TYPE ataTypes [ATA_MAX_CTRLS][ATA_MAX_DRIVES];
  44. IMPORT ATA_RESOURCE ataResources [ATA_MAX_CTRLS];
  45. IMPORT BOOL ataDrvInstalled;
  46. /* globals */
  47. /* locals */
  48. /* function prototypes */
  49. /*******************************************************************************
  50. *
  51. * ataShowInit - initialize the ATA/IDE disk driver show routine
  52. *
  53. * This routine links the ATA/IDE disk driver show routine into the VxWorks
  54. * system.  It is called automatically when this show facility is configured
  55. * into VxWorks using either of the following methods:
  56. * .iP
  57. * If you use the configuration header files, define
  58. * INCLUDE_SHOW_ROUTINES in config.h.
  59. * .iP
  60. * If you use the Tornado project facility, select INCLUDE_ATA_SHOW.
  61. *
  62. * RETURNS: N/A
  63. */
  64. void ataShowInit (void)
  65.     {
  66.     }
  67. /*******************************************************************************
  68. *
  69. * ataShow - show the ATA/IDE disk parameters
  70. *
  71. * This routine shows the ATA/IDE disk parameters.  Its first argument is a
  72. * controller number, 0 or 1; the second argument is a drive number, 0 or 1.
  73. *
  74. * RETURNS: OK, or ERROR if the parameters are invalid.
  75. */
  76. STATUS ataShow
  77.     (
  78.     int ctrl,
  79.     int drive
  80.     )
  81.     {
  82.     ATA_CTRL *pCtrl = &ataCtrl[ctrl];
  83.     ATA_DRIVE *pDrive = &pCtrl->drive[drive];
  84.     ATA_PARAM *pParam = &pDrive->param;
  85.     ATA_RESOURCE *pResource = &ataResources[ctrl];
  86.     ATA_TYPE *pType = &ataTypes[ctrl][drive];
  87.     char *pMode = "UNKNOWN";
  88.     int ix;
  89.     if ((ctrl >= ATA_MAX_CTRLS) || (drive >= ATA_MAX_DRIVES) ||
  90.         !ataDrvInstalled || !pCtrl->installed)
  91. return (ERROR);
  92.     if (pResource->ctrlType == ATA_PCMCIA)
  93.         printf ("ATA-PCMCIAn");
  94.     else
  95.         printf ("ATA-LOCALn");
  96.     if (pDrive->type == ATA_TYPE_ATA)
  97.         printf ("ATA devicen");
  98.     else if (pDrive->type == ATA_TYPE_ATAPI)
  99.         printf ("ATAPI devicen");
  100.     else if (pDrive->type == ATA_TYPE_NONE)
  101.         printf ("NO device presentn");
  102.     else if (pDrive->type == ATA_TYPE_INIT)
  103.         printf ("UNINITIALIZED devicen");
  104.     else
  105.         printf ("UNRECOGNIZED devicen");
  106.     printf ("device state =");
  107.     if (pDrive->state == ATA_DEV_OK)
  108.         printf ("OKn");
  109.     else if (pDrive->state == ATA_DEV_NONE)
  110.         printf ("absent or does not respondn");
  111.     else if (pDrive->state == ATA_DEV_DIAG_F)
  112.         printf ("diagnostic failed: diagCode=0x%02xn", pDrive->diagCode);
  113.     else if (pDrive->state == ATA_DEV_PREAD_F)
  114.         printf ("read parameters failedn");
  115.     else if (pDrive->state == ATA_DEV_MED_CH)
  116.         printf ("medium have been changedn");
  117.     else if (pDrive->state == ATA_DEV_INIT)
  118.         printf ("uninitializedn");
  119.     else
  120.         printf ("illegaln");
  121.     if (pDrive->type == ATA_TYPE_ATA) {
  122.         printf ("pAtaDev =%pn", pDrive->pAtaDev);
  123.         printf ("  intCount     =%-8d    intStatus   =0x%-8xn",
  124.          pCtrl->intCount, pCtrl->intStatus);
  125.         printf ("ataTypesn");
  126.         printf ("  cylinders    =%-8d    heads       =%-8dn",
  127.          pType->cylinders, pType->heads);
  128.         printf ("  sectorsTrack =%-8d    bytesSector =%-8dn",
  129.          pType->sectors, pType->bytes);
  130.         printf ("  precomp      =0x%-8xn", pType->precomp);
  131.         printf ("ataParamsn");
  132.         printf ("  cylinders    =%-8d    heads       =%-8dn",
  133.          (USHORT)pParam->cylinders, (USHORT)pParam->heads);
  134.         printf ("  sectorsTrack =%-8d    bytesSector =%-8dn",
  135.          (USHORT)pParam->sectors, (USHORT)pParam->bytesSec);
  136.         printf ("  config       =0x%-8x  removcyl    =0x%-8xn",
  137.          (USHORT)pParam->config, (USHORT)pParam->removcyl);
  138.         printf ("  bytesTrack   =0x%-8x  bytesGap    =0x%-8xn",
  139.          (USHORT)pParam->bytesTrack, (USHORT)pParam->bytesGap);
  140.         printf ("  bytesSync    =0x%-8x  vendstat    =0x%-8xn",
  141.          (USHORT)pParam->bytesSync, (USHORT)pParam->vendstat);
  142. }
  143.     else
  144.         {
  145.         printf ("  config       =0x%04xn",(USHORT)pParam->config);
  146. }
  147.     printf ("  serial       =");
  148.     for (ix = 0; ix < 10; ix++)
  149. {
  150. #if (_BYTE_ORDER == _LITTLE_ENDIAN)
  151.         printf ("%c", pParam->serial[ix * 2 + 1]);
  152.         printf ("%c", pParam->serial[ix * 2]);
  153. #else
  154.         printf ("%c", pParam->serial[ix * 2]);
  155.         printf ("%c", pParam->serial[ix * 2 + 1]);
  156. #endif /* (_BYTE_ORDER == _LITTLE_ENDIAN) */
  157. }
  158.     printf ("n");
  159.     if (pDrive->type == ATA_TYPE_ATA)
  160.         {
  161.         printf ("  type         =0x%-8x  size        =0x%-8xn",
  162.          (USHORT)pParam->type, (USHORT)pParam->size);
  163.         printf ("  bytesEcc     =0x%-8xn",
  164.          (USHORT)pParam->bytesEcc);
  165. }
  166.     printf ("  rev          =");
  167.     for (ix = 0; ix < 4; ix++)
  168. {
  169. #if (_BYTE_ORDER == _LITTLE_ENDIAN)
  170.         printf ("%c", pParam->rev[ix * 2 + 1]);
  171.         printf ("%c", pParam->rev[ix * 2]);
  172. #else
  173.         printf ("%c", pParam->rev[ix * 2]);
  174.         printf ("%c", pParam->rev[ix * 2 + 1]);
  175. #endif /* (_BYTE_ORDER == _LITTLE_ENDIAN) */
  176. }
  177.     printf ("n");
  178.     printf ("  model        =");
  179.     for (ix = 0; ix < 20; ix++)
  180. {
  181. #if (_BYTE_ORDER == _LITTLE_ENDIAN)
  182.         printf ("%c", pParam->model[ix * 2 + 1]);
  183.         printf ("%c", pParam->model[ix * 2]);
  184. #else
  185.         printf ("%c", pParam->model[ix * 2]);
  186.         printf ("%c", pParam->model[ix * 2 + 1]);
  187. #endif /* (_BYTE_ORDER == _LITTLE_ENDIAN) */
  188. }
  189.     printf ("n");
  190.     if (pDrive->type == ATA_TYPE_ATA)
  191.         {
  192.         printf ("  multiSecs    =0x%-8x  capabilty   =0x%-8xn",
  193.     (USHORT)pParam->multiSecs, (USHORT)pParam->capabilities);
  194.         printf ("  pioMode      =0x%-8x  dmaMode     =0x%-8xn",
  195.     (USHORT)pParam->pioMode, (USHORT)pParam->dmaMode);
  196.         printf ("  valid        =0x%-8x  curr-cyl    =%-8dn",
  197.     (USHORT)pParam->valid, (USHORT)pParam->currentCylinders);
  198.         printf ("  curr-head    =%-8d    curr-sector =%-8dn",
  199.     (USHORT)pParam->currentHeads, (USHORT)pParam->currentSectors);
  200.         printf ("  capacity0    =0x%-8x  capacity1   =0x%-8dn",
  201.     (USHORT)pParam->capacity0, (USHORT)pParam->capacity1);
  202.         printf ("  multiSet     =0x%-8x  sectors0    =0x%-8xn",
  203.     (USHORT)pParam->multiSet, (USHORT)pParam->sectors0);
  204.         printf ("  sectors1     =0x%-8x  singleDma   =0x%-8xn",
  205.     (USHORT)pParam->sectors1, (USHORT)pParam->singleDma);
  206.         printf ("  multiDma     =0x%-8x  advancedPio =0x%-8xn",
  207.     (USHORT)pParam->multiDma, (USHORT)pParam->advancedPio);
  208.         printf ("  cycleDma     =%-8d    cycleMulti  =%-8dn",
  209.     (USHORT)pParam->cycletimeDma, (USHORT)pParam->cycletimeMulti);
  210.         printf ("  cyclePio-wo  =%-8d    cyclePio-w  =%-8dn",
  211.     (USHORT)pParam->cycletimePioNoIordy, 
  212.     (USHORT)pParam->cycletimePioIordy);
  213. }
  214.     else
  215.         {
  216.         printf ("  pioMode      =0x%04x  dmaMode     =0x%04xn",
  217.   (USHORT)pParam->pioMode, (USHORT)pParam->dmaMode);
  218.         printf ("  validity     =0x%04xn", (USHORT)pParam->valid);
  219.         printf ("  singleDma    =0x%04x  multiDma    =0x%04xn",
  220.   (USHORT)pParam->singleDma, (USHORT)pParam->multiDma);
  221.         if (pParam->valid & FIELDS_VALID)
  222.             {
  223.             printf ("  advancedPio  =0x%04xn",
  224. (USHORT)pParam->advancedPio);
  225.             printf ("  cycleDma     =%-4d  cycleMulti  =%-4dn",
  226. (USHORT)pParam->cycletimeDma, 
  227. (USHORT)pParam->cycletimeMulti);
  228.             printf ("  cyclePio-wo  =%-4d  cyclePio-w  =%-4dn",
  229. (USHORT)pParam->cycletimePioNoIordy,
  230. (USHORT)pParam->cycletimePioIordy);
  231.             }
  232.         else 
  233.             printf("  words 64-70 not validn");
  234.         printf ("  relOverTime  =%-4d    relServTime =%-4dn",
  235.   (USHORT)pParam->pktCmdRelTime, (USHORT)pParam->servCmdRelTime);
  236.         printf ("  majorRevNum  =0x%04x  minorVerNum =%-4dn",
  237.   (USHORT)pParam->majorRevNum, (USHORT)pParam->minorVersNum);
  238. }
  239.     printf ("Capabilityn");
  240.     printf ("  MULTI: %s, IORDY: %s, DMA: %s, LBA: %sn",
  241.     pDrive->okMulti ? "TRUE" : "FALSE",
  242.     pDrive->okIordy ? "TRUE" : "FALSE",
  243.     pDrive->okDma ? "TRUE" : "FALSE",
  244.     pDrive->okLba ? "TRUE" : "FALSE");
  245.     printf ("  multiSectors =0x%-8x  pioMode     =0x%-8xn",
  246.     (USHORT)pDrive->multiSecs, (USHORT)pDrive->pioMode);
  247.     printf ("  singleDma    =0x%-8x  multiDma    =0x%-8xn",
  248.     (USHORT)pDrive->singleDmaMode, (USHORT)pDrive->multiDmaMode);
  249.     printf ("Configurationn");
  250.     switch (pDrive->rwMode)
  251. {
  252. case ATA_PIO_DEF_W:
  253.     pMode = "PIO_DEF0";
  254.     break;
  255. case ATA_PIO_DEF_WO:
  256.     pMode = "PIO_DEF1";
  257.     break;
  258. case ATA_PIO_W_0:
  259.     pMode = "PIO_0";
  260.     break;
  261. case ATA_PIO_W_1:
  262.     pMode = "PIO_1";
  263.     break;
  264. case ATA_PIO_W_2:
  265.     pMode = "PIO_2";
  266.     break;
  267. case ATA_PIO_W_3:
  268.     pMode = "PIO_3";
  269.     break;
  270. case ATA_PIO_W_4:
  271.     pMode = "PIO_4";
  272.     break;
  273. case ATA_DMA_SINGLE_0:
  274. case ATA_DMA_MULTI_0:
  275.       pMode = "DMA_0";
  276.     break;
  277. case ATA_DMA_SINGLE_1:
  278. case ATA_DMA_MULTI_1:
  279.     pMode = "DMA_1";
  280.     break;
  281. case ATA_DMA_SINGLE_2:
  282. case ATA_DMA_MULTI_2:
  283.     pMode = "DMA_2";
  284.     break;
  285. }
  286.     printf ("  rwMode       =%-8s    rwBits      =%-8sn",
  287.     pMode, (pDrive->rwBits == ATA_BITS_16) ? "16BITS  " : "32BITS  ");
  288.     printf ("  rwPio        =%-8s    rwDma       =%-8sn",
  289.     (pDrive->rwPio == ATA_PIO_SINGLE) ? "SINGLE  " : "MULTI   ",
  290.     (pDrive->rwDma == ATA_DMA_SINGLE) ? "SINGLE  " : "MULTI   ");
  291.     return (OK);
  292.     }