/*++
*******************************************************************************
* Copyright (c) 1990-98 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:

   dxbstream.h

Abstract:

   A stream object represents a single dxb channel, or stream.  This file defines
	the stream object and provides access methods for the data in the stream object.

Author:

   Michael Zarns

--*/

#ifndef _DXBSTREAM_
#define _DXBSTREAM_

//
// Stream APIs
//

NTSTATUS
dxbStreamOpen( 
   IN PDXB_DEVICE_EXTENSION pExt,
   IN PIRP                  pIrp,
   IN PIO_STACK_LOCATION    pIos );

NTSTATUS
dxbStreamClose( 
   PDXB_DEVICE_EXTENSION pExt,
   PIRP                  pIrp,
   PIO_STACK_LOCATION    pIos );

NTSTATUS
dxbStreamPutMsg( 
   PDXB_DEVICE_EXTENSION pExt,
   PIRP                  pIrp,
   PIO_STACK_LOCATION    pIos );

NTSTATUS
dxbStreamGetMsg( 
   PDXB_DEVICE_EXTENSION pExt,
   PIRP                  pIrp,
   PIO_STACK_LOCATION    pIos );

NTSTATUS
dxbStreamIoctl( 
   PDXB_DEVICE_EXTENSION pExt,
   PIRP                  pIrp,
   PIO_STACK_LOCATION    pIos );

NTSTATUS
dxbStreamLink( 
   PDXB_DEVICE_EXTENSION pExt,
   PIRP                  pIrp,
   PIO_STACK_LOCATION    pIos );

NTSTATUS
dxbStreamPurge( 
   PDXB_DEVICE_EXTENSION pExt,
   PIRP                  pIrp,
   PIO_STACK_LOCATION    pIos );

NTSTATUS
dxbStreamDispatchCreditAwardMessage( 
	PDXB_STREAM_OBJECT pStream );


NTSTATUS
dxbStreamDelayedDispatch( 
	IN PDXB_STREAM_OBJECT pStream );

VOID
dxbStreamOnOpenComplete( 
	IN PDXB_DEVICE_EXTENSION pExt, 
	IN ULONG                 Chan, 
	IN LONG                  ReturnValue,
	IN UCHAR                 FixedCost );

VOID 
dxbStreamOnCloseComplete( 
	IN PDXB_DEVICE_EXTENSION pExt, 
	IN ULONG                 Channel );
VOID
dxbStreamOnCreditEvent( 
	IN PDXB_DEVICE_EXTENSION pExt, 
	IN ULONG                 Channel,
	IN ULONG                 nCredits );

VOID
dxbStreamOnLinkComplete( 
	IN PDXB_DEVICE_EXTENSION pExt, 
	IN ULONG                 Channel,
	IN LONG                  ReturnValue,
	IN LONG                  ErrorCode );

ULONG 
dxbStreamOnIoctlComplete( 
	IN PDXB_DEVICE_EXTENSION pExt, 
	IN ULONG                 Channel,
	IN ULONG                 QOut,
	IN LONG                  ReturnValue,
	IN LONG                  ErrorCode,
	IN ULONG                 cbData );

ULONG 
dxbStreamOnDataEvent( 
	IN PDXB_DEVICE_EXTENSION pExt, 
	IN ULONG                 Channel,
	IN ULONG                 QOut,
	IN ULONG                 cbCtrl,
	IN ULONG                 cbData,
	IN DS_PRIORITY           Priority );

// Stratus extras

VOID
DxbCancelStreamIo(
    IN PDXB_DEVICE_EXTENSION pExt,
    IN ULONG Channel,
    IN NTSTATUS CompletionStatus,
    BOOLEAN fCancelAll
    );

VOID
DxbCancelAdapterIo( 
    IN PDXB_DEVICE_EXTENSION pExt,
    IN NTSTATUS CompletionStatus,
    BOOLEAN fCancelAll
    );

#endif // _DXBSTREAM
