/*
 * Copyright (c) 2020 Linaro Ltd
 *
 * SPDX-License-Identifier: Apache-2.0
 */

#ifndef ZEPHYR_DRIVERS_ETHERNET_ETH_H_
#define ZEPHYR_DRIVERS_ETHERNET_ETH_H_

#include <zephyr/types.h>
#include <random/rand32.h>

/* helper macro to return mac address octet from local_mac_address prop */
#define NODE_MAC_ADDR_OCTET(node, n) DT_PROP_BY_IDX(node, local_mac_address, n)

/* Determine if a mac address is all 0's */
#define NODE_MAC_ADDR_NULL(node) \
	((NODE_MAC_ADDR_OCTET(node, 0) == 0) && \
	 (NODE_MAC_ADDR_OCTET(node, 1) == 0) && \
	 (NODE_MAC_ADDR_OCTET(node, 2) == 0) && \
	 (NODE_MAC_ADDR_OCTET(node, 3) == 0) && \
	 (NODE_MAC_ADDR_OCTET(node, 4) == 0) && \
	 (NODE_MAC_ADDR_OCTET(node, 5) == 0))

/* Given a device tree node for an ethernet controller will
 * returns false if there is no local-mac-address property or
 * the property is all zero's.  Otherwise will return True
 */
#define NODE_HAS_VALID_MAC_ADDR(node) \
	UTIL_AND(DT_NODE_HAS_PROP(node, local_mac_address),\
			(!NODE_MAC_ADDR_NULL(node)))

static inline void gen_random_mac(uint8_t *mac_addr, uint8_t b0, uint8_t b1, uint8_t b2)
{
	uint32_t entropy;

	entropy = sys_rand32_get();

	mac_addr[0] = b0;
	mac_addr[1] = b1;
	mac_addr[2] = b2;

	/* Set MAC address locally administered, unicast (LAA) */
	mac_addr[0] |= 0x02;

	mac_addr[3] = (entropy >> 16) & 0xff;
	mac_addr[4] = (entropy >>  8) & 0xff;
	mac_addr[5] = (entropy >>  0) & 0xff;
}

#endif /* ZEPHYR_DRIVERS_ETHERNET_ETH_H_ */
