@@ -457,6 +457,7 @@ enum {
#define HCI_LE_DATA_LEN_EXT 0x20
#define HCI_LE_PHY_2M 0x01
#define HCI_LE_PHY_CODED 0x08
+#define HCI_LE_LL_PRIVACY 0x40
#define HCI_LE_EXT_ADV 0x10
#define HCI_LE_EXT_SCAN_POLICY 0x80
#define HCI_LE_PHY_2M 0x01
@@ -1657,6 +1657,8 @@ void hci_le_start_enc(struct hci_conn *conn, __le16 ediv, __le64 rand,
void hci_copy_identity_address(struct hci_dev *hdev, bdaddr_t *bdaddr,
u8 *bdaddr_type);
+void hci_req_del_from_resolving_list(struct hci_dev *hdev, u8 addr_type,
+ bdaddr_t *bdaddr);
#define SCO_AIRMODE_MASK 0x0003
#define SCO_AIRMODE_CVSD 0x0000
@@ -885,6 +885,39 @@ static void hci_req_start_scan(struct hci_request *req, u8 type, u16 interval,
}
}
+void hci_req_del_from_resolving_list(struct hci_dev *hdev, u8 addr_type, bdaddr_t *bdaddr)
+{
+ struct hci_cp_le_del_from_resolv_list cp;
+ struct hci_request req;
+ struct bdaddr_list_with_irk *irk;
+
+ BT_DBG("");
+
+ /* Nothing to be done if LL privacy is not supported */
+ if ( !(hdev->le_features[0] & HCI_LE_LL_PRIVACY) )
+ return;
+
+ if ( !hci_dev_test_flag(hdev, HCI_LL_RPA_RESOLUTION) &&
+ ( hci_dev_test_flag(hdev, HCI_LE_ADV) ||
+ hci_dev_test_flag(hdev, HCI_LE_SCAN) ||
+ hci_lookup_le_connect(hdev) ) )
+ return;
+
+ /* If the device is not present in resolving list
+ * no need to send HCI command.
+ */
+ irk = hci_bdaddr_list_lookup_with_irk(&hdev->le_resolv_list, bdaddr, addr_type);
+ if (!irk)
+ return;
+
+ hci_req_init(&req, hdev);
+ cp.bdaddr_type = addr_type;
+ bacpy(&cp.bdaddr, bdaddr);
+
+ hci_req_add(&req, HCI_OP_LE_DEL_FROM_RESOLV_LIST, sizeof(cp), &cp);
+ hci_req_run(&req, NULL);
+}
+
void hci_req_add_le_passive_scan(struct hci_request *req)
{
struct hci_dev *hdev = req->hdev;
This patch help to delte the resolving list stored in the BT Controller w.r.t BD_ADDR. Signed-off-by: Sathish Narsimman <sathish.narasimman@intel.com> --- include/net/bluetooth/hci.h | 1 + include/net/bluetooth/hci_core.h | 2 ++ net/bluetooth/hci_request.c | 33 ++++++++++++++++++++++++++++++++ 3 files changed, 36 insertions(+)