⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 atashow.c

📁 promise20265的驱动源代码
💻 C
字号:
/* ataShow.c - ATA/IDE (LOCAL and PCMCIA) disk device driver show routine */

/* Copyright 1989-1999 Wind River Systems, Inc. */
#include "copyright_wrs.h"

/*
modification history
--------------------
01i,18mar99,jdi  doc: updated w/ info about proj facility (SPR 25727).
01h,15jan99,jkf  added endian ifdef to properly display revision
                 and model strings on big endian arches.
01g,11nov96,dgp  doc: final formatting
01f,11nov96,hdn  removed NOMANUAL from ataShowInit() and ataShow().
01e,01nov96,hdn  added support for PCMCIA.
01d,25sep96,hdn  added support for ATA-2.
01c,18mar96,hdn  added ataShowInit().
01b,01mar96,hdn  cleaned up.
01a,02mar95,hdn  written based on ideDrv.c.
*/

/*
DESCRIPTION
This library contains a driver show routine for the ATA/IDE (PCMCIA and LOCAL) 
devices supported on the IBM PC.

*/

#include "vxWorks.h"
#include "taskLib.h"
#include "ioLib.h"
#include "memLib.h"
#include "stdlib.h"
#include "errnoLib.h"
#include "stdio.h"
#include "string.h"
#include "private/semLibP.h"
#include "intLib.h"
#include "iv.h"
#include "wdLib.h"
#include "sysLib.h"
#include "sys/fcntlcom.h"
#include "drv/pcmcia/pcmciaLib.h"
#include "drv/hdisk/ataDrv.h"

/* imports */

IMPORT ATA_CTRL		ataCtrl [ATA_MAX_CTRLS];
IMPORT ATA_TYPE		ataTypes [ATA_MAX_CTRLS][ATA_MAX_DRIVES];
IMPORT ATA_RESOURCE	ataResources [ATA_MAX_CTRLS];
IMPORT BOOL		ataDrvInstalled;


/* globals */


/* locals */


/* function prototypes */


/*******************************************************************************
*
* ataShowInit - initialize the ATA/IDE disk driver show routine
*
* This routine links the ATA/IDE disk driver show routine into the VxWorks
* system.  It is called automatically when this show facility is configured
* into VxWorks using either of the following methods:
* .iP
* If you use the configuration header files, define
* INCLUDE_SHOW_ROUTINES in config.h.
* .iP
* If you use the Tornado project facility, select INCLUDE_ATA_SHOW.
*
* RETURNS: N/A
*/

void ataShowInit (void)
    {
    }

/*******************************************************************************
*
* ataShow - show the ATA/IDE disk parameters
*
* This routine shows the ATA/IDE disk parameters.  Its first argument is a
* controller number, 0 or 1; the second argument is a drive number, 0 or 1.
*
* RETURNS: OK, or ERROR if the parameters are invalid.
*/

