|
@@ -539,6 +539,29 @@ static int btmrvl_setup(struct hci_dev *hdev)
|
|
return 0;
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+static int btmrvl_set_bdaddr(struct hci_dev *hdev, const bdaddr_t *bdaddr)
|
|
|
|
+{
|
|
|
|
+ struct sk_buff *skb;
|
|
|
|
+ long ret;
|
|
|
|
+ u8 buf[8];
|
|
|
|
+
|
|
|
|
+ buf[0] = MRVL_VENDOR_PKT;
|
|
|
|
+ buf[1] = sizeof(bdaddr_t);
|
|
|
|
+ memcpy(buf + 2, bdaddr, sizeof(bdaddr_t));
|
|
|
|
+
|
|
|
|
+ skb = __hci_cmd_sync(hdev, BT_CMD_SET_BDADDR, sizeof(buf), buf,
|
|
|
|
+ HCI_INIT_TIMEOUT);
|
|
|
|
+ if (IS_ERR(skb)) {
|
|
|
|
+ ret = PTR_ERR(skb);
|
|
|
|
+ BT_ERR("%s: changing btmrvl device address failed (%ld)",
|
|
|
|
+ hdev->name, ret);
|
|
|
|
+ return ret;
|
|
|
|
+ }
|
|
|
|
+ kfree_skb(skb);
|
|
|
|
+
|
|
|
|
+ return 0;
|
|
|
|
+}
|
|
|
|
+
|
|
/*
|
|
/*
|
|
* This function handles the event generated by firmware, rx data
|
|
* This function handles the event generated by firmware, rx data
|
|
* received from firmware, and tx data sent from kernel.
|
|
* received from firmware, and tx data sent from kernel.
|
|
@@ -632,6 +655,7 @@ int btmrvl_register_hdev(struct btmrvl_private *priv)
|
|
hdev->flush = btmrvl_flush;
|
|
hdev->flush = btmrvl_flush;
|
|
hdev->send = btmrvl_send_frame;
|
|
hdev->send = btmrvl_send_frame;
|
|
hdev->setup = btmrvl_setup;
|
|
hdev->setup = btmrvl_setup;
|
|
|
|
+ hdev->set_bdaddr = btmrvl_set_bdaddr;
|
|
|
|
|
|
hdev->dev_type = priv->btmrvl_dev.dev_type;
|
|
hdev->dev_type = priv->btmrvl_dev.dev_type;
|
|
|
|
|