int radio_enabled;
int beacon_int;
unsigned int rx_filter;
+ int started;
};
if (hwsim_radios[i] == NULL || hwsim_radios[i] == hw)
continue;
data2 = hwsim_radios[i]->priv;
- if (!data2->radio_enabled || data->freq != data2->freq)
+ if (!data2->started || !data2->radio_enabled ||
+ data->freq != data2->freq)
continue;
nskb = skb_copy(skb, GFP_ATOMIC);
if (nskb == NULL)
continue;
- ieee80211_rx(hwsim_radios[i], nskb, &rx_status);
+ ieee80211_rx_irqsafe(hwsim_radios[i], nskb, &rx_status);
}
memset(&tx_status, 0, sizeof(tx_status));
memcpy(&tx_status.control, control, sizeof(*control));
/* TODO: proper ACK determination */
tx_status.flags = IEEE80211_TX_STATUS_ACK;
- ieee80211_tx_status(hw, skb, &tx_status);
+ ieee80211_tx_status_irqsafe(hw, skb, &tx_status);
return NETDEV_TX_OK;
}
static int mac80211_hwsim_start(struct ieee80211_hw *hw)
{
+ struct mac80211_hwsim_data *data = hw->priv;
printk(KERN_DEBUG "%s:%s\n", wiphy_name(hw->wiphy), __func__);
+ data->started = 1;
return 0;
}
static void mac80211_hwsim_stop(struct ieee80211_hw *hw)
{
+ struct mac80211_hwsim_data *data = hw->priv;
+ data->started = 0;
printk(KERN_DEBUG "%s:%s\n", wiphy_name(hw->wiphy), __func__);
}