Skip to content

Commit b73fff5

Browse files
committed
drivers: ethernet: Add Helper function to load MAC address
Given an ethernet MAC configuration struct, load a MAC address into a provided array. Signed-off-by: Pieter De Gendt <[email protected]>
1 parent 63c5215 commit b73fff5

File tree

1 file changed

+34
-0
lines changed

1 file changed

+34
-0
lines changed

drivers/ethernet/eth.h

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
#define ZEPHYR_DRIVERS_ETHERNET_ETH_H_
99

1010
#include <zephyr/types.h>
11+
#include <zephyr/net/ethernet.h>
1112
#include <zephyr/random/random.h>
1213

1314
/* helper macro to return mac address octet from local_mac_address prop */
@@ -42,4 +43,37 @@ static inline void gen_random_mac(uint8_t *mac_addr, uint8_t b0, uint8_t b1, uin
4243
sys_rand_get(&mac_addr[3], 3U);
4344
}
4445

46+
static inline int net_eth_mac_load(const struct net_eth_mac_config *cfg, uint8_t *mac_addr)
47+
{
48+
if (cfg == NULL || cfg->type == NET_ETH_MAC_DEFAULT) {
49+
return -ENODATA;
50+
}
51+
52+
/* Copy the static part */
53+
memcpy(mac_addr, cfg->addr, cfg->addr_len);
54+
55+
if (cfg->type == NET_ETH_MAC_STATIC && cfg->addr_len == NET_ETH_ADDR_LEN) {
56+
/* Complete static address */
57+
return 0;
58+
}
59+
60+
if (cfg->type == NET_ETH_MAC_RANDOM) {
61+
sys_rand_get(&mac_addr[cfg->addr_len], NET_ETH_ADDR_LEN - cfg->addr_len);
62+
63+
/* Set MAC address locally administered, unicast (LAA) */
64+
mac_addr[0] |= 0x02;
65+
66+
return 0;
67+
}
68+
69+
#if defined(CONFIG_NVMEM)
70+
if (cfg->type == NET_ETH_MAC_NVMEM) {
71+
return nvmem_cell_read(&cfg->cell, &mac_addr[cfg->addr_len], 0,
72+
NET_ETH_ADDR_LEN - cfg->addr_len);
73+
}
74+
#endif
75+
76+
return -ENODATA;
77+
}
78+
4579
#endif /* ZEPHYR_DRIVERS_ETHERNET_ETH_H_ */

0 commit comments

Comments
 (0)