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


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

FreeBSD/Linux Kernel Cross Reference
sys/dev/ocs_fc/ocs_fcp.h

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

    1 /*-
    2  * Copyright (c) 2017 Broadcom. All rights reserved.
    3  * The term "Broadcom" refers to Broadcom Limited and/or its subsidiaries.
    4  *
    5  * Redistribution and use in source and binary forms, with or without
    6  * modification, are permitted provided that the following conditions are met:
    7  *
    8  * 1. Redistributions of source code must retain the above copyright notice,
    9  *    this list of conditions and the following disclaimer.
   10  *
   11  * 2. Redistributions in binary form must reproduce the above copyright notice,
   12  *    this list of conditions and the following disclaimer in the documentation
   13  *    and/or other materials provided with the distribution.
   14  *
   15  * 3. Neither the name of the copyright holder nor the names of its contributors
   16  *    may be used to endorse or promote products derived from this software
   17  *    without specific prior written permission.
   18  *
   19  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
   20  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
   21  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
   22  * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
   23  * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
   24  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
   25  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
   26  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
   27  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
   28  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
   29  * POSSIBILITY OF SUCH DAMAGE.
   30  *
   31  * $FreeBSD$
   32  */
   33 
   34 /**
   35  * @file
   36  * Define Fibre Channel types and structures.
   37  */
   38 
   39 #ifndef _OCS_FCP_H
   40 #define _OCS_FCP_H
   41 
   42 #define FC_ELS_CMD_RJT          0x01
   43 #define FC_ELS_CMD_ACC          0x02
   44 #define FC_ELS_CMD_PLOGI        0x03
   45 #define FC_ELS_CMD_FLOGI        0x04
   46 #define FC_ELS_CMD_LOGO         0x05
   47 #define FC_ELS_CMD_RRQ          0x12
   48 #define FC_ELS_CMD_PRLI         0x20
   49 #define FC_ELS_CMD_PRLO         0x21
   50 #define FC_ELS_CMD_PDISC        0x50
   51 #define FC_ELS_CMD_FDISC        0x51
   52 #define FC_ELS_CMD_ADISC        0x52
   53 #define FC_ELS_CMD_RSCN         0x61
   54 #define FC_ELS_CMD_SCR          0x62
   55 
   56 #define FC_TYPE_BASIC_LINK      0
   57 #define FC_TYPE_FCP             0x08
   58 #define FC_TYPE_GS              0x20
   59 #define FC_TYPE_SW              0x22
   60 
   61 #define FC_ADDR_FABRIC                  0xfffffe        /** well known fabric address */
   62 #define FC_ADDR_CONTROLLER              0xfffffd        /** well known fabric controller address */
   63 #define FC_ADDR_IS_DOMAIN_CTRL(x)       (((x) & 0xffff00) == 0xfffc00)  /** is well known domain controller */
   64 #define FC_ADDR_GET_DOMAIN_CTRL(x)      ((x) & 0x0000ff)        /** get domain controller number */
   65 #define FC_ADDR_NAMESERVER              0xfffffc        /** well known directory server address */
   66 
   67 #define FC_GS_TYPE_ALIAS_SERVICE                0xf8
   68 #define FC_GS_TYPE_MANAGEMENT_SERVICE           0xfa
   69 #define FC_GS_TYPE_DIRECTORY_SERVICE            0xfc
   70 
   71 #define FC_GS_SUBTYPE_NAME_SERVER               0x02
   72 
   73 /**
   74  * Generic Services FC Type Bit mask macros:
   75  */
   76 #define FC_GS_TYPE_WORD(type)   ((type) >> 5)
   77 #define FC_GS_TYPE_BIT(type)    ((type) & 0x1f)
   78 
   79 /**
   80  * Generic Services Name Server Request Command codes:
   81  */
   82 #define FC_GS_NAMESERVER_GPN_ID         0x0112
   83 #define FC_GS_NAMESERVER_GNN_ID         0x0113
   84 #define FC_GS_NAMESERVER_GFPN_ID        0x011c
   85 #define FC_GS_NAMESERVER_GFF_ID         0x011f
   86 #define FC_GS_NAMESERVER_GID_FT         0x0171
   87 #define FC_GS_NAMESERVER_GID_PT         0x01a1
   88 #define FC_GS_NAMESERVER_RHBA           0x0200
   89 #define FC_GS_NAMESERVER_RPA            0x0211
   90 #define FC_GS_NAMESERVER_RPN_ID         0x0212
   91 #define FC_GS_NAMESERVER_RNN_ID         0x0213
   92 #define FC_GS_NAMESERVER_RCS_ID         0x0214
   93 #define FC_GS_NAMESERVER_RFT_ID         0x0217
   94 #define FC_GS_NAMESERVER_RFF_ID         0x021f
   95 #define FC_GS_NAMESERVER_RSNN_NN        0x0239
   96 #define FC_GS_NAMESERVER_RSPN_ID        0x0218
   97 
   98 #define FC_GS_REVISION          0x03
   99 
  100 #define FC_GS_IO_PARAMS         { .fc_ct.r_ctl = 0x02, \
  101                                 .fc_ct.type = FC_TYPE_GS, \
  102                                 .fc_ct.df_ctl = 0x00 }
  103 
  104 typedef struct fc_vft_header_s {
  105         uint32_t        :1,
  106                         vf_id:12,
  107                         priority:3,
  108                         e:1,
  109                         :1,
  110                         type:4,
  111                         ver:2,
  112                         r_ctl:8;
  113         uint32_t        :24,
  114                         hopct:8;
  115 } fc_vft_header_t;
  116 
  117 #if BYTE_ORDER == LITTLE_ENDIAN
  118 static inline uint32_t fc_be24toh(uint32_t x) { return (ocs_be32toh(x) >> 8); }
  119 #else
  120 static inline uint32_t fc_be24toh(uint32_t x) { }
  121 #endif
  122 static inline uint32_t fc_htobe24(uint32_t x) { return fc_be24toh(x); }
  123 
  124 #define FC_SOFI3        0x2e
  125 #define FC_SOFn3        0x36
  126 #define FC_EOFN         0x41
  127 #define FC_EOFT         0x42
  128 
  129 /**
  130  * @brief FC header in big-endian order
  131  */
  132 typedef struct fc_header_s {
  133         uint32_t        info:4,
  134                         r_ctl:4,
  135                         d_id:24;
  136         uint32_t        cs_ctl:8,
  137                         s_id:24;
  138         uint32_t        type:8,
  139                         f_ctl:24;
  140         uint32_t        seq_id:8,
  141                         df_ctl:8,
  142                         seq_cnt:16;
  143         uint32_t        ox_id:16,
  144                         rx_id:16;
  145         uint32_t        parameter;
  146 } fc_header_t;
  147 
  148 /**
  149  * @brief FC header in little-endian order
  150  */
  151 typedef struct fc_header_le_s {
  152 #if BYTE_ORDER == LITTLE_ENDIAN
  153         uint32_t        d_id:24,
  154                         info:4,
  155                         r_ctl:4;
  156         uint32_t        s_id:24,
  157                         cs_ctl:8;
  158         uint32_t        f_ctl:24,
  159                         type:8;
  160         uint32_t        seq_cnt:16,
  161                         df_ctl:8,
  162                         seq_id:8;
  163         uint32_t        rx_id:16,
  164                         ox_id:16;
  165         uint32_t        parameter;
  166 #else
  167 #error big endian version not defined
  168 #endif
  169 } fc_header_le_t;
  170 
  171 /**
  172  * @brief FC VM header in big-endian order
  173  */
  174 typedef struct fc_vm_header_s {
  175         uint32_t        dst_vmid;
  176         uint32_t        src_vmid;
  177         uint32_t        rsvd0;
  178         uint32_t        rsvd1;
  179 } fc_vm_header_t;
  180 
  181 #define FC_DFCTL_DEVICE_HDR_16_MASK     0x1
  182 #define FC_DFCTL_NETWORK_HDR_MASK       0x20    
  183 #define FC_DFCTL_ESP_HDR_MASK           0x40                            
  184 #define FC_DFCTL_NETWORK_HDR_SIZE       16      
  185 #define FC_DFCTL_ESP_HDR_SIZE           0 //FIXME                               
  186 
  187 #define FC_RCTL_FC4_DATA        0
  188 #define FC_RCTL_ELS             2
  189 #define FC_RCTL_BLS             8
  190 
  191 #define FC_RCTL_INFO_UNCAT      0
  192 #define FC_RCTL_INFO_SOL_DATA   1
  193 #define FC_RCTL_INFO_UNSOL_CTRL 2
  194 #define FC_RCTL_INFO_SOL_CTRL   3
  195 #define FC_RCTL_INFO_UNSOL_DATA 4
  196 #define FC_RCTL_INFO_DATA_DESC  5
  197 #define FC_RCTL_INFO_UNSOL_CMD  6
  198 #define FC_RCTL_INFO_CMD_STATUS 7
  199 
  200 #define FC_FCTL_EXCHANGE_RESPONDER      0x800000
  201 #define FC_FCTL_SEQUENCE_CONTEXT        0x400000
  202 #define FC_FCTL_FIRST_SEQUENCE          0x200000
  203 #define FC_FCTL_LAST_SEQUENCE           0x100000
  204 #define FC_FCTL_END_SEQUENCE            0x080000
  205 #define FC_FCTL_END_CONNECTION          0x040000
  206 #define FC_FCTL_PRIORITY_ENABLE         0x020000
  207 #define FC_FCTL_SEQUENCE_INITIATIVE     0x010000
  208 #define FC_FCTL_FILL_DATA_BYTES_MASK    0x000003
  209 
  210 /**
  211  * Common BLS definitions:
  212  */
  213 #define FC_INFO_NOP                     0x0
  214 #define FC_INFO_ABTS                    0x1
  215 #define FC_INFO_RMC                     0x2
  216 /* reserved                             0x3 */
  217 #define FC_INFO_BA_ACC                  0x4
  218 #define FC_INFO_BA_RJT                  0x5
  219 #define FC_INFO_PRMT                    0x6
  220 
  221 /* (FC-LS) LS_RJT Reason Codes */
  222 #define FC_REASON_INVALID_COMMAND_CODE          0x01
  223 #define FC_REASON_LOGICAL_ERROR                 0x03
  224 #define FC_REASON_LOGICAL_BUSY                  0x05
  225 #define FC_REASON_PROTOCOL_ERROR                0x07
  226 #define FC_REASON_UNABLE_TO_PERFORM             0x09
  227 #define FC_REASON_COMMAND_NOT_SUPPORTED         0x0b
  228 #define FC_REASON_COMMAND_IN_PROGRESS           0x0e
  229 #define FC_REASON_VENDOR_SPECIFIC               0xff
  230 
  231 /* (FC-LS) LS_RJT Reason Codes Explanations */
  232 #define FC_EXPL_NO_ADDITIONAL                   0x00
  233 #define FC_EXPL_SPARAM_OPTIONS                  0x01
  234 #define FC_EXPL_SPARAM_INITIATOR                0x03
  235 #define FC_EXPL_SPARAM_RECPIENT                 0x05
  236 #define FC_EXPL_SPARM_DATA_SIZE                 0x07
  237 #define FC_EXPL_SPARM_CONCURRENT                0x09
  238 #define FC_EXPL_SPARM_CREDIT                    0x0b
  239 #define FC_EXPL_INV_PORT_NAME                   0x0d
  240 #define FC_EXPL_INV_NODE_NAME                   0x0e
  241 #define FC_EXPL_INV_COMMON_SPARAMS              0x0f
  242 #define FC_EXPL_INV_ASSOC_HEADER                0x11
  243 #define FC_EXPL_ASSOC_HDR_REQUIRED              0x13
  244 #define FC_EXPL_INV_ORIGINATOR_S_ID             0x15
  245 #define FC_EXPL_INV_X_ID_COMBINATION            0x17
  246 #define FC_EXPL_COMMAND_IN_PROGRESS             0x19
  247 #define FC_EXPL_NPORT_LOGIN_REQUIRED            0x1e
  248 #define FC_EXPL_N_PORT_ID                       0x1f
  249 #define FC_EXPL_INSUFFICIENT_RESOURCES          0x29
  250 #define FC_EXPL_UNABLE_TO_SUPPLY_DATA           0x2a
  251 #define FC_EXPL_REQUEST_NOT_SUPPORTED           0x2c
  252 #define FC_EXPL_INV_PAYLOAD_LEN                 0x1d
  253 #define FC_EXPL_INV_PORT_NODE_NAME              0x44
  254 #define FC_EXPL_LOGIN_EXT_NOT_SUPPORTED         0x46
  255 #define FC_EXPL_AUTH_REQUIRED                   0x48
  256 #define FC_EXPL_SCAN_VALUE_NOT_ALLOWED          0x50
  257 #define FC_EXPL_SCAN_VALUE_NOT_SUPPORTED        0x51
  258 #define FC_EXPL_NO_RESOURCES_ASSIGNED           0x52
  259 #define FC_EXPL_MAC_ADDR_MODE_NOT_SUPPORTED     0x60
  260 #define FC_EXPL_MAC_ADDR_INCORRECTLY_FORMED     0x61
  261 #define FC_EXPL_VN2VN_PORT_NOT_IN_NEIGHBOR_SET  0x62
  262 
  263 #define FC_EXPL_INV_X_ID                        0x03    /* invalid OX_ID - RX_ID combination */
  264 #define FC_EXPL_SEQUENCE_ABORTED                0x05
  265 
  266 typedef struct fc_ba_acc_payload_s {
  267 #define FC_SEQ_ID_VALID                 0x80
  268 #define FC_SEQ_ID_INVALID               0x00
  269         uint32_t        seq_id_validity:8,
  270                         seq_id:8,
  271                         :16;
  272         uint32_t        ox_id:16,
  273                         rx_id:16;
  274         uint32_t        low_seq_cnt:16,
  275                         high_seq_cnt:16;
  276 } fc_ba_acc_payload_t;
  277 
  278 typedef struct fc_ba_rjt_payload_s {
  279         uint32_t        vendor_unique:8,
  280                         reason_explanation:8,
  281                         reason_code:8,
  282                         :8;
  283 } fc_ba_rjt_payload_t;
  284 
  285 typedef struct fc_els_gen_s {
  286         uint32_t        command_code: 8,
  287                         resv1: 24;
  288 } fc_els_gen_t;
  289 
  290 typedef struct fc_plogi_playload_s {
  291         uint32_t        command_code: 8,
  292                         resv1: 24;
  293         uint32_t        common_service_parameters[4];
  294         uint32_t        port_name_hi;
  295         uint32_t        port_name_lo;
  296         uint32_t        node_name_hi;
  297         uint32_t        node_name_lo;
  298         uint32_t        class1_service_parameters[4];
  299         uint32_t        class2_service_parameters[4];
  300         uint32_t        class3_service_parameters[4];
  301         uint32_t        class4_service_parameters[4];
  302         uint32_t        vendor_version_level[4];
  303 } fc_plogi_payload_t;
  304 
  305 typedef fc_plogi_payload_t fc_sparms_t;
  306 
  307 typedef struct fc_logo_payload_s {
  308         uint32_t        command_code: 8,
  309                         resv1:24;
  310         uint32_t        :8,
  311                         port_id:24;
  312         uint32_t        port_name_hi;
  313         uint32_t        port_name_lo;
  314 } fc_logo_payload_t;
  315 
  316 typedef struct fc_acc_payload_s {
  317         uint32_t        command_code: 8,
  318                         resv1:24;
  319 } fc_acc_payload_t;
  320 
  321 typedef struct fc_ls_rjt_payload_s {
  322         uint32_t        command_code:8,
  323                         resv1:24;
  324         uint32_t        resv2:8,
  325                         reason_code:8,
  326                         reason_code_exp:8,
  327                         vendor_unique:8;
  328 } fc_ls_rjt_payload_t;
  329 
  330 typedef struct fc_prli_payload_s {
  331         uint32_t        command_code:8,
  332                         page_length:8,
  333                         payload_length:16;
  334         uint32_t        type:8,
  335                         type_ext:8,
  336                         flags:16;
  337         uint32_t        originator_pa;
  338         uint32_t        responder_pa;
  339         uint32_t        :16,
  340                         service_params:16;
  341 } fc_prli_payload_t;
  342 
  343 typedef struct fc_prlo_payload_s {
  344         uint32_t        command_code:8,
  345                         page_length:8,
  346                         payload_length:16;
  347         uint32_t        type:8,
  348                         type_ext:8,
  349                         :16;
  350         uint32_t        :32;
  351         uint32_t        :32;
  352         uint32_t        :32;
  353 } fc_prlo_payload_t;
  354 
  355 typedef struct fc_prlo_acc_payload_s {
  356         uint32_t        command_code:8,
  357                         page_length:8,
  358                         payload_length:16;
  359         uint32_t        type:8,
  360                         type_ext:8,
  361                         :4,
  362                         response_code:4,
  363                         :8;
  364         uint32_t        :32;
  365         uint32_t        :32;
  366         uint32_t        :32;
  367 } fc_prlo_acc_payload_t;
  368 
  369 typedef struct fc_adisc_payload_s {
  370         uint32_t        command_code:8,
  371                         payload_length:24;
  372         uint32_t        :8,
  373                         hard_address:24;
  374         uint32_t        port_name_hi;
  375         uint32_t        port_name_lo;
  376         uint32_t        node_name_hi;
  377         uint32_t        node_name_lo;
  378         uint32_t        :8,
  379                         port_id:24;
  380 } fc_adisc_payload_t;
  381 
  382 /* PRLI flags */
  383 #define FC_PRLI_ORIGINATOR_PA_VALID     0x8000
  384 #define FC_PRLI_RESPONDER_PA_VALID      0x4000
  385 #define FC_PRLI_ESTABLISH_IMAGE_PAIR    0x2000
  386 #define FC_PRLI_SERVICE_PARAM_INVALID   0x0800
  387 #define FC_PRLI_REQUEST_EXECUTED        0x0100
  388 
  389 /* PRLI Service Parameters */
  390 #define FC_PRLI_REC_SUPPORT             0x0400
  391 #define FC_PRLI_TASK_RETRY_ID_REQ       0x0200
  392 #define FC_PRLI_RETRY                   0x0100
  393 #define FC_PRLI_CONFIRMED_COMPLETION    0x0080
  394 #define FC_PRLI_DATA_OVERLAY            0x0040
  395 #define FC_PRLI_INITIATOR_FUNCTION      0x0020
  396 #define FC_PRLI_TARGET_FUNCTION         0x0010
  397 #define FC_PRLI_READ_XRDY_DISABLED      0x0002
  398 #define FC_PRLI_WRITE_XRDY_DISABLED     0x0001
  399 
  400 /* PRLO Logout flags */
  401 #define FC_PRLO_REQUEST_EXECUTED        0x0001
  402 
  403 typedef struct fc_scr_payload_s {
  404         uint32_t        command_code:8,
  405                         :24;
  406         uint32_t        :24,
  407                         function:8;
  408 } fc_scr_payload_t;
  409 
  410 #define FC_SCR_REG_FABRIC               1
  411 #define FC_SCR_REG_NPORT                2
  412 #define FC_SCR_REG_FULL                 3
  413 
  414 typedef struct {
  415         uint32_t :2,
  416                 rscn_event_qualifier:4,
  417                 address_format:2,
  418                 port_id:24;
  419 } fc_rscn_affected_port_id_page_t;
  420 
  421 typedef struct fc_rscn_payload_s {
  422         uint32_t        command_code:8,
  423                         page_length:8,
  424                         payload_length:16;
  425         fc_rscn_affected_port_id_page_t port_list[1];
  426 } fc_rscn_payload_t;
  427 
  428 typedef struct fcct_iu_header_s {
  429 #if BYTE_ORDER == LITTLE_ENDIAN
  430         uint32_t        revision:8,
  431                         in_id:24;
  432         uint32_t        gs_type:8,
  433                         gs_subtype:8,
  434                         options:8,
  435                         resv1:8;
  436         uint32_t        cmd_rsp_code:16,
  437                         max_residual_size:16;
  438         uint32_t        fragment_id:8,
  439                         reason_code:8,
  440                         reason_code_explanation:8,
  441                         vendor_specific:8;
  442 #else
  443 #error big endian version not defined
  444 #endif
  445 } fcct_iu_header_t;
  446 
  447 #define FCCT_REJECT_INVALID_COMMAND_CODE        1
  448 #define FCCT_REJECT_INVALID_VERSION_LEVEL       2
  449 #define FCCT_LOGICAL_ERROR                      3
  450 #define FCCT_INVALID_CT_IU_SIZE                 4
  451 #define FCCT_LOGICAL_BUSY                       5
  452 #define FCCT_PROTOCOL_ERROR                     7
  453 #define FCCT_UNABLE_TO_PERFORM                  9
  454 #define FCCT_COMMAND_NOT_SUPPORTED              0x0b
  455 #define FCCT_FABRIC_PORT_NAME_NOT_REGISTERED    0x0c
  456 #define FCCT_SERVER_NOT_AVAILABLE               0x0d
  457 #define FCCT_SESSION_COULD_NOT_BE_ESTABLISHED   0x0e
  458 #define FCCT_VENDOR_SPECIFIC_ERROR              0xff
  459 
  460 #define FCCT_NO_ADDITIONAL_EXPLANATION          0
  461 #define FCCT_AUTHORIZATION_EXCEPTION            0xf0
  462 #define FCCT_AUTHENTICATION_EXCEPTION           0xf1
  463 #define FCCT_DATA_BASE_FULL                     0xf2
  464 #define FCCT_DATA_BASE_EMPTY                    0xf3
  465 #define FCCT_PROCESSING_REQUEST                 0xf4
  466 #define FCCT_UNABLE_TO_VERIFY_CONNECTION        0xf5
  467 #define FCCT_DEVICES_NOT_IN_COMMON_ZONE         0xf6
  468 
  469 typedef struct {
  470         fcct_iu_header_t hdr;
  471 #if BYTE_ORDER == LITTLE_ENDIAN
  472         uint32_t        port_id;
  473         uint32_t        fc4_types;
  474 #else
  475 #error big endian version not defined
  476 #endif
  477 } fcgs_rft_id_t;
  478 
  479 typedef struct {
  480         fcct_iu_header_t hdr;
  481 #if BYTE_ORDER == LITTLE_ENDIAN
  482         uint32_t        port_id;
  483         uint32_t        :16,
  484                         fc4_features:8,
  485                         type_code:8;
  486 #else
  487 #error big endian version not defined
  488 #endif
  489 } fcgs_rff_id_t;
  490 
  491 #pragma pack(1)
  492 typedef struct {
  493         fcct_iu_header_t hdr;
  494 #if BYTE_ORDER == LITTLE_ENDIAN
  495         uint32_t        port_id;
  496         uint64_t        port_name;
  497 #else
  498 #error big endian version not defined
  499 #endif
  500 } fcgs_rpn_id_t;
  501 #pragma pack()
  502 
  503 #pragma pack(1)
  504 typedef struct {
  505         fcct_iu_header_t hdr;
  506 #if BYTE_ORDER == LITTLE_ENDIAN
  507         uint32_t        port_id;
  508         uint64_t        node_name;
  509 #else
  510 #error big endian version not defined
  511 #endif
  512 } fcgs_rnn_id_t;
  513 #pragma pack()
  514 
  515 #define FCCT_CLASS_OF_SERVICE_F 0x1
  516 #define FCCT_CLASS_OF_SERVICE_2 0x4
  517 #define FCCT_CLASS_OF_SERVICE_3 0x8
  518 #pragma pack(1)
  519 typedef struct {
  520         fcct_iu_header_t hdr;
  521 #if BYTE_ORDER == LITTLE_ENDIAN
  522         uint32_t        port_id;
  523         uint32_t        class_of_srvc;
  524 #else
  525 #error big endian version not defined
  526 #endif
  527 } fcgs_rcs_id_t;
  528 #pragma pack()
  529 
  530 #pragma pack(1)
  531 typedef struct {
  532         fcct_iu_header_t hdr;
  533 #if BYTE_ORDER == LITTLE_ENDIAN
  534         uint64_t        node_name;
  535         uint8_t         name_len;
  536         char            sym_node_name[1];
  537 /*TODO: need name length and symbolic name */
  538 #else
  539 #error big endian version not defined
  540 #endif
  541 } fcgs_rsnn_nn_t;
  542 #pragma pack()
  543 
  544 #define FCCT_HDR_CMDRSP_ACCEPT  0x8002
  545 #define FCCT_HDR_CMDRSP_REJECT  0x8001
  546 
  547 static inline void fcct_build_req_header(fcct_iu_header_t *hdr, uint16_t cmd, uint16_t max_size)
  548 {
  549         /* use old rev (1) to accommodate older switches */
  550         hdr->revision = 1;
  551         hdr->in_id = 0;
  552         hdr->gs_type = FC_GS_TYPE_DIRECTORY_SERVICE;
  553         hdr->gs_subtype = FC_GS_SUBTYPE_NAME_SERVER;
  554         hdr->options = 0;
  555         hdr->resv1 = 0;
  556         hdr->cmd_rsp_code = ocs_htobe16(cmd);
  557         hdr->max_residual_size = ocs_htobe16(max_size/(sizeof(uint32_t))); /* words */
  558         hdr->fragment_id = 0;
  559         hdr->reason_code = 0;
  560         hdr->reason_code_explanation = 0;
  561         hdr->vendor_specific = 0;
  562 }
  563 
  564 typedef struct fcct_rftid_req_s {
  565         fcct_iu_header_t        hdr;
  566         uint32_t                port_id;
  567         uint32_t                fc4_types[8];
  568 } fcct_rftid_req_t;
  569 
  570 #define FC4_FEATURE_TARGET      (1U << 0)
  571 #define FC4_FEATURE_INITIATOR   (1U << 1)
  572 
  573 typedef struct fcct_rffid_req_s {
  574         fcct_iu_header_t        hdr;
  575         uint32_t                port_id;
  576         uint32_t                :16,
  577                                 fc4_feature_bits:8,
  578                                 type:8;
  579 } fcct_rffid_req_t;
  580 
  581 typedef struct fcct_gnnid_req_s {
  582         fcct_iu_header_t        hdr;
  583         uint32_t                :8,
  584                                 port_id:24;
  585 } fcct_gnnid_req_t;
  586 
  587 typedef struct fcct_gpnid_req_s {
  588         fcct_iu_header_t        hdr;
  589         uint32_t                :8,
  590                                 port_id:24;
  591 } fcct_gpnid_req_t;
  592 
  593 typedef struct fcct_gffid_req_s {
  594         fcct_iu_header_t        hdr;
  595         uint32_t                :8,
  596                                 port_id:24;
  597 } fcct_gffid_req_t;
  598 
  599 typedef struct fcct_gidft_req_s {
  600         fcct_iu_header_t        hdr;
  601         uint32_t                :8,
  602                                 domain_id_scope:8,
  603                                 area_id_scope:8,
  604                                 type:8;
  605 } fcct_gidft_req_t;
  606 
  607 typedef struct fcct_gidpt_req_s {
  608         fcct_iu_header_t        hdr;
  609         uint32_t                port_type:8,
  610                                 domain_id_scope:8,
  611                                 area_id_scope:8,
  612                                 flags:8;
  613 } fcct_gidpt_req_t;
  614 
  615 typedef struct fcct_gnnid_acc_s {
  616         fcct_iu_header_t        hdr;
  617         uint64_t                node_name;
  618 } fcct_gnnid_acc_t;
  619 
  620 typedef struct fcct_gpnid_acc_s {
  621         fcct_iu_header_t        hdr;
  622         uint64_t                port_name;
  623 } fcct_gpnid_acc_t;
  624 
  625 typedef struct fcct_gffid_acc_s {
  626         fcct_iu_header_t        hdr;
  627         uint8_t                 fc4_feature_bits;
  628 } fcct_gffid_acc_t;
  629 
  630 typedef struct fcct_gidft_acc_s {
  631         fcct_iu_header_t        hdr;
  632         struct {
  633                 uint32_t        ctl:8,
  634                                 port_id:24;
  635         } port_list[1];
  636 } fcct_gidft_acc_t;
  637 
  638 typedef struct fcct_gidpt_acc_s {
  639         fcct_iu_header_t        hdr;
  640         struct {
  641                 uint32_t        ctl:8,
  642                                 port_id:24;
  643         } port_list[1];
  644 } fcct_gidpt_acc_t;
  645 
  646 #define FCCT_GID_PT_LAST_ID     0x80
  647 #define FCCT_GIDPT_ID_MASK      0x00ffffff
  648 
  649 typedef struct fcp_cmnd_iu_s {
  650         uint8_t         fcp_lun[8];
  651         uint8_t         command_reference_number;
  652         uint8_t         task_attribute:3,
  653                         command_priority:4,
  654                         :1;
  655         uint8_t         task_management_flags;
  656         uint8_t         wrdata:1,
  657                         rddata:1,
  658                         additional_fcp_cdb_length:6;
  659         uint8_t         fcp_cdb[16];
  660         uint8_t         fcp_cdb_and_dl[20];     /* < May contain up to 16 bytes of CDB, followed by fcp_dl */
  661 } fcp_cmnd_iu_t;
  662 
  663 #define FCP_LUN_ADDRESS_METHOD_SHIFT    6
  664 #define FCP_LUN_ADDRESS_METHOD_MASK     0xc0
  665 #define FCP_LUN_ADDR_METHOD_PERIPHERAL  0x0
  666 #define FCP_LUN_ADDR_METHOD_FLAT        0x1
  667 #define FCP_LUN_ADDR_METHOD_LOGICAL     0x2
  668 #define FCP_LUN_ADDR_METHOD_EXTENDED    0x3
  669 
  670 #define FCP_LUN_ADDR_SIMPLE_MAX         0xff
  671 #define FCP_LUN_ADDR_FLAT_MAX           0x3fff
  672 
  673 #define FCP_TASK_ATTR_SIMPLE            0x0
  674 #define FCP_TASK_ATTR_HEAD_OF_QUEUE     0x1
  675 #define FCP_TASK_ATTR_ORDERED           0x2
  676 #define FCP_TASK_ATTR_ACA               0x4
  677 #define FCP_TASK_ATTR_UNTAGGED          0x5
  678 
  679 #define FCP_QUERY_TASK_SET              BIT(0)
  680 #define FCP_ABORT_TASK_SET              BIT(1)
  681 #define FCP_CLEAR_TASK_SET              BIT(2)
  682 #define FCP_QUERY_ASYNCHRONOUS_EVENT    BIT(3)
  683 #define FCP_LOGICAL_UNIT_RESET          BIT(4)
  684 #define FCP_TARGET_RESET                BIT(5)
  685 #define FCP_CLEAR_ACA                   BIT(6)
  686 
  687 /* SPC-4 says that the maximum length of sense data is 252 bytes */
  688 #define FCP_MAX_SENSE_LEN               252
  689 #define FCP_MAX_RSP_LEN                   8
  690 /*
  691  * FCP_RSP buffer will either have sense or response data, but not both
  692  * so pick the larger.
  693  */
  694 #define FCP_MAX_RSP_INFO_LEN            FCP_MAX_SENSE_LEN
  695 
  696 typedef struct fcp_rsp_iu_s {
  697         uint8_t         rsvd[8];
  698         uint8_t         status_qualifier[2];
  699         uint8_t         flags;
  700         uint8_t         scsi_status;
  701         uint8_t         fcp_resid[4];
  702         uint8_t         fcp_sns_len[4];
  703         uint8_t         fcp_rsp_len[4];
  704         uint8_t         data[FCP_MAX_RSP_INFO_LEN];
  705 } fcp_rsp_iu_t;
  706 
  707 /** Flag field defines: */
  708 #define FCP_RSP_LEN_VALID               BIT(0)
  709 #define FCP_SNS_LEN_VALID               BIT(1)
  710 #define FCP_RESID_OVER                  BIT(2)
  711 #define FCP_RESID_UNDER                 BIT(3)
  712 #define FCP_CONF_REQ                    BIT(4)
  713 #define FCP_BIDI_READ_RESID_OVER        BIT(5)
  714 #define FCP_BIDI_READ_RESID_UNDER       BIT(6)
  715 #define FCP_BIDI_RSP                    BIT(7)
  716 
  717 /** Status values: */
  718 #define FCP_TMF_COMPLETE                0x00
  719 #define FCP_DATA_LENGTH_MISMATCH        0x01
  720 #define FCP_INVALID_FIELD               0x02
  721 #define FCP_DATA_RO_MISMATCH            0x03
  722 #define FCP_TMF_REJECTED                0x04
  723 #define FCP_TMF_FAILED                  0x05
  724 #define FCP_TMF_SUCCEEDED               0x08
  725 #define FCP_TMF_INCORRECT_LUN           0x09
  726 
  727 /** FCP-4 Table 28, TMF response information: */
  728 typedef struct fc_rsp_info_s {
  729         uint8_t addl_rsp_info[3];
  730         uint8_t rsp_code;
  731         uint32_t :32;
  732 } fcp_rsp_info_t;
  733 
  734 typedef struct fcp_xfer_rdy_iu_s {
  735         uint8_t         fcp_data_ro[4];
  736         uint8_t         fcp_burst_len[4];
  737         uint8_t         rsvd[4];
  738 } fcp_xfer_rdy_iu_t;
  739 
  740 #define MAX_ACC_REJECT_PAYLOAD (sizeof(fc_ls_rjt_payload_t) > sizeof(fc_acc_payload_t) ? sizeof(fc_ls_rjt_payload_t) : sizeof(fc_acc_payload_t))
  741 
  742 #endif /* !_OCS_FCP_H */

Cache object: 4e965ffae8348174cd10ffd858f9eede


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


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