xref: /OK3568_Linux_fs/kernel/drivers/scsi/dpt/dpti_i2o.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0-or-later */
2*4882a593Smuzhiyun #ifndef _SCSI_I2O_H
3*4882a593Smuzhiyun #define _SCSI_I2O_H
4*4882a593Smuzhiyun 
5*4882a593Smuzhiyun /* I2O kernel space accessible structures/APIs
6*4882a593Smuzhiyun  *
7*4882a593Smuzhiyun  * (c) Copyright 1999, 2000 Red Hat Software
8*4882a593Smuzhiyun  *
9*4882a593Smuzhiyun  *************************************************************************
10*4882a593Smuzhiyun  *
11*4882a593Smuzhiyun  * This header file defined the I2O APIs/structures for use by
12*4882a593Smuzhiyun  * the I2O kernel modules.
13*4882a593Smuzhiyun  */
14*4882a593Smuzhiyun 
15*4882a593Smuzhiyun #ifdef __KERNEL__       /* This file to be included by kernel only */
16*4882a593Smuzhiyun 
17*4882a593Smuzhiyun #include <linux/i2o-dev.h>
18*4882a593Smuzhiyun 
19*4882a593Smuzhiyun #include <linux/notifier.h>
20*4882a593Smuzhiyun #include <linux/atomic.h>
21*4882a593Smuzhiyun 
22*4882a593Smuzhiyun 
23*4882a593Smuzhiyun /*
24*4882a593Smuzhiyun  *	Tunable parameters first
25*4882a593Smuzhiyun  */
26*4882a593Smuzhiyun 
27*4882a593Smuzhiyun /* How many different OSM's are we allowing */
28*4882a593Smuzhiyun #define MAX_I2O_MODULES		64
29*4882a593Smuzhiyun 
30*4882a593Smuzhiyun #define I2O_EVT_CAPABILITY_OTHER		0x01
31*4882a593Smuzhiyun #define I2O_EVT_CAPABILITY_CHANGED		0x02
32*4882a593Smuzhiyun 
33*4882a593Smuzhiyun #define I2O_EVT_SENSOR_STATE_CHANGED		0x01
34*4882a593Smuzhiyun 
35*4882a593Smuzhiyun //#ifdef __KERNEL__   /* ioctl stuff only thing exported to users */
36*4882a593Smuzhiyun 
37*4882a593Smuzhiyun #define I2O_MAX_MANAGERS	4
38*4882a593Smuzhiyun 
39*4882a593Smuzhiyun /*
40*4882a593Smuzhiyun  *	I2O Interface Objects
41*4882a593Smuzhiyun  */
42*4882a593Smuzhiyun 
43*4882a593Smuzhiyun #include <linux/wait.h>
44*4882a593Smuzhiyun typedef wait_queue_head_t adpt_wait_queue_head_t;
45*4882a593Smuzhiyun #define ADPT_DECLARE_WAIT_QUEUE_HEAD(wait) DECLARE_WAIT_QUEUE_HEAD_ONSTACK(wait)
46*4882a593Smuzhiyun typedef wait_queue_entry_t adpt_wait_queue_entry_t;
47*4882a593Smuzhiyun 
48*4882a593Smuzhiyun /*
49*4882a593Smuzhiyun  * message structures
50*4882a593Smuzhiyun  */
51*4882a593Smuzhiyun 
52*4882a593Smuzhiyun struct i2o_message
53*4882a593Smuzhiyun {
54*4882a593Smuzhiyun 	u8	version_offset;
55*4882a593Smuzhiyun 	u8	flags;
56*4882a593Smuzhiyun 	u16	size;
57*4882a593Smuzhiyun 	u32	target_tid:12;
58*4882a593Smuzhiyun 	u32	init_tid:12;
59*4882a593Smuzhiyun 	u32	function:8;
60*4882a593Smuzhiyun 	u32	initiator_context;
61*4882a593Smuzhiyun 	/* List follows */
62*4882a593Smuzhiyun };
63*4882a593Smuzhiyun 
64*4882a593Smuzhiyun struct adpt_device;
65*4882a593Smuzhiyun struct _adpt_hba;
66*4882a593Smuzhiyun struct i2o_device
67*4882a593Smuzhiyun {
68*4882a593Smuzhiyun 	struct i2o_device *next;	/* Chain */
69*4882a593Smuzhiyun 	struct i2o_device *prev;
70*4882a593Smuzhiyun 
71*4882a593Smuzhiyun 	char dev_name[8];		/* linux /dev name if available */
72*4882a593Smuzhiyun 	i2o_lct_entry lct_data;/* Device LCT information */
73*4882a593Smuzhiyun 	u32 flags;
74*4882a593Smuzhiyun 	struct proc_dir_entry* proc_entry;	/* /proc dir */
75*4882a593Smuzhiyun 	struct adpt_device *owner;
76*4882a593Smuzhiyun 	struct _adpt_hba *controller;	/* Controlling IOP */
77*4882a593Smuzhiyun };
78*4882a593Smuzhiyun 
79*4882a593Smuzhiyun /*
80*4882a593Smuzhiyun  *	Each I2O controller has one of these objects
81*4882a593Smuzhiyun  */
82*4882a593Smuzhiyun 
83*4882a593Smuzhiyun struct i2o_controller
84*4882a593Smuzhiyun {
85*4882a593Smuzhiyun 	char name[16];
86*4882a593Smuzhiyun 	int unit;
87*4882a593Smuzhiyun 	int type;
88*4882a593Smuzhiyun 	int enabled;
89*4882a593Smuzhiyun 
90*4882a593Smuzhiyun 	struct notifier_block *event_notifer;	/* Events */
91*4882a593Smuzhiyun 	atomic_t users;
92*4882a593Smuzhiyun 	struct i2o_device *devices;		/* I2O device chain */
93*4882a593Smuzhiyun 	struct i2o_controller *next;		/* Controller chain */
94*4882a593Smuzhiyun 
95*4882a593Smuzhiyun };
96*4882a593Smuzhiyun 
97*4882a593Smuzhiyun /*
98*4882a593Smuzhiyun  * I2O System table entry
99*4882a593Smuzhiyun  */
100*4882a593Smuzhiyun struct i2o_sys_tbl_entry
101*4882a593Smuzhiyun {
102*4882a593Smuzhiyun 	u16	org_id;
103*4882a593Smuzhiyun 	u16	reserved1;
104*4882a593Smuzhiyun 	u32	iop_id:12;
105*4882a593Smuzhiyun 	u32	reserved2:20;
106*4882a593Smuzhiyun 	u16	seg_num:12;
107*4882a593Smuzhiyun 	u16	i2o_version:4;
108*4882a593Smuzhiyun 	u8	iop_state;
109*4882a593Smuzhiyun 	u8	msg_type;
110*4882a593Smuzhiyun 	u16	frame_size;
111*4882a593Smuzhiyun 	u16	reserved3;
112*4882a593Smuzhiyun 	u32	last_changed;
113*4882a593Smuzhiyun 	u32	iop_capabilities;
114*4882a593Smuzhiyun 	u32	inbound_low;
115*4882a593Smuzhiyun 	u32	inbound_high;
116*4882a593Smuzhiyun };
117*4882a593Smuzhiyun 
118*4882a593Smuzhiyun struct i2o_sys_tbl
119*4882a593Smuzhiyun {
120*4882a593Smuzhiyun 	u8	num_entries;
121*4882a593Smuzhiyun 	u8	version;
122*4882a593Smuzhiyun 	u16	reserved1;
123*4882a593Smuzhiyun 	u32	change_ind;
124*4882a593Smuzhiyun 	u32	reserved2;
125*4882a593Smuzhiyun 	u32	reserved3;
126*4882a593Smuzhiyun 	struct i2o_sys_tbl_entry iops[0];
127*4882a593Smuzhiyun };
128*4882a593Smuzhiyun 
129*4882a593Smuzhiyun /*
130*4882a593Smuzhiyun  *	I2O classes / subclasses
131*4882a593Smuzhiyun  */
132*4882a593Smuzhiyun 
133*4882a593Smuzhiyun /*  Class ID and Code Assignments
134*4882a593Smuzhiyun  *  (LCT.ClassID.Version field)
135*4882a593Smuzhiyun  */
136*4882a593Smuzhiyun #define    I2O_CLASS_VERSION_10                        0x00
137*4882a593Smuzhiyun #define    I2O_CLASS_VERSION_11                        0x01
138*4882a593Smuzhiyun 
139*4882a593Smuzhiyun /*  Class code names
140*4882a593Smuzhiyun  *  (from v1.5 Table 6-1 Class Code Assignments.)
141*4882a593Smuzhiyun  */
142*4882a593Smuzhiyun 
143*4882a593Smuzhiyun #define    I2O_CLASS_EXECUTIVE                         0x000
144*4882a593Smuzhiyun #define    I2O_CLASS_DDM                               0x001
145*4882a593Smuzhiyun #define    I2O_CLASS_RANDOM_BLOCK_STORAGE              0x010
146*4882a593Smuzhiyun #define    I2O_CLASS_SEQUENTIAL_STORAGE                0x011
147*4882a593Smuzhiyun #define    I2O_CLASS_LAN                               0x020
148*4882a593Smuzhiyun #define    I2O_CLASS_WAN                               0x030
149*4882a593Smuzhiyun #define    I2O_CLASS_FIBRE_CHANNEL_PORT                0x040
150*4882a593Smuzhiyun #define    I2O_CLASS_FIBRE_CHANNEL_PERIPHERAL          0x041
151*4882a593Smuzhiyun #define    I2O_CLASS_SCSI_PERIPHERAL                   0x051
152*4882a593Smuzhiyun #define    I2O_CLASS_ATE_PORT                          0x060
153*4882a593Smuzhiyun #define    I2O_CLASS_ATE_PERIPHERAL                    0x061
154*4882a593Smuzhiyun #define    I2O_CLASS_FLOPPY_CONTROLLER                 0x070
155*4882a593Smuzhiyun #define    I2O_CLASS_FLOPPY_DEVICE                     0x071
156*4882a593Smuzhiyun #define    I2O_CLASS_BUS_ADAPTER_PORT                  0x080
157*4882a593Smuzhiyun #define    I2O_CLASS_PEER_TRANSPORT_AGENT              0x090
158*4882a593Smuzhiyun #define    I2O_CLASS_PEER_TRANSPORT                    0x091
159*4882a593Smuzhiyun 
160*4882a593Smuzhiyun /*  Rest of 0x092 - 0x09f reserved for peer-to-peer classes
161*4882a593Smuzhiyun  */
162*4882a593Smuzhiyun 
163*4882a593Smuzhiyun #define    I2O_CLASS_MATCH_ANYCLASS                    0xffffffff
164*4882a593Smuzhiyun 
165*4882a593Smuzhiyun /*  Subclasses
166*4882a593Smuzhiyun  */
167*4882a593Smuzhiyun 
168*4882a593Smuzhiyun #define    I2O_SUBCLASS_i960                           0x001
169*4882a593Smuzhiyun #define    I2O_SUBCLASS_HDM                            0x020
170*4882a593Smuzhiyun #define    I2O_SUBCLASS_ISM                            0x021
171*4882a593Smuzhiyun 
172*4882a593Smuzhiyun /* Operation functions */
173*4882a593Smuzhiyun 
174*4882a593Smuzhiyun #define I2O_PARAMS_FIELD_GET	0x0001
175*4882a593Smuzhiyun #define I2O_PARAMS_LIST_GET	0x0002
176*4882a593Smuzhiyun #define I2O_PARAMS_MORE_GET	0x0003
177*4882a593Smuzhiyun #define I2O_PARAMS_SIZE_GET	0x0004
178*4882a593Smuzhiyun #define I2O_PARAMS_TABLE_GET	0x0005
179*4882a593Smuzhiyun #define I2O_PARAMS_FIELD_SET	0x0006
180*4882a593Smuzhiyun #define I2O_PARAMS_LIST_SET	0x0007
181*4882a593Smuzhiyun #define I2O_PARAMS_ROW_ADD	0x0008
182*4882a593Smuzhiyun #define I2O_PARAMS_ROW_DELETE	0x0009
183*4882a593Smuzhiyun #define I2O_PARAMS_TABLE_CLEAR	0x000A
184*4882a593Smuzhiyun 
185*4882a593Smuzhiyun /*
186*4882a593Smuzhiyun  *	I2O serial number conventions / formats
187*4882a593Smuzhiyun  *	(circa v1.5)
188*4882a593Smuzhiyun  */
189*4882a593Smuzhiyun 
190*4882a593Smuzhiyun #define    I2O_SNFORMAT_UNKNOWN                        0
191*4882a593Smuzhiyun #define    I2O_SNFORMAT_BINARY                         1
192*4882a593Smuzhiyun #define    I2O_SNFORMAT_ASCII                          2
193*4882a593Smuzhiyun #define    I2O_SNFORMAT_UNICODE                        3
194*4882a593Smuzhiyun #define    I2O_SNFORMAT_LAN48_MAC                      4
195*4882a593Smuzhiyun #define    I2O_SNFORMAT_WAN                            5
196*4882a593Smuzhiyun 
197*4882a593Smuzhiyun /* Plus new in v2.0 (Yellowstone pdf doc)
198*4882a593Smuzhiyun  */
199*4882a593Smuzhiyun 
200*4882a593Smuzhiyun #define    I2O_SNFORMAT_LAN64_MAC                      6
201*4882a593Smuzhiyun #define    I2O_SNFORMAT_DDM                            7
202*4882a593Smuzhiyun #define    I2O_SNFORMAT_IEEE_REG64                     8
203*4882a593Smuzhiyun #define    I2O_SNFORMAT_IEEE_REG128                    9
204*4882a593Smuzhiyun #define    I2O_SNFORMAT_UNKNOWN2                       0xff
205*4882a593Smuzhiyun 
206*4882a593Smuzhiyun /* Transaction Reply Lists (TRL) Control Word structure */
207*4882a593Smuzhiyun 
208*4882a593Smuzhiyun #define TRL_SINGLE_FIXED_LENGTH		0x00
209*4882a593Smuzhiyun #define TRL_SINGLE_VARIABLE_LENGTH	0x40
210*4882a593Smuzhiyun #define TRL_MULTIPLE_FIXED_LENGTH	0x80
211*4882a593Smuzhiyun 
212*4882a593Smuzhiyun /*
213*4882a593Smuzhiyun  *	Messaging API values
214*4882a593Smuzhiyun  */
215*4882a593Smuzhiyun 
216*4882a593Smuzhiyun #define	I2O_CMD_ADAPTER_ASSIGN		0xB3
217*4882a593Smuzhiyun #define	I2O_CMD_ADAPTER_READ		0xB2
218*4882a593Smuzhiyun #define	I2O_CMD_ADAPTER_RELEASE		0xB5
219*4882a593Smuzhiyun #define	I2O_CMD_BIOS_INFO_SET		0xA5
220*4882a593Smuzhiyun #define	I2O_CMD_BOOT_DEVICE_SET		0xA7
221*4882a593Smuzhiyun #define	I2O_CMD_CONFIG_VALIDATE		0xBB
222*4882a593Smuzhiyun #define	I2O_CMD_CONN_SETUP		0xCA
223*4882a593Smuzhiyun #define	I2O_CMD_DDM_DESTROY		0xB1
224*4882a593Smuzhiyun #define	I2O_CMD_DDM_ENABLE		0xD5
225*4882a593Smuzhiyun #define	I2O_CMD_DDM_QUIESCE		0xC7
226*4882a593Smuzhiyun #define	I2O_CMD_DDM_RESET		0xD9
227*4882a593Smuzhiyun #define	I2O_CMD_DDM_SUSPEND		0xAF
228*4882a593Smuzhiyun #define	I2O_CMD_DEVICE_ASSIGN		0xB7
229*4882a593Smuzhiyun #define	I2O_CMD_DEVICE_RELEASE		0xB9
230*4882a593Smuzhiyun #define	I2O_CMD_HRT_GET			0xA8
231*4882a593Smuzhiyun #define	I2O_CMD_ADAPTER_CLEAR		0xBE
232*4882a593Smuzhiyun #define	I2O_CMD_ADAPTER_CONNECT		0xC9
233*4882a593Smuzhiyun #define	I2O_CMD_ADAPTER_RESET		0xBD
234*4882a593Smuzhiyun #define	I2O_CMD_LCT_NOTIFY		0xA2
235*4882a593Smuzhiyun #define	I2O_CMD_OUTBOUND_INIT		0xA1
236*4882a593Smuzhiyun #define	I2O_CMD_PATH_ENABLE		0xD3
237*4882a593Smuzhiyun #define	I2O_CMD_PATH_QUIESCE		0xC5
238*4882a593Smuzhiyun #define	I2O_CMD_PATH_RESET		0xD7
239*4882a593Smuzhiyun #define	I2O_CMD_STATIC_MF_CREATE	0xDD
240*4882a593Smuzhiyun #define	I2O_CMD_STATIC_MF_RELEASE	0xDF
241*4882a593Smuzhiyun #define	I2O_CMD_STATUS_GET		0xA0
242*4882a593Smuzhiyun #define	I2O_CMD_SW_DOWNLOAD		0xA9
243*4882a593Smuzhiyun #define	I2O_CMD_SW_UPLOAD		0xAB
244*4882a593Smuzhiyun #define	I2O_CMD_SW_REMOVE		0xAD
245*4882a593Smuzhiyun #define	I2O_CMD_SYS_ENABLE		0xD1
246*4882a593Smuzhiyun #define	I2O_CMD_SYS_MODIFY		0xC1
247*4882a593Smuzhiyun #define	I2O_CMD_SYS_QUIESCE		0xC3
248*4882a593Smuzhiyun #define	I2O_CMD_SYS_TAB_SET		0xA3
249*4882a593Smuzhiyun 
250*4882a593Smuzhiyun #define I2O_CMD_UTIL_NOP		0x00
251*4882a593Smuzhiyun #define I2O_CMD_UTIL_ABORT		0x01
252*4882a593Smuzhiyun #define I2O_CMD_UTIL_CLAIM		0x09
253*4882a593Smuzhiyun #define I2O_CMD_UTIL_RELEASE		0x0B
254*4882a593Smuzhiyun #define I2O_CMD_UTIL_PARAMS_GET		0x06
255*4882a593Smuzhiyun #define I2O_CMD_UTIL_PARAMS_SET		0x05
256*4882a593Smuzhiyun #define I2O_CMD_UTIL_EVT_REGISTER	0x13
257*4882a593Smuzhiyun #define I2O_CMD_UTIL_EVT_ACK		0x14
258*4882a593Smuzhiyun #define I2O_CMD_UTIL_CONFIG_DIALOG	0x10
259*4882a593Smuzhiyun #define I2O_CMD_UTIL_DEVICE_RESERVE	0x0D
260*4882a593Smuzhiyun #define I2O_CMD_UTIL_DEVICE_RELEASE	0x0F
261*4882a593Smuzhiyun #define I2O_CMD_UTIL_LOCK		0x17
262*4882a593Smuzhiyun #define I2O_CMD_UTIL_LOCK_RELEASE	0x19
263*4882a593Smuzhiyun #define I2O_CMD_UTIL_REPLY_FAULT_NOTIFY	0x15
264*4882a593Smuzhiyun 
265*4882a593Smuzhiyun #define I2O_CMD_SCSI_EXEC		0x81
266*4882a593Smuzhiyun #define I2O_CMD_SCSI_ABORT		0x83
267*4882a593Smuzhiyun #define I2O_CMD_SCSI_BUSRESET		0x27
268*4882a593Smuzhiyun 
269*4882a593Smuzhiyun #define I2O_CMD_BLOCK_READ		0x30
270*4882a593Smuzhiyun #define I2O_CMD_BLOCK_WRITE		0x31
271*4882a593Smuzhiyun #define I2O_CMD_BLOCK_CFLUSH		0x37
272*4882a593Smuzhiyun #define I2O_CMD_BLOCK_MLOCK		0x49
273*4882a593Smuzhiyun #define I2O_CMD_BLOCK_MUNLOCK		0x4B
274*4882a593Smuzhiyun #define I2O_CMD_BLOCK_MMOUNT		0x41
275*4882a593Smuzhiyun #define I2O_CMD_BLOCK_MEJECT		0x43
276*4882a593Smuzhiyun 
277*4882a593Smuzhiyun #define I2O_PRIVATE_MSG			0xFF
278*4882a593Smuzhiyun 
279*4882a593Smuzhiyun /*
280*4882a593Smuzhiyun  *	Init Outbound Q status
281*4882a593Smuzhiyun  */
282*4882a593Smuzhiyun 
283*4882a593Smuzhiyun #define I2O_CMD_OUTBOUND_INIT_IN_PROGRESS	0x01
284*4882a593Smuzhiyun #define I2O_CMD_OUTBOUND_INIT_REJECTED		0x02
285*4882a593Smuzhiyun #define I2O_CMD_OUTBOUND_INIT_FAILED		0x03
286*4882a593Smuzhiyun #define I2O_CMD_OUTBOUND_INIT_COMPLETE		0x04
287*4882a593Smuzhiyun 
288*4882a593Smuzhiyun /*
289*4882a593Smuzhiyun  *	I2O Get Status State values
290*4882a593Smuzhiyun  */
291*4882a593Smuzhiyun 
292*4882a593Smuzhiyun #define	ADAPTER_STATE_INITIALIZING		0x01
293*4882a593Smuzhiyun #define	ADAPTER_STATE_RESET			0x02
294*4882a593Smuzhiyun #define	ADAPTER_STATE_HOLD			0x04
295*4882a593Smuzhiyun #define ADAPTER_STATE_READY			0x05
296*4882a593Smuzhiyun #define	ADAPTER_STATE_OPERATIONAL		0x08
297*4882a593Smuzhiyun #define	ADAPTER_STATE_FAILED			0x10
298*4882a593Smuzhiyun #define	ADAPTER_STATE_FAULTED			0x11
299*4882a593Smuzhiyun 
300*4882a593Smuzhiyun /* I2O API function return values */
301*4882a593Smuzhiyun 
302*4882a593Smuzhiyun #define I2O_RTN_NO_ERROR			0
303*4882a593Smuzhiyun #define I2O_RTN_NOT_INIT			1
304*4882a593Smuzhiyun #define I2O_RTN_FREE_Q_EMPTY			2
305*4882a593Smuzhiyun #define I2O_RTN_TCB_ERROR			3
306*4882a593Smuzhiyun #define I2O_RTN_TRANSACTION_ERROR		4
307*4882a593Smuzhiyun #define I2O_RTN_ADAPTER_ALREADY_INIT		5
308*4882a593Smuzhiyun #define I2O_RTN_MALLOC_ERROR			6
309*4882a593Smuzhiyun #define I2O_RTN_ADPTR_NOT_REGISTERED		7
310*4882a593Smuzhiyun #define I2O_RTN_MSG_REPLY_TIMEOUT		8
311*4882a593Smuzhiyun #define I2O_RTN_NO_STATUS			9
312*4882a593Smuzhiyun #define I2O_RTN_NO_FIRM_VER			10
313*4882a593Smuzhiyun #define	I2O_RTN_NO_LINK_SPEED			11
314*4882a593Smuzhiyun 
315*4882a593Smuzhiyun /* Reply message status defines for all messages */
316*4882a593Smuzhiyun 
317*4882a593Smuzhiyun #define I2O_REPLY_STATUS_SUCCESS			0x00
318*4882a593Smuzhiyun #define I2O_REPLY_STATUS_ABORT_DIRTY			0x01
319*4882a593Smuzhiyun #define I2O_REPLY_STATUS_ABORT_NO_DATA_TRANSFER		0x02
320*4882a593Smuzhiyun #define	I2O_REPLY_STATUS_ABORT_PARTIAL_TRANSFER		0x03
321*4882a593Smuzhiyun #define	I2O_REPLY_STATUS_ERROR_DIRTY			0x04
322*4882a593Smuzhiyun #define	I2O_REPLY_STATUS_ERROR_NO_DATA_TRANSFER		0x05
323*4882a593Smuzhiyun #define	I2O_REPLY_STATUS_ERROR_PARTIAL_TRANSFER		0x06
324*4882a593Smuzhiyun #define	I2O_REPLY_STATUS_PROCESS_ABORT_DIRTY		0x08
325*4882a593Smuzhiyun #define	I2O_REPLY_STATUS_PROCESS_ABORT_NO_DATA_TRANSFER	0x09
326*4882a593Smuzhiyun #define	I2O_REPLY_STATUS_PROCESS_ABORT_PARTIAL_TRANSFER	0x0A
327*4882a593Smuzhiyun #define	I2O_REPLY_STATUS_TRANSACTION_ERROR		0x0B
328*4882a593Smuzhiyun #define	I2O_REPLY_STATUS_PROGRESS_REPORT		0x80
329*4882a593Smuzhiyun 
330*4882a593Smuzhiyun /* Status codes and Error Information for Parameter functions */
331*4882a593Smuzhiyun 
332*4882a593Smuzhiyun #define I2O_PARAMS_STATUS_SUCCESS		0x00
333*4882a593Smuzhiyun #define I2O_PARAMS_STATUS_BAD_KEY_ABORT		0x01
334*4882a593Smuzhiyun #define I2O_PARAMS_STATUS_BAD_KEY_CONTINUE	0x02
335*4882a593Smuzhiyun #define I2O_PARAMS_STATUS_BUFFER_FULL		0x03
336*4882a593Smuzhiyun #define I2O_PARAMS_STATUS_BUFFER_TOO_SMALL	0x04
337*4882a593Smuzhiyun #define I2O_PARAMS_STATUS_FIELD_UNREADABLE	0x05
338*4882a593Smuzhiyun #define I2O_PARAMS_STATUS_FIELD_UNWRITEABLE	0x06
339*4882a593Smuzhiyun #define I2O_PARAMS_STATUS_INSUFFICIENT_FIELDS	0x07
340*4882a593Smuzhiyun #define I2O_PARAMS_STATUS_INVALID_GROUP_ID	0x08
341*4882a593Smuzhiyun #define I2O_PARAMS_STATUS_INVALID_OPERATION	0x09
342*4882a593Smuzhiyun #define I2O_PARAMS_STATUS_NO_KEY_FIELD		0x0A
343*4882a593Smuzhiyun #define I2O_PARAMS_STATUS_NO_SUCH_FIELD		0x0B
344*4882a593Smuzhiyun #define I2O_PARAMS_STATUS_NON_DYNAMIC_GROUP	0x0C
345*4882a593Smuzhiyun #define I2O_PARAMS_STATUS_OPERATION_ERROR	0x0D
346*4882a593Smuzhiyun #define I2O_PARAMS_STATUS_SCALAR_ERROR		0x0E
347*4882a593Smuzhiyun #define I2O_PARAMS_STATUS_TABLE_ERROR		0x0F
348*4882a593Smuzhiyun #define I2O_PARAMS_STATUS_WRONG_GROUP_TYPE	0x10
349*4882a593Smuzhiyun 
350*4882a593Smuzhiyun /* DetailedStatusCode defines for Executive, DDM, Util and Transaction error
351*4882a593Smuzhiyun  * messages: Table 3-2 Detailed Status Codes.*/
352*4882a593Smuzhiyun 
353*4882a593Smuzhiyun #define I2O_DSC_SUCCESS                        0x0000
354*4882a593Smuzhiyun #define I2O_DSC_BAD_KEY                        0x0002
355*4882a593Smuzhiyun #define I2O_DSC_TCL_ERROR                      0x0003
356*4882a593Smuzhiyun #define I2O_DSC_REPLY_BUFFER_FULL              0x0004
357*4882a593Smuzhiyun #define I2O_DSC_NO_SUCH_PAGE                   0x0005
358*4882a593Smuzhiyun #define I2O_DSC_INSUFFICIENT_RESOURCE_SOFT     0x0006
359*4882a593Smuzhiyun #define I2O_DSC_INSUFFICIENT_RESOURCE_HARD     0x0007
360*4882a593Smuzhiyun #define I2O_DSC_CHAIN_BUFFER_TOO_LARGE         0x0009
361*4882a593Smuzhiyun #define I2O_DSC_UNSUPPORTED_FUNCTION           0x000A
362*4882a593Smuzhiyun #define I2O_DSC_DEVICE_LOCKED                  0x000B
363*4882a593Smuzhiyun #define I2O_DSC_DEVICE_RESET                   0x000C
364*4882a593Smuzhiyun #define I2O_DSC_INAPPROPRIATE_FUNCTION         0x000D
365*4882a593Smuzhiyun #define I2O_DSC_INVALID_INITIATOR_ADDRESS      0x000E
366*4882a593Smuzhiyun #define I2O_DSC_INVALID_MESSAGE_FLAGS          0x000F
367*4882a593Smuzhiyun #define I2O_DSC_INVALID_OFFSET                 0x0010
368*4882a593Smuzhiyun #define I2O_DSC_INVALID_PARAMETER              0x0011
369*4882a593Smuzhiyun #define I2O_DSC_INVALID_REQUEST                0x0012
370*4882a593Smuzhiyun #define I2O_DSC_INVALID_TARGET_ADDRESS         0x0013
371*4882a593Smuzhiyun #define I2O_DSC_MESSAGE_TOO_LARGE              0x0014
372*4882a593Smuzhiyun #define I2O_DSC_MESSAGE_TOO_SMALL              0x0015
373*4882a593Smuzhiyun #define I2O_DSC_MISSING_PARAMETER              0x0016
374*4882a593Smuzhiyun #define I2O_DSC_TIMEOUT                        0x0017
375*4882a593Smuzhiyun #define I2O_DSC_UNKNOWN_ERROR                  0x0018
376*4882a593Smuzhiyun #define I2O_DSC_UNKNOWN_FUNCTION               0x0019
377*4882a593Smuzhiyun #define I2O_DSC_UNSUPPORTED_VERSION            0x001A
378*4882a593Smuzhiyun #define I2O_DSC_DEVICE_BUSY                    0x001B
379*4882a593Smuzhiyun #define I2O_DSC_DEVICE_NOT_AVAILABLE           0x001C
380*4882a593Smuzhiyun 
381*4882a593Smuzhiyun /* Device Claim Types */
382*4882a593Smuzhiyun #define	I2O_CLAIM_PRIMARY					0x01000000
383*4882a593Smuzhiyun #define	I2O_CLAIM_MANAGEMENT					0x02000000
384*4882a593Smuzhiyun #define	I2O_CLAIM_AUTHORIZED					0x03000000
385*4882a593Smuzhiyun #define	I2O_CLAIM_SECONDARY					0x04000000
386*4882a593Smuzhiyun 
387*4882a593Smuzhiyun /* Message header defines for VersionOffset */
388*4882a593Smuzhiyun #define I2OVER15	0x0001
389*4882a593Smuzhiyun #define I2OVER20	0x0002
390*4882a593Smuzhiyun /* Default is 1.5, FIXME: Need support for both 1.5 and 2.0 */
391*4882a593Smuzhiyun #define I2OVERSION	I2OVER15
392*4882a593Smuzhiyun #define SGL_OFFSET_0    I2OVERSION
393*4882a593Smuzhiyun #define SGL_OFFSET_4    (0x0040 | I2OVERSION)
394*4882a593Smuzhiyun #define SGL_OFFSET_5    (0x0050 | I2OVERSION)
395*4882a593Smuzhiyun #define SGL_OFFSET_6    (0x0060 | I2OVERSION)
396*4882a593Smuzhiyun #define SGL_OFFSET_7    (0x0070 | I2OVERSION)
397*4882a593Smuzhiyun #define SGL_OFFSET_8    (0x0080 | I2OVERSION)
398*4882a593Smuzhiyun #define SGL_OFFSET_9    (0x0090 | I2OVERSION)
399*4882a593Smuzhiyun #define SGL_OFFSET_10   (0x00A0 | I2OVERSION)
400*4882a593Smuzhiyun #define SGL_OFFSET_12   (0x00C0 | I2OVERSION)
401*4882a593Smuzhiyun 
402*4882a593Smuzhiyun #define TRL_OFFSET_5    (0x0050 | I2OVERSION)
403*4882a593Smuzhiyun #define TRL_OFFSET_6    (0x0060 | I2OVERSION)
404*4882a593Smuzhiyun 
405*4882a593Smuzhiyun  /* msg header defines for MsgFlags */
406*4882a593Smuzhiyun #define MSG_STATIC	0x0100
407*4882a593Smuzhiyun #define MSG_64BIT_CNTXT	0x0200
408*4882a593Smuzhiyun #define MSG_MULTI_TRANS	0x1000
409*4882a593Smuzhiyun #define MSG_FAIL	0x2000
410*4882a593Smuzhiyun #define MSG_LAST	0x4000
411*4882a593Smuzhiyun #define MSG_REPLY	0x8000
412*4882a593Smuzhiyun 
413*4882a593Smuzhiyun  /* minimum size msg */
414*4882a593Smuzhiyun #define THREE_WORD_MSG_SIZE	0x00030000
415*4882a593Smuzhiyun #define FOUR_WORD_MSG_SIZE	0x00040000
416*4882a593Smuzhiyun #define FIVE_WORD_MSG_SIZE	0x00050000
417*4882a593Smuzhiyun #define SIX_WORD_MSG_SIZE	0x00060000
418*4882a593Smuzhiyun #define SEVEN_WORD_MSG_SIZE	0x00070000
419*4882a593Smuzhiyun #define EIGHT_WORD_MSG_SIZE	0x00080000
420*4882a593Smuzhiyun #define NINE_WORD_MSG_SIZE	0x00090000
421*4882a593Smuzhiyun #define TEN_WORD_MSG_SIZE	0x000A0000
422*4882a593Smuzhiyun #define I2O_MESSAGE_SIZE(x)	((x)<<16)
423*4882a593Smuzhiyun 
424*4882a593Smuzhiyun 
425*4882a593Smuzhiyun /* Special TID Assignments */
426*4882a593Smuzhiyun 
427*4882a593Smuzhiyun #define ADAPTER_TID		0
428*4882a593Smuzhiyun #define HOST_TID		1
429*4882a593Smuzhiyun 
430*4882a593Smuzhiyun #define MSG_FRAME_SIZE		128
431*4882a593Smuzhiyun #define NMBR_MSG_FRAMES		128
432*4882a593Smuzhiyun 
433*4882a593Smuzhiyun #define MSG_POOL_SIZE		16384
434*4882a593Smuzhiyun 
435*4882a593Smuzhiyun #define I2O_POST_WAIT_OK	0
436*4882a593Smuzhiyun #define I2O_POST_WAIT_TIMEOUT	-ETIMEDOUT
437*4882a593Smuzhiyun 
438*4882a593Smuzhiyun 
439*4882a593Smuzhiyun #endif /* __KERNEL__ */
440*4882a593Smuzhiyun 
441*4882a593Smuzhiyun #endif /* _SCSI_I2O_H */
442