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


#if !defined(HWRESOURCES_H)

#define HWRESOURCES_H
#if _MSC_VER >= 1000
#pragma once
#endif // _MSC_VER >= 1000


struct SHWResources
{
   // NOTE:
   //    Due to difficulties in actually #including header files from the DDK,
   //    the following enum typedef was copied from NTDDK.H!

   typedef enum
   {
       InterfaceTypeUndefined = -1,
       Internal,
       Isa,
       Eisa,
       MicroChannel,
       TurboChannel,
       PCIBus,
       VMEBus,
       NuBus,
       PCMCIABus,
       CBus,
       MPIBus,
       MPSABus,
       ProcessorInternal,
       InternalPowerBus,
       PNPISABus,
       MaximumInterfaceType
   }
   INTERFACE_TYPE;

   typedef struct
   {
      DWORD dwInterruptNumber;
      DWORD dwIOBaseAddress;
      DWORD dwMemoryMappedBaseAddress;
   }
   ISASPECIFIC;

   typedef struct
   {
      DWORD dwPciID;
      DWORD dwSubPciID;
      DWORD dwVendorID;
      DWORD dwSubVendorID;
      DWORD dwBusNumber;
      DWORD dwSlotNumber;
      DWORD dwRevision;
   }
   PCISPECIFIC;

   typedef union
   {
      ISASPECIFIC	Isa;
      PCISPECIFIC	Pci;
   }
   BUSSPECIFIC;

   SHWResources()
   {
      eBusType = InterfaceTypeUndefined;
      dwBusNumber = 0;
      memset(&busSpecific, 0, sizeof(busSpecific));
   }
   ~SHWResources() {}

   INTERFACE_TYPE eBusType;
   DWORD dwBusNumber;
   BUSSPECIFIC busSpecific;

   BOOL Get(HKEY const hKey);
   BOOL Set(HKEY const hKey);
   BOOL IsIsaOrEisaBus(void){ return(eBusType == Isa || eBusType == Eisa)?TRUE:FALSE;}
   BOOL IsPciBus(void){ return(eBusType == PCIBus)?TRUE:FALSE;}
};

#endif // HWRESOURCES_H
