📄 statapi.c
字号:
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 + -