212 lines
5.3 KiB
C
212 lines
5.3 KiB
C
/*++
|
|
|
|
Copyright Compaq Computer Corporation 1994. All Rights Reserved.
|
|
|
|
|
|
Module Name:
|
|
|
|
CPQSCZMP.H
|
|
|
|
|
|
Abstract:
|
|
|
|
This file contains data structures and definitions used by SCSI miniport
|
|
drivers that support Compaq Monitoring & Performance.
|
|
|
|
|
|
Author:
|
|
|
|
Michael E. McGowen
|
|
|
|
|
|
Revision History:
|
|
|
|
1.00 MEM 04/01/94 Initial release.
|
|
1.01 MEM 07/01/94 Added additional fields to HBA configuration.
|
|
1.02 MEM 08/08/94 Changed IOCTL signature.
|
|
|
|
|
|
-- */
|
|
|
|
|
|
|
|
/**************************************************************************
|
|
*
|
|
* DATA TYPE PREFIX (Hungarian notation)
|
|
*
|
|
* f : BOOL (flag)
|
|
* ch : CHAR (signed 8 bit)
|
|
* s : SHORT (signed 16 bit)
|
|
* l : LONG (signed 32 bit)
|
|
* uch : UCHAR (unsigned 8 bit)
|
|
* us : USHORT (unsigned 16 bit)
|
|
* ul : ULONG (unsigned 32 bit)
|
|
* b : BYTE (unsigned 8 bit)
|
|
* sz : CHAR[] (ASCIIZ array of char)
|
|
* fb : UCHAR (bitmapped byte of flags)
|
|
* fs : USHORT (bitmapped short of flags)
|
|
* fl : ULONG (bitmapped long of flags)
|
|
* r : REAL (real number, single precision 32bit)
|
|
* rd : DOUBLE (real number, double precision 64bit)
|
|
* pfn : pointer to function
|
|
* x : x coordinate
|
|
* y : y coordinate
|
|
* sel : Segment selector
|
|
* p : Pointer (pch, pus, psz, ...)
|
|
* np : near pointer...
|
|
* a : array (ach, aus, asz, ...)
|
|
* i : index to array (ich, ius, ...)
|
|
* c : count (cb, cus, ...)
|
|
* d : delta ,difference (dx, dy, ...)
|
|
* h : handle
|
|
* id : ID
|
|
* g : Global variable
|
|
*
|
|
*************************************************************************/
|
|
|
|
#ifndef _INCL_CPQSCZMP_H_
|
|
#define _INCL_CPQSCZMP_H_
|
|
|
|
|
|
// Common defines
|
|
|
|
#define MAX_DRIVER_DESC_SIZE 81
|
|
#define MAX_DRIVER_NAME_SIZE 13
|
|
|
|
|
|
// HBA I/O Bus Types
|
|
|
|
#define ISA_BUS 1
|
|
#define EISA_BUS 2
|
|
#define PCI_BUS 3
|
|
#define PCMCIA_BUS 4
|
|
|
|
|
|
// IOCTL defines supporting Compaq M&P
|
|
|
|
#define CPQ_SCSI_IOCTL_SIGNATURE "SCSIM&P"
|
|
#define CPQ_SCSI_IOCTL_TIMEOUT 10
|
|
|
|
|
|
// IOCTL control codes
|
|
|
|
#define CPQ_SCSI_IOCTL_GET_DRIVER_INFO 1
|
|
#define CPQ_SCSI_IOCTL_GET_HBA_CONFIG 2
|
|
#define CPQ_SCSI_IOCTL_GET_SCSI_BUS_DATA 3
|
|
#define CPQ_SCSI_IOCTL_GET_DEVICE_DATA 4
|
|
#define CPQ_SCSI_IOCTL_GET_DEVICE_ERRORS 5
|
|
#define CPQ_SCSI_IOCTL_GET_AND_CLEAR_DEVICE_DATA 6
|
|
#define CPQ_SCSI_IOCTL_GET_AND_CLEAR_DEVICE_ERRORS 7
|
|
|
|
|
|
// IOCTL return codes
|
|
|
|
#define CPQ_SCSI_ERR_OK 0
|
|
#define CPQ_SCSI_ERR_FAILED 1
|
|
#define CPQ_SCSI_ERR_BAD_CNTL_CODE 2
|
|
#define CPQ_SCSI_ERR_REVISION 3
|
|
#define CPQ_SCSI_ERR_MORE_DATA 4
|
|
#define CPQ_SCSI_ERR_INVALID_DEVICE 5
|
|
|
|
|
|
// Macros
|
|
|
|
#define INCREMENT_ULONG(ulValue) \
|
|
{ \
|
|
if (ulValue < 0xFFFFFFFE) \
|
|
ulValue++; \
|
|
} \
|
|
|
|
|
|
// Data structures
|
|
|
|
typedef struct _SCSI_MINIPORT_DRIVER_INFO {
|
|
CHAR szDriverName[MAX_DRIVER_NAME_SIZE];
|
|
CHAR szDriverDescription[MAX_DRIVER_DESC_SIZE];
|
|
SHORT sDriverMajorRev;
|
|
SHORT sDriverMinorRev;
|
|
BOOLEAN fMandPSupported;
|
|
} SCSI_MINIPORT_DRIVER_INFO, *PSCSI_MINIPORT_DRIVER_INFO;
|
|
|
|
typedef struct _PCI_ADDRESS {
|
|
BYTE bPCIBusNumber;
|
|
BYTE bDeviceNumber;
|
|
BYTE bFunctionNumber;
|
|
BYTE bReserved;
|
|
} PCI_ADDRESS, *PPCI_ADDRESS;
|
|
|
|
typedef union _IO_BUS_DATA {
|
|
USHORT usEisaSlot;
|
|
PCI_ADDRESS PciAddress;
|
|
} IO_BUS_DATA, *PIO_BUS_DATA;
|
|
|
|
typedef struct _HBA_CONFIGURATION {
|
|
ULONG ulBaseIOAddress;
|
|
BYTE bHBAModel;
|
|
BYTE bHBAIoBusType;
|
|
IO_BUS_DATA HBAIoBusData;
|
|
BYTE bNumScsiBuses;
|
|
BYTE abInitiatorBusId[8];
|
|
CHAR szFWVers[5];
|
|
CHAR szSWVers[5];
|
|
CHAR szSerialNumber[16];
|
|
ULONG ulBoardID;
|
|
BYTE bBoardRevision;
|
|
BOOLEAN fWideSCSI;
|
|
} HBA_CONFIGURATION, *PHBA_CONFIGURATION;
|
|
|
|
typedef struct _DEVICE_DATA {
|
|
SCSI_ADDRESS DeviceAddress;
|
|
CPQ_SCSI_DEVICE DeviceData;
|
|
} DEVICE_DATA, *PDEVICE_DATA;
|
|
|
|
typedef struct _DEVICE_ERRORS {
|
|
ULONG ulHardReadErrs;
|
|
ULONG ulHardWriteErrs;
|
|
ULONG ulEccCorrReads;
|
|
ULONG ulRecvReadErrs;
|
|
ULONG ulRecvWriteErrs;
|
|
ULONG ulSeekErrs;
|
|
ULONG ulTimeouts;
|
|
} DEVICE_ERRORS, *PDEVICE_ERRORS;
|
|
|
|
typedef struct _DEVICE_ERROR_DATA {
|
|
SCSI_ADDRESS DeviceAddress;
|
|
DEVICE_ERRORS DeviceErrors;
|
|
} DEVICE_ERROR_DATA, *PDEVICE_ERROR_DATA;
|
|
|
|
|
|
// IOCTL buffer data structures
|
|
|
|
typedef struct _DRIVER_INFO_BUFFER {
|
|
SRB_IO_CONTROL IoctlHeader;
|
|
SCSI_MINIPORT_DRIVER_INFO DriverInfo;
|
|
} DRIVER_INFO_BUFFER, *PDRIVER_INFO_BUFFER;
|
|
|
|
typedef struct _HBA_CONFIGURATION_BUFFER {
|
|
SRB_IO_CONTROL IoctlHeader;
|
|
HBA_CONFIGURATION HBAConfiguration;
|
|
} HBA_CONFIGURATION_BUFFER, *PHBA_CONFIGURATION_BUFFER;
|
|
|
|
typedef struct _SCSI_BUS_DATA_BUFFER {
|
|
SRB_IO_CONTROL IoctlHeader;
|
|
CPQ_SCSI_CNTLR ScsiBus;
|
|
} SCSI_BUS_DATA_BUFFER, *PSCSI_BUS_DATA_BUFFER;
|
|
|
|
typedef struct _DEVICE_DATA_BUFFER {
|
|
SRB_IO_CONTROL IoctlHeader;
|
|
DEVICE_DATA ScsiDevice;
|
|
} DEVICE_DATA_BUFFER, *PDEVICE_DATA_BUFFER;
|
|
|
|
typedef struct _DEVICE_ERROR_DATA_BUFFER {
|
|
SRB_IO_CONTROL IoctlHeader;
|
|
DEVICE_ERROR_DATA ScsiDevice;
|
|
} DEVICE_ERROR_DATA_BUFFER, *PDEVICE_ERROR_DATA_BUFFER;
|
|
|
|
typedef struct _MORE_DATA_BUFFER {
|
|
SRB_IO_CONTROL IoctlHeader;
|
|
ULONG ulExpectedSize;
|
|
} MORE_DATA_BUFFER, *PMORE_DATA_BUFFER;
|
|
|
|
#endif // _INCL_CPQSCZMP_H_
|