summaryrefslogtreecommitdiffstats
path: root/sys/dev/asr/i2odpt.h
blob: 4c9a9d46231878cb768a568b69b283d9e43ab974 (plain)
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
/*-
 *****************************************************************
 * Copyright (c) 1996-2000 Distributed Processing Technology Corporation
 * Copyright (c) 2000 Adaptec Corporation.
 * All rights reserved.
 *
 * $FreeBSD$
 *
 ****************************************************************/

#if !defined(I2O_DPT_HDR)
#define	I2O_DPT_HDR

#define	DPT_ORGANIZATION_ID 0x1B	/* For Private Messages */

/*
 *	PrivateMessageFrame.StdMessageFrame.Function = I2O_PRIVATE_MESSAGE
 *	PrivateMessageFrame.XFunctionCode = I2O_SCSI_SCB_EXEC
 */

typedef struct _PRIVATE_SCSI_SCB_EXECUTE_MESSAGE {
    I2O_PRIVATE_MESSAGE_FRAME PrivateMessageFrame;
#   if (defined(sparc) || defined(_DPT_BIG_ENDIAN))
	U32		      TID; /* Upper four bits currently are zero */
#   else
	BF		      TID:16; /* Upper four bits currently are zero */
	/* Command is interpreted by the host */
	BF		      Interpret:1;
	/* if TRUE, deal with Physical Firmware Array information */
	BF		      Physical:1;
	BF		      Reserved1:14;
#   endif
    U8			      CDBLength;
    U8			      Reserved;
    I2O_SCB_FLAGS	      SCBFlags;
    U8			      CDB[  I2O_SCSI_CDB_LENGTH	 ];
    U32			      ByteCount;
    I2O_SG_ELEMENT	      SGL;
} PRIVATE_SCSI_SCB_EXECUTE_MESSAGE, * PPRIVATE_SCSI_SCB_EXECUTE_MESSAGE;

/*
 * Flash access and programming messages
 *	PrivateMessageFrame.StdMessageFrame.Function = I2O_PRIVATE_MESSAGE
 *	PrivateMessageFrame.XFunctionCode = PRIVATE_FLAGS_REGION_*
 *
 *	SIZE	returns the total size of a region of flash
 *	READ	copies a region (or portion thereof) into the buffer specified
 *		by the SGL
 *	WRITE	writes a region (or portion thereof) using the data specified
 *		by the SGL
 *
 * Flash regions
 *
 *	0		operational-mode firmware
 *	1		software (bios/utility)
 *	2		oem nvram defaults
 *	3		hba serial number
 *	4		boot-mode firmware
 *
 * Any combination of RegionOffset and ByteCount can be specified providing
 * they fit within the size of the specified region.
 *
 * Flash messages should be targeted to the Executive TID 0x000
 */

#define	PRIVATE_FLASH_REGION_SIZE	0x0100
#define	PRIVATE_FLASH_REGION_READ	0x0101
#define	PRIVATE_FLASH_REGION_WRITE	0x0102
#define	PRIVATE_FLASH_REGION_CRC	0x0103

typedef struct _PRIVATE_FLASH_REGION_MESSAGE {
    I2O_PRIVATE_MESSAGE_FRAME PrivateMessageFrame;
    U32			      FlashRegion;
    U32			      RegionOffset;
    U32			      ByteCount;
    I2O_SG_ELEMENT	      SGL;
} PRIVATE_FLASH_REGION_MESSAGE, * PPRIVATE_FLASH_REGION_MESSAGE;

/* DPT Driver Printf message */

#define	PRIVATE_DRIVER_PRINTF 0x0200

/* FwPrintFlags */
#define	FW_FIRMWARE_FLAGS_NO_HEADER_B	0x00000001 /* Remove date header */

typedef struct _PRIVATE_DRIVER_PRINTF_MESSAGE {

    I2O_PRIVATE_MESSAGE_FRAME	PrivateMessageFrame;

    /* total bytes in PrintBuffer, including header */
    U32			PrintBufferByteCount;
    /* exact data to be copied into the serial PrintBuffer */
    U8			PrintBuffer[1];

} PRIVATE_DRIVER_PRINTF_MESSAGE, * PPRIVATE_DRIVER_PRINTF_MESSAGE;

/* DPT Enable Diagnostics message 0x0201 */

#define	PRIVATE_DIAG_ENABLE 0x0201

typedef struct _PRIVATE_DIAG_ENABLE_MESSAGE {
	I2O_PRIVATE_MESSAGE_FRAME	PrivateMessageFrame;
} PRIVATE_DIAG_MESSAGE_FRAME, * PPRIVATE_DIAG_MESSAGE_FRAME;

/* DPT Driver Get/Put message */

#define	PRIVATE_DRIVER_GET	0x300
#define	PRIVATE_DRIVER_PUT	0x301

typedef struct _PRIVATE_DRIVER_GETPUT_MESSAGE
{
	I2O_PRIVATE_MESSAGE_FRAME	PrivateMessageFrame;
	U32				Offset;
	U32				ByteCount;
	I2O_SG_ELEMENT			SGL;
} PRIVATE_DRIVER_GETPUT_MESSAGE, * PPRIVATE_DRIVER_GETPUT_MESSAGE;

/****************************************************************************/

/* DPT Peripheral Device Parameter Groups */

/****************************************************************************/

/* DPT Configuration and Operating Structures and Defines */

#define	    I2O_DPT_DEVICE_INFO_GROUP_NO	       0x8000

/* - 8000h - DPT Device Information Parameters Group defines */

/* Device Type */

