Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1567925 > unrolled thread
| Started by | Kalle Valo <kvalo@codeaurora.org> |
|---|---|
| First post | 2017-01-27 09:00 +0100 |
| Last post | 2017-01-27 09:00 +0100 |
| Articles | 1 — 1 participant |
Back to article view | Back to linux.kernel
This discussion starts older than the indexed window; earlier articles aren't shown. The article labeled Started by
below is the oldest one visible, not the original post.
Re: [PATCH 5/6] wl1251: Parse and use MAC address from supplied NVS data Kalle Valo <kvalo@codeaurora.org> - 2017-01-27 09:00 +0100
| From | Kalle Valo <kvalo@codeaurora.org> |
|---|---|
| Date | 2017-01-27 09:00 +0100 |
| Subject | Re: [PATCH 5/6] wl1251: Parse and use MAC address from supplied NVS data |
| Message-ID | <t49BT-1ni-3@gated-at.bofh.it> |
Pali Rohár <pali.rohar@gmail.com> 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@gmail.com>
[...]
> +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
Back to top | Article view | linux.kernel
csiph-web