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

   Fdo.h

Abstract:

   This DSTREAMS provider FDO Pnp/Power Management Header.

Author:

   Jeff Romatoski

--*/

#ifndef _FDO_H_
#define _FDO_H_

#define INSTANCE_BUFFER_LENGTH		8
#define DEVICENAME_BUFFER_LENGTH	64


// A Streams type Device Extension
typedef struct PNP_FDO_EXTENSION
{

	PNP_DEVICE_TYPE			DeviceType;			// Type (should be the first field in the structure)
	PDEVICE_OBJECT			pPdo;				// Lower Level PDO
	PDEVICE_OBJECT			pDriverFdo;			// DSTREAMS Driver FDO
	DEVICE_POWER_STATE		PowerState;			// PNP Power state: D0 (on) or D3 (off).
	PNP_STATE				PnpState;

	UNICODE_STRING			DeviceName;
	WCHAR					DeviceNameBuffer[DEVICENAME_BUFFER_LENGTH];
	UNICODE_STRING			Instance;
	WCHAR					InstanceBuffer[INSTANCE_BUFFER_LENGTH];

	PDEVICE_OBJECT			pNextDeviceObject;	// Could be different than Pdo if filter 
												// drivers are present.  Forward Irps to this.
	LIST_ENTRY				ChildListHead;		// List of child PDOs.
	DIGI_SPINLOCK			ChildListLock;		// FDO Lock for the PDO Child List

	DIGI_RESOURCE_LIST		PowerResources;		// Copy of resources, used on SET_POWER StartDevice
	
	BOOLEAN					fSpoof;				// Are we spoofing startup?  If so, fail Create requests!

} PNP_FDO_EXTENSION, *PPNP_FDO_EXTENSION, **PPPNP_FDO_EXTENSION;


//
// Prototypes
//

NTSTATUS
PnpFdoStartDevice(
	IN	PPNP_FDO_EXTENSION	pfdoExtension, 
	IN	PIRP				pIrp, 
	IN	PIO_STACK_LOCATION  pIos
	);

NTSTATUS
PnpFdoStopDevice(
	IN	PPNP_FDO_EXTENSION	pfdoExtension, 
	IN	PIRP				pIrp, 
	IN	PIO_STACK_LOCATION  pIos
	);

#endif /* _FDO_H_ */

