i2odpt.h revision 96615
1219089Spjd/****************************************************************
2219089Spjd * Copyright (c) 1996-2000 Distributed Processing Technology Corporation
3219089Spjd * Copyright (c) 2000 Adaptec Corporation.
4219089Spjd * All rights reserved.
5219089Spjd *
6219089Spjd * $FreeBSD: head/sys/dev/asr/i2odpt.h 96615 2002-05-14 21:59:10Z obrien $
7219089Spjd *
8219089Spjd ****************************************************************/
9219089Spjd
10219089Spjd#if !defined(I2O_DPT_HDR)
11219089Spjd#define	I2O_DPT_HDR
12219089Spjd
13219089Spjd#define	DPT_ORGANIZATION_ID 0x1B	/* For Private Messages */
14219089Spjd
15219089Spjd/*
16219089Spjd *	PrivateMessageFrame.StdMessageFrame.Function = I2O_PRIVATE_MESSAGE
17219089Spjd *	PrivateMessageFrame.XFunctionCode = I2O_SCSI_SCB_EXEC
18219089Spjd */
19219089Spjd
20219089Spjdtypedef struct _PRIVATE_SCSI_SCB_EXECUTE_MESSAGE {
21219089Spjd    I2O_PRIVATE_MESSAGE_FRAME PrivateMessageFrame;
22219089Spjd#   if (defined(sparc) || defined(_DPT_BIG_ENDIAN))
23249195Smm	U32		      TID; /* Upper four bits currently are zero */
24219089Spjd#   else
25219089Spjd	BF		      TID:16; /* Upper four bits currently are zero */
26219089Spjd	/* Command is interpreted by the host */
27219089Spjd	BF		      Interpret:1;
28219089Spjd	/* if TRUE, deal with Physical Firmware Array information */
29219089Spjd	BF		      Physical:1;
30219089Spjd	BF		      Reserved1:14;
31219089Spjd#   endif
32219089Spjd    U8			      CDBLength;
33219089Spjd    U8			      Reserved;
34219089Spjd    I2O_SCB_FLAGS	      SCBFlags;
35219089Spjd    U8			      CDB[  I2O_SCSI_CDB_LENGTH	 ];
36219089Spjd    U32			      ByteCount;
37219089Spjd    I2O_SG_ELEMENT	      SGL;
38219089Spjd} PRIVATE_SCSI_SCB_EXECUTE_MESSAGE, * PPRIVATE_SCSI_SCB_EXECUTE_MESSAGE;
39219089Spjd
40219089Spjd/*
41219089Spjd * Flash access and programming messages
42219089Spjd *	PrivateMessageFrame.StdMessageFrame.Function = I2O_PRIVATE_MESSAGE
43219089Spjd *	PrivateMessageFrame.XFunctionCode = PRIVATE_FLAGS_REGION_*
44219089Spjd *
45219089Spjd *	SIZE	returns the total size of a region of flash
46219089Spjd *	READ	copies a region (or portion thereof) into the buffer specified
47219089Spjd *		by the SGL
48236884Smm *	WRITE	writes a region (or portion thereof) using the data specified
49219089Spjd *		by the SGL
50219089Spjd *
51219089Spjd * Flash regions
52219089Spjd *
53219089Spjd *	0		operational-mode firmware
54219089Spjd *	1		software (bios/utility)
55219089Spjd *	2		oem nvram defaults
56219089Spjd *	3		hba serial number
57219089Spjd *	4		boot-mode firmware
58248571Smm *
59219089Spjd * Any combination of RegionOffset and ByteCount can be specified providing
60219089Spjd * they fit within the size of the specified region.
61237972Smm *
62237972Smm * Flash messages should be targeted to the Executive TID 0x000
63237972Smm */
64237972Smm
65219089Spjd#define	PRIVATE_FLASH_REGION_SIZE	0x0100
66237972Smm#define	PRIVATE_FLASH_REGION_READ	0x0101
67237972Smm#define	PRIVATE_FLASH_REGION_WRITE	0x0102
68237972Smm#define	PRIVATE_FLASH_REGION_CRC	0x0103
69237972Smm
70219089Spjdtypedef struct _PRIVATE_FLASH_REGION_MESSAGE {
71219089Spjd    I2O_PRIVATE_MESSAGE_FRAME PrivateMessageFrame;
72237972Smm    U32			      FlashRegion;
73237972Smm    U32			      RegionOffset;
74237972Smm    U32			      ByteCount;
75237972Smm    I2O_SG_ELEMENT	      SGL;
76237972Smm} PRIVATE_FLASH_REGION_MESSAGE, * PPRIVATE_FLASH_REGION_MESSAGE;
77237972Smm
78237972Smm/* DPT Driver Printf message */
79237972Smm
80237972Smm#define	PRIVATE_DRIVER_PRINTF 0x0200
81237972Smm
82237972Smm/* FwPrintFlags */
83237972Smm#define	FW_FIRMWARE_FLAGS_NO_HEADER_B	0x00000001 /* Remove date header */
84237972Smm
85237972Smmtypedef struct _PRIVATE_DRIVER_PRINTF_MESSAGE {
86237972Smm
87237972Smm    I2O_PRIVATE_MESSAGE_FRAME	PrivateMessageFrame;
88237972Smm
89237972Smm    /* total bytes in PrintBuffer, including header */
90237972Smm    U32			PrintBufferByteCount;
91237972Smm    /* exact data to be copied into the serial PrintBuffer */
92237972Smm    U8			PrintBuffer[1];
93237972Smm
94237972Smm} PRIVATE_DRIVER_PRINTF_MESSAGE, * PPRIVATE_DRIVER_PRINTF_MESSAGE;
95237972Smm
96237972Smm/* DPT Enable Diagnostics message 0x0201 */
97237972Smm
98237972Smm#define	PRIVATE_DIAG_ENABLE 0x0201
99237972Smm
100237972Smmtypedef struct _PRIVATE_DIAG_ENABLE_MESSAGE {
101237972Smm	I2O_PRIVATE_MESSAGE_FRAME	PrivateMessageFrame;
102219089Spjd} PRIVATE_DIAG_MESSAGE_FRAME, * PPRIVATE_DIAG_MESSAGE_FRAME;
103219089Spjd
104219089Spjd/* DPT Driver Get/Put message */
105219089Spjd
106219089Spjd#define	PRIVATE_DRIVER_GET	0x300
107219089Spjd#define	PRIVATE_DRIVER_PUT	0x301
108219089Spjd
109219089Spjdtypedef struct _PRIVATE_DRIVER_GETPUT_MESSAGE
110219089Spjd{
111219089Spjd	I2O_PRIVATE_MESSAGE_FRAME	PrivateMessageFrame;
112219089Spjd	U32				Offset;
113219089Spjd	U32				ByteCount;
114219089Spjd	I2O_SG_ELEMENT			SGL;
115219089Spjd} PRIVATE_DRIVER_GETPUT_MESSAGE, * PPRIVATE_DRIVER_GETPUT_MESSAGE;
116219089Spjd
117219089Spjd/****************************************************************************/
118219089Spjd
119219089Spjd/* DPT Peripheral Device Parameter Groups */
120219089Spjd
121219089Spjd/****************************************************************************/
122219089Spjd
123219089Spjd/* DPT Configuration and Operating Structures and Defines */
124219089Spjd
125219089Spjd#define	    I2O_DPT_DEVICE_INFO_GROUP_NO	       0x8000
126219089Spjd
127219089Spjd/* - 8000h - DPT Device Information Parameters Group defines */
128249858Smm
129249858Smm/* Device Type */
130249858Smm
131249858Smm#define	I2O_DPT_DEVICE_TYPE_DIRECT	  I2O_SCSI_DEVICE_TYPE_DIRECT
132249858Smm#define	I2O_DPT_DEVICE_TYPE_SEQUENTIAL	  I2O_SCSI_DEVICE_TYPE_SEQUENTIAL
133249858Smm#define	I2O_DPT_DEVICE_TYPE_PRINTER	  I2O_SCSI_DEVICE_TYPE_PRINTER
134249858Smm#define	I2O_DPT_DEVICE_TYPE_PROCESSOR	  I2O_SCSI_DEVICE_TYPE_PROCESSOR
135249858Smm#define	I2O_DPT_DEVICE_TYPE_WORM	  I2O_SCSI_DEVICE_TYPE_WORM
136249858Smm#define	I2O_DPT_DEVICE_TYPE_CDROM	  I2O_SCSI_DEVICE_TYPE_CDROM
137219089Spjd#define	I2O_DPT_DEVICE_TYPE_SCANNER	  I2O_SCSI_DEVICE_TYPE_SCANNER
138219089Spjd#define	I2O_DPT_DEVICE_TYPE_OPTICAL	  I2O_SCSI_DEVICE_TYPE_OPTICAL
139219089Spjd#define	I2O_DPT_DEVICE_TYPE_MEDIA_CHANGER I2O_SCSI_DEVICE_TYPE_MEDIA_CHANGER
140219089Spjd#define	I2O_DPT_DEVICE_TYPE_COMM	  I2O_SCSI_DEVICE_TYPE_COMM
141219089Spjd#define	I2O_DPT_DEVICE_GRAPHICS_1	  I2O_SCSI_DEVICE_GRAPHICS_1
142219089Spjd#define	I2O_DPT_DEVICE_GRAPHICS_2	  I2O_SCSI_DEVICE_GRAPHICS_2
143219089Spjd#define	I2O_DPT_DEVICE_TYPE_ARRAY_CONT	  I2O_SCSI_DEVICE_TYPE_ARRAY_CONT
144219089Spjd#define	I2O_DPT_DEVICE_TYPE_UNKNOWN	  I2O_SCSI_DEVICE_TYPE_UNKNOWN
145219089Spjd
146219089Spjd/* Flags */
147219089Spjd
148219089Spjd#define	I2O_DPT_PERIPHERAL_TYPE_FLAG	  I2O_SCSI_PERIPHERAL_TYPE_FLAG
149219089Spjd#define	I2O_DPT_PERIPHERAL_TYPE_PARALLEL  I2O_SCSI_PERIPHERAL_TYPE_PARALLEL
150219089Spjd#define	I2O_DPT_PERIPHERAL_TYPE_SERIAL	  I2O_SCSI_PERIPHERAL_TYPE_SERIAL
151219089Spjd
152219089Spjd#define	I2O_DPT_RESERVED_FLAG		  I2O_SCSI_RESERVED_FLAG
153219089Spjd
154219089Spjd#define	I2O_DPT_DISCONNECT_FLAG		  I2O_SCSI_DISCONNECT_FLAG
155219089Spjd#define	I2O_DPT_DISABLE_DISCONNECT	  I2O_SCSI_DISABLE_DISCONNECT
156219089Spjd#define	I2O_DPT_ENABLE_DISCONNECT	  I2O_SCSI_ENABLE_DISCONNECT
157219089Spjd
158219089Spjd#define	I2O_DPT_MODE_MASK		  I2O_SCSI_MODE_MASK
159219089Spjd#define	I2O_DPT_MODE_SET_DATA		  I2O_SCSI_MODE_SET_DATA
160219089Spjd#define	I2O_DPT_MODE_SET_DEFAULT	  I2O_SCSI_MODE_SET_DEFAULT
161219089Spjd#define	I2O_DPT_MODE_SET_SAFEST		  I2O_SCSI_MODE_SET_SAFEST
162219089Spjd
163219089Spjd#define	I2O_DPT_DATA_WIDTH_MASK		  I2O_SCSI_DATA_WIDTH_MASK
164219089Spjd#define	I2O_DPT_DATA_WIDTH_8		  I2O_SCSI_DATA_WIDTH_8
165219089Spjd#define	I2O_DPT_DATA_WIDTH_16		  I2O_SCSI_DATA_WIDTH_16
166219089Spjd#define	I2O_DPT_DATA_WIDTH_32		  I2O_SCSI_DATA_WIDTH_32
167219089Spjd
168219089Spjd#define	I2O_DPT_SYNC_NEGOTIATION_FLAG	  I2O_SCSI_SYNC_NEGOTIATION_FLAG
169219089Spjd#define	I2O_DPT_DISABLE_SYNC_NEGOTIATION  I2O_SCSI_DISABLE_SYNC_NEGOTIATION
170219089Spjd#define	I2O_DPT_ENABLE_SYNC_NEGOTIATION	  I2O_SCSI_ENABLE_SYNC_NEGOTIATION
171219089Spjd
172219089Spjd/* DPT Device Group 8000h - Device Information Parameter Group */
173219089Spjd
174219089Spjdtypedef struct _I2O_DPT_DEVICE_INFO_SCALAR {
175219089Spjd    U8		DeviceType;	/* Identical to I2O_SCSI_DEVICE_INFO SCALAR */
176219089Spjd    U8		Flags;		/* Identical to I2O_SCSI_DEVICE_INFO SCALAR */
177219089Spjd    U16		Bus;
178219089Spjd    U32		Identifier;
179219089Spjd    U8		LunInfo[8]; /* SCSI-2 8-bit scalar LUN goes into offset 1 */
180219089Spjd
181219089Spjd} I2O_DPT_DEVICE_INFO_SCALAR, *PI2O_DPT_DEVICE_INFO_SCALAR;
182219089Spjd
183219089Spjd#define	I2O_DPT_EXEC_IOP_BUFFERS_GROUP_NO    0x8000
184219089Spjd
185219089Spjd/* DPT Exec Iop Buffers Group 8000h */
186219089Spjd
187219089Spjdtypedef struct _I2O_DPT_EXEC_IOP_BUFFERS_SCALAR {
188219089Spjd    U32	     SerialOutputOffset;    /* offset from base address to header   */
189219089Spjd    U32	     SerialOutputSize;	    /* size of data buffer in bytes	    */
190219089Spjd    U32	     SerialHeaderSize;	    /* size of data buffer header in bytes  */
191219089Spjd    U32	     SerialFlagsSupported;  /* Mask of debug flags supported	    */
192219089Spjd
193219089Spjd} I2O_DPT_EXEC_IOP_BUFFERS_SCALAR, *PI2O_DPT_EXEC_IOP_BUFFERS_SCALAR;
194219089Spjd
195219089Spjd
196248571Smm#endif /* I2O_DPT_HDR */
197219089Spjd