summaryrefslogtreecommitdiffstats
path: root/private/ntos/miniport/compaq/cpqsczmp.h
blob: 7c9198dc4659ae6d5338fd6bfba46a449798121b (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
/*++

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_