Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c600c826 authored by Ivo van Doorn's avatar Ivo van Doorn Committed by John W. Linville
Browse files

rt2x00: Don't set unicast/BSSID masks when clearning MAC or BSSID



When configuring the MAC_ADDR or MAC_BSSID with an empty address,
the UNICAST_TO_ME_MASK and BSS_ID_MASK must also be reset to prevent
invalid interpretation of the addresses.

Signed-off-by: default avatarIvo van Doorn <IvDoorn@gmail.com>
Acked-by: default avatarGertjan van Wingerde <gwingerde@gmail.com>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent b9eca242
Loading
Loading
Loading
Loading
+11 −7
Original line number Original line Diff line number Diff line
@@ -1135,19 +1135,23 @@ void rt2800_config_intf(struct rt2x00_dev *rt2x00dev, struct rt2x00_intf *intf,
	}
	}


	if (flags & CONFIG_UPDATE_MAC) {
	if (flags & CONFIG_UPDATE_MAC) {
		if (!is_zero_ether_addr((const u8 *)conf->mac)) {
			reg = le32_to_cpu(conf->mac[1]);
			reg = le32_to_cpu(conf->mac[1]);
			rt2x00_set_field32(&reg, MAC_ADDR_DW1_UNICAST_TO_ME_MASK, 0xff);
			rt2x00_set_field32(&reg, MAC_ADDR_DW1_UNICAST_TO_ME_MASK, 0xff);
			conf->mac[1] = cpu_to_le32(reg);
			conf->mac[1] = cpu_to_le32(reg);
		}


		rt2800_register_multiwrite(rt2x00dev, MAC_ADDR_DW0,
		rt2800_register_multiwrite(rt2x00dev, MAC_ADDR_DW0,
					      conf->mac, sizeof(conf->mac));
					      conf->mac, sizeof(conf->mac));
	}
	}


	if (flags & CONFIG_UPDATE_BSSID) {
	if (flags & CONFIG_UPDATE_BSSID) {
		if (!is_zero_ether_addr((const u8 *)conf->bssid)) {
			reg = le32_to_cpu(conf->bssid[1]);
			reg = le32_to_cpu(conf->bssid[1]);
			rt2x00_set_field32(&reg, MAC_BSSID_DW1_BSS_ID_MASK, 3);
			rt2x00_set_field32(&reg, MAC_BSSID_DW1_BSS_ID_MASK, 3);
			rt2x00_set_field32(&reg, MAC_BSSID_DW1_BSS_BCN_NUM, 7);
			rt2x00_set_field32(&reg, MAC_BSSID_DW1_BSS_BCN_NUM, 7);
			conf->bssid[1] = cpu_to_le32(reg);
			conf->bssid[1] = cpu_to_le32(reg);
		}


		rt2800_register_multiwrite(rt2x00dev, MAC_BSSID_DW0,
		rt2800_register_multiwrite(rt2x00dev, MAC_BSSID_DW0,
					      conf->bssid, sizeof(conf->bssid));
					      conf->bssid, sizeof(conf->bssid));