/*++
*******************************************************************************
* Copyright (c) 1999-2000 Digi International Inc., All Rights Reserved				
* 																										
* This software contains proprietary and confidential information of Digi		
* International Inc.  By accepting transfer of this copy, Recipient agrees		
* to retain this software in confidence, to prevent disclosure to others,		
* and to make no use of this software other than that for which it was			
* delivered.  This is an unpublished copyrighted work of Digi International	
* Inc.  Except as permitted by federal law, 17 USC 117, copying is strictly	
* prohibited.																						
* 																										
* Restricted Rights Legend																		
*																										
* Use, duplication, or disclosure by the Government is subject to					
* restrictions set forth in sub-paragraph (c)(1)(ii) of The Rights in			
* Technical Data and Computer Software clause at DFARS 252.227-7031 or			
* subparagraphs (c)(1) and (2) of the Commercial Computer Software -				
* Restricted Rights at 48 CFR 52.227-19, as applicable.								
*																										
* Digi International Inc. 11001 Bren Road East, Minnetonka, MN 55343				
*																										
*******************************************************************************

Module Name:

   AsynWait.h

Abstract:


Author:
	Sandy Haapala

--*/
#ifndef ASYNWAIT_H
#define ASYNWAIT_H

typedef struct 
{
	DIGI_SPINLOCK	Lock; 			// This Lock protects all members of the Wait struct.
	PIRP				pPendingIrp;	// IOCTL_SERIAL_WAIT_ON_MASK irp. There can be only one.
	ULONG       	Mask;				// bitmask of events to monitor. Set via the IOCTL_SERIAL_SET_WAIT_MASK request.
	ULONG				History;			// bitmask of the monitored events (Mask above) which have actually occurred since the
											//   last IOCTL_SERIAL_WAIT_ON_MASK IRP was completed.
} ASYN_WAIT, *PASYN_WAIT;

VOID AsynCancelWait( IN PDEVICE_OBJECT pDeviceObject, IN PIRP pIrp );      
VOID AsynCancelWaitIrp( IN PASYN_PORT_EXT pPortExt );
VOID AsynSatisfyWait( IN PASYN_PORT_EXT pExt, IN ULONG EventReason, BOOLEAN fCompleteWait );
NTSTATUS AsynSetWaitMask( IN PASYN_PORT_EXT pPortExt, IN PIRP pIrp );
NTSTATUS AsynGetWaitMask( IN PASYN_PORT_EXT pPortExt, IN PIRP pIrp );
NTSTATUS AsynWaitOnMask( IN PASYN_PORT_EXT pPortExt, IN PIRP pIrp );


#endif
