blob: 66973e93a6bc0e4c6ffd407920469fe4e44b3242 [file] [log] [blame]
#ifndef CSR_FRAMEWORK_EXT_H__
#define CSR_FRAMEWORK_EXT_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"
#include "csr_framework_ext_types.h"
#ifdef __cplusplus
extern "C" {
#endif
/* Result codes */
#define CSR_FE_RESULT_NO_MORE_EVENTS ((CsrResult) 0x0001)
#define CSR_FE_RESULT_INVALID_POINTER ((CsrResult) 0x0002)
#define CSR_FE_RESULT_INVALID_HANDLE ((CsrResult) 0x0003)
#define CSR_FE_RESULT_NO_MORE_MUTEXES ((CsrResult) 0x0004)
#define CSR_FE_RESULT_TIMEOUT ((CsrResult) 0x0005)
#define CSR_FE_RESULT_NO_MORE_THREADS ((CsrResult) 0x0006)
/* Thread priorities */
#define CSR_THREAD_PRIORITY_HIGHEST ((u16) 0)
#define CSR_THREAD_PRIORITY_HIGH ((u16) 1)
#define CSR_THREAD_PRIORITY_NORMAL ((u16) 2)
#define CSR_THREAD_PRIORITY_LOW ((u16) 3)
#define CSR_THREAD_PRIORITY_LOWEST ((u16) 4)
#define CSR_EVENT_WAIT_INFINITE ((u16) 0xFFFF)
/*----------------------------------------------------------------------------*
* NAME
* CsrEventCreate
*
* DESCRIPTION
* Creates an event and returns a handle to the created event.
*
* RETURNS
* Possible values:
* CSR_RESULT_SUCCESS in case of success
* CSR_FE_RESULT_NO_MORE_EVENTS in case of out of event resources
* CSR_FE_RESULT_INVALID_POINTER in case the eventHandle pointer is invalid
*
*----------------------------------------------------------------------------*/
CsrResult CsrEventCreate(CsrEventHandle *eventHandle);
/*----------------------------------------------------------------------------*
* NAME
* CsrEventWait
*
* DESCRIPTION
* Wait fore one or more of the event bits to be set.
*
* RETURNS
* Possible values:
* CSR_RESULT_SUCCESS in case of success
* CSR_FE_RESULT_TIMEOUT in case of timeout
* CSR_FE_RESULT_INVALID_HANDLE in case the eventHandle is invalid
* CSR_FE_RESULT_INVALID_POINTER in case the eventBits pointer is invalid
*
*----------------------------------------------------------------------------*/
CsrResult CsrEventWait(CsrEventHandle *eventHandle, u16 timeoutInMs, u32 *eventBits);
/*----------------------------------------------------------------------------*
* NAME
* CsrEventSet
*
* DESCRIPTION
* Set an event.
*
* RETURNS
* Possible values:
* CSR_RESULT_SUCCESS in case of success
* CSR_FE_RESULT_INVALID_HANDLE in case the eventHandle is invalid
*
*----------------------------------------------------------------------------*/
CsrResult CsrEventSet(CsrEventHandle *eventHandle, u32 eventBits);
/*----------------------------------------------------------------------------*
* NAME
* CsrEventDestroy
*
* DESCRIPTION
* Destroy the event associated.
*
* RETURNS
* void
*
*----------------------------------------------------------------------------*/
void CsrEventDestroy(CsrEventHandle *eventHandle);
/*----------------------------------------------------------------------------*
* NAME
* CsrMutexCreate
*
* DESCRIPTION
* Create a mutex and return a handle to the created mutex.
*
* RETURNS
* Possible values:
* CSR_RESULT_SUCCESS in case of success
* CSR_FE_RESULT_NO_MORE_MUTEXES in case of out of mutex resources
* CSR_FE_RESULT_INVALID_POINTER in case the mutexHandle pointer is invalid
*
*----------------------------------------------------------------------------*/
CsrResult CsrMutexCreate(CsrMutexHandle *mutexHandle);
/*----------------------------------------------------------------------------*
* NAME
* CsrMutexLock
*
* DESCRIPTION
* Lock the mutex refered to by the provided handle.
*
* RETURNS
* Possible values:
* CSR_RESULT_SUCCESS in case of success
* CSR_FE_RESULT_INVALID_HANDLE in case the mutexHandle is invalid
*
*----------------------------------------------------------------------------*/
CsrResult CsrMutexLock(CsrMutexHandle *mutexHandle);
/*----------------------------------------------------------------------------*
* NAME
* CsrMutexUnlock
*
* DESCRIPTION
* Unlock the mutex refered to by the provided handle.
*
* RETURNS
* Possible values:
* CSR_RESULT_SUCCESS in case of success
* CSR_FE_RESULT_INVALID_HANDLE in case the mutexHandle is invalid
*
*----------------------------------------------------------------------------*/
CsrResult CsrMutexUnlock(CsrMutexHandle *mutexHandle);
/*----------------------------------------------------------------------------*
* NAME
* CsrMutexDestroy
*
* DESCRIPTION
* Destroy the previously created mutex.
*
* RETURNS
* void
*
*----------------------------------------------------------------------------*/
void CsrMutexDestroy(CsrMutexHandle *mutexHandle);
/*----------------------------------------------------------------------------*
* NAME
* CsrGlobalMutexLock
*
* DESCRIPTION
* Lock the global mutex. The global mutex is a single pre-initialised
* shared mutex, spinlock or similar that does not need to be created prior
* to use. The limitation is that there is only one single lock shared
* between all code. Consequently, it must only be used very briefly to
* either protect simple one-time initialisation or to protect the creation
* of a dedicated mutex by calling CsrMutexCreate.
*
*----------------------------------------------------------------------------*/
void CsrGlobalMutexLock(void);
/*----------------------------------------------------------------------------*
* NAME
* CsrGlobalMutexUnlock
*
* DESCRIPTION
* Unlock the global mutex.
*
*----------------------------------------------------------------------------*/
void CsrGlobalMutexUnlock(void);
/*----------------------------------------------------------------------------*
* NAME
* CsrThreadCreate
*
* DESCRIPTION
* Create thread function and return a handle to the created thread.
*
* RETURNS
* Possible values:
* CSR_RESULT_SUCCESS in case of success
* CSR_FE_RESULT_NO_MORE_THREADS in case of out of thread resources
* CSR_FE_RESULT_INVALID_POINTER in case one of the supplied pointers is invalid
*
*----------------------------------------------------------------------------*/
CsrResult CsrThreadCreate(void (*threadFunction)(void *pointer), void *pointer,
u32 stackSize, u16 priority,
const char *threadName, CsrThreadHandle *threadHandle);
/*----------------------------------------------------------------------------*
* NAME
* CsrThreadGetHandle
*
* DESCRIPTION
* Return thread handle of calling thread.
*
* RETURNS
* Possible values:
* CSR_RESULT_SUCCESS in case of success
* CSR_FE_RESULT_INVALID_POINTER in case the threadHandle pointer is invalid
*
*----------------------------------------------------------------------------*/
CsrResult CsrThreadGetHandle(CsrThreadHandle *threadHandle);
/*----------------------------------------------------------------------------*
* NAME
* CsrThreadEqual
*
* DESCRIPTION
* Compare thread handles
*
* RETURNS
* Possible values:
* CSR_RESULT_SUCCESS in case thread handles are identical
* CSR_FE_RESULT_INVALID_POINTER in case either threadHandle pointer is invalid
* CSR_RESULT_FAILURE otherwise
*
*----------------------------------------------------------------------------*/
CsrResult CsrThreadEqual(CsrThreadHandle *threadHandle1, CsrThreadHandle *threadHandle2);
/*----------------------------------------------------------------------------*
* NAME
* CsrThreadSleep
*
* DESCRIPTION
* Sleep for a given period.
*
* RETURNS
* void
*
*----------------------------------------------------------------------------*/
void CsrThreadSleep(u16 sleepTimeInMs);
#ifdef __cplusplus
}
#endif
#endif