From owner-p4-projects@FreeBSD.ORG Wed Feb 6 16:54:39 2013 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 7571CD22; Wed, 6 Feb 2013 16:54:39 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by hub.freebsd.org (Postfix) with ESMTP id 37A94D20 for ; Wed, 6 Feb 2013 16:54:39 +0000 (UTC) (envelope-from bz@freebsd.org) Received: from skunkworks.freebsd.org (skunkworks.freebsd.org [IPv6:2001:1900:2254:2068::682:0]) by mx1.freebsd.org (Postfix) with ESMTP id 28C0A915 for ; Wed, 6 Feb 2013 16:54:39 +0000 (UTC) Received: from skunkworks.freebsd.org ([127.0.1.74]) by skunkworks.freebsd.org (8.14.6/8.14.6) with ESMTP id r16GsdeP067801 for ; Wed, 6 Feb 2013 16:54:39 GMT (envelope-from bz@freebsd.org) Received: (from perforce@localhost) by skunkworks.freebsd.org (8.14.6/8.14.6/Submit) id r16Gsdl9067798 for perforce@freebsd.org; Wed, 6 Feb 2013 16:54:39 GMT (envelope-from bz@freebsd.org) Date: Wed, 6 Feb 2013 16:54:39 GMT Message-Id: <201302061654.r16Gsdl9067798@skunkworks.freebsd.org> X-Authentication-Warning: skunkworks.freebsd.org: perforce set sender to bz@freebsd.org using -f From: "Bjoern A. Zeeb" Subject: PERFORCE change 221800 for review To: Perforce Change Reviews Precedence: bulk X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.14 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 06 Feb 2013 16:54:39 -0000 http://p4web.freebsd.org/@@221800?ac=10 Change 221800 by bz@bz_zenith on 2013/02/06 16:53:47 Use the special Ethernet hardware address allocation scheme based on unit number (including some checks) for locally administered bit set so we can use the in-flash re-programmed addresses from atsectl(8). Affected files ... .. //depot/projects/ctsrd/beribsd/src/sys/dev/altera/atse/if_atse.c#7 edit Differences ... ==== //depot/projects/ctsrd/beribsd/src/sys/dev/altera/atse/if_atse.c#7 (text+ko) ==== @@ -679,6 +679,7 @@ { unsigned long hostid; uint32_t val4; + int unit; /* * Make sure to only ever do this once. Otherwise a reset would @@ -710,6 +711,31 @@ sc->atse_eth_addr[3] = atse_ethernet_option_bits[7]; sc->atse_eth_addr[4] = atse_ethernet_option_bits[8]; sc->atse_eth_addr[5] = atse_ethernet_option_bits[9]; + + /* + * If we find a locally administered address with a 0x0 ending + * adjust by device unit. If not and this is not the first + * Ethernet, go to random. + */ + unit = device_get_unit(sc->atse_dev); + if (unit == 0x00) + return (0); + + if (unit > 0x0f) { + device_printf(sc->atse_dev, "We do not support Ethernet " + "addresses for more than 16 MACs. Falling back to " + "random hadware address.\n"); + goto get_random; + } + if ((sc->atse_eth_addr[0] & 0x2) == 0 || + (sc->atse_eth_addr[5] & 0x0f) != 0x0) { + device_printf(sc->atse_dev, "Ethernet address not meeting our " + "multi-MAC standards. Falling back to random hadware " + "address.\n"); + goto get_random; + } + sc->atse_eth_addr[5] |= (unit & 0x0f); + return (0); get_random: