net: rfkill-wlan: prior to use wifi addr store in vendor storage
authorhuweiguo <hwg@rock-chips.com>
Thu, 22 Dec 2016 08:24:26 +0000 (16:24 +0800)
committerHuang, Tao <huangtao@rock-chips.com>
Fri, 23 Dec 2016 10:06:32 +0000 (18:06 +0800)
Change-Id: I32ef43e1f47ee658675b26d54fa834ae9362382f
Signed-off-by: huweiguo <hwg@rock-chips.com>
net/rfkill/rfkill-wlan.c

index 4c63219376d59bd39825554c62886c4bc4ca01a9..070ef05ca15cba7fa8f93f1608c0eb6f7e7713c0 100644 (file)
@@ -45,6 +45,7 @@
 #include <linux/of_device.h>
 #include <linux/of_gpio.h>
 #endif
 #include <linux/of_device.h>
 #include <linux/of_gpio.h>
 #endif
+#include <linux/soc/rockchip/rk_vendor_storage.h>
 
 #if 0
 #define DBG(x...)   printk(KERN_INFO "[WLAN_RFKILL]: "x)
 
 #if 0
 #define DBG(x...)   printk(KERN_INFO "[WLAN_RFKILL]: "x)
@@ -443,91 +444,70 @@ EXPORT_SYMBOL(rockchip_wifi_reset);
 #include <linux/errno.h>
 u8 wifi_custom_mac_addr[6] = {0,0,0,0,0,0};
 
 #include <linux/errno.h>
 u8 wifi_custom_mac_addr[6] = {0,0,0,0,0,0};
 
