WILC_Uint32 FIFO_InitBuffer(tHANDLE * hBuffer,WILC_Uint32 u32BufferLength)
{
	WILC_Uint32 u32Error = 0;
	tstrFifoHandler * pstrFifoHandler = WILC_MALLOC(sizeof(tstrFifoHandler));
	if(pstrFifoHandler)
	{
		WILC_memset(pstrFifoHandler,0,sizeof(tstrFifoHandler));
		pstrFifoHandler->pu8Buffer = WILC_MALLOC(u32BufferLength);
		if(pstrFifoHandler->pu8Buffer)
		{
			tstrWILC_SemaphoreAttrs strSemBufferAttrs;
			pstrFifoHandler->u32BufferLength = u32BufferLength;
			WILC_memset(pstrFifoHandler->pu8Buffer,0,u32BufferLength);
			//create semaphore
			WILC_SemaphoreFillDefault(&strSemBufferAttrs);	
			strSemBufferAttrs.u32InitCount = 1;
			WILC_SemaphoreCreate(&pstrFifoHandler->SemBuffer, &strSemBufferAttrs);						
			*hBuffer = pstrFifoHandler;
		}
		else
		{
			*hBuffer = NULL;
			u32Error = 1;
		}
	}
	else
	{
		u32Error = 1;
	}
	return u32Error;	
}
Exemple #2
0
/*!
 *  @author		syounan
 *  @date		1 Sep 2010
 *  @note		copied from FLO glue implementatuion
 *  @version		1.0
 */
WILC_ErrNo WILC_MsgQueueSend(WILC_MsgQueueHandle *pHandle,
			     const void *pvSendBuffer, WILC_Uint32 u32SendBufferSize,
			     tstrWILC_MsgQueueAttrs *pstrAttrs)
{
	WILC_ErrNo s32RetStatus = WILC_SUCCESS;
	unsigned long flags;
	Message *pstrMessage = NULL;

	if ((pHandle == NULL) || (u32SendBufferSize == 0) || (pvSendBuffer == NULL)) {
		WILC_ERRORREPORT(s32RetStatus, WILC_INVALID_ARGUMENT);
	}

	if (pHandle->bExiting == WILC_TRUE) {
		WILC_ERRORREPORT(s32RetStatus, WILC_FAIL);
	}

	spin_lock_irqsave(&pHandle->strCriticalSection, flags);

	/* construct a new message */
	pstrMessage = WILC_NEW(Message, 1);
	WILC_NULLCHECK(s32RetStatus, pstrMessage);
	pstrMessage->u32Length = u32SendBufferSize;
	pstrMessage->pstrNext = NULL;
	pstrMessage->pvBuffer = WILC_MALLOC(u32SendBufferSize);
	WILC_NULLCHECK(s32RetStatus, pstrMessage->pvBuffer);
	WILC_memcpy(pstrMessage->pvBuffer, pvSendBuffer, u32SendBufferSize);


	/* add it to the message queue */
	if (pHandle->pstrMessageList == NULL) {
		pHandle->pstrMessageList  = pstrMessage;
	} else {
		Message *pstrTailMsg = pHandle->pstrMessageList;
		while (pstrTailMsg->pstrNext != NULL) {
			pstrTailMsg = pstrTailMsg->pstrNext;
		}
		pstrTailMsg->pstrNext = pstrMessage;
	}

	spin_unlock_irqrestore(&pHandle->strCriticalSection, flags);

	WILC_SemaphoreRelease(&pHandle->hSem, WILC_NULL);

	WILC_CATCH(s32RetStatus)
	{
		/* error occured, free any allocations */
		if (pstrMessage != NULL) {
			if (pstrMessage->pvBuffer != NULL) {
				WILC_FREE(pstrMessage->pvBuffer);
			}
			WILC_FREE(pstrMessage);
		}
	}

	return s32RetStatus;
}
Exemple #3
0
u32 FIFO_InitBuffer(tHANDLE *hBuffer, u32 u32BufferLength)
{
	u32 u32Error = 0;
	tstrFifoHandler *pstrFifoHandler = WILC_MALLOC (sizeof (tstrFifoHandler));
	if (pstrFifoHandler) {
		WILC_memset (pstrFifoHandler, 0, sizeof (tstrFifoHandler));
		pstrFifoHandler->pu8Buffer = WILC_MALLOC (u32BufferLength);
		if (pstrFifoHandler->pu8Buffer)	{
			pstrFifoHandler->u32BufferLength = u32BufferLength;
			WILC_memset (pstrFifoHandler->pu8Buffer, 0, u32BufferLength);
			/* create semaphore */
			sema_init(&pstrFifoHandler->SemBuffer, 1);
			*hBuffer = pstrFifoHandler;
		} else {
			*hBuffer = NULL;
			u32Error = 1;
		}
	} else {
		u32Error = 1;
	}
	return u32Error;
}