From b739414901d9cd13eda7c644e2873edf41fa9215 Mon Sep 17 00:00:00 2001
From: Chris Dearman <chris.dearman@imgtec.com>
Date: Thu, 25 Feb 2016 11:21:51 -0800
Subject: [PATCH] Set WiFi MAC addresses from OTP data

Bug:27479111
Change-Id: I44ede163dfed607d103fc81da2b21694976c5508
---
 peripheral/wifi/uccp420/Android.mk             | 10 ++++++++++
 peripheral/wifi/uccp420/peripheral.mk          |  8 ++++++++
 peripheral/wifi/uccp420/sepolicy/file_contexts |  1 +
 peripheral/wifi/uccp420/sepolicy/wifisetmac.te | 12 ++++++++++++
 peripheral/wifi/uccp420/uccp420.rc             |  3 ++-
 peripheral/wifi/uccp420/wifisetmac             | 11 +++++++++++
 6 files changed, 44 insertions(+), 1 deletion(-)
 create mode 100644 peripheral/wifi/uccp420/sepolicy/file_contexts
 create mode 100644 peripheral/wifi/uccp420/sepolicy/wifisetmac.te
 create mode 100755 peripheral/wifi/uccp420/wifisetmac

diff --git a/peripheral/wifi/uccp420/Android.mk b/peripheral/wifi/uccp420/Android.mk
index 590659d..1471e52 100644
--- a/peripheral/wifi/uccp420/Android.mk
+++ b/peripheral/wifi/uccp420/Android.mk
@@ -32,4 +32,14 @@ LOCAL_MODULE_TAGS := optional
 
 include $(BUILD_SHARED_LIBRARY)
 
+include $(CLEAR_VARS)
+
+LOCAL_MODULE := wifisetmac
+LOCAL_SRC_FILES := wifisetmac
+LOCAL_MODULE_TAGS := optional
+LOCAL_MODULE_CLASS := EXECUTABLES
+LOCAL_MODULE_PATH := $(TARGET_OUT)/bin
+
+include $(BUILD_PREBUILT)
+
 endif
diff --git a/peripheral/wifi/uccp420/peripheral.mk b/peripheral/wifi/uccp420/peripheral.mk
index 708d995..97ea19e 100644
--- a/peripheral/wifi/uccp420/peripheral.mk
+++ b/peripheral/wifi/uccp420/peripheral.mk
@@ -14,6 +14,8 @@
 # limitations under the License.
 #
 
+LOCAL_PATH := hardware/bsp/imagination/peripheral/wifi/uccp420
+
 # UCCP420 WIFI Firmware
 UCCP420_WIFI_FW_SRC = vendor/bsp/imagination/peripheral/wifi/uccp420_firmware
 UCCP420_WIFI_FW_DST = system/vendor/firmware/img/uccp420wlan
@@ -22,5 +24,11 @@ PRODUCT_COPY_FILES += \
     $(UCCP420_WIFI_FW_SRC)/v4_5_8/MAC_LOADER.ldr:$(UCCP420_WIFI_FW_DST)/MAC_LOADER.ldr \
     $(UCCP420_WIFI_FW_SRC)/v4_5_8/MCP_LOADER.ldr:$(UCCP420_WIFI_FW_DST)/MCP_LOADER.ldr
 
+BOARD_SEPOLICY_DIRS += \
+    $(LOCAL_PATH)/sepolicy
+
+DEVICE_PACKAGES += \
+    wifisetmac
+
 WIFI_DRIVER_HAL_MODULE := wifi_driver.$(soc_name)
 WIFI_DRIVER_HAL_PERIPHERAL := uccp420
diff --git a/peripheral/wifi/uccp420/sepolicy/file_contexts b/peripheral/wifi/uccp420/sepolicy/file_contexts
new file mode 100644
index 0000000..c62793f
--- /dev/null
+++ b/peripheral/wifi/uccp420/sepolicy/file_contexts
@@ -0,0 +1 @@
+/system/bin/wifisetmac                  u:object_r:wifisetmac_exec:s0
diff --git a/peripheral/wifi/uccp420/sepolicy/wifisetmac.te b/peripheral/wifi/uccp420/sepolicy/wifisetmac.te
new file mode 100644
index 0000000..415a726
--- /dev/null
+++ b/peripheral/wifi/uccp420/sepolicy/wifisetmac.te
@@ -0,0 +1,12 @@
+# Domain for wifisetmac
+type wifisetmac, domain;
+type wifisetmac_exec, exec_type, file_type;
+
+brillo_domain(wifisetmac)
+allow_crash_reporter(wifisetmac)
+
+allow wifisetmac shell_exec:file read;
+allow wifisetmac proc:file write;
+allow wifisetmac system_file:file execute_no_trans;
+allow wifisetmac mtd_device:dir search;
+allow wifisetmac mtd_device:chr_file { rw_file_perms };
diff --git a/peripheral/wifi/uccp420/uccp420.rc b/peripheral/wifi/uccp420/uccp420.rc
index fe4657c..72a731a 100644
--- a/peripheral/wifi/uccp420/uccp420.rc
+++ b/peripheral/wifi/uccp420/uccp420.rc
@@ -1,5 +1,6 @@
-# bcsp configuration
+# uucp420 configuration
 
 # Tell the kernel driver where to find the firmware
 on early-boot
     write /sys/module/firmware_class/parameters/path /vendor/firmware
+    exec  /system/bin/wifisetmac
diff --git a/peripheral/wifi/uccp420/wifisetmac b/peripheral/wifi/uccp420/wifisetmac
new file mode 100755
index 0000000..08e845a
--- /dev/null
+++ b/peripheral/wifi/uccp420/wifisetmac
@@ -0,0 +1,11 @@
+#!/system/bin/sh
+#
+# Initialize WiFi MAC addresses
+
+if [ -x /system/bin/proddata ]; then
+  mac0=`proddata read MAC_0`
+  mac1=`proddata read MAC_1`
+  echo "vif_macs=$mac0$mac1" > /proc/uccp420/params
+fi
+
+exit 0
-- 
GitLab