/*++
                                                                                
Copyright (c) 1995 Microsoft Corporation

Module Name:

    cpumain.h

Abstract:
    
    Prototypes from cpumain.c
    
Author:

    01-Aug-1995 Ori Gershony (t-orig)

Revision History:

    29-Jan-2000  SamerA  Added CpupDoInterrupt and CpupRaiseException
--*/

#ifndef CPUMAIN_H
#define CPUMAIN_H

//
// Indicator that threads must check CpuNotify.  0 if threads don't need
// to check, nonzero if they do.
//
extern DWORD ProcessCpuNotify;

//
// Simulates an x86 software interrupt
//
NTSTATUS
CpupDoInterrupt(
    IN DWORD InterruptNumber);

//
// Raises a software exception
//
NTSTATUS
CpupRaiseException(
    IN PEXCEPTION_RECORD ExceptionRecord);

//
// Raises an exception from the cpu
//
VOID
CpuRaiseStatus(
    NTSTATUS Status
    );

//
// The following two variables are used to synchronize intel instructions
// with the LOCK prefix.  The critical section is a lot faster, but it does
// not guarantee synchronization in shared memory.  Eventually we should use
// the critical section by default, and the mutex for certain applications which
// need it (maybe get a list from the registry).
//
extern HANDLE           Wx86LockSynchMutexHandle;
extern CRITICAL_SECTION Wx86LockSynchCriticalSection;


//
// The following variable decided which synchronization object is used
//
typedef enum {USECRITICALSECTION, USEMUTEX} SYNCHOBJECTTYPE;
extern SYNCHOBJECTTYPE SynchObjectType;

#endif // CPUMAIN_H