-static void rockchip_wifi_get_sn(char *buf)
+//#define RANDOM_ADDRESS_SAVE
+static int get_wifi_addr_vendor(unsigned char *addr)
 {
 {
-       memset(buf, 0, 512);
-       //GetSNSectorInfo(char * pbuf);
-
-       return ;
-}
-
-//#define ENABLE_WIFI_RAND_MAC
-#ifdef ENABLE_WIFI_RAND_MAC
-#define WIFI_RAND_MAC_FILE "/data/misc/wifi_rand_mac"
-
-static int rockchip_wifi_rand_mac_addr(unsigned char *buf)
-{
-    struct file *fp; 
-    loff_t pos;
-    mm_segment_t fs;
-    char mac_buf[20] = {0};
-
-    LOG("%s\n", __func__);
-    fp = filp_open(WIFI_RAND_MAC_FILE, O_RDONLY, 0);
-    if (fp == NULL || IS_ERR(fp)) {
-        fp = filp_open(WIFI_RAND_MAC_FILE, O_RDWR | O_CREAT, 0644);
-        if (fp == NULL || IS_ERR(fp)) {
-            LOG("%s: create %s failed.\n", __func__, WIFI_RAND_MAC_FILE);
-            return -1;
-        }
-        fs = get_fs();
-        set_fs(KERNEL_DS);
-        random_ether_addr(wifi_custom_mac_addr);
-        pos = 0;
-        vfs_write(fp, wifi_custom_mac_addr, 6, &pos);
-        filp_close(fp, NULL);  
-    } else {
-        fs = get_fs();
-        set_fs(KERNEL_DS);
-        pos = 0;
-        vfs_read(fp, wifi_custom_mac_addr, 6, &pos);
-        filp_close(fp, NULL); 
-    }
-    sprintf(mac_buf,"%02x:%02x:%02x:%02x:%02x:%02x",wifi_custom_mac_addr[0],wifi_custom_mac_addr[1],
-    wifi_custom_mac_addr[2],wifi_custom_mac_addr[3],wifi_custom_mac_addr[4],wifi_custom_mac_addr[5]);
-    LOG("random wifi_custom_mac_addr=[%s]\n", mac_buf);    
-    return 0;
-}
+       int ret;
+
+       ret = rk_vendor_read(WIFI_MAC_ID, addr, 6);
+       if (ret != 6 || is_zero_ether_addr(addr)) {
+               LOG("%s: rk_vendor_read wifi mac address failed (%d)\n",
+                   __func__, ret);
+#ifdef RANDOM_ADDRESS_SAVE
+               random_ether_addr(addr);
+               LOG("%s: generate random wifi mac address: "
+                   "%02x:%02x:%02x:%02x:%02x:%02x\n",
+                   __func__, addr[0], addr[1], addr[2],
+                   addr[3], addr[4], addr[5]);
+               ret = rk_vendor_write(WIFI_MAC_ID, addr, 6);
+               if (ret != 0) {
+                       LOG("%s: rk_vendor_write"
+                               " wifi mac address failed (%d)\n",
+                               __func__, ret);
+                       memset(addr, 0, 6);
+                       return -1;
+               }
+#else
+               return -1;
 #endif
 #endif
+       } else {
+               LOG("%s: rk_vendor_read wifi mac address: "
+                   "%02x:%02x:%02x:%02x:%02x:%02x\n",
+                   __func__, addr[0], addr[1], addr[2],
+                   addr[3], addr[4], addr[5]);
+       }
+       return 0;
+}
 
 int rockchip_wifi_mac_addr(unsigned char *buf)
 {
 
 int rockchip_wifi_mac_addr(unsigned char *buf)
 {
-    char mac_buf[20] = {0};
-    LOG("%s: enter.\n", __func__);
-
-    // from vflash
-    if(is_zero_ether_addr(wifi_custom_mac_addr)) {
-        int i;
-        char *tempBuf = kmalloc(512, GFP_KERNEL);
-        if(tempBuf) {
-            rockchip_wifi_get_sn(tempBuf);
-            for (i = 445; i <= 450; i++)
-                wifi_custom_mac_addr[i-445] = tempBuf[i];
-            kfree(tempBuf);
-        } else {
-            return -1;
-        }
-    }
+       char mac_buf[20] = {0};
 
 
-    sprintf(mac_buf,"%02x:%02x:%02x:%02x:%02x:%02x",wifi_custom_mac_addr[0],wifi_custom_mac_addr[1],
-    wifi_custom_mac_addr[2],wifi_custom_mac_addr[3],wifi_custom_mac_addr[4],wifi_custom_mac_addr[5]);
-    LOG("falsh wifi_custom_mac_addr=[%s]\n", mac_buf);
+       LOG("%s: enter.\n", __func__);
 
 
-#ifdef ENABLE_WIFI_RAND_MAC
-    rockchip_wifi_rand_mac_addr(buf);
-#endif
+       // from vendor storage
+       if (is_zero_ether_addr(wifi_custom_mac_addr)) {
+               if (get_wifi_addr_vendor(wifi_custom_mac_addr) != 0)
+                       return -1;
+       }
 
 
-    if (is_valid_ether_addr(wifi_custom_mac_addr)) {
-        if (!strncmp(wifi_chip_type_string, "rtl", 3))
-            wifi_custom_mac_addr[0] &= ~0x2; // for p2p
-    } else {
-        LOG("This mac address is not valid, ignored...\n");
-        return -1;
-    }
+       sprintf(mac_buf, "%02x:%02x:%02x:%02x:%02x:%02x",
+               wifi_custom_mac_addr[0], wifi_custom_mac_addr[1],
+               wifi_custom_mac_addr[2], wifi_custom_mac_addr[3],
+               wifi_custom_mac_addr[4], wifi_custom_mac_addr[5]);
+       LOG("falsh wifi_custom_mac_addr=[%s]\n", mac_buf);
 
 
-    memcpy(buf, wifi_custom_mac_addr, 6);
+       if (is_valid_ether_addr(wifi_custom_mac_addr)) {
+               if (!strncmp(wifi_chip_type_string, "rtl", 3))
+                       wifi_custom_mac_addr[0] &= ~0x2; // for p2p
+       } else {
+               LOG("This mac address is not valid, ignored...\n");
+               return -1;
+       }
 
 
-    return 0;
+       memcpy(buf, wifi_custom_mac_addr, 6);
+
+       return 0;
 }
 EXPORT_SYMBOL(rockchip_wifi_mac_addr);
 
 }
 EXPORT_SYMBOL(rockchip_wifi_mac_addr);