2012-12-11 10:10:01

by Daniel Golle

[permalink] [raw]
Subject: [PATCH 3/3] rt2x00: add platform_data mac address


Signed-off-by: Daniel Golle <[email protected]>

diff --git a/drivers/net/wireless/rt2x00/rt2x00.h b/drivers/net/wireless/rt2x00/rt2x00.h
index c67e769..8b82e77 100644
--- a/drivers/net/wireless/rt2x00/rt2x00.h
+++ b/drivers/net/wireless/rt2x00/rt2x00.h
@@ -1294,6 +1294,7 @@ static inline void rt2x00debug_dump_frame(struct rt2x00_dev *rt2x00dev,
*/
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.
diff --git a/drivers/net/wireless/rt2x00/rt2x00dev.c b/drivers/net/wireless/rt2x00/rt2x00dev.c
index b7856bf..f9868d1 100644
--- a/drivers/net/wireless/rt2x00/rt2x00dev.c
+++ b/drivers/net/wireless/rt2x00/rt2x00dev.c
@@ -826,6 +826,18 @@ static void rt2x00lib_rate(struct ieee80211_rate *entry,
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)
{
diff --git a/drivers/net/wireless/rt2x00/rt61pci.c b/drivers/net/wireless/rt2x00/rt61pci.c
index f95792c..7dbc0ba 100644
--- a/drivers/net/wireless/rt2x00/rt61pci.c
+++ b/drivers/net/wireless/rt2x00/rt61pci.c
@@ -2392,6 +2392,7 @@ static int rt61pci_validate_eeprom(struct rt2x00_dev *rt2x00dev)
u32 reg;
u16 word;
u8 *mac;
+ const u8 *pdata_mac;
s8 value;

rt2x00pci_register_read(rt2x00dev, E2PROM_CSR, &reg);
@@ -2412,7 +2413,11 @@ static int rt61pci_validate_eeprom(struct rt2x00_dev *rt2x00dev)
/*
* 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)) {
eth_random_addr(mac);
EEPROM(rt2x00dev, "MAC: %pM\n", mac);
diff --git a/include/linux/rt2x00_platform.h b/include/linux/rt2x00_platform.h
index b4c7768..e10377e 100644
--- 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;
--
1.8.0.1


Attachments:
(No filename) (2.39 kB)
(No filename) (836.00 B)
Download all attachments

2012-12-11 21:51:35

by Gertjan van Wingerde

[permalink] [raw]
Subject: Re: [PATCH 3/3] rt2x00: add platform_data mac address

Hi Daniel,

On 11 dec. 2012, at 11:04, Daniel Golle <[email protected]> wrote:

>
> Signed-off-by: Daniel Golle <[email protected]>

Again we need a proper patch description.

And for this patch I have the same question as for the previous patch: why do we need to arrange this via platform data, as opposed to using the standard user space ifconfig facility to set a mac address?

As a second question: why is this only implemented for rt61pci, and not the other PCI / SOC drivers?

---
Gertjan

>
> diff --git a/drivers/net/wireless/rt2x00/rt2x00.h b/drivers/net/wireless/rt2x00/rt2x00.h
> index c67e769..8b82e77 100644
> --- a/drivers/net/wireless/rt2x00/rt2x00.h
> +++ b/drivers/net/wireless/rt2x00/rt2x00.h
> @@ -1294,6 +1294,7 @@ static inline void rt2x00debug_dump_frame(struct rt2x00_dev *rt2x00dev,
> */
> 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.
> diff --git a/drivers/net/wireless/rt2x00/rt2x00dev.c b/drivers/net/wireless/rt2x00/rt2x00dev.c
> index b7856bf..f9868d1 100644
> --- a/drivers/net/wireless/rt2x00/rt2x00dev.c
> +++ b/drivers/net/wireless/rt2x00/rt2x00dev.c
> @@ -826,6 +826,18 @@ static void rt2x00lib_rate(struct ieee80211_rate *entry,
> 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)
> {
> diff --git a/drivers/net/wireless/rt2x00/rt61pci.c b/drivers/net/wireless/rt2x00/rt61pci.c
> index f95792c..7dbc0ba 100644
> --- a/drivers/net/wireless/rt2x00/rt61pci.c
> +++ b/drivers/net/wireless/rt2x00/rt61pci.c
> @@ -2392,6 +2392,7 @@ static int rt61pci_validate_eeprom(struct rt2x00_dev *rt2x00dev)
> u32 reg;
> u16 word;
> u8 *mac;
> + const u8 *pdata_mac;
> s8 value;
>
> rt2x00pci_register_read(rt2x00dev, E2PROM_CSR, &reg);
> @@ -2412,7 +2413,11 @@ static int rt61pci_validate_eeprom(struct rt2x00_dev *rt2x00dev)
> /*
> * 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)) {
> eth_random_addr(mac);
> EEPROM(rt2x00dev, "MAC: %pM\n", mac);
> diff --git a/include/linux/rt2x00_platform.h b/include/linux/rt2x00_platform.h
> index b4c7768..e10377e 100644
> --- 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;
> --
> 1.8.0.1
>

2013-01-25 12:08:48

by Helmut Schaa

[permalink] [raw]
Subject: Re: [PATCH 3/3] rt2x00: add platform_data mac address

Hi,

On Tue, Dec 11, 2012 at 10:51 PM, Gertjan van Wingerde
<[email protected]> wrote:
> And for this patch I have the same question as for the previous patch: why do we need to arrange this via platform data,
> as opposed to using the standard user space ifconfig facility to set a mac address?

This looks fine to me. I'd also prefer to pass in a MAC address from
the platform data on SoC devices
instead of having to write some user space code. And this is how it is
done by other drivers as well.

> As a second question: why is this only implemented for rt61pci, and not the other PCI / SOC drivers?

Good point.

Helmut