i2odpt.h revision 96615
1248590Smm/****************************************************************
2248590Smm * Copyright (c) 1996-2000 Distributed Processing Technology Corporation
3248590Smm * Copyright (c) 2000 Adaptec Corporation.
4248590Smm * All rights reserved.
5248590Smm *
6248590Smm * $FreeBSD: head/sys/dev/asr/i2odpt.h 96615 2002-05-14 21:59:10Z obrien $
7248590Smm *
8248590Smm ****************************************************************/
9248590Smm
10248590Smm#if !defined(I2O_DPT_HDR)
11248590Smm#define	I2O_DPT_HDR
12248590Smm
13248590Smm#define	DPT_ORGANIZATION_ID 0x1B	/* For Private Messages */
14248590Smm
15248590Smm/*
16248590Smm *	PrivateMessageFrame.StdMessageFrame.Function = I2O_PRIVATE_MESSAGE
17248590Smm *	PrivateMessageFrame.XFunctionCode = I2O_SCSI_SCB_EXEC
18248590Smm */
19248590Smm
20248590Smmtypedef struct _PRIVATE_SCSI_SCB_EXECUTE_MESSAGE {
21248590Smm    I2O_PRIVATE_MESSAGE_FRAME PrivateMessageFrame;
22248590Smm#   if (defined(sparc) || defined(_DPT_BIG_ENDIAN))
23248590Smm	U32		      TID; /* Upper four bits currently are zero */
24248590Smm#   else
25248590Smm	BF		      TID:16; /* Upper four bits currently are zero */
26248590Smm	/* Command is interpreted by the host */
27248590Smm	BF		      Interpret:1;
28248590Smm	/* if TRUE, deal with Physical Firmware Array information */
29248590Smm	BF		      Physical:1;
30248590Smm	BF		      Reserved1:14;
31248590Smm#   endif
32248590Smm    U8			      CDBLength;
33248590Smm    U8			      Reserved;
34248590Smm    I2O_SCB_FLAGS	      SCBFlags;
35248590Smm    U8			      CDB[  I2O_SCSI_CDB_LENGTH	 ];
36248590Smm    U32			      ByteCount;
37248590Smm    I2O_SG_ELEMENT	      SGL;
38248590Smm} PRIVATE_SCSI_SCB_EXECUTE_MESSAGE, * PPRIVATE_SCSI_SCB_EXECUTE_MESSAGE;
39248590Smm
40248590Smm/*
41248590Smm * Flash access and programming messages
42248590Smm *	PrivateMessageFrame.StdMessageFrame.Function = I2O_PRIVATE_MESSAGE
43248590Smm *	PrivateMessageFrame.XFunctionCode = PRIVATE_FLAGS_REGION_*
44248590Smm *
45248590Smm *	SIZE	returns the total size of a region of flash
46248590Smm *	READ	copies a region (or portion thereof) into the buffer specified
47248590Smm *		by the SGL
48248590Smm *	WRITE	writes a region (or portion thereof) using the data specified
49248590Smm *		by the SGL
50248590Smm *
51248590Smm * Flash regions
52248590Smm *
53248590Smm *	0		operational-mode firmware
54248590Smm *	1		software (bios/utility)
55248590Smm *	2		oem nvram defaults
56248590Smm *	3		hba serial number
57248590Smm *	4		boot-mode firmware
58248590Smm *
59248590Smm * Any combination of RegionOffset and ByteCount can be specified providing
60248590Smm * they fit within the size of the specified region.
61248590Smm *
62248590Smm * Flash messages should be targeted to the Executive TID 0x000
63248590Smm */
64248590Smm
65248590Smm#define	PRIVATE_FLASH_REGION_SIZE	0x0100
66248590Smm#define	PRIVATE_FLASH_REGION_READ	0x0101
67248590Smm#define	PRIVATE_FLASH_REGION_WRITE	0x0102
68248590Smm#define	PRIVATE_FLASH_REGION_CRC	0x0103
69248590Smm
70248590Smmtypedef struct _PRIVATE_FLASH_REGION_MESSAGE {
71248590Smm    I2O_PRIVATE_MESSAGE_FRAME PrivateMessageFrame;
72248590Smm    U32			      FlashRegion;
73248590Smm    U32			      RegionOffset;
74248590Smm    U32			      ByteCount;
75248590Smm    I2O_SG_ELEMENT	      SGL;
76248590Smm} PRIVATE_FLASH_REGION_MESSAGE, * PPRIVATE_FLASH_REGION_MESSAGE;
77248590Smm
78248590Smm/* DPT Driver Printf message */
79248590Smm
80248590Smm#define	PRIVATE_DRIVER_PRINTF 0x0200
81248590Smm
82248590Smm/* FwPrintFlags */
83248590Smm#define	FW_FIRMWARE_FLAGS_NO_HEADER_B	0x00000001 /* Remove date header */
84248590Smm
85248590Smmtypedef struct _PRIVATE_DRIVER_PRINTF_MESSAGE {
86248590Smm
87248590Smm    I2O_PRIVATE_MESSAGE_FRAME	PrivateMessageFrame;
88248590Smm
89248590Smm    /* total bytes in PrintBuffer, including header */
90248590Smm    U32			PrintBufferByteCount;
91248590Smm    /* exact data to be copied into the serial PrintBuffer */
92248590Smm    U8			PrintBuffer[1];
93248590Smm
94248590Smm} PRIVATE_DRIVER_PRINTF_MESSAGE, * PPRIVATE_DRIVER_PRINTF_MESSAGE;
95248590Smm
96248590Smm/* DPT Enable Diagnostics message 0x0201 */
97248590Smm
98248590Smm#define	PRIVATE_DIAG_ENABLE 0x0201
99248590Smm
100248590Smmtypedef struct _PRIVATE_DIAG_ENABLE_MESSAGE {
101248590Smm	I2O_PRIVATE_MESSAGE_FRAME	PrivateMessageFrame;
102248590Smm} PRIVATE_DIAG_MESSAGE_FRAME, * PPRIVATE_DIAG_MESSAGE_FRAME;
103248590Smm
104248590Smm/* DPT Driver Get/Put message */
105248590Smm
106248590Smm#define	PRIVATE_DRIVER_GET	0x300
107248590Smm#define	PRIVATE_DRIVER_PUT	0x301
108248590Smm
109248590Smmtypedef struct _PRIVATE_DRIVER_GETPUT_MESSAGE
110248590Smm{
111248590Smm	I2O_PRIVATE_MESSAGE_FRAME	PrivateMessageFrame;
112248590Smm	U32				Offset;
113248590Smm	U32				ByteCount;
114248590Smm	I2O_SG_ELEMENT			SGL;
115248590Smm} PRIVATE_DRIVER_GETPUT_MESSAGE, * PPRIVATE_DRIVER_GETPUT_MESSAGE;
116248590Smm
117248590Smm/****************************************************************************/
118248590Smm
119248590Smm/* DPT Peripheral Device Parameter Groups */
120248590Smm
121248590Smm/****************************************************************************/
122248590Smm
123248590Smm/* DPT Configuration and Operating Structures and Defines */
124248590Smm
125248590Smm#define	    I2O_DPT_DEVICE_INFO_GROUP_NO	       0x8000
126248590Smm
127248590Smm/* - 8000h - DPT Device Information Parameters Group defines */
128248590Smm
129248590Smm/* Device Type */
130248590Smm
131248590Smm#define	I2O_DPT_DEVICE_TYPE_DIRECT	  I2O_SCSI_DEVICE_TYPE_DIRECT
132248590Smm#define	I2O_DPT_DEVICE_TYPE_SEQUENTIAL	  I2O_SCSI_DEVICE_TYPE_SEQUENTIAL
133248590Smm#define	I2O_DPT_DEVICE_TYPE_PRINTER	  I2O_SCSI_DEVICE_TYPE_PRINTER
134248590Smm#define	I2O_DPT_DEVICE_TYPE_PROCESSOR	  I2O_SCSI_DEVICE_TYPE_PROCESSOR
135248590Smm#define	I2O_DPT_DEVICE_TYPE_WORM	  I2O_SCSI_DEVICE_TYPE_WORM
136248590Smm#define	I2O_DPT_DEVICE_TYPE_CDROM	  I2O_SCSI_DEVICE_TYPE_CDROM
137248590Smm#define	I2O_DPT_DEVICE_TYPE_SCANNER	  I2O_SCSI_DEVICE_TYPE_SCANNER
138248590Smm#define	I2O_DPT_DEVICE_TYPE_OPTICAL	  I2O_SCSI_DEVICE_TYPE_OPTICAL
139248590Smm#define	I2O_DPT_DEVICE_TYPE_MEDIA_CHANGER I2O_SCSI_DEVICE_TYPE_MEDIA_CHANGER
140248590Smm#define	I2O_DPT_DEVICE_TYPE_COMM	  I2O_SCSI_DEVICE_TYPE_COMM
141248590Smm#define	I2O_DPT_DEVICE_GRAPHICS_1	  I2O_SCSI_DEVICE_GRAPHICS_1
142248590Smm#define	I2O_DPT_DEVICE_GRAPHICS_2	  I2O_SCSI_DEVICE_GRAPHICS_2
143248590Smm#define	I2O_DPT_DEVICE_TYPE_ARRAY_CONT	  I2O_SCSI_DEVICE_TYPE_ARRAY_CONT
144248590Smm#define	I2O_DPT_DEVICE_TYPE_UNKNOWN	  I2O_SCSI_DEVICE_TYPE_UNKNOWN
145248590Smm
146248590Smm/* Flags */
147248590Smm
148248590Smm#define	I2O_DPT_PERIPHERAL_TYPE_FLAG	  I2O_SCSI_PERIPHERAL_TYPE_FLAG
149248590Smm#define	I2O_DPT_PERIPHERAL_TYPE_PARALLEL  I2O_SCSI_PERIPHERAL_TYPE_PARALLEL
150248590Smm#define	I2O_DPT_PERIPHERAL_TYPE_SERIAL	  I2O_SCSI_PERIPHERAL_TYPE_SERIAL
151248590Smm
152248590Smm#define	I2O_DPT_RESERVED_FLAG		  I2O_SCSI_RESERVED_FLAG
153248590Smm
154248590Smm#define	I2O_DPT_DISCONNECT_FLAG		  I2O_SCSI_DISCONNECT_FLAG
155248590Smm#define	I2O_DPT_DISABLE_DISCONNECT	  I2O_SCSI_DISABLE_DISCONNECT
156248590Smm#define	I2O_DPT_ENABLE_DISCONNECT	  I2O_SCSI_ENABLE_DISCONNECT
157248590Smm
158248590Smm#define	I2O_DPT_MODE_MASK		  I2O_SCSI_MODE_MASK
159248590Smm#define	I2O_DPT_MODE_SET_DATA		  I2O_SCSI_MODE_SET_DATA
160248590Smm#define	I2O_DPT_MODE_SET_DEFAULT	  I2O_SCSI_MODE_SET_DEFAULT
161248590Smm#define	I2O_DPT_MODE_SET_SAFEST		  I2O_SCSI_MODE_SET_SAFEST
162248590Smm
163248590Smm#define	I2O_DPT_DATA_WIDTH_MASK		  I2O_SCSI_DATA_WIDTH_MASK
164248590Smm#define	I2O_DPT_DATA_WIDTH_8		  I2O_SCSI_DATA_WIDTH_8
165248590Smm#define	I2O_DPT_DATA_WIDTH_16		  I2O_SCSI_DATA_WIDTH_16
166248590Smm#define	I2O_DPT_DATA_WIDTH_32		  I2O_SCSI_DATA_WIDTH_32
167248590Smm
168248590Smm#define	I2O_DPT_SYNC_NEGOTIATION_FLAG	  I2O_SCSI_SYNC_NEGOTIATION_FLAG
169248590Smm#define	I2O_DPT_DISABLE_SYNC_NEGOTIATION  I2O_SCSI_DISABLE_SYNC_NEGOTIATION
170248590Smm#define	I2O_DPT_ENABLE_SYNC_NEGOTIATION	  I2O_SCSI_ENABLE_SYNC_NEGOTIATION
171248590Smm
172248590Smm/* DPT Device Group 8000h - Device Information Parameter Group */
173248590Smm
174248590Smmtypedef struct _I2O_DPT_DEVICE_INFO_SCALAR {
175248590Smm    U8		DeviceType;	/* Identical to I2O_SCSI_DEVICE_INFO SCALAR */
176248590Smm    U8		Flags;		/* Identical to I2O_SCSI_DEVICE_INFO SCALAR */
177248590Smm    U16		Bus;
178248590Smm    U32		Identifier;
179248590Smm    U8		LunInfo[8]; /* SCSI-2 8-bit scalar LUN goes into offset 1 */
180248590Smm
181248590Smm} I2O_DPT_DEVICE_INFO_SCALAR, *PI2O_DPT_DEVICE_INFO_SCALAR;
182248590Smm
183248590Smm#define	I2O_DPT_EXEC_IOP_BUFFERS_GROUP_NO    0x8000
184248590Smm
185248590Smm/* DPT Exec Iop Buffers Group 8000h */
186248590Smm
187248590Smmtypedef struct _I2O_DPT_EXEC_IOP_BUFFERS_SCALAR {
188248590Smm    U32	     SerialOutputOffset;    /* offset from base address to header   */
189248590Smm    U32	     SerialOutputSize;	    /* size of data buffer in bytes	    */
190248590Smm    U32	     SerialHeaderSize;	    /* size of data buffer header in bytes  */
191248590Smm    U32	     SerialFlagsSupported;  /* Mask of debug flags supported	    */
192248590Smm
193} I2O_DPT_EXEC_IOP_BUFFERS_SCALAR, *PI2O_DPT_EXEC_IOP_BUFFERS_SCALAR;
194
195
196#endif /* I2O_DPT_HDR */
197