*
* DESCRIPTION: Implements a semaphore wait with a check to see if the
* semaphore is available immediately. If it is not, the
- * interpreter is released before waiting.
+ * interpreter is released.
*
******************************************************************************/
-acpi_status acpi_ex_system_wait_semaphore(acpi_semaphore semaphore, u16 timeout)
+acpi_status acpi_ex_system_wait_semaphore(acpi_handle semaphore, u16 timeout)
{
acpi_status status;
acpi_status status2;
- ACPI_FUNCTION_TRACE(ex_system_wait_semaphore);
+ ACPI_FUNCTION_TRACE("ex_system_wait_semaphore");
- status = acpi_os_wait_semaphore(semaphore, 1, ACPI_DO_NOT_WAIT);
+ status = acpi_os_wait_semaphore(semaphore, 1, 0);
if (ACPI_SUCCESS(status)) {
return_ACPI_STATUS(status);
}
if (status == AE_TIME) {
-
/* We must wait, so unlock the interpreter */
acpi_ex_exit_interpreter();
status2 = acpi_ex_enter_interpreter();
if (ACPI_FAILURE(status2)) {
-
- /* Report fatal error, could not acquire interpreter */
-
- return_ACPI_STATUS(status2);
- }
- }
-
- return_ACPI_STATUS(status);
-}
-
-/*******************************************************************************
- *
- * FUNCTION: acpi_ex_system_wait_mutex
- *
- * PARAMETERS: Mutex - Mutex to wait on
- * Timeout - Max time to wait
- *
- * RETURN: Status
- *
- * DESCRIPTION: Implements a mutex wait with a check to see if the
- * mutex is available immediately. If it is not, the
- * interpreter is released before waiting.
- *
- ******************************************************************************/
-
-acpi_status acpi_ex_system_wait_mutex(acpi_mutex mutex, u16 timeout)
-{
- acpi_status status;
- acpi_status status2;
-
- ACPI_FUNCTION_TRACE(ex_system_wait_mutex);
-
- status = acpi_os_acquire_mutex(mutex, ACPI_DO_NOT_WAIT);
- if (ACPI_SUCCESS(status)) {
- return_ACPI_STATUS(status);
- }
-
- if (status == AE_TIME) {
-
- /* We must wait, so unlock the interpreter */
-
- acpi_ex_exit_interpreter();
-
- status = acpi_os_acquire_mutex(mutex, timeout);
-
- ACPI_DEBUG_PRINT((ACPI_DB_EXEC,
- "*** Thread awake after blocking, %s\n",
- acpi_format_exception(status)));
-
- /* Reacquire the interpreter */
-
- status2 = acpi_ex_enter_interpreter();
- if (ACPI_FAILURE(status2)) {
-
/* Report fatal error, could not acquire interpreter */
return_ACPI_STATUS(status2);
*
* FUNCTION: acpi_ex_system_acquire_mutex
*
- * PARAMETERS: time_desc - Maximum time to wait for the mutex
+ * PARAMETERS: time_desc - The 'time to delay' object descriptor
* obj_desc - The object descriptor for this op
*
* RETURN: Status
{
acpi_status status = AE_OK;
- ACPI_FUNCTION_TRACE_PTR(ex_system_acquire_mutex, obj_desc);
+ ACPI_FUNCTION_TRACE_PTR("ex_system_acquire_mutex", obj_desc);
if (!obj_desc) {
return_ACPI_STATUS(AE_BAD_PARAMETER);
/* Support for the _GL_ Mutex object -- go get the global lock */
- if (obj_desc->mutex.os_mutex == ACPI_GLOBAL_LOCK) {
+ if (obj_desc->mutex.semaphore == acpi_gbl_global_lock_semaphore) {
status =
acpi_ev_acquire_global_lock((u16) time_desc->integer.value);
return_ACPI_STATUS(status);
}
- status = acpi_ex_system_wait_mutex(obj_desc->mutex.os_mutex,
- (u16) time_desc->integer.value);
+ status = acpi_ex_system_wait_semaphore(obj_desc->mutex.semaphore,
+ (u16) time_desc->integer.value);
return_ACPI_STATUS(status);
}
{
acpi_status status = AE_OK;
- ACPI_FUNCTION_TRACE(ex_system_release_mutex);
+ ACPI_FUNCTION_TRACE("ex_system_release_mutex");
if (!obj_desc) {
return_ACPI_STATUS(AE_BAD_PARAMETER);
/* Support for the _GL_ Mutex object -- release the global lock */
- if (obj_desc->mutex.os_mutex == ACPI_GLOBAL_LOCK) {
+ if (obj_desc->mutex.semaphore == acpi_gbl_global_lock_semaphore) {
status = acpi_ev_release_global_lock();
return_ACPI_STATUS(status);
}
- acpi_os_release_mutex(obj_desc->mutex.os_mutex);
- return_ACPI_STATUS(AE_OK);
+ status = acpi_os_signal_semaphore(obj_desc->mutex.semaphore, 1);
+ return_ACPI_STATUS(status);
}
/*******************************************************************************
{
acpi_status status = AE_OK;
- ACPI_FUNCTION_TRACE(ex_system_signal_event);
+ ACPI_FUNCTION_TRACE("ex_system_signal_event");
if (obj_desc) {
- status =
- acpi_os_signal_semaphore(obj_desc->event.os_semaphore, 1);
+ status = acpi_os_signal_semaphore(obj_desc->event.semaphore, 1);
}
return_ACPI_STATUS(status);
{
acpi_status status = AE_OK;
- ACPI_FUNCTION_TRACE(ex_system_wait_event);
+ ACPI_FUNCTION_TRACE("ex_system_wait_event");
if (obj_desc) {
status =
- acpi_ex_system_wait_semaphore(obj_desc->event.os_semaphore,
+ acpi_ex_system_wait_semaphore(obj_desc->event.semaphore,
(u16) time_desc->integer.
value);
}
acpi_status acpi_ex_system_reset_event(union acpi_operand_object *obj_desc)
{
acpi_status status = AE_OK;
- acpi_semaphore temp_semaphore;
+ void *temp_semaphore;
ACPI_FUNCTION_ENTRY();
status =
acpi_os_create_semaphore(ACPI_NO_UNIT_LIMIT, 0, &temp_semaphore);
if (ACPI_SUCCESS(status)) {
- (void)acpi_os_delete_semaphore(obj_desc->event.os_semaphore);
- obj_desc->event.os_semaphore = temp_semaphore;
+ (void)acpi_os_delete_semaphore(obj_desc->event.semaphore);
+ obj_desc->event.semaphore = temp_semaphore;
}
return (status);