FreeBSD/Linux Kernel Cross Reference
sys/dev/pst/pst-iop.h
1 /*-
2 * Copyright (c) 2001,2002,2003 Søren Schmidt <sos@FreeBSD.org>
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer,
10 * without modification, immediately at the beginning of the file.
11 * 2. Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
14 * 3. The name of the author may not be used to endorse or promote products
15 * derived from this software without specific prior written permission.
16 *
17 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
18 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
21 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 *
28 * $FreeBSD$
29 */
30
31 /* misc defines */
32 MALLOC_DECLARE(M_PSTIOP);
33 #define I2O_IOP_OUTBOUND_FRAME_COUNT 32
34 #define I2O_IOP_OUTBOUND_FRAME_SIZE 0x20
35
36 /* structure defs */
37 struct out_mfa_buf {
38 u_int32_t buf[I2O_IOP_OUTBOUND_FRAME_SIZE];
39 };
40
41 struct iop_softc {
42 struct resource *r_mem;
43 struct resource *r_irq;
44 caddr_t ibase;
45 caddr_t obase;
46 u_int32_t phys_obase;
47 struct i2o_registers *reg;
48 struct i2o_status_get_reply *status;
49 int lct_count;
50 struct i2o_lct_entry *lct;
51 int ism;
52 device_t dev;
53 struct mtx mtx;
54 int outstanding;
55 void *handle;
56 struct intr_config_hook *iop_delayed_attach;
57 };
58
59 /* structure at start of IOP shared mem */
60 struct i2o_registers {
61 volatile u_int32_t apic_select;
62 volatile u_int32_t reserved0;
63 volatile u_int32_t apic_winreg;
64 volatile u_int32_t reserved1;
65 volatile u_int32_t iqueue_reg0;
66 volatile u_int32_t iqueue_reg1;
67 volatile u_int32_t oqueue_reg0;
68 volatile u_int32_t oqueue_reg1;
69 volatile u_int32_t iqueue_event;
70 volatile u_int32_t iqueue_intr_status;
71 volatile u_int32_t iqueue_intr_mask;
72 volatile u_int32_t oqueue_event;
73 volatile u_int32_t oqueue_intr_status;
74 volatile u_int32_t oqueue_intr_mask;
75 #define I2O_OUT_INTR_QUEUE 0x08
76 #define I2O_OUT_INTR_BELL 0x04
77 #define I2O_OUT_INTR_MSG1 0x02
78 #define I2O_OUT_INTR_MSG0 0x01
79
80 volatile u_int64_t reserved2;
81 volatile u_int32_t iqueue;
82 volatile u_int32_t oqueue;
83 volatile u_int64_t reserved3;
84 volatile u_int64_t mac_addr;
85 volatile u_int32_t ip_addr;
86 volatile u_int32_t ip_mask;
87 };
88
89 /* Scatter/Gather List management */
90 struct i2o_sgl {
91 u_int32_t count:24;
92 #define I2O_SGL_CNT_MASK 0xffffff
93
94 u_int32_t flags:8;
95 #define I2O_SGL_SIMPLE 0x10
96 #define I2O_SGL_PAGELIST 0x20
97 #define I2O_SGL_CHAIN 0x30
98 #define I2O_SGL_ATTRIBUTE 0x7c
99 #define I2O_SGL_BC0 0x01
100 #define I2O_SGL_BC1 0x02
101 #define I2O_SGL_DIR 0x04
102 #define I2O_SGL_LA 0x08
103 #define I2O_SGL_EOB 0x40
104 #define I2O_SGL_END 0x80
105
106 u_int32_t phys_addr[1];
107 } __packed;
108
109 #define I2O_SGL_MAX_SEGS ((I2O_IOP_OUTBOUND_FRAME_SIZE - (8 + 2)) + 1)
110
111 /* i2o command codes */
112 #define I2O_UTIL_NOP 0x00
113 #define I2O_UTIL_PARAMS_GET 0x06
114 #define I2O_UTIL_CLAIM 0x09
115 #define I2O_UTIL_CONFIG_DIALOG 0x10
116 #define I2O_UTIL_EVENT_REGISTER 0x13
117 #define I2O_BSA_BLOCK_READ 0x30
118 #define I2O_BSA_BLOCK_WRITE 0x31
119 #define I2O_BSA_CACHE_FLUSH 0x37
120 #define I2O_EXEC_STATUS_GET 0xa0
121 #define I2O_EXEC_OUTBOUND_INIT 0xa1
122 #define I2O_EXEC_LCT_NOTIFY 0xa2
123 #define I2O_EXEC_SYSTAB_SET 0xa3
124 #define I2O_EXEC_IOP_RESET 0xbd
125 #define I2O_EXEC_SYS_ENABLE 0xd1
126 #define I2O_PRIVATE_MESSAGE 0xff
127
128 /* basic message layout */
129 struct i2o_basic_message {
130 u_int8_t version:4;
131 u_int8_t offset:4;
132 u_int8_t message_flags;
133 u_int16_t message_size;
134 u_int32_t target_address:12;
135 u_int32_t initiator_address:12;
136 u_int32_t function:8;
137 u_int32_t initiator_context;
138 u_int32_t transaction_context;
139 } __packed;
140
141 /* basic reply layout */
142 struct i2o_single_reply {
143 u_int8_t version_offset;
144 u_int8_t message_flags;
145 #define I2O_MESSAGE_FLAGS_STATIC 0x01
146 #define I2O_MESSAGE_FLAGS_64BIT 0x02
147 #define I2O_MESSAGE_FLAGS_MULTIPLE 0x10
148 #define I2O_MESSAGE_FLAGS_FAIL 0x20
149 #define I2O_MESSAGE_FLAGS_LAST 0x40
150 #define I2O_MESSAGE_FLAGS_REPLY 0x80
151
152 u_int16_t message_size;
153 u_int32_t target_address:12;
154 u_int32_t initiator_address:12;
155 u_int32_t function:8;
156 u_int32_t initiator_context;
157 u_int32_t transaction_context;
158 u_int16_t detailed_status;
159 #define I2O_DETAIL_STATUS_SUCCESS 0x0000
160 #define I2O_DETAIL_STATUS_BAD_KEY 0x0002
161 #define I2O_DETAIL_STATUS_TCL_ERROR 0x0003
162 #define I2O_DETAIL_STATUS_REPLY_BUFFER_FULL 0x0004
163 #define I2O_DETAIL_STATUS_NO_SUCH_PAGE 0x0005
164 #define I2O_DETAIL_STATUS_INSUFFICIENT_RESOURCE_SOFT 0x0006
165 #define I2O_DETAIL_STATUS_INSUFFICIENT_RESOURCE_HARD 0x0007
166 #define I2O_DETAIL_STATUS_CHAIN_BUFFER_TOO_LARGE 0x0009
167 #define I2O_DETAIL_STATUS_UNSUPPORTED_FUNCTION 0x000a
168 #define I2O_DETAIL_STATUS_DEVICE_LOCKED 0x000b
169 #define I2O_DETAIL_STATUS_DEVICE_RESET 0x000c
170 #define I2O_DETAIL_STATUS_INAPPROPRIATE_FUNCTION 0x000d
171 #define I2O_DETAIL_STATUS_INVALID_INITIATOR_ADDRESS 0x000e
172 #define I2O_DETAIL_STATUS_INVALID_MESSAGE_FLAGS 0x000f
173 #define I2O_DETAIL_STATUS_INVALID_OFFSET 0x0010
174 #define I2O_DETAIL_STATUS_INVALID_PARAMETER 0x0011
175 #define I2O_DETAIL_STATUS_INVALID_REQUEST 0x0012
176 #define I2O_DETAIL_STATUS_INVALID_TARGET_ADDRESS 0x0013
177 #define I2O_DETAIL_STATUS_MESSAGE_TOO_LARGE 0x0014
178 #define I2O_DETAIL_STATUS_MESSAGE_TOO_SMALL 0x0015
179 #define I2O_DETAIL_STATUS_MISSING_PARAMETER 0x0016
180 #define I2O_DETAIL_STATUS_TIMEOUT 0x0017
181 #define I2O_DETAIL_STATUS_UNKNOWN_ERROR 0x0018
182 #define I2O_DETAIL_STATUS_UNKNOWN_FUNCTION 0x0019
183 #define I2O_DETAIL_STATUS_UNSUPPORTED_VERSION 0x001a
184 #define I2O_DETAIL_STATUS_DEVICE_BUSY 0x001b
185 #define I2O_DETAIL_STATUS_DEVICE_NOT_AVAILABLE 0x001c
186
187 u_int8_t retry_count;
188 u_int8_t status;
189 #define I2O_REPLY_STATUS_SUCCESS 0x00
190 #define I2O_REPLY_STATUS_ABORT_DIRTY 0x01
191 #define I2O_REPLY_STATUS_ABORT_NO_DATA_TRANSFER 0x02
192 #define I2O_REPLY_STATUS_ABORT_PARTIAL_TRANSFER 0x03
193 #define I2O_REPLY_STATUS_ERROR_DIRTY 0x04
194 #define I2O_REPLY_STATUS_ERROR_NO_DATA_TRANSFER 0x05
195 #define I2O_REPLY_STATUS_ERROR_PARTIAL_TRANSFER 0x06
196 #define I2O_REPLY_STATUS_PROCESS_ABORT_DIRTY 0x08
197 #define I2O_REPLY_STATUS_PROCESS_ABORT_NO_DATA_TRANSFER 0x09
198 #define I2O_REPLY_STATUS_PROCESS_ABORT_PARTIAL_TRANSFER 0x0a
199 #define I2O_REPLY_STATUS_TRANSACTION_ERROR 0x0b
200 #define I2O_REPLY_STATUS_PROGRESS_REPORT 0x80
201
202 u_int32_t donecount;
203 } __packed;
204
205 struct i2o_fault_reply {
206 u_int8_t version_offset;
207 u_int8_t message_flags;
208 u_int16_t message_size;
209 u_int32_t target_address:12;
210 u_int32_t initiator_address:12;
211 u_int32_t function:8;
212 u_int32_t initiator_context;
213 u_int32_t transaction_context;
214 u_int8_t lowest_version;
215 u_int8_t highest_version;
216 u_int8_t severity;
217 #define I2O_SEVERITY_FORMAT_ERROR 0x01
218 #define I2O_SEVERITY_PATH_ERROR 0x02
219 #define I2O_SEVERITY_PATH_STATE 0x04
220 #define I2O_SEVERITY_CONGESTION 0x08
221
222 u_int8_t failure_code;
223 #define I2O_FAILURE_CODE_TRANSPORT_SERVICE_SUSPENDED 0x81
224 #define I2O_FAILURE_CODE_TRANSPORT_SERVICE_TERMINATED 0x82
225 #define I2O_FAILURE_CODE_TRANSPORT_CONGESTION 0x83
226 #define I2O_FAILURE_CODE_TRANSPORT_FAIL 0x84
227 #define I2O_FAILURE_CODE_TRANSPORT_STATE_ERROR 0x85
228 #define I2O_FAILURE_CODE_TRANSPORT_TIME_OUT 0x86
229 #define I2O_FAILURE_CODE_TRANSPORT_ROUTING_FAILURE 0x87
230 #define I2O_FAILURE_CODE_TRANSPORT_INVALID_VERSION 0x88
231 #define I2O_FAILURE_CODE_TRANSPORT_INVALID_OFFSET 0x89
232 #define I2O_FAILURE_CODE_TRANSPORT_INVALID_MSG_FLAGS 0x8A
233 #define I2O_FAILURE_CODE_TRANSPORT_FRAME_TOO_SMALL 0x8B
234 #define I2O_FAILURE_CODE_TRANSPORT_FRAME_TOO_LARGE 0x8C
235 #define I2O_FAILURE_CODE_TRANSPORT_INVALID_TARGET_ID 0x8D
236 #define I2O_FAILURE_CODE_TRANSPORT_INVALID_INITIATOR_ID 0x8E
237 #define I2O_FAILURE_CODE_TRANSPORT_INVALID_INITIATOR_CONTEXT 0x8F
238 #define I2O_FAILURE_CODE_TRANSPORT_UNKNOWN_FAILURE 0xFF
239
240 u_int32_t failing_iop_id:12;
241 u_int32_t reserved:4;
242 u_int32_t failing_host_unit_id:16;
243 u_int32_t age_limit;
244 u_int64_t preserved_mfa;
245 } __packed;
246
247 struct i2o_exec_iop_reset_message {
248 u_int8_t version_offset;
249 u_int8_t message_flags;
250 u_int16_t message_size;
251 u_int32_t target_address:12;
252 u_int32_t initiator_address:12;
253 u_int32_t function:8;
254 u_int8_t reserved[16];
255 u_int32_t status_word_low_addr;
256 u_int32_t status_word_high_addr;
257 } __packed;
258
259 struct i2o_exec_status_get_message {
260 u_int8_t version_offset;
261 u_int8_t message_flags;
262 u_int16_t message_size;
263 u_int32_t target_address:12;
264 u_int32_t initiator_address:12;
265 u_int32_t function:8;
266 u_int8_t reserved[16];
267 u_int32_t reply_buf_low_addr;
268 u_int32_t reply_buf_high_addr;
269 u_int32_t reply_buf_length;
270 } __packed;
271
272 struct i2o_status_get_reply {
273 u_int16_t organization_id;
274 u_int16_t reserved;
275 u_int32_t iop_id:12;
276 u_int32_t reserved1:4;
277 u_int32_t host_unit_id:16;
278 u_int32_t segment_number:12;
279 u_int32_t i2o_version:4;
280 u_int32_t iop_state:8;
281 #define I2O_IOP_STATE_INITIALIZING 0x01
282 #define I2O_IOP_STATE_RESET 0x02
283 #define I2O_IOP_STATE_HOLD 0x04
284 #define I2O_IOP_STATE_READY 0x05
285 #define I2O_IOP_STATE_OPERATIONAL 0x08
286 #define I2O_IOP_STATE_FAILED 0x10
287 #define I2O_IOP_STATE_FAULTED 0x11
288
289 u_int32_t messenger_type:8;
290 u_int16_t inbound_mframe_size;
291 u_int8_t init_code;
292 u_int8_t reserved2;
293 u_int32_t max_inbound_mframes;
294 u_int32_t current_ibound_mframes;
295 u_int32_t max_outbound_mframes;
296 u_int8_t product_idstring[24];
297 u_int32_t expected_lct_size;
298 u_int32_t iop_capabilities;
299 u_int32_t desired_private_memsize;
300 u_int32_t current_private_memsize;
301 u_int32_t current_private_membase;
302 u_int32_t desired_private_iosize;
303 u_int32_t current_private_iosize;
304 u_int32_t current_private_iobase;
305 u_int8_t reserved3[3];
306 u_int8_t sync_byte;
307 } __packed;
308
309 struct i2o_exec_init_outqueue_message {
310 u_int8_t version_offset;
311 u_int8_t message_flags;
312 u_int16_t message_size;
313 u_int32_t target_address:12;
314 u_int32_t initiator_address:12;
315 u_int32_t function:8;
316 u_int32_t initiator_context;
317 u_int32_t transaction_context;
318 u_int32_t host_pagesize;
319 u_int8_t init_code;
320 u_int8_t reserved;
321 u_int16_t queue_framesize;
322 struct i2o_sgl sgl[2];
323 } __packed;
324
325 #define I2O_EXEC_OUTBOUND_INIT_IN_PROGRESS 0x01
326 #define I2O_EXEC_OUTBOUND_INIT_REJECTED 0x02
327 #define I2O_EXEC_OUTBOUND_INIT_FAILED 0x03
328 #define I2O_EXEC_OUTBOUND_INIT_COMPLETE 0x04
329
330 struct i2o_exec_systab_set_message {
331 u_int8_t version_offset;
332 u_int8_t message_flags;
333 u_int16_t message_size;
334 u_int32_t target_address:12;
335 u_int32_t initiator_address:12;
336 u_int32_t function:8;
337 u_int32_t initiator_context;
338 u_int32_t transaction_context;
339 u_int32_t iop_id:12;
340 #define I2O_EXEC_SYS_TAB_IOP_ID_LOCAL_IOP 0x000
341 #define I2O_EXEC_SYS_TAB_IOP_ID_LOCAL_HOST 0x001
342 #define I2O_EXEC_SYS_TAB_IOP_ID_UNKNOWN_IOP 0xfff
343
344 u_int32_t reserved1:4;
345 u_int32_t host_unit_id:16;
346 #define I2O_EXEC_SYS_TAB_HOST_UNIT_ID_LOCAL_UNIT 0x0000
347 #define I2O_EXEC_SYS_TAB_HOST_UNIT_ID_UNKNOWN_UNIT 0xffff
348
349 u_int32_t segment_number:12;
350 #define I2O_EXEC_SYS_TAB_SEG_NUMBER_LOCAL_SEGMENT 0x000
351 #define I2O_EXEC_SYS_TAB_SEG_NUMBER_UNKNOWN_SEGMENT 0xfff
352
353 u_int32_t reserved2:4;
354 u_int32_t reserved3:8;
355 struct i2o_sgl sgl[3];
356 } __packed;
357
358 struct i2o_exec_systab {
359 u_int8_t entries;
360 u_int8_t version;
361 #define I2O_RESOURCE_MANAGER_VERSION 0
362
363 u_int16_t reserved1;
364 u_int32_t change_id;
365 u_int64_t reserved2;
366 u_int16_t organization_id;
367 u_int16_t reserved3;
368 u_int32_t iop_id:12;
369 u_int32_t reserved4:20;
370 u_int32_t segment_number:12;
371 u_int32_t i2o_version:4;
372 u_int32_t iop_state:8;
373 u_int32_t messenger_type:8;
374 u_int16_t inbound_mframe_size;
375 u_int16_t reserved5;
376 u_int32_t last_changed;
377 u_int32_t iop_capabilities;
378 u_int64_t messenger_info;
379 } __packed;
380
381 struct i2o_exec_get_lct_message {
382 u_int8_t version_offset;
383 u_int8_t message_flags;
384 u_int16_t message_size;
385 u_int32_t target_address:12;
386 u_int32_t initiator_address:12;
387 u_int32_t function:8;
388 u_int32_t initiator_context;
389 u_int32_t transaction_context;
390 u_int32_t class;
391 u_int32_t last_change_id;
392 struct i2o_sgl sgl;
393 } __packed;
394
395 #define I2O_TID_IOP 0x000
396 #define I2O_TID_HOST 0x001
397 #define I2O_TID_NONE 0xfff
398
399 struct i2o_lct_entry {
400 u_int32_t entry_size:16;
401 u_int32_t local_tid:12;
402 u_int32_t reserved:4;
403 u_int32_t change_id;
404 u_int32_t device_flags;
405 u_int32_t class:12;
406 #define I2O_CLASS_EXECUTIVE 0x000
407 #define I2O_CLASS_DDM 0x001
408 #define I2O_CLASS_RANDOM_BLOCK_STORAGE 0x010
409 #define I2O_CLASS_SEQUENTIAL_STORAGE 0x011
410 #define I2O_CLASS_LAN 0x020
411 #define I2O_CLASS_WAN 0x030
412 #define I2O_CLASS_FIBRE_CHANNEL_PORT 0x040
413 #define I2O_CLASS_FIBRE_CHANNEL_PERIPHERAL 0x041
414 #define I2O_CLASS_SCSI_PERIPHERAL 0x051
415 #define I2O_CLASS_ATE_PORT 0x060
416 #define I2O_CLASS_ATE_PERIPHERAL 0x061
417 #define I2O_CLASS_FLOPPY_CONTROLLER 0x070
418 #define I2O_CLASS_FLOPPY_DEVICE 0x071
419 #define I2O_CLASS_BUS_ADAPTER_PORT 0x080
420 #define I2O_CLASS_MATCH_ANYCLASS 0xffffffff
421
422 u_int32_t class_version:4;
423 u_int32_t class_org:16;
424 u_int32_t sub_class;
425 #define I2O_SUBCLASS_i960 0x001
426 #define I2O_SUBCLASS_HDM 0x020
427 #define I2O_SUBCLASS_ISM 0x021
428
429 u_int32_t user_tid:12;
430 u_int32_t parent_tid:12;
431 u_int32_t bios_info:8;
432 u_int8_t identity_tag[8];
433 u_int32_t event_capabilities;
434 } __packed;
435
436 #define I2O_LCT_ENTRYSIZE (sizeof(struct i2o_lct_entry)/sizeof(u_int32_t))
437
438 struct i2o_get_lct_reply {
439 u_int32_t table_size:16;
440 u_int32_t boot_device:12;
441 u_int32_t lct_version:4;
442 u_int32_t iop_flags;
443 u_int32_t current_change_id;
444 struct i2o_lct_entry entry[1];
445 } __packed;
446
447 struct i2o_util_get_param_message {
448 u_int8_t version_offset;
449 u_int8_t message_flags;
450 u_int16_t message_size;
451 u_int32_t target_address:12;
452 u_int32_t initiator_address:12;
453 u_int32_t function:8;
454 u_int32_t initiator_context;
455 u_int32_t transaction_context;
456 u_int32_t operation_flags;
457 struct i2o_sgl sgl[2];
458 } __packed;
459
460 struct i2o_get_param_template {
461 u_int16_t operation;
462 #define I2O_PARAMS_OPERATION_FIELD_GET 0x0001
463 #define I2O_PARAMS_OPERATION_LIST_GET 0x0002
464 #define I2O_PARAMS_OPERATION_MORE_GET 0x0003
465 #define I2O_PARAMS_OPERATION_SIZE_GET 0x0004
466 #define I2O_PARAMS_OPERATION_TABLE_GET 0x0005
467 #define I2O_PARAMS_OPERATION_FIELD_SET 0x0006
468 #define I2O_PARAMS_OPERATION_LIST_SET 0x0007
469 #define I2O_PARAMS_OPERATION_ROW_ADD 0x0008
470 #define I2O_PARAMS_OPERATION_ROW_DELETE 0x0009
471 #define I2O_PARAMS_OPERATION_TABLE_CLEAR 0x000A
472
473 u_int16_t group;
474 #define I2O_BSA_DEVICE_INFO_GROUP_NO 0x0000
475 #define I2O_BSA_OPERATIONAL_CONTROL_GROUP_NO 0x0001
476 #define I2O_BSA_POWER_CONTROL_GROUP_NO 0x0002
477 #define I2O_BSA_CACHE_CONTROL_GROUP_NO 0x0003
478 #define I2O_BSA_MEDIA_INFO_GROUP_NO 0x0004
479 #define I2O_BSA_ERROR_LOG_GROUP_NO 0x0005
480
481 #define I2O_UTIL_PARAMS_DESCRIPTOR_GROUP_NO 0xF000
482 #define I2O_UTIL_PHYSICAL_DEVICE_TABLE_GROUP_NO 0xF001
483 #define I2O_UTIL_CLAIMED_TABLE_GROUP_NO 0xF002
484 #define I2O_UTIL_USER_TABLE_GROUP_NO 0xF003
485 #define I2O_UTIL_PRIVATE_MESSAGE_EXTENSIONS_GROUP_NO 0xF005
486 #define I2O_UTIL_AUTHORIZED_USER_TABLE_GROUP_NO 0xF006
487 #define I2O_UTIL_DEVICE_IDENTITY_GROUP_NO 0xF100
488 #define I2O_UTIL_DDM_IDENTITY_GROUP_NO 0xF101
489 #define I2O_UTIL_USER_INFORMATION_GROUP_NO 0xF102
490 #define I2O_UTIL_SGL_OPERATING_LIMITS_GROUP_NO 0xF103
491 #define I2O_UTIL_SENSORS_GROUP_NO 0xF200
492
493 u_int16_t field_count;
494 u_int16_t pad;
495 } __packed;
496
497 struct i2o_get_param_operation {
498 u_int16_t operation_count;
499 u_int16_t reserved;
500 struct i2o_get_param_template operation[1];
501 } __packed;
502
503 struct i2o_get_param_reply {
504 u_int16_t result_count;
505 u_int16_t reserved;
506 u_int16_t block_size;
507 u_int8_t block_status;
508 u_int8_t error_info_size;
509 u_int32_t result[1];
510 } __packed;
511
512 struct i2o_device_identity {
513 u_int32_t class;
514 u_int16_t owner;
515 u_int16_t parent;
516 u_int8_t vendor[16];
517 u_int8_t product[16];
518 u_int8_t description[16];
519 u_int8_t revision[8];
520 u_int8_t sn_format;
521 u_int8_t serial[256];
522 } __packed;
523
524 struct i2o_bsa_device {
525 u_int8_t device_type;
526 u_int8_t path_count;
527 u_int16_t power_state;
528 u_int32_t block_size;
529 u_int64_t capacity;
530 u_int32_t capabilities;
531 u_int32_t state;
532 } __packed;
533
534 struct i2o_util_claim_message {
535 u_int8_t version_offset;
536 u_int8_t message_flags;
537 u_int16_t message_size;
538 u_int32_t target_address:12;
539 u_int32_t initiator_address:12;
540 u_int32_t function:8;
541 u_int32_t initiator_context;
542 u_int32_t transaction_context;
543 u_int16_t claim_flags;
544 u_int8_t reserved;
545 u_int8_t claim_type;
546 } __packed;
547
548 struct i2o_util_event_register_message {
549 u_int8_t version_offset;
550 u_int8_t message_flags;
551 u_int16_t message_size;
552 u_int32_t target_address:12;
553 u_int32_t initiator_address:12;
554 u_int32_t function:8;
555 u_int32_t initiator_context;
556 u_int32_t transaction_context;
557 u_int32_t event_mask;
558 } __packed;
559
560 struct i2o_util_event_reply_message {
561 u_int8_t version_offset;
562 u_int8_t message_flags;
563 u_int16_t message_size;
564 u_int32_t target_address:12;
565 u_int32_t initiator_address:12;
566 u_int32_t function:8;
567 u_int32_t initiator_context;
568 u_int32_t transaction_context;
569 u_int32_t event_mask;
570 u_int32_t event_data[1];
571 } __packed;
572
573 struct i2o_util_config_dialog_message {
574 u_int8_t version_offset;
575 u_int8_t message_flags;
576 u_int16_t message_size;
577 u_int32_t target_address:12;
578 u_int32_t initiator_address:12;
579 u_int32_t function:8;
580 u_int32_t initiator_context;
581 u_int32_t transaction_context;
582 u_int32_t page_number;
583 struct i2o_sgl sgl[2];
584 } __packed;
585
586 struct i2o_private_message {
587 u_int8_t version_offset;
588 u_int8_t message_flags;
589 u_int16_t message_size;
590 u_int32_t target_address:12;
591 u_int32_t initiator_address:12;
592 u_int32_t function:8;
593 u_int32_t initiator_context;
594 u_int32_t transaction_context;
595 u_int16_t function_code;
596 u_int16_t organization_id;
597 struct i2o_sgl in_sgl;
598 struct i2o_sgl out_sgl;
599 } __packed;
600
601 struct i2o_bsa_rw_block_message {
602 u_int8_t version_offset;
603 u_int8_t message_flags;
604 u_int16_t message_size;
605 u_int32_t target_address:12;
606 u_int32_t initiator_address:12;
607 u_int32_t function:8;
608 u_int32_t initiator_context;
609 u_int32_t transaction_context;
610 u_int16_t control_flags;
611 u_int8_t time_multiplier;
612 u_int8_t fetch_ahead;
613 u_int32_t bytecount;
614 u_int64_t lba;
615 struct i2o_sgl sgl;
616 } __packed;
617
618 struct i2o_bsa_cache_flush_message {
619 u_int8_t version_offset;
620 u_int8_t message_flags;
621 u_int16_t message_size;
622 u_int32_t target_address:12;
623 u_int32_t initiator_address:12;
624 u_int32_t function:8;
625 u_int32_t initiator_context;
626 u_int32_t transaction_context;
627 u_int16_t control_flags;
628 u_int8_t time_multiplier;
629 u_int8_t reserved;
630 } __packed;
631
632 /* prototypes */
633 int iop_init(struct iop_softc *);
634 void iop_attach(void *);
635 void iop_intr(void *);
636 int iop_reset(struct iop_softc *);
637 int iop_init_outqueue(struct iop_softc *);
638 int iop_get_lct(struct iop_softc *);
639 struct i2o_get_param_reply *iop_get_util_params(struct iop_softc *,int,int,int);
640 u_int32_t iop_get_mfa(struct iop_softc *);
641 void iop_free_mfa(struct iop_softc *, int);
642 int iop_queue_wait_msg(struct iop_softc *, int, struct i2o_basic_message *);
643 int iop_create_sgl(struct i2o_basic_message *, caddr_t, int, int);
644
645 /* global prototypes */
646 int pst_add_raid(struct iop_softc *, struct i2o_lct_entry *);
Cache object: 80768786ab0cde17574860ba079b6366
|