--- old/usr/src/man/man7d/i40e.7d	Tue Jan 19 01:03:20 2021
+++ new/usr/src/man/man7d/i40e.7d	Tue Jan 19 01:03:20 2021
@@ -11,8 +11,9 @@
 .\"
 .\" Copyright (c) 2018 Joyent, Inc.
 .\" Copyright 2020 Ryan Zezeski
+.\" Copyright 2021 Oxide Computer Company
 .\"
-.Dd July 1, 2020
+.Dd January 18, 2021
 .Dt I40E 7D
 .Os
 .Sh NAME
@@ -29,8 +30,8 @@
 The
 .Nm
 driver supports the Intel 710 and 722 Ethernet Controller families of
-networking interface cards which come in 1 GbE, 10 GbE, 25 GbE, and 40
-GbE variants.
+networking interface cards which support speeds of 1 GbE, 2.5 GbE, 5 GbE, 10
+GbE, 25 GbE, and 40 GbE.
 .Pp
 In addition to basic device initialization and the sending and receiving
 of frames, it supports the following features:
--- old/usr/src/pkg/manifests/driver-network-i40e.mf	Tue Jan 19 01:03:20 2021
+++ new/usr/src/pkg/manifests/driver-network-i40e.mf	Tue Jan 19 01:03:20 2021
@@ -26,6 +26,9 @@
 dir path=usr/share/man
 dir path=usr/share/man/man7d
 driver name=i40e clone_perms="i40e 0666 root sys" perms="* 0666 root sys" \
+    alias=pciex8086,101f \
+    alias=pciex8086,104e \
+    alias=pciex8086,104f \
     alias=pciex8086,1572 \
     alias=pciex8086,1580 \
     alias=pciex8086,1581 \
@@ -36,12 +39,15 @@
     alias=pciex8086,1589 \
     alias=pciex8086,158a \
     alias=pciex8086,158b \
+    alias=pciex8086,15ff \
     alias=pciex8086,37ce \
     alias=pciex8086,37cf \
     alias=pciex8086,37d0 \
     alias=pciex8086,37d1 \
     alias=pciex8086,37d2 \
-    alias=pciex8086,37d3
+    alias=pciex8086,37d3 \
+    alias=pciex8086,cf8 \
+    alias=pciex8086,d58
 file path=kernel/drv/$(ARCH64)/i40e group=sys
 file path=kernel/drv/i40e.conf group=sys
 file path=usr/share/man/man7d/i40e.7d
--- old/usr/src/uts/common/io/i40e/i40e_gld.c	Tue Jan 19 01:03:20 2021
+++ new/usr/src/uts/common/io/i40e/i40e_gld.c	Tue Jan 19 01:03:20 2021
@@ -15,6 +15,7 @@
  * Copyright 2017 Tegile Systems, Inc.  All rights reserved.
  * Copyright 2020 Ryan Zezeski
  * Copyright 2020 RackTop Systems, Inc.
+ * Copyright 2021 Oxide Computer Company
  */
 
 /*
@@ -670,7 +671,7 @@
 		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);
@@ -1057,6 +1058,8 @@
 	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:
@@ -1068,6 +1071,8 @@
 	 */
 	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:
@@ -1231,6 +1236,24 @@
 		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)) {
--- old/usr/src/uts/common/io/i40e/i40e_main.c	Tue Jan 19 01:03:20 2021
+++ new/usr/src/uts/common/io/i40e/i40e_main.c	Tue Jan 19 01:03:20 2021
@@ -15,6 +15,7 @@
  * Copyright 2017 Tegile Systems, Inc.  All rights reserved.
  * Copyright 2020 RackTop Systems, Inc.
  * Copyright 2020 Ryan Zezeski
+ * Copyright 2021 Oxide Computer Company
  */
 
 /*
@@ -590,6 +591,12 @@
 		case I40E_LINK_SPEED_1GB:
 			i40e->i40e_link_speed = 1000;
 			break;
+		case I40E_LINK_SPEED_2_5GB:
+			i40e->i40e_link_speed = 2500;
+			break;
+		case I40E_LINK_SPEED_5GB:
+			i40e->i40e_link_speed = 5000;
+			break;
 		case I40E_LINK_SPEED_10GB:
 			i40e->i40e_link_speed = 10000;
 			break;
@@ -1347,7 +1354,7 @@
 		return (B_FALSE);
 	}
 
-	(void) i40e_aq_stop_lldp(hw, TRUE, NULL);
+	(void) i40e_aq_stop_lldp(hw, TRUE, FALSE, NULL);
 
 	rc = i40e_get_mac_addr(hw, hw->mac.addr);
 	if (rc != I40E_SUCCESS) {
@@ -3178,7 +3185,8 @@
 		goto done;
 	}
 
-	err = i40e_aq_set_mac_config(hw, i40e->i40e_frame_max, B_TRUE, 0, NULL);
+	err = i40e_aq_set_mac_config(hw, i40e->i40e_frame_max, B_TRUE, 0,
+	    B_FALSE, NULL);
 	if (err != I40E_SUCCESS) {
 		i40e_error(i40e, "failed to set MAC config: %d", err);
 		rc = B_FALSE;
--- old/usr/src/uts/common/io/i40e/i40e_stats.c	Tue Jan 19 01:03:20 2021
+++ new/usr/src/uts/common/io/i40e/i40e_stats.c	Tue Jan 19 01:03:20 2021
@@ -12,6 +12,7 @@
 /*
  * Copyright 2015 OmniTI Computer Consulting, Inc. All rights reserved.
  * Copyright 2019 Joyent, Inc.
+ * Copyright 2021 Oxide Computer Company
  */
 
 #include "i40e_sw.h"
@@ -935,6 +936,12 @@
 	case ETHER_STAT_CAP_1000FDX:
 		*val = (i40e->i40e_phy.link_speed & I40E_LINK_SPEED_1GB) != 0;
 		break;
+	case ETHER_STAT_CAP_2500FDX:
+		*val = (i40e->i40e_phy.link_speed & I40E_LINK_SPEED_2_5GB) != 0;
+		break;
+	case ETHER_STAT_CAP_5000FDX:
+		*val = (i40e->i40e_phy.link_speed & I40E_LINK_SPEED_5GB) != 0;
+		break;
 	case ETHER_STAT_CAP_10GFDX:
 		*val = (i40e->i40e_phy.link_speed & I40E_LINK_SPEED_10GB) != 0;
 		break;
@@ -957,6 +964,12 @@
 	case ETHER_STAT_ADV_CAP_1000FDX:
 		*val = (i40e->i40e_phy.link_speed & I40E_LINK_SPEED_1GB) != 0;
 		break;
+	case ETHER_STAT_ADV_CAP_2500FDX:
+		*val = (i40e->i40e_phy.link_speed & I40E_LINK_SPEED_2_5GB) != 0;
+		break;
+	case ETHER_STAT_ADV_CAP_5000FDX:
+		*val = (i40e->i40e_phy.link_speed & I40E_LINK_SPEED_5GB) != 0;
+		break;
 	case ETHER_STAT_ADV_CAP_10GFDX:
 		*val = (i40e->i40e_phy.link_speed & I40E_LINK_SPEED_10GB) != 0;
 		break;
@@ -980,6 +993,12 @@
 	case ETHER_STAT_LP_CAP_1000FDX:
 		*val = i40e->i40e_link_speed == 1000;
 		break;
+	case ETHER_STAT_LP_CAP_2500FDX:
+		*val = i40e->i40e_link_speed == 2500;
+		break;
+	case ETHER_STAT_LP_CAP_5000FDX:
+		*val = i40e->i40e_link_speed == 5000;
+		break;
 	case ETHER_STAT_LP_CAP_10GFDX:
 		*val = i40e->i40e_link_speed == 10000;
 		break;
@@ -1003,8 +1022,6 @@
 	case ETHER_STAT_CAP_100T4:
 	case ETHER_STAT_CAP_100GFDX:
 	case ETHER_STAT_CAP_50GFDX:
-	case ETHER_STAT_CAP_2500FDX:
-	case ETHER_STAT_CAP_5000FDX:
 	case ETHER_STAT_ADV_CAP_1000HDX:
 	case ETHER_STAT_ADV_CAP_100HDX:
 	case ETHER_STAT_ADV_CAP_10FDX:
@@ -1012,8 +1029,6 @@
 	case ETHER_STAT_ADV_CAP_100T4:
 	case ETHER_STAT_ADV_CAP_100GFDX:
 	case ETHER_STAT_ADV_CAP_50GFDX:
-	case ETHER_STAT_ADV_CAP_2500FDX:
-	case ETHER_STAT_ADV_CAP_5000FDX:
 	case ETHER_STAT_LP_CAP_1000HDX:
 	case ETHER_STAT_LP_CAP_100HDX:
 	case ETHER_STAT_LP_CAP_10FDX:
@@ -1021,8 +1036,6 @@
 	case ETHER_STAT_LP_CAP_100T4:
 	case ETHER_STAT_LP_CAP_100GFDX:
 	case ETHER_STAT_LP_CAP_50GFDX:
-	case ETHER_STAT_LP_CAP_2500FDX:
-	case ETHER_STAT_LP_CAP_5000FDX:
 		*val = 0;
 		break;
 
