xref: /openbmc/u-boot/net/net_rand.h (revision 6e7adf7037c76f081b149685fa5e978e2ddf2a22)
1eafc8db0SJoe Hershberger /*
2eafc8db0SJoe Hershberger  *	Copied from LiMon - BOOTP.
3eafc8db0SJoe Hershberger  *
4eafc8db0SJoe Hershberger  *	Copyright 1994, 1995, 2000 Neil Russell.
5eafc8db0SJoe Hershberger  *	(See License)
6eafc8db0SJoe Hershberger  *	Copyright 2000 Paolo Scaffardi
7eafc8db0SJoe Hershberger  */
8eafc8db0SJoe Hershberger 
9eafc8db0SJoe Hershberger #ifndef __NET_RAND_H__
10eafc8db0SJoe Hershberger #define __NET_RAND_H__
11eafc8db0SJoe Hershberger 
1299e139d5SMichael Walle #include <common.h>
13eafc8db0SJoe Hershberger 
14eafc8db0SJoe Hershberger /*
1599e139d5SMichael Walle  * Return a seed for the PRNG derived from the eth0 MAC address.
16eafc8db0SJoe Hershberger  */
seed_mac(void)1799e139d5SMichael Walle static inline unsigned int seed_mac(void)
1899e139d5SMichael Walle {
19*b044cc1dSJimmy Du 	unsigned char enetaddr[ARP_HLEN];
2099e139d5SMichael Walle 	unsigned int seed;
2199e139d5SMichael Walle 
2299e139d5SMichael Walle 	/* get our mac */
23*b044cc1dSJimmy Du 	memcpy(enetaddr, eth_get_ethaddr(), ARP_HLEN);
2499e139d5SMichael Walle 
2599e139d5SMichael Walle 	seed = enetaddr[5];
2699e139d5SMichael Walle 	seed ^= enetaddr[4] << 8;
2799e139d5SMichael Walle 	seed ^= enetaddr[3] << 16;
2899e139d5SMichael Walle 	seed ^= enetaddr[2] << 24;
2999e139d5SMichael Walle 	seed ^= enetaddr[1];
3099e139d5SMichael Walle 	seed ^= enetaddr[0] << 8;
3199e139d5SMichael Walle 
3299e139d5SMichael Walle 	return seed;
3399e139d5SMichael Walle }
34eafc8db0SJoe Hershberger 
35eafc8db0SJoe Hershberger /*
3699e139d5SMichael Walle  * Seed the random number generator using the eth0 MAC address.
37eafc8db0SJoe Hershberger  */
srand_mac(void)3899e139d5SMichael Walle static inline void srand_mac(void)
3999e139d5SMichael Walle {
4099e139d5SMichael Walle 	srand(seed_mac());
4199e139d5SMichael Walle }
42eafc8db0SJoe Hershberger 
43eafc8db0SJoe Hershberger #endif /* __NET_RAND_H__ */
44