mirror of
https://github.com/torvalds/linux.git
synced 2026-07-29 10:41:49 +02:00
bluetooth pull request for net:
- hci_conn: Fix running bis_cleanup for hci_conn->type PA_LINK
- hci_conn: Fix not cleaning up Broadcaster/Broadcast Source
- hci_core: Fix using {cis,bis}_capable for current settings
- hci_core: Fix using ll_privacy_capable for current settings
- hci_core: Fix not accounting for BIS/CIS/PA links separately
- hci_conn: do return error from hci_enhanced_setup_sync()
- hci_event: fix MTU for BN == 0 in CIS Established
- hci_sync: Fix scan state after PA Sync has been established
- hci_sync: Avoid adding default advertising on startup
- hci_sync: Prevent unintended PA sync when SID is 0xFF
- ISO: Fix getname not returning broadcast fields
- btmtk: Fix wait_on_bit_timeout interruption during shutdown
- btnxpuart: Uses threaded IRQ for host wakeup handling
-----BEGIN PGP SIGNATURE-----
iQJNBAABCgA3FiEE7E6oRXp8w05ovYr/9JCA4xAyCykFAmifQh4ZHGx1aXoudm9u
LmRlbnR6QGludGVsLmNvbQAKCRD0kIDjEDILKSpyD/4+a98UD/FMiu2MuowbCJvK
EWneAUc9l0j/bhVSaTnRzpXM6gov/SNdSFr9dLrTeYY75X+ky1YDFca/deP2fZzl
v+2H306yIw73k4DAEqkzOQk+YRpi/N7+rruytlZd7TC29zwer1IEg2Rv6hMqmZQt
bkFiEcR2HpIFaXGDAmsKmXEQ3xsNnbHpeuqQIYPC0uzTYDdW8O+vV/etgHeycfzc
dGDJOX+3oEAYCi3NtJY/DZLlIhKneLHRn7qGpDAXUWTRvzHESdzmOzSQ9wD0fVqD
pMMJv0dmaubH32JHafnIGixGb6LwhHWbse2yaei2uWfwukQJAzflfMwkManVsEBa
SM5mNXS586xeLfahLy1FmlbOaL5e7enL8Bhd4jZJGtIb1WRMZBsXCNKX0cZUKn8B
mNrM1zqQUvBrmS9G5KC2lAfgco0mqxoSKipgctJLamzNR2z6Yz4No0MLTzh89MnV
0waBToTn8sXidN/ENzOrxq6GGFZmaV0x3UXickwcbxLKC30+r3nXR4j0xK56N2ly
2sM+wU9CkXitQIW8PUWcYAWZ1k3/7ixv5/pIGVHnozQEcHiBX0OOmReauF3LWZjC
pWZU0/T7vduS4/3ThSBQNOjjWp3uhyKYCbbumMQsTVSsJ5MOgvf7IqLcVWAVi3Eg
1lbQkLQNC3uaosoV/JJfRg==
=ZtN+
-----END PGP SIGNATURE-----
Merge tag 'for-net-2025-08-15' of git://git.kernel.org/pub/scm/linux/kernel/git/bluetooth/bluetooth
Luiz Augusto von Dentz says:
====================
bluetooth pull request for net:
- hci_conn: Fix running bis_cleanup for hci_conn->type PA_LINK
- hci_conn: Fix not cleaning up Broadcaster/Broadcast Source
- hci_core: Fix using {cis,bis}_capable for current settings
- hci_core: Fix using ll_privacy_capable for current settings
- hci_core: Fix not accounting for BIS/CIS/PA links separately
- hci_conn: do return error from hci_enhanced_setup_sync()
- hci_event: fix MTU for BN == 0 in CIS Established
- hci_sync: Fix scan state after PA Sync has been established
- hci_sync: Avoid adding default advertising on startup
- hci_sync: Prevent unintended PA sync when SID is 0xFF
- ISO: Fix getname not returning broadcast fields
- btmtk: Fix wait_on_bit_timeout interruption during shutdown
- btnxpuart: Uses threaded IRQ for host wakeup handling
* tag 'for-net-2025-08-15' of git://git.kernel.org/pub/scm/linux/kernel/git/bluetooth/bluetooth:
Bluetooth: hci_core: Fix not accounting for BIS/CIS/PA links separately
Bluetooth: btnxpuart: Uses threaded IRQ for host wakeup handling
Bluetooth: hci_conn: do return error from hci_enhanced_setup_sync()
Bluetooth: hci_event: fix MTU for BN == 0 in CIS Established
Bluetooth: hci_sync: Prevent unintended PA sync when SID is 0xFF
Bluetooth: hci_core: Fix using ll_privacy_capable for current settings
Bluetooth: hci_core: Fix using {cis,bis}_capable for current settings
Bluetooth: btmtk: Fix wait_on_bit_timeout interruption during shutdown
Bluetooth: hci_conn: Fix not cleaning up Broadcaster/Broadcast Source
Bluetooth: hci_conn: Fix running bis_cleanup for hci_conn->type PA_LINK
Bluetooth: ISO: Fix getname not returning broadcast fields
Bluetooth: hci_sync: Fix scan state after PA Sync has been established
Bluetooth: hci_sync: Avoid adding default advertising on startup
====================
Link: https://patch.msgid.link/20250815142229.253052-1-luiz.dentz@gmail.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
commit
79116acb75
|
|
@ -642,12 +642,7 @@ static int btmtk_usb_hci_wmt_sync(struct hci_dev *hdev,
|
|||
* WMT command.
|
||||
*/
|
||||
err = wait_on_bit_timeout(&data->flags, BTMTK_TX_WAIT_VND_EVT,
|
||||
TASK_INTERRUPTIBLE, HCI_INIT_TIMEOUT);
|
||||
if (err == -EINTR) {
|
||||
bt_dev_err(hdev, "Execution of wmt command interrupted");
|
||||
clear_bit(BTMTK_TX_WAIT_VND_EVT, &data->flags);
|
||||
goto err_free_wc;
|
||||
}
|
||||
TASK_UNINTERRUPTIBLE, HCI_INIT_TIMEOUT);
|
||||
|
||||
if (err) {
|
||||
bt_dev_err(hdev, "Execution of wmt command timed out");
|
||||
|
|
|
|||
|
|
@ -543,10 +543,10 @@ static int ps_setup(struct hci_dev *hdev)
|
|||
}
|
||||
|
||||
if (psdata->wakeup_source) {
|
||||
ret = devm_request_irq(&serdev->dev, psdata->irq_handler,
|
||||
ps_host_wakeup_irq_handler,
|
||||
IRQF_ONESHOT | IRQF_TRIGGER_FALLING,
|
||||
dev_name(&serdev->dev), nxpdev);
|
||||
ret = devm_request_threaded_irq(&serdev->dev, psdata->irq_handler,
|
||||
NULL, ps_host_wakeup_irq_handler,
|
||||
IRQF_ONESHOT,
|
||||
dev_name(&serdev->dev), nxpdev);
|
||||
if (ret)
|
||||
bt_dev_info(hdev, "error setting wakeup IRQ handler, ignoring\n");
|
||||
disable_irq(psdata->irq_handler);
|
||||
|
|
|
|||
|
|
@ -647,7 +647,7 @@ static inline void sco_exit(void)
|
|||
#if IS_ENABLED(CONFIG_BT_LE)
|
||||
int iso_init(void);
|
||||
int iso_exit(void);
|
||||
bool iso_enabled(void);
|
||||
bool iso_inited(void);
|
||||
#else
|
||||
static inline int iso_init(void)
|
||||
{
|
||||
|
|
@ -659,7 +659,7 @@ static inline int iso_exit(void)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static inline bool iso_enabled(void)
|
||||
static inline bool iso_inited(void)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -129,7 +129,9 @@ struct hci_conn_hash {
|
|||
struct list_head list;
|
||||
unsigned int acl_num;
|
||||
unsigned int sco_num;
|
||||
unsigned int iso_num;
|
||||
unsigned int cis_num;
|
||||
unsigned int bis_num;
|
||||
unsigned int pa_num;
|
||||
unsigned int le_num;
|
||||
unsigned int le_num_peripheral;
|
||||
};
|
||||
|
|
@ -1014,9 +1016,13 @@ static inline void hci_conn_hash_add(struct hci_dev *hdev, struct hci_conn *c)
|
|||
h->sco_num++;
|
||||
break;
|
||||
case CIS_LINK:
|
||||
h->cis_num++;
|
||||
break;
|
||||
case BIS_LINK:
|
||||
h->bis_num++;
|
||||
break;
|
||||
case PA_LINK:
|
||||
h->iso_num++;
|
||||
h->pa_num++;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
@ -1042,9 +1048,13 @@ static inline void hci_conn_hash_del(struct hci_dev *hdev, struct hci_conn *c)
|
|||
h->sco_num--;
|
||||
break;
|
||||
case CIS_LINK:
|
||||
h->cis_num--;
|
||||
break;
|
||||
case BIS_LINK:
|
||||
h->bis_num--;
|
||||
break;
|
||||
case PA_LINK:
|
||||
h->iso_num--;
|
||||
h->pa_num--;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
@ -1061,9 +1071,11 @@ static inline unsigned int hci_conn_num(struct hci_dev *hdev, __u8 type)
|
|||
case ESCO_LINK:
|
||||
return h->sco_num;
|
||||
case CIS_LINK:
|
||||
return h->cis_num;
|
||||
case BIS_LINK:
|
||||
return h->bis_num;
|
||||
case PA_LINK:
|
||||
return h->iso_num;
|
||||
return h->pa_num;
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -1073,7 +1085,15 @@ static inline unsigned int hci_conn_count(struct hci_dev *hdev)
|
|||
{
|
||||
struct hci_conn_hash *c = &hdev->conn_hash;
|
||||
|
||||
return c->acl_num + c->sco_num + c->le_num + c->iso_num;
|
||||
return c->acl_num + c->sco_num + c->le_num + c->cis_num + c->bis_num +
|
||||
c->pa_num;
|
||||
}
|
||||
|
||||
static inline unsigned int hci_iso_count(struct hci_dev *hdev)
|
||||
{
|
||||
struct hci_conn_hash *c = &hdev->conn_hash;
|
||||
|
||||
return c->cis_num + c->bis_num;
|
||||
}
|
||||
|
||||
static inline bool hci_conn_valid(struct hci_dev *hdev, struct hci_conn *conn)
|
||||
|
|
@ -1915,6 +1935,8 @@ void hci_conn_del_sysfs(struct hci_conn *conn);
|
|||
!hci_dev_test_flag(dev, HCI_RPA_EXPIRED))
|
||||
#define adv_rpa_valid(adv) (bacmp(&adv->random_addr, BDADDR_ANY) && \
|
||||
!adv->rpa_expired)
|
||||
#define le_enabled(dev) (lmp_le_capable(dev) && \
|
||||
hci_dev_test_flag(dev, HCI_LE_ENABLED))
|
||||
|
||||
#define scan_1m(dev) (((dev)->le_tx_def_phys & HCI_LE_SET_PHY_1M) || \
|
||||
((dev)->le_rx_def_phys & HCI_LE_SET_PHY_1M))
|
||||
|
|
@ -1932,6 +1954,7 @@ void hci_conn_del_sysfs(struct hci_conn *conn);
|
|||
((dev)->le_rx_def_phys & HCI_LE_SET_PHY_CODED))
|
||||
|
||||
#define ll_privacy_capable(dev) ((dev)->le_features[0] & HCI_LE_LL_PRIVACY)
|
||||
#define ll_privacy_enabled(dev) (le_enabled(dev) && ll_privacy_capable(dev))
|
||||
|
||||
#define privacy_mode_capable(dev) (ll_privacy_capable(dev) && \
|
||||
((dev)->commands[39] & 0x04))
|
||||
|
|
@ -1981,14 +2004,23 @@ void hci_conn_del_sysfs(struct hci_conn *conn);
|
|||
|
||||
/* CIS Master/Slave and BIS support */
|
||||
#define iso_capable(dev) (cis_capable(dev) || bis_capable(dev))
|
||||
#define iso_enabled(dev) (le_enabled(dev) && iso_capable(dev))
|
||||
#define cis_capable(dev) \
|
||||
(cis_central_capable(dev) || cis_peripheral_capable(dev))
|
||||
#define cis_enabled(dev) (le_enabled(dev) && cis_capable(dev))
|
||||
#define cis_central_capable(dev) \
|
||||
((dev)->le_features[3] & HCI_LE_CIS_CENTRAL)
|
||||
#define cis_central_enabled(dev) \
|
||||
(le_enabled(dev) && cis_central_capable(dev))
|
||||
#define cis_peripheral_capable(dev) \
|
||||
((dev)->le_features[3] & HCI_LE_CIS_PERIPHERAL)
|
||||
#define cis_peripheral_enabled(dev) \
|
||||
(le_enabled(dev) && cis_peripheral_capable(dev))
|
||||
#define bis_capable(dev) ((dev)->le_features[3] & HCI_LE_ISO_BROADCASTER)
|
||||
#define sync_recv_capable(dev) ((dev)->le_features[3] & HCI_LE_ISO_SYNC_RECEIVER)
|
||||
#define bis_enabled(dev) (le_enabled(dev) && bis_capable(dev))
|
||||
#define sync_recv_capable(dev) \
|
||||
((dev)->le_features[3] & HCI_LE_ISO_SYNC_RECEIVER)
|
||||
#define sync_recv_enabled(dev) (le_enabled(dev) && sync_recv_capable(dev))
|
||||
|
||||
#define mws_transport_config_capable(dev) (((dev)->commands[30] & 0x08) && \
|
||||
(!hci_test_quirk((dev), HCI_QUIRK_BROKEN_MWS_TRANSPORT_CONFIG)))
|
||||
|
|
|
|||
|
|
@ -339,7 +339,8 @@ static int hci_enhanced_setup_sync(struct hci_dev *hdev, void *data)
|
|||
case BT_CODEC_TRANSPARENT:
|
||||
if (!find_next_esco_param(conn, esco_param_msbc,
|
||||
ARRAY_SIZE(esco_param_msbc)))
|
||||
return false;
|
||||
return -EINVAL;
|
||||
|
||||
param = &esco_param_msbc[conn->attempt - 1];
|
||||
cp.tx_coding_format.id = 0x03;
|
||||
cp.rx_coding_format.id = 0x03;
|
||||
|
|
@ -830,7 +831,17 @@ static void bis_cleanup(struct hci_conn *conn)
|
|||
/* Check if ISO connection is a BIS and terminate advertising
|
||||
* set and BIG if there are no other connections using it.
|
||||
*/
|
||||
bis = hci_conn_hash_lookup_big(hdev, conn->iso_qos.bcast.big);
|
||||
bis = hci_conn_hash_lookup_big_state(hdev,
|
||||
conn->iso_qos.bcast.big,
|
||||
BT_CONNECTED,
|
||||
HCI_ROLE_MASTER);
|
||||
if (bis)
|
||||
return;
|
||||
|
||||
bis = hci_conn_hash_lookup_big_state(hdev,
|
||||
conn->iso_qos.bcast.big,
|
||||
BT_CONNECT,
|
||||
HCI_ROLE_MASTER);
|
||||
if (bis)
|
||||
return;
|
||||
|
||||
|
|
@ -2249,7 +2260,7 @@ struct hci_conn *hci_connect_bis(struct hci_dev *hdev, bdaddr_t *dst,
|
|||
* the start periodic advertising and create BIG commands have
|
||||
* been queued
|
||||
*/
|
||||
hci_conn_hash_list_state(hdev, bis_mark_per_adv, PA_LINK,
|
||||
hci_conn_hash_list_state(hdev, bis_mark_per_adv, BIS_LINK,
|
||||
BT_BOUND, &data);
|
||||
|
||||
/* Queue start periodic advertising and create BIG */
|
||||
|
|
|
|||
|
|
@ -6745,8 +6745,8 @@ static void hci_le_cis_established_evt(struct hci_dev *hdev, void *data,
|
|||
qos->ucast.out.latency =
|
||||
DIV_ROUND_CLOSEST(get_unaligned_le24(ev->p_latency),
|
||||
1000);
|
||||
qos->ucast.in.sdu = le16_to_cpu(ev->c_mtu);
|
||||
qos->ucast.out.sdu = le16_to_cpu(ev->p_mtu);
|
||||
qos->ucast.in.sdu = ev->c_bn ? le16_to_cpu(ev->c_mtu) : 0;
|
||||
qos->ucast.out.sdu = ev->p_bn ? le16_to_cpu(ev->p_mtu) : 0;
|
||||
qos->ucast.in.phy = ev->c_phy;
|
||||
qos->ucast.out.phy = ev->p_phy;
|
||||
break;
|
||||
|
|
@ -6760,8 +6760,8 @@ static void hci_le_cis_established_evt(struct hci_dev *hdev, void *data,
|
|||
qos->ucast.in.latency =
|
||||
DIV_ROUND_CLOSEST(get_unaligned_le24(ev->p_latency),
|
||||
1000);
|
||||
qos->ucast.out.sdu = le16_to_cpu(ev->c_mtu);
|
||||
qos->ucast.in.sdu = le16_to_cpu(ev->p_mtu);
|
||||
qos->ucast.out.sdu = ev->c_bn ? le16_to_cpu(ev->c_mtu) : 0;
|
||||
qos->ucast.in.sdu = ev->p_bn ? le16_to_cpu(ev->p_mtu) : 0;
|
||||
qos->ucast.out.phy = ev->c_phy;
|
||||
qos->ucast.in.phy = ev->p_phy;
|
||||
break;
|
||||
|
|
@ -6957,9 +6957,14 @@ static void hci_le_big_sync_established_evt(struct hci_dev *hdev, void *data,
|
|||
continue;
|
||||
}
|
||||
|
||||
if (ev->status != 0x42)
|
||||
if (ev->status != 0x42) {
|
||||
/* Mark PA sync as established */
|
||||
set_bit(HCI_CONN_PA_SYNC, &bis->flags);
|
||||
/* Reset cleanup callback of PA Sync so it doesn't
|
||||
* terminate the sync when deleting the connection.
|
||||
*/
|
||||
conn->cleanup = NULL;
|
||||
}
|
||||
|
||||
bis->sync_handle = conn->sync_handle;
|
||||
bis->iso_qos.bcast.big = ev->handle;
|
||||
|
|
|
|||
|
|
@ -3344,7 +3344,7 @@ static int hci_powered_update_adv_sync(struct hci_dev *hdev)
|
|||
* advertising data. This also applies to the case
|
||||
* where BR/EDR was toggled during the AUTO_OFF phase.
|
||||
*/
|
||||
if (hci_dev_test_flag(hdev, HCI_ADVERTISING) ||
|
||||
if (hci_dev_test_flag(hdev, HCI_ADVERTISING) &&
|
||||
list_empty(&hdev->adv_instances)) {
|
||||
if (ext_adv_capable(hdev)) {
|
||||
err = hci_setup_ext_adv_instance_sync(hdev, 0x00);
|
||||
|
|
@ -4531,14 +4531,14 @@ static int hci_le_set_host_feature_sync(struct hci_dev *hdev)
|
|||
{
|
||||
struct hci_cp_le_set_host_feature cp;
|
||||
|
||||
if (!cis_capable(hdev))
|
||||
if (!iso_capable(hdev))
|
||||
return 0;
|
||||
|
||||
memset(&cp, 0, sizeof(cp));
|
||||
|
||||
/* Connected Isochronous Channels (Host Support) */
|
||||
cp.bit_number = 32;
|
||||
cp.bit_value = 1;
|
||||
cp.bit_value = iso_enabled(hdev) ? 0x01 : 0x00;
|
||||
|
||||
return __hci_cmd_sync_status(hdev, HCI_OP_LE_SET_HOST_FEATURE,
|
||||
sizeof(cp), &cp, HCI_CMD_TIMEOUT);
|
||||
|
|
@ -6985,8 +6985,6 @@ static void create_pa_complete(struct hci_dev *hdev, void *data, int err)
|
|||
|
||||
hci_dev_lock(hdev);
|
||||
|
||||
hci_dev_clear_flag(hdev, HCI_PA_SYNC);
|
||||
|
||||
if (!hci_conn_valid(hdev, conn))
|
||||
clear_bit(HCI_CONN_CREATE_PA_SYNC, &conn->flags);
|
||||
|
||||
|
|
@ -7047,10 +7045,13 @@ static int hci_le_pa_create_sync(struct hci_dev *hdev, void *data)
|
|||
/* SID has not been set listen for HCI_EV_LE_EXT_ADV_REPORT to update
|
||||
* it.
|
||||
*/
|
||||
if (conn->sid == HCI_SID_INVALID)
|
||||
__hci_cmd_sync_status_sk(hdev, HCI_OP_NOP, 0, NULL,
|
||||
HCI_EV_LE_EXT_ADV_REPORT,
|
||||
conn->conn_timeout, NULL);
|
||||
if (conn->sid == HCI_SID_INVALID) {
|
||||
err = __hci_cmd_sync_status_sk(hdev, HCI_OP_NOP, 0, NULL,
|
||||
HCI_EV_LE_EXT_ADV_REPORT,
|
||||
conn->conn_timeout, NULL);
|
||||
if (err == -ETIMEDOUT)
|
||||
goto done;
|
||||
}
|
||||
|
||||
memset(&cp, 0, sizeof(cp));
|
||||
cp.options = qos->bcast.options;
|
||||
|
|
@ -7080,6 +7081,12 @@ static int hci_le_pa_create_sync(struct hci_dev *hdev, void *data)
|
|||
__hci_cmd_sync_status(hdev, HCI_OP_LE_PA_CREATE_SYNC_CANCEL,
|
||||
0, NULL, HCI_CMD_TIMEOUT);
|
||||
|
||||
done:
|
||||
hci_dev_clear_flag(hdev, HCI_PA_SYNC);
|
||||
|
||||
/* Update passive scan since HCI_PA_SYNC flag has been cleared */
|
||||
hci_update_passive_scan_sync(hdev);
|
||||
|
||||
return err;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1347,7 +1347,7 @@ static int iso_sock_getname(struct socket *sock, struct sockaddr *addr,
|
|||
bacpy(&sa->iso_bdaddr, &iso_pi(sk)->dst);
|
||||
sa->iso_bdaddr_type = iso_pi(sk)->dst_type;
|
||||
|
||||
if (hcon && hcon->type == BIS_LINK) {
|
||||
if (hcon && (hcon->type == BIS_LINK || hcon->type == PA_LINK)) {
|
||||
sa->iso_bc->bc_sid = iso_pi(sk)->bc_sid;
|
||||
sa->iso_bc->bc_num_bis = iso_pi(sk)->bc_num_bis;
|
||||
memcpy(sa->iso_bc->bc_bis, iso_pi(sk)->bc_bis,
|
||||
|
|
@ -2483,11 +2483,11 @@ static const struct net_proto_family iso_sock_family_ops = {
|
|||
.create = iso_sock_create,
|
||||
};
|
||||
|
||||
static bool iso_inited;
|
||||
static bool inited;
|
||||
|
||||
bool iso_enabled(void)
|
||||
bool iso_inited(void)
|
||||
{
|
||||
return iso_inited;
|
||||
return inited;
|
||||
}
|
||||
|
||||
int iso_init(void)
|
||||
|
|
@ -2496,7 +2496,7 @@ int iso_init(void)
|
|||
|
||||
BUILD_BUG_ON(sizeof(struct sockaddr_iso) > sizeof(struct sockaddr));
|
||||
|
||||
if (iso_inited)
|
||||
if (inited)
|
||||
return -EALREADY;
|
||||
|
||||
err = proto_register(&iso_proto, 0);
|
||||
|
|
@ -2524,7 +2524,7 @@ int iso_init(void)
|
|||
iso_debugfs = debugfs_create_file("iso", 0444, bt_debugfs,
|
||||
NULL, &iso_debugfs_fops);
|
||||
|
||||
iso_inited = true;
|
||||
inited = true;
|
||||
|
||||
return 0;
|
||||
|
||||
|
|
@ -2535,7 +2535,7 @@ int iso_init(void)
|
|||
|
||||
int iso_exit(void)
|
||||
{
|
||||
if (!iso_inited)
|
||||
if (!inited)
|
||||
return -EALREADY;
|
||||
|
||||
bt_procfs_cleanup(&init_net, "iso");
|
||||
|
|
@ -2549,7 +2549,7 @@ int iso_exit(void)
|
|||
|
||||
proto_unregister(&iso_proto);
|
||||
|
||||
iso_inited = false;
|
||||
inited = false;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -922,19 +922,19 @@ 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))
|
||||
if (cis_central_enabled(hdev))
|
||||
settings |= MGMT_SETTING_CIS_CENTRAL;
|
||||
|
||||
if (cis_peripheral_capable(hdev))
|
||||
if (cis_peripheral_enabled(hdev))
|
||||
settings |= MGMT_SETTING_CIS_PERIPHERAL;
|
||||
|
||||
if (bis_capable(hdev))
|
||||
if (bis_enabled(hdev))
|
||||
settings |= MGMT_SETTING_ISO_BROADCASTER;
|
||||
|
||||
if (sync_recv_capable(hdev))
|
||||
if (sync_recv_enabled(hdev))
|
||||
settings |= MGMT_SETTING_ISO_SYNC_RECEIVER;
|
||||
|
||||
if (ll_privacy_capable(hdev))
|
||||
if (ll_privacy_enabled(hdev))
|
||||
settings |= MGMT_SETTING_LL_PRIVACY;
|
||||
|
||||
return settings;
|
||||
|
|
@ -4513,7 +4513,7 @@ static int read_exp_features_info(struct sock *sk, struct hci_dev *hdev,
|
|||
}
|
||||
|
||||
if (IS_ENABLED(CONFIG_BT_LE)) {
|
||||
flags = iso_enabled() ? BIT(0) : 0;
|
||||
flags = iso_inited() ? BIT(0) : 0;
|
||||
memcpy(rp->features[idx].uuid, iso_socket_uuid, 16);
|
||||
rp->features[idx].flags = cpu_to_le32(flags);
|
||||
idx++;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user