/** @file
  Emulator Thunk to abstract OS services from pure EFI code

  Copyright (c) 2010 - 2011, Apple Inc. All rights reserved.<BR>
  Copyright (c) 2011, Intel Corporation. All rights reserved.<BR>

  SPDX-License-Identifier: BSD-2-Clause-Patent

**/

#pragma once

typedef struct _EMU_THREAD_THUNK_PROTOCOL EMU_THREAD_THUNK_PROTOCOL;

typedef
UINTN
(EFIAPI *THREAD_THUNK_MUTEX_LOCK)(
  IN VOID *Mutex
  );

typedef
UINTN
(EFIAPI *THREAD_THUNK_MUTEX_UNLOCK)(
  IN VOID *Mutex
  );

typedef
UINTN
(EFIAPI *THREAD_THUNK_MUTEX_TRY_LOCK)(
  IN VOID *Mutex
  );

typedef
VOID *
(EFIAPI *THREAD_THUNK_MUTEX_INIT)(
  IN VOID
  );

typedef
UINTN
(EFIAPI *THREAD_THUNK_MUTEX_DISTROY)(
  IN VOID *Mutex
  );

typedef
VOID *
(EFIAPI *THREAD_THUNK_THREAD_ENTRY)(
  IN  VOID *Context
  );

typedef
UINTN
(EFIAPI *THREAD_THUNK_CREATE_THREAD)(
  IN  VOID                      *Thread,
  IN  VOID                      *Attribute,
  IN  THREAD_THUNK_THREAD_ENTRY Start,
  IN  VOID                      *Context
  );

typedef
VOID
(EFIAPI *THREAD_THUNK_EXIT_THREAD)(
  IN VOID *ValuePtr
  );

typedef
UINTN
(EFIAPI *THREAD_THUNK_SELF)(
  VOID
  );

struct _EMU_THREAD_THUNK_PROTOCOL {
  THREAD_THUNK_MUTEX_LOCK        MutexLock;
  THREAD_THUNK_MUTEX_UNLOCK      MutexUnlock;
  THREAD_THUNK_MUTEX_TRY_LOCK    MutexTryLock;
  THREAD_THUNK_MUTEX_INIT        MutexInit;
  THREAD_THUNK_MUTEX_DISTROY     MutexDistroy;
  THREAD_THUNK_CREATE_THREAD     CreateThread;
  THREAD_THUNK_EXIT_THREAD       ExitThread;
  THREAD_THUNK_SELF              Self;
};

extern EFI_GUID  gEmuThreadThunkProtocolGuid;
