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
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
|
/*
* CDDL HEADER START
*
* The contents of this file are subject to the terms of the
* Common Development and Distribution License, Version 1.0 only
* (the "License"). You may not use this file except in compliance
* with the License.
*
* You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
* or http://www.opensolaris.org/os/licensing.
* See the License for the specific language governing permissions
* and limitations under the License.
*
* When distributing Covered Code, include this CDDL HEADER in each
* file and include the License file at usr/src/OPENSOLARIS.LICENSE.
* If applicable, add the following below this CDDL HEADER, with the
* fields enclosed by brackets "[]" replaced with your own identifying
* information: Portions Copyright [yyyy] [name of copyright owner]
*
* CDDL HEADER END
*/
/*
* Copyright (c) 1998-1999 by Sun Microsystems, Inc.
* All rights reserved.
*/
#ifndef _SYS_FC4_FCIO_H
#define _SYS_FC4_FCIO_H
#pragma ident "%Z%%M% %I% %E% SMI"
/*
* Include any headers you depend on.
*/
#ifdef __cplusplus
extern "C" {
#endif
#include <sys/fc4/fcal_linkapp.h>
/*
* ioctl definitions
*/
#define FIOC ('F'<<8)
#define SF_IOC (0xda << 8)
#define SFIOCGMAP (SF_IOC|1) /* Get device map */
#define SF_NUM_ENTRIES_IN_MAP 127
#define FCIO_GETMAP (FIOC|175) /* Get limited map */
#define FCIO_FORCE_LIP (FIOC|177) /* Force LIP */
#define FCIO_LINKSTATUS (FIOC|183) /* Get link status */
#define FCIO_FCODE_MCODE_VERSION (FIOC|202) /* Get code versions */
#define IFPIOCGMAP SFIOCGMAP
#define IFP_NUM_ENTRIES_IN_MAP SF_NUM_ENTRIES_IN_MAP
#define IFPIO_FORCE_LIP FCIO_FORCE_LIP
#define IFPIO_LINKSTATUS FCIO_LINKSTATUS
typedef struct sf_al_addr_pair {
uchar_t sf_al_pa;
uchar_t sf_hard_address;
uchar_t sf_inq_dtype;
uchar_t sf_node_wwn[FC_WWN_SIZE];
uchar_t sf_port_wwn[FC_WWN_SIZE];
} sf_al_addr_pair_t;
typedef struct sf_al_map {
short sf_count;
sf_al_addr_pair_t sf_addr_pair[SF_NUM_ENTRIES_IN_MAP];
sf_al_addr_pair_t sf_hba_addr;
} sf_al_map_t;
struct rls_payload {
uint_t rls_portno;
uint_t rls_linkfail;
uint_t rls_syncfail;
uint_t rls_sigfail;
uint_t rls_primitiverr;
uint_t rls_invalidword;
uint_t rls_invalidcrc;
};
struct lilpmap {
ushort_t lilp_magic;
ushort_t lilp_myalpa;
uchar_t lilp_length;
uchar_t lilp_list[127];
};
struct socal_fm_version {
uint_t fcode_ver_len;
uint_t mcode_ver_len;
uint_t prom_ver_len;
char *fcode_ver;
char *mcode_ver;
char *prom_ver;
};
/*
* kstat structures
*/
typedef struct sf_target_stats {
uint_t els_failures; /* failures on PLOGI, PRLI, ADISC etc */
uint_t timeouts;
/*
* sf detected command timeouts,
* implies an ABTS
*/
uint_t abts_failures; /* ABTS failures */
uint_t task_mgmt_failures;
/*
* SF task management(aborts,
* resets etc) failures
*/
uint_t data_ro_mismatches; /* SF_DATA RO mismatches */
uint_t dl_len_mismatches;
/*
* SF_DATA length different from
* BURST_LEN
*/
uint_t logouts_recvd;
/*
* unsolicited LOGOs recvd from
* target
*/
} sf_target_stats_t;
typedef struct sf_stats {
uint_t version; /* version of this struct, >1 */
uint_t lip_count; /* lips forced by sf */
uint_t lip_failures;
/*
* lip failures, ie, no ONLINE response
* after forcing lip
*/
uint_t cralloc_failures;
/*
* command/response block allocation
* failures
*/
uint_t ncmds; /* outstanding commands */
uint_t throttle_limit; /* current throttle limit */
uint_t cr_pool_size;
/*
* num of chunks in command/response
* pool, each chunk allows 128 packets
*/
struct sf_target_stats tstats[127]; /* per target stats */
char drvr_name[MAXNAMELEN]; /* Name of driver, NULL term. */
} sf_stats_t;
/* SOCAL Host Adapter kstat structures. */
#define FC_STATUS_ENTRIES 256
struct fc_pstats {
uint_t port; /* which port 0 or 1 */
uint_t requests; /* requests issued by this soc+ */
uint_t sol_resps; /* solicited responses received */
uint_t unsol_resps; /* unsolicited responses received */
uint_t lips; /* forced loop initialization */
uint_t els_sent; /* extended link service commands issued */
uint_t els_rcvd; /* extended link service commands received */
uint_t abts; /* aborts attempted */
uint_t abts_ok; /* aborts successful */
uint_t offlines; /* changes to offline state */
uint_t onlines; /* changes to online state */
uint_t online_loops; /* changes to online-loop state */
uint_t resp_status[FC_STATUS_ENTRIES]; /* response status */
};
/*
* Fibre Channel Response codes
*/
#define FCAL_STATUS_OK 0
#define FCAL_STATUS_P_RJT 2
#define FCAL_STATUS_F_RJT 3
#define FCAL_STATUS_P_BSY 4
#define FCAL_STATUS_F_BSY 5
#define FCAL_STATUS_ONLINE 0x10
#define FCAL_STATUS_OLDPORT_ONLINE FCAL_STATUS_ONLINE
#define FCAL_STATUS_ERR_OFFLINE 0x11
#define FCAL_STATUS_TIMEOUT 0x12
#define FCAL_STATUS_ERR_OVERRUN 0x13
#define FCAL_STATUS_LOOP_ONLINE 0x14
#define FCAL_STATUS_OLD_PORT 0x15
#define FCAL_STATUS_AL_PORT 0x16
#define FCAL_STATUS_UNKNOWN_CQ_TYPE 0x20 /* unknown request type */
#define FCAL_STATUS_BAD_SEG_CNT 0x21 /* insufficient # of segments */
#define FCAL_STATUS_MAX_XCHG_EXCEEDED 0x22
#define FCAL_STATUS_BAD_XID 0x23
#define FCAL_STATUS_XCHG_BUSY 0x24
#define FCAL_STATUS_BAD_POOL_ID 0x25
#define FCAL_STATUS_INSUFFICIENT_CQES 0x26
#define FCAL_STATUS_ALLOC_FAIL 0x27
#define FCAL_STATUS_BAD_SID 0x28
#define FCAL_STATUS_NO_SEQ_INIT 0x29
#define FCAL_STATUS_BAD_DID 0x2a
#define FCAL_STATUS_ABORTED 0x30
#define FCAL_STATUS_ABORT_FAILED 0x31
#define FCAL_STATUS_DIAG_BUSY 0x32
#define FCAL_STATUS_DIAG_INVALID 0x33
#define FCAL_STATUS_INCOMPLETE_DMA_ERR 0x34
#define FCAL_STATUS_CRC_ERR 0x35
#define FCAL_STATUS_OPEN_FAIL 0x36
#define FCAL_STATUS_ERROR 0x80
#define FCAL_STATUS_ONLINE_TIMEOUT 0x81
#define FCAL_STATUS_MAX_STATUS FCAL_STATUS_CRC_ERR
typedef struct socal_stats {
uint_t version; /* version of this struct, >1 */
uint_t resets; /* chip resets */
uint_t reqq_intrs; /* request queue interrupts */
uint_t qfulls; /* request queue full encountered */
struct fc_pstats pstats[2]; /* per port kstats */
char drvr_name[MAXNAMELEN]; /* Name of driver, NULL term. */
char fw_revision[MAXNAMELEN]; /* Firmware date string.\0 */
char node_wwn[17]; /* Node WWN */
char port_wwn[2][17]; /* Port WWN \0 */
uint_t parity_chk_enabled; /* != 0 if HBA checks parity. */
} socal_stats_t;
struct ifp_target_stats {
int logouts_recvd;
/*
* unsolicited LOGOs recvd from
* target
*/
int task_mgmt_failures;
int data_ro_mismatches;
int dl_len_mismatches;
};
typedef struct ifp_target_stats ifp_target_stats_t;
struct ifp_stats {
int version; /* version of this struct, >1 */
int lip_count; /* lips forced by ifp */
int ncmds; /* outstanding commands */
ifp_target_stats_t tstats[127]; /* per target stats */
char drvr_name[MAXNAMELEN]; /* Name of driver, NULL term. */
char fw_revision[MAXNAMELEN]; /* Firmware date string.\0 */
char node_wwn[17]; /* Node WWN */
char port_wwn[17]; /* Port WWN \0 */
uint_t parity_chk_enabled; /* != 0 if HBA checks parity. */
uint_t resp_status[FC_STATUS_ENTRIES]; /* response status */
};
typedef struct ifp_stats ifp_stats_t;
/*
* Defines for the QLA21xx resp_status -- this is the command completion status
*/
#define IFP_CMD_CMPLT 0x00 /* no transport errors */
#define IFP_CMD_INCOMPLETE 0x01 /* abnormal transport state */
#define IFP_CMD_DMA_DERR 0x02 /* DMA direction error */
#define IFP_CMD_TRAN_ERR 0x03 /* unspecified transport error */
#define IFP_CMD_RESET 0x04 /* reset aborted transport */
#define IFP_CMD_ABORTED 0x05 /* aborted on request */
#define IFP_CMD_TIMEOUT 0x06 /* command timed out */
#define IFP_CMD_DATA_OVR 0x07 /* data overrun--discard extra */
#define IFP_CMD_ABORT_REJECTED 0x0e /* target rejected abort msg */
#define IFP_CMD_RESET_REJECTED 0x12 /* target rejected reset msg */
#define IFP_CMD_DATA_UNDER 0x15 /* data underrun */
#define IFP_CMD_QUEUE_FULL 0x1c /* queue full SCSI status */
#define IFP_CMD_PORT_UNAVAIL 0x28 /* port unavailable */
#define IFP_CMD_PORT_LOGGED_OUT 0x29 /* port loged out */
#define IFP_CMD_PORT_CONFIG_CHANGED 0x2a /* port name changed */
#ifdef __cplusplus
}
#endif
#endif /* _SYS_FC4_FCIO_H */
|