All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Tumkur Narayan, Chethan" <chethan.tumkur.narayan@intel.com>
To: Luiz Augusto von Dentz <luiz.dentz@gmail.com>
Cc: "K, Kiran" <kiran.k@intel.com>,
	"linux-bluetooth@vger.kernel.org"
	<linux-bluetooth@vger.kernel.org>,
	"Pierres, Arnaud" <arnaud.pierres@intel.com>
Subject: RE: [PATCH v13 12/12] Bluetooth: Allow usb to auto-suspend when SCO use non-HCI transport
Date: Fri, 3 Sep 2021 06:57:12 +0000	[thread overview]
Message-ID: <SJ0PR11MB48635425E44A37C292947DFFD8CF9@SJ0PR11MB4863.namprd11.prod.outlook.com> (raw)
In-Reply-To: <CABBYNZLgH81VkkLyQwfxuZpCsiTvt-RCkNpArGLiCRy69e0tww@mail.gmail.com>

Hi Luiz,

> -----Original Message-----
> From: Luiz Augusto von Dentz <luiz.dentz@gmail.com>
> Sent: Friday, September 3, 2021 4:07 AM
> To: Tumkur Narayan, Chethan <chethan.tumkur.narayan@intel.com>
> Cc: K, Kiran <kiran.k@intel.com>; linux-bluetooth@vger.kernel.org; Pierres,
> Arnaud <arnaud.pierres@intel.com>
> Subject: Re: [PATCH v13 12/12] Bluetooth: Allow usb to auto-suspend when SCO
> use non-HCI transport
> 
> Hi Chethan,
> 
> On Wed, Sep 1, 2021 at 8:52 PM Tumkur Narayan, Chethan
> <chethan.tumkur.narayan@intel.com> wrote:
> >
> > Hi Luiz,
> >
> > > -----Original Message-----
> > > From: Luiz Augusto von Dentz <luiz.dentz@gmail.com>
> > > Sent: Thursday, September 2, 2021 5:24 AM
> > > To: K, Kiran <kiran.k@intel.com>
> > > Cc: linux-bluetooth@vger.kernel.org; Tumkur Narayan, Chethan
> > > <chethan.tumkur.narayan@intel.com>
> > > Subject: Re: [PATCH v13 12/12] Bluetooth: Allow usb to auto-suspend
> > > when SCO use non-HCI transport
> > >
> > > Hi Kiran,
> > >
> > > On Tue, Aug 31, 2021 at 4:54 AM Kiran K <kiran.k@intel.com> wrote:
> > > >
> > > > From: Chethan T N <chethan.tumkur.narayan@intel.com>
> > > >
> > > > Currently usb tranport is not allowed to suspend when SCO over HCI
> > > > tranport is active.
> > > >
> > > > This patch shall enable the usb tranport to suspend when SCO link
> > > > use non-HCI transport
> > > >
> > > > Signed-off-by: Chethan T N <chethan.tumkur.narayan@intel.com>
> > > > Signed-off-by: Kiran K <kiran.k@intel.com>
> > > > ---
> > > >
> > > > Notes:
> > > >     changes in v13:
> > > >     - suspend usb in HFP offload use case
> > > >
> > > >  drivers/bluetooth/btintel.c       |  2 +-
> > > >  include/net/bluetooth/bluetooth.h |  4 ++++
> > > >  net/bluetooth/hci_event.c         | 20 +++++++++++---------
> > > >  net/bluetooth/sco.c               |  2 +-
> > > >  4 files changed, 17 insertions(+), 11 deletions(-)
> > > >
> > > > diff --git a/drivers/bluetooth/btintel.c
> > > > b/drivers/bluetooth/btintel.c index 6091b691ddc2..2d64e289cf6e
> > > > 100644
> > > > --- a/drivers/bluetooth/btintel.c
> > > > +++ b/drivers/bluetooth/btintel.c
> > > > @@ -2215,7 +2215,7 @@ static int
> > > > btintel_get_codec_config_data(struct
> > > > hci_dev *hdev,  static int btintel_get_data_path_id(struct hci_dev
> > > > *hdev, __u8 *data_path_id)  {
> > > >         /* Intel uses 1 as data path id for all the usecases */
> > > > -       *data_path_id = 1;
> > > > +       *data_path_id = BT_SCO_PCM_PATH;
> > > >         return 0;
> > > >  }
> > > >
> > > > diff --git a/include/net/bluetooth/bluetooth.h
> > > > b/include/net/bluetooth/bluetooth.h
> > > > index c1fa90fb7502..9e2745863b33 100644
> > > > --- a/include/net/bluetooth/bluetooth.h
> > > > +++ b/include/net/bluetooth/bluetooth.h
> > > > @@ -177,6 +177,10 @@ struct bt_codecs {
> > > >  #define CODING_FORMAT_TRANSPARENT      0x03
> > > >  #define CODING_FORMAT_MSBC             0x05
> > > >
> > > > +/* Audio data transport path used for SCO */ #define
> > > > +BT_SCO_HCI_PATH
> > > > +0x00 #define BT_SCO_PCM_PATH 0x01
> > >
> > > If this is in fact vendor specific perhaps you should be declared in
> > > btintel.h not here.
> > This is defined the Host Controller Interface assigned numbers, page no.3
> "Transport Layer"-
> https://btprodspecificationrefs.blob.core.windows.net/assigned-
> numbers/Assigned%20Number%20Types/Host%20Controller%20Interface.pdf.
> So defined in bluetooth.h, let me know if you think otherwise.
> 
> BLUETOOTH CORE SPECIFICATION Version 5.2 | Vol 4, Part E page 2221
> Data_Path_ID:
> 0x01 to 0xFE Logical channel number; the meaning is vendor-specific.
> 
> 
> BLUETOOTH CORE SPECIFICATION Version 5.2 | Vol 4, Part E page 2022
> Input_Data_Path:
> 0x01 to 0xFE Logical_Channel_Number. The meaning of the logical channels will
> be vendor specific.
> Output_Data_Path:
> 0x01 to 0xFE Logical_Channel_Number. The meaning of the logical channels will
> be vendor specific.
> 
Ack, will remove/move these #defines accordingly.
> > >
> > > > +
> > > >  __printf(1, 2)
> > > >  void bt_info(const char *fmt, ...);  __printf(1, 2) diff --git
> > > > a/net/bluetooth/hci_event.c b/net/bluetooth/hci_event.c index
> > > > b48e24629fa4..7ff11cba89cf 100644
> > > > --- a/net/bluetooth/hci_event.c
> > > > +++ b/net/bluetooth/hci_event.c
> > > > @@ -4516,15 +4516,17 @@ static void
> > > > hci_sync_conn_complete_evt(struct hci_dev *hdev,
> > > >
> > > >         bt_dev_dbg(hdev, "SCO connected with air mode: %02x",
> > > > ev->air_mode);
> > > >
> > > > -       switch (ev->air_mode) {
> > > > -       case 0x02:
> > > > -               if (hdev->notify)
> > > > -                       hdev->notify(hdev, HCI_NOTIFY_ENABLE_SCO_CVSD);
> > > > -               break;
> > > > -       case 0x03:
> > > > -               if (hdev->notify)
> > > > -                       hdev->notify(hdev, HCI_NOTIFY_ENABLE_SCO_TRANSP);
> > > > -               break;
> > > > +       if (conn->codec.data_path == BT_SCO_HCI_PATH) {
> > > > +               switch (ev->air_mode) {
> > > > +               case 0x02:
> > > > +                       if (hdev->notify)
> > > > +                               hdev->notify(hdev, HCI_NOTIFY_ENABLE_SCO_CVSD);
> > > > +                       break;
> > > > +               case 0x03:
> > > > +                       if (hdev->notify)
> > > > +                               hdev->notify(hdev, HCI_NOTIFY_ENABLE_SCO_TRANSP);
> > > > +                       break;
> > > > +               }
> > >
> > > Hmm I think we might need to notify the driver to enable PCM routing
> > > so the likes of btusb can call
> > > usb_disable_endpoint/usb_enable_endpoint for example since in theory
> > > userspace may choose to switch from offload and vice-versa, note
> > > without calling usb_disable_endpoint there might not be much power
> > > saving after all since the endpoint will remain active or do we
> > > actually have a good explanation why it shall not be called when
> > > using PCM routing? Note that usb_set_interface will call
> > > usb_enable_interface that will then call usb_enable_endpoint so
> > > perhaps we need to call usb_disable_interface, either way we can't assume
> the platform will be restricted to only use one or the other.
> > Ack, Does it make sense to define and notify events
> "HCI_NOTIFY_DISABLE_SCO_USB_INTF ",
> "HCI_NOTIFY_ENABLE_SCO_USB_INTF " accordingly and handle this in btusb
> driver by disabling/enabling the ISOC endpoint respectively. That will serve the
> purpose or switch between software to hardware.
> 
> Or perhaps we should switch to notify the actual data path, in fact there could
> be situations where we have both hardware offload and software based if we
> were dealing with multiple connections in which case we would need to check if
> there is any connection using HCI routing before disabling it.
> 
Actually, there are no API's from USB core exposed to disable the interface or endpoints to any device driver. However as discussed setting the altsetting to 0 to the ISOC endpoint would be feasible and by doing so no memory and bandwidth shall be allocated for the interface. 

Likewise when it comes to switching from offload to non-offload or vice versa  the same logic of resetting the ISOC endpoint to altsetting 0 makes reliable on SCO disconnection and also I checked the flow where on every SCO disconnection in the clean up procedure "HCI_NOTIFY_DISABLE_SCO" shall be notify to the driver that shall reset ISOC interface with altsetting 0.  Having said that no additional handling of disabling the ISOC interface would be required. 

I shall  re-work and send the updated patch.
> > >
> > > >         }
> > > >
> > > >         hci_connect_cfm(conn, ev->status); diff --git
> > > > a/net/bluetooth/sco.c b/net/bluetooth/sco.c index
> > > > 004bce2b5eca..f35c12ca6aa5 100644
> > > > --- a/net/bluetooth/sco.c
> > > > +++ b/net/bluetooth/sco.c
> > > > @@ -506,7 +506,7 @@ static struct sock *sco_sock_alloc(struct net
> > > > *net,
> > > struct socket *sock,
> > > >         sco_pi(sk)->codec.id = CODING_FORMAT_CVSD;
> > > >         sco_pi(sk)->codec.cid = 0xffff;
> > > >         sco_pi(sk)->codec.vid = 0xffff;
> > > > -       sco_pi(sk)->codec.data_path = 0x00;
> > > > +       sco_pi(sk)->codec.data_path = BT_SCO_HCI_PATH;
> > > >
> > > >         bt_sock_link(&sco_sk_list, sk);
> > > >         return sk;
> > > > --
> > > > 2.17.1
> > > >
> > >
> > >
> > > --
> > > Luiz Augusto von Dentz
> 
> 
> 
> --
> Luiz Augusto von Dentz

  reply	other threads:[~2021-09-03  6:57 UTC|newest]

Thread overview: 20+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-08-31 11:56 [PATCH v13 01/12] Bluetooth: Enumerate local supported codec and cache details Kiran K
2021-08-31 11:56 ` [PATCH v13 02/12] Bluetooth: Add support for Read Local Supported Codecs V2 Kiran K
2021-08-31 11:56 ` [PATCH v13 03/12] Bluetooth: btintel: Read supported offload use cases Kiran K
2021-08-31 11:56 ` [PATCH v13 04/12] Bluetooth: Allow querying of supported offload codecs over SCO socket Kiran K
2021-08-31 11:56 ` [PATCH v13 05/12] Bluetooth: btintel: Define callback to fetch data_path_id Kiran K
2021-08-31 11:56 ` [PATCH v13 06/12] Bluetooth: Allow setting of codec for HFP offload use case Kiran K
2021-08-31 11:56 ` [PATCH v13 07/12] Bluetooth: Add support for HCI_Enhanced_Setup_Synchronous_Connection command Kiran K
2021-08-31 11:56 ` [PATCH v13 08/12] Bluetooth: Configure codec for HFP offload use case Kiran K
2021-08-31 11:56 ` [PATCH v13 09/12] Bluetooth: btintel: Define a callback to fetch codec config data Kiran K
2021-08-31 11:56 ` [PATCH v13 10/12] Bluetooth: Add support for msbc coding format Kiran K
2021-08-31 11:56 ` [PATCH v13 11/12] Bluetooth: Add offload feature under experimental flag Kiran K
2021-08-31 11:56 ` [PATCH v13 12/12] Bluetooth: Allow usb to auto-suspend when SCO use non-HCI transport Kiran K
2021-09-01 23:54   ` Luiz Augusto von Dentz
2021-09-02  3:52     ` Tumkur Narayan, Chethan
2021-09-02 22:36       ` Luiz Augusto von Dentz
2021-09-03  6:57         ` Tumkur Narayan, Chethan [this message]
2021-09-02  9:37     ` Marcel Holtmann
2021-09-02 22:37       ` Luiz Augusto von Dentz
2021-09-10  7:35         ` Marcel Holtmann
2021-08-31 19:09 ` [v13,01/12] Bluetooth: Enumerate local supported codec and cache details bluez.test.bot

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=SJ0PR11MB48635425E44A37C292947DFFD8CF9@SJ0PR11MB4863.namprd11.prod.outlook.com \
    --to=chethan.tumkur.narayan@intel.com \
    --cc=arnaud.pierres@intel.com \
    --cc=kiran.k@intel.com \
    --cc=linux-bluetooth@vger.kernel.org \
    --cc=luiz.dentz@gmail.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.