summaryrefslogblamecommitdiffstats
path: root/private/ntos/miniport/compaq/cpqsczmp.h
blob: 7c9198dc4659ae6d5338fd6bfba46a449798121b (plain) (tree)


















































































































































































































                                                                           
/*++

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_