From: huweiguo Date: Thu, 22 Dec 2016 08:24:26 +0000 (+0800) Subject: net: rfkill-wlan: prior to use wifi addr store in vendor storage X-Git-Tag: firefly_0821_release~995 X-Git-Url: http://plrg.eecs.uci.edu/git/?p=firefly-linux-kernel-4.4.55.git;a=commitdiff_plain;h=b58f60a9e8ef17896d56078b43911564f1afcc35 net: rfkill-wlan: prior to use wifi addr store in vendor storage Change-Id: I32ef43e1f47ee658675b26d54fa834ae9362382f Signed-off-by: huweiguo --- diff --git a/net/rfkill/rfkill-wlan.c b/net/rfkill/rfkill-wlan.c index 4c63219376d5..070ef05ca15c 100644 --- a/net/rfkill/rfkill-wlan.c +++ b/net/rfkill/rfkill-wlan.c @@ -45,6 +45,7 @@ #include #include #endif +#include #if 0 #define DBG(x...) printk(KERN_INFO "[WLAN_RFKILL]: "x) @@ -443,91 +444,70 @@ EXPORT_SYMBOL(rockchip_wifi_reset); #include 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 + } 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) { - 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);