STATUS ataShow
    (
    int ctrl,
    int drive
    )
    {
    ATA_CTRL *pCtrl		= &ataCtrl[ctrl];
    ATA_DRIVE *pDrive		= &pCtrl->drive[drive];
    ATA_PARAM *pParam		= &pDrive->param;
    ATA_RESOURCE *pResource	= &ataResources[ctrl];
    ATA_TYPE *pType		= &ataTypes[ctrl][drive];
    char *pMode			= "UNKNOWN";
    int ix;

    if ((ctrl >= ATA_MAX_CTRLS) || (drive >= ATA_MAX_DRIVES) ||
        !ataDrvInstalled || !pCtrl->installed)
	return (ERROR);

    if (pResource->ctrlType == ATA_PCMCIA)
        printf ("ATA-PCMCIA\n");
    else
        printf ("ATA-LOCAL\n");

    if (pDrive->type == ATA_TYPE_ATA)
        printf ("ATA device\n");
    else if (pDrive->type == ATA_TYPE_ATAPI)
        printf ("ATAPI device\n");
    else if (pDrive->type == ATA_TYPE_NONE)
        printf ("NOT device present\n");
    else if (pDrive->type == ATA_TYPE_INIT)
        printf ("UNINITIALIZED device\n");
    else
        printf ("UNRECOGNIZED device\n");

    printf ("device state	=");
    if (pDrive->state == ATA_DEV_OK)
        printf ("OK\n");
    else if (pDrive->state == ATA_DEV_NONE)
        printf ("absent or does not respond\n");
    else if (pDrive->state == ATA_DEV_DIAG_F)
        printf ("diagnostic failed: diagCode=0x%02x\n", pDrive->diagCode);
    else if (pDrive->state == ATA_DEV_PREAD_F)
        printf ("read parameters failed\n");
    else if (pDrive->state == ATA_DEV_MED_CH)
        printf ("medium have been changed\n");
    else if (pDrive->state == ATA_DEV_INIT)
        printf ("uninitialized\n");
    else
        printf ("illegal\n");

    printf ("pAtaDev		=%p\n", pDrive->pAtaDev);

    if (pDrive->type == ATA_TYPE_ATA) {
	  printf ("  intCount     =%-8d    intStatus   =0x%-8x\n",
			  pCtrl->intCount, pCtrl->intStatus);
	  printf ("ataTypes\n");
	  printf ("  cylinders    =%-8d    heads       =%-8d\n",
			  pType->cylinders, pType->heads);
	  printf ("  sectorsTrack =%-8d    bytesSector =%-8d\n",
			  pType->sectors, pType->bytes);
	  printf ("  precomp      =0x%-8x\n", pType->precomp);

	  printf ("ataParams\n");
	  printf ("  cylinders    =%-8d    heads       =%-8d\n",
			  (USHORT)pParam->cylinders, (USHORT)pParam->heads);	
	  printf ("  sectorsTrack =%-8d    bytesSector =%-8d\n",
			  (USHORT)pParam->sectors, (USHORT)pParam->bytesSec);
	  printf ("  config       =0x%-8x  removcyl    =0x%-8x\n",
			  (USHORT)pParam->config, (USHORT)pParam->removcyl);
	  printf ("  bytesTrack   =0x%-8x  bytesGap    =0x%-8x\n",
			  (USHORT)pParam->bytesTrack, (USHORT)pParam->bytesGap);
	  printf ("  bytesSync    =0x%-8x  vendstat    =0x%-8x\n",
			  (USHORT)pParam->bytesSync, (USHORT)pParam->vendstat);
	} else {
	  printf ("  config       =0x%04x\n",(USHORT)pParam->config);
	}
    printf ("  serial       =");
    for (ix = 0; ix < 10; ix++)
	{
#if (_BYTE_ORDER == _LITTLE_ENDIAN)
        printf ("%c", pParam->serial[ix * 2 + 1]);
        printf ("%c", pParam->serial[ix * 2]);
#else
        printf ("%c", pParam->serial[ix * 2]);
        printf ("%c", pParam->serial[ix * 2 + 1]);
#endif /* (_BYTE_ORDER == _LITTLE_ENDIAN) */

	}
    printf ("\n");
    if (pDrive->type == ATA_TYPE_ATA) {
	  printf ("  type         =0x%-8x  size        =0x%-8x\n",
			  (USHORT)pParam->type, (USHORT)pParam->size);
	  printf ("  bytesEcc     =0x%-8x\n",
			  (USHORT)pParam->bytesEcc);
	}
    printf ("  rev          =");

    for (ix = 0; ix < 4; ix++)
	{
#if (_BYTE_ORDER == _LITTLE_ENDIAN)
        printf ("%c", pParam->rev[ix * 2 + 1]);
        printf ("%c", pParam->rev[ix * 2]);
#else
        printf ("%c", pParam->rev[ix * 2]);
        printf ("%c", pParam->rev[ix * 2 + 1]);
#endif /* (_BYTE_ORDER == _LITTLE_ENDIAN) */
	}

    printf ("\n");
    printf ("  model        =");

    for (ix = 0; ix < 20; ix++)
	{
#if (_BYTE_ORDER == _LITTLE_ENDIAN)
        printf ("%c", pParam->model[ix * 2 + 1]);
        printf ("%c", pParam->model[ix * 2]);
#else
        printf ("%c", pParam->model[ix * 2]);
        printf ("%c", pParam->model[ix * 2 + 1]);
#endif /* (_BYTE_ORDER == _LITTLE_ENDIAN) */
	}

    printf ("\n");
    if (pDrive->type == ATA_TYPE_ATA) {
	  printf ("  multiSecs    =0x%-8x  capabilty   =0x%-8x\n",
			  (USHORT)pParam->multiSecs, (USHORT)pParam->capabilities);
	  printf ("  pioMode      =0x%-8x  dmaMode     =0x%-8x\n",
			  (USHORT)pParam->pioMode, (USHORT)pParam->dmaMode);
	  printf ("  valid        =0x%-8x  curr-cyl    =%-8d\n",
			  (USHORT)pParam->valid, (USHORT)pParam->currentCylinders);
	  printf ("  curr-head    =%-8d    curr-sector =%-8d\n",
			  (USHORT)pParam->currentHeads, (USHORT)pParam->currentSectors);
	  printf ("  capacity0    =0x%-8x  capacity1   =0x%-8d\n",
			  (USHORT)pParam->capacity0, (USHORT)pParam->capacity1);
	  printf ("  multiSet     =0x%-8x  sectors0    =0x%-8x\n",
			  (USHORT)pParam->multiSet, (USHORT)pParam->sectors0);
	  printf ("  sectors1     =0x%-8x  singleDma   =0x%-8x\n",
			  (USHORT)pParam->sectors1, (USHORT)pParam->singleDma);
	  printf ("  multiDma     =0x%-8x  advancedPio =0x%-8x\n",
			  (USHORT)pParam->multiDma, (USHORT)pParam->advancedPio);
	  printf ("  cycleDma     =%-8d    cycleMulti  =%-8d\n",
			  (USHORT)pParam->cycletimeDma, (USHORT)pParam->cycletimeMulti);
	  printf ("  cyclePio-wo  =%-8d    cyclePio-w  =%-8d\n",
			  (USHORT)pParam->cycletimePioNoIordy, 
			  (USHORT)pParam->cycletimePioIordy);
	} else {
	  printf ("  pioMode      =0x%04x  dmaMode     =0x%04x\n",
			  (USHORT)pParam->pioMode, (USHORT)pParam->dmaMode);
	  printf ("  validity     =0x%04x\n", (USHORT)pParam->valid);
	  printf ("  singleDma    =0x%04x  multiDma    =0x%04x\n",
			  (USHORT)pParam->singleDma, (USHORT)pParam->multiDma);
	  if (pParam->valid & FIELDS_VALID) {
		printf ("  advancedPio  =0x%04x\n",
				(USHORT)pParam->advancedPio);
		printf ("  cycleDma     =%-4d  cycleMulti  =%-4d\n",
				(USHORT)pParam->cycletimeDma, 
				(USHORT)pParam->cycletimeMulti);
		printf ("  cyclePio-wo  =%-4d  cyclePio-w  =%-4d\n",
				(USHORT)pParam->cycletimePioNoIordy,
				(USHORT)pParam->cycletimePioIordy);
	  } else 
		printf("  words 64-70 not valid\n");

	  printf ("  relOverTime  =%-4d    relServTime =%-4d\n",
			  (USHORT)pParam->pktCmdRelTime, (USHORT)pParam->servCmdRelTime);
	  printf ("  majorRevNum  =0x%04x  minorVerNum =%-4d\n",
			  (USHORT)pParam->majorRevNum, (USHORT)pParam->minorVersNum);
	}
    printf ("Capability\n");
    printf ("  MULTI: %s, IORDY: %s, DMA: %s, LBA: %s\n",
	    pDrive->okMulti ? "TRUE" : "FALSE",
	    pDrive->okIordy ? "TRUE" : "FALSE",
	    pDrive->okDma ? "TRUE" : "FALSE",
	    pDrive->okLba ? "TRUE" : "FALSE");
    printf ("  multiSectors =0x%-8x  pioMode     =0x%-8x\n",
	    (USHORT)pDrive->multiSecs, (USHORT)pDrive->pioMode);
    printf ("  multiDma     =0x%-8x  ultraDma    =0x%-8x\n",
	     (USHORT)pDrive->multiDmaMode,(USHORT)pDrive->ultraDmaMode);
    printf ("Configuration\n");
    if(pDrive->okDma== FALSE)
	    switch (pDrive->rwMode)
		{
		case ATA_PIO_DEF_W:
		    pMode = "PIO_DEF0";
		    break;
		case ATA_PIO_DEF_WO:
		    pMode = "PIO_DEF1";
		    break;
		case ATA_PIO_W_0:
		    pMode = "PIO_0";
		    break;
		case ATA_PIO_W_1:
		    pMode = "PIO_1";
		    break;
		case ATA_PIO_W_2:
		    pMode = "PIO_2";
		    break;
		case ATA_PIO_W_3:
		    pMode = "PIO_3";
		    break;
		case ATA_PIO_W_4:
		    pMode = "PIO_4";
		    break;
	 } else
	     switch(pDrive->rwDma) {
	     case ATA_DMA_SINGLE_W_0:
	     case ATA_DMA_MULTI_W_0:
	     case ATA_DMA_ULTRA_W_0:
		    pMode = "DMA_0";
		    break;
	     case ATA_DMA_SINGLE_W_1:
	     case ATA_DMA_MULTI_W_1:
             case ATA_DMA_ULTRA_W_1:
		    pMode = "DMA_1";
		    break;
	     case ATA_DMA_SINGLE_W_2:
	     case ATA_DMA_MULTI_W_2:
             case ATA_DMA_ULTRA_W_2:
		    pMode = "DMA_2";
		    break;
             case ATA_DMA_ULTRA_W_3:
		    pMode = "DMA_3";
		    break;
             case ATA_DMA_ULTRA_W_4:
		    pMode = "DMA_4";
		    break;
             case ATA_DMA_ULTRA_W_5:
		    pMode = "DMA_5";
		    break;
             case ATA_DMA_ULTRA_W_6:
		    pMode = "DMA_6";
		    break;
             case ATA_DMA_ULTRA_W_7:
		    pMode = "DMA_7";
		    break;
		}
    printf ("  rwMode       =%-8s    rwBits      =%-8s\n",
	    pMode, (pDrive->rwBits == ATA_BITS_16) ? "16BITS  " : "32BITS  ");
    printf ("  rwPio        =%-8s    rwDma       =0x%x ( %-8s %-8s)\n",
	    (pDrive->rwPio == ATA_PIO_SINGLE) ? "SINGLE  " : "MULTI   ",
             pDrive->rwDma,
             pDrive->okDma ? ( (pDrive->rwDma & ATA_DMA_MULTI_W_0) ? "MULTI " : "ULTRA ") : "DMA DISABLED",
             pMode
	     );

    return (OK);

    }

