iwlwifi: fix calibration parser

The firmware TLV for calibration data isn't
really a u64, but two u32 values. Define a
struct for that and change the parser.

Signed-off-by: Johannes Berg <johannes.berg@intel.com>
This commit is contained in:
Johannes Berg 2013-01-24 14:12:07 +01:00
parent 4a4ee1010d
commit aa2b177083
2 changed files with 20 additions and 3 deletions

View file

@ -268,7 +268,7 @@ struct fw_sec_parsing {
*/ */
struct iwl_tlv_calib_data { struct iwl_tlv_calib_data {
__le32 ucode_type; __le32 ucode_type;
__le64 calib; struct iwl_tlv_calib_ctrl calib;
} __packed; } __packed;
struct iwl_firmware_pieces { struct iwl_firmware_pieces {
@ -358,7 +358,11 @@ static int iwl_set_default_calib(struct iwl_drv *drv, const u8 *data)
ucode_type); ucode_type);
return -EINVAL; return -EINVAL;
} }
drv->fw.default_calib[ucode_type] = le64_to_cpu(def_calib->calib); drv->fw.default_calib[ucode_type].flow_trigger =
def_calib->calib.flow_trigger;
drv->fw.default_calib[ucode_type].event_trigger =
def_calib->calib.event_trigger;
return 0; return 0;
} }

View file

@ -139,6 +139,19 @@ struct fw_img {
#define IWL_UCODE_API(ver) (((ver) & 0x0000FF00) >> 8) #define IWL_UCODE_API(ver) (((ver) & 0x0000FF00) >> 8)
#define IWL_UCODE_SERIAL(ver) ((ver) & 0x000000FF) #define IWL_UCODE_SERIAL(ver) ((ver) & 0x000000FF)
/*
* Calibration control struct.
* Sent as part of the phy configuration command.
* @flow_trigger: bitmap for which calibrations to perform according to
* flow triggers.
* @event_trigger: bitmap for which calibrations to perform according to
* event triggers.
*/
struct iwl_tlv_calib_ctrl {
__le32 flow_trigger;
__le32 event_trigger;
} __packed;
/** /**
* struct iwl_fw - variables associated with the firmware * struct iwl_fw - variables associated with the firmware
* *
@ -168,7 +181,7 @@ struct iwl_fw {
u32 init_evtlog_ptr, init_evtlog_size, init_errlog_ptr; u32 init_evtlog_ptr, init_evtlog_size, init_errlog_ptr;
u32 inst_evtlog_ptr, inst_evtlog_size, inst_errlog_ptr; u32 inst_evtlog_ptr, inst_evtlog_size, inst_errlog_ptr;
u64 default_calib[IWL_UCODE_TYPE_MAX]; struct iwl_tlv_calib_ctrl default_calib[IWL_UCODE_TYPE_MAX];
u32 phy_config; u32 phy_config;
bool mvm_fw; bool mvm_fw;