[BACK]Return to ispmbox.h CVS log [TXT][DIR] Up to [local] / sys / dev / ic

Annotation of sys/dev/ic/ispmbox.h, Revision 1.1.1.1

1.1       nbrk        1: /*     $OpenBSD: ispmbox.h,v 1.19 2003/03/03 18:38:10 mjacob Exp $ */
                      2: /*
                      3:  * Mailbox and Queue Entry Definitions for for Qlogic ISP SCSI adapters.
                      4:  *
                      5:  * Copyright (c) 1997, 1998, 1999, 2000 by Matthew Jacob
                      6:  * All rights reserved.
                      7:  *
                      8:  * Redistribution and use in source and binary forms, with or without
                      9:  * modification, are permitted provided that the following conditions
                     10:  * are met:
                     11:  * 1. Redistributions of source code must retain the above copyright
                     12:  *    notice immediately at the beginning of the file, without modification,
                     13:  *    this list of conditions, and the following disclaimer.
                     14:  * 2. 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 AND CONTRIBUTORS ``AS IS'' AND
                     18:  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
                     19:  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
                     20:  * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR
                     21:  * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
                     22:  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
                     23:  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
                     24:  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
                     25:  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
                     26:  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
                     27:  * SUCH DAMAGE.
                     28:  *
                     29:  */
                     30: #ifndef        _ISPMBOX_H
                     31: #define        _ISPMBOX_H
                     32:
                     33: /*
                     34:  * Mailbox Command Opcodes
                     35:  */
                     36: #define MBOX_NO_OP                     0x0000
                     37: #define MBOX_LOAD_RAM                  0x0001
                     38: #define MBOX_EXEC_FIRMWARE             0x0002
                     39: #define MBOX_DUMP_RAM                  0x0003
                     40: #define MBOX_WRITE_RAM_WORD            0x0004
                     41: #define MBOX_READ_RAM_WORD             0x0005
                     42: #define MBOX_MAILBOX_REG_TEST          0x0006
                     43: #define MBOX_VERIFY_CHECKSUM           0x0007
                     44: #define MBOX_ABOUT_FIRMWARE            0x0008
                     45:                                        /*   9 */
                     46:                                        /*   a */
                     47:                                        /*   b */
                     48:                                        /*   c */
                     49:                                        /*   d */
                     50: #define MBOX_CHECK_FIRMWARE            0x000e
                     51: #define        MBOX_READ_RAM_WORD_EXTENDED     0x000f
                     52: #define MBOX_INIT_REQ_QUEUE            0x0010
                     53: #define MBOX_INIT_RES_QUEUE            0x0011
                     54: #define MBOX_EXECUTE_IOCB              0x0012
                     55: #define MBOX_WAKE_UP                   0x0013
                     56: #define MBOX_STOP_FIRMWARE             0x0014
                     57: #define MBOX_ABORT                     0x0015
                     58: #define MBOX_ABORT_DEVICE              0x0016
                     59: #define MBOX_ABORT_TARGET              0x0017
                     60: #define MBOX_BUS_RESET                 0x0018
                     61: #define MBOX_STOP_QUEUE                        0x0019
                     62: #define MBOX_START_QUEUE               0x001a
                     63: #define MBOX_SINGLE_STEP_QUEUE         0x001b
                     64: #define MBOX_ABORT_QUEUE               0x001c
                     65: #define MBOX_GET_DEV_QUEUE_STATUS      0x001d
                     66:                                        /*  1e */
                     67: #define MBOX_GET_FIRMWARE_STATUS       0x001f
                     68: #define MBOX_GET_INIT_SCSI_ID          0x0020
                     69: #define MBOX_GET_SELECT_TIMEOUT                0x0021
                     70: #define MBOX_GET_RETRY_COUNT           0x0022
                     71: #define MBOX_GET_TAG_AGE_LIMIT         0x0023
                     72: #define MBOX_GET_CLOCK_RATE            0x0024
                     73: #define MBOX_GET_ACT_NEG_STATE         0x0025
                     74: #define MBOX_GET_ASYNC_DATA_SETUP_TIME 0x0026
                     75: #define MBOX_GET_SBUS_PARAMS           0x0027
                     76: #define                MBOX_GET_PCI_PARAMS     MBOX_GET_SBUS_PARAMS
                     77: #define MBOX_GET_TARGET_PARAMS         0x0028
                     78: #define MBOX_GET_DEV_QUEUE_PARAMS      0x0029
                     79: #define        MBOX_GET_RESET_DELAY_PARAMS     0x002a
                     80:                                        /*  2b */
                     81:                                        /*  2c */
                     82:                                        /*  2d */
                     83:                                        /*  2e */
                     84:                                        /*  2f */
                     85: #define MBOX_SET_INIT_SCSI_ID          0x0030
                     86: #define MBOX_SET_SELECT_TIMEOUT                0x0031
                     87: #define MBOX_SET_RETRY_COUNT           0x0032
                     88: #define MBOX_SET_TAG_AGE_LIMIT         0x0033
                     89: #define MBOX_SET_CLOCK_RATE            0x0034
                     90: #define MBOX_SET_ACT_NEG_STATE         0x0035
                     91: #define MBOX_SET_ASYNC_DATA_SETUP_TIME 0x0036
                     92: #define MBOX_SET_SBUS_CONTROL_PARAMS   0x0037
                     93: #define                MBOX_SET_PCI_PARAMETERS 0x0037
                     94: #define MBOX_SET_TARGET_PARAMS         0x0038
                     95: #define MBOX_SET_DEV_QUEUE_PARAMS      0x0039
                     96: #define        MBOX_SET_RESET_DELAY_PARAMS     0x003a
                     97:                                        /*  3b */
                     98:                                        /*  3c */
                     99:                                        /*  3d */
                    100:                                        /*  3e */
                    101:                                        /*  3f */
                    102: #define        MBOX_RETURN_BIOS_BLOCK_ADDR     0x0040
                    103: #define        MBOX_WRITE_FOUR_RAM_WORDS       0x0041
                    104: #define        MBOX_EXEC_BIOS_IOCB             0x0042
                    105: #define        MBOX_SET_FW_FEATURES            0x004a
                    106: #define        MBOX_GET_FW_FEATURES            0x004b
                    107: #define                FW_FEATURE_FAST_POST    0x1
                    108: #define                FW_FEATURE_LVD_NOTIFY   0x2
                    109: #define                FW_FEATURE_RIO_32BIT    0x4
                    110: #define                FW_FEATURE_RIO_16BIT    0x8
                    111:
                    112: #define        MBOX_INIT_REQ_QUEUE_A64         0x0052
                    113: #define        MBOX_INIT_RES_QUEUE_A64         0x0053
                    114:
                    115: #define        MBOX_ENABLE_TARGET_MODE         0x0055
                    116: #define                ENABLE_TARGET_FLAG      0x8000
                    117: #define                ENABLE_TQING_FLAG       0x0004
                    118: #define                ENABLE_MANDATORY_DISC   0x0002
                    119: #define        MBOX_GET_TARGET_STATUS          0x0056
                    120:
                    121: /* These are for the ISP2X00 FC cards */
                    122: #define        MBOX_GET_LOOP_ID                0x0020
                    123: #define        MBOX_GET_FIRMWARE_OPTIONS       0x0028
                    124: #define        MBOX_SET_FIRMWARE_OPTIONS       0x0038
                    125: #define        MBOX_GET_RESOURCE_COUNT         0x0042
                    126: #define        MBOX_ENHANCED_GET_PDB           0x0047
                    127: #define        MBOX_EXEC_COMMAND_IOCB_A64      0x0054
                    128: #define        MBOX_INIT_FIRMWARE              0x0060
                    129: #define        MBOX_GET_INIT_CONTROL_BLOCK     0x0061
                    130: #define        MBOX_INIT_LIP                   0x0062
                    131: #define        MBOX_GET_FC_AL_POSITION_MAP     0x0063
                    132: #define        MBOX_GET_PORT_DB                0x0064
                    133: #define        MBOX_CLEAR_ACA                  0x0065
                    134: #define        MBOX_TARGET_RESET               0x0066
                    135: #define        MBOX_CLEAR_TASK_SET             0x0067
                    136: #define        MBOX_ABORT_TASK_SET             0x0068
                    137: #define        MBOX_GET_FW_STATE               0x0069
                    138: #define        MBOX_GET_PORT_NAME              0x006A
                    139: #define        MBOX_GET_LINK_STATUS            0x006B
                    140: #define        MBOX_INIT_LIP_RESET             0x006C
                    141: #define        MBOX_SEND_SNS                   0x006E
                    142: #define        MBOX_FABRIC_LOGIN               0x006F
                    143: #define        MBOX_SEND_CHANGE_REQUEST        0x0070
                    144: #define        MBOX_FABRIC_LOGOUT              0x0071
                    145: #define        MBOX_INIT_LIP_LOGIN             0x0072
                    146:
                    147: #define        MBOX_DRIVER_HEARTBEAT           0x005B
                    148: #define        MBOX_FW_HEARTBEAT               0x005C
                    149:
                    150: #define        MBOX_GET_SET_DATA_RATE          0x005D  /* 23XX only */
                    151: #define                MBGSD_GET_RATE  0
                    152: #define                MBGSD_SET_RATE  1
                    153: #define                MBGSD_ONEGB     0
                    154: #define                MBGSD_TWOGB     1
                    155: #define                MBGSD_AUTO      2
                    156:
                    157:
                    158: #define        ISP2100_SET_PCI_PARAM           0x00ff
                    159:
                    160: #define        MBOX_BUSY                       0x04
                    161:
                    162: typedef struct {
                    163:        u_int16_t param[8];
                    164: } mbreg_t;
                    165:
                    166: /*
                    167:  * Mailbox Command Complete Status Codes
                    168:  */
                    169: #define        MBOX_COMMAND_COMPLETE           0x4000
                    170: #define        MBOX_INVALID_COMMAND            0x4001
                    171: #define        MBOX_HOST_INTERFACE_ERROR       0x4002
                    172: #define        MBOX_TEST_FAILED                0x4003
                    173: #define        MBOX_COMMAND_ERROR              0x4005
                    174: #define        MBOX_COMMAND_PARAM_ERROR        0x4006
                    175: #define        MBOX_PORT_ID_USED               0x4007
                    176: #define        MBOX_LOOP_ID_USED               0x4008
                    177: #define        MBOX_ALL_IDS_USED               0x4009
                    178: #define        MBOX_NOT_LOGGED_IN              0x400A
                    179: #define        MBLOGALL                        0x000f
                    180: #define        MBLOGNONE                       0x0000
                    181: #define        MBLOGMASK(x)                    ((x) & 0xf)
                    182:
                    183: /*
                    184:  * Asynchronous event status codes
                    185:  */
                    186: #define        ASYNC_BUS_RESET                 0x8001
                    187: #define        ASYNC_SYSTEM_ERROR              0x8002
                    188: #define        ASYNC_RQS_XFER_ERR              0x8003
                    189: #define        ASYNC_RSP_XFER_ERR              0x8004
                    190: #define        ASYNC_QWAKEUP                   0x8005
                    191: #define        ASYNC_TIMEOUT_RESET             0x8006
                    192: #define        ASYNC_DEVICE_RESET              0x8007
                    193: #define        ASYNC_EXTMSG_UNDERRUN           0x800A
                    194: #define        ASYNC_SCAM_INT                  0x800B
                    195: #define        ASYNC_HUNG_SCSI                 0x800C
                    196: #define        ASYNC_KILLED_BUS                0x800D
                    197: #define        ASYNC_BUS_TRANSIT               0x800E  /* LVD -> HVD, eg. */
                    198: #define        ASYNC_LIP_OCCURRED              0x8010
                    199: #define        ASYNC_LOOP_UP                   0x8011
                    200: #define        ASYNC_LOOP_DOWN                 0x8012
                    201: #define        ASYNC_LOOP_RESET                0x8013
                    202: #define        ASYNC_PDB_CHANGED               0x8014
                    203: #define        ASYNC_CHANGE_NOTIFY             0x8015
                    204: #define        ASYNC_LIP_F8                    0x8016
                    205: #define        ASYNC_CMD_CMPLT                 0x8020
                    206: #define        ASYNC_CTIO_DONE                 0x8021
                    207: #define        ASYNC_IP_XMIT_DONE              0x8022
                    208: #define        ASYNC_IP_RECV_DONE              0x8023
                    209: #define        ASYNC_IP_BROADCAST              0x8024
                    210: #define        ASYNC_IP_RCVQ_LOW               0x8025
                    211: #define        ASYNC_IP_RCVQ_EMPTY             0x8026
                    212: #define        ASYNC_IP_RECV_DONE_ALIGNED      0x8027
                    213: #define        ASYNC_PTPMODE                   0x8030
                    214: #define        ASYNC_RIO1                      0x8031
                    215: #define        ASYNC_RIO2                      0x8032
                    216: #define        ASYNC_RIO3                      0x8033
                    217: #define        ASYNC_RIO4                      0x8034
                    218: #define        ASYNC_RIO5                      0x8035
                    219: #define        ASYNC_CONNMODE                  0x8036
                    220: #define                ISP_CONN_LOOP           1
                    221: #define                ISP_CONN_PTP            2
                    222: #define                ISP_CONN_BADLIP         3
                    223: #define                ISP_CONN_FATAL          4
                    224: #define                ISP_CONN_LOOPBACK       5
                    225: #define        ASYNC_RIO_RESP                  0x8040
                    226: #define        ASYNC_RIO_COMP                  0x8042
                    227: /*
                    228:  * 2.01.31 2200 Only. Need Bit 13 in Mailbox 1 for Set Firmware Options
                    229:  * mailbox command to enable this.
                    230:  */
                    231: #define        ASYNC_QFULL_SENT                0x8049
                    232:
                    233: /*
                    234:  * Mailbox Usages
                    235:  */
                    236:
                    237: #define        WRITE_REQUEST_QUEUE_IN_POINTER(isp, value)      \
                    238:        ISP_WRITE(isp, isp->isp_rqstinrp, value)
                    239:
                    240: #define        READ_REQUEST_QUEUE_OUT_POINTER(isp)             \
                    241:        ISP_READ(isp, isp->isp_rqstoutrp)
                    242:
                    243: #define        READ_RESPONSE_QUEUE_IN_POINTER(isp)             \
                    244:        ISP_READ(isp, isp->isp_respinrp)
                    245:
                    246: #define        WRITE_RESPONSE_QUEUE_OUT_POINTER(isp, value)    \
                    247:        ISP_WRITE(isp, isp->isp_respoutrp, value)
                    248:
                    249: /*
                    250:  * Command Structure Definitions
                    251:  */
                    252:
                    253: typedef struct {
                    254:        u_int32_t       ds_base;
                    255:        u_int32_t       ds_count;
                    256: } ispds_t;
                    257:
                    258: typedef struct {
                    259:        u_int32_t       ds_base;
                    260:        u_int32_t       ds_basehi;
                    261:        u_int32_t       ds_count;
                    262: } ispds64_t;
                    263:
                    264: #define        DSTYPE_32BIT    0
                    265: #define        DSTYPE_64BIT    1
                    266: typedef struct {
                    267:        u_int16_t       ds_type;        /* 0-> ispds_t, 1-> ispds64_t */
                    268:        u_int32_t       ds_segment;     /* unused */
                    269:        u_int32_t       ds_base;        /* 32 bit address of DSD list */
                    270: } ispdslist_t;
                    271:
                    272:
                    273: /*
                    274:  * These elements get swizzled around for SBus instances.
                    275:  */
                    276: #define        ISP_SWAP8(a, b) {               \
                    277:        u_int8_t tmp;                   \
                    278:        tmp = a;                        \
                    279:        a = b;                          \
                    280:        b = tmp;                        \
                    281: }
                    282: typedef struct {
                    283:        u_int8_t        rqs_entry_type;
                    284:        u_int8_t        rqs_entry_count;
                    285:        u_int8_t        rqs_seqno;
                    286:        u_int8_t        rqs_flags;
                    287: } isphdr_t;
                    288:
                    289: /* RQS Flag definitions */
                    290: #define        RQSFLAG_CONTINUATION    0x01
                    291: #define        RQSFLAG_FULL            0x02
                    292: #define        RQSFLAG_BADHEADER       0x04
                    293: #define        RQSFLAG_BADPACKET       0x08
                    294:
                    295: /* RQS entry_type definitions */
                    296: #define        RQSTYPE_REQUEST         0x01
                    297: #define        RQSTYPE_DATASEG         0x02
                    298: #define        RQSTYPE_RESPONSE        0x03
                    299: #define        RQSTYPE_MARKER          0x04
                    300: #define        RQSTYPE_CMDONLY         0x05
                    301: #define        RQSTYPE_ATIO            0x06    /* Target Mode */
                    302: #define        RQSTYPE_CTIO            0x07    /* Target Mode */
                    303: #define        RQSTYPE_SCAM            0x08
                    304: #define        RQSTYPE_A64             0x09
                    305: #define        RQSTYPE_A64_CONT        0x0a
                    306: #define        RQSTYPE_ENABLE_LUN      0x0b    /* Target Mode */
                    307: #define        RQSTYPE_MODIFY_LUN      0x0c    /* Target Mode */
                    308: #define        RQSTYPE_NOTIFY          0x0d    /* Target Mode */
                    309: #define        RQSTYPE_NOTIFY_ACK      0x0e    /* Target Mode */
                    310: #define        RQSTYPE_CTIO1           0x0f    /* Target Mode */
                    311: #define        RQSTYPE_STATUS_CONT     0x10
                    312: #define        RQSTYPE_T2RQS           0x11
                    313: #define        RQSTYPE_IP_XMIT         0x13
                    314: #define        RQSTYPE_T4RQS           0x15
                    315: #define        RQSTYPE_ATIO2           0x16    /* Target Mode */
                    316: #define        RQSTYPE_CTIO2           0x17    /* Target Mode */
                    317: #define        RQSTYPE_CSET0           0x18
                    318: #define        RQSTYPE_T3RQS           0x19
                    319: #define        RQSTYPE_IP_XMIT_64      0x1b
                    320: #define        RQSTYPE_CTIO4           0x1e    /* Target Mode */
                    321: #define        RQSTYPE_CTIO3           0x1f    /* Target Mode */
                    322: #define        RQSTYPE_RIO1            0x21
                    323: #define        RQSTYPE_RIO2            0x22
                    324: #define        RQSTYPE_IP_RECV         0x23
                    325: #define        RQSTYPE_IP_RECV_CONT    0x24
                    326:
                    327:
                    328: #define        ISP_RQDSEG      4
                    329: typedef struct {
                    330:        isphdr_t        req_header;
                    331:        u_int32_t       req_handle;
                    332:        u_int8_t        req_lun_trn;
                    333:        u_int8_t        req_target;
                    334:        u_int16_t       req_cdblen;
                    335: #define        req_modifier    req_cdblen      /* marker packet */
                    336:        u_int16_t       req_flags;
                    337:        u_int16_t       req_reserved;
                    338:        u_int16_t       req_time;
                    339:        u_int16_t       req_seg_count;
                    340:        u_int8_t        req_cdb[12];
                    341:        ispds_t         req_dataseg[ISP_RQDSEG];
                    342: } ispreq_t;
                    343:
                    344: #define        ispreq64_t      ispreqt3_t      /* same as.... */
                    345: #define        ISP_RQDSEG_A64  2
                    346:
                    347: /*
                    348:  * A request packet can also be a marker packet.
                    349:  */
                    350: #define SYNC_DEVICE    0
                    351: #define SYNC_TARGET    1
                    352: #define SYNC_ALL       2
                    353:
                    354: #define        ISP_RQDSEG_T2           3
                    355: typedef struct {
                    356:        isphdr_t        req_header;
                    357:        u_int32_t       req_handle;
                    358:        u_int8_t        req_lun_trn;
                    359:        u_int8_t        req_target;
                    360:        u_int16_t       req_scclun;
                    361:        u_int16_t       req_flags;
                    362:        u_int16_t       _res2;
                    363:        u_int16_t       req_time;
                    364:        u_int16_t       req_seg_count;
                    365:        u_int8_t        req_cdb[16];
                    366:        u_int32_t       req_totalcnt;
                    367:        ispds_t         req_dataseg[ISP_RQDSEG_T2];
                    368: } ispreqt2_t;
                    369:
                    370: #define        ISP_RQDSEG_T3           2
                    371: typedef struct {
                    372:        isphdr_t        req_header;
                    373:        u_int32_t       req_handle;
                    374:        u_int8_t        req_lun_trn;
                    375:        u_int8_t        req_target;
                    376:        u_int16_t       req_scclun;
                    377:        u_int16_t       req_flags;
                    378:        u_int16_t       _res2;
                    379:        u_int16_t       req_time;
                    380:        u_int16_t       req_seg_count;
                    381:        u_int8_t        req_cdb[16];
                    382:        u_int32_t       req_totalcnt;
                    383:        ispds64_t       req_dataseg[ISP_RQDSEG_T3];
                    384: } ispreqt3_t;
                    385:
                    386: /* req_flag values */
                    387: #define        REQFLAG_NODISCON        0x0001
                    388: #define        REQFLAG_HTAG            0x0002
                    389: #define        REQFLAG_OTAG            0x0004
                    390: #define        REQFLAG_STAG            0x0008
                    391: #define        REQFLAG_TARGET_RTN      0x0010
                    392:
                    393: #define        REQFLAG_NODATA          0x0000
                    394: #define        REQFLAG_DATA_IN         0x0020
                    395: #define        REQFLAG_DATA_OUT        0x0040
                    396: #define        REQFLAG_DATA_UNKNOWN    0x0060
                    397:
                    398: #define        REQFLAG_DISARQ          0x0100
                    399: #define        REQFLAG_FRC_ASYNC       0x0200
                    400: #define        REQFLAG_FRC_SYNC        0x0400
                    401: #define        REQFLAG_FRC_WIDE        0x0800
                    402: #define        REQFLAG_NOPARITY        0x1000
                    403: #define        REQFLAG_STOPQ           0x2000
                    404: #define        REQFLAG_XTRASNS         0x4000
                    405: #define        REQFLAG_PRIORITY        0x8000
                    406:
                    407: typedef struct {
                    408:        isphdr_t        req_header;
                    409:        u_int32_t       req_handle;
                    410:        u_int8_t        req_lun_trn;
                    411:        u_int8_t        req_target;
                    412:        u_int16_t       req_cdblen;
                    413:        u_int16_t       req_flags;
                    414:        u_int16_t       _res1;
                    415:        u_int16_t       req_time;
                    416:        u_int16_t       req_seg_count;
                    417:        u_int8_t        req_cdb[44];
                    418: } ispextreq_t;
                    419:
                    420: #define        ISP_CDSEG       7
                    421: typedef struct {
                    422:        isphdr_t        req_header;
                    423:        u_int32_t       _res1;
                    424:        ispds_t         req_dataseg[ISP_CDSEG];
                    425: } ispcontreq_t;
                    426:
                    427: #define        ISP_CDSEG64     5
                    428: typedef struct {
                    429:        isphdr_t        req_header;
                    430:        ispds64_t       req_dataseg[ISP_CDSEG64];
                    431: } ispcontreq64_t;
                    432:
                    433: typedef struct {
                    434:        isphdr_t        req_header;
                    435:        u_int32_t       req_handle;
                    436:        u_int16_t       req_scsi_status;
                    437:        u_int16_t       req_completion_status;
                    438:        u_int16_t       req_state_flags;
                    439:        u_int16_t       req_status_flags;
                    440:        u_int16_t       req_time;
                    441: #define        req_response_len        req_time        /* FC only */
                    442:        u_int16_t       req_sense_len;
                    443:        u_int32_t       req_resid;
                    444:        u_int8_t        req_response[8];        /* FC only */
                    445:        u_int8_t        req_sense_data[32];
                    446: } ispstatusreq_t;
                    447:
                    448: typedef struct {
                    449:        isphdr_t        req_header;
                    450:        u_int8_t        req_sense_data[60];
                    451: } ispstatus_cont_t;
                    452:
                    453: /*
                    454:  * For Qlogic 2X00, the high order byte of SCSI status has
                    455:  * additional meaning.
                    456:  */
                    457: #define        RQCS_RU 0x800   /* Residual Under */
                    458: #define        RQCS_RO 0x400   /* Residual Over */
                    459: #define        RQCS_RESID      (RQCS_RU|RQCS_RO)
                    460: #define        RQCS_SV 0x200   /* Sense Length Valid */
                    461: #define        RQCS_RV 0x100   /* FCP Response Length Valid */
                    462:
                    463: /*
                    464:  * Completion Status Codes.
                    465:  */
                    466: #define RQCS_COMPLETE                  0x0000
                    467: #define RQCS_DMA_ERROR                 0x0002
                    468: #define RQCS_RESET_OCCURRED            0x0004
                    469: #define RQCS_ABORTED                   0x0005
                    470: #define RQCS_TIMEOUT                   0x0006
                    471: #define RQCS_DATA_OVERRUN              0x0007
                    472: #define RQCS_DATA_UNDERRUN             0x0015
                    473: #define        RQCS_QUEUE_FULL                 0x001C
                    474:
                    475: /* 1X00 Only Completion Codes */
                    476: #define RQCS_INCOMPLETE                        0x0001
                    477: #define RQCS_TRANSPORT_ERROR           0x0003
                    478: #define RQCS_COMMAND_OVERRUN           0x0008
                    479: #define RQCS_STATUS_OVERRUN            0x0009
                    480: #define RQCS_BAD_MESSAGE               0x000a
                    481: #define RQCS_NO_MESSAGE_OUT            0x000b
                    482: #define RQCS_EXT_ID_FAILED             0x000c
                    483: #define RQCS_IDE_MSG_FAILED            0x000d
                    484: #define RQCS_ABORT_MSG_FAILED          0x000e
                    485: #define RQCS_REJECT_MSG_FAILED         0x000f
                    486: #define RQCS_NOP_MSG_FAILED            0x0010
                    487: #define RQCS_PARITY_ERROR_MSG_FAILED   0x0011
                    488: #define RQCS_DEVICE_RESET_MSG_FAILED   0x0012
                    489: #define RQCS_ID_MSG_FAILED             0x0013
                    490: #define RQCS_UNEXP_BUS_FREE            0x0014
                    491: #define        RQCS_XACT_ERR1                  0x0018
                    492: #define        RQCS_XACT_ERR2                  0x0019
                    493: #define        RQCS_XACT_ERR3                  0x001A
                    494: #define        RQCS_BAD_ENTRY                  0x001B
                    495: #define        RQCS_PHASE_SKIPPED              0x001D
                    496: #define        RQCS_ARQS_FAILED                0x001E
                    497: #define        RQCS_WIDE_FAILED                0x001F
                    498: #define        RQCS_SYNCXFER_FAILED            0x0020
                    499: #define        RQCS_LVD_BUSERR                 0x0021
                    500:
                    501: /* 2X00 Only Completion Codes */
                    502: #define        RQCS_PORT_UNAVAILABLE           0x0028
                    503: #define        RQCS_PORT_LOGGED_OUT            0x0029
                    504: #define        RQCS_PORT_CHANGED               0x002A
                    505: #define        RQCS_PORT_BUSY                  0x002B
                    506:
                    507: /*
                    508:  * 1X00 specific State Flags
                    509:  */
                    510: #define RQSF_GOT_BUS                   0x0100
                    511: #define RQSF_GOT_TARGET                        0x0200
                    512: #define RQSF_SENT_CDB                  0x0400
                    513: #define RQSF_XFRD_DATA                 0x0800
                    514: #define RQSF_GOT_STATUS                        0x1000
                    515: #define RQSF_GOT_SENSE                 0x2000
                    516: #define        RQSF_XFER_COMPLETE              0x4000
                    517:
                    518: /*
                    519:  * 2X00 specific State Flags
                    520:  * (same as 1X00 except RQSF_GOT_BUS/RQSF_GOT_TARGET are not available)
                    521:  */
                    522: #define        RQSF_DATA_IN                    0x0020
                    523: #define        RQSF_DATA_OUT                   0x0040
                    524: #define        RQSF_STAG                       0x0008
                    525: #define        RQSF_OTAG                       0x0004
                    526: #define        RQSF_HTAG                       0x0002
                    527: /*
                    528:  * 1X00 Status Flags
                    529:  */
                    530: #define RQSTF_DISCONNECT               0x0001
                    531: #define RQSTF_SYNCHRONOUS              0x0002
                    532: #define RQSTF_PARITY_ERROR             0x0004
                    533: #define RQSTF_BUS_RESET                        0x0008
                    534: #define RQSTF_DEVICE_RESET             0x0010
                    535: #define RQSTF_ABORTED                  0x0020
                    536: #define RQSTF_TIMEOUT                  0x0040
                    537: #define RQSTF_NEGOTIATION              0x0080
                    538:
                    539: /*
                    540:  * 2X00 specific state flags
                    541:  */
                    542: /* RQSF_SENT_CDB       */
                    543: /* RQSF_XFRD_DATA      */
                    544: /* RQSF_GOT_STATUS     */
                    545: /* RQSF_XFER_COMPLETE  */
                    546:
                    547: /*
                    548:  * 2X00 specific status flags
                    549:  */
                    550: /* RQSTF_ABORTED */
                    551: /* RQSTF_TIMEOUT */
                    552: #define        RQSTF_DMA_ERROR                 0x0080
                    553: #define        RQSTF_LOGOUT                    0x2000
                    554:
                    555: /*
                    556:  * Miscellaneous
                    557:  */
                    558: #ifndef        ISP_EXEC_THROTTLE
                    559: #define        ISP_EXEC_THROTTLE       16
                    560: #endif
                    561:
                    562: /*
                    563:  * About Firmware returns an 'attribute' word in mailbox 6.
                    564:  */
                    565: #define        ISP_FW_ATTR_TMODE       0x01
                    566: #define        ISP_FW_ATTR_SCCLUN      0x02
                    567: #define        ISP_FW_ATTR_FABRIC      0x04
                    568: #define        ISP_FW_ATTR_CLASS2      0x08
                    569: #define        ISP_FW_ATTR_FCTAPE      0x10
                    570: #define        ISP_FW_ATTR_IP          0x20
                    571:
                    572: /*
                    573:  * Reduced Interrupt Operation Response Queue Entreis
                    574:  */
                    575:
                    576: typedef struct {
                    577:        isphdr_t        req_header;
                    578:        u_int32_t       req_handles[15];
                    579: } isp_rio1_t;
                    580:
                    581: typedef struct {
                    582:        isphdr_t        req_header;
                    583:        u_int16_t       req_handles[30];
                    584: } isp_rio2_t;
                    585:
                    586: /*
                    587:  * FC (ISP2100) specific data structures
                    588:  */
                    589:
                    590: /*
                    591:  * Initialization Control Block
                    592:  *
                    593:  * Version One (prime) format.
                    594:  */
                    595: typedef struct isp_icb {
                    596:        u_int8_t        icb_version;
                    597:        u_int8_t        _reserved0;
                    598:        u_int16_t       icb_fwoptions;
                    599:        u_int16_t       icb_maxfrmlen;
                    600:        u_int16_t       icb_maxalloc;
                    601:        u_int16_t       icb_execthrottle;
                    602:        u_int8_t        icb_retry_count;
                    603:        u_int8_t        icb_retry_delay;
                    604:        u_int8_t        icb_portname[8];
                    605:        u_int16_t       icb_hardaddr;
                    606:        u_int8_t        icb_iqdevtype;
                    607:        u_int8_t        icb_logintime;
                    608:        u_int8_t        icb_nodename[8];
                    609:        u_int16_t       icb_rqstout;
                    610:        u_int16_t       icb_rspnsin;
                    611:        u_int16_t       icb_rqstqlen;
                    612:        u_int16_t       icb_rsltqlen;
                    613:        u_int16_t       icb_rqstaddr[4];
                    614:        u_int16_t       icb_respaddr[4];
                    615:        u_int16_t       icb_lunenables;
                    616:        u_int8_t        icb_ccnt;
                    617:        u_int8_t        icb_icnt;
                    618:        u_int16_t       icb_lunetimeout;
                    619:        u_int16_t       _reserved1;
                    620:        u_int16_t       icb_xfwoptions;
                    621:        u_int8_t        icb_racctimer;
                    622:        u_int8_t        icb_idelaytimer;
                    623:        u_int16_t       icb_zfwoptions;
                    624:        u_int16_t       _reserved2[13];
                    625: } isp_icb_t;
                    626: #define        ICB_VERSION1    1
                    627:
                    628: #define        ICBOPT_HARD_ADDRESS     0x0001
                    629: #define        ICBOPT_FAIRNESS         0x0002
                    630: #define        ICBOPT_FULL_DUPLEX      0x0004
                    631: #define        ICBOPT_FAST_POST        0x0008
                    632: #define        ICBOPT_TGT_ENABLE       0x0010
                    633: #define        ICBOPT_INI_DISABLE      0x0020
                    634: #define        ICBOPT_INI_ADISC        0x0040
                    635: #define        ICBOPT_INI_TGTTYPE      0x0080
                    636: #define        ICBOPT_PDBCHANGE_AE     0x0100
                    637: #define        ICBOPT_NOLIP            0x0200
                    638: #define        ICBOPT_SRCHDOWN         0x0400
                    639: #define        ICBOPT_PREVLOOP         0x0800
                    640: #define        ICBOPT_STOP_ON_QFULL    0x1000
                    641: #define        ICBOPT_FULL_LOGIN       0x2000
                    642: #define        ICBOPT_BOTH_WWNS        0x4000
                    643: #define        ICBOPT_EXTENDED         0x8000
                    644:
                    645: #define        ICBXOPT_CLASS2_ACK0     0x0200
                    646: #define        ICBXOPT_CLASS2          0x0100
                    647: #define        ICBXOPT_LOOP_ONLY       (0 << 4)
                    648: #define        ICBXOPT_PTP_ONLY        (1 << 4)
                    649: #define        ICBXOPT_LOOP_2_PTP      (2 << 4)
                    650: #define        ICBXOPT_PTP_2_LOOP      (3 << 4)
                    651:
                    652: #define        ICBXOPT_RIO_OFF         0
                    653: #define        ICBXOPT_RIO_16BIT       1
                    654: #define        ICBXOPT_RIO_32BIT       2
                    655: #define        ICBXOPT_RIO_16BIT_IOCB  3
                    656: #define        ICBXOPT_RIO_32BIT_IOCB  4
                    657: #define        ICBXOPT_ZIO             (1 << 5)
                    658:
                    659: #define        ICBZOPT_ENA_RDXFR_RDY   0x01
                    660: #define        ICBZOPT_ENA_OOF         (1 << 6) /* out of order frame handling */
                    661: /* These 3 only apply to the 2300 */
                    662: #define        ICBZOPT_RATE_ONEGB      (MBGSD_ONEGB << 14)
                    663: #define        ICBZOPT_RATE_TWOGB      (MBGSD_TWOGB << 14)
                    664: #define        ICBZOPT_RATE_AUTO       (MBGSD_AUTO << 14)
                    665:
                    666:
                    667: #define        ICB_MIN_FRMLEN          256
                    668: #define        ICB_MAX_FRMLEN          2112
                    669: #define        ICB_DFLT_FRMLEN         1024
                    670: #define        ICB_DFLT_ALLOC          256
                    671: #define        ICB_DFLT_THROTTLE       16
                    672: #define        ICB_DFLT_RDELAY         5
                    673: #define        ICB_DFLT_RCOUNT         3
                    674:
                    675:
                    676: #define        RQRSP_ADDR0015  0
                    677: #define        RQRSP_ADDR1631  1
                    678: #define        RQRSP_ADDR3247  2
                    679: #define        RQRSP_ADDR4863  3
                    680:
                    681:
                    682: #define        ICB_NNM0        7
                    683: #define        ICB_NNM1        6
                    684: #define        ICB_NNM2        5
                    685: #define        ICB_NNM3        4
                    686: #define        ICB_NNM4        3
                    687: #define        ICB_NNM5        2
                    688: #define        ICB_NNM6        1
                    689: #define        ICB_NNM7        0
                    690:
                    691: #define        MAKE_NODE_NAME_FROM_WWN(array, wwn)     \
                    692:        array[ICB_NNM0] = (u_int8_t) ((wwn >>  0) & 0xff), \
                    693:        array[ICB_NNM1] = (u_int8_t) ((wwn >>  8) & 0xff), \
                    694:        array[ICB_NNM2] = (u_int8_t) ((wwn >> 16) & 0xff), \
                    695:        array[ICB_NNM3] = (u_int8_t) ((wwn >> 24) & 0xff), \
                    696:        array[ICB_NNM4] = (u_int8_t) ((wwn >> 32) & 0xff), \
                    697:        array[ICB_NNM5] = (u_int8_t) ((wwn >> 40) & 0xff), \
                    698:        array[ICB_NNM6] = (u_int8_t) ((wwn >> 48) & 0xff), \
                    699:        array[ICB_NNM7] = (u_int8_t) ((wwn >> 56) & 0xff)
                    700:
                    701: /*
                    702:  * FC-AL Position Map
                    703:  *
                    704:  * This is an at most 128 byte map that returns either
                    705:  * the LILP or Firmware generated list of ports.
                    706:  *
                    707:  * We deviate a bit from the returned qlogic format to
                    708:  * use an extra bit to say whether this was a LILP or
                    709:  * f/w generated map.
                    710:  */
                    711: typedef struct {
                    712:        u_int8_t        fwmap   : 1,
                    713:                        count   : 7;
                    714:        u_int8_t        map[127];
                    715: } fcpos_map_t;
                    716:
                    717: /*
                    718:  * Port Data Base Element
                    719:  */
                    720:
                    721: typedef struct {
                    722:        u_int16_t       pdb_options;
                    723:        u_int8_t        pdb_mstate;
                    724:        u_int8_t        pdb_sstate;
                    725: #define        BITS2WORD(x)    ((x)[0] << 16 | (x)[3] << 8 | (x)[2])
                    726:        u_int8_t        pdb_hardaddr_bits[4];
                    727:        u_int8_t        pdb_portid_bits[4];
                    728:        u_int8_t        pdb_nodename[8];
                    729:        u_int8_t        pdb_portname[8];
                    730:        u_int16_t       pdb_execthrottle;
                    731:        u_int16_t       pdb_exec_count;
                    732:        u_int8_t        pdb_retry_count;
                    733:        u_int8_t        pdb_retry_delay;
                    734:        u_int16_t       pdb_resalloc;
                    735:        u_int16_t       pdb_curalloc;
                    736:        u_int16_t       pdb_qhead;
                    737:        u_int16_t       pdb_qtail;
                    738:        u_int16_t       pdb_tl_next;
                    739:        u_int16_t       pdb_tl_last;
                    740:        u_int16_t       pdb_features;   /* PLOGI, Common Service */
                    741:        u_int16_t       pdb_pconcurrnt; /* PLOGI, Common Service */
                    742:        u_int16_t       pdb_roi;        /* PLOGI, Common Service */
                    743:        u_int8_t        pdb_target;
                    744:        u_int8_t        pdb_initiator;  /* PLOGI, Class 3 Control Flags */
                    745:        u_int16_t       pdb_rdsiz;      /* PLOGI, Class 3 */
                    746:        u_int16_t       pdb_ncseq;      /* PLOGI, Class 3 */
                    747:        u_int16_t       pdb_noseq;      /* PLOGI, Class 3 */
                    748:        u_int16_t       pdb_labrtflg;
                    749:        u_int16_t       pdb_lstopflg;
                    750:        u_int16_t       pdb_sqhead;
                    751:        u_int16_t       pdb_sqtail;
                    752:        u_int16_t       pdb_ptimer;
                    753:        u_int16_t       pdb_nxt_seqid;
                    754:        u_int16_t       pdb_fcount;
                    755:        u_int16_t       pdb_prli_len;
                    756:        u_int16_t       pdb_prli_svc0;
                    757:        u_int16_t       pdb_prli_svc3;
                    758:        u_int16_t       pdb_loopid;
                    759:        u_int16_t       pdb_il_ptr;
                    760:        u_int16_t       pdb_sl_ptr;
                    761: } isp_pdb_t;
                    762:
                    763: #define        PDB_OPTIONS_XMITTING    (1<<11)
                    764: #define        PDB_OPTIONS_LNKXMIT     (1<<10)
                    765: #define        PDB_OPTIONS_ABORTED     (1<<9)
                    766: #define        PDB_OPTIONS_ADISC       (1<<1)
                    767:
                    768: #define        PDB_STATE_DISCOVERY     0
                    769: #define        PDB_STATE_WDISC_ACK     1
                    770: #define        PDB_STATE_PLOGI         2
                    771: #define        PDB_STATE_PLOGI_ACK     3
                    772: #define        PDB_STATE_PRLI          4
                    773: #define        PDB_STATE_PRLI_ACK      5
                    774: #define        PDB_STATE_LOGGED_IN     6
                    775: #define        PDB_STATE_PORT_UNAVAIL  7
                    776: #define        PDB_STATE_PRLO          8
                    777: #define        PDB_STATE_PRLO_ACK      9
                    778: #define        PDB_STATE_PLOGO         10
                    779: #define        PDB_STATE_PLOG_ACK      11
                    780:
                    781: #define                SVC3_TGT_ROLE           0x10
                    782: #define        SVC3_INI_ROLE           0x20
                    783: #define                        SVC3_ROLE_MASK  0x30
                    784: #define                        SVC3_ROLE_SHIFT 4
                    785:
                    786: /*
                    787:  * CT definition
                    788:  *
                    789:  * This is as the QLogic f/w documentations defines it- which is just opposite,
                    790:  * bit wise, from what the specification defines it as. Additionally, the
                    791:  * ct_response and ct_resid (really from FC-GS-2) need to be byte swapped.
                    792:  */
                    793:
                    794: typedef struct {
                    795:        u_int8_t        ct_revision;
                    796:        u_int8_t        ct_portid[3];
                    797:        u_int8_t        ct_fcs_type;
                    798:        u_int8_t        ct_fcs_subtype;
                    799:        u_int8_t        ct_options;
                    800:        u_int8_t        ct_res0;
                    801:        u_int16_t       ct_response;
                    802:        u_int16_t       ct_resid;
                    803:        u_int8_t        ct_res1;
                    804:        u_int8_t        ct_reason;
                    805:        u_int8_t        ct_explanation;
                    806:        u_int8_t        ct_vunique;
                    807: } ct_hdr_t;
                    808: #define        FS_ACC  0x8002
                    809: #define        FS_RJT  0x8001
                    810:
                    811: #define        FC4_IP          5 /* ISO/EEC 8802-2 LLC/SNAP "Out of Order Delivery" */
                    812: #define        FC4_SCSI        8 /* SCSI-3 via Fivre Channel Protocol (FCP) */
                    813: #define        FC4_FC_SVC      0x20    /* Fibre Channel Services */
                    814:
                    815: #define        SNS_GA_NXT      0x100
                    816: #define        SNS_GPN_ID      0x112
                    817: #define        SNS_GNN_ID      0x113
                    818: #define        SNS_GFF_ID      0x11F
                    819: #define        SNS_GID_FT      0x171
                    820: #define        SNS_RFT_ID      0x217
                    821: typedef struct {
                    822:        u_int16_t       snscb_rblen;    /* response buffer length (words) */
                    823:        u_int16_t       snscb_res0;
                    824:        u_int16_t       snscb_addr[4];  /* response buffer address */
                    825:        u_int16_t       snscb_sblen;    /* subcommand buffer length (words) */
                    826:        u_int16_t       snscb_res1;
                    827:        u_int16_t       snscb_data[1];  /* variable data */
                    828: } sns_screq_t; /* Subcommand Request Structure */
                    829:
                    830: typedef struct {
                    831:        u_int16_t       snscb_rblen;    /* response buffer length (words) */
                    832:        u_int16_t       snscb_res0;
                    833:        u_int16_t       snscb_addr[4];  /* response buffer address */
                    834:        u_int16_t       snscb_sblen;    /* subcommand buffer length (words) */
                    835:        u_int16_t       snscb_res1;
                    836:        u_int16_t       snscb_cmd;
                    837:        u_int16_t       snscb_res2;
                    838:        u_int32_t       snscb_res3;
                    839:        u_int32_t       snscb_port;
                    840: } sns_ga_nxt_req_t;
                    841: #define        SNS_GA_NXT_REQ_SIZE     (sizeof (sns_ga_nxt_req_t))
                    842:
                    843: typedef struct {
                    844:        u_int16_t       snscb_rblen;    /* response buffer length (words) */
                    845:        u_int16_t       snscb_res0;
                    846:        u_int16_t       snscb_addr[4];  /* response buffer address */
                    847:        u_int16_t       snscb_sblen;    /* subcommand buffer length (words) */
                    848:        u_int16_t       snscb_res1;
                    849:        u_int16_t       snscb_cmd;
                    850:        u_int16_t       snscb_res2;
                    851:        u_int32_t       snscb_res3;
                    852:        u_int32_t       snscb_portid;
                    853: } sns_gxn_id_req_t;
                    854: #define        SNS_GXN_ID_REQ_SIZE     (sizeof (sns_gxn_id_req_t))
                    855:
                    856: typedef struct {
                    857:        u_int16_t       snscb_rblen;    /* response buffer length (words) */
                    858:        u_int16_t       snscb_res0;
                    859:        u_int16_t       snscb_addr[4];  /* response buffer address */
                    860:        u_int16_t       snscb_sblen;    /* subcommand buffer length (words) */
                    861:        u_int16_t       snscb_res1;
                    862:        u_int16_t       snscb_cmd;
                    863:        u_int16_t       snscb_mword_div_2;
                    864:        u_int32_t       snscb_res3;
                    865:        u_int32_t       snscb_fc4_type;
                    866: } sns_gid_ft_req_t;
                    867: #define        SNS_GID_FT_REQ_SIZE     (sizeof (sns_gid_ft_req_t))
                    868:
                    869: typedef struct {
                    870:        u_int16_t       snscb_rblen;    /* response buffer length (words) */
                    871:        u_int16_t       snscb_res0;
                    872:        u_int16_t       snscb_addr[4];  /* response buffer address */
                    873:        u_int16_t       snscb_sblen;    /* subcommand buffer length (words) */
                    874:        u_int16_t       snscb_res1;
                    875:        u_int16_t       snscb_cmd;
                    876:        u_int16_t       snscb_res2;
                    877:        u_int32_t       snscb_res3;
                    878:        u_int32_t       snscb_port;
                    879:        u_int32_t       snscb_fc4_types[8];
                    880: } sns_rft_id_req_t;
                    881: #define        SNS_RFT_ID_REQ_SIZE     (sizeof (sns_rft_id_req_t))
                    882:
                    883: typedef struct {
                    884:        ct_hdr_t        snscb_cthdr;
                    885:        u_int8_t        snscb_port_type;
                    886:        u_int8_t        snscb_port_id[3];
                    887:        u_int8_t        snscb_portname[8];
                    888:        u_int16_t       snscb_data[1];  /* variable data */
                    889: } sns_scrsp_t; /* Subcommand Response Structure */
                    890:
                    891: typedef struct {
                    892:        ct_hdr_t        snscb_cthdr;
                    893:        u_int8_t        snscb_port_type;
                    894:        u_int8_t        snscb_port_id[3];
                    895:        u_int8_t        snscb_portname[8];
                    896:        u_int8_t        snscb_pnlen;            /* symbolic port name length */
                    897:        u_int8_t        snscb_pname[255];       /* symbolic port name */
                    898:        u_int8_t        snscb_nodename[8];
                    899:        u_int8_t        snscb_nnlen;            /* symbolic node name length */
                    900:        u_int8_t        snscb_nname[255];       /* symbolic node name */
                    901:        u_int8_t        snscb_ipassoc[8];
                    902:        u_int8_t        snscb_ipaddr[16];
                    903:        u_int8_t        snscb_svc_class[4];
                    904:        u_int8_t        snscb_fc4_types[32];
                    905:        u_int8_t        snscb_fpname[8];
                    906:        u_int8_t        snscb_reserved;
                    907:        u_int8_t        snscb_hardaddr[3];
                    908: } sns_ga_nxt_rsp_t;    /* Subcommand Response Structure */
                    909: #define        SNS_GA_NXT_RESP_SIZE    (sizeof (sns_ga_nxt_rsp_t))
                    910:
                    911: typedef struct {
                    912:        ct_hdr_t        snscb_cthdr;
                    913:        u_int8_t        snscb_wwn[8];
                    914: } sns_gxn_id_rsp_t;
                    915: #define        SNS_GXN_ID_RESP_SIZE    (sizeof (sns_gxn_id_rsp_t))
                    916:
                    917: typedef struct {
                    918:        ct_hdr_t        snscb_cthdr;
                    919:        u_int32_t       snscb_fc4_features[32];
                    920: } sns_gff_id_rsp_t;
                    921: #define        SNS_GFF_ID_RESP_SIZE    (sizeof (sns_gff_id_rsp_t))
                    922:
                    923: typedef struct {
                    924:        ct_hdr_t        snscb_cthdr;
                    925:        struct {
                    926:                u_int8_t        control;
                    927:                u_int8_t        portid[3];
                    928:        } snscb_ports[1];
                    929: } sns_gid_ft_rsp_t;
                    930: #define        SNS_GID_FT_RESP_SIZE(x) ((sizeof (sns_gid_ft_rsp_t)) + ((x - 1) << 2))
                    931:
                    932: #define        SNS_RFT_ID_RESP_SIZE    (sizeof (ct_hdr_t))
                    933:
                    934: #endif /* _ISPMBOX_H */

CVSweb