diff options
5 files changed, 70 insertions, 4 deletions
diff --git a/package/mac80211/patches/608-add_platform_data_mac_addr.patch b/package/mac80211/patches/608-add_platform_data_mac_addr.patch new file mode 100644 index 000000000..5008180f7 --- /dev/null +++ b/package/mac80211/patches/608-add_platform_data_mac_addr.patch @@ -0,0 +1,63 @@ +--- a/include/linux/rt2x00_platform.h ++++ b/include/linux/rt2x00_platform.h +@@ -14,6 +14,7 @@ +  + struct rt2x00_platform_data { + 	char *eeprom_file_name; ++	const u8 *mac_address; +  + 	int disable_2ghz; + 	int disable_5ghz; +--- a/drivers/net/wireless/rt2x00/rt2x00dev.c ++++ b/drivers/net/wireless/rt2x00/rt2x00dev.c +@@ -825,6 +825,18 @@ static void rt2x00lib_rate(struct ieee80 + 		entry->flags |= IEEE80211_RATE_SHORT_PREAMBLE; + } +  ++const u8 *rt2x00lib_get_mac_address(struct rt2x00_dev *rt2x00dev) ++{ ++	struct rt2x00_platform_data *pdata; ++ ++	pdata = rt2x00dev->dev->platform_data; ++	if (!pdata) ++		return NULL; ++ ++	return pdata->mac_address; ++} ++EXPORT_SYMBOL_GPL(rt2x00lib_get_mac_address); ++ + static int rt2x00lib_probe_hw_modes(struct rt2x00_dev *rt2x00dev, + 				    struct hw_mode_spec *spec) + { +--- a/drivers/net/wireless/rt2x00/rt2x00.h ++++ b/drivers/net/wireless/rt2x00/rt2x00.h +@@ -1280,6 +1280,7 @@ static inline void rt2x00debug_dump_fram +  */ + u32 rt2x00lib_get_bssidx(struct rt2x00_dev *rt2x00dev, + 			 struct ieee80211_vif *vif); ++const u8 *rt2x00lib_get_mac_address(struct rt2x00_dev *rt2x00dev); +  + /* +  * Interrupt context handlers. +--- a/drivers/net/wireless/rt2x00/rt61pci.c ++++ b/drivers/net/wireless/rt2x00/rt61pci.c +@@ -2393,6 +2393,7 @@ static int rt61pci_validate_eeprom(struc + 	u32 reg; + 	u16 word; + 	u8 *mac; ++	const u8 *pdata_mac; + 	s8 value; +  + 	rt2x00pci_register_read(rt2x00dev, E2PROM_CSR, ®); +@@ -2413,7 +2414,11 @@ static int rt61pci_validate_eeprom(struc + 	/* + 	 * Start validation of the data that has been read. + 	 */ ++	pdata_mac = rt2x00lib_get_mac_address(rt2x00dev); + 	mac = rt2x00_eeprom_addr(rt2x00dev, EEPROM_MAC_ADDR_0); ++	if (pdata_mac) ++		memcpy(mac, pdata_mac, 6); ++ + 	if (!is_valid_ether_addr(mac)) { + 		random_ether_addr(mac); + 		EEPROM(rt2x00dev, "MAC: %pM\n", mac); diff --git a/target/linux/generic/files/include/linux/rt2x00_platform.h b/target/linux/generic/files/include/linux/rt2x00_platform.h index b4c776873..e10377e21 100644 --- a/target/linux/generic/files/include/linux/rt2x00_platform.h +++ b/target/linux/generic/files/include/linux/rt2x00_platform.h @@ -14,6 +14,7 @@  struct rt2x00_platform_data {  	char *eeprom_file_name; +	const u8 *mac_address;  	int disable_2ghz;  	int disable_5ghz; diff --git a/target/linux/lantiq/files-3.3/arch/mips/lantiq/xway/dev-wifi-rt2x00.c b/target/linux/lantiq/files-3.3/arch/mips/lantiq/xway/dev-wifi-rt2x00.c index 8975f6be7..8e271f06e 100644 --- a/target/linux/lantiq/files-3.3/arch/mips/lantiq/xway/dev-wifi-rt2x00.c +++ b/target/linux/lantiq/files-3.3/arch/mips/lantiq/xway/dev-wifi-rt2x00.c @@ -24,8 +24,9 @@ rt2x00_pci_plat_dev_init(struct pci_dev *dev)  }  void __init -ltq_register_rt2x00(const char *firmware) +ltq_register_rt2x00(const char *firmware, const u8 *mac)  {  	rt2x00_pdata.eeprom_file_name = kstrdup(firmware, GFP_KERNEL); +	rt2x00_pdata.mac_address = mac;  	ltqpci_plat_dev_init = rt2x00_pci_plat_dev_init;  } diff --git a/target/linux/lantiq/files-3.3/arch/mips/lantiq/xway/dev-wifi-rt2x00.h b/target/linux/lantiq/files-3.3/arch/mips/lantiq/xway/dev-wifi-rt2x00.h index 060ca5027..941c26535 100644 --- a/target/linux/lantiq/files-3.3/arch/mips/lantiq/xway/dev-wifi-rt2x00.h +++ b/target/linux/lantiq/files-3.3/arch/mips/lantiq/xway/dev-wifi-rt2x00.h @@ -9,6 +9,6 @@  #ifndef _DEV_WIFI_RT2X00_H__  #define _DEV_WIFI_RT2X00_H__ -extern void ltq_register_rt2x00(const char *firmware); +extern void ltq_register_rt2x00(const char *firmware, const u8 *mac);  #endif diff --git a/target/linux/lantiq/files-3.3/arch/mips/lantiq/xway/mach-arv.c b/target/linux/lantiq/files-3.3/arch/mips/lantiq/xway/mach-arv.c index c300b9d42..4abb2d500 100644 --- a/target/linux/lantiq/files-3.3/arch/mips/lantiq/xway/mach-arv.c +++ b/target/linux/lantiq/files-3.3/arch/mips/lantiq/xway/mach-arv.c @@ -597,6 +597,7 @@ arv4520pw_init(void)  	ltq_register_pci(<q_pci_data);  	ltq_register_tapi();  	arv_register_ethernet(ARV4520PW_MAC_ADDR); +	ltq_register_rt2x00(NULL, (const u8 *) ltq_eth_data.mac.sa_data);  	xway_register_dwc(ARV4520PW_USB);  	gpio_request(ARV4520PW_SWITCH_RESET, "switch"); @@ -686,7 +687,7 @@ arv7525pw_init(void)  	ltq_pci_data.irq[14] = (INT_NUM_IM3_IRL0 + 31);  	ltq_register_pci(<q_pci_data);  	ltq_eth_data.mii_mode = PHY_INTERFACE_MODE_MII; -	ltq_register_rt2x00("RT2860.eeprom"); +	ltq_register_rt2x00("RT2860.eeprom", NULL);  	ltq_register_tapi();  	arv_register_ethernet(ARV7525P_MAC_ADDR);  } @@ -773,7 +774,7 @@ arv752dpw_init(void)  	ltq_pci_data.gpio |= PCI_EXIN1 | PCI_REQ2;  	ltq_register_pci(<q_pci_data);  	xway_register_dwc(ARV752DPW22_USB); -	ltq_register_rt2x00("RT2860.eeprom"); +	ltq_register_rt2x00("RT2860.eeprom", NULL);  	arv_register_ethernet(ARV752DPW22_MAC_ADDR);  	gpio_request(ARV752DPW22_RELAY, "relay");  	gpio_set_value(ARV752DPW22_RELAY, 1);  | 
