/*++
*******************************************************************************
* 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:

	asyncreate.h

Abstract:


Author:

	Sandy Haapala

--*/
#ifndef ASYNCREATE_H
#define ASYNCREATE_H

NTSTATUS AsynDeviceCreate( IN PDEVICE_OBJECT pDeviceObject, IN PIRP pIrp );
NTSTATUS AsynDeviceClose( IN PDEVICE_OBJECT pDeviceObject, IN PIRP pIrp );
NTSTATUS AsynDeviceCleanup( IN PDEVICE_OBJECT pDeviceObject, IN PIRP pIrp );
NTSTATUS AsynDeviceFlushBuffers( IN PDEVICE_OBJECT pDeviceObject, IN PIRP pIrp );
NTSTATUS AsynResetPortSettings( IN PASYN_PORT_EXT pPortExt );

NTSTATUS AsynInitializeSdxbPort(	IN PASYN_PORT_EXT pPortExt, IN BOOLEAN fPowerStateChange );

VOID AsynClosePortImmediate( IN PASYN_PORT_EXT pPortExt );
VOID AsynCancelAllPendingIo( PASYN_PORT_EXT pPortExt, IN NTSTATUS IOStatus );
VOID AsynOnCleanupSdxb(IN HANDLE Context,IN NTSTATUS IOStatus);
VOID AsynCheckForPortFailure( PASYN_PORT_EXT pPortExt );

VOID AsynOpenOnSdxbSync( IN	PASYN_PORT_EXT	pPortExt, IN USHORT SyncSeq );
VOID AsynCloseOnSdxbSync( IN	PASYN_PORT_EXT	pPortExt, IN USHORT SyncSeq );

VOID AsynCloseTimedOut(	IN PKDPC pPortDpc, IN PASYN_PORT_EXT pPortExt, IN PVOID, IN PVOID );
VOID AsynCancelPendingIrp( IN PASYN_PORT_EXT pPortExt );
VOID AsynCloseSdxbPort( IN PASYN_PORT_EXT pPortExt );

// ISDN CC Message encapsulation size 
#define ISDN_MESSAGE_ENCAP_SIZE  4
#define MAX_CONTROL_BUFFER_SIZE (sizeof( union ISDN_primitives)+ISDN_MESSAGE_ENCAP_SIZE)

// Start high priority Rx Engine - Data should not be received at high priority so data buffer size is set to zero 
#define Start_HighPriority_RxEngine(DEVICE) \
{ \
    ULONG cbMaxControl = sizeof (union ISDN_primitives) + \
                         ISDN_MESSAGE_ENCAP_SIZE; \
\
    (DEVICE)->hRxEngine_HighPriority = \
        RxEngineStart( (DEVICE)->DsPortHandle, DEVICE, \
                        AsynOnHighPriorityData, \
                        AsynOnHighPriorityCData, \
                        AsynOnCleanupSdxb,\
                        MAX_CONTROL_BUFFER_SIZE, 0, 0, 1, DS_PRIORITY_HIGH ); \
} 

// Start low priority RxEngine for normal priority (data/control) messages. 
#define Start_LowPriority_RxEngine(DEVICE) \
{ \
    ULONG cbMaxControl = sizeof (union ISDN_primitives) + \
                         ISDN_MESSAGE_ENCAP_SIZE; \
\
    (DEVICE)->hRxEngine_LowPriority = \
        RxEngineStart( (DEVICE)->DsPortHandle, DEVICE, \
                       AsynOnData, \
                       AsynOnCData, \
                       AsynOnCleanupSdxb,\
                       MAX_CONTROL_BUFFER_SIZE, \
                       (DEVICE)->SdxbValues.PortParams.maxlen, \
                       sizeof(RX_BUF), 1, DS_PRIORITY_LOW ); \
} 

#endif
