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


1630                 case LA_2GHZ_LINK:
1631                         (void) strlcpy(linkspeed, "2Gb", sizeof (linkspeed));
1632                         port_info->pi_port_state |= FC_STATE_2GBIT_SPEED;
1633                         break;
1634                 case LA_4GHZ_LINK:
1635                         (void) strlcpy(linkspeed, "4Gb", sizeof (linkspeed));
1636                         port_info->pi_port_state |= FC_STATE_4GBIT_SPEED;
1637                         break;
1638                 case LA_8GHZ_LINK:
1639                         (void) strlcpy(linkspeed, "8Gb", sizeof (linkspeed));
1640                         port_info->pi_port_state |= FC_STATE_8GBIT_SPEED;
1641                         break;
1642                 case LA_10GHZ_LINK:
1643                         (void) strlcpy(linkspeed, "10Gb", sizeof (linkspeed));
1644                         port_info->pi_port_state |= FC_STATE_10GBIT_SPEED;
1645                         break;
1646                 case LA_16GHZ_LINK:
1647                         (void) strlcpy(linkspeed, "16Gb", sizeof (linkspeed));
1648                         port_info->pi_port_state |= FC_STATE_16GBIT_SPEED;
1649                         break;




1650                 default:
1651                         (void) snprintf(linkspeed, sizeof (linkspeed),
1652                             "unknown(0x%x)", hba->linkspeed);
1653                         break;
1654                 }
1655 
1656                 if (hba->sli_mode <= EMLXS_HBA_SLI3_MODE) {
1657                         /* Adjusting port context for link up messages */
1658                         vport = port;
1659                         port = &PPORT;
1660                         if (vport->vpi == 0) {
1661                                 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_link_up_msg,
1662                                     "%s%s, initiator",
1663                                     linkspeed, topology);
1664                         } else if (!(hba->flag & FC_NPIV_LINKUP)) {
1665                                 hba->flag |= FC_NPIV_LINKUP;
1666                                 EMLXS_MSGF(EMLXS_CONTEXT,
1667                                     &emlxs_npiv_link_up_msg,
1668                                     "%s%s, initiator", linkspeed, topology);
1669                         }


1747         port_info->pi_s_id.priv_lilp_posit = 0;
1748         port_info->pi_hard_addr.hard_addr = cfg[CFG_ASSIGN_ALPA].current;
1749 
1750         /* Initialize the RNID parameters */
1751         bzero(&port_info->pi_rnid_params, sizeof (port_info->pi_rnid_params));
1752 
1753         (void) snprintf((char *)port_info->pi_rnid_params.params.global_id,
1754             (sizeof (port_info->pi_rnid_params.params.global_id)-1),
1755             "%01x%01x%02x%02x%02x%02x%02x%02x%02x", hba->wwpn.nameType,
1756             hba->wwpn.IEEEextMsn, hba->wwpn.IEEEextLsb, hba->wwpn.IEEE[0],
1757             hba->wwpn.IEEE[1], hba->wwpn.IEEE[2], hba->wwpn.IEEE[3],
1758             hba->wwpn.IEEE[4], hba->wwpn.IEEE[5]);
1759 
1760         port_info->pi_rnid_params.params.unit_type  = RNID_HBA;
1761         port_info->pi_rnid_params.params.port_id    = port->did;
1762         port_info->pi_rnid_params.params.ip_version = RNID_IPV4;
1763 
1764         /* Initialize the port attributes */
1765         bzero(&port_info->pi_attrs, sizeof (port_info->pi_attrs));
1766 
1767         (void) strncpy(port_info->pi_attrs.manufacturer, "Emulex",

1768             (sizeof (port_info->pi_attrs.manufacturer)-1));
1769 
1770         port_info->pi_rnid_params.status = FC_SUCCESS;
1771 
1772         (void) strncpy(port_info->pi_attrs.serial_number, vpd->serial_num,
1773             (sizeof (port_info->pi_attrs.serial_number)-1));
1774 
1775         (void) snprintf(port_info->pi_attrs.firmware_version,
1776             (sizeof (port_info->pi_attrs.firmware_version)-1), "%s (%s)",
1777             vpd->fw_version, vpd->fw_label);
1778 
1779 #ifdef EMLXS_I386
1780         (void) snprintf(port_info->pi_attrs.option_rom_version,
1781             (sizeof (port_info->pi_attrs.option_rom_version)-1),
1782             "Boot:%s", vpd->boot_version);
1783 #else   /* EMLXS_SPARC */
1784         (void) snprintf(port_info->pi_attrs.option_rom_version,
1785             (sizeof (port_info->pi_attrs.option_rom_version)-1),
1786             "Boot:%s Fcode:%s", vpd->boot_version, vpd->fcode_version);
1787 #endif  /* EMLXS_I386 */


