kernel: Add D_MPSAFE to the ops of mfi(4), mrsas(4) and twa(4).
[dragonfly.git] / sys / dev / raid / asr / sys_info.h
1 /*-
2  * Copyright (c) 1996-1999 Distributed Processing Technology Corporation
3  * All rights reserved.
4  *
5  * Redistribution and use in source form, with or without modification, are
6  * permitted provided that redistributions of source code must retain the
7  * above copyright notice, this list of conditions and the following disclaimer.
8  *
9  * This software is provided `as is' by Distributed Processing Technology and
10  * any express or implied warranties, including, but not limited to, the
11  * implied warranties of merchantability and fitness for a particular purpose,
12  * are disclaimed. In no event shall Distributed Processing Technology be
13  * liable for any direct, indirect, incidental, special, exemplary or
14  * consequential damages (including, but not limited to, procurement of
15  * substitute goods or services; loss of use, data, or profits; or business
16  * interruptions) however caused and on any theory of liability, whether in
17  * contract, strict liability, or tort (including negligence or otherwise)
18  * arising in any way out of the use of this driver software, even if advised
19  * of the possibility of such damage.
20  *
21  * $FreeBSD: src/sys/dev/asr/sys_info.h,v 1.9 2005/01/06 01:42:29 imp Exp $
22  */
23
24 #ifndef         __SYS_INFO_H
25 #define         __SYS_INFO_H
26
27 /*File - SYS_INFO.H
28  ****************************************************************************
29  *
30  *Description:
31  *
32  *      This file contains structure definitions for the OS dependent
33  *layer system information buffers.
34  *
35  *Copyright Distributed Processing Technology, Corp.
36  *        140 Candace Dr.
37  *        Maitland, Fl. 32751   USA
38  *        Phone: (407) 830-5522  Fax: (407) 260-5366
39  *        All Rights Reserved
40  *
41  *Author:       Don Kemper
42  *Date:         5/10/94
43  *
44  *Editors:
45  *
46  *Remarks:
47  *
48  *
49  *****************************************************************************/
50
51
52 /*Include Files ------------------------------------------------------------- */
53
54 #include         "osd_util.h"
55
56 #ifndef NO_PACK
57 #if defined(_DPT_AIX)
58 #pragma options align=packed
59 #else
60 #pragma pack(1)
61 #endif  /* aix */
62 #endif  /* no unpack */
63
64
65 /*struct - driveParam_S - start
66  *===========================================================================
67  *
68  *Description:
69  *
70  *      This structure defines the drive parameters seen during
71  *booting.
72  *
73  *---------------------------------------------------------------------------*/
74
75 #ifdef __cplusplus
76    struct driveParam_S {
77 #else
78    typedef struct  {
79 #endif
80
81    uSHORT       cylinders;      /* Upto 1024 */
82    uCHAR        heads;          /* Upto 255 */
83    uCHAR        sectors;        /* Upto 63 */
84
85 #ifdef __cplusplus
86
87 /*---------- Portability Additions ----------- in sp_sinfo.cpp */
88 #ifdef DPT_PORTABLE
89         uSHORT          netInsert(dptBuffer_S *buffer);
90         uSHORT          netExtract(dptBuffer_S *buffer);
91 #endif /* DPT PORTABLE */
92 /*--------------------------------------------*/
93
94    };
95 #else
96    } driveParam_S;
97 #endif
98 /*driveParam_S - end */
99
100
101 /*struct - sysInfo_S - start
102  *===========================================================================
103  *
104  *Description:
105  *
106  *      This structure defines the command system information that
107  *should be returned by every OS dependent layer.
108  *
109  *---------------------------------------------------------------------------*/
110
111 /*flags - bit definitions */
112 #define SI_CMOS_Valid           0x0001
113 #define SI_NumDrivesValid       0x0002
114 #define SI_ProcessorValid       0x0004
115 #define SI_MemorySizeValid      0x0008
116 #define SI_DriveParamsValid     0x0010
117 #define SI_SmartROMverValid     0x0020
118 #define SI_OSversionValid       0x0040
119 #define SI_OSspecificValid      0x0080  /* 1 if OS structure returned */
120 #define SI_BusTypeValid         0x0100
121
122 #define SI_ALL_VALID            0x0FFF  /* All Std SysInfo is valid */
123 #define SI_NO_SmartROM          0x8000
124
125 /*busType - definitions */
126 #define SI_ISA_BUS      0x00
127 #define SI_MCA_BUS      0x01
128 #define SI_EISA_BUS     0x02
129 #define SI_PCI_BUS      0x04
130
131 #ifdef __cplusplus
132    struct sysInfo_S {
133 #else
134    typedef struct  {
135 #endif
136
137    uCHAR        drive0CMOS;             /* CMOS Drive 0 Type */
138    uCHAR        drive1CMOS;             /* CMOS Drive 1 Type */
139    uCHAR        numDrives;              /* 0040:0075 contents */
140    uCHAR        processorFamily;        /* Same as DPTSIG's definition */
141    uCHAR        processorType;          /* Same as DPTSIG's definition */
142    uCHAR        smartROMMajorVersion;
143    uCHAR        smartROMMinorVersion;   /* SmartROM version */
144    uCHAR        smartROMRevision;
145    uSHORT       flags;                  /* See bit definitions above */
146    uSHORT       conventionalMemSize;    /* in KB */
147    uLONG        extendedMemSize;        /* in KB */
148    uLONG        osType;                 /* Same as DPTSIG's definition */
149    uCHAR        osMajorVersion;
150    uCHAR        osMinorVersion;         /* The OS version */
151    uCHAR        osRevision;
152 #ifdef _SINIX_ADDON
153    uCHAR        busType;                /* See defininitions above */
154    uSHORT       osSubRevision;
155    uCHAR        pad[2];                 /* For alignment */
156 #else
157    uCHAR        osSubRevision;
158    uCHAR        busType;                /* See defininitions above */
159    uCHAR        pad[3];                 /* For alignment */
160 #endif
161    driveParam_S drives[16];             /* SmartROM Logical Drives */
162
163 #ifdef __cplusplus
164
165 /*---------- Portability Additions ----------- in sp_sinfo.cpp */
166 #ifdef DPT_PORTABLE
167         uSHORT          netInsert(dptBuffer_S *buffer);
168         uSHORT          netExtract(dptBuffer_S *buffer);
169 #endif /* DPT PORTABLE */
170 /*--------------------------------------------*/
171
172    };
173 #else
174    } sysInfo_S;
175 #endif
176 /*sysInfo_S - end */
177
178
179 /*struct - DOS_Info_S - start
180  *===========================================================================
181  *
182  *Description:
183  *
184  *      This structure defines the system information specific to a
185  *DOS workstation.
186  *
187  *---------------------------------------------------------------------------*/
188
189 /*flags - bit definitions */
190 #define DI_DOS_HIGH             0x01    /* DOS is loaded high */
191 #define DI_DPMI_VALID           0x02    /* DPMI version is valid */
192
193 #ifdef __cplusplus
194    struct DOS_Info_S {
195 #else
196    typedef struct {
197 #endif
198
199    uCHAR        flags;          /* See bit definitions above */
200    uSHORT       driverLocation; /* SmartROM BIOS address */
201    uSHORT       DOS_version;
202    uSHORT       DPMI_version;
203
204 #ifdef __cplusplus
205
206 /*---------- Portability Additions ----------- in sp_sinfo.cpp */
207 #ifdef DPT_PORTABLE
208         uSHORT          netInsert(dptBuffer_S *buffer);
209         uSHORT          netExtract(dptBuffer_S *buffer);
210 #endif /* DPT PORTABLE */
211 /*--------------------------------------------*/
212
213    };
214 #else
215    } DOS_Info_S;
216 #endif
217 /*DOS_Info_S - end */
218
219
220 /*struct - Netware_Info_S - start
221  *===========================================================================
222  *
223  *Description:
224  *
225  *      This structure defines the system information specific to a
226  *Netware machine.
227  *
228  *---------------------------------------------------------------------------*/
229
230 #ifdef __cplusplus
231    struct Netware_Info_S {
232 #else
233    typedef struct {
234 #endif
235
236    uCHAR        driverName[13];         /* ie PM12NW31.DSK */
237    uCHAR        serverName[48];
238    uCHAR        netwareVersion;         /* The Netware OS version */
239    uCHAR        netwareSubVersion;
240    uCHAR        netwareRevision;
241    uSHORT       maxConnections;         /* Probably  250 or 1000 */
242    uSHORT       connectionsInUse;
243    uSHORT       maxVolumes;
244    uCHAR        unused;
245    uCHAR        SFTlevel;
246    uCHAR        TTSlevel;
247
248    uCHAR        clibMajorVersion;       /* The CLIB.NLM version */
249    uCHAR        clibMinorVersion;
250    uCHAR        clibRevision;
251
252 #ifdef __cplusplus
253
254 /*---------- Portability Additions ----------- in sp_sinfo.cpp */
255 #ifdef DPT_PORTABLE
256         uSHORT          netInsert(dptBuffer_S *buffer);
257         uSHORT          netExtract(dptBuffer_S *buffer);
258 #endif /* DPT PORTABLE */
259 /*--------------------------------------------*/
260
261    };
262 #else
263    } Netware_Info_S;
264 #endif
265 /*Netware_Info_S - end */
266
267
268 /*struct - OS2_Info_S - start
269  *===========================================================================
270  *
271  *Description:
272  *
273  *      This structure defines the system information specific to an
274  *OS/2 machine.
275  *
276  *---------------------------------------------------------------------------*/
277
278 #ifdef __cplusplus
279    struct OS2_Info_S {
280 #else
281    typedef struct {
282 #endif
283
284    uCHAR        something;
285
286 #ifdef __cplusplus
287
288 /*---------- Portability Additions ----------- in sp_sinfo.cpp */
289 #ifdef DPT_PORTABLE
290         uSHORT          netInsert(dptBuffer_S *buffer);
291         uSHORT          netExtract(dptBuffer_S *buffer);
292 #endif /* DPT PORTABLE */
293 /*--------------------------------------------*/
294
295    };
296 #else
297    } OS2_Info_S;
298 #endif
299 /*OS2_Info_S - end */
300
301
302 /*struct - WinNT_Info_S - start
303  *===========================================================================
304  *
305  *Description:
306  *
307  *      This structure defines the system information specific to a
308  *Windows NT machine.
309  *
310  *---------------------------------------------------------------------------*/
311
312 #ifdef __cplusplus
313    struct WinNT_Info_S {
314 #else
315    typedef struct {
316 #endif
317
318    uCHAR        something;
319
320 #ifdef __cplusplus
321
322 /*---------- Portability Additions ----------- in sp_sinfo.cpp */
323 #ifdef DPT_PORTABLE
324         uSHORT          netInsert(dptBuffer_S *buffer);
325         uSHORT          netExtract(dptBuffer_S *buffer);
326 #endif /* DPT PORTABLE */
327 /*--------------------------------------------*/
328
329    };
330 #else
331    } WinNT_Info_S;
332 #endif
333 /*WinNT_Info_S - end */
334
335
336 /*struct - SCO_Info_S - start
337  *===========================================================================
338  *
339  *Description:
340  *
341  *      This structure defines the system information specific to an
342  *SCO UNIX machine.
343  *
344  *---------------------------------------------------------------------------*/
345
346 #ifdef __cplusplus
347    struct SCO_Info_S {
348 #else
349    typedef struct {
350 #endif
351
352    uCHAR        something;
353
354 #ifdef __cplusplus
355
356 /*---------- Portability Additions ----------- in sp_sinfo.cpp */
357 #ifdef DPT_PORTABLE
358         uSHORT          netInsert(dptBuffer_S *buffer);
359         uSHORT          netExtract(dptBuffer_S *buffer);
360 #endif /* DPT PORTABLE */
361 /*--------------------------------------------*/
362
363    };
364 #else
365    } SCO_Info_S;
366 #endif
367 /*SCO_Info_S - end */
368
369
370 /*struct - USL_Info_S - start
371  *===========================================================================
372  *
373  *Description:
374  *
375  *      This structure defines the system information specific to a
376  *USL UNIX machine.
377  *
378  *---------------------------------------------------------------------------*/
379
380 #ifdef __cplusplus
381    struct USL_Info_S {
382 #else
383    typedef struct {
384 #endif
385
386    uCHAR        something;
387
388 #ifdef __cplusplus
389
390 /*---------- Portability Additions ----------- in sp_sinfo.cpp */
391 #ifdef DPT_PORTABLE
392         uSHORT          netInsert(dptBuffer_S *buffer);
393         uSHORT          netExtract(dptBuffer_S *buffer);
394 #endif /* DPT PORTABLE */
395 /*--------------------------------------------*/
396
397    };
398 #else
399    } USL_Info_S;
400 #endif
401 /*USL_Info_S - end */
402
403
404   /* Restore default structure packing */
405 #ifndef NO_UNPACK
406 #if defined(_DPT_AIX)
407 #pragma options align=reset
408 #elif defined(UNPACK_FOUR)
409 #pragma pack(4)
410 #else
411 #pragma pack()
412 #endif  /* aix */
413 #endif  /* no unpack */
414
415 #ifdef DPT_MEASURE_PERFORMANCE
416 typedef struct dpt_metrics {
417         u_int32_t       command_count[256]; /* We assume MAX 256 SCSI commands */
418         u_int32_t       max_command_time[256];
419         u_int32_t       min_command_time[256];
420
421         u_int32_t       min_intr_time;
422         u_int32_t       max_intr_time;
423         u_int32_t       max_intr_gap;
424         u_int32_t       max_ht_time;
425         u_int32_t       aborted_interrupts;
426         u_int32_t       spurious_interrupts;
427         u_int32_t       aborted_requests;
428         u_int32_t       retried_requests;
429
430         u_int32_t       max_waiting_count;
431         u_int32_t       max_submit_count;
432         u_int32_t       max_complete_count;
433
434         u_int32_t       min_waiting_time;
435         u_int32_t       min_submit_time;
436         u_int32_t       min_complete_time;
437
438         u_int32_t       max_waiting_time;
439         u_int32_t       max_submit_time;
440         u_int32_t       max_complete_time;
441
442         u_int32_t       command_collisions;
443         u_int32_t       command_too_busy;
444         u_int32_t       max_eata_tries;
445         u_int32_t       min_eata_tries;
446
447         u_int32_t       read_by_size_count[10];
448         u_int32_t       write_by_size_count[10];
449         u_int32_t       read_by_size_min_time[10];
450         u_int32_t       read_by_size_max_time[10];
451         struct timeval  read_by_size_total_time[10];
452         u_int32_t       write_by_size_min_time[10];
453         u_int32_t       write_by_size_max_time[10];
454         struct timeval  write_by_size_total_time[10];
455
456 #define SIZE_512        0
457 #define SIZE_1K         1
458 #define SIZE_2K         2
459 #define SIZE_4K         3
460 #define SIZE_8K         4
461 #define SIZE_16K        5
462 #define SIZE_32K        6
463 #define SIZE_64K        7
464 #define SIZE_BIGGER     8
465 #define SIZE_OTHER      9
466
467         struct timeval  intr_started;
468 } dpt_perf_t;
469 #endif
470
471 #endif  /* __SYS_INFO_H */
472