linux-bluetooth.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Alain Michaud <alainmichaud@google.com>
To: Marcel Holtmann <marcel@holtmann.org>
Cc: Alain Michaud <alainm@chromium.org>,
	BlueZ <linux-bluetooth@vger.kernel.org>
Subject: Re: [PATCH v2] Bluetooth: le_supported_roles experimental feature
Date: Thu, 2 Jul 2020 13:37:31 -0400	[thread overview]
Message-ID: <CALWDO_VcbYuWV7yoJBNM17up8Wb+TXnYQMAe9oexhv3zFt5y0g@mail.gmail.com> (raw)
In-Reply-To: <CALWDO_Wf5gftarhsxq-itzWhvtjj171hVYezsRN-GU_dv-zaVg@mail.gmail.com>

On Thu, Jul 2, 2020 at 11:01 AM Alain Michaud <alainmichaud@google.com> wrote:
>
> Resending as plaintext.
>
>
> On Thu, Jul 2, 2020 at 10:59 AM Alain Michaud <alainmichaud@google.com> wrote:
> >
> > Hi Marcel
> >
> > On Thu, Jul 2, 2020 at 9:18 AM Marcel Holtmann <marcel@holtmann.org> wrote:
> >>
> >> Hi Alain,
> >>
> >> > This patch adds an le_supported_roles features which allows a
> >> > clients to determine if the controller is able to support peripheral and
> >> > central connections separately and at the same time.
> >> >
> >> > Signed-off-by: Alain Michaud <alainm@chromium.org>
> >> > ---
> >> >
> >> > Changes in v2:
> >> > - Slight change of design based on offline feedback
> >> >
> >> > net/bluetooth/mgmt.c | 36 +++++++++++++++++++++++++++++++++++-
> >> > 1 file changed, 35 insertions(+), 1 deletion(-)
> >> >
> >> > diff --git a/net/bluetooth/mgmt.c b/net/bluetooth/mgmt.c
> >> > index 5e9b9728eeac..c13fcc21745f 100644
> >> > --- a/net/bluetooth/mgmt.c
> >> > +++ b/net/bluetooth/mgmt.c
> >> > @@ -3753,10 +3753,36 @@ static const u8 debug_uuid[16] = {
> >> > };
> >> > #endif
> >> >
> >> > +/* 671b10b5-42c0-4696-9227-eb28d1b049d6 */
> >> > +static const u8 le_supported_roles[16] = {
> >> > +     0xd6, 0x49, 0xb0, 0xd1, 0x28, 0xeb, 0x27, 0x92,
> >> > +     0x96, 0x46, 0xc0, 0x42, 0xb5, 0x10, 0x1b, 0x67,
> >> > +};
> >> > +
> >> > +static u32 get_le_roles_flags(struct hci_dev *hdev)
> >> > +{
> >> > +     u32 flags = 0;
> >> > +
> >> > +     /* Central connections supported */
> >> > +     if (hdev->le_states[4] & 0x08)
> >> > +             flags |= BIT(0);
> >> > +
> >> > +     /* Peripheral connections supported */
> >> > +     if (hdev->le_states[4] & 0x40)
> >> > +             flags |= BIT(1);
> >> > +
> >> > +     /* Simult central and peripheral connections supported */
> >> > +     if (test_bit(HCI_QUIRK_VALID_LE_STATES, &hdev->quirks) &&
> >> > +         (hdev->le_states[3] & 0x10))
> >> > +             flags |= BIT(2);
> >> > +
> >> > +     return flags;
> >> > +}
> >>
> >> this is not what we can do here. The flags are defined like this.
> >>
> >>         The following bits are defined for the Flags parameter:
> >>
> >>                 0       Feature active
> >>                 1       Causes change in supported settings
> >>
> >> And I want these flags for generic handling of experimental features. Individual features can not overwrite it.
> >>
> >> So if you only want to support a the “read" functionality, then something like this please.
> >>
> >>         if ((hdev->le_states[4] & 0x08) &&      /* Central */
> >>             (hdev->le_states[4] & 0x40) &&      /* Peripheral */
> >>             (hdev->le_states[3] & 0x10) &&      /* Simultaneous */
> >>             test_bit(HCI_QUIRK_VALID_LE_STATES, &hdev->quirks))
> >>                 flags |= BIT(0);
> >>
> > OK, Since the userspace Api we discussed reports individual states, would you suggest if LE is supported that the Central and Peripheral roles are supported and just use this to query the simultaneous support? Also, seems like what you are suggesting looks a lot like v1.
> >
> >>
> >> > +
> >> > static int read_exp_features_info(struct sock *sk, struct hci_dev *hdev,
> >> >                                 void *data, u16 data_len)
> >> > {
> >> > -     char buf[42];
> >> > +     char buf[44];
> >> >       struct mgmt_rp_read_exp_features_info *rp = (void *)buf;
> >> >       u16 idx = 0;
> >> >
> >> > @@ -3774,6 +3800,14 @@ static int read_exp_features_info(struct sock *sk, struct hci_dev *hdev,
> >> >       }
> >> > #endif
> >> >
> >> > +     if (hdev) {
> >> > +             memcpy(rp->features[idx].uuid, le_supported_roles,
> >> > +                    sizeof(le_supported_roles));
> >> > +
> >>
> >> And I would put it all here instead of a separate function.
> >>
> >> > +             rp->features[idx].flags = cpu_to_le32(get_le_roles_flags(hdev));
> >> > +             ++idx;
> >> > +     }
> >> > +
> >> >       rp->feature_count = cpu_to_le16(idx);
> >> >
> >> >       /* After reading the experimental features information, enable
> >>
> >> Regards
> >>
> >> Marcel
> >>

  reply	other threads:[~2020-07-02 17:37 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-07-01 22:08 [PATCH v2] Bluetooth: le_supported_roles experimental feature Alain Michaud
2020-07-02 13:18 ` Marcel Holtmann
     [not found]   ` <CALWDO_XT=O4NiqMur+_u1z4o0868ZzBr4gpUikgmgw2U4zqMzw@mail.gmail.com>
2020-07-02 15:01     ` Alain Michaud
2020-07-02 17:37       ` Alain Michaud [this message]
2020-07-03  7:24     ` Marcel Holtmann
2020-07-03 13:03       ` Marcel Holtmann

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=CALWDO_VcbYuWV7yoJBNM17up8Wb+TXnYQMAe9oexhv3zFt5y0g@mail.gmail.com \
    --to=alainmichaud@google.com \
    --cc=alainm@chromium.org \
    --cc=linux-bluetooth@vger.kernel.org \
    --cc=marcel@holtmann.org \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).