mar,
1. Как я понял функции в if_bge.c определены 2 раза:
Код:
№строки код
326 static int bge_get_eaddr_mem(struct bge_softc *, uint8_t[]);
327 static int bge_get_eaddr_nvram(struct bge_softc *, uint8_t[]);
328 int bge_get_eaddr_eeprom(struct bge_softc *, uint8_t[]);
329 static int bge_get_eaddr(struct bge_softc *, uint8_t[]);
Код:
№строки код
4689 static int
4690 bge_get_eaddr_mem(struct bge_softc *sc, uint8_t ether_addr[])
4691 {
4692 uint32_t mac_addr;
4693 int ret = 1;
4694
4695 mac_addr = bge_readmem_ind(sc, 0x0c14);
4696 if ((mac_addr >> 16) == 0x484b) {
4697 ether_addr[0] = (uint8_t)(mac_addr >> 8);
4698 ether_addr[1] = (uint8_t)mac_addr;
4699 mac_addr = bge_readmem_ind(sc, 0x0c18);
4700 ether_addr[2] = (uint8_t)(mac_addr >> 24);
4701 ether_addr[3] = (uint8_t)(mac_addr >> 16);
4702 ether_addr[4] = (uint8_t)(mac_addr >> 8);
4703 ether_addr[5] = (uint8_t)mac_addr;
4704 ret = 0;
4705 }
4706 return ret;
4707 }
4708
4709 static int
4710 bge_get_eaddr_nvram(struct bge_softc *sc, uint8_t ether_addr[])
4711 {
4712 int mac_offset = BGE_EE_MAC_OFFSET;
4713
4714 if (sc->bge_asicrev == BGE_ASICREV_BCM5906)
4715 mac_offset = BGE_EE_MAC_OFFSET_5906;
4716
4717 return bge_read_nvram(sc, ether_addr, mac_offset + 2, ETHER_ADDR_LEN);
4718 }
4719
4720 static int
4721 bge_get_eaddr_eeprom(struct bge_softc *sc, uint8_t ether_addr[])
4722 {
4723 if (!(sc->bge_flags & BGE_FLAG_EEPROM))
4724 return 1;
4725
4726 return bge_read_eeprom(sc, ether_addr, BGE_EE_MAC_OFFSET + 2,
4727 ETHER_ADDR_LEN);
4728 }
4729
4730 static int
4731 bge_get_eaddr(struct bge_softc *sc, uint8_t eaddr[])
4732 {
4733 static const bge_eaddr_fcn_t bge_eaddr_funcs[] = {
4734 /* NOTE: Order is critical */
4735 bge_get_eaddr_mem,
4736 bge_get_eaddr_nvram,
4737 bge_get_eaddr_eeprom,
4738 NULL
4739 };
4740 const bge_eaddr_fcn_t *func;
4741
4742 for (func = bge_eaddr_funcs; *func != NULL; ++func) {
4743 if ((*func)(sc, eaddr) == 0)
4744 break;
4745 }
4746 return (*func == NULL ? ENXIO : 0);
4747 }
2. В результате польностью снес 6.3 и установил 7.0-Release. Но проблема осталась и на 7-й ветке тоже. Конечно быть может проблема с /dev/brain и /dev/hands :-D. Но все-таки хочется разобраться.
Также предлагают патч
http://people.freebsd.org/~benjsc/do...-bge-5906.diff, предназначенный, как я понял, для -current. Только по опыту установки нового ядра со старым окружением как-то не хочется компилить -current с этим патчем.