We now also use a mutex in acpi. Thanks Ingo for the mutex timeout function.

This fix some warnings mentioned in #4722.



git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@34563 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Clemens Zeidler 2009-12-08 18:25:11 +00:00
parent 9dc3c57ac7
commit f0ab4adfc9
2 changed files with 71 additions and 7 deletions

View File

@ -119,19 +119,20 @@
#include "acgcc.h"
#include <SupportDefs.h>
#include "lock.h"
/* Host-dependent types and defines for user- and kernel-space ACPICA */
#define ACPI_USE_SYSTEM_CLIBRARY
#define ACPI_USE_STANDARD_HEADERS
/* TODO: add mutex or benaphore code
we don't use mutex atm as it doesn't support timeout.
define ACPI_MUTEX_TYPE ACPI_OSL_MUTEX
define ACPI_MUTEX mutex *
*/
#define ACPI_MUTEX_TYPE ACPI_OSL_MUTEX
#define ACPI_MUTEX mutex *
#define ACPI_USE_NATIVE_DIVIDE

View File

@ -654,7 +654,7 @@ void
AcpiOsDeleteLock(ACPI_SPINLOCK handle)
{
DEBUG_FUNCTION();
free(handle);
free((void*)handle);
}
@ -1259,3 +1259,66 @@ AcpiOsReleaseGlobalLock(uint32 *lock)
} while (*lock == old);
return (old & GL_BIT_PENDING);
}
ACPI_STATUS
AcpiOsCreateMutex(ACPI_MUTEX* outHandle)
{
*outHandle = (ACPI_MUTEX) malloc(sizeof(mutex));
DEBUG_FUNCTION_F("result: %p", *outHandle);
if (*outHandle == NULL)
return AE_NO_MEMORY;
mutex_init(*outHandle, "acpi mutex");
return AE_OK;
}
void
AcpiOsDeleteMutex(ACPI_MUTEX handle)
{
DEBUG_FUNCTION_F("mutex: %ld", handle);
mutex_destroy(handle);
free((void*)handle);
}
ACPI_STATUS
AcpiOsAcquireMutex(ACPI_MUTEX handle, UINT16 timeout)
{
ACPI_STATUS result = AE_OK;
DEBUG_FUNCTION_VF("mutex: %ld; timeout: %u", handle, timeout);
if (timeout == ACPI_WAIT_FOREVER) {
result = mutex_lock_with_timeout(handle, 0, 0)
== B_OK ? AE_OK : AE_BAD_PARAMETER;
} else {
switch (mutex_lock_with_timeout(handle, B_RELATIVE_TIMEOUT,
(bigtime_t)timeout * 1000)) {
case B_OK:
result = AE_OK;
break;
case B_INTERRUPTED:
case B_TIMED_OUT:
case B_WOULD_BLOCK:
result = AE_TIME;
break;
case B_BAD_VALUE:
default:
result = AE_BAD_PARAMETER;
break;
}
}
DEBUG_FUNCTION_VF("mutex: %ld; timeout: %u result: %lu",
handle, timeout, (uint32)result);
return result;
}
void
AcpiOsReleaseMutex(ACPI_MUTEX handle)
{
DEBUG_FUNCTION_F("mutex: %p", handle);
mutex_unlock(handle);
}