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