u-boot/net/net_rand.h
Tom Rini cb3ce95401 global: Drop common.h inclusion
In order to make it easier to move on to dropping common.h from code
directly, remove common.h inclusion from the rest of the header file
which had been including it.

Reviewed-by: Simon Glass <sjg@chromium.org>
Signed-off-by: Tom Rini <trini@konsulko.com>
2023-12-21 08:54:37 -05:00

60 lines
1.0 KiB
C

/*
* Copied from LiMon - BOOTP.
*
* Copyright 1994, 1995, 2000 Neil Russell.
* (See License)
* Copyright 2000 Paolo Scaffardi
*/
#ifndef __NET_RAND_H__
#define __NET_RAND_H__
#include <dm/uclass.h>
#include <rng.h>
/*
* Return a seed for the PRNG derived from the eth0 MAC address.
*/
static inline unsigned int seed_mac(void)
{
unsigned char enetaddr[ARP_HLEN];
unsigned int seed;
/* get our mac */
memcpy(enetaddr, eth_get_ethaddr(), ARP_HLEN);
seed = enetaddr[5];
seed ^= enetaddr[4] << 8;
seed ^= enetaddr[3] << 16;
seed ^= enetaddr[2] << 24;
seed ^= enetaddr[1];
seed ^= enetaddr[0] << 8;
return seed;
}
/*
* Seed the random number generator using the eth0 MAC address.
*/
static inline void srand_mac(void)
{
int ret;
struct udevice *devp;
u32 randv = 0;
if (IS_ENABLED(CONFIG_DM_RNG)) {
ret = uclass_get_device(UCLASS_RNG, 0, &devp);
if (ret) {
ret = dm_rng_read(devp, &randv, sizeof(randv));
if (ret < 0)
randv = 0;
}
}
if (randv)
srand(randv);
else
srand(seed_mac());
}
#endif /* __NET_RAND_H__ */