a1de55fb19937c9cb67c40731e456b88d9f18337
2 * Atheros AR71xx minimal nvram support
4 * Copyright (C) 2009 Gabor Juhos <juhosg@openwrt.org>
6 * This program is free software; you can redistribute it and/or modify it
7 * under the terms of the GNU General Public License version 2 as published
8 * by the Free Software Foundation.
11 #include <linux/kernel.h>
12 #include <linux/vmalloc.h>
13 #include <linux/errno.h>
14 #include <linux/init.h>
15 #include <linux/string.h>
16 #include <linux/etherdevice.h>
20 char *ath79_nvram_find_var(const char *name
, const char *buf
, unsigned buf_len
)
22 unsigned len
= strlen(name
);
25 if (buf_len
== 0 || len
== 0)
32 return memchr(buf
, (int) *name
, buf_len
);
34 last
= (char *) buf
+ buf_len
- len
;
35 for (cur
= (char *) buf
; cur
<= last
; cur
++)
36 if (cur
[0] == name
[0] && memcmp(cur
, name
, len
) == 0)
42 int ath79_nvram_parse_mac_addr(const char *nvram
, unsigned nvram_len
,
43 const char *name
, char *mac
)
50 buf
= vmalloc(nvram_len
);
54 memcpy(buf
, nvram
, nvram_len
);
55 buf
[nvram_len
- 1] = '\0';
57 mac_str
= ath79_nvram_find_var(name
, buf
, nvram_len
);
63 if (strlen(mac_str
) == 19 && mac_str
[0] == '"' && mac_str
[18] == '"') {
68 t
= sscanf(mac_str
, "%02hhx:%02hhx:%02hhx:%02hhx:%02hhx:%02hhx",
69 &mac
[0], &mac
[1], &mac
[2], &mac
[3], &mac
[4], &mac
[5]);
72 t
= sscanf(mac_str
, "%02hhx-%02hhx-%02hhx-%02hhx-%02hhx-%02hhx",
73 &mac
[0], &mac
[1], &mac
[2], &mac
[3], &mac
[4], &mac
[5]);