Initial import from FreeBSD RELENG_4:
[dragonfly.git] / sys / dev / raid / asr / i2odpt.h
1 /* $FreeBSD: src/sys/dev/asr/i2odpt.h,v 1.1.2.1 2000/09/21 20:33:50 msmith Exp $ */
2 /****************************************************************
3  * Copyright (c) 1996-2000 Distributed Processing Technology Corporation
4  * Copyright (c) 2000 Adaptec Corporation.
5  * All rights reserved.
6  *
7  ****************************************************************/
8
9 #if !defined(I2O_DPT_HDR)
10 #define I2O_DPT_HDR
11
12 #define DPT_ORGANIZATION_ID 0x1B        /* For Private Messages */
13
14 /*
15  *      PrivateMessageFrame.StdMessageFrame.Function = I2O_PRIVATE_MESSAGE
16  *      PrivateMessageFrame.XFunctionCode = I2O_SCSI_SCB_EXEC
17  */
18
19 typedef struct _PRIVATE_SCSI_SCB_EXECUTE_MESSAGE {
20     I2O_PRIVATE_MESSAGE_FRAME PrivateMessageFrame;
21 #   if (defined(sparc) || defined(_DPT_BIG_ENDIAN))
22         U32                   TID; /* Upper four bits currently are zero */
23 #   else
24         BF                    TID:16; /* Upper four bits currently are zero */
25         /* Command is interpreted by the host */
26         BF                    Interpret:1;
27         /* if TRUE, deal with Physical Firmware Array information */
28         BF                    Physical:1;
29         BF                    Reserved1:14;
30 #   endif
31     U8                        CDBLength;
32     U8                        Reserved;
33     I2O_SCB_FLAGS             SCBFlags;
34     U8                        CDB[  I2O_SCSI_CDB_LENGTH  ];
35     U32                       ByteCount;
36     I2O_SG_ELEMENT            SGL;
37 } PRIVATE_SCSI_SCB_EXECUTE_MESSAGE, * PPRIVATE_SCSI_SCB_EXECUTE_MESSAGE;
38
39 /*
40  * Flash access and programming messages
41  *      PrivateMessageFrame.StdMessageFrame.Function = I2O_PRIVATE_MESSAGE
42  *      PrivateMessageFrame.XFunctionCode = PRIVATE_FLAGS_REGION_*
43  *
44  *      SIZE    returns the total size of a region of flash
45  *      READ    copies a region (or portion thereof) into the buffer specified
46  *              by the SGL
47  *      WRITE   writes a region (or portion thereof) using the data specified
48  *              by the SGL
49  *
50  * Flash regions
51  *
52  *      0               operational-mode firmware
53  *      1               software (bios/utility)
54  *      2               oem nvram defaults
55  *      3               hba serial number
56  *      4               boot-mode firmware
57  *
58  * Any combination of RegionOffset and ByteCount can be specified providing
59  * they fit within the size of the specified region.
60  *
61  * Flash messages should be targeted to the Executive TID 0x000
62  */
63
64 #define PRIVATE_FLASH_REGION_SIZE       0x0100
65 #define PRIVATE_FLASH_REGION_READ       0x0101
66 #define PRIVATE_FLASH_REGION_WRITE      0x0102
67 #define PRIVATE_FLASH_REGION_CRC        0x0103
68
69 typedef struct _PRIVATE_FLASH_REGION_MESSAGE {
70     I2O_PRIVATE_MESSAGE_FRAME PrivateMessageFrame;
71     U32                       FlashRegion;
72     U32                       RegionOffset;
73     U32                       ByteCount;
74     I2O_SG_ELEMENT            SGL;
75 } PRIVATE_FLASH_REGION_MESSAGE, * PPRIVATE_FLASH_REGION_MESSAGE;
76
77 /* DPT Driver Printf message */
78
79 #define PRIVATE_DRIVER_PRINTF 0x0200
80
81 /* FwPrintFlags */
82 #define FW_FIRMWARE_FLAGS_NO_HEADER_B   0x00000001 /* Remove date header */
83
84 typedef struct _PRIVATE_DRIVER_PRINTF_MESSAGE {
85
86     I2O_PRIVATE_MESSAGE_FRAME   PrivateMessageFrame;
87
88     /* total bytes in PrintBuffer, including header */
89     U32                 PrintBufferByteCount;
90     /* exact data to be copied into the serial PrintBuffer */
91     U8                  PrintBuffer[1];
92
93 } PRIVATE_DRIVER_PRINTF_MESSAGE, * PPRIVATE_DRIVER_PRINTF_MESSAGE;
94
95 /* DPT Enable Diagnostics message 0x0201 */
96
97 #define PRIVATE_DIAG_ENABLE 0x0201
98
99 typedef struct _PRIVATE_DIAG_ENABLE_MESSAGE {
100         I2O_PRIVATE_MESSAGE_FRAME       PrivateMessageFrame;
101 } PRIVATE_DIAG_MESSAGE_FRAME, * PPRIVATE_DIAG_MESSAGE_FRAME;
102
103 /* DPT Driver Get/Put message */
104
105 #define PRIVATE_DRIVER_GET      0x300
106 #define PRIVATE_DRIVER_PUT      0x301
107
108 typedef struct _PRIVATE_DRIVER_GETPUT_MESSAGE
109 {
110         I2O_PRIVATE_MESSAGE_FRAME       PrivateMessageFrame;
111         U32                             Offset;
112         U32                             ByteCount;
113         I2O_SG_ELEMENT                  SGL;
114 } PRIVATE_DRIVER_GETPUT_MESSAGE, * PPRIVATE_DRIVER_GETPUT_MESSAGE;
115
116 /****************************************************************************/
117
118 /* DPT Peripheral Device Parameter Groups */
119
120 /****************************************************************************/
121
122 /* DPT Configuration and Operating Structures and Defines */
123
124 #define     I2O_DPT_DEVICE_INFO_GROUP_NO               0x8000
125
126 /* - 8000h - DPT Device Information Parameters Group defines */
127
128 /* Device Type */
129
130 #define I2O_DPT_DEVICE_TYPE_DIRECT        I2O_SCSI_DEVICE_TYPE_DIRECT
131 #define I2O_DPT_DEVICE_TYPE_SEQUENTIAL    I2O_SCSI_DEVICE_TYPE_SEQUENTIAL
132 #define I2O_DPT_DEVICE_TYPE_PRINTER       I2O_SCSI_DEVICE_TYPE_PRINTER
133 #define I2O_DPT_DEVICE_TYPE_PROCESSOR     I2O_SCSI_DEVICE_TYPE_PROCESSOR
134 #define I2O_DPT_DEVICE_TYPE_WORM          I2O_SCSI_DEVICE_TYPE_WORM
135 #define I2O_DPT_DEVICE_TYPE_CDROM         I2O_SCSI_DEVICE_TYPE_CDROM
136 #define I2O_DPT_DEVICE_TYPE_SCANNER       I2O_SCSI_DEVICE_TYPE_SCANNER
137 #define I2O_DPT_DEVICE_TYPE_OPTICAL       I2O_SCSI_DEVICE_TYPE_OPTICAL
138 #define I2O_DPT_DEVICE_TYPE_MEDIA_CHANGER I2O_SCSI_DEVICE_TYPE_MEDIA_CHANGER
139 #define I2O_DPT_DEVICE_TYPE_COMM          I2O_SCSI_DEVICE_TYPE_COMM
140 #define I2O_DPT_DEVICE_GRAPHICS_1         I2O_SCSI_DEVICE_GRAPHICS_1
141 #define I2O_DPT_DEVICE_GRAPHICS_2         I2O_SCSI_DEVICE_GRAPHICS_2
142 #define I2O_DPT_DEVICE_TYPE_ARRAY_CONT    I2O_SCSI_DEVICE_TYPE_ARRAY_CONT
143 #define I2O_DPT_DEVICE_TYPE_UNKNOWN       I2O_SCSI_DEVICE_TYPE_UNKNOWN
144
145 /* Flags */
146
147 #define I2O_DPT_PERIPHERAL_TYPE_FLAG      I2O_SCSI_PERIPHERAL_TYPE_FLAG
148 #define I2O_DPT_PERIPHERAL_TYPE_PARALLEL  I2O_SCSI_PERIPHERAL_TYPE_PARALLEL
149 #define I2O_DPT_PERIPHERAL_TYPE_SERIAL    I2O_SCSI_PERIPHERAL_TYPE_SERIAL
150
151 #define I2O_DPT_RESERVED_FLAG             I2O_SCSI_RESERVED_FLAG
152
153 #define I2O_DPT_DISCONNECT_FLAG           I2O_SCSI_DISCONNECT_FLAG
154 #define I2O_DPT_DISABLE_DISCONNECT        I2O_SCSI_DISABLE_DISCONNECT
155 #define I2O_DPT_ENABLE_DISCONNECT         I2O_SCSI_ENABLE_DISCONNECT
156
157 #define I2O_DPT_MODE_MASK                 I2O_SCSI_MODE_MASK
158 #define I2O_DPT_MODE_SET_DATA             I2O_SCSI_MODE_SET_DATA
159 #define I2O_DPT_MODE_SET_DEFAULT          I2O_SCSI_MODE_SET_DEFAULT
160 #define I2O_DPT_MODE_SET_SAFEST           I2O_SCSI_MODE_SET_SAFEST
161
162 #define I2O_DPT_DATA_WIDTH_MASK           I2O_SCSI_DATA_WIDTH_MASK
163 #define I2O_DPT_DATA_WIDTH_8              I2O_SCSI_DATA_WIDTH_8
164 #define I2O_DPT_DATA_WIDTH_16             I2O_SCSI_DATA_WIDTH_16
165 #define I2O_DPT_DATA_WIDTH_32             I2O_SCSI_DATA_WIDTH_32
166
167 #define I2O_DPT_SYNC_NEGOTIATION_FLAG     I2O_SCSI_SYNC_NEGOTIATION_FLAG
168 #define I2O_DPT_DISABLE_SYNC_NEGOTIATION  I2O_SCSI_DISABLE_SYNC_NEGOTIATION
169 #define I2O_DPT_ENABLE_SYNC_NEGOTIATION   I2O_SCSI_ENABLE_SYNC_NEGOTIATION
170
171 /* DPT Device Group 8000h - Device Information Parameter Group */
172
173 typedef struct _I2O_DPT_DEVICE_INFO_SCALAR {
174     U8          DeviceType;     /* Identical to I2O_SCSI_DEVICE_INFO SCALAR */
175     U8          Flags;          /* Identical to I2O_SCSI_DEVICE_INFO SCALAR */
176     U16         Bus;
177     U32         Identifier;
178     U8          LunInfo[8]; /* SCSI-2 8-bit scalar LUN goes into offset 1 */
179
180 } I2O_DPT_DEVICE_INFO_SCALAR, *PI2O_DPT_DEVICE_INFO_SCALAR;
181
182 #define I2O_DPT_EXEC_IOP_BUFFERS_GROUP_NO    0x8000
183
184 /* DPT Exec Iop Buffers Group 8000h */
185
186 typedef struct _I2O_DPT_EXEC_IOP_BUFFERS_SCALAR {
187     U32      SerialOutputOffset;    /* offset from base address to header   */
188     U32      SerialOutputSize;      /* size of data buffer in bytes         */
189     U32      SerialHeaderSize;      /* size of data buffer header in bytes  */
190     U32      SerialFlagsSupported;  /* Mask of debug flags supported        */
191
192 } I2O_DPT_EXEC_IOP_BUFFERS_SCALAR, *PI2O_DPT_EXEC_IOP_BUFFERS_SCALAR;
193
194
195 #endif /* I2O_DPT_HDR */