diff options
author | Michael Brown <mcb30@ipxe.org> | 2021-09-08 14:29:36 +0100 |
---|---|---|
committer | Michael Brown <mcb30@ipxe.org> | 2021-09-09 12:18:20 +0100 |
commit | 11932efcf39b8a228b7b885c737723455f1ba23e (patch) | |
tree | 67cad147c77097a0a832ce5a54244c1f665a30ff | |
parent | 861c3f82e235788f4d02b1272efaa44845ef7262 (diff) | |
download | ipxe-mac_passthru.tar.gz |
[ecm] Use ACPI-provided system-specific MAC address if presentmac_passthru
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>
-rw-r--r-- | src/drivers/net/ecm.c | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/src/drivers/net/ecm.c b/src/drivers/net/ecm.c index 91604985f..2f784d52f 100644 --- a/src/drivers/net/ecm.c +++ b/src/drivers/net/ecm.c @@ -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 ( ðernet_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 ) ); |