diff options
Diffstat (limited to 'drivers/net/npe/IxOsalOsSemaphore.c')
| -rw-r--r-- | drivers/net/npe/IxOsalOsSemaphore.c | 233 | 
1 files changed, 233 insertions, 0 deletions
| diff --git a/drivers/net/npe/IxOsalOsSemaphore.c b/drivers/net/npe/IxOsalOsSemaphore.c new file mode 100644 index 000000000..443aefd4f --- /dev/null +++ b/drivers/net/npe/IxOsalOsSemaphore.c @@ -0,0 +1,233 @@ +/** + * @file IxOsalOsSemaphore.c (eCos) + * + * @brief Implementation for semaphore and mutex. + * + * + * @par + * IXP400 SW Release version 1.5 + * + * -- Copyright Notice -- + * + * @par + * Copyright 2001-2005, Intel Corporation. + * All rights reserved. + * + * @par + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + *    notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + *    notice, this list of conditions and the following disclaimer in the + *    documentation and/or other materials provided with the distribution. + * 3. Neither the name of the Intel Corporation nor the names of its contributors + *    may be used to endorse or promote products derived from this software + *    without specific prior written permission. + * + * @par + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * @par + * -- End of Copyright Notice -- + */ + +#include "IxOsal.h" +#include "IxNpeMhReceive_p.h" + +/* Define a large number */ +#define IX_OSAL_MAX_LONG (0x7FFFFFFF) + +/* Max timeout in MS, used to guard against possible overflow */ +#define IX_OSAL_MAX_TIMEOUT_MS (IX_OSAL_MAX_LONG/HZ) + + +PUBLIC IX_STATUS +ixOsalSemaphoreInit (IxOsalSemaphore * sid, UINT32 start_value) +{ +    diag_printf("%s called\n", __FUNCTION__); +    return IX_SUCCESS; +} + +/** + * DESCRIPTION: If the semaphore is 'empty', the calling thread is blocked. + *              If the semaphore is 'full', it is taken and control is returned + *              to the caller. If the time indicated in 'timeout' is reached, + *              the thread will unblock and return an error indication. If the + *              timeout is set to 'IX_OSAL_WAIT_NONE', the thread will never block; + *              if it is set to 'IX_OSAL_WAIT_FOREVER', the thread will block until + *              the semaphore is available. + * + * + */ + + +PUBLIC IX_STATUS +ixOsalSemaphoreWait (IxOsalOsSemaphore * sid, INT32 timeout) +{ +    diag_printf("%s called\n", __FUNCTION__); +    return IX_SUCCESS; +} + +/* + * Attempt to get semaphore, return immediately, + * no error info because users expect some failures + * when using this API. + */ +PUBLIC IX_STATUS +ixOsalSemaphoreTryWait (IxOsalSemaphore * sid) +{ +    diag_printf("%s called\n", __FUNCTION__); +    return IX_FAIL; +} + +/** + * + * DESCRIPTION: This function causes the next available thread in the pend queue + *              to be unblocked. If no thread is pending on this semaphore, the + *              semaphore becomes 'full'. + */ +PUBLIC IX_STATUS +ixOsalSemaphorePost (IxOsalSemaphore * sid) +{ +    diag_printf("%s called\n", __FUNCTION__); +    return IX_SUCCESS; +} + +PUBLIC IX_STATUS +ixOsalSemaphoreGetValue (IxOsalSemaphore * sid, UINT32 * value) +{ +    diag_printf("%s called\n", __FUNCTION__); +    return IX_FAIL; +} + +PUBLIC IX_STATUS +ixOsalSemaphoreDestroy (IxOsalSemaphore * sid) +{ +    diag_printf("%s called\n", __FUNCTION__); +    return IX_FAIL; +} + +/**************************** + *    Mutex + ****************************/ + +static void drv_mutex_init(IxOsalMutex *mutex) +{ +	*mutex = 0; +} + +static void drv_mutex_destroy(IxOsalMutex *mutex) +{ +	*mutex = -1; +} + +static int drv_mutex_trylock(IxOsalMutex *mutex) +{ +	int result = TRUE; + +	if (*mutex == 1) +		result = FALSE; + +	return result; +} + +static void drv_mutex_unlock(IxOsalMutex *mutex) +{ +	if (*mutex == 1) +		printf("Trying to unlock unlocked mutex!"); + +	*mutex = 0; +} + +PUBLIC IX_STATUS +ixOsalMutexInit (IxOsalMutex * mutex) +{ +    drv_mutex_init(mutex); +    return IX_SUCCESS; +} + +PUBLIC IX_STATUS +ixOsalMutexLock (IxOsalMutex * mutex, INT32 timeout) +{ +    int tries; + +    if (timeout == IX_OSAL_WAIT_NONE) { +	if (drv_mutex_trylock(mutex)) +	    return IX_SUCCESS; +	else +	    return IX_FAIL; +    } + +    tries = (timeout * 1000) / 50; +    while (1) { +	if (drv_mutex_trylock(mutex)) +	    return IX_SUCCESS; +	if (timeout != IX_OSAL_WAIT_FOREVER && tries-- <= 0) +	    break; +	udelay(50); +    } +    return IX_FAIL; +} + +PUBLIC IX_STATUS +ixOsalMutexUnlock (IxOsalMutex * mutex) +{ +    drv_mutex_unlock(mutex); +    return IX_SUCCESS; +} + +/* + * Attempt to get mutex, return immediately, + * no error info because users expect some failures + * when using this API. + */ +PUBLIC IX_STATUS +ixOsalMutexTryLock (IxOsalMutex * mutex) +{ +    if (drv_mutex_trylock(mutex)) +	return IX_SUCCESS; +    return IX_FAIL; +} + +PUBLIC IX_STATUS +ixOsalMutexDestroy (IxOsalMutex * mutex) +{ +    drv_mutex_destroy(mutex); +    return IX_SUCCESS; +} + +PUBLIC IX_STATUS +ixOsalFastMutexInit (IxOsalFastMutex * mutex) +{ +    return ixOsalMutexInit(mutex); +} + +PUBLIC IX_STATUS ixOsalFastMutexTryLock(IxOsalFastMutex *mutex) +{ +    return ixOsalMutexTryLock(mutex); +} + + +PUBLIC IX_STATUS +ixOsalFastMutexUnlock (IxOsalFastMutex * mutex) +{ +    return ixOsalMutexUnlock(mutex); +} + +PUBLIC IX_STATUS +ixOsalFastMutexDestroy (IxOsalFastMutex * mutex) +{ +    return ixOsalMutexDestroy(mutex); +} |