4308                                 *link_state = FC_STATE_ONLINE;
4309                         }
4310 
4311                         /* Set the link speed */
4312                         switch (hba->linkspeed) {
4313                         case LA_2GHZ_LINK:
4314                                 *link_state |= FC_STATE_2GBIT_SPEED;
4315                                 break;
4316                         case LA_4GHZ_LINK:
4317                                 *link_state |= FC_STATE_4GBIT_SPEED;
4318                                 break;
4319                         case LA_8GHZ_LINK:
4320                                 *link_state |= FC_STATE_8GBIT_SPEED;
4321                                 break;
4322                         case LA_10GHZ_LINK:
4323                                 *link_state |= FC_STATE_10GBIT_SPEED;
4324                                 break;
4325                         case LA_16GHZ_LINK:
4326                                 *link_state |= FC_STATE_16GBIT_SPEED;
4327                                 break;



4328                         case LA_1GHZ_LINK:
4329                         default:
4330                                 *link_state |= FC_STATE_1GBIT_SPEED;
4331                                 break;
4332                         }
4333                 } else {
4334                         *link_state = FC_STATE_OFFLINE;
4335                 }
4336 
4337                 break;
4338         }
4339 
4340 
4341         case FC_PORT_ERR_STATS:
4342         case FC_PORT_RLS:
4343         {
4344                 MAILBOXQ        *mbq;
4345                 MAILBOX         *mb;
4346                 fc_rls_acc_t    *bp;
4347 




1630                 case LA_2GHZ_LINK:
1631                         (void) strlcpy(linkspeed, "2Gb", sizeof (linkspeed));
1632                         port_info->pi_port_state |= FC_STATE_2GBIT_SPEED;
1633                         break;
1634                 case LA_4GHZ_LINK:
1635                         (void) strlcpy(linkspeed, "4Gb", sizeof (linkspeed));
1636                         port_info->pi_port_state |= FC_STATE_4GBIT_SPEED;
1637                         break;
1638                 case LA_8GHZ_LINK:
1639                         (void) strlcpy(linkspeed, "8Gb", sizeof (linkspeed));
1640                         port_info->pi_port_state |= FC_STATE_8GBIT_SPEED;
1641                         break;
1642                 case LA_10GHZ_LINK:
1643                         (void) strlcpy(linkspeed, "10Gb", sizeof (linkspeed));
1644                         port_info->pi_port_state |= FC_STATE_10GBIT_SPEED;
1645                         break;
1646                 case LA_16GHZ_LINK:
1647                         (void) strlcpy(linkspeed, "16Gb", sizeof (linkspeed));
1648                         port_info->pi_port_state |= FC_STATE_16GBIT_SPEED;
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;
1654                 default:
1655                         (void) snprintf(linkspeed, sizeof (linkspeed),
1656                             "unknown(0x%x)", hba->linkspeed);
1657                         break;
1658                 }
1659 
1660                 if (hba->sli_mode <= EMLXS_HBA_SLI3_MODE) {
1661                         /* Adjusting port context for link up messages */
1662                         vport = port;
1663                         port = &PPORT;
1664                         if (vport->vpi == 0) {
1665                                 EMLXS_MSGF(EMLXS_CONTEXT, &emlxs_link_up_msg,
1666                                     "%s%s, initiator",
1667                                     linkspeed, topology);
1668                         } else if (!(hba->flag & FC_NPIV_LINKUP)) {
1669                                 hba->flag |= FC_NPIV_LINKUP;
1670                                 EMLXS_MSGF(EMLXS_CONTEXT,
1671                                     &emlxs_npiv_link_up_msg,
1672                                     "%s%s, initiator", linkspeed, topology);
1673                         }


1751         port_info->pi_s_id.priv_lilp_posit = 0;
1752         port_info->pi_hard_addr.hard_addr = cfg[CFG_ASSIGN_ALPA].current;
1753 
1754         /* Initialize the RNID parameters */
1755         bzero(&port_info->pi_rnid_params, sizeof (port_info->pi_rnid_params));
1756 
1757         (void) snprintf((char *)port_info->pi_rnid_params.params.global_id,
1758             (sizeof (port_info->pi_rnid_params.params.global_id)-1),
1759             "%01x%01x%02x%02x%02x%02x%02x%02x%02x", hba->wwpn.nameType,
1760             hba->wwpn.IEEEextMsn, hba->wwpn.IEEEextLsb, hba->wwpn.IEEE[0],
1761             hba->wwpn.IEEE[1], hba->wwpn.IEEE[2], hba->wwpn.IEEE[3],
1762             hba->wwpn.IEEE[4], hba->wwpn.IEEE[5]);
1763 
1764         port_info->pi_rnid_params.params.unit_type  = RNID_HBA;
1765         port_info->pi_rnid_params.params.port_id    = port->did;
1766         port_info->pi_rnid_params.params.ip_version = RNID_IPV4;
1767 
1768         /* Initialize the port attributes */
1769         bzero(&port_info->pi_attrs, sizeof (port_info->pi_attrs));
1770 
1771         (void) strncpy(port_info->pi_attrs.manufacturer,
1772             hba->model_info.manufacturer,
1773             (sizeof (port_info->pi_attrs.manufacturer)-1));
1774 
1775         port_info->pi_rnid_params.status = FC_SUCCESS;
1776 
1777         (void) strncpy(port_info->pi_attrs.serial_number, vpd->serial_num,
1778             (sizeof (port_info->pi_attrs.serial_number)-1));
1779 
1780         (void) snprintf(port_info->pi_attrs.firmware_version,
1781             (sizeof (port_info->pi_attrs.firmware_version)-1), "%s (%s)",
1782             vpd->fw_version, vpd->fw_label);
1783 
1784 #ifdef EMLXS_I386
1785         (void) snprintf(port_info->pi_attrs.option_rom_version,
1786             (sizeof (port_info->pi_attrs.option_rom_version)-1),
1787             "Boot:%s", vpd->boot_version);
1788 #else   /* EMLXS_SPARC */
1789         (void) snprintf(port_info->pi_attrs.option_rom_version,
1790             (sizeof (port_info->pi_attrs.option_rom_version)-1),
1791             "Boot:%s Fcode:%s", vpd->boot_version, vpd->fcode_version);
1792 #endif  /* EMLXS_I386 */


4313                                 *link_state = FC_STATE_ONLINE;
4314                         }
4315 
4316                         /* Set the link speed */
4317                         switch (hba->linkspeed) {
4318                         case LA_2GHZ_LINK:
4319                                 *link_state |= FC_STATE_2GBIT_SPEED;
4320                                 break;
4321                         case LA_4GHZ_LINK:
4322                                 *link_state |= FC_STATE_4GBIT_SPEED;
4323                                 break;
4324                         case LA_8GHZ_LINK:
4325                                 *link_state |= FC_STATE_8GBIT_SPEED;
4326                                 break;
4327                         case LA_10GHZ_LINK:
4328                                 *link_state |= FC_STATE_10GBIT_SPEED;
4329                                 break;
4330                         case LA_16GHZ_LINK:
4331                                 *link_state |= FC_STATE_16GBIT_SPEED;
4332                                 break;
4333                         case LA_32GHZ_LINK:
4334                                 *link_state |= FC_STATE_32GBIT_SPEED;
4335                                 break;
4336                         case LA_1GHZ_LINK:
4337                         default:
4338                                 *link_state |= FC_STATE_1GBIT_SPEED;
4339                                 break;
4340                         }
4341                 } else {
4342                         *link_state = FC_STATE_OFFLINE;
4343                 }
4344 
4345                 break;
4346         }
4347 
4348 
4349         case FC_PORT_ERR_STATS:
4350         case FC_PORT_RLS:
4351         {
4352                 MAILBOXQ        *mbq;
4353                 MAILBOX         *mb;
4354                 fc_rls_acc_t    *bp;
4355