Commit ca221c9b authored by Johannes Berg's avatar Johannes Berg Committed by Luca Coelho

iwlwifi: change fw.mvm_fw to fw.type

Instead of explicitly indicating the difference between just
DVM and MVM with an mvm_fw boolean change this to fw.type to
be more extensible and easier to understand.
Signed-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
Signed-off-by: default avatarLuca Coelho <luciano.coelho@intel.com>
parent 6d48fcd9
...@@ -795,17 +795,17 @@ static int iwl_parse_tlv_firmware(struct iwl_drv *drv, ...@@ -795,17 +795,17 @@ static int iwl_parse_tlv_firmware(struct iwl_drv *drv,
case IWL_UCODE_TLV_SEC_RT: case IWL_UCODE_TLV_SEC_RT:
iwl_store_ucode_sec(pieces, tlv_data, IWL_UCODE_REGULAR, iwl_store_ucode_sec(pieces, tlv_data, IWL_UCODE_REGULAR,
tlv_len); tlv_len);
drv->fw.mvm_fw = true; drv->fw.type = IWL_FW_MVM;
break; break;
case IWL_UCODE_TLV_SEC_INIT: case IWL_UCODE_TLV_SEC_INIT:
iwl_store_ucode_sec(pieces, tlv_data, IWL_UCODE_INIT, iwl_store_ucode_sec(pieces, tlv_data, IWL_UCODE_INIT,
tlv_len); tlv_len);
drv->fw.mvm_fw = true; drv->fw.type = IWL_FW_MVM;
break; break;
case IWL_UCODE_TLV_SEC_WOWLAN: case IWL_UCODE_TLV_SEC_WOWLAN:
iwl_store_ucode_sec(pieces, tlv_data, IWL_UCODE_WOWLAN, iwl_store_ucode_sec(pieces, tlv_data, IWL_UCODE_WOWLAN,
tlv_len); tlv_len);
drv->fw.mvm_fw = true; drv->fw.type = IWL_FW_MVM;
break; break;
case IWL_UCODE_TLV_DEF_CALIB: case IWL_UCODE_TLV_DEF_CALIB:
if (tlv_len != sizeof(struct iwl_tlv_calib_data)) if (tlv_len != sizeof(struct iwl_tlv_calib_data))
...@@ -827,17 +827,17 @@ static int iwl_parse_tlv_firmware(struct iwl_drv *drv, ...@@ -827,17 +827,17 @@ static int iwl_parse_tlv_firmware(struct iwl_drv *drv,
case IWL_UCODE_TLV_SECURE_SEC_RT: case IWL_UCODE_TLV_SECURE_SEC_RT:
iwl_store_ucode_sec(pieces, tlv_data, IWL_UCODE_REGULAR, iwl_store_ucode_sec(pieces, tlv_data, IWL_UCODE_REGULAR,
tlv_len); tlv_len);
drv->fw.mvm_fw = true; drv->fw.type = IWL_FW_MVM;
break; break;
case IWL_UCODE_TLV_SECURE_SEC_INIT: case IWL_UCODE_TLV_SECURE_SEC_INIT:
iwl_store_ucode_sec(pieces, tlv_data, IWL_UCODE_INIT, iwl_store_ucode_sec(pieces, tlv_data, IWL_UCODE_INIT,
tlv_len); tlv_len);
drv->fw.mvm_fw = true; drv->fw.type = IWL_FW_MVM;
break; break;
case IWL_UCODE_TLV_SECURE_SEC_WOWLAN: case IWL_UCODE_TLV_SECURE_SEC_WOWLAN:
iwl_store_ucode_sec(pieces, tlv_data, IWL_UCODE_WOWLAN, iwl_store_ucode_sec(pieces, tlv_data, IWL_UCODE_WOWLAN,
tlv_len); tlv_len);
drv->fw.mvm_fw = true; drv->fw.type = IWL_FW_MVM;
break; break;
case IWL_UCODE_TLV_NUM_OF_CPU: case IWL_UCODE_TLV_NUM_OF_CPU:
if (tlv_len != sizeof(u32)) if (tlv_len != sizeof(u32))
...@@ -1272,7 +1272,7 @@ static void iwl_req_fw_callback(const struct firmware *ucode_raw, void *context) ...@@ -1272,7 +1272,7 @@ static void iwl_req_fw_callback(const struct firmware *ucode_raw, void *context)
* In mvm uCode there is no difference between data and instructions * In mvm uCode there is no difference between data and instructions
* sections. * sections.
*/ */
if (!fw->mvm_fw && validate_sec_sizes(drv, pieces, drv->cfg)) if (fw->type == IWL_FW_DVM && validate_sec_sizes(drv, pieces, drv->cfg))
goto try_again; goto try_again;
/* Allocate ucode buffers for card's bus-master loading ... */ /* Allocate ucode buffers for card's bus-master loading ... */
...@@ -1400,10 +1400,16 @@ static void iwl_req_fw_callback(const struct firmware *ucode_raw, void *context) ...@@ -1400,10 +1400,16 @@ static void iwl_req_fw_callback(const struct firmware *ucode_raw, void *context)
release_firmware(ucode_raw); release_firmware(ucode_raw);
mutex_lock(&iwlwifi_opmode_table_mtx); mutex_lock(&iwlwifi_opmode_table_mtx);
if (fw->mvm_fw) switch (fw->type) {
op = &iwlwifi_opmode_table[MVM_OP_MODE]; case IWL_FW_DVM:
else
op = &iwlwifi_opmode_table[DVM_OP_MODE]; op = &iwlwifi_opmode_table[DVM_OP_MODE];
break;
default:
WARN(1, "Invalid fw type %d\n", fw->type);
case IWL_FW_MVM:
op = &iwlwifi_opmode_table[MVM_OP_MODE];
break;
}
IWL_INFO(drv, "loaded firmware version %s op_mode %s\n", IWL_INFO(drv, "loaded firmware version %s op_mode %s\n",
drv->fw.fw_version, op->name); drv->fw.fw_version, op->name);
......
...@@ -230,6 +230,16 @@ struct iwl_gscan_capabilities { ...@@ -230,6 +230,16 @@ struct iwl_gscan_capabilities {
u32 max_number_of_black_listed_ssid; u32 max_number_of_black_listed_ssid;
}; };
/**
* enum iwl_fw_type - iwlwifi firmware type
* @IWL_FW_DVM: DVM firmware
* @IWL_FW_MVM: MVM firmware
*/
enum iwl_fw_type {
IWL_FW_DVM,
IWL_FW_MVM,
};
/** /**
* struct iwl_fw - variables associated with the firmware * struct iwl_fw - variables associated with the firmware
* *
...@@ -244,7 +254,7 @@ struct iwl_gscan_capabilities { ...@@ -244,7 +254,7 @@ struct iwl_gscan_capabilities {
* @inst_evtlog_ptr: event log offset for runtime ucode. * @inst_evtlog_ptr: event log offset for runtime ucode.
* @inst_evtlog_size: event log size for runtime ucode. * @inst_evtlog_size: event log size for runtime ucode.
* @inst_errlog_ptr: error log offfset for runtime ucode. * @inst_errlog_ptr: error log offfset for runtime ucode.
* @mvm_fw: indicates this is MVM firmware * @type: firmware type (&enum iwl_fw_type)
* @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 * @sdio_adma_addr: the default address to set for the ADMA in SDIO mode until
...@@ -275,7 +285,7 @@ struct iwl_fw { ...@@ -275,7 +285,7 @@ struct iwl_fw {
u8 valid_tx_ant; u8 valid_tx_ant;
u8 valid_rx_ant; u8 valid_rx_ant;
bool mvm_fw; enum iwl_fw_type type;
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];
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment