]> git.ipfire.org Git - thirdparty/ipxe.git/commitdiff
[ecm] Use ACPI-provided system-specific MAC address if present
authorMichael Brown <mcb30@ipxe.org>
Wed, 8 Sep 2021 13:29:36 +0000 (14:29 +0100)
committerMichael Brown <mcb30@ipxe.org>
Thu, 9 Sep 2021 11:56:02 +0000 (12:56 +0100)
Use the "system MAC address" provided within the DSDT/SSDT if such an
address is available and has not already been assigned to a network
device.

Tested-by: Andreas Hammarskjöld <junior@2PintSoftware.com>
Signed-off-by: Michael Brown <mcb30@ipxe.org>
src/drivers/net/ecm.c

index f531b04f8b7f9f31640d8f0081e45492232549c3..826b3b16d28ac199b8c229b648f2cce9039e5e85 100644 (file)
@@ -30,6 +30,7 @@ FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
 #include <ipxe/if_ether.h>
 #include <ipxe/base16.h>
 #include <ipxe/profile.h>
+#include <ipxe/acpimac.h>
 #include <ipxe/usb.h>
 #include "ecm.h"
 
@@ -93,6 +94,14 @@ int ecm_fetch_mac ( struct usb_function *func,
        int len;
        int rc;
 
+       /* Use system-specific MAC address, if present and not already used */
+       if ( ( ( rc = acpi_mac ( hw_addr ) ) == 0 ) &&
+            ! find_netdev_by_ll_addr ( &ethernet_protocol, hw_addr ) ) {
+               DBGC ( usb, "USB %s using system-specific MAC %s\n",
+                      func->name, eth_ntoa ( hw_addr ) );
+               return 0;
+       }
+
        /* Fetch MAC address string */
        len = usb_get_string_descriptor ( usb, desc->mac, 0, buf,
                                          sizeof ( buf ) );