Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 27 Mar 2002 23:13:13 -0800 (PST)
From:      Genya Sugiyama <g-sugiyama@nifty.com>
To:        freebsd-gnats-submit@FreeBSD.org
Subject:   kern/36410: Bad mac address return from FNW-9803-T (ADMtek 983B) NIC
Message-ID:  <200203280713.g2S7DDX69612@freefall.freebsd.org>

next in thread | raw e-mail | index | archive | help

>Number:         36410
>Category:       kern
>Synopsis:       Bad mac address return from FNW-9803-T (ADMtek 983B) NIC
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    freebsd-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          change-request
>Submitter-Id:   current-users
>Arrival-Date:   Wed Mar 27 23:20:01 PST 2002
>Closed-Date:
>Last-Modified:
>Originator:     Genya Sugiyama
>Release:        FreeBSD 4.5-STABLE
>Organization:
>Environment:
FreeBSD ak73.home 4.5-STABLE FreeBSD 4.5-STABLE #13:
 Thu Mar 28 15:29:48 JST 2002 
    genya@ak73.home:/usr/export/src/sys/compile/AK73  i386
>Description:
I use FNW-9803-T ethernet card. (ADMtek 983B)
It released PLANEX COMMUNICATIONS INC.(TAIWAN) in japan.

it's dmesg was

dc0: <ADMtek AN985 10/100BaseTX> port 0xdc00-0xdcff \
     mem 0xe5810000-0xe58103ff irq 5 at device 10.0 on pci0
dc0: Ethernet address: 08:00:08:00:08:00

it's correct mac addres is 00:90:cc:xx:xx:xx

>How-To-Repeat:
      
>Fix:
I rewrited if_dc.c and if_dcreg.h.

*** /usr/src/sys/pci/if_dcreg.h.org	Tue Feb 26 22:35:49 2002
--- /usr/src/sys/pci/if_dcreg.h	Thu Mar 28 09:29:18 2002
***************
*** 77,82 ****
--- 77,84 ----
  #define DC_TYPE_PNIC		0xA	/* 82c168/82c169 PNIC I */
  #define DC_TYPE_CONEXANT        0xC     /* Conexant LANfinity RS7112 */
  
+ #define DC_TYPE_AN983		0xFF	/* ADMtek AN983B CentaurB */
+ 
  #define DC_IS_MACRONIX(x)			\
  	(x->dc_type == DC_TYPE_98713 ||		\
  	 x->dc_type == DC_TYPE_98713A ||	\
***************
*** 84,89 ****
--- 86,92 ----
  
  #define DC_IS_ADMTEK(x)				\
  	(x->dc_type == DC_TYPE_AL981 ||		\
+ 	 x->dc_type == DC_TYPE_AN983 ||		\
  	 x->dc_type == DC_TYPE_AN985)
  
  #define DC_IS_INTEL(x)		(x->dc_type == DC_TYPE_21143)


*** /usr/src/sys/pci/if_dc.c.org	Tue Feb 26 22:35:49 2002
--- /usr/src/sys/pci/if_dc.c	Thu Mar 28 09:27:06 2002
***************
*** 1669,1675 ****
  {
  	int			s, tmp = 0;
  	u_char			eaddr[ETHER_ADDR_LEN];
! 	u_int32_t		command;
  	struct dc_softc		*sc;
  	struct ifnet		*ifp;
  	u_int32_t		revision;
--- 1669,1675 ----
  {
  	int			s, tmp = 0;
  	u_char			eaddr[ETHER_ADDR_LEN];
! 	u_int32_t		command, reg;
  	struct dc_softc		*sc;
  	struct ifnet		*ifp;
  	u_int32_t		revision;
***************
*** 1775,1781 ****
  		break;
  	case DC_DEVICEID_AN985:
  	case DC_DEVICEID_EN2242:
! 		sc->dc_type = DC_TYPE_AN985;
  		sc->dc_flags |= DC_TX_USE_TX_INTR;
  		sc->dc_flags |= DC_TX_ADMTEK_WAR;
  		sc->dc_pmode = DC_PMODE_MII;
--- 1775,1791 ----
  		break;
  	case DC_DEVICEID_AN985:
  	case DC_DEVICEID_EN2242:
! 		reg = pci_read_config(dev, DC_PCI_CSID, 4);
! 		/* printf("CSID=%08x\n", reg); */
! 		switch (reg) {
! 		case 0x980314ea: /* FNW-9803-T */
! 		case 0xa11b1259: /* Corega */
! 			sc->dc_type = DC_TYPE_AN983;
! 			break;
! 		default:
! 			sc->dc_type = DC_TYPE_AN985;
! 			break;
! 		}
  		sc->dc_flags |= DC_TX_USE_TX_INTR;
  		sc->dc_flags |= DC_TX_ADMTEK_WAR;
  		sc->dc_pmode = DC_PMODE_MII;
***************
*** 1900,1905 ****
--- 1910,1916 ----
  		dc_read_eeprom(sc, (caddr_t)&eaddr, DC_EE_NODEADDR, 3, 0);
  		break;
  	case DC_TYPE_AL981:
+ 	case DC_TYPE_AN983:
  	case DC_TYPE_AN985:
  		dc_read_eeprom(sc, (caddr_t)&eaddr, DC_AL_EE_NODEADDR, 3, 0);
  		break;

>Release-Note:
>Audit-Trail:
>Unformatted:

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-bugs" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200203280713.g2S7DDX69612>