root/usr/src/uts/common/sys/fct_defines.h
/*
 * CDDL HEADER START
 *
 * The contents of this file are subject to the terms of the
 * Common Development and Distribution License (the "License").
 * You may not use this file except in compliance with the License.
 *
 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
 * or http://www.opensolaris.org/os/licensing.
 * See the License for the specific language governing permissions
 * and limitations under the License.
 *
 * When distributing Covered Code, include this CDDL HEADER in each
 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
 * If applicable, add the following below this CDDL HEADER, with the
 * fields enclosed by brackets "[]" replaced with your own identifying
 * information: Portions Copyright [yyyy] [name of copyright owner]
 *
 * CDDL HEADER END
 */
/*
 * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
 * Use is subject to license terms.
 */
#ifndef _FCT_DEFINES_H
#define _FCT_DEFINES_H

#ifdef  __cplusplus
extern "C" {
#endif

typedef stmf_status_t   fct_status_t;
/*
 * Error codes
 */
#define FCT_SUCCESS             STMF_SUCCESS
#define FCT_FAILURE             STMF_TARGET_FAILURE
#define FCT_FCA_FAILURE         (FCT_FAILURE | (uint64_t)0x0100000000000000)
#define FCT_BUSY                STMF_BUSY
#define FCT_ABORT_SUCCESS       STMF_ABORT_SUCCESS
#define FCT_ABORTED             STMF_ABORTED
#define FCT_NOT_FOUND           STMF_NOT_FOUND
#define FCT_TIMEOUT             STMF_TIMEOUT

#define FCT_WORKER_STUCK        (FCT_FAILURE | STMF_FSC(1))
#define FCT_ALLOC_FAILURE       (FCT_FAILURE | STMF_FSC(2))
#define FCT_LOCAL_PORT_OFFLINE  (FCT_FAILURE | STMF_FSC(3))
#define FCT_NO_XCHG_RESOURCE    (FCT_FAILURE | STMF_FSC(4))
#define FCT_NOT_LOGGED_IN       (FCT_FAILURE | STMF_FSC(5))
#define FCT_ABTS_RECEIVED       (FCT_FAILURE | STMF_FSC(6))
#define FCT_RPORT_SENT_REJECT   (FCT_FAILURE | STMF_FSC(7))

#define FCT_REJECT_STATUS(reason, expln)        \
        (FCT_RPORT_SENT_REJECT | (((uint64_t)(reason)) << 8) | \
            ((uint64_t)(expln)))

/*
 * Event codes
 */
#define FCT_EVENT_LINK_UP       0x01
#define FCT_EVENT_LINK_DOWN     0x02
#define FCT_EVENT_LINK_RESET    0x03
#define FCT_EVENT_ADAPTER_FATAL 0x04

/*
 * ELS OP codes
 */
#define ELS_OP_LSRJT            0x01
#define ELS_OP_ACC              0x02
#define ELS_OP_PLOGI            0x03
#define ELS_OP_FLOGI            0x04
#define ELS_OP_LOGO             0x05
#define ELS_OP_ABTX             0x06
#define ELS_OP_RLS              0x0f
#define ELS_OP_ECHO             0x10
#define ELS_OP_REC              0x13
#define ELS_OP_SRR              0x14
#define ELS_OP_PRLI             0x20
#define ELS_OP_PRLO             0x21
#define ELS_OP_SCN              0x22
#define ELS_OP_TPRLO            0x24
#define ELS_OP_PDISC            0x50
#define ELS_OP_ADISC            0x52
#define ELS_OP_RSCN             0x61
#define ELS_OP_SCR              0x62
#define ELS_OP_RNID             0x78

/*
 * BLS replies
 */
#define BLS_OP_BA_ACC           0x84
#define BLS_OP_BA_RJT           0x85

/*
 * Name Service Command Codes
 */
#define NS_GA_NXT               0x0100  /* Get All next */
#define NS_GPN_ID               0x0112  /* Get Port Name */
#define NS_GNN_ID               0x0113  /* Get Node Name */
#define NS_GCS_ID               0x0114  /* Get Class Of service */
#define NS_GFT_ID               0x0117  /* Get FC-4 Types */
#define NS_GSPN_ID              0x0118  /* Get Sym Port name */
#define NS_GPT_ID               0x011A  /* Get Port Type */
#define NS_GID_PN               0x0121  /* Get port id for PN */
#define NS_GID_NN               0x0131  /* Get port id for NN */
#define NS_GIP_NN               0x0135  /* Get IP address */
#define NS_GIPA_NN              0x0136  /* Get I.P.A */
#define NS_GSNN_NN              0x0139  /* Get Sym Node name */
#define NS_GNN_IP               0x0153  /* Get Node name for IP */
#define NS_GIPA_IP              0x0156  /* Get I.P.A for IP */
#define NS_GID_FT               0x0171  /* Get port Id for FC-4 type */
#define NS_GID_PT               0x01A1  /* Get port Id for type */
#define NS_RPN_ID               0x0212  /* Reg port name */
#define NS_RNN_ID               0x0213  /* Reg node name */
#define NS_RCS_ID               0x0214  /* Reg C.O.S */
#define NS_RFT_ID               0x0217  /* Reg FC-4 Types */
#define NS_RSPN_ID              0x0218  /* Reg Sym Port name */
#define NS_RPT_ID               0x021A  /* Reg Port Type */
#define NS_RIP_NN               0x0235  /* Reg I.P address */
#define NS_RIPA_NN              0x0236  /* Reg I.P.A */
#define NS_RSNN_NN              0x0239  /* Reg Sym Node name */
#define NS_DA_ID                0x0300  /* De-Register all */

#define CT_OP_RJT               0x8001
#define CT_OP_ACC               0x8002

/*
 * PRLI bits
 */
#define PRLI_BIT_WRITE_XRDY_DISABLED            0x00000001
#define PRLI_BIT_READ_XRDY_DISABLED             0x00000002
#define PRLI_BIT_TARGET_FUNCTION                0x00000010
#define PRLI_BIT_INITIATOR_FUNCTION             0x00000020
#define PRLI_BIT_DATA_OVERLAY_ALLOWED           0x00000040
#define PRLI_BIT_FCP_CONF_ALLOWED               0x00000080
#define PRLI_BIT_RETRY                          0x00000100
#define PRLI_BIT_TASK_RETRY_IDENT_REQUESTED     0x00000200
#define PRLI_BIT_REC_SUPPORT                    0x00000400

#define FC_NS_CLASSF            0x01
#define FC_NS_CLASS1            0x02
#define FC_NS_CLASS2            0x04
#define FC_NS_CLASS3            0x08
#define FC_NS_CLASS4            0x10
#define FC_NS_CLASS5            0x20
#define FC_NS_CLASS6            0x40

/*
 * SCR function code
 */
#define FC_SCR_FABRIC_REGISTRATION      0x01
#define FC_SCR_NPORT_REGISTRATION       0x02
#define FC_SCR_FULL_REGISTRATION        0x03
#define FC_SCR_CLEAR_REGISTRATION       0xFF

/*
 * FCP_CNTL bits
 */
#define FCP_CNTL_TASK_ATTR(fcp_cntl)    ((((uint32_t)(fcp_cntl)) >> 16) & 7)
#define TASK_ATTR_SIMPLE_Q              0
#define TASK_ATTR_HEAD_OF_Q             1
#define TASK_ATTR_ORDERED_Q             2
#define TASK_ATTR_ACA_Q                 4
#define TASK_ATTR_UNTAGGED              5
#define FCP_CNTL_IS_TASK_MGMT(fcp_cntl) (((uint32_t)(fcp_cntl)) & 0xff00)
#define FCP_CNTL_TERMINATE_TASK         0x8000
#define FCP_CNTL_CLEAR_ACA              0x4000
#define FCP_CNTL_TARGET_RESET           0x2000
#define FCP_CNTL_LUN_RESET              0x1000
#define FCP_CNTL_CLEAR_TASK_SET         0x0400
#define FCP_CNTL_ABORT_TASK_SET         0x0200
#define FCP_CNTL_READ_DATA              0x2
#define FCP_CNTL_WRITE_DATA             0x1

/*
 * SCSI STATUS BITS
 */
#define FCP_BIDI_RESP           0x8000
#define FCP_BIDI_UNDER          0x4000
#define FCP_BIDI_OVER           0x2000
#define FCP_CONF_REQ            0x1000
#define FCP_RESID_UNDER         0x0800
#define FCP_RESID_OVER          0x0400
#define FCP_SNS_LEN_VALID       0x0200
#define FCP_RESP_LEN_VALID      0x0100

/*
 * Well known addresses ...
 */
#define NPORT_ID_DOM_CTLR_START 0xFFFC01
#define NPORT_ID_DOM_CTLR_END   0xFFFCFE

#define FS_GENERAL_MULTICAST    0xFFFFF7
#define FS_WELL_KNOWN_MULTICAST 0xFFFFF8
#define FS_HUNT_GROUP           0xFFFFF9
#define FS_MANAGEMENT_SERVER    0xFFFFFA
#define FS_TIME_SERVER          0xFFFFFB
#define FS_NAME_SERVER          0xFFFFFC
#define FS_FABRIC_CONTROLLER    0xFFFFFD
#define FS_FABRIC_F_PORT        0xFFFFFE
#define FS_BROADCAST            0xFFFFFF

#define FC_WELL_KNOWN_START     0xFFFFF0
#define FC_WELL_KNOWN_END       0xFFFFFF
#define FC_WELL_KNOWN_ADDR(x)   \
        ((((x) >= FC_WELL_KNOWN_START) && ((x) <= FC_WELL_KNOWN_END)) ||\
        (((x) >= NPORT_ID_DOM_CTLR_START) && ((x) <= NPORT_ID_DOM_CTLR_END)))

#define FC_WWN_LEN              8
/*
 * NB: FC_WWN_BUFLEN should be 64-bit aligned (divisible by 8).
 */
#define FC_WWN_BUFLEN           (FC_WWN_LEN * 3)
#define FC_WWN_STRLEN           (FC_WWN_BUFLEN - 1)     /* add trailing null */

struct fct_cmd;
struct fct_local_port;
struct fct_els;
struct fct_link_info;
struct fct_flogi_xchg;
struct fct_dbuf_store;

#ifdef  __cplusplus
}
#endif

#endif /* _FCT_DEFINES_H */