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:
parent
9dc3c57ac7
commit
f0ab4adfc9
|
@ -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
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue