All of lore.kernel.org
 help / color / mirror / Atom feed
From: Arend van Spriel <aspriel@gmail.com>
To: Mathy Vanhoef <vanhoefm@gmail.com>,
	Arend van Spriel <arend@broadcom.com>
Cc: Kalle Valo <kvalo@codeaurora.org>,
	linux-wireless <linux-wireless@vger.kernel.org>
Subject: Re: [PATCH 4/7] brcmfmac: obtain feature info using 'cap' firmware command
Date: Thu, 31 Dec 2015 22:55:48 +0100	[thread overview]
Message-ID: <5685A464.5030105@gmail.com> (raw)
In-Reply-To: <CAFXAJYwpk+-U-9pN2tnOmK05gixJZWYGi9_w+r9uktH2PqvEUQ@mail.gmail.com>

On 29-12-15 21:58, Mathy Vanhoef wrote:
> On Mon, Dec 14, 2015 at 2:39 PM, Arend van Spriel <arend@broadcom.com> wrote:
>> Several features in the driver directly map to a firmware feature
>> listed in response of the 'cap' firmware command. For those features
>> this response will be examined instead of attempting individual
>> firmware commands.
>>
>> Reviewed-by: Hante Meuleman <meuleman@broadcom.com>
>> Reviewed-by: Franky (Zhenhui) Lin <frankyl@broadcom.com>
>> Reviewed-by: Pieter-Paul Giesberts <pieterpg@broadcom.com>
>> Signed-off-by: Arend van Spriel <arend@broadcom.com>
>> ---
>>  .../wireless/broadcom/brcm80211/brcmfmac/feature.c | 51 +++++++++++++---------
>>  1 file changed, 30 insertions(+), 21 deletions(-)
>>
>> diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/feature.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/feature.c
>> index d9d1ca4..08b7200 100644
>> --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/feature.c
>> +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/feature.c
>> @@ -40,6 +40,17 @@ static const char *brcmf_feat_names[] = {
>>  };
>>  #undef BRCMF_FEAT_DEF
>>
>> +struct brcmf_feat_fwcap {
>> +       enum brcmf_feat_id feature;
>> +       const char * const fwcap_id;
>> +};
>> +
>> +static const struct brcmf_feat_fwcap brcmf_fwcap_map[] = {
>> +       { BRCMF_FEAT_MBSS, "mbss" },
>> +       { BRCMF_FEAT_MCHAN, "mchan" },
>> +       { BRCMF_FEAT_P2P, "p2p" },
>> +};
>> +
>>  #ifdef DEBUG
>>  /*
>>   * expand quirk list to array of quirk strings.
>> @@ -104,25 +115,22 @@ static void brcmf_feat_iovar_int_get(struct brcmf_if *ifp,
>>         }
>>  }
>>
>> -/**
>> - * brcmf_feat_iovar_int_set() - determine feature through iovar set.
>> - *
>> - * @ifp: interface to query.
>> - * @id: feature id.
>> - * @name: iovar name.
>> - */
>> -static void brcmf_feat_iovar_int_set(struct brcmf_if *ifp,
>> -                                    enum brcmf_feat_id id, char *name, u32 val)
>> +static void brcmf_feat_firmware_capabilities(struct brcmf_if *ifp)
>>  {
>> -       int err;
>> -
>> -       err = brcmf_fil_iovar_int_set(ifp, name, val);
>> -       if (err == 0) {
>> -               brcmf_dbg(INFO, "enabling feature: %s\n", brcmf_feat_names[id]);
>> -               ifp->drvr->feat_flags |= BIT(id);
>> -       } else {
>> -               brcmf_dbg(TRACE, "%s feature check failed: %d\n",
>> -                         brcmf_feat_names[id], err);
>> +       char caps[256];
>> +       enum brcmf_feat_id id;
>> +       int i;
>> +
>> +       brcmf_fil_iovar_data_get(ifp, "cap", caps, sizeof(caps));
>> +       brcmf_dbg(INFO, "[ %s]\n", caps);
>> +
>> +       for (i = 0; i < ARRAY_SIZE(brcmf_fwcap_map); i++) {
>> +               if (strnstr(caps, brcmf_fwcap_map[i].fwcap_id, sizeof(caps))) {
>> +                       id = brcmf_fwcap_map[i].feature;
>> +                       brcmf_dbg(INFO, "enabling feature: %s\n",
>> +                                 brcmf_feat_names[id]);
>> +                       ifp->drvr->feat_flags |= BIT(id);
>> +               }
>>         }
>>  }
>>
>> @@ -130,13 +138,14 @@ void brcmf_feat_attach(struct brcmf_pub *drvr)
>>  {
>>         struct brcmf_if *ifp = brcmf_get_ifp(drvr, 0);
>>
>> -       brcmf_feat_iovar_int_get(ifp, BRCMF_FEAT_MCHAN, "mchan");
>> +       brcmf_feat_firmware_capabilities(ifp);
>> +
>>         brcmf_feat_iovar_int_get(ifp, BRCMF_FEAT_PNO, "pfn");
>>         if (drvr->bus_if->wowl_supported)
>>                 brcmf_feat_iovar_int_get(ifp, BRCMF_FEAT_WOWL, "wowl");
>> +       /* MBSS does not work for 43362 */
>>         if (drvr->bus_if->chip != BRCM_CC_43362_CHIP_ID)
>> -               brcmf_feat_iovar_int_set(ifp, BRCMF_FEAT_MBSS, "mbss", 0);
>> -       brcmf_feat_iovar_int_get(ifp, BRCMF_FEAT_P2P, "p2p");
>> +               ifp->drvr->feat_flags &= BIT(BRCMF_FEAT_MBSS);
> 
> Missing ~ before the BIT() declaration? If the if-test fails, all bits are
> cleared except BRCMF_FEAT_MBSS. I think the if-test also needs to be updated
> to an equals `==` instead of the old inequality. So one would get:
> 
> /* clear MBSS feature for the 43362 (does not work) */
> if (drvr->bus_if->chip == BRCM_CC_43362_CHIP_ID)
>     ifp->drvr->feat_flags &= ~BIT(BRCMF_FEAT_MBSS);

Geez. You are absolutely right. Apparently my head was already in
christmas mode writing that code.

Thanks,
Arend

> Also, happy holidays!
> Mathy
> 
>>         brcmf_feat_iovar_int_get(ifp, BRCMF_FEAT_RSDB, "rsdb_mode");
>>         brcmf_feat_iovar_int_get(ifp, BRCMF_FEAT_TDLS, "tdls_enable");
>>
>> --
>> 1.9.1
>>
>> --
>> To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
>> the body of a message to majordomo@vger.kernel.org
>> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> --
> To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> 

  reply	other threads:[~2015-12-31 21:55 UTC|newest]

Thread overview: 16+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-12-14 13:39 [PATCH 0/7] brcmfmac: IBSS fixes and random mac scheduled scan Arend van Spriel
2015-12-14 13:39 ` [PATCH 1/7] brcmfmac: add arp offload ip address table configuration support Arend van Spriel
2015-12-14 13:39 ` [PATCH 2/7] brcmfmac: Add get_station support for IBSS Arend van Spriel
2015-12-14 13:39 ` [PATCH 3/7] brcmfmac: Add support for scheduled scan mac randomization Arend van Spriel
2015-12-29 20:47   ` Mathy Vanhoef
2015-12-31 21:50     ` Arend van Spriel
2016-01-01 10:39       ` Kalle Valo
2016-01-02  8:28         ` Arend van Spriel
2015-12-14 13:39 ` [PATCH 4/7] brcmfmac: obtain feature info using 'cap' firmware command Arend van Spriel
2015-12-29 20:58   ` Mathy Vanhoef
2015-12-31 21:55     ` Arend van Spriel [this message]
2016-01-01  7:05     ` Arend van Spriel
2016-01-02 20:21       ` Mathy Vanhoef
2015-12-14 13:39 ` [PATCH 5/7] brcmfmac: Fix warn trace on module unload while in ibss mode Arend van Spriel
2015-12-14 13:39 ` [PATCH 6/7] brcmfmac: Move all module parameters to one place Arend van Spriel
2015-12-14 13:39 ` [PATCH 7/7] brcmfmac: introduce module parameter to force successful probe Arend van Spriel

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=5685A464.5030105@gmail.com \
    --to=aspriel@gmail.com \
    --cc=arend@broadcom.com \
    --cc=kvalo@codeaurora.org \
    --cc=linux-wireless@vger.kernel.org \
    --cc=vanhoefm@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.