[PATCH] ath10k/mac80211: add rawtxrx, nohwcrypt module param for raw tx injection, sw crypto support.
Kalle Valo
kvalo at qca.qualcomm.com
Fri May 8 04:54:58 PDT 2015
Hi David,
"Liu CF/TW" <cfliu.tw at gmail.com> writes:
> - ath10k: add rawtxrx param for 10.2+ firmware to support sw, hw crypto
> engine and raw Tx injection.
> - mac80211: Add IEEE80211_KEY_FLAG_RESERVE_TAILROOM support for TKIP and
> CCMP required by ath10k and add per BSS(vif) based sw_crypto
> control.
This patch has few major problems. First of all, ath10k and mac80211
changes should be in separate patches. Secondly the patch is whitespace
damaged, I recommend using git-send-email to avoid that.
And there's just too much feature changes in one patch, it's usually
better to split the features into separate patches. For example, you
could first add a simple raw mode support to ath10k (ie. the bare
minimum needed to get the feature) and then adding more advanced
features per patch.
> This change enables the raw Tx/Rx feature in ath10k 10.2+ firmware with a
> module parameter 'rawtxrx'. With rawtxrx=1, the ath10k hardware crypto
> engine could be optionally skipped to support use cases such as enabling
> mac80211 sw crypto engine, user level crypto engine, raw Tx frame
> injection.
Lots of people, especially in Qualcomm, seem to call this feature as
"raw mode". Would it be more descriptive to name the module paramer as
'rawmode'?
> Testing: used QCA988x hw 2.0 with 10.2 firmware.
>
> ath10k ath10k nl80211
> rawtxrx nohwcrypt SW_CRYPTO
> param param attribute Testing Status
> ------- --------- --------- ---------------------------------
> 0 0 - HW CCMP/TKIP tested ok.
> 0 1 - Not supported by ath10k hw.
> 1 0 - HW CCMP/TKIP tested ok.
> 1 0 0 BSS 1 tested HW CCMP/TKIP ok.
> 1 0 1 BSS 2 can bypass HW engine.
> - mac80211 SW crypto tested ok.
> - raw Tx frame injection tested ok.
> 1 1 - HW crypto globally disabled.
> - mac80211 SW crypto tested ok.
> - raw Tx frame injection tested ok.
I wonder does it make any sense to have nohwcrypt parameter? Especially
if ath10k doesn't support case rawtxrx=0 and nohwcrypt=1. One
possibility I came up is to have multiple values for rawtxrx, for
example is rawtxrx=1 means HW crypt enabled and rawtxrx=2 HW crypt
disabled. Ideas welcome.
> --- a/drivers/net/wireless/ath/ath10k/core.c
> +++ b/drivers/net/wireless/ath/ath10k/core.c
> @@ -31,16 +31,22 @@
> #include "wmi-ops.h"
>
> unsigned int ath10k_debug_mask;
> +bool ath10k_modparam_nohwcrypt;
> +bool ath10k_modparam_rawtxrx;
Instead of making these public I would prefer to set a flag in struct
ath10k, for example dev_flags.
> ath10k_core_init_firmware_features(struct ath10k *ar)
> return -EINVAL;
> }
>
> + if ((ath10k_modparam_rawtxrx || ath10k_modparam_nohwcrypt) &&
> + !test_bit(ATH10K_FW_FEATURE_WMI_10_2, ar->fw_features)) {
> + ath10k_err(ar, "rawtxrx mode supported only in 10.2+ firmware");
> + return -EINVAL;
> + }
I think we should add a flag to enum ath10k_fw_features and check for
that.
> diff --git a/include/uapi/linux/nl80211.h b/include/uapi/linux/nl80211.h
> index 241220c..cdfa8a8 100644
> --- a/include/uapi/linux/nl80211.h
> +++ b/include/uapi/linux/nl80211.h
> @@ -1761,6 +1761,9 @@ enum nl80211_commands {
> * @NL80211_ATTR_REG_INDOOR: flag attribute, if set indicates that the device
> * is operating in an indoor environment.
> *
> + * @NL80211_ATTR_SW_CRYPTO: use software crypto instead of hardware crypto for
> + * the BSS.
> + *
> * @NUM_NL80211_ATTR: total number of nl80211_attrs available
> * @NL80211_ATTR_MAX: highest attribute number currently defined
> * @__NL80211_ATTR_AFTER_LAST: internal use
> @@ -2130,6 +2133,8 @@ enum nl80211_attrs {
>
> NL80211_ATTR_REG_INDOOR,
>
> + NL80211_ATTR_SW_CRYPTO,
Like I said above, nl80211/cfg80211/mac80211 changes need to be in
separate patches. And I suspect that the changes of getting this
accepted is low. Maybe a debugfs is a better choise?
--
Kalle Valo
More information about the ath10k
mailing list