//
//  The following are the types of devices the Atalk driver will open
//
//  WARNING:
//  Note that the ordering of the below is very important in
//  ATALK.C's DriverEntry routine, where it is assumed that the order
//  of the device names in their array corresponds to the order of types here
//

#define  ATALK_NODEVICES   5
typedef enum   {
   ATALK_DEVICE_DDP = 0,
   ATALK_DEVICE_ATP,
   ATALK_DEVICE_ADSP,
   ATALK_DEVICE_ASP,
   ATALK_DEVICE_PAP,

   //
   //   The following device type is used only for the tdi action dispatch.
   //   It *should not* be included in the ATALK_NODEVICES count.
   //

   ATALK_DEVICE_ANY

} ATALK_DEVICE_TYPE;

//
//  Atalk Device Context
//

typedef struct _ATALK_DEVICE_CONTEXT {

   CSHORT   Type;
   USHORT   Size;

   ATALK_DEVICE_TYPE DeviceType;

   //
   //   Reference count
   //   BUGBUG: NOT USED CURRENTLY
   //

   ULONG    ReferenceCount;

   //
   //   Provider info and provider statistics.
   //

   TDI_PROVIDER_INFO    ProviderInfo;
   TDI_PROVIDER_STATISTICS  ProviderStatistics;

} ATALK_DEVICE_CONTEXT, *PATALK_DEVICE_CONTEXT;


//
//  Atalk device object
//

typedef struct _ATALK_DEVICE_OBJECT {

   DEVICE_OBJECT DeviceObject;
   ATALK_DEVICE_CONTEXT Context;

} ATALK_DEVICE_OBJECT, *PATALK_DEVICE_OBJECT;

#define ATALK_DEVICE_EXTENSION_LENGTH (sizeof(ATALK_DEVICE_OBJECT) - sizeof(DEVICE_OBJECT))

typedef  enum  {
   STATE_NO_ADAPTER,
   STATE_ADAPTER_SPECIFIED,
   STATE_BOUND,
   STATE_UNBINDING,
   STATE_UNBOUND
} PORT_STATE;