Pali Rohár <pali.rohar@xxxxxxxxx> writes: > This patch implements parsing MAC address from NVS data which are sent to > wl1251 chip. Calibration NVS data could contain valid MAC address and it > will be used instead randomly generated. > > This patch also move code for requesting NVS data from userspace to driver > initialization code to make sure that NVS data will be there at time when > permanent MAC address is needed. > > Calibration NVS data for wl1251 are model specific. Every one device with > wl1251 chip should have been calibrated in factory and needs to provide own > calibration data. > > Default example wl1251-nvs.bin data found in linux-firmware repository and > contains MAC address 00:00:20:07:03:09. So this MAC address is marked as > invalid as it is not real device specific address, just example one. > > Format of calibration NVS data can be found at: > http://notaz.gp2x.de/misc/pnd/wl1251/nvs_map.txt > > Signed-off-by: Pali Rohár <pali.rohar@xxxxxxxxx> [...] > +static int wl1251_read_nvs_mac(struct wl1251 *wl) > +{ > + u8 mac[ETH_ALEN]; > + int i; > + > + if (wl->nvs_len < 0x24) > + return -ENODATA; > + > + /* length is 2 and data address is 0x546c (mask is 0xfffe) */ > + if (wl->nvs[0x19] != 2 || wl->nvs[0x1a] != 0x6d || wl->nvs[0x1b] != 0x54) > + return -EINVAL; > + > + /* MAC is stored in reverse order */ > + for (i = 0; i < ETH_ALEN; i++) > + mac[i] = wl->nvs[0x1c + ETH_ALEN - i - 1]; No magic numbers, please. Replace all nvs offsets with proper defines to make the code more readable. -- Kalle Valo