Bluetooth: MGMT: add CIS feature bits to controller information
authorPauli Virtanen <pav@iki.fi>
Mon, 30 Jan 2023 18:37:01 +0000 (20:37 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 19 Jul 2023 14:22:02 +0000 (16:22 +0200)
[ Upstream commit 2394186a2cefb9a45a029281a55749804dd8c556 ]

Userspace needs to know whether the adapter has feature support for
Connected Isochronous Stream - Central/Peripheral, so it can set up
LE Audio features accordingly.

Expose these feature bits as settings in MGMT controller info.

Signed-off-by: Pauli Virtanen <pav@iki.fi>
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
Stable-dep-of: 73f55453ea52 ("Bluetooth: MGMT: Fix marking SCAN_RSP as not connectable")
Signed-off-by: Sasha Levin <sashal@kernel.org>
include/net/bluetooth/mgmt.h
net/bluetooth/mgmt.c

index 743f6f5..e18a927 100644 (file)
@@ -109,6 +109,8 @@ struct mgmt_rp_read_index_list {
 #define MGMT_SETTING_STATIC_ADDRESS    0x00008000
 #define MGMT_SETTING_PHY_CONFIGURATION 0x00010000
 #define MGMT_SETTING_WIDEBAND_SPEECH   0x00020000
+#define MGMT_SETTING_CIS_CENTRAL       0x00040000
+#define MGMT_SETTING_CIS_PERIPHERAL    0x00080000
 
 #define MGMT_OP_READ_INFO              0x0004
 #define MGMT_READ_INFO_SIZE            0
index fc4ba08..815f2ab 100644 (file)
@@ -859,6 +859,12 @@ static u32 get_supported_settings(struct hci_dev *hdev)
            hdev->set_bdaddr)
                settings |= MGMT_SETTING_CONFIGURATION;
 
+       if (cis_central_capable(hdev))
+               settings |= MGMT_SETTING_CIS_CENTRAL;
+
+       if (cis_peripheral_capable(hdev))
+               settings |= MGMT_SETTING_CIS_PERIPHERAL;
+
        settings |= MGMT_SETTING_PHY_CONFIGURATION;
 
        return settings;
@@ -932,6 +938,12 @@ static u32 get_current_settings(struct hci_dev *hdev)
        if (hci_dev_test_flag(hdev, HCI_WIDEBAND_SPEECH_ENABLED))
                settings |= MGMT_SETTING_WIDEBAND_SPEECH;
 
+       if (cis_central_capable(hdev))
+               settings |= MGMT_SETTING_CIS_CENTRAL;
+
+       if (cis_peripheral_capable(hdev))
+               settings |= MGMT_SETTING_CIS_PERIPHERAL;
+
        return settings;
 }