xref: /dragonfly/sys/dev/raid/asr/dptsig.h (revision 0ca59c34)
1 /*-
2  * Copyright (c) 1996-2000 Distributed Processing Technology Corporation
3  * Copyright (c) 2000-2001 Adaptec Corporation.
4  * All rights reserved.
5  *
6  * Redistribution and use in source form, with or without modification, are
7  * permitted provided that redistributions of source code must retain the
8  * above copyright notice, this list of conditions and the following disclaimer.
9  *
10  * This software is provided `as is' by Distributed Processing Technology and
11  * any express or implied warranties, including, but not limited to, the
12  * implied warranties of merchantability and fitness for a particular purpose,
13  * are disclaimed. In no event shall Distributed Processing Technology be
14  * liable for any direct, indirect, incidental, special, exemplary or
15  * consequential damages (including, but not limited to, procurement of
16  * substitute goods or services; loss of use, data, or profits; or business
17  * interruptions) however caused and on any theory of liability, whether in
18  * contract, strict liability, or tort (including negligence or otherwise)
19  * arising in any way out of the use of this driver software, even if advised
20  * of the possibility of such damage.
21  *
22  * $FreeBSD: src/sys/dev/asr/dptsig.h,v 1.9 2005/12/04 10:06:03 ru Exp $
23  */
24 
25 #ifndef __DPTSIG_H_
26 #define	__DPTSIG_H_
27 #ifdef _SINIX_ADDON
28 #include "dpt.h"
29 #endif
30 /* DPT SIGNATURE SPEC AND HEADER FILE				*/
31 /* Signature Version 1 (sorry no 'A')				*/
32 
33 /* to make sure we are talking the same size under all OS's	*/
34 typedef unsigned char sigBYTE;
35 typedef unsigned short sigWORD;
36 #if (defined(_MULTI_DATAMODEL) && defined(sun) && !defined(_ILP32))
37 typedef uint32_t sigLONG;
38 #else
39 typedef unsigned long sigLONG;
40 #endif
41 
42 /*
43  * use sigWORDLittleEndian for:
44  *  dsCapabilities
45  *  dsDeviceSupp
46  *  dsAdapterSupp
47  *  dsApplication
48  * use sigLONGLittleEndian for:
49  *	dsOS
50  * so that the sig can be standardised to Little Endian
51  */
52 #if (defined(_DPT_BIG_ENDIAN))
53 # define sigWORDLittleEndian(x) ((((x)&0xFF)<<8)|(((x)>>8)&0xFF))
54 # define sigLONGLittleEndian(x) \
55 	((((x)&0xFF)<<24) |		\
56 	 (((x)&0xFF00)<<8) |	\
57 	 (((x)&0xFF0000L)>>8) | \
58 	 (((x)&0xFF000000L)>>24))
59 #else
60 # define sigWORDLittleEndian(x) (x)
61 # define sigLONGLittleEndian(x) (x)
62 #endif
63 
64 /* must make sure the structure is not word or double-word aligned	*/
65 /* ---------------------------------------------------------------	*/
66 /* Borland will ignore the following pragma:				*/
67 /* Word alignment is OFF by default.  If in the, IDE make		*/
68 /* sure that Options | Compiler | Code Generation | Word Alignment	*/
69 /* is not checked.  If using BCC, do not use the -a option.		*/
70 
71 #ifndef NO_PACK
72 #if defined(_DPT_AIX)
73 #pragma options align=packed
74 #else
75 #pragma pack(1)
76 #endif	/* aix */
77 #endif
78 /* For the Macintosh */
79 #ifdef STRUCTALIGNMENTSUPPORTED
80 #pragma options align=mac68k
81 #endif
82 
83 
84 /* Current Signature Version - sigBYTE dsSigVersion; */
85 /* ------------------------------------------------------------------ */
86 #define	SIG_VERSION 1
87 
88 /* Processor Family - sigBYTE dsProcessorFamily;  DISTINCT VALUES */
89 /* ------------------------------------------------------------------ */
90 /* What type of processor the file is meant to run on. */
91 /* This will let us know whether to read sigWORDs as high/low or low/high. */
92 #define	PROC_INTEL	0x00	/* Intel 80x86 */
93 #define	PROC_MOTOROLA	0x01	/* Motorola 68K */
94 #define	PROC_MIPS4000	0x02	/* MIPS RISC 4000 */
95 #define	PROC_MIPS	PROC_MIPS4000 /* MIPS RISC */
96 #define	PROC_ALPHA	0x03	/* DEC Alpha */
97 #define	PROC_POWERPC	0x04	/* IBM Power PC */
98 #define	PROC_i960	0x05	/* Intel i960 */
99 #define	PROC_ULTRASPARC 0x06	/* SPARC processor */
100 
101 /* Specific Minimim Processor - sigBYTE dsProcessor;	FLAG BITS */
102 /* ------------------------------------------------------------------ */
103 /* Different bit definitions dependent on processor_family */
104 
105 /* PROC_INTEL: */
106 #define	PROC_8086	0x01	/* Intel 8086 */
107 #define	PROC_286	0x02	/* Intel 80286 */
108 #define	PROC_386	0x04	/* Intel 80386 */
109 #define	PROC_486	0x08	/* Intel 80486 */
110 #define	PROC_PENTIUM	0x10	/* Intel 586 aka P5 aka Pentium */
111 #define	PROC_SEXIUM	0x20	/* Intel 686 aka P6 aka Pentium Pro or MMX */
112 #define	PROC_ITANIUM	0x40	/* Intel Itanium 64 bit */
113 
114 /* PROC_i960: */
115 #define	PROC_960RX	0x01	/* Intel 80960RP/RD */
116 #define	PROC_960HX	0x02	/* Intel 80960HA/HD/HT */
117 #define	PROC_960RN	0x03	/* Intel 80960RN/RM */
118 #define	PROC_960RS	0x04	/* Intel 80960RS */
119 #define	PROC_80303	0x05	/* Intel 80303 (ZION) */
120 
121 /* PROC_MOTOROLA: */
122 #define	PROC_68000	0x01	/* Motorola 68000 */
123 #define	PROC_68010	0x02	/* Motorola 68010 */
124 #define	PROC_68020	0x04	/* Motorola 68020 */
125 #define	PROC_68030	0x08	/* Motorola 68030 */
126 #define	PROC_68040	0x10	/* Motorola 68040 */
127 
128 /* PROC_POWERPC */
129 #define	PROC_PPC601		0x01	/* PowerPC 601 */
130 #define	PROC_PPC603		0x02	/* PowerPC 603 */
131 #define	PROC_PPC604		0x04	/* PowerPC 604 */
132 
133 /* PROC_MIPS */
134 #define	PROC_R4000	0x01	/* MIPS R4000 */
135 #define	PROC_RM7000	0x02	/* MIPS RM7000 */
136 
137 /* Filetype - sigBYTE dsFiletype;	DISTINCT VALUES */
138 /* ------------------------------------------------------------------ */
139 #define	FT_EXECUTABLE	0	/* Executable Program */
140 #define	FT_SCRIPT	1	/* Script/Batch File??? */
141 #define	FT_HBADRVR	2	/* HBA Driver */
142 #define	FT_OTHERDRVR	3	/* Other Driver */
143 #define	FT_IFS		4	/* Installable Filesystem Driver */
144 #define	FT_ENGINE	5	/* DPT Engine */
145 #define	FT_COMPDRVR	6	/* Compressed Driver Disk */
146 #define	FT_LANGUAGE	7	/* Foreign Language file */
147 #define	FT_FIRMWARE	8	/* Downloadable or actual Firmware */
148 #define	FT_COMMMODL	9	/* Communications Module */
149 #define	FT_INT13	10	/* INT 13 style HBA Driver */
150 #define	FT_HELPFILE	11	/* Help file */
151 #define	FT_LOGGER	12	/* Event Logger */
152 #define	FT_INSTALL	13	/* An Install Program */
153 #define	FT_LIBRARY	14	/* Storage Manager Real-Mode Calls */
154 #define	FT_RESOURCE	15	/* Storage Manager Resource File */
155 #define	FT_MODEM_DB	16	/* Storage Manager Modem Database */
156 #define	FT_DMI		17	/* DMI component interface */
157 
158 /* Filetype flags - sigBYTE dsFiletypeFlags;	FLAG BITS */
159 /* ------------------------------------------------------------------ */
160 #define	FTF_DLL		0x01	/* Dynamic Link Library */
161 #define	FTF_NLM		0x02	/* Netware Loadable Module */
162 #define	FTF_OVERLAYS	0x04	/* Uses overlays */
163 #define	FTF_DEBUG	0x08	/* Debug version */
164 #define	FTF_TSR		0x10	/* TSR */
165 #define	FTF_SYS		0x20	/* DOS Loadable driver */
166 #define	FTF_PROTECTED	0x40	/* Runs in protected mode */
167 #define	FTF_APP_SPEC	0x80	/* Application Specific */
168 #define	FTF_ROM		(FTF_SYS|FTF_TSR)	/* Special Case */
169 
170 /* OEM - sigBYTE dsOEM;		DISTINCT VALUES */
171 /* ------------------------------------------------------------------ */
172 #define	OEM_DPT		0	/* DPT */
173 #define	OEM_ATT		1	/* ATT */
174 #define	OEM_NEC		2	/* NEC */
175 #define	OEM_ALPHA	3	/* Alphatronix */
176 #define	OEM_AST		4	/* AST */
177 #define	OEM_OLIVETTI	5	/* Olivetti */
178 #define	OEM_SNI		6	/* Siemens/Nixdorf */
179 #define	OEM_SUN		7	/* SUN Microsystems */
180 #define	OEM_ADAPTEC	8	/* Adaptec */
181 
182 /* Operating System  - sigLONG dsOS;	FLAG BITS */
183 /* ------------------------------------------------------------------ */
184 #define	OS_DOS		0x00000001 /* PC/MS-DOS				*/
185 #define	OS_WINDOWS	0x00000002 /* Microsoft Windows 3.x		*/
186 #define	OS_WINDOWS_NT	0x00000004 /* Microsoft Windows NT		*/
187 #define	OS_OS2M		0x00000008 /* OS/2 1.2.x,MS 1.3.0,IBM 1.3.x - Monolithic */
188 #define	OS_OS2L		0x00000010 /* Microsoft OS/2 1.301 - LADDR	*/
189 #define	OS_OS22x	0x00000020 /* IBM OS/2 2.x			*/
190 #define	OS_NW286	0x00000040 /* Novell NetWare 286		*/
191 #define	OS_NW386	0x00000080 /* Novell NetWare 386		*/
192 #define	OS_GEN_UNIX	0x00000100 /* Generic Unix			*/
193 #define	OS_SCO_UNIX	0x00000200 /* SCO Unix				*/
194 #define	OS_ATT_UNIX	0x00000400 /* ATT Unix				*/
195 #define	OS_UNIXWARE	0x00000800 /* USL Unix				*/
196 #define	OS_INT_UNIX	0x00001000 /* Interactive Unix			*/
197 #define	OS_SOLARIS	0x00002000 /* SunSoft Solaris			*/
198 #define	OS_QNX		0x00004000 /* QNX for Tom Moch			*/
199 #define	OS_NEXTSTEP	0x00008000 /* NeXTSTEP/OPENSTEP/MACH		*/
200 #define	OS_BANYAN	0x00010000 /* Banyan Vines			*/
201 #define	OS_OLIVETTI_UNIX 0x00020000/* Olivetti Unix			*/
202 #define	OS_MAC_OS		0x00040000 /* Mac OS				*/
203 #define	OS_WINDOWS_95	0x00080000 /* Microsoft Windows '95		*/
204 #define	OS_NW4x			0x00100000 /* Novell Netware 4.x		*/
205 #define	OS_BSDI_UNIX	0x00200000 /* BSDi Unix BSD/OS 2.0 and up	*/
206 #define	OS_AIX_UNIX	0x00400000 /* AIX Unix				*/
207 #define	OS_FREE_BSD		0x00800000 /* FreeBSD Unix			*/
208 #define	OS_LINUX		0x01000000 /* Linux				*/
209 #define	OS_DGUX_UNIX	0x02000000 /* Data General Unix			*/
210 #define	OS_SINIX_N	0x04000000 /* SNI SINIX-N			*/
211 #define	OS_PLAN9		0x08000000 /* ATT Plan 9			*/
212 #define	OS_TSX			0x10000000 /* SNH TSX-32			*/
213 #define	OS_WINDOWS_98	0x20000000 /* Microsoft Windows '98	*/
214 #define	OS_NW5x			0x40000000 /* Novell Netware 5x */
215 
216 #define	OS_OTHER	0x80000000 /* Other				*/
217 
218 /* Capabilities - sigWORD dsCapabilities;	 FLAG BITS */
219 /* ------------------------------------------------------------------ */
220 #define	CAP_RAID0	0x0001	/* RAID-0 */
221 #define	CAP_RAID1	0x0002	/* RAID-1 */
222 #define	CAP_RAID3	0x0004	/* RAID-3 */
223 #define	CAP_RAID5	0x0008	/* RAID-5 */
224 #define	CAP_SPAN	0x0010	/* Spanning */
225 #define	CAP_PASS	0x0020	/* Provides passthrough */
226 #define	CAP_OVERLAP	0x0040	/* Passthrough supports overlapped commands */
227 #define	CAP_ASPI	0x0080	/* Supports ASPI Command Requests */
228 #define	CAP_ABOVE16MB	0x0100	/* ISA Driver supports greater than 16MB */
229 #define	CAP_EXTEND	0x8000	/* Extended info appears after description */
230 #ifdef SNI_MIPS
231 #define	CAP_CACHEMODE	0x1000	/* dpt_force_cache is set in driver */
232 #endif
233 
234 /* Devices Supported - sigWORD dsDeviceSupp;	FLAG BITS */
235 /* ------------------------------------------------------------------ */
236 #define	DEV_DASD	0x0001	/* DASD (hard drives) */
237 #define	DEV_TAPE	0x0002	/* Tape drives */
238 #define	DEV_PRINTER	0x0004	/* Printers */
239 #define	DEV_PROC	0x0008	/* Processors */
240 #define	DEV_WORM	0x0010	/* WORM drives */
241 #define	DEV_CDROM	0x0020	/* CD-ROM drives */
242 #define	DEV_SCANNER	0x0040	/* Scanners */
243 #define	DEV_OPTICAL	0x0080	/* Optical Drives */
244 #define	DEV_JUKEBOX	0x0100	/* Jukebox */
245 #define	DEV_COMM	0x0200	/* Communications Devices */
246 #define	DEV_OTHER	0x0400	/* Other Devices */
247 #define	DEV_ALL		0xFFFF	/* All SCSI Devices */
248 
249 /* Adapters Families Supported - sigWORD dsAdapterSupp; FLAG BITS */
250 /* ------------------------------------------------------------------ */
251 #define	ADF_2001	0x0001	/* PM2001	    */
252 #define	ADF_2012A	0x0002	/* PM2012A	    */
253 #define	ADF_PLUS_ISA	0x0004	/* PM2011,PM2021    */
254 #define	ADF_PLUS_EISA	0x0008	/* PM2012B,PM2022   */
255 #define	ADF_SC3_ISA	0x0010	/* PM2021	    */
256 #define	ADF_SC3_EISA	0x0020	/* PM2022,PM2122, etc */
257 #define	ADF_SC3_PCI	0x0040	/* SmartCache III PCI */
258 #define	ADF_SC4_ISA	0x0080	/* SmartCache IV ISA */
259 #define	ADF_SC4_EISA	0x0100	/* SmartCache IV EISA */
260 #define	ADF_SC4_PCI	0x0200	/* SmartCache IV PCI */
261 #define	ADF_SC5_PCI	0x0400	/* Fifth Generation I2O products */
262 /*
263  *	Combinations of products
264  */
265 #define	ADF_ALL_2000	(ADF_2001|ADF_2012A)
266 #define	ADF_ALL_PLUS	(ADF_PLUS_ISA|ADF_PLUS_EISA)
267 #define	ADF_ALL_SC3	(ADF_SC3_ISA|ADF_SC3_EISA|ADF_SC3_PCI)
268 #define	ADF_ALL_SC4	(ADF_SC4_ISA|ADF_SC4_EISA|ADF_SC4_PCI)
269 #define	ADF_ALL_SC5	(ADF_SC5_PCI)
270 /* All EATA Cacheing Products */
271 #define	ADF_ALL_CACHE	(ADF_ALL_PLUS|ADF_ALL_SC3|ADF_ALL_SC4)
272 /* All EATA Bus Mastering Products */
273 #define	ADF_ALL_MASTER	(ADF_2012A|ADF_ALL_CACHE)
274 /* All EATA Adapter Products */
275 #define	ADF_ALL_EATA	(ADF_2001|ADF_ALL_MASTER)
276 #define	ADF_ALL		ADF_ALL_EATA
277 
278 /* Application - sigWORD dsApplication;		FLAG BITS */
279 /* ------------------------------------------------------------------ */
280 #define	APP_DPTMGR	0x0001	/* DPT Storage Manager */
281 #define	APP_ENGINE	0x0002	/* DPT Engine */
282 #define	APP_SYTOS	0x0004	/* Sytron Sytos Plus */
283 #define	APP_CHEYENNE	0x0008	/* Cheyenne ARCServe + ARCSolo */
284 #define	APP_MSCDEX	0x0010	/* Microsoft CD-ROM extensions */
285 #define	APP_NOVABACK	0x0020	/* NovaStor Novaback */
286 #define	APP_AIM		0x0040	/* Archive Information Manager */
287 
288 /* Requirements - sigBYTE dsRequirements;	  FLAG BITS		*/
289 /* ------------------------------------------------------------------	*/
290 #define	REQ_SMARTROM	0x01	/* Requires SmartROM to be present	*/
291 #define	REQ_DPTDDL	0x02	/* Requires DPTDDL.SYS to be loaded	*/
292 #define	REQ_HBA_DRIVER	0x04	/* Requires an HBA driver to be loaded	*/
293 #define	REQ_ASPI_TRAN	0x08	/* Requires an ASPI Transport Modules	*/
294 #define	REQ_ENGINE	0x10	/* Requires a DPT Engine to be loaded	*/
295 #define	REQ_COMM_ENG	0x20	/* Requires a DPT Communications Engine */
296 
297 /* ------------------------------------------------------------------	*/
298 /* Requirements - sigWORD dsFirmware;	      FLAG BITS			*/
299 /* ------------------------------------------------------------------	*/
300 #define	dsFirmware dsApplication
301 #define	FW_DNLDSIZE16_OLD	0x0000	  /* 0..3 DownLoader Size 16K - TO SUPPORT OLD IMAGES */
302 #define	FW_DNLDSIZE16k	  0x0000    /* 0..3 DownLoader Size 16k		    */
303 #define	FW_DNLDSIZE16	  0x0001    /* 0..3 DownLoader Size 16K		*/
304 #define	FW_DNLDSIZE32	  0x0002    /* 0..3 DownLoader Size 32K		*/
305 #define	FW_DNLDSIZE64	  0x0004    /* 0..3 DownLoader Size 64K		*/
306 #define	FW_DNLDSIZE0	  0x000f    /* 0..3 DownLoader Size 0K - NONE	*/
307 #define	FW_DNLDSIZE_NONE	0x000F	  /* 0..3 DownLoader Size - NONE      */
308 
309 		/* Code Offset is position of the code within the ROM CODE Segment */
310 #define	FW_DNLDR_TOP	  0x0000	/* 12 DownLoader Position (0=Top, 1=Bottom) */
311 #define	FW_DNLDR_BTM	  0x1000	/* 12 DownLoader Position (0=Top, 1=Bottom) Dominator */
312 
313 #define	FW_LOAD_BTM		  0x0000	/* 13 Code Offset (0=Btm, 1=Top) MIPS	*/
314 #define	FW_LOAD_TOP		  0x2000	/* 13 Code Offset (0=Btm, 1=Top) i960	*/
315 
316 #define	FW_SIG_VERSION1	  0x0000    /* 15..14 Version Bits 0=Ver1		*/
317 #define	FW_SIG_VERSION2	  0x4000	/* 15..14 Version Bits 1=Ver2	    */
318 
319 /*
320 				0..3   Downloader Size (Value * 16K)
321 
322 				4
323 				5
324 				6
325 				7
326 
327 				8
328 				9
329 				10
330 				11
331 
332 				12		Downloader Position (0=Top of Image  1= Bottom of Image (Dominator) )
333 				13		Load Offset (0=BTM (MIPS) -- 1=TOP (960) )
334 				14..15	F/W Sig Version (0=Ver1)
335 */
336 
337 /* ------------------------------------------------------------------	*/
338 /* Sub System Vendor IDs - The PCI Sub system and vendor IDs for each	*/
339 /* Adaptec Raid controller						*/
340 /* ------------------------------------------------------------------	*/
341 #define	PM1554U2_SUB_ID		 0xC0011044
342 #define	PM1654U2_SUB_ID		 0xC0021044
343 #define	PM1564U3_1_SUB_ID    0xC0031044
344 #define	PM1564U3_2_SUB_ID    0xC0041044
345 #define	PM1554U2_NOACPI_SUB_ID	    0xC0051044
346 #define	PM2554U2_SUB_ID	     0xC00A1044
347 #define	PM2654U2_SUB_ID	     0xC00B1044
348 #define	PM2664U3_1_SUB_ID    0xC00C1044
349 #define	PM2664U3_2_SUB_ID    0xC00D1044
350 #define	PM2554U2_NOACPI_SUB_ID	    0xC00E1044
351 #define	PM2654U2_NOACPI_SUB_ID	    0xC00F1044
352 #define	PM3754U2_SUB_ID	     0xC0141044
353 #define	PM3755U2B_SUB_ID     0xC0151044
354 #define	PM3755F_SUB_ID	     0xC0161044
355 #define	PM3757U2_1_SUB_ID    0xC01E1044
356 #define	PM3757U2_2_SUB_ID    0xC01F1044
357 #define	PM3767U3_2_SUB_ID    0xC0201044
358 #define	PM3767U3_4_SUB_ID    0xC0211044
359 #define	PM2865U3_1_SUB_ID    0xC0281044
360 #define	PM2865U3_2_SUB_ID    0xC0291044
361 #define	PM2865F_SUB_ID	     0xC02A1044
362 #define	ADPT2000S_1_SUB_ID	 0xC03C1044
363 #define	ADPT2000S_2_SUB_ID	 0xC03D1044
364 #define	ADPT2000F_SUB_ID	 0xC03E1044
365 #define	ADPT3000S_1_SUB_ID	 0xC0461044
366 #define	ADPT3000S_2_SUB_ID	 0xC0471044
367 #define	ADPT3000F_SUB_ID	 0xC0481044
368 #define	ADPT5000S_1_SUB_ID	 0xC0501044
369 #define	ADPT5000S_2_SUB_ID	 0xC0511044
370 #define	ADPT5000F_SUB_ID	 0xC0521044
371 #define	ADPT1000UDMA_SUB_ID	 0xC05A1044
372 #define	ADPT1000UDMA_DAC_SUB_ID	 0xC05B1044
373 #define	ADPTI2O_DEVICE_ID	 0xa501
374 #define	ADPTDOMINATOR_DEVICE_ID	 0xa511
375 #define	ADPTDOMINATOR_SUB_ID_START   0xC0321044
376 #define	ADPTDOMINATOR_SUB_ID_END     0xC03b1044
377 
378 
379 
380 /* ------------------------------------------------------------------	*/
381 /* ------------------------------------------------------------------	*/
382 /* ------------------------------------------------------------------	*/
383 
384 /*
385  * You may adjust dsDescription_size with an override to a value less than
386  * 50 so that the structure allocates less real space.
387  */
388 #if (!defined(dsDescription_size))
389 # define dsDescription_size 50
390 #endif
391 
392 typedef struct dpt_sig {
393     char    dsSignature[6];	 /* ALWAYS "dPtSiG" */
394     sigBYTE dsSigVersion;	 /* signature version (currently 1) */
395     sigBYTE dsProcessorFamily;	 /* what type of processor */
396     sigBYTE dsProcessor;	 /* precise processor */
397     sigBYTE dsFiletype;		 /* type of file */
398     sigBYTE dsFiletypeFlags;	 /* flags to specify load type, etc. */
399     sigBYTE dsOEM;		 /* OEM file was created for */
400     sigLONG dsOS;		 /* which Operating systems */
401     sigWORD dsCapabilities;	 /* RAID levels, etc. */
402     sigWORD dsDeviceSupp;	 /* Types of SCSI devices supported */
403     sigWORD dsAdapterSupp;	 /* DPT adapter families supported */
404     sigWORD dsApplication;	 /* applications file is for */
405     sigBYTE dsRequirements;	 /* Other driver dependencies */
406     sigBYTE dsVersion;		 /* 1 */
407     sigBYTE dsRevision;		 /* 'J' */
408     sigBYTE dsSubRevision;	 /* '9'	  ' ' if N/A */
409     sigBYTE dsMonth;		 /* creation month */
410     sigBYTE dsDay;		 /* creation day */
411     sigBYTE dsYear;		 /* creation year since 1980 (1993=13) */
412     /* description (NULL terminated) */
413     char  dsDescription[dsDescription_size];
414 } dpt_sig_S;
415 /* 32 bytes minimum - with no description.  Put NULL at description[0] */
416 /* 81 bytes maximum - with 49 character description plus NULL. */
417 
418 #if defined __bsdi__
419 #ifndef PACK
420 #define	PACK __attribute__ ((packed))
421 #endif
422 typedef struct dpt_sig_Packed {
423     char    dsSignature[6] PACK;      /* ALWAYS "dPtSiG" */
424     sigBYTE dsSigVersion PACK;	      /* signature version (currently 1) */
425     sigBYTE dsProcessorFamily PACK;   /* what type of processor */
426     sigBYTE dsProcessor PACK;	      /* precise processor */
427     sigBYTE dsFiletype PACK;	      /* type of file */
428     sigBYTE dsFiletypeFlags PACK;     /* flags to specify load type, etc. */
429     sigBYTE dsOEM PACK;		      /* OEM file was created for */
430     sigLONG dsOS PACK;		      /* which Operating systems */
431     sigWORD dsCapabilities PACK;      /* RAID levels, etc. */
432     sigWORD dsDeviceSupp PACK;	      /* Types of SCSI devices supported */
433     sigWORD dsAdapterSupp PACK;	      /* DPT adapter families supported */
434     sigWORD dsApplication PACK;	      /* applications file is for */
435     sigBYTE dsRequirements PACK;      /* Other driver dependencies */
436     sigBYTE dsVersion PACK;	      /* 1 */
437     sigBYTE dsRevision PACK;	      /* 'J' */
438     sigBYTE dsSubRevision PACK;	      /* '9'   ' ' if N/A */
439     sigBYTE dsMonth PACK;	      /* creation month */
440     sigBYTE dsDay PACK;		      /* creation day */
441     sigBYTE dsYear PACK;	      /* creation year since 1980 (1993=13) */
442     /* description (NULL terminated) */
443     char  dsDescription[dsDescription_size] PACK;
444 } dpt_sig_S_Packed;
445 #define	PACKED_SIG_SIZE sizeof(dpt_sig_S_Packed)
446 #endif
447 /* This line added at Roycroft's request */
448 /* Microsoft's NT compiler gets confused if you do a pack and don't */
449 /* restore it. */
450 
451 #ifndef NO_UNPACK
452 #if defined(_DPT_AIX)
453 #pragma options align=reset
454 #elif defined(UNPACK_FOUR)
455 #pragma pack(4)
456 #else
457 #pragma pack()
458 #endif	/* aix */
459 #endif
460 /* For the Macintosh */
461 #ifdef STRUCTALIGNMENTSUPPORTED
462 #pragma options align=reset
463 #endif
464 
465 #endif
466