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

📄 statapi.c

📁 STi5518机顶盒ATAPI源代码!绝对超值!
💻 C
📖 第 1 页 / 共 5 页
字号:
        ata_bus_Release(ATAHandle);    }    else#endif  /* defined(ST_5514) */    {        return  ST_ERROR_FEATURE_NOT_SUPPORTED;    }            Dev->IsModeSet= TRUE;    return ST_NO_ERROR;}/*************************************************************************Name         : STATAPI_SetDmaTiming()Description  : Set up the given DMA timing values.Parameters   :     STATAPI_Handle_t     Handle    STATAPI_DmaTiming_t  Timing values to set                   Return Value :    ST_NO_ERROR               No error.  ST_ERROR_iNVALID_HANDLE   Handle given is invalid  ST_ERROR_BAD_PARAMETER    Invalid capability parameter.  ************************************************************************/ST_ErrorCode_t STATAPI_SetDmaTiming(STATAPI_Handle_t Handle,                                    STATAPI_DmaTiming_t *TimingParams){    ata_DevCtrlBlock_t  *Dev;    BOOL error = FALSE;    Dev=(ata_DevCtrlBlock_t*) Handle;            /*  Check Parameters  */    if ((Dev != &ATAHandle->Handles[0]) && (Dev != &ATAHandle->Handles[1]))     {        return ST_ERROR_INVALID_HANDLE;    }    if (Dev->Opened == FALSE)    {        return ST_ERROR_INVALID_HANDLE;    }    if (ata_bus_Acquire(ATAHandle) == TRUE)    {        return ST_ERROR_DEVICE_BUSY;    }    /* DMA supported? */    if (Dev->DeviceParams.CurrentDmaMode == STATAPI_DMA_NOT_SUPPORTED)    {        return ST_ERROR_FEATURE_NOT_SUPPORTED;    }    else    {        error = hal_SetDmaTiming(ATAHandle->HalHndl, TimingParams);        if (error == FALSE)        {            /* Store the timing */            if (IsOutsideRange(Dev->DeviceParams.CurrentDmaMode,                                STATAPI_DMA_MWDMA_MODE_0,                               STATAPI_DMA_MWDMA_MODE_2))            {                /* UDMA */                Dev->UltraDmaTimingOverrides[UDMAMODE_TO_INDEX(Dev->DeviceParams.CurrentDmaMode)] =                         TimingParams->DmaTimingParams.UltraDmaTimingParams;            }            else            {                Dev->MwDmaTimingOverrides[MWDMAMODE_TO_INDEX(Dev->DeviceParams.CurrentDmaMode)] =                        TimingParams->DmaTimingParams.MwDmaTimingParams;            }        }    }    ata_bus_Release(ATAHandle);    return (error == FALSE)?ST_NO_ERROR:ST_ERROR_BAD_PARAMETER;}/*************************************************************************Name         : STATAPI_SetPioTiming()Description  : Set up the given PIO timing values.Parameters   :     STATAPI_Handle_t     Handle    STATAPI_DmaTiming_t  Timing values to set                   Return Value :    ST_NO_ERROR               No error.  ST_ERROR_iNVALID_HANDLE   Handle given is invalid  ST_ERROR_BAD_PARAMETER    Invalid capability parameter.  ************************************************************************/ST_ErrorCode_t STATAPI_SetPioTiming(STATAPI_Handle_t Handle,                                    STATAPI_PioTiming_t *TimingParams){    ata_DevCtrlBlock_t  *Dev;    BOOL error = FALSE;    Dev=(ata_DevCtrlBlock_t*) Handle;                /*  Check Parameters  */    if ((Dev != &ATAHandle->Handles[0]) && (Dev != &ATAHandle->Handles[1]))     {        return ST_ERROR_INVALID_HANDLE;    }    if (Dev->Opened == FALSE)    {        return ST_ERROR_INVALID_HANDLE;    }    if (ata_bus_Acquire(ATAHandle))    {        return ST_ERROR_DEVICE_BUSY;    }        error = hal_SetPioTiming(ATAHandle->HalHndl, TimingParams);    if (error == FALSE)    {        U32 index = PIOMODE_TO_INDEX(Dev->DeviceParams.CurrentPioMode);        /* Store the timing values */        Dev->PioTimingOverrides[index] = *TimingParams;        Dev->PioTimingOverridden[index] = TRUE;    }    ata_bus_Release(ATAHandle);        return (error == FALSE)?ST_NO_ERROR:ST_ERROR_BAD_PARAMETER;}        /*************************************************************************Name         : STATAPI GetCapability()Description  : Get information regarding the host's hardware capabilities.Parameters   :     ST_DeviceName_t DeviceName           Device name of an initialized driver                                          instance.    STATAPI_Capability_t *Capability    Pointer to capability structure for storing                                         capability result.                       Return Value :    ST_NO_ERROR               No error.  ST_ERROR_UNKNOWN_DEVICE   Unknown device name.  ST_ERROR_BAD_PARAMETER    Invalid capability parameter.  ************************************************************************/ST_ErrorCode_t  STATAPI_GetCapability(const ST_DeviceName_t DeviceName,                                       STATAPI_Capability_t *Capability){    /*  Parameter checking  */    if (strcmp(ATAHandle->DeviceName, DeviceName))    {        return ST_ERROR_UNKNOWN_DEVICE;    }    if (hal_GetCapabilities(ATAHandle->HalHndl, Capability))    {        return  ST_ERROR_BAD_PARAMETER;    }           return ST_NO_ERROR;}  /*************************************************************************Name         : STATAPI GetParams()Description  :  Obtains the device parameters.Parameters   :     STATAPI_Handle_t     Handle     Handle allowing access to host device.    STATAPI_Params_t     *Params    Pointer to the device parameters structure.                       Return Value :    ST_NO_ERROR               No error.  ST_ERROR_INVALID_HANDLE   Device handle is invalid.  ST_ERROR_BAD_PARAMETER    Invalid parameter.  ************************************************************************/ST_ErrorCode_t  STATAPI_GetParams(STATAPI_Handle_t     Handle,                                  STATAPI_Params_t     *Params){    ata_DevCtrlBlock_t  *Dev;            Dev=(ata_DevCtrlBlock_t*) Handle;        /*  Parameter checking  */     if((Dev!= &ATAHandle->Handles[0]) &  (Dev!= &ATAHandle->Handles[1]))     {        return ST_ERROR_INVALID_HANDLE;    }        if (Dev->Opened==FALSE)        {        return ST_ERROR_INVALID_HANDLE;    }    memcpy(Params,&Dev->DeviceParams,sizeof(STATAPI_Params_t));        return ST_NO_ERROR;} /*************************************************************************Name         : STATAPI GetDriveType()Description  :  Obtains what kind of drive is (ATA or ATAPI).Parameters   :     STATAPI_Handle_t     Handle     Handle allowing access to host device.    STATAPI_DriveType_t     *Type   Pointer to the drive type variable.                       Return Value :    ST_NO_ERROR               No error.  ST_ERROR_INVALID_HANDLE   Device handle is invalid.  ST_ERROR_BAD_PARAMETER    Invalid parameter.  ************************************************************************/ST_ErrorCode_t  STATAPI_GetDriveType(STATAPI_Handle_t     Handle,                                     STATAPI_DriveType_t     *Type){    ata_DevCtrlBlock_t  *Dev;    U8      DevNo;        Dev=(ata_DevCtrlBlock_t*) Handle;        /*  Parameter checking  */     if((Dev!= &ATAHandle->Handles[0]) &  (Dev!= &ATAHandle->Handles[1]))     {        return ST_ERROR_INVALID_HANDLE;    }        if (Dev->Opened==FALSE)        {        return ST_ERROR_INVALID_HANDLE;    }    if (Type==NULL)        {        return ST_ERROR_BAD_PARAMETER;    }        if(Dev== &ATAHandle->Handles[0])    {        DevNo= DEVICE_0;    }else    {        DevNo= DEVICE_1;     }    if (ATAHandle->DevInBus[DevNo]==ATAPI_DEVICE)    {        *Type=STATAPI_ATAPI_DRIVE;            }else if (ATAHandle->DevInBus[DevNo]==ATA_DEVICE)    {        *Type=STATAPI_ATA_DRIVE;    }else    {        *Type=STATAPI_UNKNOWN_DRIVE;    }        return ST_NO_ERROR;}        /*************************************************************************Name         : STATAPI GetDriveType()Description  :  Obtains what kind of drive is (ATA or ATAPI).Parameters   :     STATAPI_Handle_t     Handle     Handle allowing access to host device.    STATAPI_DriveType_t     *Type   Pointer to the drive type variable.                       Return Value :    ST_NO_ERROR               No error.  ST_ERROR_INVALID_HANDLE   Device handle is invalid.  ST_ERROR_BAD_PARAMETER    Invalid parameter.  ************************************************************************/ST_ErrorCode_t STATAPI_GetExtendedError(STATAPI_Handle_t     Handle,                                        U8          *ErrorCode){    ata_DevCtrlBlock_t  *Dev;        Dev = (ata_DevCtrlBlock_t*) Handle;        /*  Parameter checking  */    if ((Dev != &ATAHandle->Handles[0]) && (Dev != &ATAHandle->Handles[1]))    {        return ST_ERROR_INVALID_HANDLE;    }        if (Dev->Opened == FALSE)    {        return ST_ERROR_INVALID_HANDLE;    }    *ErrorCode = ATAHandle->LastExtendedErrorCode;    return ST_NO_ERROR;}        /*************************************************************************Name         : STATAPI GetPioMode()Description  :  Obtains the PIO mode and timing parameters used for the device driverParameters   :     STATAPI_Handle_t    Handle          Handle allowing access to host device.        STATAPI_PioMode_t   Mode            Stores the current PIO mode.    STATAPI_PioTiming_t TimingParams    Stores the current timing parameters                                        associated with the PIOmode.                   Return Value :    ST_NO_ERROR                 No error.  ST_ERROR_INVALID_HANDLE     Device handle is invalid.  ST_ERROR_BAD_PARAMETER      Invalid parameter.  STATAPI_ERROR_MODE_NOT_SET   Mode not set yet  ************************************************************************/ST_ErrorCode_t  STATAPI_GetPioMode(STATAPI_Handle_t     Handle,                                   STATAPI_PioMode_t *Mode,                                   STATAPI_PioTiming_t *TimingParams){    ata_DevCtrlBlock_t  *Dev;            Dev=(ata_DevCtrlBlock_t*) Handle;        /*  Parameter checking  */     if((Dev!= &ATAHandle->Handles[0]) &  (Dev!= &ATAHandle->Handles[1]))     {        return ST_ERROR_INVALID_HANDLE;    }    if (Dev->Opened==FALSE)        {        return ST_ERROR_INVALID_HANDLE;    }      if (Mode==NULL)        {        return ST_ERROR_BAD_PARAMETER;    }        if (Dev->IsModeSet==FALSE)        {        return STATAPI_ERROR_MODE_NOT_SET;    }    if(hal_GetPioTiming(ATAHandle->HalHndl,TimingParams))    {        return  ST_ERROR_BAD_PARAMETER;    }        *Mode=Dev->DeviceParams.CurrentPioMode;        return ST_NO_ERROR;}        /*************************************************************************Name         : STATAPI GetDmaMode()Description  :  Obtains the DMA mode and timing parameters used for the device driverParameters   :     STATAPI_Handle_t    Handle          Handle allowing access to host device.        STATAPI_DmaMode_t   Mode            Stores the current Dma mode.    STATAPI_DmaTiming_t TimingParams    Stores the current timing parameters                                        associated with the Dmamode.                   Return Value :    ST_NO_ERROR               No error.  ST_ERROR_INVALID_HANDLE   Device handle is invalid.  ST_ERROR_BAD_PARAMETER    Invalid parameter. STATAPI_ERROR_MODE_NOT_SET   Mode not set yet  ************************************************************************/ST_ErrorCode_t  STATAPI_GetDmaMode(STATAPI_Handle_t     Handle,                                   STATAPI_DmaMode_t *Mode,                                   STATAPI_DmaTiming_t *TimingParams){    ata_DevCtrlBlock_t  *Dev;            Dev=(ata_DevCtrlBlock_t*) Handle;        /*  Parameter checking  */     if((Dev!= &ATAHandle->Handles[0]) &  (Dev!= &ATAHandle->Handles[1]))     {        return ST_ERROR_INVALID_HANDLE;    }    if (Dev->Opened==FALSE)        {        return ST_ERROR_INVALID_HANDLE;    }

⌨️ 快捷键说明

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