summaryrefslogtreecommitdiffstats
path: root/sys/dev/asr/i2odpt.h
blob: cf573ab41175cbb5d96918503da1002f1359e94b (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
/****************************************************************
 * 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