Print this page
MFV: illumos-omnios@aea0472ecb9ee91fa70556d6f6a941c10c989f1d
Add support for Emulex Corporation Lancer Gen6: LPe32000 FC Host Adapter
Author: Andy Fiddaman <omnios@citrus-it.co.uk>
NEX-8705 Drivers for ATTO Celerity FC-162E Gen 5 and Celerity FC-162P Gen 6 16GB FC cards support
Reviewed by: Dan Fields <dan.fields@nexenta.com>
Reviewed by: Rick McNeal <rick.mcneal@nexenta.com>
NEX-1878 update emlxs from source provided by Emulex

Split Close
Expand all
Collapse all
          --- old/usr/src/uts/common/io/fibre-channel/fca/emlxs/emlxs_solaris.c
          +++ new/usr/src/uts/common/io/fibre-channel/fca/emlxs/emlxs_solaris.c
↓ open down ↓ 239 lines elided ↑ open up ↑
 240  240          DDI_STRICTORDER_ACC,    /* devacc_attr_dataorder        */
 241  241          DDI_DEFAULT_ACC         /* devacc_attr_access           */
 242  242  };
 243  243  
 244  244  /*
 245  245   * Fill in the FC Transport structure,
 246  246   * as defined in the Fibre Channel Transport Programmming Guide.
 247  247   */
 248  248  #if (EMLXS_MODREV == EMLXS_MODREV5)
 249  249          static fc_fca_tran_t emlxs_fca_tran = {
 250      -        FCTL_FCA_MODREV_5,              /* fca_version, with SUN NPIV support */
      250 +        FCTL_FCA_MODREV_5,              /* fca_version, with SUN NPIV support */
 251  251          MAX_VPORTS,                     /* fca numerb of ports */
 252  252          sizeof (emlxs_buf_t),           /* fca pkt size */
 253  253          2048,                           /* fca cmd max */
 254  254          &emlxs_dma_lim,                 /* fca dma limits */
 255  255          0,                              /* fca iblock, to be filled in later */
 256  256          &emlxs_dma_attr,                /* fca dma attributes */
 257  257          &emlxs_dma_attr_1sg,            /* fca dma fcp cmd attributes */
 258  258          &emlxs_dma_attr_1sg,            /* fca dma fcp rsp attributes */
 259  259          &emlxs_dma_attr_ro,             /* fca dma fcp data attributes */
 260  260          &emlxs_dma_attr_1sg,            /* fca dma fcip cmd attributes */
 261  261          &emlxs_dma_attr_fcip_rsp,       /* fca dma fcip rsp attributes */
 262  262          &emlxs_dma_attr_1sg,            /* fca dma fcsm cmd attributes */
 263  263          &emlxs_dma_attr,                /* fca dma fcsm rsp attributes */
 264      -        &emlxs_data_acc_attr,           /* fca access atributes */
      264 +        &emlxs_data_acc_attr,           /* fca access atributes */
 265  265          0,                              /* fca_num_npivports */
 266  266          {0, 0, 0, 0, 0, 0, 0, 0},       /* Physical port WWPN */
 267  267          emlxs_fca_bind_port,
 268  268          emlxs_fca_unbind_port,
 269  269          emlxs_fca_pkt_init,
 270  270          emlxs_fca_pkt_uninit,
 271  271          emlxs_fca_transport,
 272  272          emlxs_fca_get_cap,
 273  273          emlxs_fca_set_cap,
 274  274          emlxs_fca_get_map,
↓ open down ↓ 211 lines elided ↑ open up ↑
 486  486          NULL    /* end of driver linkage */
 487  487  };
 488  488  
 489  489  
 490  490  /* We only need to add entries for non-default return codes. */
 491  491  /* Entries do not need to be in order. */
 492  492  /* Default:     FC_PKT_TRAN_ERROR,      FC_REASON_ABORTED, */
 493  493  /*              FC_EXPLN_NONE,          FC_ACTION_RETRYABLE */
 494  494  
 495  495  emlxs_xlat_err_t emlxs_iostat_tbl[] = {
 496      -/*      {f/w code, pkt_state, pkt_reason,       */
 497      -/*              pkt_expln, pkt_action}          */
      496 +/*      {f/w code, pkt_state, pkt_reason,       */
      497 +/*              pkt_expln, pkt_action}          */
 498  498  
 499  499          /* 0x00 - Do not remove */
 500  500          {IOSTAT_SUCCESS, FC_PKT_SUCCESS, FC_REASON_NONE,
 501  501                  FC_EXPLN_NONE, FC_ACTION_RETRYABLE},
 502  502  
 503  503          /* 0x01 - Do not remove */
 504  504          {IOSTAT_FCP_RSP_ERROR, FC_PKT_SUCCESS, FC_REASON_NONE,
 505  505                  FC_EXPLN_NONE, FC_ACTION_RETRYABLE},
 506  506  
 507  507          /* 0x02 */
↓ open down ↓ 1132 lines elided ↑ open up ↑
1640 1640                          port_info->pi_port_state |= FC_STATE_8GBIT_SPEED;
1641 1641                          break;
1642 1642                  case LA_10GHZ_LINK:
1643 1643                          (void) strlcpy(linkspeed, "10Gb", sizeof (linkspeed));
1644 1644                          port_info->pi_port_state |= FC_STATE_10GBIT_SPEED;
1645 1645                          break;
1646 1646                  case LA_16GHZ_LINK:
1647 1647                          (void) strlcpy(linkspeed, "16Gb", sizeof (linkspeed));
1648 1648                          port_info->pi_port_state |= FC_STATE_16GBIT_SPEED;
1649 1649                          break;
     1650 +                case LA_32GHZ_LINK:
     1651 +                        (void) strlcpy(linkspeed, "32Gb", sizeof (linkspeed));
     1652 +                        port_info->pi_port_state |= FC_STATE_32GBIT_SPEED;
     1653 +                        break;
1650 1654                  default:
1651 1655                          (void) snprintf(linkspeed, sizeof (linkspeed),
1652 1656                              "unknown(0x%x)", hba->linkspeed);
1653 1657                          break;
1654 1658                  }
1655 1659  
1656 1660                  if (hba->sli_mode <= EMLXS_HBA_SLI3_MODE) {
1657 1661                          /* Adjusting port context for link up messages */
1658 1662                          vport = port;
1659 1663                          port = &PPORT;
↓ open down ↓ 97 lines elided ↑ open up ↑
1757 1761              hba->wwpn.IEEE[1], hba->wwpn.IEEE[2], hba->wwpn.IEEE[3],
1758 1762              hba->wwpn.IEEE[4], hba->wwpn.IEEE[5]);
1759 1763  
1760 1764          port_info->pi_rnid_params.params.unit_type  = RNID_HBA;
1761 1765          port_info->pi_rnid_params.params.port_id    = port->did;
1762 1766          port_info->pi_rnid_params.params.ip_version = RNID_IPV4;
1763 1767  
1764 1768          /* Initialize the port attributes */
1765 1769          bzero(&port_info->pi_attrs, sizeof (port_info->pi_attrs));
1766 1770  
1767      -        (void) strncpy(port_info->pi_attrs.manufacturer, "Emulex",
     1771 +        (void) strncpy(port_info->pi_attrs.manufacturer,
     1772 +            hba->model_info.manufacturer,
1768 1773              (sizeof (port_info->pi_attrs.manufacturer)-1));
1769 1774  
1770 1775          port_info->pi_rnid_params.status = FC_SUCCESS;
1771 1776  
1772 1777          (void) strncpy(port_info->pi_attrs.serial_number, vpd->serial_num,
1773 1778              (sizeof (port_info->pi_attrs.serial_number)-1));
1774 1779  
1775 1780          (void) snprintf(port_info->pi_attrs.firmware_version,
1776 1781              (sizeof (port_info->pi_attrs.firmware_version)-1), "%s (%s)",
1777 1782              vpd->fw_version, vpd->fw_label);
↓ open down ↓ 2540 lines elided ↑ open up ↑
4318 4323                                  break;
4319 4324                          case LA_8GHZ_LINK:
4320 4325                                  *link_state |= FC_STATE_8GBIT_SPEED;
4321 4326                                  break;
4322 4327                          case LA_10GHZ_LINK:
4323 4328                                  *link_state |= FC_STATE_10GBIT_SPEED;
4324 4329                                  break;
4325 4330                          case LA_16GHZ_LINK:
4326 4331                                  *link_state |= FC_STATE_16GBIT_SPEED;
4327 4332                                  break;
     4333 +                        case LA_32GHZ_LINK:
     4334 +                                *link_state |= FC_STATE_32GBIT_SPEED;
     4335 +                                break;
4328 4336                          case LA_1GHZ_LINK:
4329 4337                          default:
4330 4338                                  *link_state |= FC_STATE_1GBIT_SPEED;
4331 4339                                  break;
4332 4340                          }
4333 4341                  } else {
4334 4342                          *link_state = FC_STATE_OFFLINE;
4335 4343                  }
4336 4344  
4337 4345                  break;
↓ open down ↓ 4585 lines elided ↑ open up ↑
8923 8931  emlxs_send_ip(emlxs_port_t *port, emlxs_buf_t *sbp)
8924 8932  {
8925 8933          emlxs_hba_t     *hba = HBA;
8926 8934          fc_packet_t     *pkt;
8927 8935          IOCBQ           *iocbq;
8928 8936          IOCB            *iocb;
8929 8937          CHANNEL         *cp;
8930 8938          uint32_t        i;
8931 8939          NODELIST        *ndlp;
8932 8940          uint32_t        did;
8933      -        int32_t         rval;
     8941 +        int32_t         rval;
8934 8942  
8935 8943          pkt = PRIV2PKT(sbp);
8936 8944          cp = &hba->chan[hba->channel_ip];
8937 8945          did = LE_SWAP24_LO(pkt->pkt_cmd_fhdr.d_id);
8938 8946  
8939 8947          /* Check if node exists */
8940 8948          /* Broadcast did is always a success */
8941 8949          ndlp = emlxs_node_find_did(port, did, 1);
8942 8950  
8943 8951          if (!ndlp || !ndlp->nlp_active) {
↓ open down ↓ 80 lines elided ↑ open up ↑
9024 9032          IOCBQ           *iocbq;
9025 9033          CHANNEL         *cp;
9026 9034          SERV_PARM       *sp;
9027 9035          uint32_t        cmd;
9028 9036          int             i;
9029 9037          ELS_PKT         *els_pkt;
9030 9038          NODELIST        *ndlp;
9031 9039          uint32_t        did;
9032 9040          char            fcsp_msg[32];
9033 9041          int             rc;
9034      -        int32_t         rval;
     9042 +        int32_t         rval;
9035 9043          emlxs_config_t  *cfg = &CFG;
9036 9044  
9037 9045          fcsp_msg[0] = 0;
9038 9046          pkt = PRIV2PKT(sbp);
9039 9047          els_pkt = (ELS_PKT *)pkt->pkt_cmd;
9040 9048          did = LE_SWAP24_LO(pkt->pkt_cmd_fhdr.d_id);
9041 9049  
9042 9050          iocbq = &sbp->iocbq;
9043 9051  
9044 9052  #if (EMLXS_MODREVX == EMLXS_MODREV2X)
↓ open down ↓ 893 lines elided ↑ open up ↑
9938 9946  static int32_t
9939 9947  emlxs_send_ct(emlxs_port_t *port, emlxs_buf_t *sbp)
9940 9948  {
9941 9949          emlxs_hba_t     *hba = HBA;
9942 9950          fc_packet_t     *pkt;
9943 9951          IOCBQ           *iocbq;
9944 9952          IOCB            *iocb;
9945 9953          NODELIST        *ndlp;
9946 9954          uint32_t        did;
9947 9955          CHANNEL         *cp;
9948      -        int32_t         rval;
     9956 +        int32_t         rval;
9949 9957  
9950 9958          pkt = PRIV2PKT(sbp);
9951 9959          did = LE_SWAP24_LO(pkt->pkt_cmd_fhdr.d_id);
9952 9960  
9953 9961          iocbq = &sbp->iocbq;
9954 9962          iocb = &iocbq->iocb;
9955 9963  
9956 9964          ndlp = emlxs_node_find_did(port, did, 1);
9957 9965  
9958 9966          if (!ndlp || !ndlp->nlp_active) {
↓ open down ↓ 91 lines elided ↑ open up ↑
10050 10058  static int32_t
10051 10059  emlxs_send_ct_rsp(emlxs_port_t *port, emlxs_buf_t *sbp)
10052 10060  {
10053 10061          emlxs_hba_t     *hba = HBA;
10054 10062          fc_packet_t     *pkt;
10055 10063          CHANNEL         *cp;
10056 10064          IOCBQ           *iocbq;
10057 10065          IOCB            *iocb;
10058 10066          uint32_t        *cmd;
10059 10067          SLI_CT_REQUEST  *CtCmd;
10060      -        int32_t         rval;
     10068 +        int32_t         rval;
10061 10069  
10062 10070          pkt = PRIV2PKT(sbp);
10063 10071          CtCmd = (SLI_CT_REQUEST *)pkt->pkt_cmd;
10064 10072          cmd = (uint32_t *)pkt->pkt_cmd;
10065 10073  
10066 10074          iocbq = &sbp->iocbq;
10067 10075          iocb = &iocbq->iocb;
10068 10076  
10069 10077  #if (EMLXS_MODREVX == EMLXS_MODREV2X)
10070 10078          emlxs_swap_ct_pkt(sbp);
↓ open down ↓ 2341 lines elided ↑ open up ↑
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX