]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
Bluetooth: btintel_pcie: Add support for ISO data
authorKiran <kiran.k@intel.com>
Fri, 26 Jul 2024 10:43:26 +0000 (16:13 +0530)
committerLuiz Augusto von Dentz <luiz.von.dentz@intel.com>
Tue, 10 Sep 2024 16:43:28 +0000 (12:43 -0400)
Add support for handling ISO RX and TX packets.

Signed-off-by: Kiran <kiran.k@intel.com>
Signed-off-by: Luiz Augusto von Dentz <luiz.von.dentz@intel.com>
drivers/bluetooth/btintel_pcie.c

index 1c7631f22c522b5054f9740bbfbb9f7e06a928a9..d255bdf777b421b37c0b76152ad009536336f6d9 100644 (file)
@@ -46,6 +46,7 @@ MODULE_DEVICE_TABLE(pci, btintel_pcie_table);
 #define BTINTEL_PCIE_HCI_ACL_PKT       0x00000002
 #define BTINTEL_PCIE_HCI_SCO_PKT       0x00000003
 #define BTINTEL_PCIE_HCI_EVT_PKT       0x00000004
+#define BTINTEL_PCIE_HCI_ISO_PKT       0x00000005
 
 static inline void ipc_print_ia_ring(struct hci_dev *hdev, struct ia *ia,
                                     u16 queue_num)
@@ -423,6 +424,18 @@ static int btintel_pcie_recv_frame(struct btintel_pcie_data *data,
                        goto exit_error;
                }
                break;
+
+       case BTINTEL_PCIE_HCI_ISO_PKT:
+               if (skb->len >= HCI_ISO_HDR_SIZE) {
+                       plen = HCI_ISO_HDR_SIZE + __le16_to_cpu(hci_iso_hdr(skb)->dlen);
+                       pkt_type = HCI_ISODATA_PKT;
+               } else {
+                       bt_dev_err(hdev, "ISO packet is too short");
+                       ret = -EILSEQ;
+                       goto exit_error;
+               }
+               break;
+
        default:
                bt_dev_err(hdev, "Invalid packet type received: 0x%4.4x",
                           pcie_pkt_type);
@@ -1082,6 +1095,9 @@ static int btintel_pcie_send_frame(struct hci_dev *hdev,
                type = BTINTEL_PCIE_HCI_SCO_PKT;
                hdev->stat.sco_tx++;
                break;
+       case HCI_ISODATA_PKT:
+               type = BTINTEL_PCIE_HCI_ISO_PKT;
+               break;
        default:
                bt_dev_err(hdev, "Unknown HCI packet type");
                return -EILSEQ;