The Design and Implementation of the FreeBSD Operating System, Second Edition
Now available: The Design and Implementation of the FreeBSD Operating System (Second Edition)


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]

FreeBSD/Linux Kernel Cross Reference
sys/dev/pst/pst-iop.h

Version: -  FREEBSD  -  FREEBSD-13-STABLE  -  FREEBSD-13-0  -  FREEBSD-12-STABLE  -  FREEBSD-12-0  -  FREEBSD-11-STABLE  -  FREEBSD-11-0  -  FREEBSD-10-STABLE  -  FREEBSD-10-0  -  FREEBSD-9-STABLE  -  FREEBSD-9-0  -  FREEBSD-8-STABLE  -  FREEBSD-8-0  -  FREEBSD-7-STABLE  -  FREEBSD-7-0  -  FREEBSD-6-STABLE  -  FREEBSD-6-0  -  FREEBSD-5-STABLE  -  FREEBSD-5-0  -  FREEBSD-4-STABLE  -  FREEBSD-3-STABLE  -  FREEBSD22  -  l41  -  OPENBSD  -  linux-2.6  -  MK84  -  PLAN9  -  xnu-8792 
SearchContext: -  none  -  3  -  10 

    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: dea580d36f8786e95c04c64d4f075c4a


[ source navigation ] [ diff markup ] [ identifier search ] [ freetext search ] [ file search ] [ list types ] [ track identifier ]


This page is part of the FreeBSD/Linux Linux Kernel Cross-Reference, and was automatically generated using a modified version of the LXR engine.