|
@@ -707,7 +707,7 @@ ath5k_attach(struct pci_dev *pdev, struct ieee80211_hw *hw)
|
|
|
{
|
|
|
struct ath5k_softc *sc = hw->priv;
|
|
|
struct ath5k_hw *ah = sc->ah;
|
|
|
- u8 mac[ETH_ALEN];
|
|
|
+ u8 mac[ETH_ALEN] = {};
|
|
|
int ret;
|
|
|
|
|
|
ATH5K_DBG(sc, ATH5K_DEBUG_ANY, "devid 0x%x\n", pdev->device);
|
|
@@ -777,7 +777,13 @@ ath5k_attach(struct pci_dev *pdev, struct ieee80211_hw *hw)
|
|
|
tasklet_init(&sc->restq, ath5k_tasklet_reset, (unsigned long)sc);
|
|
|
setup_timer(&sc->calib_tim, ath5k_calibrate, (unsigned long)sc);
|
|
|
|
|
|
- ath5k_hw_get_lladdr(ah, mac);
|
|
|
+ ret = ath5k_eeprom_read_mac(ah, mac);
|
|
|
+ if (ret) {
|
|
|
+ ATH5K_ERR(sc, "unable to read address from EEPROM: 0x%04x\n",
|
|
|
+ sc->pdev->device);
|
|
|
+ goto err_queues;
|
|
|
+ }
|
|
|
+
|
|
|
SET_IEEE80211_PERM_ADDR(hw, mac);
|
|
|
/* All MAC address bits matter for ACKs */
|
|
|
memset(sc->bssidmask, 0xff, ETH_ALEN);
|
|
@@ -2765,6 +2771,7 @@ static int ath5k_add_interface(struct ieee80211_hw *hw,
|
|
|
/* Set to a reasonable value. Note that this will
|
|
|
* be set to mac80211's value at ath5k_config(). */
|
|
|
sc->bintval = 1000;
|
|
|
+ ath5k_hw_set_lladdr(sc->ah, conf->mac_addr);
|
|
|
|
|
|
ret = 0;
|
|
|
end:
|
|
@@ -2777,11 +2784,13 @@ ath5k_remove_interface(struct ieee80211_hw *hw,
|
|
|
struct ieee80211_if_init_conf *conf)
|
|
|
{
|
|
|
struct ath5k_softc *sc = hw->priv;
|
|
|
+ u8 mac[ETH_ALEN] = {};
|
|
|
|
|
|
mutex_lock(&sc->lock);
|
|
|
if (sc->vif != conf->vif)
|
|
|
goto end;
|
|
|
|
|
|
+ ath5k_hw_set_lladdr(sc->ah, mac);
|
|
|
sc->vif = NULL;
|
|
|
end:
|
|
|
mutex_unlock(&sc->lock);
|