Print this page
Update i40e for new devices, prototype changes

@@ -13,10 +13,11 @@
  * Copyright 2015 OmniTI Computer Consulting, Inc. All rights reserved.
  * Copyright (c) 2018, Joyent, Inc.
  * Copyright 2017 Tegile Systems, Inc.  All rights reserved.
  * Copyright 2020 Ryan Zezeski
  * Copyright 2020 RackTop Systems, Inc.
+ * Copyright 2021 Oxide Computer Company
  */
 
 /*
  * For more information, please see the big theory statement in i40e_main.c.
  */

@@ -668,11 +669,11 @@
         for (i = 0; i < nbytes; i++, offset++) {
                 enum i40e_status_code status;
                 uint32_t val;
 
                 status = i40e_aq_get_phy_register(hw,
-                    I40E_AQ_PHY_REG_ACCESS_EXTERNAL_MODULE, page, offset,
+                    I40E_AQ_PHY_REG_ACCESS_EXTERNAL_MODULE, page, TRUE, offset,
                     &val, NULL);
                 if (status != I40E_SUCCESS) {
                         mutex_exit(&i40e->i40e_general_lock);
                         return (EIO);
                 }

@@ -1055,10 +1056,12 @@
         case MAC_PROP_DUPLEX:
         case MAC_PROP_SPEED:
         case MAC_PROP_STATUS:
         case MAC_PROP_ADV_100FDX_CAP:
         case MAC_PROP_ADV_1000FDX_CAP:
+        case MAC_PROP_ADV_2500FDX_CAP:
+        case MAC_PROP_ADV_5000FDX_CAP:
         case MAC_PROP_ADV_10GFDX_CAP:
         case MAC_PROP_ADV_25GFDX_CAP:
         case MAC_PROP_ADV_40GFDX_CAP:
                 ret = ENOTSUP;
                 break;

@@ -1066,10 +1069,12 @@
          * These are read-only at this time as we don't support configuring
          * auto-negotiation. See the theory statement in i40e_main.c.
          */
         case MAC_PROP_EN_100FDX_CAP:
         case MAC_PROP_EN_1000FDX_CAP:
+        case MAC_PROP_EN_2500FDX_CAP:
+        case MAC_PROP_EN_5000FDX_CAP:
         case MAC_PROP_EN_10GFDX_CAP:
         case MAC_PROP_EN_25GFDX_CAP:
         case MAC_PROP_EN_40GFDX_CAP:
         case MAC_PROP_AUTONEG:
         case MAC_PROP_FLOWCTRL:

@@ -1229,10 +1234,28 @@
                         break;
                 }
                 u8 = pr_val;
                 *u8 = (i40e->i40e_phy.link_speed & I40E_LINK_SPEED_1GB) != 0;
                 break;
+        case MAC_PROP_ADV_2500FDX_CAP:
+        case MAC_PROP_EN_2500FDX_CAP:
+                if (pr_valsize < sizeof (uint8_t)) {
+                        ret = EOVERFLOW;
+                        break;
+                }
+                u8 = pr_val;
+                *u8 = (i40e->i40e_phy.link_speed & I40E_LINK_SPEED_2_5GB) != 0;
+                break;
+        case MAC_PROP_ADV_5000FDX_CAP:
+        case MAC_PROP_EN_5000FDX_CAP:
+                if (pr_valsize < sizeof (uint8_t)) {
+                        ret = EOVERFLOW;
+                        break;
+                }
+                u8 = pr_val;
+                *u8 = (i40e->i40e_phy.link_speed & I40E_LINK_SPEED_5GB) != 0;
+                break;
         case MAC_PROP_ADV_10GFDX_CAP:
         case MAC_PROP_EN_10GFDX_CAP:
                 if (pr_valsize < sizeof (uint8_t)) {
                         ret = EOVERFLOW;
                         break;