diff options
Diffstat (limited to 'tests/aapits/osunixxf.c')
-rw-r--r-- | tests/aapits/osunixxf.c | 38 |
1 files changed, 30 insertions, 8 deletions
diff --git a/tests/aapits/osunixxf.c b/tests/aapits/osunixxf.c index f9d26f4b8..e089403a4 100644 --- a/tests/aapits/osunixxf.c +++ b/tests/aapits/osunixxf.c @@ -131,6 +131,7 @@ #include "acparser.h" #include "acdebug.h" #include "atosxfwrap.h" +#include "atosxfctrl.h" #define _COMPONENT ACPI_OS_SERVICES ACPI_MODULE_NAME ("osunixxf") @@ -579,8 +580,10 @@ AcpiOsActualCreateSemaphore ( ACPI_HANDLE *OutHandle) { + *OutHandle = (ACPI_HANDLE) malloc ((size_t) sizeof(UINT32)); + memset(*OutHandle, InitialUnits == 0 ? 0 : 1, sizeof(UINT32)); + OsxfCtrlAddQueue(*OutHandle); - *OutHandle = (ACPI_HANDLE) 1; return (AE_OK); } @@ -601,10 +604,11 @@ AcpiOsActualDeleteSemaphore ( ACPI_HANDLE Handle) { - if (!Handle) + if (!Handle || !OsxfCtrlDelQueue(Handle)) { return (AE_BAD_PARAMETER); } + free(Handle); return (AE_OK); } @@ -631,6 +635,19 @@ AcpiOsActualWaitSemaphore ( UINT16 Timeout) { + if (!Handle || !OsxfCtrlCheckQueue(Handle)) + { + return (AE_BAD_PARAMETER); + } + + while ((*(UINT32 *)Handle == 0)) + { + if ((Timeout != ACPI_WAIT_FOREVER)) + { + return (AE_TIME); + } + } + *(UINT32 *)Handle = 0; return (AE_OK); } @@ -655,6 +672,12 @@ AcpiOsActualSignalSemaphore ( UINT32 Units) { + if (!Handle || !OsxfCtrlCheckQueue(Handle)) + { + return (AE_BAD_PARAMETER); + } + + *(UINT32 *)Handle = 1; return (AE_OK); } @@ -668,11 +691,11 @@ AcpiOsActualCreateLock ( return (AcpiOsCreateSemaphore (1, 1, OutHandle)); } -void +ACPI_STATUS AcpiOsActualDeleteLock ( ACPI_HANDLE Handle) { - AcpiOsDeleteSemaphore (Handle); + return (AcpiOsDeleteSemaphore (Handle)); } @@ -763,9 +786,8 @@ AcpiOsActualExecute ( ACPI_OSD_EXEC_CALLBACK Function, void *Context) { - -// _beginthread (Function, (unsigned) 0, Context); - return (0); + pthread_t thread; + return (pthread_create(&thread, NULL, (void *) Function, Context)); } @@ -1120,7 +1142,7 @@ AcpiOsActualWriteMemory ( ACPI_THREAD_ID AcpiOsActualGetThreadId(void) { - return ((ACPI_THREAD_ID) getpid()); + return ((ACPI_THREAD_ID) pthread_self()); } |