提交 8fe34b06 编写于 作者: L Luca Coelho

iwlwifi: use big-endian for the hw section of the nvm

Unlike the other sections of the NVM, the hw section is in big-endian.
To read a value from it, we had to cast it to __be16.  Fix that by
using __be16 * for the entire section.
Signed-off-by: NLuca Coelho <luciano.coelho@intel.com>
上级 ee4fe540
...@@ -582,7 +582,7 @@ static void iwl_set_hw_address_family_8000(struct iwl_trans *trans, ...@@ -582,7 +582,7 @@ static void iwl_set_hw_address_family_8000(struct iwl_trans *trans,
const struct iwl_cfg *cfg, const struct iwl_cfg *cfg,
struct iwl_nvm_data *data, struct iwl_nvm_data *data,
const __le16 *mac_override, const __le16 *mac_override,
const __le16 *nvm_hw) const __be16 *nvm_hw)
{ {
const u8 *hw_addr; const u8 *hw_addr;
...@@ -629,7 +629,7 @@ static void iwl_set_hw_address_family_8000(struct iwl_trans *trans, ...@@ -629,7 +629,7 @@ static void iwl_set_hw_address_family_8000(struct iwl_trans *trans,
static int iwl_set_hw_address(struct iwl_trans *trans, static int iwl_set_hw_address(struct iwl_trans *trans,
const struct iwl_cfg *cfg, const struct iwl_cfg *cfg,
struct iwl_nvm_data *data, const __le16 *nvm_hw, struct iwl_nvm_data *data, const __be16 *nvm_hw,
const __le16 *mac_override) const __le16 *mac_override)
{ {
if (cfg->mac_addr_from_csr) { if (cfg->mac_addr_from_csr) {
...@@ -661,7 +661,7 @@ static int iwl_set_hw_address(struct iwl_trans *trans, ...@@ -661,7 +661,7 @@ static int iwl_set_hw_address(struct iwl_trans *trans,
static bool static bool
iwl_nvm_no_wide_in_5ghz(struct device *dev, const struct iwl_cfg *cfg, iwl_nvm_no_wide_in_5ghz(struct device *dev, const struct iwl_cfg *cfg,
const __le16 *nvm_hw) const __be16 *nvm_hw)
{ {
/* /*
* Workaround a bug in Indonesia SKUs where the regulatory in * Workaround a bug in Indonesia SKUs where the regulatory in
...@@ -677,8 +677,7 @@ iwl_nvm_no_wide_in_5ghz(struct device *dev, const struct iwl_cfg *cfg, ...@@ -677,8 +677,7 @@ iwl_nvm_no_wide_in_5ghz(struct device *dev, const struct iwl_cfg *cfg,
* Unlike the other sections in the NVM, the hw * Unlike the other sections in the NVM, the hw
* section uses big-endian. * section uses big-endian.
*/ */
u16 subsystem_id = be16_to_cpup((const __be16 *)nvm_hw u16 subsystem_id = be16_to_cpup(nvm_hw + SUBSYSTEM_ID);
+ SUBSYSTEM_ID);
u8 sku = (subsystem_id & 0x1e) >> 1; u8 sku = (subsystem_id & 0x1e) >> 1;
if (sku == 5 || sku == 9) { if (sku == 5 || sku == 9) {
...@@ -694,7 +693,7 @@ iwl_nvm_no_wide_in_5ghz(struct device *dev, const struct iwl_cfg *cfg, ...@@ -694,7 +693,7 @@ iwl_nvm_no_wide_in_5ghz(struct device *dev, const struct iwl_cfg *cfg,
struct iwl_nvm_data * struct iwl_nvm_data *
iwl_parse_nvm_data(struct iwl_trans *trans, const struct iwl_cfg *cfg, iwl_parse_nvm_data(struct iwl_trans *trans, const struct iwl_cfg *cfg,
const __le16 *nvm_hw, const __le16 *nvm_sw, const __be16 *nvm_hw, const __le16 *nvm_sw,
const __le16 *nvm_calib, const __le16 *regulatory, const __le16 *nvm_calib, const __le16 *regulatory,
const __le16 *mac_override, const __le16 *phy_sku, const __le16 *mac_override, const __le16 *phy_sku,
u8 tx_chains, u8 rx_chains, bool lar_fw_supported) u8 tx_chains, u8 rx_chains, bool lar_fw_supported)
......
...@@ -77,7 +77,7 @@ ...@@ -77,7 +77,7 @@
*/ */
struct iwl_nvm_data * struct iwl_nvm_data *
iwl_parse_nvm_data(struct iwl_trans *trans, const struct iwl_cfg *cfg, iwl_parse_nvm_data(struct iwl_trans *trans, const struct iwl_cfg *cfg,
const __le16 *nvm_hw, const __le16 *nvm_sw, const __be16 *nvm_hw, const __le16 *nvm_sw,
const __le16 *nvm_calib, const __le16 *regulatory, const __le16 *nvm_calib, const __le16 *regulatory,
const __le16 *mac_override, const __le16 *phy_sku, const __le16 *mac_override, const __le16 *phy_sku,
u8 tx_chains, u8 rx_chains, bool lar_fw_supported); u8 tx_chains, u8 rx_chains, bool lar_fw_supported);
......
...@@ -292,7 +292,8 @@ static struct iwl_nvm_data * ...@@ -292,7 +292,8 @@ static struct iwl_nvm_data *
iwl_parse_nvm_sections(struct iwl_mvm *mvm) iwl_parse_nvm_sections(struct iwl_mvm *mvm)
{ {
struct iwl_nvm_section *sections = mvm->nvm_sections; struct iwl_nvm_section *sections = mvm->nvm_sections;
const __le16 *hw, *sw, *calib, *regulatory, *mac_override, *phy_sku; const __be16 *hw;
const __le16 *sw, *calib, *regulatory, *mac_override, *phy_sku;
bool lar_enabled; bool lar_enabled;
/* Checking for required sections */ /* Checking for required sections */
...@@ -326,7 +327,7 @@ iwl_parse_nvm_sections(struct iwl_mvm *mvm) ...@@ -326,7 +327,7 @@ iwl_parse_nvm_sections(struct iwl_mvm *mvm)
} }
} }
hw = (const __le16 *)sections[mvm->cfg->nvm_hw_section_num].data; hw = (const __be16 *)sections[mvm->cfg->nvm_hw_section_num].data;
sw = (const __le16 *)sections[NVM_SECTION_TYPE_SW].data; sw = (const __le16 *)sections[NVM_SECTION_TYPE_SW].data;
calib = (const __le16 *)sections[NVM_SECTION_TYPE_CALIBRATION].data; calib = (const __le16 *)sections[NVM_SECTION_TYPE_CALIBRATION].data;
regulatory = (const __le16 *)sections[NVM_SECTION_TYPE_REGULATORY].data; regulatory = (const __le16 *)sections[NVM_SECTION_TYPE_REGULATORY].data;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册