123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233 |
- /**
- * @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);
- }
|