////////////////////////////////////////////////////////////////////////////////////////// // Card and Port device extension structures. // ////////////////////////////////////////////////////////////////////////////////////////// #ifndef SPX_CARD_H #define SPX_CARD_H typedef struct _CARD_DEVICE_EXTENSION *PCARD_DEV_EXT; typedef struct _PORT_DEVICE_EXTENSION *PPORT_DEV_EXT; ////////////////////////////////////////////////////////////////////////////////////////// // Common header for all the device extensions // Common to all the PDOs and FDOs (cards and ports). ////////////////////////////////////////////////////////////////////////////////////////// typedef struct _COMMON_OBJECT_DATA { PDEVICE_OBJECT DeviceObject; // A backpointer to the device object that contains this device extension. PDRIVER_OBJECT DriverObject; // Pointer to Driver Object BOOLEAN IsFDO; // A boolean to distringuish between PDO and FDO. PDEVICE_OBJECT LowerDeviceObject; // This is a pointer to the next lower device in the IRP stack. ULONG DebugLevel; ULONG PnpPowerFlags; // Plug & Play / Power flags KSPIN_LOCK PnpPowerFlagsLock; // Lock for protecting the flags BOOLEAN PowerQueryLock; // Are we currently in a query power state? LIST_ENTRY StalledIrpQueue; // List of stalled IRPs KSPIN_LOCK StalledIrpLock; // Lock for protecting stalled IRPs BOOLEAN UnstallingFlag; // Flag set if we are unstalling IRPs currently queued. #ifndef BUILD_SPXMINIPORT SYSTEM_POWER_STATE SystemState; // Current System Power State DEVICE_POWER_STATE DeviceState; // Current Device Power State #endif #ifdef WMI_SUPPORT WMILIB_CONTEXT WmiLibInfo; // WMI Information #endif } COMMON_OBJECT_DATA, *PCOMMON_OBJECT_DATA; ////////////////////////////////////////////////////////////////////////////////////////// // Common Card Configuration Data. // Information not specific to product. ////////////////////////////////////////////////////////////////////////////////////////// typedef struct _CONFIG_DATA { PHYSICAL_ADDRESS RawPhysAddr; // Raw physical address of card PHYSICAL_ADDRESS PhysAddr; // Translated Physical address of card. PUCHAR Controller; // Virtual mapped sddress of card. ULONG SpanOfController; // Size of memory used by Cord. INTERFACE_TYPE InterfaceType; // Type of card (Isa or Pci) ULONG BusNumber; // Bus number card is using. ULONG SlotNumber; // Slot number on bus. ULONG AddressSpace; // Flag used by SX ULONG OriginalVector; // Original Vector (bus relative) ULONG OriginalIrql; // Original Irql (bus relative) ULONG TrVector; // Translated Vector (system relative). KIRQL TrIrql; // Translated Irql (system relative). KINTERRUPT_MODE InterruptMode; // Interrupt mode (LevelSensitive or Latched) BOOLEAN InterruptShareable; // Interrupt shareable flag. KAFFINITY ProcessorAffinity; // Processor affintity. PKSERVICE_ROUTINE OurIsr; // Points to interrupt service routine. PVOID OurIsrContext; // Points to card device extension. PKINTERRUPT Interrupt; // Points to the interrupt object used by the card. ULONG ClockRate; // ClockRate. } CONFIG_DATA,*PCONFIG_DATA; ////////////////////////////////////////////////////////////////////////////////////////// // Common Card Device Extenstion. // Information not specific to product. ////////////////////////////////////////////////////////////////////////////////////////// typedef struct _COMMON_CARD_DEVICE_EXTENSION { COMMON_OBJECT_DATA; // Common Object Data CONFIG_DATA; // Card Config Data PDEVICE_OBJECT PDO; // Pointer to Physical Device Object UNICODE_STRING DeviceName; // Device name. ULONG CardNumber; ULONG NumberOfPorts; // Number of ports attached to card. ULONG NumPDOs; // The PDOs currently enumerated. ULONG CardType; // Defines the type of host card. PDEVICE_OBJECT AttachedPDO[PRODUCT_MAX_PORTS]; // Array of pointers to PDOs for ports attached to card. } COMMON_CARD_DEVICE_EXTENSION, *PCOMMON_CARD_DEVICE_EXTENSION; typedef struct _PORT_PERFORMANCE_STATS { SERIALPERF_STATS; // IRPs with a Major Function of IRP_MJ_WRITE ULONG WriteIrpsSubmitted; ULONG WriteIrpsCompleted; ULONG WriteIrpsCancelled; ULONG WriteIrpsTimedOut; ULONG WriteIrpsQueued; // IRPs with a Major Function of IRP_MJ_READ ULONG ReadIrpsSubmitted; ULONG ReadIrpsCompleted; ULONG ReadIrpsCancelled; ULONG ReadIrpsTimedOut; ULONG ReadIrpsQueued; // IRPs with a Major Function of IRP_MJ_FLUSH_BUFFERS ULONG FlushIrpsSubmitted; ULONG FlushIrpsCompleted; ULONG FlushIrpsCancelled; ULONG FlushIrpsQueued; // IRPs with a Major Function of IRP_MJ_DEVICE_CONTROL ULONG IoctlIrpsSubmitted; ULONG IoctlIrpsCompleted; ULONG IoctlIrpsCancelled; // IRPs with a Major Function of IRP_MJ_INTERNAL_DEVICE_CONTROL ULONG InternalIoctlIrpsSubmitted; ULONG InternalIoctlIrpsCompleted; ULONG InternalIoctlIrpsCancelled; // IRPs with a Major Function of IRP_MJ_CREATE ULONG CreateIrpsSubmitted; ULONG CreateIrpsCompleted; ULONG CreateIrpsCancelled; // IRPs with a Major Function of IRP_MJ_CLOSE ULONG CloseIrpsSubmitted; ULONG CloseIrpsCompleted; ULONG CloseIrpsCancelled; // IRPs with a Major Function of IRP_MJ_CLEANUP ULONG CleanUpIrpsSubmitted; ULONG CleanUpIrpsCompleted; ULONG CleanUpIrpsCancelled; // IRPs with a Major Function of IRP_MJ_QUERY_INFORMATION and IRP_MJ_SET_INFORMATION ULONG InfoIrpsSubmitted; ULONG InfoIrpsCompleted; ULONG InfoIrpsCancelled; } PORT_PERFORMANCE_STATS, *PPORT_PERFORMANCE_STATS; ////////////////////////////////////////////////////////////////////////////////////////// // Common Port Device Extenstion. // Information not specific to product. ////////////////////////////////////////////////////////////////////////////////////////// typedef struct _COMMON_PORT_DEVICE_EXTENSION { COMMON_OBJECT_DATA; // Common Object Data PDEVICE_OBJECT ParentFDO; // A back pointer to the bus FDO (this will be the LowerDeviceObject) PCARD_DEV_EXT pParentCardExt; // Pointer to parent card device structure UNICODE_STRING DeviceName; // Device name eg. "\Device\PortName#". UNICODE_STRING DeviceClassSymbolicName; // Device Interface Name UNICODE_STRING SerialCommEntry; // Device name in SERIALCOMM Reg key eg. "PortName#". ULONG PortNumber; // Port number. UNICODE_STRING DeviceID; // Format: bus\device (must be most specific HardwareID) UNICODE_STRING InstanceID; // Instance ID BOOLEAN UniqueInstanceID; // TRUE if InstanceID is gloablly unique, FALSE otherwise. UNICODE_STRING HardwareIDs; // Format bus\device or *PNPXXXX - meaning root enumerated UNICODE_STRING CompatibleIDs; // Compatible IDs to the Hardware ID UNICODE_STRING DevDesc; // Text describing device UNICODE_STRING DevLocation; // Text describing device location UNICODE_STRING DosName; // Dos device name "COM#" UNICODE_STRING SymbolicLinkName; // External Device Name eg."\DosDevices\COM#". BOOLEAN CreatedSymbolicLink; // Flag to indicate that a symbolic link has been created. BOOLEAN CreatedSerialCommEntry; // Flag to indicate that a reg entry has been created in "SERIALCOMM" BOOLEAN DeviceIsOpen; // Flag to indicate when the port is open ULONG SavedModemControl; // DTR/RTS signal states saved during power down FAST_MUTEX OpenMutex; // Mutex on open status #ifdef WMI_SUPPORT SERIAL_WMI_COMM_DATA WmiCommData; // WMI Comm Data SERIAL_WMI_HW_DATA WmiHwData; // WMI HW Data SERIAL_WMI_PERF_DATA WmiPerfData; // WMI Performance Data #endif // // Holds performance statistics that applications can query. // Reset on each open. Only set at device level. // PORT_PERFORMANCE_STATS PerfStats; } COMMON_PORT_DEVICE_EXTENSION, *PCOMMON_PORT_DEVICE_EXTENSION; #endif // End of SPX_CARD.H