#define	I2O_DPT_DEVICE_TYPE_DIRECT	  I2O_SCSI_DEVICE_TYPE_DIRECT
#define	I2O_DPT_DEVICE_TYPE_SEQUENTIAL	  I2O_SCSI_DEVICE_TYPE_SEQUENTIAL
#define	I2O_DPT_DEVICE_TYPE_PRINTER	  I2O_SCSI_DEVICE_TYPE_PRINTER
#define	I2O_DPT_DEVICE_TYPE_PROCESSOR	  I2O_SCSI_DEVICE_TYPE_PROCESSOR
#define	I2O_DPT_DEVICE_TYPE_WORM	  I2O_SCSI_DEVICE_TYPE_WORM
#define	I2O_DPT_DEVICE_TYPE_CDROM	  I2O_SCSI_DEVICE_TYPE_CDROM
#define	I2O_DPT_DEVICE_TYPE_SCANNER	  I2O_SCSI_DEVICE_TYPE_SCANNER
#define	I2O_DPT_DEVICE_TYPE_OPTICAL	  I2O_SCSI_DEVICE_TYPE_OPTICAL
#define	I2O_DPT_DEVICE_TYPE_MEDIA_CHANGER I2O_SCSI_DEVICE_TYPE_MEDIA_CHANGER
#define	I2O_DPT_DEVICE_TYPE_COMM	  I2O_SCSI_DEVICE_TYPE_COMM
#define	I2O_DPT_DEVICE_GRAPHICS_1	  I2O_SCSI_DEVICE_GRAPHICS_1
#define	I2O_DPT_DEVICE_GRAPHICS_2	  I2O_SCSI_DEVICE_GRAPHICS_2
#define	I2O_DPT_DEVICE_TYPE_ARRAY_CONT	  I2O_SCSI_DEVICE_TYPE_ARRAY_CONT
#define	I2O_DPT_DEVICE_TYPE_UNKNOWN	  I2O_SCSI_DEVICE_TYPE_UNKNOWN

/* Flags */

#define	I2O_DPT_PERIPHERAL_TYPE_FLAG	  I2O_SCSI_PERIPHERAL_TYPE_FLAG
#define	I2O_DPT_PERIPHERAL_TYPE_PARALLEL  I2O_SCSI_PERIPHERAL_TYPE_PARALLEL
#define	I2O_DPT_PERIPHERAL_TYPE_SERIAL	  I2O_SCSI_PERIPHERAL_TYPE_SERIAL

#define	I2O_DPT_RESERVED_FLAG		  I2O_SCSI_RESERVED_FLAG

#define	I2O_DPT_DISCONNECT_FLAG		  I2O_SCSI_DISCONNECT_FLAG
#define	I2O_DPT_DISABLE_DISCONNECT	  I2O_SCSI_DISABLE_DISCONNECT
#define	I2O_DPT_ENABLE_DISCONNECT	  I2O_SCSI_ENABLE_DISCONNECT

#define	I2O_DPT_MODE_MASK		  I2O_SCSI_MODE_MASK
#define	I2O_DPT_MODE_SET_DATA		  I2O_SCSI_MODE_SET_DATA
#define	I2O_DPT_MODE_SET_DEFAULT	  I2O_SCSI_MODE_SET_DEFAULT
#define	I2O_DPT_MODE_SET_SAFEST		  I2O_SCSI_MODE_SET_SAFEST

#define	I2O_DPT_DATA_WIDTH_MASK		  I2O_SCSI_DATA_WIDTH_MASK
#define	I2O_DPT_DATA_WIDTH_8		  I2O_SCSI_DATA_WIDTH_8
#define	I2O_DPT_DATA_WIDTH_16		  I2O_SCSI_DATA_WIDTH_16
#define	I2O_DPT_DATA_WIDTH_32		  I2O_SCSI_DATA_WIDTH_32

#define	I2O_DPT_SYNC_NEGOTIATION_FLAG	  I2O_SCSI_SYNC_NEGOTIATION_FLAG
#define	I2O_DPT_DISABLE_SYNC_NEGOTIATION  I2O_SCSI_DISABLE_SYNC_NEGOTIATION
#define	I2O_DPT_ENABLE_SYNC_NEGOTIATION	  I2O_SCSI_ENABLE_SYNC_NEGOTIATION

/* DPT Device Group 8000h - Device Information Parameter Group */

typedef struct _I2O_DPT_DEVICE_INFO_SCALAR {
    U8		DeviceType;	/* Identical to I2O_SCSI_DEVICE_INFO SCALAR */
    U8		Flags;		/* Identical to I2O_SCSI_DEVICE_INFO SCALAR */
    U16		Bus;
    U32		Identifier;
    U8		LunInfo[8]; /* SCSI-2 8-bit scalar LUN goes into offset 1 */

} I2O_DPT_DEVICE_INFO_SCALAR, *PI2O_DPT_DEVICE_INFO_SCALAR;

#define	I2O_DPT_EXEC_IOP_BUFFERS_GROUP_NO    0x8000

/* DPT Exec Iop Buffers Group 8000h */

typedef struct _I2O_DPT_EXEC_IOP_BUFFERS_SCALAR {
    U32	     SerialOutputOffset;    /* offset from base address to header   */
    U32	     SerialOutputSize;	    /* size of data buffer in bytes	    */
    U32	     SerialHeaderSize;	    /* size of data buffer header in bytes  */
    U32	     SerialFlagsSupported;  /* Mask of debug flags supported	    */

} I2O_DPT_EXEC_IOP_BUFFERS_SCALAR, *PI2O_DPT_EXEC_IOP_BUFFERS_SCALAR;


#endif /* I2O_DPT_HDR */
OpenPOWER on IntegriCloud