Print this page
4431 igb support for I354
4616 igb has uninitialized kstats

@@ -333,10 +333,34 @@
         IGB_FLAG_NEED_CTX_IDX),
 
         0xfff00000              /* mask for RXDCTL register */
 };
 
+static adapter_info_t igb_i354_cap = {
+        /* limits */
+        8,              /* maximum number of rx queues */
+        1,              /* minimum number of rx queues */
+        4,              /* default number of rx queues */
+        8,              /* maximum number of tx queues */
+        1,              /* minimum number of tx queues */
+        4,              /* default number of tx queues */
+        65535,          /* maximum interrupt throttle rate */
+        0,              /* minimum interrupt throttle rate */
+        200,            /* default interrupt throttle rate */
+
+        /* function pointers */
+        igb_enable_adapter_interrupts_82580,
+        igb_setup_msix_82580,
+
+        /* capabilities */
+        (IGB_FLAG_HAS_DCA |     /* capability flags */
+        IGB_FLAG_VMDQ_POOL |
+        IGB_FLAG_NEED_CTX_IDX),
+
+        0xfff00000              /* mask for RXDCTL register */
+};
+
 /*
  * Module Initialization Functions
  */
 
 int

@@ -571,10 +595,12 @@
          * Newer models have Energy Efficient Ethernet, let's disable this by
          * default.
          */
         if (igb->hw.mac.type == e1000_i350)
                 (void) e1000_set_eee_i350(&igb->hw);
+        else if (igb->hw.mac.type == e1000_i354)
+                (void) e1000_set_eee_i354(&igb->hw);
 
         return (DDI_SUCCESS);
 
 attach_fail:
         igb_unconfigure(devinfo, igb);

@@ -898,10 +924,13 @@
                 break;
         case e1000_i210:
         case e1000_i211:
                 igb->capab = &igb_i210_cap;
                 break;
+        case e1000_i354:
+                igb->capab = &igb_i354_cap;
+                break;
         default:
                 return (IGB_FAILURE);
         }
 
         return (IGB_SUCCESS);

@@ -1316,10 +1345,11 @@
                 pba = E1000_READ_REG(hw, E1000_RXPBS);
                 pba &= E1000_RXPBS_SIZE_MASK_82576;
                 break;
         case e1000_82580:
         case e1000_i350:
+        case e1000_i354:
                 pba = E1000_READ_REG(hw, E1000_RXPBS);
                 pba = e1000_rxpbs_adjust_82580(pba);
                 break;
         case e1000_i210:
         case e1000_i211:

@@ -1833,10 +1863,12 @@
         if (igb_check_acc_handle(igb->osdep.reg_handle) != DDI_FM_OK)
                 goto start_failure;
 
         if (igb->hw.mac.type == e1000_i350)
                 (void) e1000_set_eee_i350(&igb->hw);
+        else if (igb->hw.mac.type == e1000_i354)
+                (void) e1000_set_eee_i354(&igb->hw);
 
         for (i = igb->num_tx_rings - 1; i >= 0; i--)
                 mutex_exit(&igb->tx_rings[i].tx_lock);
         for (i = igb->num_rx_rings - 1; i >= 0; i--)
                 mutex_exit(&igb->rx_rings[i].rx_lock);