X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;ds=sidebyside;f=drivers%2Fbluetooth%2Fvflash.c;h=bb37c739571860becfe89a706b3e54a44890dec7;hb=425dd637bb81aa66033adb93356976c393fa021a;hp=8be5c1bfa600e3561bf5c3ca554dd3be259d3b68;hpb=6e2688ca848b14639c6ce07ec87c51fdc1742b61;p=firefly-linux-kernel-4.4.55.git diff --git a/drivers/bluetooth/vflash.c b/drivers/bluetooth/vflash.c index 8be5c1bfa600..bb37c7395718 100755 --- a/drivers/bluetooth/vflash.c +++ b/drivers/bluetooth/vflash.c @@ -14,6 +14,7 @@ #include #include #include +#include #include #if 0 @@ -31,12 +32,12 @@ static struct miscdevice vflash_miscdev; #define READ_BDADDR_FROM_FLASH 0x01 extern char GetSNSectorInfo(char * pbuf); +extern unsigned char wlan_mac_addr[6]; -static int vflash_ioctl(struct inode *inode, struct file *file, +static long vflash_ioctl(struct file *file, unsigned int cmd, unsigned long arg) { void __user *argp = (void __user *)arg; - unsigned long n = 0; DBG("%s---cmd=0x%x---arg=0x%x\n", __FUNCTION__, cmd, arg); @@ -47,32 +48,59 @@ static int vflash_ioctl(struct inode *inode, struct file *file, { case READ_BDADDR_FROM_FLASH: { +#ifdef CONFIG_WIFI_MAC + unsigned char bd_addr[6] = {0}; + int i; + + printk("vflash: wlan_mac_addr:%X:%X:%X:%x:%X:%x\n", wlan_mac_addr[0], + wlan_mac_addr[1], + wlan_mac_addr[2], + wlan_mac_addr[3], + wlan_mac_addr[4], + wlan_mac_addr[5] ); + for (i=1; i<6; i++) { + bd_addr[i] = wlan_mac_addr[5-i]; + } + + bd_addr[0] = wlan_mac_addr[5]+1; + + printk("vflash: bd_addr:%X:%X:%X:%x:%X:%x\n", bd_addr[5], + bd_addr[4], + bd_addr[3], + bd_addr[2], + bd_addr[1], + bd_addr[0] ); + + + if(copy_to_user(argp, bd_addr, 6)) { + printk("ERROR: copy_to_user---%s\n", __FUNCTION__); + return -EFAULT; + } +#else char *tempBuf = (char *)kmalloc(512, GFP_KERNEL); + char bd_addr[7] = {0}; int i; - #if 0 + GetSNSectorInfo(tempBuf); - #else - tempBuf[498] = 0x00; - tempBuf[499] = 0x11; - tempBuf[500] = 0x22; - tempBuf[501] = 0x33; - tempBuf[502] = 0x44; - tempBuf[503] = 0x55; - tempBuf[504] = 0x66; - #endif + for(i=498; i<=504; i++) { DBG("tempBuf[%d]=%x\n", i, tempBuf[i]); + bd_addr[504-i] = tempBuf[i]; } + - if(copy_to_user(argp, &(tempBuf[499]), 6)) - { - printk("ERROR: copy_to_user---%s\n", __FUNCTION__); + //printk("%s: ====> get bt addr from flash=[%02x:%02x:%02x:%02x:%02x:%02x]\n", __FUNCTION__, + // bd_addr[5], bd_addr[4], bd_addr[3], bd_addr[2], bd_addr[1], bd_addr[0]); + if(copy_to_user(argp, bd_addr, 6)) + { + printk("ERROR: copy_to_user---%s\n", __FUNCTION__); kfree(tempBuf); - return -EFAULT; + return -EFAULT; } kfree(tempBuf); +#endif } break; default: @@ -97,7 +125,7 @@ static int vflash_release(struct inode *inode, struct file *file) static const struct file_operations vflash_fops = { .owner = THIS_MODULE, - .ioctl = vflash_ioctl, + .unlocked_ioctl = vflash_ioctl, .open = vflash_open, .release = vflash_release, };