#ifndef CSR_SDIO_H__ #define CSR_SDIO_H__ /***************************************************************************** (c) Cambridge Silicon Radio Limited 2010 All rights reserved and confidential information of CSR Refer to LICENSE.txt included with this source for details on the license terms. *****************************************************************************/ #include "csr_result.h" /* Result Codes */ #define CSR_SDIO_RESULT_INVALID_VALUE ((CsrResult) 1) /* Invalid argument value */ #define CSR_SDIO_RESULT_NO_DEVICE ((CsrResult) 2) /* The specified device is no longer present */ #define CSR_SDIO_RESULT_CRC_ERROR ((CsrResult) 3) /* The transmitted/received data or command response contained a CRC error */ #define CSR_SDIO_RESULT_TIMEOUT ((CsrResult) 4) /* No command response or data received from device, or function enable/disable did not succeed within timeout period */ #define CSR_SDIO_RESULT_NOT_RESET ((CsrResult) 5) /* The device was not reset */ /* Features (for use in features member of CsrSdioFunction) */ #define CSR_SDIO_FEATURE_BYTE_MODE 0x00000001 /* Transfer sizes do not have to be a multiple of block size */ #define CSR_SDIO_FEATURE_DMA_CAPABLE_MEM_REQUIRED 0x00000002 /* Bulk operations require DMA friendly memory */ /* CsrSdioFunctionId wildcards (for use in CsrSdioFunctionId members) */ #define CSR_SDIO_ANY_MANF_ID 0xFFFF #define CSR_SDIO_ANY_CARD_ID 0xFFFF #define CSR_SDIO_ANY_SDIO_FUNCTION 0xFF #define CSR_SDIO_ANY_SDIO_INTERFACE 0xFF /*----------------------------------------------------------------------------* * NAME * CsrSdioFunctionId * * DESCRIPTION * This structure describes one or more functions of a device, based on * four qualitative measures. The CsrSdioFunctionId wildcard defines can be * used for making the CsrSdioFunctionId match more than one function. * * MEMBERS * manfId - Vendor ID (or CSR_SDIO_ANY_MANF_ID). * cardId - Device ID (or CSR_SDIO_ANY_CARD_ID). * sdioFunction - SDIO Function number (or CSR_SDIO_ANY_SDIO_FUNCTION). * sdioInterface - SDIO Standard Interface Code (or CSR_SDIO_ANY_SDIO_INTERFACE) * *----------------------------------------------------------------------------*/ typedef struct { u16 manfId; /* Vendor ID to match or CSR_SDIO_ANY_MANF_ID */ u16 cardId; /* Device ID to match or CSR_SDIO_ANY_CARD_ID */ u8 sdioFunction; /* SDIO Function number to match or CSR_SDIO_ANY_SDIO_FUNCTION */ u8 sdioInterface; /* SDIO Standard Interface Code to match or CSR_SDIO_ANY_SDIO_INTERFACE */ } CsrSdioFunctionId; /*----------------------------------------------------------------------------* * NAME * CsrSdioFunction * * DESCRIPTION * This structure represents a single function on a device. * * MEMBERS * sdioId - A CsrSdioFunctionId describing this particular function. The * subfield shall not contain any CsrSdioFunctionId wildcards. The * subfields shall describe the specific single function * represented by this structure. * blockSize - Actual configured block size, or 0 if unconfigured. * features - Bit mask with any of CSR_SDIO_FEATURE_* set. * device - Handle of device containing the function. If two functions have * the same device handle, they reside on the same device. * driverData - For use by the Function Driver. The SDIO Driver shall not * attempt to dereference the pointer. * priv - For use by the SDIO Driver. The Function Driver shall not attempt * to dereference the pointer. * * *----------------------------------------------------------------------------*/ typedef struct { CsrSdioFunctionId sdioId; u16 blockSize; /* Actual configured block size, or 0 if unconfigured */ u32 features; /* Bit mask with any of CSR_SDIO_FEATURE_* set */ void *device; /* Handle of device containing the function */ void *driverData; /* For use by the Function Driver */ void *priv; /* For use by the SDIO Driver */ } CsrSdioFunction; /*----------------------------------------------------------------------------* * NAME * CsrSdioInsertedCallback, CsrSdioRemovedCallback * * DESCRIPTION * CsrSdioInsertedCallback is called when a function becomes available to * a registered Function Driver that supports the function. * CsrSdioRemovedCallback is called when a function is no longer available * to a Function Driver, either because the device has been removed, or the * Function Driver has been unregistered. * * NOTE: These functions are implemented by the Function Driver, and are * passed as function pointers in the CsrSdioFunctionDriver struct. * * PARAMETERS * function - Pointer to struct representing the function. * *----------------------------------------------------------------------------*/ typedef void (*CsrSdioInsertedCallback)(CsrSdioFunction *function); typedef void (*CsrSdioRemovedCallback)(CsrSdioFunction *function); /*----------------------------------------------------------------------------* * NAME * CsrSdioInterruptDsrCallback, CsrSdioInterruptCallback * * DESCRIPTION * CsrSdioInterruptCallback is called when an interrupt occurs on the * the device associated with the specified function. * * NOTE: These functions are implemented by the Function Driver, and are * passed as function pointers in the CsrSdioFunctionDriver struct. * * PARAMETERS * function - Pointer to struct representing the function. * * RETURNS (only CsrSdioInterruptCallback) * A pointer to a CsrSdioInterruptDsrCallback function. * *----------------------------------------------------------------------------*/ typedef void (*CsrSdioInterruptDsrCallback)(CsrSdioFunction *function); typedef CsrSdioInterruptDsrCallback (*CsrSdioInterruptCallback)(CsrSdioFunction *function); /*----------------------------------------------------------------------------* * NAME * CsrSdioSuspendCallback, CsrSdioResumeCallback * * DESCRIPTION * CsrSdioSuspendCallback is called when the system is preparing to go * into a suspended state. CsrSdioResumeCallback is called when the system * has entered an active state again. * * NOTE: These functions are implemented by the Function Driver, and are * passed as function pointers in the CsrSdioFunctionDriver struct. * * PARAMETERS * function - Pointer to struct representing the function. * *----------------------------------------------------------------------------*/ typedef void (*CsrSdioSuspendCallback)(CsrSdioFunction *function); typedef void (*CsrSdioResumeCallback)(CsrSdioFunction *function); /*----------------------------------------------------------------------------* * NAME * CsrSdioAsyncCallback, CsrSdioAsyncDsrCallback * * DESCRIPTION * CsrSdioAsyncCallback is called when an asynchronous operation completes. * * NOTE: These functions are implemented by the Function Driver, and are * passed as function pointers in the function calls that initiate * the operation. * * PARAMETERS * function - Pointer to struct representing the function. * result - The result of the operation that completed. See the description * of the initiating function for possible result values. * * RETURNS (only CsrSdioAsyncCallback) * A pointer to a CsrSdioAsyncDsrCallback function. * *----------------------------------------------------------------------------*/ typedef void (*CsrSdioAsyncDsrCallback)(CsrSdioFunction *function, CsrResult result); typedef CsrSdioAsyncDsrCallback (*CsrSdioAsyncCallback)(CsrSdioFunction *function, CsrResult result); /*----------------------------------------------------------------------------* * NAME * CsrSdioFunctionDriver * * DESCRIPTION * Structure representing a Function Driver. * * MEMBERS * inserted - Callback, see description of CsrSdioInsertedCallback. * removed - Callback, see description of CsrSdioRemovedCallback. * intr - Callback, see description of CsrSdioInterruptCallback. * suspend - Callback, see description of CsrSdioSuspendCallback. * resume - Callback, see description of CsrSdioResumeCallback. * ids - Array of CsrSdioFunctionId describing one or more functions that * are supported by the Function Driver. * idsCount - Length of the ids array. * priv - For use by the SDIO Driver. The Function Driver may initialise * it to NULL, but shall otherwise not access the pointer or attempt * to dereference it. * *----------------------------------------------------------------------------*/ typedef struct { CsrSdioInsertedCallback inserted; CsrSdioRemovedCallback removed; CsrSdioInterruptCallback intr; CsrSdioSuspendCallback suspend; CsrSdioResumeCallback resume; CsrSdioFunctionId *ids; u8 idsCount; void *priv; /* For use by the SDIO Driver */ } CsrSdioFunctionDriver; /*----------------------------------------------------------------------------* * NAME * CsrSdioFunctionDriverRegister * * DESCRIPTION * Register a Function Driver. * * PARAMETERS * functionDriver - Pointer to struct describing the Function Driver. * * RETURNS * CSR_RESULT_SUCCESS - The Function Driver was successfully * registered. * CSR_RESULT_FAILURE - Unable to register the function driver, * because of an unspecified/unknown error. The * Function Driver has not been registered. * CSR_SDIO_RESULT_INVALID_VALUE - The specified Function Driver pointer * does not point at a valid Function * Driver structure, or some of the members * contain invalid entries. * *----------------------------------------------------------------------------*/ CsrResult CsrSdioFunctionDriverRegister(CsrSdioFunctionDriver *functionDriver); /*----------------------------------------------------------------------------* * NAME * CsrSdioFunctionDriverUnregister * * DESCRIPTION * Unregister a previously registered Function Driver. * * PARAMETERS * functionDriver - pointer to struct describing the Function Driver. * *----------------------------------------------------------------------------*/ void CsrSdioFunctionDriverUnregister(CsrSdioFunctionDriver *functionDriver); /*----------------------------------------------------------------------------* * NAME * CsrSdioFunctionEnable, CsrSdioFunctionDisable * * DESCRIPTION * Enable/disable the specified function by setting/clearing the * corresponding bit in the I/O Enable register in function 0, and then * periodically reading the related bit in the I/O Ready register until it * is set/clear, limited by an implementation defined timeout. * * PARAMETERS * function - Pointer to struct representing the function. * * RETURNS * CSR_RESULT_SUCCESS - The specified function was enabled/disabled. * CSR_RESULT_FAILURE - Unspecified/unknown error. * CSR_SDIO_RESULT_NO_DEVICE - The device does not exist anymore. * CSR_SDIO_RESULT_CRC_ERROR - A CRC error occured. The state of the * related bit in the I/O Enable register is * undefined. * CSR_SDIO_RESULT_TIMEOUT - No response from the device, or the related * bit in the I/O ready register was not * set/cleared within the timeout period. * * NOTE: If the SDIO R5 response is available, and either of the * FUNCTION_NUMBER or OUT_OF_RANGE bits are set, * CSR_SDIO_RESULT_INVALID_VALUE shall be returned. If the ERROR bit * is set (but none of FUNCTION_NUMBER or OUT_OF_RANGE), * CSR_RESULT_FAILURE shall be returned. The ILLEGAL_COMMAND and * COM_CRC_ERROR bits shall be ignored. * * If the CSPI response is available, and any of the * FUNCTION_DISABLED or CLOCK_DISABLED bits are set, * CSR_SDIO_RESULT_INVALID_VALUE will be returned. * *----------------------------------------------------------------------------*/ CsrResult CsrSdioFunctionEnable(CsrSdioFunction *function); CsrResult CsrSdioFunctionDisable(CsrSdioFunction *function); /*----------------------------------------------------------------------------* * NAME * CsrSdioInterruptEnable, CsrSdioInterruptDisable * * DESCRIPTION * Enable/disable the interrupt for the specified function by * setting/clearing the corresponding bit in the INT Enable register in * function 0. * * PARAMETERS * function - Pointer to struct representing the function. * * RETURNS * CSR_RESULT_SUCCESS - The specified function was enabled/disabled. * CSR_RESULT_FAILURE - Unspecified/unknown error. * CSR_SDIO_RESULT_NO_DEVICE - The device does not exist anymore. * CSR_SDIO_RESULT_CRC_ERROR - A CRC error occured. The state of the * related bit in the INT Enable register is * unchanged. * CSR_SDIO_RESULT_INVALID_VALUE - The specified function cannot be * enabled/disabled, because it either * does not exist or it is not possible to * individually enable/disable functions. * CSR_SDIO_RESULT_TIMEOUT - No response from the device. * * NOTE: If the SDIO R5 response is available, and either of the * FUNCTION_NUMBER or OUT_OF_RANGE bits are set, * CSR_SDIO_RESULT_INVALID_VALUE shall be returned. If the ERROR bit * is set (but none of FUNCTION_NUMBER or OUT_OF_RANGE), * CSR_RESULT_FAILURE shall be returned. The ILLEGAL_COMMAND and * COM_CRC_ERROR bits shall be ignored. * * If the CSPI response is available, and any of the * FUNCTION_DISABLED or CLOCK_DISABLED bits are set, * CSR_SDIO_RESULT_INVALID_VALUE will be returned. * *----------------------------------------------------------------------------*/ CsrResult CsrSdioInterruptEnable(CsrSdioFunction *function); CsrResult CsrSdioInterruptDisable(CsrSdioFunction *function); /*----------------------------------------------------------------------------* * NAME * CsrSdioInterruptAcknowledge * * DESCRIPTION * Acknowledge that a signalled interrupt has been handled. Shall only * be called once, and exactly once for each signalled interrupt to the * corresponding function. * * PARAMETERS * function - Pointer to struct representing the function to which the * event was signalled. * *----------------------------------------------------------------------------*/ void CsrSdioInterruptAcknowledge(CsrSdioFunction *function); /*----------------------------------------------------------------------------* * NAME * CsrSdioInsertedAcknowledge, CsrSdioRemovedAcknowledge * * DESCRIPTION * Acknowledge that a signalled inserted/removed event has been handled. * Shall only be called once, and exactly once for each signalled event to * the corresponding function. * * PARAMETERS * function - Pointer to struct representing the function to which the * inserted was signalled. * result (CsrSdioInsertedAcknowledge only) * CSR_RESULT_SUCCESS - The Function Driver has accepted the * function, and the function is attached to * the Function Driver until the * CsrSdioRemovedCallback is called and * acknowledged. * CSR_RESULT_FAILURE - Unable to accept the function. The * function is not attached to the Function * Driver, and it may be passed to another * Function Driver which supports the * function. * *----------------------------------------------------------------------------*/ void CsrSdioInsertedAcknowledge(CsrSdioFunction *function, CsrResult result); void CsrSdioRemovedAcknowledge(CsrSdioFunction *function); /*----------------------------------------------------------------------------* * NAME * CsrSdioSuspendAcknowledge, CsrSdioResumeAcknowledge * * DESCRIPTION * Acknowledge that a signalled suspend event has been handled. Shall only * be called once, and exactly once for each signalled event to the * corresponding function. * * PARAMETERS * function - Pointer to struct representing the function to which the * event was signalled. * result * CSR_RESULT_SUCCESS - Successfully suspended/resumed. * CSR_RESULT_FAILURE - Unspecified/unknown error. * *----------------------------------------------------------------------------*/ void CsrSdioSuspendAcknowledge(CsrSdioFunction *function, CsrResult result); void CsrSdioResumeAcknowledge(CsrSdioFunction *function, CsrResult result); /*----------------------------------------------------------------------------* * NAME * CsrSdioBlockSizeSet * * DESCRIPTION * Set the block size to use for the function. The actual configured block * size shall be the minimum of: * 1) Maximum block size supported by the function. * 2) Maximum block size supported by the host controller. * 3) The block size specified by the blockSize argument. * * When this function returns, the actual configured block size is * available in the blockSize member of the function struct. * * PARAMETERS * function - Pointer to struct representing the function. * blockSize - Block size to use for the function. Valid range is 1 to * 2048. * * RETURNS * CSR_RESULT_SUCCESS - The block size register on the chip * was updated. * CSR_RESULT_FAILURE - Unspecified/unknown error. * CSR_SDIO_RESULT_INVALID_VALUE - One or more arguments were invalid. * CSR_SDIO_RESULT_NO_DEVICE - The device does not exist anymore. * CSR_SDIO_RESULT_CRC_ERROR - A CRC error occured. The configured block * size is undefined. * CSR_SDIO_RESULT_TIMEOUT - No response from the device. * * NOTE: If the SDIO R5 response is available, and the FUNCTION_NUMBER * bits is set, CSR_SDIO_RESULT_INVALID_VALUE shall be returned. * If the ERROR bit is set (but not FUNCTION_NUMBER), * CSR_RESULT_FAILURE shall be returned. The ILLEGAL_COMMAND and * COM_CRC_ERROR bits shall be ignored. * * If the CSPI response is available, and any of the * FUNCTION_DISABLED or CLOCK_DISABLED bits are set, * CSR_SDIO_RESULT_INVALID_VALUE will be returned. * * NOTE: Setting the block size requires two individual operations. The * implementation shall ignore the OUT_OF_RANGE bit of the SDIO R5 * response for the first operation, as the partially configured * block size may be out of range, even if the final block size * (after the second operation) is in the valid range. * *----------------------------------------------------------------------------*/ CsrResult CsrSdioBlockSizeSet(CsrSdioFunction *function, u16 blockSize); /*----------------------------------------------------------------------------* * NAME * CsrSdioMaxBusClockFrequencySet * * DESCRIPTION * Set the maximum clock frequency to use for the device associated with * the specified function. The actual configured clock frequency for the * device shall be the minimum of: * 1) Maximum clock frequency supported by the device. * 2) Maximum clock frequency supported by the host controller. * 3) Maximum clock frequency specified for any function on the same * device. * * If the clock frequency exceeds 25MHz, it is the responsibility of the * SDIO driver to enable high speed mode on the device, using the standard * defined procedure, before increasing the frequency beyond the limit. * * Note that the clock frequency configured affects all functions on the * same device. * * PARAMETERS * function - Pointer to struct representing the function. * maxFrequency - The maximum clock frequency for the function in Hertz. * * RETURNS * CSR_RESULT_SUCCESS - The maximum clock frequency was succesfully * set for the function. * CSR_RESULT_FAILURE - Unspecified/unknown error. * CSR_SDIO_RESULT_INVALID_VALUE - One or more arguments were invalid. * CSR_SDIO_RESULT_NO_DEVICE - The device does not exist anymore. * * NOTE: If the SDIO R5 response is available, and the FUNCTION_NUMBER * bits is set, CSR_SDIO_RESULT_INVALID_VALUE shall be returned. * If the ERROR bit is set (but not FUNCTION_NUMBER), * CSR_RESULT_FAILURE shall be returned. The ILLEGAL_COMMAND and * COM_CRC_ERROR bits shall be ignored. * * If the CSPI response is available, and any of the * FUNCTION_DISABLED or CLOCK_DISABLED bits are set, * CSR_SDIO_RESULT_INVALID_VALUE will be returned. * * *----------------------------------------------------------------------------*/ CsrResult CsrSdioMaxBusClockFrequencySet(CsrSdioFunction *function, u32 maxFrequency); /*----------------------------------------------------------------------------* * NAME * CsrSdioRead8, CsrSdioWrite8, CsrSdioRead8Async, CsrSdioWrite8Async * * DESCRIPTION * Read/write an 8bit value from/to the specified register address. * * PARAMETERS * function - Pointer to struct representing the function. * address - Register address within the function. * data - The data to read/write. * callback - The function to call on operation completion. * * RETURNS * CSR_RESULT_SUCCESS - The data was successfully read/written. * CSR_RESULT_FAILURE - Unspecified/unknown error. * CSR_SDIO_RESULT_INVALID_VALUE - One or more arguments were invalid. * CSR_SDIO_RESULT_NO_DEVICE - The device does not exist anymore. * CSR_SDIO_RESULT_CRC_ERROR - A CRC error occured. No data read/written. * CSR_SDIO_RESULT_TIMEOUT - No response from the device. * * NOTE: If the SDIO R5 response is available, and either of the * FUNCTION_NUMBER or OUT_OF_RANGE bits are set, * CSR_SDIO_RESULT_INVALID_VALUE shall be returned. If the ERROR bit * is set (but none of FUNCTION_NUMBER or OUT_OF_RANGE), * CSR_RESULT_FAILURE shall be returned. The ILLEGAL_COMMAND and * COM_CRC_ERROR bits shall be ignored. * * If the CSPI response is available, and any of the * FUNCTION_DISABLED or CLOCK_DISABLED bits are set, * CSR_SDIO_RESULT_INVALID_VALUE will be returned. * * NOTE: The CsrSdioRead8Async and CsrSdioWrite8Async functions return * immediately, and the supplied callback function is called when the * operation is complete. The result value is given as an argument to * the callback function. * *----------------------------------------------------------------------------*/ CsrResult CsrSdioRead8(CsrSdioFunction *function, u32 address, u8 *data); CsrResult CsrSdioWrite8(CsrSdioFunction *function, u32 address, u8 data); void CsrSdioRead8Async(CsrSdioFunction *function, u32 address, u8 *data, CsrSdioAsyncCallback callback); void CsrSdioWrite8Async(CsrSdioFunction *function, u32 address, u8 data, CsrSdioAsyncCallback callback); /*----------------------------------------------------------------------------* * NAME * CsrSdioRead16, CsrSdioWrite16, CsrSdioRead16Async, CsrSdioWrite16Async * * DESCRIPTION * Read/write a 16bit value from/to the specified register address. * * PARAMETERS * function - Pointer to struct representing the function. * address - Register address within the function. * data - The data to read/write. * callback - The function to call on operation completion. * * RETURNS * CSR_RESULT_SUCCESS - The data was successfully read/written. * CSR_RESULT_FAILURE - Unspecified/unknown error. * CSR_SDIO_RESULT_INVALID_VALUE - One or more arguments were invalid. * CSR_SDIO_RESULT_NO_DEVICE - The device does not exist anymore. * CSR_SDIO_RESULT_CRC_ERROR - A CRC error occured. Data may have been * partially read/written. * CSR_SDIO_RESULT_TIMEOUT - No response from the device. * * NOTE: If the SDIO R5 response is available, and either of the * FUNCTION_NUMBER or OUT_OF_RANGE bits are set, * CSR_SDIO_RESULT_INVALID_VALUE shall be returned. If the ERROR bit * is set (but none of FUNCTION_NUMBER or OUT_OF_RANGE), * CSR_RESULT_FAILURE shall be returned. The ILLEGAL_COMMAND and * COM_CRC_ERROR bits shall be ignored. * * If the CSPI response is available, and any of the * FUNCTION_DISABLED or CLOCK_DISABLED bits are set, * CSR_SDIO_RESULT_INVALID_VALUE will be returned. * * NOTE: The CsrSdioRead16Async and CsrSdioWrite16Async functions return * immediately, and the supplied callback function is called when the * operation is complete. The result value is given as an argument to * the callback function. * *----------------------------------------------------------------------------*/ CsrResult CsrSdioRead16(CsrSdioFunction *function, u32 address, u16 *data); CsrResult CsrSdioWrite16(CsrSdioFunction *function, u32 address, u16 data); void CsrSdioRead16Async(CsrSdioFunction *function, u32 address, u16 *data, CsrSdioAsyncCallback callback); void CsrSdioWrite16Async(CsrSdioFunction *function, u32 address, u16 data, CsrSdioAsyncCallback callback); /*----------------------------------------------------------------------------* * NAME * CsrSdioF0Read8, CsrSdioF0Write8, CsrSdioF0Read8Async, * CsrSdioF0Write8Async * * DESCRIPTION * Read/write an 8bit value from/to the specified register address in * function 0. * * PARAMETERS * function - Pointer to struct representing the function. * address - Register address within the function. * data - The data to read/write. * callback - The function to call on operation completion. * * RETURNS * CSR_RESULT_SUCCESS - The data was successfully read/written. * CSR_RESULT_FAILURE - Unspecified/unknown error. * CSR_SDIO_RESULT_INVALID_VALUE - One or more arguments were invalid. * CSR_SDIO_RESULT_NO_DEVICE - The device does not exist anymore. * CSR_SDIO_RESULT_CRC_ERROR - A CRC error occured. No data read/written. * CSR_SDIO_RESULT_TIMEOUT - No response from the device. * * NOTE: If the SDIO R5 response is available, and either of the * FUNCTION_NUMBER or OUT_OF_RANGE bits are set, * CSR_SDIO_RESULT_INVALID_VALUE shall be returned. If the ERROR bit * is set (but none of FUNCTION_NUMBER or OUT_OF_RANGE), * CSR_RESULT_FAILURE shall be returned. The ILLEGAL_COMMAND and * COM_CRC_ERROR bits shall be ignored. * * If the CSPI response is available, and any of the * FUNCTION_DISABLED or CLOCK_DISABLED bits are set, * CSR_SDIO_RESULT_INVALID_VALUE will be returned. * * NOTE: The CsrSdioF0Read8Async and CsrSdioF0Write8Async functions return * immediately, and the supplied callback function is called when the * operation is complete. The result value is given as an argument to * the callback function. * *----------------------------------------------------------------------------*/ CsrResult CsrSdioF0Read8(CsrSdioFunction *function, u32 address, u8 *data); CsrResult CsrSdioF0Write8(CsrSdioFunction *function, u32 address, u8 data); void CsrSdioF0Read8Async(CsrSdioFunction *function, u32 address, u8 *data, CsrSdioAsyncCallback callback); void CsrSdioF0Write8Async(CsrSdioFunction *function, u32 address, u8 data, CsrSdioAsyncCallback callback); /*----------------------------------------------------------------------------* * NAME * CsrSdioRead, CsrSdioWrite, CsrSdioReadAsync, CsrSdioWriteAsync * * DESCRIPTION * Read/write a specified number of bytes from/to the specified register * address. * * PARAMETERS * function - Pointer to struct representing the function. * address - Register address within the function. * data - The data to read/write. * length - Number of byte to read/write. * callback - The function to call on operation completion. * * RETURNS * CSR_RESULT_SUCCESS - The data was successfully read/written. * CSR_RESULT_FAILURE - Unspecified/unknown error. * CSR_SDIO_RESULT_INVALID_VALUE - One or more arguments were invalid. * CSR_SDIO_RESULT_NO_DEVICE - The device does not exist anymore. * CSR_SDIO_RESULT_CRC_ERROR - A CRC error occured. Data may have been * partially read/written. * CSR_SDIO_RESULT_TIMEOUT - No response from the device. * * NOTE: If the SDIO R5 response is available, and either of the * FUNCTION_NUMBER or OUT_OF_RANGE bits are set, * CSR_SDIO_RESULT_INVALID_VALUE shall be returned. If the ERROR bit * is set (but none of FUNCTION_NUMBER or OUT_OF_RANGE), * CSR_RESULT_FAILURE shall be returned. The ILLEGAL_COMMAND and * COM_CRC_ERROR bits shall be ignored. * * If the CSPI response is available, and any of the * FUNCTION_DISABLED or CLOCK_DISABLED bits are set, * CSR_SDIO_RESULT_INVALID_VALUE will be returned. * * NOTE: The CsrSdioF0Read8Async and CsrSdioF0Write8Async functions return * immediately, and the supplied callback function is called when the * operation is complete. The result value is given as an argument to * the callback function. * *----------------------------------------------------------------------------*/ CsrResult CsrSdioRead(CsrSdioFunction *function, u32 address, void *data, u32 length); CsrResult CsrSdioWrite(CsrSdioFunction *function, u32 address, const void *data, u32 length); void CsrSdioReadAsync(CsrSdioFunction *function, u32 address, void *data, u32 length, CsrSdioAsyncCallback callback); void CsrSdioWriteAsync(CsrSdioFunction *function, u32 address, const void *data, u32 length, CsrSdioAsyncCallback callback); /*----------------------------------------------------------------------------* * NAME * CsrSdioPowerOn, CsrSdioPowerOff * * DESCRIPTION * Power on/off the device. * * PARAMETERS * function - Pointer to struct representing the function that resides on * the device to power on/off. * * RETURNS (only CsrSdioPowerOn) * CSR_RESULT_SUCCESS - Power was succesfully reapplied and the device * has been reinitialised. * CSR_RESULT_FAILURE - Unspecified/unknown error. * CSR_SDIO_RESULT_NO_DEVICE - The device does not exist anymore. * CSR_SDIO_RESULT_CRC_ERROR - A CRC error occured during reinitialisation. * CSR_SDIO_RESULT_TIMEOUT - No response from the device during * reinitialisation. * CSR_SDIO_RESULT_NOT_RESET - The power was not removed by the * CsrSdioPowerOff call. The state of the * device is unchanged. * *----------------------------------------------------------------------------*/ CsrResult CsrSdioPowerOn(CsrSdioFunction *function); void CsrSdioPowerOff(CsrSdioFunction *function); /*----------------------------------------------------------------------------* * NAME * CsrSdioHardReset * * DESCRIPTION * Perform a hardware reset of the device. * * PARAMETERS * function - Pointer to struct representing the function that resides on * the device to hard reset. * * RETURNS * CSR_RESULT_SUCCESS - Reset was succesfully performed and the device * has been reinitialised. * CSR_RESULT_FAILURE - Unspecified/unknown error. * CSR_SDIO_RESULT_NO_DEVICE - The device does not exist anymore. * CSR_SDIO_RESULT_CRC_ERROR - A CRC error occured during reinitialisation. * CSR_SDIO_RESULT_TIMEOUT - No response from the device during * reinitialisation. * CSR_SDIO_RESULT_NOT_RESET - The reset was not applied because it is not * supported. The state of the device is * unchanged. * *----------------------------------------------------------------------------*/ CsrResult CsrSdioHardReset(CsrSdioFunction *function); /*----------------------------------------------------------------------------* * NAME * CsrSdioFunctionActive, CsrSdioFunctionIdle * * DESCRIPTION * * PARAMETERS * function - Pointer to struct representing the function. * *----------------------------------------------------------------------------*/ void CsrSdioFunctionActive(CsrSdioFunction *function); void CsrSdioFunctionIdle(CsrSdioFunction *function); #endif