diff options
Diffstat (limited to 'drivers/net/wireless/rtl818x/rtl8187_dev.c')
-rw-r--r-- | drivers/net/wireless/rtl818x/rtl8187_dev.c | 15 |
1 files changed, 6 insertions, 9 deletions
diff --git a/drivers/net/wireless/rtl818x/rtl8187_dev.c b/drivers/net/wireless/rtl818x/rtl8187_dev.c index bc5726dd5fe4..f336c63053c1 100644 --- a/drivers/net/wireless/rtl818x/rtl8187_dev.c +++ b/drivers/net/wireless/rtl818x/rtl8187_dev.c | |||
@@ -1018,31 +1018,30 @@ static void rtl8187_stop(struct ieee80211_hw *dev) | |||
1018 | } | 1018 | } |
1019 | 1019 | ||
1020 | static int rtl8187_add_interface(struct ieee80211_hw *dev, | 1020 | static int rtl8187_add_interface(struct ieee80211_hw *dev, |
1021 | struct ieee80211_if_init_conf *conf) | 1021 | struct ieee80211_vif *vif) |
1022 | { | 1022 | { |
1023 | struct rtl8187_priv *priv = dev->priv; | 1023 | struct rtl8187_priv *priv = dev->priv; |
1024 | int i; | 1024 | int i; |
1025 | int ret = -EOPNOTSUPP; | 1025 | int ret = -EOPNOTSUPP; |
1026 | 1026 | ||
1027 | mutex_lock(&priv->conf_mutex); | 1027 | mutex_lock(&priv->conf_mutex); |
1028 | if (priv->mode != NL80211_IFTYPE_MONITOR) | 1028 | if (priv->vif) |
1029 | goto exit; | 1029 | goto exit; |
1030 | 1030 | ||
1031 | switch (conf->type) { | 1031 | switch (vif->type) { |
1032 | case NL80211_IFTYPE_STATION: | 1032 | case NL80211_IFTYPE_STATION: |
1033 | priv->mode = conf->type; | ||
1034 | break; | 1033 | break; |
1035 | default: | 1034 | default: |
1036 | goto exit; | 1035 | goto exit; |
1037 | } | 1036 | } |
1038 | 1037 | ||
1039 | ret = 0; | 1038 | ret = 0; |
1040 | priv->vif = conf->vif; | 1039 | priv->vif = vif; |
1041 | 1040 | ||
1042 | rtl818x_iowrite8(priv, &priv->map->EEPROM_CMD, RTL818X_EEPROM_CMD_CONFIG); | 1041 | rtl818x_iowrite8(priv, &priv->map->EEPROM_CMD, RTL818X_EEPROM_CMD_CONFIG); |
1043 | for (i = 0; i < ETH_ALEN; i++) | 1042 | for (i = 0; i < ETH_ALEN; i++) |
1044 | rtl818x_iowrite8(priv, &priv->map->MAC[i], | 1043 | rtl818x_iowrite8(priv, &priv->map->MAC[i], |
1045 | ((u8 *)conf->mac_addr)[i]); | 1044 | ((u8 *)vif->addr)[i]); |
1046 | rtl818x_iowrite8(priv, &priv->map->EEPROM_CMD, RTL818X_EEPROM_CMD_NORMAL); | 1045 | rtl818x_iowrite8(priv, &priv->map->EEPROM_CMD, RTL818X_EEPROM_CMD_NORMAL); |
1047 | 1046 | ||
1048 | exit: | 1047 | exit: |
@@ -1051,11 +1050,10 @@ exit: | |||
1051 | } | 1050 | } |
1052 | 1051 | ||
1053 | static void rtl8187_remove_interface(struct ieee80211_hw *dev, | 1052 | static void rtl8187_remove_interface(struct ieee80211_hw *dev, |
1054 | struct ieee80211_if_init_conf *conf) | 1053 | struct ieee80211_vif *vif) |
1055 | { | 1054 | { |
1056 | struct rtl8187_priv *priv = dev->priv; | 1055 | struct rtl8187_priv *priv = dev->priv; |
1057 | mutex_lock(&priv->conf_mutex); | 1056 | mutex_lock(&priv->conf_mutex); |
1058 | priv->mode = NL80211_IFTYPE_MONITOR; | ||
1059 | priv->vif = NULL; | 1057 | priv->vif = NULL; |
1060 | mutex_unlock(&priv->conf_mutex); | 1058 | mutex_unlock(&priv->conf_mutex); |
1061 | } | 1059 | } |
@@ -1365,7 +1363,6 @@ static int __devinit rtl8187_probe(struct usb_interface *intf, | |||
1365 | dev->wiphy->bands[IEEE80211_BAND_2GHZ] = &priv->band; | 1363 | dev->wiphy->bands[IEEE80211_BAND_2GHZ] = &priv->band; |
1366 | 1364 | ||
1367 | 1365 | ||
1368 | priv->mode = NL80211_IFTYPE_MONITOR; | ||
1369 | dev->flags = IEEE80211_HW_HOST_BROADCAST_PS_BUFFERING | | 1366 | dev->flags = IEEE80211_HW_HOST_BROADCAST_PS_BUFFERING | |
1370 | IEEE80211_HW_SIGNAL_DBM | | 1367 | IEEE80211_HW_SIGNAL_DBM | |
1371 | IEEE80211_HW_RX_INCLUDES_FCS; | 1368 | IEEE80211_HW_RX_INCLUDES_FCS; |