Print this page
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


 961                 linkdown = 1;
 962                 break;
 963 
 964         case 0xfd:      /* New fabric */
 965         default:
 966                 mask = 0x00000000;
 967                 linkdown = 1;
 968                 clear_all = 1;
 969                 break;
 970         }
 971 
 972         aff_d_id = aid->aff_d_id & mask;
 973 
 974 
 975         /*
 976          * If link is down then this is a hard shutdown and flush
 977          * If link not down then this is a soft shutdown and flush
 978          * (e.g. RSCN)
 979          */
 980         if (linkdown) {


 981                 mutex_enter(&EMLXS_PORT_LOCK);
 982 
 983                 port->flag &= EMLXS_PORT_LINKDOWN_MASK;
 984 
 985                 if (port->ulp_statec != FC_STATE_OFFLINE) {
 986                         port->ulp_statec = FC_STATE_OFFLINE;
 987 
 988                         port->prev_did = port->did;
 989                         port->did = 0;
 990                         port->rdid = 0;
 991 
 992                         bcopy(&port->fabric_sparam, &port->prev_fabric_sparam,
 993                             sizeof (SERV_PARM));
 994                         bzero(&port->fabric_sparam, sizeof (SERV_PARM));
 995 
 996                         update = 1;
 997                 }
 998 
 999                 mutex_exit(&EMLXS_PORT_LOCK);
1000 


1537         case LA_2GHZ_LINK:
1538                 (void) strlcpy(linkspeed, "2Gb", sizeof (linkspeed));
1539                 state |= FC_STATE_2GBIT_SPEED;
1540                 break;
1541         case LA_4GHZ_LINK:
1542                 (void) strlcpy(linkspeed, "4Gb", sizeof (linkspeed));
1543                 state |= FC_STATE_4GBIT_SPEED;
1544                 break;
1545         case LA_8GHZ_LINK:
1546                 (void) strlcpy(linkspeed, "8Gb", sizeof (linkspeed));
1547                 state |= FC_STATE_8GBIT_SPEED;
1548                 break;
1549         case LA_10GHZ_LINK:
1550                 (void) strlcpy(linkspeed, "10Gb", sizeof (linkspeed));
1551                 state |= FC_STATE_10GBIT_SPEED;
1552                 break;
1553         case LA_16GHZ_LINK:
1554                 (void) strlcpy(linkspeed, "16Gb", sizeof (linkspeed));
1555                 state |= FC_STATE_16GBIT_SPEED;
1556                 break;




1557         default:
1558                 (void) snprintf(linkspeed, sizeof (linkspeed), "unknown(0x%x)",
1559                     hba->linkspeed);
1560                 break;
1561         }
1562 
1563         npiv_linkup = 0;
1564         update = 0;
1565 
1566         if ((hba->state >= FC_LINK_UP) &&
1567             !(hba->flag & FC_LOOPBACK_MODE) && (vport->ulp_statec != state)) {
1568                 update = 1;
1569                 vport->ulp_statec = state;
1570 
1571                 if ((vport->vpi > 0) && !(hba->flag & FC_NPIV_LINKUP)) {
1572                         hba->flag |= FC_NPIV_LINKUP;
1573                         npiv_linkup = 1;
1574                 }
1575         }
1576 


1605                                 EMLXS_MSGF(EMLXS_CONTEXT,
1606                                     &emlxs_npiv_link_up_msg, "%s%s%s *",
1607                                     linkspeed, topology, mode);
1608                         }
1609                 }
1610 
1611                 /* Check for waiting threads */
1612                 if (vport->vpi == 0) {
1613                         mutex_enter(&EMLXS_LINKUP_LOCK);
1614                         if (hba->linkup_wait_flag == TRUE) {
1615                                 hba->linkup_wait_flag = FALSE;
1616                                 cv_broadcast(&EMLXS_LINKUP_CV);
1617                         }
1618                         mutex_exit(&EMLXS_LINKUP_LOCK);
1619                 }
1620 
1621                 /* Flush any pending ub buffers */
1622                 emlxs_ub_flush(vport);
1623         }
1624 


