mirror of
https://github.com/torvalds/linux.git
synced 2026-03-14 00:56:20 +01:00
Bluetooth: ISO: Support SCM_TIMESTAMPING for ISO TS
User-space applications (e.g. PipeWire) depend on ISO-formatted timestamps for precise audio sync. The ISO ts is based on the controller’s clock domain, so hardware timestamping (hwtimestamp) must be used. Ref: Documentation/networking/timestamping.rst, section 3.1 Hardware Timestamping. Signed-off-by: Yang Li <yang.li@amlogic.com> Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
This commit is contained in:
parent
7565bc5659
commit
ef568ae04e
1 changed files with 12 additions and 1 deletions
|
|
@ -2289,6 +2289,7 @@ static void iso_disconn_cfm(struct hci_conn *hcon, __u8 reason)
|
|||
void iso_recv(struct hci_conn *hcon, struct sk_buff *skb, u16 flags)
|
||||
{
|
||||
struct iso_conn *conn = hcon->iso_data;
|
||||
struct skb_shared_hwtstamps *hwts;
|
||||
__u16 pb, ts, len, sn;
|
||||
|
||||
if (!conn)
|
||||
|
|
@ -2312,13 +2313,16 @@ void iso_recv(struct hci_conn *hcon, struct sk_buff *skb, u16 flags)
|
|||
if (ts) {
|
||||
struct hci_iso_ts_data_hdr *hdr;
|
||||
|
||||
/* TODO: add timestamp to the packet? */
|
||||
hdr = skb_pull_data(skb, HCI_ISO_TS_DATA_HDR_SIZE);
|
||||
if (!hdr) {
|
||||
BT_ERR("Frame is too short (len %d)", skb->len);
|
||||
goto drop;
|
||||
}
|
||||
|
||||
/* Record the timestamp to skb */
|
||||
hwts = skb_hwtstamps(skb);
|
||||
hwts->hwtstamp = us_to_ktime(le32_to_cpu(hdr->ts));
|
||||
|
||||
sn = __le16_to_cpu(hdr->sn);
|
||||
len = __le16_to_cpu(hdr->slen);
|
||||
} else {
|
||||
|
|
@ -2370,6 +2374,13 @@ void iso_recv(struct hci_conn *hcon, struct sk_buff *skb, u16 flags)
|
|||
skb_copy_from_linear_data(skb, skb_put(conn->rx_skb, skb->len),
|
||||
skb->len);
|
||||
conn->rx_len = len - skb->len;
|
||||
|
||||
/* Copy hw timestamp from skb to rx_skb if present */
|
||||
if (ts) {
|
||||
hwts = skb_hwtstamps(conn->rx_skb);
|
||||
hwts->hwtstamp = skb_hwtstamps(skb)->hwtstamp;
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
case ISO_CONT:
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue