Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно

Новый участник


Сообщения: 10
Благодарности: 0

Профиль | Отправить PM | Цитировать


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 с этим патчем.

Отправлено: 07:15, 02-04-2008 | #9