iwlwifi: tlv: add support for IWL_UCODE_TLV_SDIO_ADMA_ADDR TLV
A new TLV supplies the ADMA address for SDIO mode, allowing the driver to configure the default base address to be this (as given in the FW), rather than hardcoding the values to use until the FW sends the ALIVE message. Use the value given by the FW in the IWL_UCODE_TLV_SDIO_ADMA_ADDR TLV for setting the default SDTM base address until the FW sends the ALIVE message. If it isn't given in the FW - use the current hardcoded values. Signed-off-by: Liad Kaufman <liad.kaufman@intel.com> Reviewed-by: Johannes Berg <johannes.berg@intel.com> Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
This commit is contained in:
parent
9d8ce6afe1
commit
b48217670f
|
@ -903,6 +903,12 @@ static int iwl_parse_tlv_firmware(struct iwl_drv *drv,
|
||||||
IWL_UCODE_REGULAR_USNIFFER,
|
IWL_UCODE_REGULAR_USNIFFER,
|
||||||
tlv_len);
|
tlv_len);
|
||||||
break;
|
break;
|
||||||
|
case IWL_UCODE_TLV_SDIO_ADMA_ADDR:
|
||||||
|
if (tlv_len != sizeof(u32))
|
||||||
|
goto invalid_tlv_len;
|
||||||
|
drv->fw.sdio_adma_addr =
|
||||||
|
le32_to_cpup((__le32 *)tlv_data);
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
IWL_DEBUG_INFO(drv, "unknown TLV: %d\n", tlv_type);
|
IWL_DEBUG_INFO(drv, "unknown TLV: %d\n", tlv_type);
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -132,6 +132,7 @@ enum iwl_ucode_tlv_type {
|
||||||
IWL_UCODE_TLV_ENABLED_CAPABILITIES = 30,
|
IWL_UCODE_TLV_ENABLED_CAPABILITIES = 30,
|
||||||
IWL_UCODE_TLV_N_SCAN_CHANNELS = 31,
|
IWL_UCODE_TLV_N_SCAN_CHANNELS = 31,
|
||||||
IWL_UCODE_TLV_SEC_RT_USNIFFER = 34,
|
IWL_UCODE_TLV_SEC_RT_USNIFFER = 34,
|
||||||
|
IWL_UCODE_TLV_SDIO_ADMA_ADDR = 35,
|
||||||
IWL_UCODE_TLV_FW_DBG_DEST = 38,
|
IWL_UCODE_TLV_FW_DBG_DEST = 38,
|
||||||
IWL_UCODE_TLV_FW_DBG_CONF = 39,
|
IWL_UCODE_TLV_FW_DBG_CONF = 39,
|
||||||
};
|
};
|
||||||
|
|
|
@ -152,6 +152,8 @@ struct iwl_fw_cscheme_list {
|
||||||
* @mvm_fw: indicates this is MVM firmware
|
* @mvm_fw: indicates this is MVM firmware
|
||||||
* @cipher_scheme: optional external cipher scheme.
|
* @cipher_scheme: optional external cipher scheme.
|
||||||
* @human_readable: human readable version
|
* @human_readable: human readable version
|
||||||
|
* @sdio_adma_addr: the default address to set for the ADMA in SDIO mode until
|
||||||
|
* we get the ALIVE from the uCode
|
||||||
* @dbg_dest_tlv: points to the destination TLV for debug
|
* @dbg_dest_tlv: points to the destination TLV for debug
|
||||||
* @dbg_conf_tlv: array of pointers to configuration TLVs for debug
|
* @dbg_conf_tlv: array of pointers to configuration TLVs for debug
|
||||||
* @dbg_conf_tlv_len: lengths of the @dbg_conf_tlv entries
|
* @dbg_conf_tlv_len: lengths of the @dbg_conf_tlv entries
|
||||||
|
@ -181,6 +183,8 @@ struct iwl_fw {
|
||||||
struct ieee80211_cipher_scheme cs[IWL_UCODE_MAX_CS];
|
struct ieee80211_cipher_scheme cs[IWL_UCODE_MAX_CS];
|
||||||
u8 human_readable[FW_VER_HUMAN_READABLE_SZ];
|
u8 human_readable[FW_VER_HUMAN_READABLE_SZ];
|
||||||
|
|
||||||
|
u32 sdio_adma_addr;
|
||||||
|
|
||||||
struct iwl_fw_dbg_dest_tlv *dbg_dest_tlv;
|
struct iwl_fw_dbg_dest_tlv *dbg_dest_tlv;
|
||||||
struct iwl_fw_dbg_conf_tlv *dbg_conf_tlv[FW_DBG_MAX];
|
struct iwl_fw_dbg_conf_tlv *dbg_conf_tlv[FW_DBG_MAX];
|
||||||
size_t dbg_conf_tlv_len[FW_DBG_MAX];
|
size_t dbg_conf_tlv_len[FW_DBG_MAX];
|
||||||
|
|
|
@ -382,6 +382,8 @@ enum iwl_trans_status {
|
||||||
* are considered stuck and will trigger device restart
|
* are considered stuck and will trigger device restart
|
||||||
* @command_names: array of command names, must be 256 entries
|
* @command_names: array of command names, must be 256 entries
|
||||||
* (one for each command); for debugging only
|
* (one for each command); for debugging only
|
||||||
|
* @sdio_adma_addr: the default address to set for the ADMA in SDIO mode until
|
||||||
|
* we get the ALIVE from the uCode
|
||||||
*/
|
*/
|
||||||
struct iwl_trans_config {
|
struct iwl_trans_config {
|
||||||
struct iwl_op_mode *op_mode;
|
struct iwl_op_mode *op_mode;
|
||||||
|
@ -396,6 +398,8 @@ struct iwl_trans_config {
|
||||||
bool scd_set_active;
|
bool scd_set_active;
|
||||||
unsigned int queue_watchdog_timeout;
|
unsigned int queue_watchdog_timeout;
|
||||||
const char *const *command_names;
|
const char *const *command_names;
|
||||||
|
|
||||||
|
u32 sdio_adma_addr;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct iwl_trans_dump_data {
|
struct iwl_trans_dump_data {
|
||||||
|
|
|
@ -481,6 +481,8 @@ iwl_op_mode_mvm_start(struct iwl_trans *trans, const struct iwl_cfg *cfg,
|
||||||
trans_cfg.cmd_fifo = IWL_MVM_TX_FIFO_CMD;
|
trans_cfg.cmd_fifo = IWL_MVM_TX_FIFO_CMD;
|
||||||
trans_cfg.scd_set_active = true;
|
trans_cfg.scd_set_active = true;
|
||||||
|
|
||||||
|
trans_cfg.sdio_adma_addr = fw->sdio_adma_addr;
|
||||||
|
|
||||||
snprintf(mvm->hw->wiphy->fw_version,
|
snprintf(mvm->hw->wiphy->fw_version,
|
||||||
sizeof(mvm->hw->wiphy->fw_version),
|
sizeof(mvm->hw->wiphy->fw_version),
|
||||||
"%s", fw->fw_version);
|
"%s", fw->fw_version);
|
||||||
|
|
Loading…
Reference in New Issue