> I have the same problem for that i can't use Solaris (09/07 Developers
> Edition)... without ethernet/internet connectivity i can't use it like
> a server... :(
> Now I try the solution of Jürgen Keil.


It seems that Masayuki Murayama's nfo-2.4.5 driver
knows about the problem with the reversed MAC format
on some of the nvidia nic hardware.

It seems there is code to swap the MAC under certain conditions:

nfo-2.4.5/nfo_gem.c:
  2000          /*
  2001           * XXX - As the factory mac address is set in incorrect format,
  2002           * aka in reversed order after power-on, we must re-write it.
  2003           * But as there are no copies of the original mac address 
anywhere
  2004           * else, it is gone after we fix it.
  2005           */
  2006          mac_addr = lp->factory_mac_addr;
  2007          val = INL(dp, TxPOLL);
  2008          DPRINTF(0, (CE_CONT, "!%s: %s: TxPOLL:%x", dp->name, __func__, 
val));
  2009
  2010          if ((val & TxPOLL_MACADDR_REV) == 0 &&
  2011              (lp->chip->hwcap & CAP_CORRECT_MAC) == 0) {
  2012                  /* original format */
  2013                  dp->dev_addr.ether_addr_octet[0] = mac_addr[1] >> (1*8);
  2014                  dp->dev_addr.ether_addr_octet[1] = mac_addr[1] >> (0*8);
  2015                  dp->dev_addr.ether_addr_octet[2] = mac_addr[0] >> (3*8);
  2016                  dp->dev_addr.ether_addr_octet[3] = mac_addr[0] >> (2*8);
  2017                  dp->dev_addr.ether_addr_octet[4] = mac_addr[0] >> (1*8);
  2018                  dp->dev_addr.ether_addr_octet[5] = mac_addr[0] >> (0*8);
  2019                  /* mark that we will change it in correct format */
  2020                  OUTL(dp, TxPOLL, val | TxPOLL_MACADDR_REV);
  2021          } else {
  2022                  /* mac address format has been fixed */
  2023                  dp->dev_addr.ether_addr_octet[0] = mac_addr[0] >> (0*8);
  2024                  dp->dev_addr.ether_addr_octet[1] = mac_addr[0] >> (1*8);
  2025                  dp->dev_addr.ether_addr_octet[2] = mac_addr[0] >> (2*8);
  2026                  dp->dev_addr.ether_addr_octet[3] = mac_addr[0] >> (3*8);
  2027                  dp->dev_addr.ether_addr_octet[4] = mac_addr[1] >> (0*8);
  2028                  dp->dev_addr.ether_addr_octet[5] = mac_addr[1] >> (1*8);
  2029          }



Solaris' nge driver doesn't seem to know about the problem with
the reversed MAC:

http://src.opensolaris.org/source/xref/onnv/onnv-gate/usr/src/uts/common/io/nge/nge_chip.c#1000

  1001          /*
  1002           * Reading the unicast mac address table
  1003           */
  1004          if (ngep->nge_chip_state == NGE_CHIP_INITIAL) {
  1005                  uaddr1.addr_val = nge_reg_get32(ngep, NGE_UNI_ADDR1);
  1006                  mac = uaddr1.addr_bits.addr;
  1007                  mac <<= 32;
  1008                  mac |= nge_reg_get32(ngep, NGE_UNI_ADDR0);
  1009                  if (mac != 0ULL && mac != ~0ULL) {
  1010                          ngep->chipinfo.hw_mac_addr = mac;
  1011                          for (i = ETHERADDRL; i-- != 0; ) {
  1012                                  ngep->chipinfo.vendor_addr.addr[i] =
  1013                                      (uchar_t)mac;
  1014                                  ngep->cur_uni_addr.addr[i] = 
(uchar_t)mac;
  1015                                  mac >>= 8;
  1016                          }
  1017                          ngep->chipinfo.vendor_addr.set = 1;
  1018                  }
  1019          }


I see no code in nge that looks at the NGE_TX_POLL 0x10c register,
bit 0x8000 for the case of reversed MACs.....
 
 
This message posted from opensolaris.org
_______________________________________________
opensolaris-help mailing list
[email protected]

Reply via email to