📄 csl_atahwcontrol.c
字号:
/* ============================================================================ * Copyright (c) Texas Instruments Inc 2002, 2003, 2004, 2005 * * Use of this software is controlled by the terms and conditions found in the * license agreement under which this software has been supplied. * =========================================================================== *//** @file csl_ataHwControl.c * * @brief File for functional layer of CSL API @a CSL_ataHwControl() * * Description * - The @a CSL_ataHwControl() function definition & it's associated * functions * * Path: \\(CSLPATH)\\ipmodules\\ata\\src * * Modification 1 * - modified on: 2004/03/08 * - reason: created the sources * * Date 2004/03/08 * Author RG Kiran *//* ============================================================================= * Revision History * =============== * 07-Nov-2004 kpn Added code in accordance with new specification * 08-Oct-2004 kpn Added code to check for invalid instance number * 24-Sep-2004 kpn Updated according to CSL Upgradation guidelines * ============================================================================ */#include <csl_ata.h>#include <csl_ataAux.h>/** ============================================================================ * @n@b CSL_ataHwControl * * @b Description * @n Takes a command of ATA with an optional argument & implements it. * * @b Arguments * @verbatim hAta Handle to the ATA instance cmd The command to this API indicates the action to be taken on ATA. arg An optional argument. @endverbatim * * <b> Return Value </b> CSL_Status * @li CSL_SOK - Status info return successful. * @li CSL_ESYS_BADHANDLE - Invalid handle * @li CSL_ESYS_INVCMD - Invalid command * @li CSL_ESYS_FAIL - Invalid instance number * * <b> Pre Condition </b> * @n None * * <b> Post Condition </b> * @n None * * @b Modifies * @n The hardware registers of ATA. * * @b Example * @verbatim CSL_AtaHandle hAta; CSL_AtaHwControlCmd cmd; void arg; status = CSL_ataHwControl (hAta, cmd, &arg); @endverbatim * ============================================================================ */#pragma CODE_SECTION (CSL_ataHwControl, ".text:csl_section:ata");CSL_Status CSL_ataHwControl ( CSL_AtaHandle hAta, CSL_AtaHwControlCmd cmd, void *arg){ CSL_Status status = CSL_SOK; if (hAta == NULL) { return CSL_ESYS_BADHANDLE; } switch (cmd) { case CSL_ATA_CMD_UDMA_TIMING_MODE: CSL_ataUdmaTmgMode (hAta, *(Uint8*)arg); return status; case CSL_ATA_CMD_MISR_ON: CSL_ataMisrOn (hAta, *(Uint8*)arg); return status; case CSL_ATA_CMD_MISR_OFF: CSL_ataMisrOff (hAta); return status; case CSL_ATA_CMD_IODFTM_EN_BREAK: CSL_ataIodftmBreakEnable (hAta); return status; case CSL_ATA_CMD_IODFTM_ENABLE: CSL_ataIodftmEnable (hAta); return status; case CSL_ATA_CMD_EXTERNAL_ENABLE: CSL_ataExternalEnable (hAta); return status; case CSL_ATA_CMD_IODFTM_UDMA_ENABLE: CSL_ataIodftmUdmaEnable (hAta); return status; case CSL_ATA_CMD_IODFTM_PIO_ENABLE: CSL_ataIodftmPioEnable (hAta); return status; case CSL_ATA_CMD_MMS_OUT: CSL_ataMmsOutSel (hAta); return status; case CSL_ATA_CMD_MMS_IN: CSL_ataMmsInSel (hAta); return status; case CSL_ATA_CMD_TEST_ENABLE: CSL_ataTestModeEnable (hAta); return status; case CSL_ATA_CMD_NORMAL_ENABLE: CSL_ataNormalModeEnable (hAta); return status; case CSL_ATA_CMD_TEST_OP_ENABLE: CSL_ataTestOutputEnable (hAta); return status; case CSL_ATA_CMD_TEST_OP_DISABLE: CSL_ataTestOutputDisable (hAta); return status; case CSL_ATA_CMD_SET_MISR_STATE: CSL_ataSetMisrState (hAta, *(Uint8*)arg); return status; default : break; } if (hAta->ataNum == CSL_ATA_PRIMARY) { switch (cmd) { case CSL_ATA_CMD_PIOENABLE: CSL_ataP_PIOEnable (hAta); break; case CSL_ATA_CMD_PIODISABLE: CSL_ataP_PIODisable (hAta); break; case CSL_ATA_CMD_DMASTARTREAD: CSL_ataP_DMAStartRead (hAta, *(Uint32*)arg); break; case CSL_ATA_CMD_DMASTARTWRITE: CSL_ataP_DMAStartWrite (hAta, *(Uint32*)arg); break; case CSL_ATA_CMD_UDMASTARTREAD: CSL_ataP_UDMAStartRead (hAta, *(Uint32*)arg); break; case CSL_ATA_CMD_UDMASTARTWRITE: CSL_ataP_DMAStartWrite (hAta, *(Uint32*)arg); break; case CSL_ATA_CMD_DMASTOP: case CSL_ATA_CMD_UDMASTOP: CSL_ataP_DMA_UDMA_Stop (hAta); break; case CSL_ATA_CMD_IORDYTIMEOUTCLEAR: CSL_ataP_IORDYTimeOutClear (hAta); break; case CSL_ATA_CMD_INTRSTATUSCLEAR: CSL_ataP_IntrStatusClear (hAta); break; case CSL_ATA_CMD_DMAERRORCLEAR: CSL_ataP_DMAErrorClear (hAta); break; case CSL_ATA_CMD_DMADESCTABLE: CSL_ataP_DMADescTable (hAta, *(Uint32 *)arg); break; default: return CSL_ESYS_INVCMD; } } else if (hAta->ataNum == CSL_ATA_SECONDARY) { switch (cmd) { case CSL_ATA_CMD_PIOENABLE: CSL_ataS_PIOEnable (hAta); break; case CSL_ATA_CMD_PIODISABLE: CSL_ataS_PIODisable (hAta); break; case CSL_ATA_CMD_DMASTARTREAD: CSL_ataS_DMAStartRead (hAta, *(Uint32*)arg); break; case CSL_ATA_CMD_DMASTARTWRITE: CSL_ataS_DMAStartWrite (hAta, *(Uint32*)arg); break; case CSL_ATA_CMD_UDMASTARTREAD: CSL_ataS_UDMAStartRead (hAta, *(Uint32*)arg); break; case CSL_ATA_CMD_UDMASTARTWRITE: CSL_ataS_DMAStartWrite (hAta, *(Uint32*)arg); break; case CSL_ATA_CMD_DMASTOP: case CSL_ATA_CMD_UDMASTOP: CSL_ataS_DMA_UDMA_Stop (hAta); break; case CSL_ATA_CMD_IORDYTIMEOUTCLEAR: CSL_ataS_IORDYTimeOutClear (hAta); break; case CSL_ATA_CMD_INTRSTATUSCLEAR: CSL_ataS_IntrStatusClear (hAta); break; case CSL_ATA_CMD_DMAERRORCLEAR: CSL_ataS_DMAErrorClear (hAta); break; case CSL_ATA_CMD_DMADESCTABLE: CSL_ataS_DMADescTable (hAta, *(Uint32 *)arg); break; default: return CSL_ESYS_INVCMD; } } else { return CSL_ESYS_FAIL; } return status;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -