Module Name: src Committed By: msaitoh Date: Mon Jun 28 01:43:39 UTC 2010
Modified Files: src/sys/dev/pci: if_wm.c Log Message: Fix a bug that wm_attach() fails after reading MAC address. Fixes PR#43533. Fix an uninitialized value on some cases. To generate a diff of this commit: cvs rdiff -u -r1.209 -r1.210 src/sys/dev/pci/if_wm.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/dev/pci/if_wm.c diff -u src/sys/dev/pci/if_wm.c:1.209 src/sys/dev/pci/if_wm.c:1.210 --- src/sys/dev/pci/if_wm.c:1.209 Fri Jun 25 04:35:54 2010 +++ src/sys/dev/pci/if_wm.c Mon Jun 28 01:43:39 2010 @@ -1,4 +1,4 @@ -/* $NetBSD: if_wm.c,v 1.209 2010/06/25 04:35:54 msaitoh Exp $ */ +/* $NetBSD: if_wm.c,v 1.210 2010/06/28 01:43:39 msaitoh Exp $ */ /* * Copyright (c) 2001, 2002, 2003, 2004 Wasabi Systems, Inc. @@ -76,7 +76,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: if_wm.c,v 1.209 2010/06/25 04:35:54 msaitoh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: if_wm.c,v 1.210 2010/06/28 01:43:39 msaitoh Exp $"); #include "rnd.h" @@ -1607,10 +1607,11 @@ KASSERT(prop_data_size(ea) == ETHER_ADDR_LEN); memcpy(enaddr, prop_data_data_nocopy(ea), ETHER_ADDR_LEN); } else { - if (wm_read_mac_addr(sc, enaddr) != 0) + if (wm_read_mac_addr(sc, enaddr) != 0) { aprint_error_dev(sc->sc_dev, "unable to read Ethernet address\n"); - return; + return; + } } aprint_normal_dev(sc->sc_dev, "Ethernet address %s\n", @@ -4701,12 +4702,10 @@ wm_read_mac_addr(struct wm_softc *sc, uint8_t *enaddr) { uint16_t myea[ETHER_ADDR_LEN / 2]; - uint16_t offset; + uint16_t offset = EEPROM_OFF_MACADDR; int do_invert = 0; - if (sc->sc_funcid == 0) - offset = EEPROM_OFF_MACADDR; - else { + if (sc->sc_funcid != 0) switch (sc->sc_type) { case WM_T_82580: case WM_T_82580ER: @@ -4763,7 +4762,7 @@ do_invert = 1; break; } - } + do_read: if (wm_read_eeprom(sc, offset, sizeof(myea) / sizeof(myea[0]), myea) != 0) {