2012-06-19 17:15:42 -06:00
# 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
{
2012-07-20 13:00:10 -06:00
u16 manfId ; /* Vendor ID to match or CSR_SDIO_ANY_MANF_ID */
u16 cardId ; /* Device ID to match or CSR_SDIO_ANY_CARD_ID */
2012-07-20 12:51:01 -06:00
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 */
2012-06-19 17:15:42 -06:00
} 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 ;
2012-07-20 13:00:10 -06:00
u16 blockSize ; /* Actual configured block size, or 0 if unconfigured */
2012-07-20 13:05:42 -06:00
u32 features ; /* Bit mask with any of CSR_SDIO_FEATURE_* set */
2012-06-19 17:15:42 -06:00
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 ;
2012-07-20 12:51:01 -06:00
u8 idsCount ;
2012-06-19 17:15:42 -06:00
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 .
*
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
2012-07-20 13:00:10 -06:00
CsrResult CsrSdioBlockSizeSet ( CsrSdioFunction * function , u16 blockSize ) ;
2012-06-19 17:15:42 -06:00
/*----------------------------------------------------------------------------*
* 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 25 MHz , 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 .
*
*
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
2012-07-20 13:05:42 -06:00
CsrResult CsrSdioMaxBusClockFrequencySet ( CsrSdioFunction * function , u32 maxFrequency ) ;
2012-06-19 17:15:42 -06:00
/*----------------------------------------------------------------------------*
* NAME
* CsrSdioRead8 , CsrSdioWrite8 , CsrSdioRead8Async , CsrSdioWrite8Async
*
* DESCRIPTION
* Read / write an 8 bit 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 .
*
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
2012-07-20 13:05:42 -06:00
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 ) ;
2012-06-19 17:15:42 -06:00
/*----------------------------------------------------------------------------*
* NAME
* CsrSdioRead16 , CsrSdioWrite16 , CsrSdioRead16Async , CsrSdioWrite16Async
*
* DESCRIPTION
* Read / write a 16 bit 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 .
*
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
2012-07-20 13:05:42 -06:00
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 ) ;
2012-06-19 17:15:42 -06:00
/*----------------------------------------------------------------------------*
* NAME
* CsrSdioF0Read8 , CsrSdioF0Write8 , CsrSdioF0Read8Async ,
* CsrSdioF0Write8Async
*
* DESCRIPTION
* Read / write an 8 bit 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 .
*
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
2012-07-20 13:05:42 -06:00
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 ) ;
2012-06-19 17:15:42 -06:00
/*----------------------------------------------------------------------------*
* 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 .
*
* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */
2012-07-20 13:05:42 -06:00
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 ) ;
2012-06-19 17:15:42 -06:00
/*----------------------------------------------------------------------------*
* 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