Re: [PATCH v1] Bluetooth: hci_event: Add HCI_Write_Link_Supervision_Timeout command/event structures
Luiz Augusto von Dentz <[email protected]>
| Newsgroups | org.kernel.vger.linux-bluetooth |
|---|---|
| Message-ID | <CABBYNZ+gCiULFp_oO0kFg=0euovCAHeW_Me-h4cBw8bZLi_W0Q@mail.gmail.com> |
Hi, On Thu, Jul 23, 2026 at 6:05 AM <[email protected]> wrote: > > From: Chen Zhang <[email protected]> > > Define HCI_Write_Link_Supervision_Timeout command, event structure, and > corresponding event handler function. > > Signed-off-by: Chen Zhang <[email protected]> > --- > include/net/bluetooth/hci.h | 10 ++++++++ > include/net/bluetooth/hci_core.h | 1 + > net/bluetooth/hci_event.c | 40 ++++++++++++++++++++++++++++++++ > 3 files changed, 51 insertions(+) > > diff --git a/include/net/bluetooth/hci.h b/include/net/bluetooth/hci.h > index 50f0eef71fb1..18a5a17eb218 100644 > --- a/include/net/bluetooth/hci.h > +++ b/include/net/bluetooth/hci.h > @@ -1239,6 +1239,16 @@ struct hci_cp_host_buffer_size { > __le16 sco_max_pkt; > } __packed; > > +#define HCI_OP_WRITE_LINK_SUPERVISION_TIMEOUT 0x0c37 > +struct hci_cp_write_link_supervision_timeout { > + __le16 handle; > + __le16 timeout; > +} __packed; > +struct hci_rp_write_link_supervision_timeout { > + __u8 status; > + __le16 handle; > +} __packed; > + > #define HCI_OP_READ_NUM_SUPPORTED_IAC 0x0c38 > struct hci_rp_read_num_supported_iac { > __u8 status; > diff --git a/include/net/bluetooth/hci_core.h b/include/net/bluetooth/hci_core.h > index e7133ff87fbf..866903a9b5c8 100644 > --- a/include/net/bluetooth/hci_core.h > +++ b/include/net/bluetooth/hci_core.h > @@ -702,6 +702,7 @@ struct hci_conn { > __u8 le_features[248]; > __u16 pkt_type; > __u16 link_policy; > + __u16 link_supervision_timeout; > __u8 key_type; > __u8 auth_type; > __u8 sec_level; > diff --git a/net/bluetooth/hci_event.c b/net/bluetooth/hci_event.c > index 741d658e9630..3b1f4cf922c3 100644 > --- a/net/bluetooth/hci_event.c > +++ b/net/bluetooth/hci_event.c > @@ -606,6 +606,44 @@ static u8 hci_cc_write_voice_setting(struct hci_dev *hdev, void *data, > return rp->status; > } > > +static u8 hci_cc_write_link_supervision_timeout(struct hci_dev *hdev, void *data, > + struct sk_buff *skb) > +{ > + struct hci_ev_status *rp = data; > + struct hci_cp_write_link_supervision_timeout *sent; > + struct hci_conn *conn; > + u16 handle; > + u8 status = rp->status; > + > + bt_dev_dbg(hdev, "status 0x%2.2x", status); > + > + sent = hci_sent_cmd_data(hdev, HCI_OP_WRITE_LINK_SUPERVISION_TIMEOUT); > + if (!sent) > + return status; > + > + handle = le16_to_cpu(sent->handle); > + > + hci_dev_lock(hdev); > + > + conn = hci_conn_hash_lookup_handle(hdev, handle); > + if (!conn) { > + status = 0xFF; > + goto done; > + } > + > + if (!status) { > + conn->link_supervision_timeout = __le16_to_cpu(sent->timeout); > + bt_dev_dbg(hdev, "handle 0x%4.4x timeout set to 0x%4.4x (%u ms)", > + handle, conn->link_supervision_timeout, > + conn->link_supervision_timeout * 5 / 8); > + } > + > +done: > + hci_dev_unlock(hdev); > + > + return status; > +} > + > static u8 hci_cc_read_num_supported_iac(struct hci_dev *hdev, void *data, > struct sk_buff *skb) > { > @@ -4097,6 +4135,8 @@ static const struct hci_cc { > HCI_CC_STATUS(HCI_OP_WRITE_CLASS_OF_DEV, hci_cc_write_class_of_dev), > HCI_CC(HCI_OP_READ_VOICE_SETTING, hci_cc_read_voice_setting, > sizeof(struct hci_rp_read_voice_setting)), > + HCI_CC(HCI_OP_WRITE_LINK_SUPERVISION_TIMEOUT, hci_cc_write_link_supervision_timeout, > + sizeof(struct hci_rp_write_link_supervision_timeout)), Ok, but I don't see use sending the HCI_OP_WRITE_LINK_SUPERVISION_TIMEOUT command, so what is this for, handling some custom entity that does perform this sort of operation behind bluetoothd back is not an acceptable excuse. > HCI_CC_STATUS(HCI_OP_WRITE_VOICE_SETTING, hci_cc_write_voice_setting), > HCI_CC(HCI_OP_READ_NUM_SUPPORTED_IAC, hci_cc_read_num_supported_iac, > sizeof(struct hci_rp_read_num_supported_iac)), > -- > 2.25.1 > > -- Luiz Augusto von Dentz