[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     ! 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