[linux-yocto] [PATCH 10/11] minnowboard: Read mac address from efi var
Darren Hart
dvhart at linux.intel.com
Sat May 18 14:46:01 PDT 2013
The MinnowBoard UEFI firmware exports Eg20tMacAddress2 and contains the
MAC address provisioned during manufacturing. Create a callback in the
platform driver for reading this address.
Signed-off-by: Darren Hart <dvhart at linux.intel.com>
---
drivers/platform/x86/Kconfig | 1 +
drivers/platform/x86/minnowboard.c | 32 ++++++++++++++++++++++++++++++++
include/linux/minnowboard.h | 2 ++
3 files changed, 35 insertions(+)
diff --git a/drivers/platform/x86/Kconfig b/drivers/platform/x86/Kconfig
index 89d1065..23321b4 100644
--- a/drivers/platform/x86/Kconfig
+++ b/drivers/platform/x86/Kconfig
@@ -21,6 +21,7 @@ config MINNOWBOARD
depends on GPIO_SCH
depends on GPIO_PCH
depends on LEDS_GPIO
+ depends on EFI
default n
---help---
This driver configures the MinnowBoard fixed functionality GPIO lines.
diff --git a/drivers/platform/x86/minnowboard.c b/drivers/platform/x86/minnowboard.c
index c0d93a9..8512516 100644
--- a/drivers/platform/x86/minnowboard.c
+++ b/drivers/platform/x86/minnowboard.c
@@ -28,12 +28,23 @@
#include <linux/gpio.h>
#include <linux/leds.h>
#include <linux/gpio-sch.h>
+#include <linux/random.h>
#include <linux/delay.h>
+#include <linux/efi.h>
+#include <uapi/linux/if_ether.h>
#include <linux/minnowboard.h>
#include "minnowboard-gpio.h"
static int minnow_hwid_val = -1;
+#define EFI_VENDOR_GUID \
+ EFI_GUID(0x9ad0b0fd, 0xf325, 0x425c, \
+ 0x81, 0xdc, 0xa1, 0xc7, 0xa6, 0x27, 0x55, 0x1b)
+
+static efi_char16_t eth_addr_efivar_name[] = {
+ 'E', 'g', '2', '0', 't', 'M', 'a', 'c', 'A', 'd', 'd', 'r', 'e', 's', 's', '2', 0
+};
+
/* leds-gpio platform device structures */
static const struct gpio_led minnow_leds[] = {
{ .name = "minnow_led0", .gpio = GPIO_LED0, .active_low = 0,
@@ -102,6 +113,27 @@ void minnow_phy_reset(void)
}
EXPORT_SYMBOL_GPL(minnow_phy_reset);
+void minnow_eth_addr(u8 *addr)
+{
+ unsigned long data_len = ETH_ALEN;
+ u32 efi_attrib = 0;
+ u8 efi_data[data_len];
+ efi_status_t ret;
+
+ ret = (&efi)->get_variable(eth_addr_efivar_name, &EFI_VENDOR_GUID,
+ &efi_attrib, &data_len, &efi_data);
+
+ if (ret != EFI_SUCCESS || data_len != ETH_ALEN)
+ goto out_err;
+
+ memcpy(addr, &efi_data, data_len);
+ return;
+
+ out_err:
+ pr_warn("Failed to read Ethernet address from EFI variable\n");
+}
+EXPORT_SYMBOL_GPL(minnow_eth_addr);
+
static int __init minnow_module_init(void)
{
int err, val, i;
diff --git a/include/linux/minnowboard.h b/include/linux/minnowboard.h
index d3608b8..12c0288 100644
--- a/include/linux/minnowboard.h
+++ b/include/linux/minnowboard.h
@@ -27,11 +27,13 @@ bool minnow_detect(void);
bool minnow_lvds_detect(void);
int minnow_hwid(void);
void minnow_phy_reset(void);
+void minnow_eth_addr(u8 *addr);
#else
#define minnow_detect() (false)
#define minnow_lvds_detect() (false)
#define minnow_hwid() (-1)
#define minnow_phy_reset() do { } while (0)
+#define minnow_eth_addr(a) do { } while (0)
#endif /* MINNOWBOARD */
#endif /* _LINUX_MINNOWBOARD_H */
--
1.8.1.2
More information about the linux-yocto
mailing list