1625         return;
1626 
1627 } /* emlxs_port_online() */
1628 
1629 
1630 /* SLI3 */
1631 extern void
1632 emlxs_linkdown(emlxs_hba_t *hba)
1633 {
1634         emlxs_port_t *port = &PPORT;
1635         int i;
1636         uint32_t scope;
1637 
1638         mutex_enter(&EMLXS_PORT_LOCK);
1639 
1640         if (hba->state > FC_LINK_DOWN) {
1641                 HBASTATS.LinkDown++;
1642                 EMLXS_STATE_CHANGE_LOCKED(hba, FC_LINK_DOWN);
1643         }
1644 




 961                 linkdown = 1;
 962                 break;
 963 
 964         case 0xfd:      /* New fabric */
 965         default:
 966                 mask = 0x00000000;
 967                 linkdown = 1;
 968                 clear_all = 1;
 969                 break;
 970         }
 971 
 972         aff_d_id = aid->aff_d_id & mask;
 973 
 974 
 975         /*
 976          * If link is down then this is a hard shutdown and flush
 977          * If link not down then this is a soft shutdown and flush
 978          * (e.g. RSCN)
 979          */
 980         if (linkdown) {
 981                 hba->flag &= ~FC_GPIO_LINK_UP;
 982 
 983                 mutex_enter(&EMLXS_PORT_LOCK);
 984 
 985                 port->flag &= EMLXS_PORT_LINKDOWN_MASK;
 986 
 987                 if (port->ulp_statec != FC_STATE_OFFLINE) {
 988                         port->ulp_statec = FC_STATE_OFFLINE;
 989 
 990                         port->prev_did = port->did;
 991                         port->did = 0;
 992                         port->rdid = 0;
 993 
 994                         bcopy(&port->fabric_sparam, &port->prev_fabric_sparam,
 995                             sizeof (SERV_PARM));
 996                         bzero(&port->fabric_sparam, sizeof (SERV_PARM));
 997 
 998                         update = 1;
 999                 }
1000 
1001                 mutex_exit(&EMLXS_PORT_LOCK);
1002 


1539         case LA_2GHZ_LINK:
1540                 (void) strlcpy(linkspeed, "2Gb", sizeof (linkspeed));
1541                 state |= FC_STATE_2GBIT_SPEED;
1542                 break;
1543         case LA_4GHZ_LINK:
1544                 (void) strlcpy(linkspeed, "4Gb", sizeof (linkspeed));
1545                 state |= FC_STATE_4GBIT_SPEED;
1546                 break;
1547         case LA_8GHZ_LINK:
1548                 (void) strlcpy(linkspeed, "8Gb", sizeof (linkspeed));
1549                 state |= FC_STATE_8GBIT_SPEED;
1550                 break;
1551         case LA_10GHZ_LINK:
1552                 (void) strlcpy(linkspeed, "10Gb", sizeof (linkspeed));
1553                 state |= FC_STATE_10GBIT_SPEED;
1554                 break;
1555         case LA_16GHZ_LINK:
1556                 (void) strlcpy(linkspeed, "16Gb", sizeof (linkspeed));
1557                 state |= FC_STATE_16GBIT_SPEED;
1558                 break;
1559         case LA_32GHZ_LINK:
1560                 (void) strlcpy(linkspeed, "32Gb", sizeof (linkspeed));
1561                 state |= FC_STATE_32GBIT_SPEED;
1562                 break;
1563         default:
1564                 (void) snprintf(linkspeed, sizeof (linkspeed), "unknown(0x%x)",
1565                     hba->linkspeed);
1566                 break;
1567         }
1568 
1569         npiv_linkup = 0;
1570         update = 0;
1571 
1572         if ((hba->state >= FC_LINK_UP) &&
1573             !(hba->flag & FC_LOOPBACK_MODE) && (vport->ulp_statec != state)) {
1574                 update = 1;
1575                 vport->ulp_statec = state;
1576 
1577                 if ((vport->vpi > 0) && !(hba->flag & FC_NPIV_LINKUP)) {
1578                         hba->flag |= FC_NPIV_LINKUP;
1579                         npiv_linkup = 1;
1580                 }
1581         }
1582 


1611                                 EMLXS_MSGF(EMLXS_CONTEXT,
1612                                     &emlxs_npiv_link_up_msg, "%s%s%s *",
1613                                     linkspeed, topology, mode);
1614                         }
1615                 }
1616 
1617                 /* Check for waiting threads */
1618                 if (vport->vpi == 0) {
1619                         mutex_enter(&EMLXS_LINKUP_LOCK);
1620                         if (hba->linkup_wait_flag == TRUE) {
1621                                 hba->linkup_wait_flag = FALSE;
1622                                 cv_broadcast(&EMLXS_LINKUP_CV);
1623                         }
1624                         mutex_exit(&EMLXS_LINKUP_LOCK);
1625                 }
1626 
1627                 /* Flush any pending ub buffers */
1628                 emlxs_ub_flush(vport);
1629         }
1630 
1631         hba->flag |= FC_GPIO_LINK_UP;
1632 
1633         return;
1634 
1635 } /* emlxs_port_online() */
1636 
1637 
1638 /* SLI3 */
1639 extern void
1640 emlxs_linkdown(emlxs_hba_t *hba)
1641 {
1642         emlxs_port_t *port = &PPORT;
1643         int i;
1644         uint32_t scope;
1645 
1646         mutex_enter(&EMLXS_PORT_LOCK);
1647 
1648         if (hba->state > FC_LINK_DOWN) {
1649                 HBASTATS.LinkDown++;
1650                 EMLXS_STATE_CHANGE_LOCKED(hba, FC_LINK_DOWN);
1651         }
1652