forked from Minki/linux
iwlwifi: move ucode_owner to priv
The transport doesn't really need to know as we can enforce it in the command wrapper. Move the ucode_owner variable into priv and do all enforcing there. Signed-off-by: Johannes Berg <johannes.berg@intel.com> Signed-off-by: Wey-Yi Guy <wey-yi.w.guy@intel.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
parent
4bd14dd5f7
commit
947a9407e3
@ -1306,6 +1306,12 @@ int iwl_dvm_send_cmd(struct iwl_priv *priv, struct iwl_host_cmd *cmd)
|
|||||||
if (cmd->flags & CMD_SYNC)
|
if (cmd->flags & CMD_SYNC)
|
||||||
lockdep_assert_held(&priv->mutex);
|
lockdep_assert_held(&priv->mutex);
|
||||||
|
|
||||||
|
if (priv->ucode_owner == IWL_OWNERSHIP_TM &&
|
||||||
|
!(cmd->flags & CMD_ON_DEMAND)) {
|
||||||
|
IWL_DEBUG_HC(priv, "tm own the uCode, no regular hcmd send\n");
|
||||||
|
return -EIO;
|
||||||
|
}
|
||||||
|
|
||||||
return iwl_trans_send_cmd(trans(priv), cmd);
|
return iwl_trans_send_cmd(trans(priv), cmd);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1165,7 +1165,7 @@ int iwl_rx_dispatch(struct iwl_op_mode *op_mode, struct iwl_rx_cmd_buffer *rxb,
|
|||||||
iwl_notification_wait_notify(&priv->notif_wait, pkt);
|
iwl_notification_wait_notify(&priv->notif_wait, pkt);
|
||||||
|
|
||||||
if (priv->pre_rx_handler &&
|
if (priv->pre_rx_handler &&
|
||||||
priv->shrd->ucode_owner == IWL_OWNERSHIP_TM)
|
priv->ucode_owner == IWL_OWNERSHIP_TM)
|
||||||
priv->pre_rx_handler(priv, rxb);
|
priv->pre_rx_handler(priv, rxb);
|
||||||
else {
|
else {
|
||||||
/* Based on type of command response or notification,
|
/* Based on type of command response or notification,
|
||||||
|
@ -1053,6 +1053,8 @@ static int iwl_init_drv(struct iwl_priv *priv)
|
|||||||
priv->missed_beacon_threshold = IWL_MISSED_BEACON_THRESHOLD_DEF;
|
priv->missed_beacon_threshold = IWL_MISSED_BEACON_THRESHOLD_DEF;
|
||||||
priv->agg_tids_count = 0;
|
priv->agg_tids_count = 0;
|
||||||
|
|
||||||
|
priv->ucode_owner = IWL_OWNERSHIP_DRIVER;
|
||||||
|
|
||||||
/* initialize force reset */
|
/* initialize force reset */
|
||||||
priv->force_reset[IWL_RF_RESET].reset_duration =
|
priv->force_reset[IWL_RF_RESET].reset_duration =
|
||||||
IWL_DELAY_NEXT_FORCE_RF_RESET;
|
IWL_DELAY_NEXT_FORCE_RF_RESET;
|
||||||
|
@ -748,6 +748,10 @@ struct iwl_priv {
|
|||||||
struct iwl_spectrum_notification measure_report;
|
struct iwl_spectrum_notification measure_report;
|
||||||
u8 measurement_status;
|
u8 measurement_status;
|
||||||
|
|
||||||
|
#define IWL_OWNERSHIP_DRIVER 0
|
||||||
|
#define IWL_OWNERSHIP_TM 1
|
||||||
|
u8 ucode_owner;
|
||||||
|
|
||||||
/* ucode beacon time */
|
/* ucode beacon time */
|
||||||
u32 ucode_beacon_time;
|
u32 ucode_beacon_time;
|
||||||
int missed_beacon_threshold;
|
int missed_beacon_threshold;
|
||||||
|
@ -356,7 +356,6 @@ struct iwl_cfg {
|
|||||||
/**
|
/**
|
||||||
* struct iwl_shared - shared fields for all the layers of the driver
|
* struct iwl_shared - shared fields for all the layers of the driver
|
||||||
*
|
*
|
||||||
* @ucode_owner: IWL_OWNERSHIP_*
|
|
||||||
* @cmd_queue: command queue number
|
* @cmd_queue: command queue number
|
||||||
* @status: STATUS_*
|
* @status: STATUS_*
|
||||||
* @wowlan: are we running wowlan uCode
|
* @wowlan: are we running wowlan uCode
|
||||||
@ -374,9 +373,6 @@ struct iwl_cfg {
|
|||||||
* @device_pointers: pointers to ucode event tables
|
* @device_pointers: pointers to ucode event tables
|
||||||
*/
|
*/
|
||||||
struct iwl_shared {
|
struct iwl_shared {
|
||||||
#define IWL_OWNERSHIP_DRIVER 0
|
|
||||||
#define IWL_OWNERSHIP_TM 1
|
|
||||||
u8 ucode_owner;
|
|
||||||
u8 cmd_queue;
|
u8 cmd_queue;
|
||||||
unsigned long status;
|
unsigned long status;
|
||||||
u8 valid_contexts;
|
u8 valid_contexts;
|
||||||
|
@ -770,7 +770,7 @@ static int iwl_testmode_ownership(struct ieee80211_hw *hw, struct nlattr **tb)
|
|||||||
|
|
||||||
owner = nla_get_u8(tb[IWL_TM_ATTR_UCODE_OWNER]);
|
owner = nla_get_u8(tb[IWL_TM_ATTR_UCODE_OWNER]);
|
||||||
if ((owner == IWL_OWNERSHIP_DRIVER) || (owner == IWL_OWNERSHIP_TM))
|
if ((owner == IWL_OWNERSHIP_DRIVER) || (owner == IWL_OWNERSHIP_TM))
|
||||||
priv->shrd->ucode_owner = owner;
|
priv->ucode_owner = owner;
|
||||||
else {
|
else {
|
||||||
IWL_ERR(priv, "Invalid owner\n");
|
IWL_ERR(priv, "Invalid owner\n");
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
@ -685,12 +685,6 @@ static int iwl_enqueue_hcmd(struct iwl_trans *trans, struct iwl_host_cmd *cmd)
|
|||||||
return -EIO;
|
return -EIO;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((trans->shrd->ucode_owner == IWL_OWNERSHIP_TM) &&
|
|
||||||
!(cmd->flags & CMD_ON_DEMAND)) {
|
|
||||||
IWL_DEBUG_HC(trans, "tm own the uCode, no regular hcmd send\n");
|
|
||||||
return -EIO;
|
|
||||||
}
|
|
||||||
|
|
||||||
copy_size = sizeof(out_cmd->hdr);
|
copy_size = sizeof(out_cmd->hdr);
|
||||||
cmd_size = sizeof(out_cmd->hdr);
|
cmd_size = sizeof(out_cmd->hdr);
|
||||||
|
|
||||||
|
@ -1022,7 +1022,6 @@ static int iwl_trans_pcie_start_fw(struct iwl_trans *trans,
|
|||||||
IWL_TRANS_GET_PCIE_TRANS(trans);
|
IWL_TRANS_GET_PCIE_TRANS(trans);
|
||||||
bool hw_rfkill;
|
bool hw_rfkill;
|
||||||
|
|
||||||
trans->shrd->ucode_owner = IWL_OWNERSHIP_DRIVER;
|
|
||||||
trans_pcie->ac_to_queue[IWL_RXON_CTX_BSS] = iwlagn_bss_ac_to_queue;
|
trans_pcie->ac_to_queue[IWL_RXON_CTX_BSS] = iwlagn_bss_ac_to_queue;
|
||||||
trans_pcie->ac_to_queue[IWL_RXON_CTX_PAN] = iwlagn_pan_ac_to_queue;
|
trans_pcie->ac_to_queue[IWL_RXON_CTX_PAN] = iwlagn_pan_ac_to_queue;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user