void ataCtrlShow
    (
    int	ctrl
    )
    {
    ATA_CTRL *	pCtrl	= &ataCtrl[ctrl];

    printf ("ATA Controller #%d:\n", ctrl);
    printf ("ctrlType	=");
    if (pCtrl->ctrlType == ATA_PCMCIA)
        printf ("ATA-PCMCIA\n");
    else if (pCtrl->ctrlType == IDE_LOCAL)
        printf ("ATA-LOCAL\n");
    else
        printf ("UNKNOWN\n");
    printf ("installed	=%d	changed		=%d\n", 
            pCtrl->installed, pCtrl->changed);
    printf ("intLevel	=0x%x	intCount	=%d\t"
            "intStatus	=0x%x\n",
            pCtrl->intLevel, pCtrl->intCount, pCtrl->intStatus);
    printf ("Command block registers: 0x%x-0x%x\n", pCtrl->data, pCtrl->status);
    printf ("Device control register: 0x%x\n", pCtrl->dControl);
    printf ("wdgOkay\t	=%d	semTimeout	=%d	wdgTimeout	=%d\n"
            "configType	=0x%x\n", 
            pCtrl->wdgOkay, pCtrl->semTimeout, pCtrl->wdgTimeout, 
            pCtrl->configType);
    printf ("\nsynchronization semaphore:\n");
    semShow (&pCtrl->syncSem, 0);
    printf ("mutual exclusion semaphore:\n");
    semShow (&pCtrl->muteSem, 0);
    printf ("\nwatchdog:\n");
    wdShow (pCtrl->wdgId);
    } 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -