From: Arend van Spriel <arend@broadcom.com>
To: Mathy Vanhoef <vanhoefm@gmail.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: Fri, 1 Jan 2016 08:05:32 +0100 [thread overview]
Message-ID: <5686253C.4060305@broadcom.com> (raw)
In-Reply-To: <CAFXAJYwpk+-U-9pN2tnOmK05gixJZWYGi9_w+r9uktH2PqvEUQ@mail.gmail.com>
On 12/29/2015 09:58 PM, 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>
Hi Mathy,
Do you want credits, ie. have "Reviewed-by:" tag added?
Regards,
Arend
>> 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);
>
> 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
>
next prev parent reply other threads:[~2016-01-01 7:05 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
2016-01-01 7:05 ` Arend van Spriel [this message]
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=5686253C.4060305@broadcom.com \
--to=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.