1. 11 Aug, 2023 40 commits
    • Yuanjun Gong's avatar
      Bluetooth: nokia: fix value check in nokia_bluetooth_serdev_probe() · e8b5aed3
      Yuanjun Gong authored
      in nokia_bluetooth_serdev_probe(), check the return value of
      clk_prepare_enable() and return the error code if
      clk_prepare_enable() returns an unexpected value.
      
      Fixes: 7bb31868 ("Bluetooth: add nokia driver")
      Signed-off-by: default avatarYuanjun Gong <ruc_gongyuanjun@163.com>
      Signed-off-by: default avatarLuiz Augusto von Dentz <luiz.von.dentz@intel.com>
      e8b5aed3
    • Rob Herring's avatar
      bluetooth: Explicitly include correct DT includes · e15f44fb
      Rob Herring authored
      The DT of_device.h and of_platform.h date back to the separate
      of_platform_bus_type before it as merged into the regular platform bus.
      As part of that merge prepping Arm DT support 13 years ago, they
      "temporarily" include each other. They also include platform_device.h
      and of.h. As a result, there's a pretty much random mix of those include
      files used throughout the tree. In order to detangle these headers and
      replace the implicit includes with struct declarations, users need to
      explicitly include the correct includes.
      Signed-off-by: default avatarRob Herring <robh@kernel.org>
      Signed-off-by: default avatarLuiz Augusto von Dentz <luiz.von.dentz@intel.com>
      e15f44fb
    • Mans Rullgard's avatar
      Bluetooth: btbcm: add default address for BCM43430A1 · 47e90f6b
      Mans Rullgard authored
      The BCM43430A1 has a default MAC address of AA:AA:AA:AA:AA:AA.
      Although, unlike some other entries, this does not include the
      chip name, it is clearly not a real address. This was found in
      AzureWave AW-NB197SM and AW-NM372SM modules.
      Signed-off-by: default avatarMans Rullgard <mans@mansr.com>
      Signed-off-by: default avatarLuiz Augusto von Dentz <luiz.von.dentz@intel.com>
      47e90f6b
    • Luiz Augusto von Dentz's avatar
      Bluetooth: ISO: Add support for BT_PKT_STATUS · 0731c5ab
      Luiz Augusto von Dentz authored
      This adds support for BT_PKT_STATUS socketopt by setting
      BT_SK_PKT_STATUS. Then upon receiving an ISO packet the code would
      attempt to store the Packet_Status_Flag to hci_skb_pkt_status which
      is then forward to userspace in the form of BT_SCM_PKT_STATUS whenever
      BT_PKT_STATUS has been enabled/set.
      Signed-off-by: default avatarLuiz Augusto von Dentz <luiz.von.dentz@intel.com>
      0731c5ab
    • Luiz Augusto von Dentz's avatar
      Bluetooth: af_bluetooth: Make BT_PKT_STATUS generic · 3f19ffb2
      Luiz Augusto von Dentz authored
      This makes the handling of BT_PKT_STATUS more generic so it can be
      reused by sockets other than SCO like BT_DEFER_SETUP, etc.
      Signed-off-by: default avatarLuiz Augusto von Dentz <luiz.von.dentz@intel.com>
      3f19ffb2
    • Chris Lu's avatar
      Bluetooth: btmtk: Fix kernel crash when processing coredump · 0e72e3b1
      Chris Lu authored
      There may be a potential kernel crash risk if 'skb->len
      - MTK_COREDUMP_END_LEN' value is less than 0 when doing
      memcmp in btmtk_process_coredump().
      Check the value is valid before doing memcmp.
      
      [215.021695] Unable to handle kernel paging request at
                   virtual address ffffff939fffd3c5
      [215.021781] Mem abort info:
      [215.021805]   ESR = 0x96000005
      [215.021833]   EC = 0x25: DABT (current EL), IL = 32 bits
      [215.021861]   SET = 0, FnV = 0
      [215.021875]   EA = 0, S1PTW = 0
      [215.021886] Data abort info:
      [215.021899]   ISV = 0, ISS = 0x00000005
      [215.021912]   CM = 0, WnR = 0
      [215.021929] swapper pgtable: 4k pages, 39-bit VAs,
                   pgdp=00000000410de000
      [215.021943] [ffffff939fffd3c5] pgd=0000000000000000,
                   p4d=0000000000000000, pud=0000000000000000
      [215.021979] Internal error: Oops: 96000005 [#1] PREEMPT SMP
      [215.022496] CPU: 0 PID: 0 Comm: swapper/0 Not tainted 5.10.186#3
                   (HASH:ad23 4)
      [215.022511] Hardware name: MediaTek Tomato board (DT)
      [215.022530] pstate: 80400009 (Nzcv daif +PAN -UAO -TCO BTYPE=--)
      [215.022556] pc : __pi_memcmp+0xd0/0x1b8
      [215.022579] lr : btmtk_process_coredump+0xb0/0x5f8 [btmtk]
      [215.022593] sp : ffffffc010003d40
      [215.022607] x29: ffffffc010003d40 x28: 0000000000000006
      [215.022633] x27: ffffffda696350c0 x26: 0000000000000002
      [215.022659] x25: 00000000000003ff x24: ffffff9360cca804
      [215.022685] x23: 0000000000000000 x22: ffffff9365638500
      [215.022710] x21: ffffff9365638700 x20: 0000000000000000
      [215.022736] x19: ffffff936002e000 x18: 0000000000000000
      [215.022761] x17: 0000000000000180 x16: ffffffda6881b8b4
      [215.022787] x15: 0000000000000001 x14: 0000000000002d00
      [215.022812] x13: 0000000000060000 x12: 0000000000000181
      [215.022837] x11: 0000000000000006 x10: fffffffffffffffd
      [215.022862] x9 : 0000000000000006 x8 : 0000000000000003
      [215.022887] x7 : 0000000000000000 x6 : 0000000000000000
      [215.022913] x5 : ffffff93656387b8 x4 : 0000000000000000
      [215.022938] x3 : ffffffc010003c18 x2 : 0000000000000006
      [215.022963] x1 : ffffffda09d4124a x0 : ffffff939fffd3c5
      [215.022989] Call trace:
      [215.023012]  __pi_memcmp+0xd0/0x1b8
      [215.023053]  btusb_recv_acl_mtk+0x64/0x90 [btusb (HASH:dc6b 5)]
      [215.023087]  btusb_recv_bulk+0x118/0x170 [btusb (HASH:dc6b 5)]
      [215.023121]  btusb_bulk_complete+0x8c/0x148 [btusb (HASH:dc6b 5)]
      [215.023144]  __usb_hcd_giveback_urb+0xbc/0x148
      [215.023164]  usb_giveback_urb_bh+0xb4/0x190
      [215.023184]  tasklet_action_common+0x98/0x1a0
      [215.023201]  tasklet_action+0x2c/0x38
      [215.023220]  __do_softirq+0xe0/0x38c
      [215.023241]  invoke_softirq+0x34/0x6c
      [215.023258]  irq_exit+0x6c/0xb0
      [215.023279]  __handle_domain_irq+0x98/0xd4
      [215.023296]  gic_handle_irq+0x5c/0x11c
      [215.023313]  el1_irq+0xd0/0x180
      [215.023332]  cpuidle_enter_state+0xac/0x338
      [215.023349]  cpuidle_enter+0x40/0x70
      [215.023366]  do_idle+0x150/0x278
      [215.023384]  cpu_startup_entry+0x2c/0x58
      [215.023401]  rest_init+0xdc/0xec
      [215.023419]  arch_call_rest_init+0x18/0x24
      [215.023435]  start_kernel+0x334/0x400
      [215.023460] Code: 91002129 eb09010a 9a89810b cb0b0042 (38401403)
      [215.023478] ---[ end trace 28668fd20c7a90cd ]
      
      Fixes: 2822cd0173ad ("Bluetooth: btusb: mediatek: add MediaTek devcoredump support")
      Signed-off-by: default avatarChris Lu <chris.lu@mediatek.com>
      Co-developed-by: default avatarSean Wang <sean.wang@mediatek.com>
      Signed-off-by: default avatarSean Wang <sean.wang@mediatek.com>
      Signed-off-by: default avatarLuiz Augusto von Dentz <luiz.von.dentz@intel.com>
      0e72e3b1
    • Roger Gammans's avatar
      Bluetooth: btusb: Add support for another MediaTek 7922 VID/PID · 0cefdaed
      Roger Gammans authored
      This one is found on the Dell Inspiron 2-in-1 7435
      
      The information in /sys/kernel/debug/usb/devices about the Bluetooth
      device is listed as the below.
      
      T:  Bus=03 Lev=01 Prnt=01 Port=02 Cnt=01 Dev#=  2 Spd=480  MxCh= 0
      D:  Ver= 2.10 Cls=ef(misc ) Sub=02 Prot=01 MxPS=64 #Cfgs=  1
      P:  Vendor=0489 ProdID=e0f1 Rev= 1.00
      S:  Manufacturer=MediaTek Inc.
      S:  Product=Wireless_Device
      S:  SerialNumber=000000000
      C:* #Ifs= 3 Cfg#= 1 Atr=e0 MxPwr=100mA
      A:  FirstIf#= 0 IfCount= 3 Cls=e0(wlcon) Sub=01 Prot=01
      I:* If#= 0 Alt= 0 #EPs= 3 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
      E:  Ad=81(I) Atr=03(Int.) MxPS=  16 Ivl=125us
      E:  Ad=82(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
      E:  Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
      I:* If#= 1 Alt= 0 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
      E:  Ad=83(I) Atr=01(Isoc) MxPS=   0 Ivl=1ms
      E:  Ad=03(O) Atr=01(Isoc) MxPS=   0 Ivl=1ms
      I:  If#= 1 Alt= 1 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
      E:  Ad=83(I) Atr=01(Isoc) MxPS=   9 Ivl=1ms
      E:  Ad=03(O) Atr=01(Isoc) MxPS=   9 Ivl=1ms
      I:  If#= 1 Alt= 2 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
      E:  Ad=83(I) Atr=01(Isoc) MxPS=  17 Ivl=1ms
      E:  Ad=03(O) Atr=01(Isoc) MxPS=  17 Ivl=1ms
      I:  If#= 1 Alt= 3 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
      E:  Ad=83(I) Atr=01(Isoc) MxPS=  25 Ivl=1ms
      E:  Ad=03(O) Atr=01(Isoc) MxPS=  25 Ivl=1ms
      I:  If#= 1 Alt= 4 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
      E:  Ad=83(I) Atr=01(Isoc) MxPS=  33 Ivl=1ms
      E:  Ad=03(O) Atr=01(Isoc) MxPS=  33 Ivl=1ms
      I:  If#= 1 Alt= 5 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
      E:  Ad=83(I) Atr=01(Isoc) MxPS=  49 Ivl=1ms
      E:  Ad=03(O) Atr=01(Isoc) MxPS=  49 Ivl=1ms
      I:  If#= 1 Alt= 6 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
      E:  Ad=83(I) Atr=01(Isoc) MxPS=  63 Ivl=1ms
      E:  Ad=03(O) Atr=01(Isoc) MxPS=  63 Ivl=1ms
      I:* If#= 2 Alt= 0 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=(none)
      E:  Ad=8a(I) Atr=03(Int.) MxPS=  64 Ivl=125us
      E:  Ad=0a(O) Atr=03(Int.) MxPS=  64 Ivl=125us
      I:  If#= 2 Alt= 1 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=(none)
      E:  Ad=8a(I) Atr=03(Int.) MxPS= 512 Ivl=125us
      E:  Ad=0a(O) Atr=03(Int.) MxPS= 512 Ivl=125us
      Signed-off-by: default avatarRoger Gammans <rgammans@gammascience.co.uk>
      Signed-off-by: default avatarLuiz Augusto von Dentz <luiz.von.dentz@intel.com>
      0cefdaed
    • Ying Hsu's avatar
      Bluetooth: Fix hci_suspend_sync crash · 573ebae1
      Ying Hsu authored
      If hci_unregister_dev() frees the hci_dev object but hci_suspend_notifier
      may still be accessing it, it can cause the program to crash.
      Here's the call trace:
        <4>[102152.653246] Call Trace:
        <4>[102152.653254]  hci_suspend_sync+0x109/0x301 [bluetooth]
        <4>[102152.653259]  hci_suspend_dev+0x78/0xcd [bluetooth]
        <4>[102152.653263]  hci_suspend_notifier+0x42/0x7a [bluetooth]
        <4>[102152.653268]  notifier_call_chain+0x43/0x6b
        <4>[102152.653271]  __blocking_notifier_call_chain+0x48/0x69
        <4>[102152.653273]  __pm_notifier_call_chain+0x22/0x39
        <4>[102152.653276]  pm_suspend+0x287/0x57c
        <4>[102152.653278]  state_store+0xae/0xe5
        <4>[102152.653281]  kernfs_fop_write+0x109/0x173
        <4>[102152.653284]  __vfs_write+0x16f/0x1a2
        <4>[102152.653287]  ? selinux_file_permission+0xca/0x16f
        <4>[102152.653289]  ? security_file_permission+0x36/0x109
        <4>[102152.653291]  vfs_write+0x114/0x21d
        <4>[102152.653293]  __x64_sys_write+0x7b/0xdb
        <4>[102152.653296]  do_syscall_64+0x59/0x194
        <4>[102152.653299]  entry_SYSCALL_64_after_hwframe+0x5c/0xc1
      
      This patch holds the reference count of the hci_dev object while
      processing it in hci_suspend_notifier to avoid potential crash
      caused by the race condition.
      Signed-off-by: default avatarYing Hsu <yinghsu@chromium.org>
      Signed-off-by: default avatarLuiz Augusto von Dentz <luiz.von.dentz@intel.com>
      573ebae1
    • Lee, Chun-Yi's avatar
      Bluetooth: hci_ldisc: check HCI_UART_PROTO_READY flag in HCIUARTGETPROTO · 9c33663a
      Lee, Chun-Yi authored
      This patch adds code to check HCI_UART_PROTO_READY flag before
      accessing hci_uart->proto. It fixes the race condition in
      hci_uart_tty_ioctl() between HCIUARTSETPROTO and HCIUARTGETPROTO.
      This issue bug found by Yu Hao and Weiteng Chen:
      
      BUG: general protection fault in hci_uart_tty_ioctl [1]
      
      The information of C reproducer can also reference the link [2]
      Reported-by: default avatarYu Hao <yhao016@ucr.edu>
      Closes: https://lore.kernel.org/all/CA+UBctC3p49aTgzbVgkSZ2+TQcqq4fPDO7yZitFT5uBPDeCO2g@mail.gmail.com/ [1]
      Reported-by: default avatarWeiteng Chen <wchen130@ucr.edu>
      Closes: https://lore.kernel.org/lkml/CA+UBctDPEvHdkHMwD340=n02rh+jNRJNNQ5LBZNA+Wm4Keh2ow@mail.gmail.com/T/ [2]
      Signed-off-by: default avatar"Lee, Chun-Yi" <jlee@suse.com>
      Signed-off-by: default avatarLuiz Augusto von Dentz <luiz.von.dentz@intel.com>
      9c33663a
    • Christophe JAILLET's avatar
      Bluetooth: hci_debugfs: Use kstrtobool() instead of strtobool() · 82eae9dc
      Christophe JAILLET authored
      strtobool() is the same as kstrtobool().
      However, the latter is more used within the kernel.
      
      In order to remove strtobool() and slightly simplify kstrtox.h, switch to
      the other function name.
      
      While at it, include the corresponding header file (<linux/kstrtox.h>)
      Signed-off-by: default avatarChristophe JAILLET <christophe.jaillet@wanadoo.fr>
      Signed-off-by: default avatarLuiz Augusto von Dentz <luiz.von.dentz@intel.com>
      82eae9dc
    • Chris Lu's avatar
      Bluetooth: btusb: Add new VID/PID 04ca/3804 for MT7922 · 59be4be8
      Chris Lu authored
      Add VID 04ca & PID 3804 for MediaTek MT7922 USB Bluetooth chip.
      
      The information in /sys/kernel/debug/usb/devices about the Bluetooth
      device is listed as the below.
      
      T:  Bus=05 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#=  2 Spd=480  MxCh= 0
      D:  Ver= 2.10 Cls=ef(misc ) Sub=02 Prot=01 MxPS=64 #Cfgs=  1
      P:  Vendor=04ca ProdID=3804 Rev= 1.00
      S:  Manufacturer=MediaTek Inc.
      S:  Product=Wireless_Device
      S:  SerialNumber=000000000
      C:* #Ifs= 3 Cfg#= 1 Atr=e0 MxPwr=100mA
      A:  FirstIf#= 0 IfCount= 3 Cls=e0(wlcon) Sub=01 Prot=01
      I:* If#= 0 Alt= 0 #EPs= 3 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
      E:  Ad=81(I) Atr=03(Int.) MxPS=  16 Ivl=125us
      E:  Ad=82(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
      E:  Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
      I:* If#= 1 Alt= 0 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
      E:  Ad=83(I) Atr=01(Isoc) MxPS=   0 Ivl=1ms
      E:  Ad=03(O) Atr=01(Isoc) MxPS=   0 Ivl=1ms
      I:  If#= 1 Alt= 1 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
      E:  Ad=83(I) Atr=01(Isoc) MxPS=   9 Ivl=1ms
      E:  Ad=03(O) Atr=01(Isoc) MxPS=   9 Ivl=1ms
      I:  If#= 1 Alt= 2 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
      E:  Ad=83(I) Atr=01(Isoc) MxPS=  17 Ivl=1ms
      E:  Ad=03(O) Atr=01(Isoc) MxPS=  17 Ivl=1ms
      I:  If#= 1 Alt= 3 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
      E:  Ad=83(I) Atr=01(Isoc) MxPS=  25 Ivl=1ms
      E:  Ad=03(O) Atr=01(Isoc) MxPS=  25 Ivl=1ms
      I:  If#= 1 Alt= 4 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
      E:  Ad=83(I) Atr=01(Isoc) MxPS=  33 Ivl=1ms
      E:  Ad=03(O) Atr=01(Isoc) MxPS=  33 Ivl=1ms
      I:  If#= 1 Alt= 5 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
      E:  Ad=83(I) Atr=01(Isoc) MxPS=  49 Ivl=1ms
      E:  Ad=03(O) Atr=01(Isoc) MxPS=  49 Ivl=1ms
      I:  If#= 1 Alt= 6 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
      E:  Ad=83(I) Atr=01(Isoc) MxPS=  63 Ivl=1ms
      E:  Ad=03(O) Atr=01(Isoc) MxPS=  63 Ivl=1ms
      I:* If#= 2 Alt= 0 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=(none)
      E:  Ad=8a(I) Atr=03(Int.) MxPS=  64 Ivl=125us
      E:  Ad=0a(O) Atr=03(Int.) MxPS=  64 Ivl=125us
      I:  If#= 2 Alt= 1 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=(none)
      E:  Ad=8a(I) Atr=03(Int.) MxPS= 512 Ivl=125us
      E:  Ad=0a(O) Atr=03(Int.) MxPS= 512 Ivl=125us
      Signed-off-by: default avatarChris Lu <chris.lu@mediatek.com>
      Signed-off-by: default avatarLuiz Augusto von Dentz <luiz.von.dentz@intel.com>
      59be4be8
    • Chris Lu's avatar
      Bluetooth: btusb: Add new VID/PID 0489/e102 for MT7922 · bf809efd
      Chris Lu authored
      Add VID 0489 & PID e102 for MediaTek MT7922 USB Bluetooth chip.
      
      The information in /sys/kernel/debug/usb/devices about the Bluetooth
      device is listed as the below.
      
      T:  Bus=05 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#=  2 Spd=480  MxCh= 0
      D:  Ver= 2.10 Cls=ef(misc ) Sub=02 Prot=01 MxPS=64 #Cfgs=  1
      P:  Vendor=0489 ProdID=e102 Rev= 1.00
      S:  Manufacturer=MediaTek Inc.
      S:  Product=Wireless_Device
      S:  SerialNumber=000000000
      C:* #Ifs= 3 Cfg#= 1 Atr=e0 MxPwr=100mA
      A:  FirstIf#= 0 IfCount= 3 Cls=e0(wlcon) Sub=01 Prot=01
      I:* If#= 0 Alt= 0 #EPs= 3 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
      E:  Ad=81(I) Atr=03(Int.) MxPS=  16 Ivl=125us
      E:  Ad=82(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
      E:  Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
      I:* If#= 1 Alt= 0 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
      E:  Ad=83(I) Atr=01(Isoc) MxPS=   0 Ivl=1ms
      E:  Ad=03(O) Atr=01(Isoc) MxPS=   0 Ivl=1ms
      I:  If#= 1 Alt= 1 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
      E:  Ad=83(I) Atr=01(Isoc) MxPS=   9 Ivl=1ms
      E:  Ad=03(O) Atr=01(Isoc) MxPS=   9 Ivl=1ms
      I:  If#= 1 Alt= 2 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
      E:  Ad=83(I) Atr=01(Isoc) MxPS=  17 Ivl=1ms
      E:  Ad=03(O) Atr=01(Isoc) MxPS=  17 Ivl=1ms
      I:  If#= 1 Alt= 3 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
      E:  Ad=83(I) Atr=01(Isoc) MxPS=  25 Ivl=1ms
      E:  Ad=03(O) Atr=01(Isoc) MxPS=  25 Ivl=1ms
      I:  If#= 1 Alt= 4 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
      E:  Ad=83(I) Atr=01(Isoc) MxPS=  33 Ivl=1ms
      E:  Ad=03(O) Atr=01(Isoc) MxPS=  33 Ivl=1ms
      I:  If#= 1 Alt= 5 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
      E:  Ad=83(I) Atr=01(Isoc) MxPS=  49 Ivl=1ms
      E:  Ad=03(O) Atr=01(Isoc) MxPS=  49 Ivl=1ms
      I:  If#= 1 Alt= 6 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
      E:  Ad=83(I) Atr=01(Isoc) MxPS=  63 Ivl=1ms
      E:  Ad=03(O) Atr=01(Isoc) MxPS=  63 Ivl=1ms
      I:* If#= 2 Alt= 0 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=(none)
      E:  Ad=8a(I) Atr=03(Int.) MxPS=  64 Ivl=125us
      E:  Ad=0a(O) Atr=03(Int.) MxPS=  64 Ivl=125us
      I:  If#= 2 Alt= 1 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=(none)
      E:  Ad=8a(I) Atr=03(Int.) MxPS= 512 Ivl=125us
      E:  Ad=0a(O) Atr=03(Int.) MxPS= 512 Ivl=125us
      Signed-off-by: default avatarChris Lu <chris.lu@mediatek.com>
      Signed-off-by: default avatarLuiz Augusto von Dentz <luiz.von.dentz@intel.com>
      bf809efd
    • Luiz Augusto von Dentz's avatar
      Bluetooth: MGMT: Fix always using HCI_MAX_AD_LENGTH · 112b5090
      Luiz Augusto von Dentz authored
      HCI_MAX_AD_LENGTH shall only be used if the controller doesn't support
      extended advertising, otherwise HCI_MAX_EXT_AD_LENGTH shall be used
      instead.
      Signed-off-by: default avatarLuiz Augusto von Dentz <luiz.von.dentz@intel.com>
      112b5090
    • Douglas Anderson's avatar
      Bluetooth: hci_sync: Don't double print name in add/remove adv_monitor · 6f55eea1
      Douglas Anderson authored
      The hci_add_adv_monitor() hci_remove_adv_monitor() functions call
      bt_dev_dbg() to print some debug statements. The bt_dev_dbg() macro
      automatically adds in the device's name. That means that we shouldn't
      include the name in the bt_dev_dbg() calls.
      Suggested-by: default avatarLuiz Augusto von Dentz <luiz.dentz@gmail.com>
      Signed-off-by: default avatarDouglas Anderson <dianders@chromium.org>
      Signed-off-by: default avatarLuiz Augusto von Dentz <luiz.von.dentz@intel.com>
      6f55eea1
    • Kiran K's avatar
      Bluetooth: Add support for Gale Peak (8087:0036) · 999a8a6b
      Kiran K authored
      Devices from /sys/kernel/debug/usb/devices:
      
      T:  Bus=09 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#=  2 Spd=12   MxCh= 0
      D:  Ver= 2.01 Cls=e0(wlcon) Sub=01 Prot=01 MxPS=64 #Cfgs=  1
      P:  Vendor=8087 ProdID=0036 Rev= 0.00
      C:* #Ifs= 2 Cfg#= 1 Atr=e0 MxPwr=100mA
      I:* If#= 0 Alt= 0 #EPs= 3 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
      E:  Ad=81(I) Atr=03(Int.) MxPS=  64 Ivl=1ms
      E:  Ad=02(O) Atr=02(Bulk) MxPS=  64 Ivl=0ms
      E:  Ad=82(I) Atr=02(Bulk) MxPS=  64 Ivl=0ms
      I:* If#= 1 Alt= 0 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
      E:  Ad=03(O) Atr=01(Isoc) MxPS=   0 Ivl=1ms
      E:  Ad=83(I) Atr=01(Isoc) MxPS=   0 Ivl=1ms
      I:  If#= 1 Alt= 1 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
      E:  Ad=03(O) Atr=01(Isoc) MxPS=   9 Ivl=1ms
      E:  Ad=83(I) Atr=01(Isoc) MxPS=   9 Ivl=1ms
      I:  If#= 1 Alt= 2 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
      E:  Ad=03(O) Atr=01(Isoc) MxPS=  17 Ivl=1ms
      E:  Ad=83(I) Atr=01(Isoc) MxPS=  17 Ivl=1ms
      I:  If#= 1 Alt= 3 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
      E:  Ad=03(O) Atr=01(Isoc) MxPS=  25 Ivl=1ms
      E:  Ad=83(I) Atr=01(Isoc) MxPS=  25 Ivl=1ms
      I:  If#= 1 Alt= 4 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
      E:  Ad=03(O) Atr=01(Isoc) MxPS=  33 Ivl=1ms
      E:  Ad=83(I) Atr=01(Isoc) MxPS=  33 Ivl=1ms
      I:  If#= 1 Alt= 5 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
      E:  Ad=03(O) Atr=01(Isoc) MxPS=  49 Ivl=1ms
      E:  Ad=83(I) Atr=01(Isoc) MxPS=  49 Ivl=1ms
      I:  If#= 1 Alt= 6 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
      E:  Ad=03(O) Atr=01(Isoc) MxPS=  63 Ivl=1ms
      E:  Ad=83(I) Atr=01(Isoc) MxPS=  63 Ivl=1ms
      Signed-off-by: default avatarKiran K <kiran.k@intel.com>
      Signed-off-by: default avatarLuiz Augusto von Dentz <luiz.von.dentz@intel.com>
      999a8a6b
    • Chris Lu's avatar
      Bluetooth: btusb: Add a new VID/PID 0489/e0f6 for MT7922 · b6cfa1c2
      Chris Lu authored
      Add VID/PID 0489/e0f6 for MediaTek MT7922 USB Bluetooth chip.
      
      The information in /sys/kernel/debug/usb/devices about the Bluetooth
      device is listed as the below.
      
      T:  Bus=01 Lev=01 Prnt=01 Port=04 Cnt=03 Dev#=  4 Spd=480  MxCh= 0
      D:  Ver= 2.10 Cls=ef(misc ) Sub=02 Prot=01 MxPS=64 #Cfgs=  1
      P:  Vendor=0489 ProdID=e0f6 Rev= 1.00
      S:  Manufacturer=MediaTek Inc.
      S:  Product=Wireless_Device
      S:  SerialNumber=000000000
      C:* #Ifs= 3 Cfg#= 1 Atr=e0 MxPwr=100mA
      A:  FirstIf#= 0 IfCount= 3 Cls=e0(wlcon) Sub=01 Prot=01
      I:* If#= 0 Alt= 0 #EPs= 3 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
      E:  Ad=81(I) Atr=03(Int.) MxPS=  16 Ivl=125us
      E:  Ad=82(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
      E:  Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
      I:* If#= 1 Alt= 0 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
      E:  Ad=83(I) Atr=01(Isoc) MxPS=   0 Ivl=1ms
      E:  Ad=03(O) Atr=01(Isoc) MxPS=   0 Ivl=1ms
      I:  If#= 1 Alt= 1 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
      E:  Ad=83(I) Atr=01(Isoc) MxPS=   9 Ivl=1ms
      E:  Ad=03(O) Atr=01(Isoc) MxPS=   9 Ivl=1ms
      I:  If#= 1 Alt= 2 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
      E:  Ad=83(I) Atr=01(Isoc) MxPS=  17 Ivl=1ms
      E:  Ad=03(O) Atr=01(Isoc) MxPS=  17 Ivl=1ms
      I:  If#= 1 Alt= 3 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
      E:  Ad=83(I) Atr=01(Isoc) MxPS=  25 Ivl=1ms
      E:  Ad=03(O) Atr=01(Isoc) MxPS=  25 Ivl=1ms
      I:  If#= 1 Alt= 4 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
      E:  Ad=83(I) Atr=01(Isoc) MxPS=  33 Ivl=1ms
      E:  Ad=03(O) Atr=01(Isoc) MxPS=  33 Ivl=1ms
      I:  If#= 1 Alt= 5 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
      E:  Ad=83(I) Atr=01(Isoc) MxPS=  49 Ivl=1ms
      E:  Ad=03(O) Atr=01(Isoc) MxPS=  49 Ivl=1ms
      I:  If#= 1 Alt= 6 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
      E:  Ad=83(I) Atr=01(Isoc) MxPS=  63 Ivl=1ms
      E:  Ad=03(O) Atr=01(Isoc) MxPS=  63 Ivl=1ms
      I:* If#= 2 Alt= 0 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=(none)
      E:  Ad=8a(I) Atr=03(Int.) MxPS=  64 Ivl=125us
      E:  Ad=0a(O) Atr=03(Int.) MxPS=  64 Ivl=125us
      I:  If#= 2 Alt= 1 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=(none)
      E:  Ad=8a(I) Atr=03(Int.) MxPS= 512 Ivl=125us
      E:  Ad=0a(O) Atr=03(Int.) MxPS= 512 Ivl=125us
      Signed-off-by: default avatarChris Lu <chris.lu@mediatek.com>
      Signed-off-by: default avatarLuiz Augusto von Dentz <luiz.von.dentz@intel.com>
      b6cfa1c2
    • Dan Carpenter's avatar
      Bluetooth: msft: Fix error code in msft_cancel_address_filter_sync() · 528b2acf
      Dan Carpenter authored
      Return negative -EIO instead of positive EIO.
      
      Fixes: 926df8962f3f ("Bluetooth: msft: Extended monitor tracking by address filter")
      Signed-off-by: default avatarDan Carpenter <dan.carpenter@linaro.org>
      Reviewed-by: default avatarSimon Horman <simon.horman@corigine.com>
      Signed-off-by: default avatarLuiz Augusto von Dentz <luiz.von.dentz@intel.com>
      528b2acf
    • Iulia Tanasescu's avatar
      Bluetooth: ISO: Notify user space about failed bis connections · f777d882
      Iulia Tanasescu authored
      Some use cases require the user to be informed if BIG synchronization
      fails. This commit makes it so that even if the BIG sync established
      event arrives with error status, a new hconn is added for each BIS,
      and the iso layer is notified about the failed connections.
      
      Unsuccesful bis connections will be marked using the
      HCI_CONN_BIG_SYNC_FAILED flag. From the iso layer, the POLLERR event
      is triggered on the newly allocated bis sockets, before adding them
      to the accept list of the parent socket.
      
      From user space, a new fd for each failed bis connection will be
      obtained by calling accept. The user should check for the POLLERR
      event on the new socket, to determine if the connection was successful
      or not.
      
      The HCI_CONN_BIG_SYNC flag has been added to mark whether the BIG sync
      has been successfully established. This flag is checked at bis cleanup,
      so the HCI LE BIG Terminate Sync command is only issued if needed.
      
      The BT_SK_BIG_SYNC flag indicates if BIG create sync has been called
      for a listening socket, to avoid issuing the command everytime a BIGInfo
      advertising report is received.
      Signed-off-by: default avatarIulia Tanasescu <iulia.tanasescu@nxp.com>
      Signed-off-by: default avatarLuiz Augusto von Dentz <luiz.von.dentz@intel.com>
      f777d882
    • Valentin David's avatar
      Bluetooth: btusb: Add device 0489:e0f5 as MT7922 device · e160a8f4
      Valentin David authored
      Asus ROG Ally gaming computer has a MediaTek MT7922 chip that uses USB id
      0489:e0f5 and needs to be added to the table. Without this, the device is
      not usable and gives the following error:
      
      Bluetooth: hci0: Opcode 0x c03 failed: -110
      
      Output from /sys/kernel/debug/usb/devices:
      
      T:  Bus=01 Lev=01 Prnt=01 Port=03 Cnt=03 Dev#=  4 Spd=480  MxCh= 0
      D:  Ver= 2.10 Cls=ef(misc ) Sub=02 Prot=01 MxPS=64 #Cfgs=  1
      P:  Vendor=0489 ProdID=e0f5 Rev= 1.00
      S:  Manufacturer=MediaTek Inc.
      S:  Product=Wireless_Device
      S:  SerialNumber=000000000
      C:* #Ifs= 3 Cfg#= 1 Atr=e0 MxPwr=100mA
      A:  FirstIf#= 0 IfCount= 3 Cls=e0(wlcon) Sub=01 Prot=01
      I:* If#= 0 Alt= 0 #EPs= 3 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
      E:  Ad=81(I) Atr=03(Int.) MxPS=  16 Ivl=125us
      E:  Ad=82(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
      E:  Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
      I:* If#= 1 Alt= 0 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
      E:  Ad=83(I) Atr=01(Isoc) MxPS=   0 Ivl=1ms
      E:  Ad=03(O) Atr=01(Isoc) MxPS=   0 Ivl=1ms
      I:  If#= 1 Alt= 1 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
      E:  Ad=83(I) Atr=01(Isoc) MxPS=   9 Ivl=1ms
      E:  Ad=03(O) Atr=01(Isoc) MxPS=   9 Ivl=1ms
      I:  If#= 1 Alt= 2 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
      E:  Ad=83(I) Atr=01(Isoc) MxPS=  17 Ivl=1ms
      E:  Ad=03(O) Atr=01(Isoc) MxPS=  17 Ivl=1ms
      I:  If#= 1 Alt= 3 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
      E:  Ad=83(I) Atr=01(Isoc) MxPS=  25 Ivl=1ms
      E:  Ad=03(O) Atr=01(Isoc) MxPS=  25 Ivl=1ms
      I:  If#= 1 Alt= 4 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
      E:  Ad=83(I) Atr=01(Isoc) MxPS=  33 Ivl=1ms
      E:  Ad=03(O) Atr=01(Isoc) MxPS=  33 Ivl=1ms
      I:  If#= 1 Alt= 5 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
      E:  Ad=83(I) Atr=01(Isoc) MxPS=  49 Ivl=1ms
      E:  Ad=03(O) Atr=01(Isoc) MxPS=  49 Ivl=1ms
      I:  If#= 1 Alt= 6 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
      E:  Ad=83(I) Atr=01(Isoc) MxPS=  63 Ivl=1ms
      E:  Ad=03(O) Atr=01(Isoc) MxPS=  63 Ivl=1ms
      I:* If#= 2 Alt= 0 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=(none)
      E:  Ad=8a(I) Atr=03(Int.) MxPS=  64 Ivl=125us
      E:  Ad=0a(O) Atr=03(Int.) MxPS=  64 Ivl=125us
      I:  If#= 2 Alt= 1 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=(none)
      E:  Ad=8a(I) Atr=03(Int.) MxPS= 512 Ivl=125us
      E:  Ad=0a(O) Atr=03(Int.) MxPS= 512 Ivl=125us
      Signed-off-by: default avatarValentin David <valentin.david@gmail.com>
      Signed-off-by: default avatarLuiz Augusto von Dentz <luiz.von.dentz@intel.com>
      e160a8f4
    • Luiz Augusto von Dentz's avatar
      Bluetooth: hci_conn: Always allocate unique handles · 9f78191c
      Luiz Augusto von Dentz authored
      This attempts to always allocate a unique handle for connections so they
      can be properly aborted by the likes of hci_abort_conn, so this uses the
      invalid range as a pool of unset handles that way if userspace is trying
      to create multiple connections at once each will be given a unique
      handle which will be considered unset.
      Signed-off-by: default avatarLuiz Augusto von Dentz <luiz.von.dentz@intel.com>
      9f78191c
    • Luiz Augusto von Dentz's avatar
      Bluetooth: hci_sync: Fix not handling ISO_LINK in hci_abort_conn_sync · 04a51d61
      Luiz Augusto von Dentz authored
      ISO_LINK connections where not being handled properly on
      hci_abort_conn_sync which sometimes resulted in sending the wrong
      commands, or in case of having the reject command being sent by the
      socket code (iso.c) which is sort of a layer violation.
      Signed-off-by: default avatarLuiz Augusto von Dentz <luiz.von.dentz@intel.com>
      04a51d61
    • Luiz Augusto von Dentz's avatar
      Bluetooth: hci_conn: Consolidate code for aborting connections · a13f316e
      Luiz Augusto von Dentz authored
      This consolidates code for aborting connections using
      hci_cmd_sync_queue so it is synchronized with other threads, but
      because of the fact that some commands may block the cmd_sync_queue
      while waiting specific events this attempt to cancel those requests by
      using hci_cmd_sync_cancel.
      Signed-off-by: default avatarLuiz Augusto von Dentz <luiz.von.dentz@intel.com>
      a13f316e
    • Jing Cai's avatar
      Bluetooth: btusb: mediatek: add MediaTek devcoredump support · 0b701513
      Jing Cai authored
      This patch implement function .coredump() and dmp_hdr() in btusb
      driver for MediaTek controller.  FW core dump was triggered by FW
      specific event to show something unexpected happened in the controller.
      
      The driver would be responsible for collecting and uploading the device
      core dump pieces in hci driver using core dump API. Once we finished
      the whole process, the driver would reset the controller to recover the
      kind of fatal error.
      Co-developed-by: default avatarChris Lu <chris.lu@mediatek.com>
      Signed-off-by: default avatarChris Lu <chris.lu@mediatek.com>
      Co-developed-by: default avatarSean Wang <sean.wang@mediatek.com>
      Signed-off-by: default avatarSean Wang <sean.wang@mediatek.com>
      Signed-off-by: default avatarJing Cai <jing.cai@mediatek.com>
      Signed-off-by: default avatarLuiz Augusto von Dentz <luiz.von.dentz@intel.com>
      0b701513
    • Jing Cai's avatar
      Bluetooth: btmtk: introduce btmtk reset work · 25b6d759
      Jing Cai authored
      Introduce btmtk_reset_work which can be called whenever the firmware abort,
      HCI command timeout, other fatal error happen.
      Co-developed-by: default avatarChris Lu <chris.lu@mediatek.com>
      Signed-off-by: default avatarChris Lu <chris.lu@mediatek.com>
      Co-developed-by: default avatarSean Wang <sean.wang@mediatek.com>
      Signed-off-by: default avatarSean Wang <sean.wang@mediatek.com>
      Signed-off-by: default avatarJing Cai <jing.cai@mediatek.com>
      Signed-off-by: default avatarLuiz Augusto von Dentz <luiz.von.dentz@intel.com>
      25b6d759
    • Sean Wang's avatar
      Bluetooth: btusb: mediatek: readx_poll_timeout replaces open coding · ca58330c
      Sean Wang authored
      Use readx_poll_timeout instead of open coding to poll the hardware reset
      status until it is done.
      Signed-off-by: default avatarSean Wang <sean.wang@mediatek.com>
      Signed-off-by: default avatarLuiz Augusto von Dentz <luiz.von.dentz@intel.com>
      ca58330c
    • Chris Lu's avatar
      Bluetooth: btmtk: add printing firmware information · 3e063518
      Chris Lu authored
      Add printing firmware information part when driver loading firmware that
      user can get mediatek bluetooth information.
      Co-developed-by: default avatarSean Wang <sean.wang@mediatek.com>
      Signed-off-by: default avatarSean Wang <sean.wang@mediatek.com>
      Signed-off-by: default avatarChris Lu <chris.lu@mediatek.com>
      Signed-off-by: default avatarLuiz Augusto von Dentz <luiz.von.dentz@intel.com>
      3e063518
    • Kiran K's avatar
      Bluetooth: btintel: Add support for Gale Peak · bb925bf9
      Kiran K authored
      Add hardware variant(0x1c) for Gale Peak core (CNVi).
      Signed-off-by: default avatarKiran K <kiran.k@intel.com>
      Signed-off-by: default avatarLuiz Augusto von Dentz <luiz.von.dentz@intel.com>
      bb925bf9
    • Claudia Draghicescu's avatar
      Bluetooth: hci_sync: Enable events for BIS capable devices · c33362a5
      Claudia Draghicescu authored
      In the case of a Synchronized Receiver capable device, enable at start-up the
      events for PA reports, PA Sync Established and Big Info Adv reports.
      Signed-off-by: default avatarClaudia Draghicescu <claudia.rosu@nxp.com>
      Signed-off-by: default avatarLuiz Augusto von Dentz <luiz.von.dentz@intel.com>
      c33362a5
    • Hilda Wu's avatar
      Bluetooth: msft: Extended monitor tracking by address filter · 9e14606d
      Hilda Wu authored
      Since limited tracking device per condition, this feature is to support
      tracking multiple devices concurrently.
      When a pattern monitor detects the device, this feature issues an address
      monitor for tracking that device. Let pattern monitor can keep monitor
      new devices.
      This feature adds an address filter when receiving a LE monitor device
      event which monitor handle is for a pattern, and the controller started
      monitoring the device. And this feature also has cancelled the monitor
      advertisement from address filters when receiving a LE monitor device
      event when the controller stopped monitoring the device specified by an
      address and monitor handle.
      
      Below is an example to know the feature adds the address filter.
      
      //Add MSFT pattern monitor
      < HCI Command: Vendor (0x3f|0x00f0) plen 14          #142 [hci0] 55.552420
              03 b8 a4 03 ff 01 01 06 09 05 5f 52 45 46        .........._REF
      > HCI Event: Command Complete (0x0e) plen 6          #143 [hci0] 55.653960
            Vendor (0x3f|0x00f0) ncmd 2
              Status: Success (0x00)
              03 00
      
      //Got event from the pattern monitor
      > HCI Event: Vendor (0xff) plen 18                   #148 [hci0] 58.384953
              23 79 54 33 77 88 97 68 02 00 fb c1 29 eb 27 b8  #yT3w..h....).'.
              00 01                                            ..
      
      //Add MSFT address monitor (Sample address: B8:27:EB:29:C1:FB)
      < HCI Command: Vendor (0x3f|0x00f0) plen 13          #149 [hci0] 58.385067
              03 b8 a4 03 ff 04 00 fb c1 29 eb 27 b8           .........).'.
      
      //Report to userspace about found device (ADV Monitor Device Found)
      @ MGMT Event: Unknown (0x002f) plen 38           {0x0003} [hci0] 58.680042
              01 00 fb c1 29 eb 27 b8 01 ce 00 00 00 00 16 00  ....).'.........
              0a 09 4b 45 59 42 44 5f 52 45 46 02 01 06 03 19  ..KEYBD_REF.....
              c1 03 03 03 12 18                                ......
      
      //Got event from address monitor
      > HCI Event: Vendor (0xff) plen 18                   #152 [hci0] 58.672956
              23 79 54 33 77 88 97 68 02 00 fb c1 29 eb 27 b8  #yT3w..h....).'.
              01 01
      Signed-off-by: default avatarAlex Lu <alex_lu@realsil.com.cn>
      Signed-off-by: default avatarHilda Wu <hildawu@realtek.com>
      Reviewed-by: default avatarSimon Horman <simon.horman@corigine.com>
      Signed-off-by: default avatarLuiz Augusto von Dentz <luiz.von.dentz@intel.com>
      9e14606d
    • Peter Tsao's avatar
      Bluetooth: btusb: Add support Mediatek MT7925 · 4c92ae75
      Peter Tsao authored
      This patch is added support Mediatek MT7925.
      1. The firmware location of MT7925 will set to
      /lib/firmware/mediatek/mt7925
      2. Add Mediatek private data in hdev
      to record the device for handle MT7925 flow.
      3. Use the recoreded dev_id to condition chip reset flow.
      
      The information in /sys/kernel/debug/usb/devices about the MT7925U
      Bluetooth device is listed as the below
      
      T:  Bus=01 Lev=01 Prnt=01 Port=00 Cnt=01 Dev#= 27 Spd=480  MxCh= 0
      D:  Ver= 2.10 Cls=ef(misc ) Sub=02 Prot=01 MxPS=64 #Cfgs=  1
      P:  Vendor=0e8d ProdID=7925 Rev= 1.00
      S:  Manufacturer=MediaTek Inc.
      S:  Product=Wireless_Device
      S:  SerialNumber=000000000
      C:* #Ifs= 4 Cfg#= 1 Atr=e0 MxPwr=100mA
      A:  FirstIf#= 0 IfCount= 3 Cls=e0(wlcon) Sub=01 Prot=01
      I:* If#= 0 Alt= 0 #EPs= 5 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
      E:  Ad=81(I) Atr=03(Int.) MxPS=  16 Ivl=125us
      E:  Ad=01(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
      E:  Ad=82(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
      E:  Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
      E:  Ad=8f(I) Atr=03(Int.) MxPS=   2 Ivl=125us
      I:* If#= 1 Alt= 0 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
      E:  Ad=83(I) Atr=01(Isoc) MxPS=   0 Ivl=1ms
      E:  Ad=03(O) Atr=01(Isoc) MxPS=   0 Ivl=1ms
      I:  If#= 1 Alt= 1 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
      E:  Ad=83(I) Atr=01(Isoc) MxPS=   9 Ivl=1ms
      E:  Ad=03(O) Atr=01(Isoc) MxPS=   9 Ivl=1ms
      I:  If#= 1 Alt= 2 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
      E:  Ad=83(I) Atr=01(Isoc) MxPS=  17 Ivl=1ms
      E:  Ad=03(O) Atr=01(Isoc) MxPS=  17 Ivl=1ms
      I:  If#= 1 Alt= 3 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
      E:  Ad=83(I) Atr=01(Isoc) MxPS=  25 Ivl=1ms
      E:  Ad=03(O) Atr=01(Isoc) MxPS=  25 Ivl=1ms
      I:  If#= 1 Alt= 4 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
      E:  Ad=83(I) Atr=01(Isoc) MxPS=  33 Ivl=1ms
      E:  Ad=03(O) Atr=01(Isoc) MxPS=  33 Ivl=1ms
      I:  If#= 1 Alt= 5 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
      E:  Ad=83(I) Atr=01(Isoc) MxPS=  49 Ivl=1ms
      E:  Ad=03(O) Atr=01(Isoc) MxPS=  49 Ivl=1ms
      I:  If#= 1 Alt= 6 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=btusb
      E:  Ad=83(I) Atr=01(Isoc) MxPS=  63 Ivl=1ms
      E:  Ad=03(O) Atr=01(Isoc) MxPS=  63 Ivl=1ms
      I:* If#= 2 Alt= 0 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=(none)
      E:  Ad=8a(I) Atr=03(Int.) MxPS=  64 Ivl=125us
      E:  Ad=0a(O) Atr=03(Int.) MxPS=  64 Ivl=125us
      I:  If#= 2 Alt= 1 #EPs= 2 Cls=e0(wlcon) Sub=01 Prot=01 Driver=(none)
      E:  Ad=8a(I) Atr=03(Int.) MxPS= 512 Ivl=125us
      E:  Ad=0a(O) Atr=03(Int.) MxPS= 512 Ivl=125us
      I:* If#= 3 Alt= 0 #EPs= 9 Cls=ff(vend.) Sub=ff Prot=ff Driver=(none)
      E:  Ad=84(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
      E:  Ad=85(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
      E:  Ad=08(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
      E:  Ad=04(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
      E:  Ad=05(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
      E:  Ad=06(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
      E:  Ad=07(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
      E:  Ad=09(O) Atr=02(Bulk) MxPS= 512 Ivl=0ms
      E:  Ad=86(I) Atr=03(Int.) MxPS=   2 Ivl=125us
      Signed-off-by: default avatarPeter Tsao <peter.tsao@mediatek.com>
      Signed-off-by: default avatarLuiz Augusto von Dentz <luiz.von.dentz@intel.com>
      4c92ae75
    • Kiran K's avatar
      Bluetooth: btintel: Add support to reset bluetooth via ACPI DSM · 8f0a3786
      Kiran K authored
      New Intel platforms supports reset of Bluetooth device  via ACPI DSM
      methods. The legacy reset mechanism via GPIO will be deprecated in
      future. This patch checks the platform support for reset methods and if
      supported uses the same instead of legacy GPIO toggling method.
      
      ACPI firmware supports two types of reset method based on NIC card.
      (Discrete or Integrated).
      
      1. VSEC Type - Vendor Specific Extended Capability. Here  BT_EN and
         BT_IF_SELECT lines are driven by a register in PCH cluster. This
         interface is supported on discrete BT solution.
      
      2. WDISABLE2 - In this soluton, W_DISABLE2 pin in M.2 is connected to
         physical GPIO from PCH. The DSM interface shall toggle this to recover
         from  error.
      Signed-off-by: default avatarKiran K <kiran.k@intel.com>
      Signed-off-by: default avatarLuiz Augusto von Dentz <luiz.von.dentz@intel.com>
      8f0a3786
    • Sai Teja Aluvala's avatar
      Bluetooth: hci_qca: Add qcom devcoredump support · 06d3fdfc
      Sai Teja Aluvala authored
      Intercept debug exception events from QCA controller and put them into
      a devcoredump using hci devcoredump APIs of hci_core
      Signed-off-by: default avatarSai Teja Aluvala <quic_saluvala@quicinc.com>
      
      V2 -> V3:
      ---------
      changed hci_coredump_qca function
      
      V1 -> V2:
      ---------
      Updated to work with the updated HCI devcoredump API.
      Signed-off-by: default avatarLuiz Augusto von Dentz <luiz.von.dentz@intel.com>
      06d3fdfc
    • Sai Teja Aluvala's avatar
      Bluetooth: hci_qca: Add qcom devcoredump sysfs support · 6ce95a30
      Sai Teja Aluvala authored
      This patch implements the hci_qca driver side .coredump() callback to
      trigger a devcoredump via sysfs.
      Signed-off-by: default avatarSai Teja Aluvala <quic_saluvala@quicinc.com>
      
      v2 -> V3:
      --------
      Updated commit text
      
      v1 -> V2:
      --------
      Updated to work with the updated HCI devcoredump API.
      Signed-off-by: default avatarLuiz Augusto von Dentz <luiz.von.dentz@intel.com>
      6ce95a30
    • Iulia Tanasescu's avatar
      Bluetooth: ISO: Support multiple BIGs · 6a42e9bf
      Iulia Tanasescu authored
      This adds support for creating multiple BIGs. According to
      spec, each BIG shall have an unique handle, and each BIG should
      be associated with a different advertising handle. Otherwise,
      the LE Create BIG command will fail, with error code
      Command Disallowed (for reusing a BIG handle), or
      Unknown Advertising Identifier (for reusing an advertising
      handle).
      
      The btmon snippet below shows an exercise for creating two BIGs
      for the same controller, by opening two isotest instances with
      the following command:
          tools/isotest -i hci0 -s 00:00:00:00:00:00
      
      < HCI Command: LE Create Broadcast Isochronous Group (0x08|0x0068) plen 31
              Handle: 0x00
              Advertising Handle: 0x01
              Number of BIS: 1
              SDU Interval: 10000 us (0x002710)
              Maximum SDU size: 40
              Maximum Latency: 10 ms (0x000a)
              RTN: 0x02
              PHY: LE 2M (0x02)
              Packing: Sequential (0x00)
              Framing: Unframed (0x00)
              Encryption: 0x00
              Broadcast Code: 00000000000000000000000000000000
      
      > HCI Event: Command Status (0x0f) plen 4
            LE Create Broadcast Isochronous Group (0x08|0x0068) ncmd 1
              Status: Success (0x00)
      
      > HCI Event: LE Meta Event (0x3e) plen 21
            LE Broadcast Isochronous Group Complete (0x1b)
              Status: Success (0x00)
              Handle: 0x00
              BIG Synchronization Delay: 912 us (0x000390)
              Transport Latency: 912 us (0x000390)
              PHY: LE 2M (0x02)
              NSE: 3
              BN: 1
              PTO: 1
              IRC: 3
              Maximum PDU: 40
              ISO Interval: 10.00 msec (0x0008)
              Connection Handle #0: 10
      
      < HCI Command: LE Create Broadcast Isochronous Group (0x08|0x0068)
              Handle: 0x01
              Advertising Handle: 0x02
              Number of BIS: 1
              SDU Interval: 10000 us (0x002710)
              Maximum SDU size: 40
              Maximum Latency: 10 ms (0x000a)
              RTN: 0x02
              PHY: LE 2M (0x02)
              Packing: Sequential (0x00)
              Framing: Unframed (0x00)
              Encryption: 0x00
              Broadcast Code: 00000000000000000000000000000000
      
      > HCI Event: Command Status (0x0f) plen 4
            LE Create Broadcast Isochronous Group (0x08|0x0068) ncmd 1
              Status: Success (0x00)
      Signed-off-by: default avatarIulia Tanasescu <iulia.tanasescu@nxp.com>
      Signed-off-by: default avatarLuiz Augusto von Dentz <luiz.von.dentz@intel.com>
      6a42e9bf
    • Luiz Augusto von Dentz's avatar
      Bluetooth: hci_sock: Forward credentials to monitor · 69ae5065
      Luiz Augusto von Dentz authored
      This stores scm_creds into hci_skb_cb so they can be properly forwarded
      to the likes of btmon which is then able to print information about the
      process who is originating the traffic:
      
      bluetoothd[35]: @ MGMT Command: Rea.. (0x0001) plen 0  {0x0001}
      @ MGMT Event: Command Complete (0x0001) plen 6         {0x0001}
            Read Management Version Information (0x0001) plen 3
      
      bluetoothd[35]: < ACL Data T.. flags 0x00 dlen 41
            ATT: Write Command (0x52) len 36
              Handle: 0x0043 Type: ASE Control Point (0x2bc6)
                Data: 020203000110270000022800020a00409c0001000110270000022800020a00409c00
                  Opcode: QoS Configuration (0x02)
                  Number of ASE(s): 2
                  ASE: #0
                  ASE ID: 0x03
                  CIG ID: 0x00
                  CIS ID: 0x01
                  SDU Interval: 10000 usec
                  Framing: Unframed (0x00)
                  PHY: 0x02
                  LE 2M PHY (0x02)
                  Max SDU: 40
                  RTN: 2
                  Max Transport Latency: 10
                  Presentation Delay: 40000 us
                  ASE: #1
                  ASE ID: 0x01
                  CIG ID: 0x00
                  CIS ID: 0x01
                  SDU Interval: 10000 usec
                  Framing: Unframed (0x00)
                  PHY: 0x02
                  LE 2M PHY (0x02)
                  Max SDU: 40
                  RTN: 2
                  Max Transport Latency: 10
                  Presentation Delay: 40000 us
      Signed-off-by: default avatarLuiz Augusto von Dentz <luiz.von.dentz@intel.com>
      69ae5065
    • Luiz Augusto von Dentz's avatar
      Bluetooth: Init sk_peer_* on bt_sock_alloc · 464c702f
      Luiz Augusto von Dentz authored
      This makes sure peer information is always available via sock when using
      bt_sock_alloc.
      Signed-off-by: default avatarLuiz Augusto von Dentz <luiz.von.dentz@intel.com>
      464c702f
    • Luiz Augusto von Dentz's avatar
      Bluetooth: Consolidate code around sk_alloc into a helper function · 6bfa273e
      Luiz Augusto von Dentz authored
      This consolidates code around sk_alloc into bt_sock_alloc which does
      take care of common initialization.
      Signed-off-by: default avatarLuiz Augusto von Dentz <luiz.von.dentz@intel.com>
      6bfa273e
    • Max Chou's avatar
      Bluetooth: btrtl: Correct the length of the HCI command for drop fw · 6b42f04e
      Max Chou authored
      The original code did not determine the length value of the HCI command
      for drop fw even there's no parameter needed. In this commit, use struct
      hci_command_hdr to manage opcode and length. It would be more regular and
      more readable.
      Suggested-by: default avatarAlex Lu <alex_lu@realsil.com.cn>
      Signed-off-by: default avatarMax Chou <max.chou@realtek.com>
      Signed-off-by: default avatarLuiz Augusto von Dentz <luiz.von.dentz@intel.com>
      6b42f04e
    • Pauli Virtanen's avatar
      Bluetooth: ISO: do not emit new LE Create CIS if previous is pending · 7f74563e
      Pauli Virtanen authored
      LE Create CIS command shall not be sent before all CIS Established
      events from its previous invocation have been processed. Currently it is
      sent via hci_sync but that only waits for the first event, but there can
      be multiple.
      
      Make it wait for all events, and simplify the CIS creation as follows:
      
      Add new flag HCI_CONN_CREATE_CIS, which is set if Create CIS has been
      sent for the connection but it is not yet completed.
      
      Make BT_CONNECT state to mean the connection wants Create CIS.
      
      On events after which new Create CIS may need to be sent, send it if
      possible and some connections need it. These events are:
      hci_connect_cis, iso_connect_cfm, hci_cs_le_create_cis,
      hci_le_cis_estabilished_evt.
      
      The Create CIS status/completion events shall queue new Create CIS only
      if at least one of the connections transitions away from BT_CONNECT, so
      that we don't loop if controller is sending bogus events.
      
      This fixes sending multiple CIS Create for the same CIS in the
      "ISO AC 6(i) - Success" BlueZ test case:
      
      < HCI Command: LE Create Co.. (0x08|0x0064) plen 9  #129 [hci0]
              Number of CIS: 2
              CIS Handle: 257
              ACL Handle: 42
              CIS Handle: 258
              ACL Handle: 42
      > HCI Event: Command Status (0x0f) plen 4           #130 [hci0]
            LE Create Connected Isochronous Stream (0x08|0x0064) ncmd 1
              Status: Success (0x00)
      > HCI Event: LE Meta Event (0x3e) plen 29           #131 [hci0]
            LE Connected Isochronous Stream Established (0x19)
              Status: Success (0x00)
              Connection Handle: 257
              ...
      < HCI Command: LE Setup Is.. (0x08|0x006e) plen 13  #132 [hci0]
              ...
      > HCI Event: Command Complete (0x0e) plen 6         #133 [hci0]
            LE Setup Isochronous Data Path (0x08|0x006e) ncmd 1
              ...
      < HCI Command: LE Create Co.. (0x08|0x0064) plen 5  #134 [hci0]
              Number of CIS: 1
              CIS Handle: 258
              ACL Handle: 42
      > HCI Event: Command Status (0x0f) plen 4           #135 [hci0]
            LE Create Connected Isochronous Stream (0x08|0x0064) ncmd 1
              Status: ACL Connection Already Exists (0x0b)
      > HCI Event: LE Meta Event (0x3e) plen 29           #136 [hci0]
            LE Connected Isochronous Stream Established (0x19)
              Status: Success (0x00)
              Connection Handle: 258
              ...
      
      Fixes: c09b80be ("Bluetooth: hci_conn: Fix not waiting for HCI_EVT_LE_CIS_ESTABLISHED")
      Signed-off-by: default avatarPauli Virtanen <pav@iki.fi>
      Signed-off-by: default avatarLuiz Augusto von Dentz <luiz.von.dentz@intel.com>
      7f74563e
    • Iulia Tanasescu's avatar
      Bluetooth: ISO: Add support for connecting multiple BISes · a0bfde16
      Iulia Tanasescu authored
      It is required for some configurations to have multiple BISes as part
      of the same BIG.
      
      Similar to the flow implemented for unicast, DEFER_SETUP will also be
      used to bind multiple BISes for the same BIG, before starting Periodic
      Advertising and creating the BIG.
      
      The user will have to open a new socket for each BIS. By setting the
      BT_DEFER_SETUP socket option and calling connect, a new connection
      will be added for the BIG and advertising handle set by the socket
      QoS parameters. Since all BISes will be bound for the same BIG and
      advertising handle, the socket QoS options and base parameters should
      match for all connections.
      
      By calling connect on a socket that does not have the BT_DEFER_SETUP
      option set, periodic advertising will be started and the BIG will
      be created, with a BIS for each previously bound connection. Since
      a BIG cannot be reconfigured with additional BISes after creation,
      no more connections can be bound for the BIG after the start periodic
      advertising and create BIG commands have been queued.
      
      The bis_cleanup function has also been updated, so that the advertising
      set and the BIG will not be terminated unless there are no more
      bound or connected BISes.
      
      The HCI_CONN_BIG_CREATED connection flag has been added to indicate
      that the BIG has been successfully created. This flag is checked at
      bis_cleanup, so that the BIG is only terminated if the
      HCI_LE_Create_BIG_Complete has been received.
      
      This implementation has been tested on hardware, using the "isotest"
      tool with an additional command line option, to specify the number of
      BISes to create as part of the desired BIG:
      
          tools/isotest -i hci0 -s 00:00:00:00:00:00 -N 2 -G 1 -T 1
      
      The btmon log shows that a BIG containing 2 BISes has been created:
      
      < HCI Command: LE Create Broadcast Isochronous Group (0x08|0x0068) plen 31
              Handle: 0x01
              Advertising Handle: 0x01
              Number of BIS: 2
              SDU Interval: 10000 us (0x002710)
              Maximum SDU size: 40
              Maximum Latency: 10 ms (0x000a)
              RTN: 0x02
              PHY: LE 2M (0x02)
              Packing: Sequential (0x00)
              Framing: Unframed (0x00)
              Encryption: 0x00
              Broadcast Code: 00000000000000000000000000000000
      
      > HCI Event: Command Status (0x0f) plen 4
            LE Create Broadcast Isochronous Group (0x08|0x0068) ncmd 1
              Status: Success (0x00)
      
      > HCI Event: LE Meta Event (0x3e) plen 23
            LE Broadcast Isochronous Group Complete (0x1b)
              Status: Success (0x00)
              Handle: 0x01
              BIG Synchronization Delay: 1974 us (0x0007b6)
              Transport Latency: 1974 us (0x0007b6)
              PHY: LE 2M (0x02)
              NSE: 3
              BN: 1
              PTO: 1
              IRC: 3
              Maximum PDU: 40
              ISO Interval: 10.00 msec (0x0008)
              Connection Handle #0: 10
              Connection Handle #1: 11
      
      < HCI Command: LE Setup Isochronous Data Path (0x08|0x006e) plen 13
              Handle: 10
              Data Path Direction: Input (Host to Controller) (0x00)
              Data Path: HCI (0x00)
              Coding Format: Transparent (0x03)
              Company Codec ID: Ericsson Technology Licensing (0)
              Vendor Codec ID: 0
              Controller Delay: 0 us (0x000000)
              Codec Configuration Length: 0
              Codec Configuration:
      
      > HCI Event: Command Complete (0x0e) plen 6
            LE Setup Isochronous Data Path (0x08|0x006e) ncmd 1
              Status: Success (0x00)
              Handle: 10
      
      < HCI Command: LE Setup Isochronous Data Path (0x08|0x006e) plen 13
              Handle: 11
              Data Path Direction: Input (Host to Controller) (0x00)
              Data Path: HCI (0x00)
              Coding Format: Transparent (0x03)
              Company Codec ID: Ericsson Technology Licensing (0)
              Vendor Codec ID: 0
              Controller Delay: 0 us (0x000000)
              Codec Configuration Length: 0
              Codec Configuration:
      
      > HCI Event: Command Complete (0x0e) plen 6
            LE Setup Isochronous Data Path (0x08|0x006e) ncmd 1
              Status: Success (0x00)
              Handle: 11
      
      < ISO Data TX: Handle 10 flags 0x02 dlen 44
      
      < ISO Data TX: Handle 11 flags 0x02 dlen 44
      
      > HCI Event: Number of Completed Packets (0x13) plen 5
              Num handles: 1
              Handle: 10
              Count: 1
      
      > HCI Event: Number of Completed Packets (0x13) plen 5
              Num handles: 1
              Handle: 11
              Count: 1
      Signed-off-by: default avatarIulia Tanasescu <iulia.tanasescu@nxp.com>
      Signed-off-by: default avatarLuiz Augusto von Dentz <luiz.von.dentz@intel.com>
      a0bfde16