Subject: Re: [PATCH v2 15/16] wl1251: Add sysfs file address for setting permanent mac address

From: Pali Rohár <[email-masked]>
Date: Tue, 10 Dec 2013 20:31:23 +0100

On Tuesday 10 December 2013 20:22:19 Dan Williams wrote:
> On Tue, 2013-12-10 at 18:52 +0100, Pali Rohár wrote:
> > On Tuesday 10 December 2013 18:49:22 Dan Williams wrote:
> > > On Tue, 2013-12-10 at 18:14 +0100, Pali Rohár wrote:
> > > > On Tuesday 10 December 2013 17:10:50 Pali Rohár wrote:
> > > > > On Tuesday 10 December 2013 16:49:23 Kalle Valo wrote:
> > > > > > Pali Rohár <[email-masked]> writes:
> > > > > > > Driver wl1251 generating mac address randomly at
> > > > > > > startup and there is no way to set permanent mac
> > > > > > > address via SET_IEEE80211_PERM_ADDR. This patch
> > > > > > > export sysfs file which can set permanent mac
> > > > > > > address by userspace helper program. Patch is
> > > > > > > needed for devices which do not store mac address
> > > > > > > in internal wl1251 eeprom.
> > > > > > > 
> > > > > > > Signed-off-by: Pali Rohár <[email-masked]>
> > > > > > 
> > > > > > We have ioctl() command for setting the mac address.
> > > > > 
> > > > > Really? Is there ioctl for setting permanent mac
> > > > > address? Can you show me it?
> > > > 
> > > > Now I looked at it again and I did not found any ioctl
> > > > for it. There is only ioctl cmd for getting address,
> > > > not setting it.
> > > > 
> > > > #define SIOCETHTOOL 0x8946
> > > > 
> > > > /* Get permanent hardware address */
> > > > #define ETHTOOL_GPERMADDR 0x00000020
> > > 
> > > Yeah, because it's supposed to be permanent and
> > > unchanging. Which means if there was an ioctl for it,
> > > that would be contrary to the purpose of a permanent MAC
> > > address.
> > > 
> > > I realize the N900 stores the WiFi MAC address completely
> > > differently than many other systems, and that's why this
> > > sysfs file was created.  I don't really have a great
> > > converged solution for that, other than what you've
> > > currently got, or perhaps adding SPERMADDR to ethtool. 
> > > One thing I *would* like though, is a restriction on the
> > > sysfs file such that if the permanent MAC is already set,
> > > it cannot be set again.  Otherwise the permanent MAC
> > > address isn't permanent at all.
> > > 
> > > Dan
> > 
> > Maybe another way could be to use request_firmware to load
> > address from userspace... Or what do you think?
> 
> That sounds like a great idea to try.  A number of devices
> either need stub firmware to read the MAC from EEPROM, or do
> use request_firmware() to load firmware before they read the
> MAC.  You may have to use request_firmware() synchronously
> though to ensure that the MAC is read before registering with
> mac80211.
> 
> Dan

So, if you like this idea, can you help me how to write udev rule 
which will run my own program (it print mac address) and send mac 
address when driver ask for mac address in request_firmware? 
Problem is that default udev rule for firmware trying to load data 
from /lib/firmware/... but in this case mac address first must be 
read from special location and converted to correct format.

-- 
Pali Rohár
[email-masked]