123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- /*
- * 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 <common.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__ */
|