summaryrefslogtreecommitdiffstats
path: root/src/include
diff options
context:
space:
mode:
authorMichael Brown2021-09-08 14:50:20 +0200
committerMichael Brown2021-09-09 13:18:00 +0200
commit0cc4c42f0af716bc5a363ad699160926e91a4d35 (patch)
tree9493e4661b5124f4fb330d35a72cd937906fd2be /src/include
parent[acpi] Generalise DSDT/SSDT data extraction logic (diff)
downloadipxe-0cc4c42f0af716bc5a363ad699160926e91a4d35.tar.gz
ipxe-0cc4c42f0af716bc5a363ad699160926e91a4d35.tar.xz
ipxe-0cc4c42f0af716bc5a363ad699160926e91a4d35.zip
[acpi] Allow for extraction of a MAC address from the DSDT/SSDT
Some vendors provide a "system MAC address" within the DSDT/SSDT, to be used to override the MAC address for a USB docking station. A full implementation would require an ACPI bytecode interpreter, since at least one OEM allows the MAC address to be constructed by executable ACPI bytecode (rather than a fixed data structure). We instead attempt to extract a plausible-looking "_AUXMAC_#.....#" string that appears shortly after an "AMAC" or "MACA" signature. This should work for most implementations encountered in practice. Debugged-by: Andreas Hammarskjöld <junior@2PintSoftware.com> Signed-off-by: Michael Brown <mcb30@ipxe.org>
Diffstat (limited to 'src/include')
-rw-r--r--src/include/ipxe/acpimac.h14
-rw-r--r--src/include/ipxe/errfile.h1
2 files changed, 15 insertions, 0 deletions
diff --git a/src/include/ipxe/acpimac.h b/src/include/ipxe/acpimac.h
new file mode 100644
index 000000000..de673eb28
--- /dev/null
+++ b/src/include/ipxe/acpimac.h
@@ -0,0 +1,14 @@
+#ifndef _IPXE_ACPIMAC_H
+#define _IPXE_ACPIMAC_H
+
+/** @file
+ *
+ * ACPI MAC address
+ *
+ */
+
+FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
+
+extern int acpi_mac ( uint8_t *hw_addr );
+
+#endif /* _IPXE_ACPIMAC_H */
diff --git a/src/include/ipxe/errfile.h b/src/include/ipxe/errfile.h
index cf5757874..23e406b62 100644
--- a/src/include/ipxe/errfile.h
+++ b/src/include/ipxe/errfile.h
@@ -77,6 +77,7 @@ FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
#define ERRFILE_fdt ( ERRFILE_CORE | 0x00250000 )
#define ERRFILE_dma ( ERRFILE_CORE | 0x00260000 )
#define ERRFILE_cachedhcp ( ERRFILE_CORE | 0x00270000 )
+#define ERRFILE_acpimac ( ERRFILE_CORE | 0x00280000 )
#define ERRFILE_eisa ( ERRFILE_DRIVER | 0x00000000 )
#define ERRFILE_isa ( ERRFILE_DRIVER | 0x00010000 )