2020-09-10 06:05:03

by Joseph Hwang

[permalink] [raw]
Subject: [PATCH v3 0/2] To support the HFP WBS, a chip vendor may choose a particular

USB alternate seeting of which the packet size is distinct.
The patches are to expose the packet size to user space so that
the user space does not need to hard code those values.

We have verified this patch on Chromebooks which use
- Realtek 8822CE controller with USB alt setting 1
- Intel controller with USB alt setting 6
Our user space audio server, cras, can get the correct
packet length from the socket option.

Changes in v3:
- Set hdev->sco_mtu to rp->sco_mtu if the latter is smaller.
- Fixed the commit message.

Changes in v2:
- Used sco_mtu instead of a new sco_pkt_len member in hdev.
- Do not overwrite hdev->sco_mtu in hci_cc_read_buffer_size
if it has been set in the USB interface.
- Used BT_SNDMTU/BT_RCVMTU instead of creating a new opt name.
- Used the existing conn->mtu instead of creating a new member
in struct sco_pinfo.
- Noted that the old SCO_OPTIONS in sco_sock_getsockopt_old()
would just work as it uses sco_pi(sk)->conn->mtu.

Joseph Hwang (2):
Bluetooth: btusb: define HCI packet sizes of USB Alts
Bluetooth: sco: new getsockopt options BT_SNDMTU/BT_RCVMTU

drivers/bluetooth/btusb.c | 45 +++++++++++++++++++++++++++++----------
net/bluetooth/hci_event.c | 14 +++++++++++-
net/bluetooth/sco.c | 6 ++++++
3 files changed, 53 insertions(+), 12 deletions(-)

--
2.28.0.618.gf4bc123cb7-goog


2020-09-10 06:07:52

by Joseph Hwang

[permalink] [raw]
Subject: [PATCH v3 2/2] Bluetooth: sco: new getsockopt options BT_SNDMTU/BT_RCVMTU

This patch defines new getsockopt options BT_SNDMTU/BT_RCVMTU
for SCO socket to be compatible with other bluetooth sockets.
These new options return the same value as option SCO_OPTIONS
which is already present on existing kernels.

Reviewed-by: Alain Michaud <[email protected]>
Reviewed-by: Abhishek Pandit-Subedi <[email protected]>
Signed-off-by: Joseph Hwang <[email protected]>
---

Changes in v3:
- Fixed the commit message.

Changes in v2:
- Used BT_SNDMTU/BT_RCVMTU instead of creating a new opt name.
- Used the existing conn->mtu instead of creating a new member
in struct sco_pinfo.
- Noted that the old SCO_OPTIONS in sco_sock_getsockopt_old()
would just work as it uses sco_pi(sk)->conn->mtu.

net/bluetooth/sco.c | 6 ++++++
1 file changed, 6 insertions(+)

diff --git a/net/bluetooth/sco.c b/net/bluetooth/sco.c
index dcf7f96ff417e6..79ffcdef0b7ad5 100644
--- a/net/bluetooth/sco.c
+++ b/net/bluetooth/sco.c
@@ -1001,6 +1001,12 @@ static int sco_sock_getsockopt(struct socket *sock, int level, int optname,
err = -EFAULT;
break;

+ case BT_SNDMTU:
+ case BT_RCVMTU:
+ if (put_user(sco_pi(sk)->conn->mtu, (u32 __user *)optval))
+ err = -EFAULT;
+ break;
+
default:
err = -ENOPROTOOPT;
break;
--
2.28.0.618.gf4bc123cb7-goog

2020-09-10 08:34:58

by Pali Rohár

[permalink] [raw]
Subject: Re: [PATCH v3 2/2] Bluetooth: sco: new getsockopt options BT_SNDMTU/BT_RCVMTU

On Thursday 10 September 2020 14:04:02 Joseph Hwang wrote:
> This patch defines new getsockopt options BT_SNDMTU/BT_RCVMTU
> for SCO socket to be compatible with other bluetooth sockets.
> These new options return the same value as option SCO_OPTIONS
> which is already present on existing kernels.
>
> Reviewed-by: Alain Michaud <[email protected]>
> Reviewed-by: Abhishek Pandit-Subedi <[email protected]>
> Signed-off-by: Joseph Hwang <[email protected]>

Looks good,

Reviewed-by: Pali Rohár <[email protected]>

> ---
>
> Changes in v3:
> - Fixed the commit message.
>
> Changes in v2:
> - Used BT_SNDMTU/BT_RCVMTU instead of creating a new opt name.
> - Used the existing conn->mtu instead of creating a new member
> in struct sco_pinfo.
> - Noted that the old SCO_OPTIONS in sco_sock_getsockopt_old()
> would just work as it uses sco_pi(sk)->conn->mtu.
>
> net/bluetooth/sco.c | 6 ++++++
> 1 file changed, 6 insertions(+)
>
> diff --git a/net/bluetooth/sco.c b/net/bluetooth/sco.c
> index dcf7f96ff417e6..79ffcdef0b7ad5 100644
> --- a/net/bluetooth/sco.c
> +++ b/net/bluetooth/sco.c
> @@ -1001,6 +1001,12 @@ static int sco_sock_getsockopt(struct socket *sock, int level, int optname,
> err = -EFAULT;
> break;
>
> + case BT_SNDMTU:
> + case BT_RCVMTU:
> + if (put_user(sco_pi(sk)->conn->mtu, (u32 __user *)optval))
> + err = -EFAULT;
> + break;
> +
> default:
> err = -ENOPROTOOPT;
> break;
> --
> 2.28.0.618.gf4bc123cb7-goog
>

2020-09-11 07:09:19

by Marcel Holtmann

[permalink] [raw]
Subject: Re: [PATCH v3 2/2] Bluetooth: sco: new getsockopt options BT_SNDMTU/BT_RCVMTU

Hi Joseph,

> This patch defines new getsockopt options BT_SNDMTU/BT_RCVMTU
> for SCO socket to be compatible with other bluetooth sockets.
> These new options return the same value as option SCO_OPTIONS
> which is already present on existing kernels.
>
> Reviewed-by: Alain Michaud <[email protected]>
> Reviewed-by: Abhishek Pandit-Subedi <[email protected]>
> Signed-off-by: Joseph Hwang <[email protected]>
> ---
>
> Changes in v3:
> - Fixed the commit message.
>
> Changes in v2:
> - Used BT_SNDMTU/BT_RCVMTU instead of creating a new opt name.
> - Used the existing conn->mtu instead of creating a new member
> in struct sco_pinfo.
> - Noted that the old SCO_OPTIONS in sco_sock_getsockopt_old()
> would just work as it uses sco_pi(sk)->conn->mtu.
>
> net/bluetooth/sco.c | 6 ++++++
> 1 file changed, 6 insertions(+)

patch has been applied to bluetooth-next tree.

Regards

Marcel